├── .npmignore ├── .gitignore ├── src ├── syntax.grammar.d.ts ├── tokens.ts ├── index.ts └── syntax.grammar ├── dev ├── vite.config.js ├── watch.cjs ├── index.html ├── print-lezer-tree.ts └── index.ts ├── replit.nix ├── .replit ├── README.md ├── LICENSE ├── package.json └── yarn.lock /.npmignore: -------------------------------------------------------------------------------- 1 | example.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist -------------------------------------------------------------------------------- /src/syntax.grammar.d.ts: -------------------------------------------------------------------------------- 1 | import { Parser } from "@lezer/common"; 2 | 3 | export declare const parser: Parser; 4 | -------------------------------------------------------------------------------- /dev/vite.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: [], 3 | root: "dev", 4 | server: { 5 | host: '0.0.0.0', 6 | hmr: { 7 | clientPort: 443, 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /replit.nix: -------------------------------------------------------------------------------- 1 | { pkgs }: { 2 | deps = [ 3 | pkgs.nodePackages.prettier 4 | pkgs.nodejs-16_x 5 | pkgs.nodePackages.yarn 6 | pkgs.nodePackages.typescript-language-server 7 | ]; 8 | } -------------------------------------------------------------------------------- /.replit: -------------------------------------------------------------------------------- 1 | run="yarn dev" 2 | 3 | [packager] 4 | language = "nodejs-yarn" 5 | [packager.features] 6 | packageSearch = true 7 | 8 | [languages.js] 9 | pattern = "**/*.ts" 10 | [languages.js.languageServer] 11 | start = ["typescript-language-server", "--stdio"] -------------------------------------------------------------------------------- /dev/watch.cjs: -------------------------------------------------------------------------------- 1 | const {watch} = require("@codemirror/buildhelper") 2 | const {resolve} = require("path") 3 | 4 | let args = process.argv.slice(2) 5 | 6 | console.log(args) 7 | 8 | if (args.length != 1) { 9 | console.log("Usage: cm-buildhelper src/mainfile.ts") 10 | process.exit(1) 11 | } 12 | 13 | watch([resolve(args[0])]) -------------------------------------------------------------------------------- /dev/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Vite App 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CodeMirror C# Language Support 2 | 3 | A CodeMirror extension that provides C# syntax highlighting and language support. 4 | 5 | 6 | ### Usage 7 | 8 | ```ts 9 | import { EditorState } from '@codemirror/state'; 10 | import { EditorView } from '@codemirror/view'; 11 | import { csharp } from "@replit/codemirror-lang-csharp"; 12 | import { basicSetup } from 'codemirror'; 13 | 14 | new EditorView({ 15 | state: EditorState.create({ 16 | doc: ` 17 | using System; 18 | namespace Test 19 | { 20 | class Program 21 | { 22 | public static void Main(string[] args) 23 | { 24 | Console.WriteLine("Hello, world!"); 25 | } 26 | } 27 | } 28 | `, 29 | extensions: [basicSetup, csharp()], 30 | }), 31 | parent: document.querySelector('#editor'), 32 | }); 33 | ``` -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Replit 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@replit/codemirror-lang-csharp", 3 | "description": "A C# mode for CodeMirror 6", 4 | "version": "6.2.0", 5 | "author": { 6 | "name": "Alan Forshaw", 7 | "email": "alan@repl.it" 8 | }, 9 | "type": "module", 10 | "main": "dist/index.cjs", 11 | "exports": { 12 | "import": "./dist/index.js", 13 | "require": "./dist/index.cjs" 14 | }, 15 | "types": "dist/index.d.ts", 16 | "module": "dist/index.js", 17 | "sideEffects": false, 18 | "license": "MIT", 19 | "scripts": { 20 | "dev": "npm run build && run-p dev-cm dev-vite", 21 | "dev-vite": "vite ./dev", 22 | "dev-cm": "node ./dev/watch.cjs src/index.ts", 23 | "build": "cm-buildhelper src/index.ts", 24 | "test": "cm-runtests", 25 | "publish": "npm run build && npm publish" 26 | }, 27 | "peerDependencies": { 28 | "@codemirror/autocomplete": "^6.0.0", 29 | "@codemirror/language": "^6.0.0", 30 | "@codemirror/state": "^6.0.0", 31 | "@codemirror/view": "^6.0.0", 32 | "@lezer/common": "^1.0.0", 33 | "@lezer/highlight": "^1.0.0", 34 | "@lezer/lr": "^1.0.0" 35 | }, 36 | "devDependencies": { 37 | "@codemirror/autocomplete": "^6.0.0", 38 | "@codemirror/buildhelper": "^0.1.16", 39 | "@codemirror/language": "^6.0.0", 40 | "@codemirror/state": "^6.0.0", 41 | "@codemirror/theme-one-dark": "^6.0.0", 42 | "@codemirror/view": "^6.0.0", 43 | "@lezer/generator": "^1.0.0", 44 | "@lezer/common": "^1.0.0", 45 | "@lezer/highlight": "^1.0.0", 46 | "@lezer/lr": "^1.0.0", 47 | "codemirror": "^6.0.0", 48 | "npm-run-all": "^4.1.5", 49 | "vite": "^2.3.8" 50 | }, 51 | "repository": { 52 | "type": "git", 53 | "url": "https://github.com/replit/codemirror-lang-csharp.git" 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/tokens.ts: -------------------------------------------------------------------------------- 1 | import { ExternalTokenizer, ContextTracker } from "@lezer/lr"; 2 | import { 3 | interpStringContent, 4 | interpStringBrace, 5 | interpStringEnd, 6 | interpVStringContent, 7 | interpVStringBrace, 8 | interpVStringEnd, 9 | } from "./syntax.grammar.terms"; 10 | 11 | const 12 | quote = 34, 13 | backslash = 92, 14 | braceL = 123, 15 | braceR = 125; 16 | 17 | export const interpString = new ExternalTokenizer((input) => { 18 | for(let i = 0; ; i++) { 19 | switch(input.next) { 20 | case -1: 21 | if(i > 0) input.acceptToken(interpStringContent); 22 | return; 23 | 24 | case quote: 25 | if(i > 0) input.acceptToken(interpStringContent); 26 | else input.acceptToken(interpStringEnd, 1); 27 | return; 28 | 29 | case braceL: 30 | if(input.peek(1) === braceL) input.acceptToken(interpStringContent, 2) 31 | else input.acceptToken(interpStringBrace); 32 | return; 33 | 34 | case braceR: 35 | if(input.peek(1) === braceR) input.acceptToken(interpStringContent, 2) 36 | return; 37 | 38 | case backslash: 39 | const next = input.peek(1); 40 | if(next === braceL || next === braceR) return; 41 | input.advance(); 42 | // FALLTHROUGH 43 | 44 | default: 45 | input.advance(); 46 | } 47 | } 48 | }); 49 | 50 | export const interpVString = new ExternalTokenizer((input) => { 51 | for(let i = 0; ; i++) { 52 | switch(input.next) { 53 | case -1: 54 | if(i > 0) input.acceptToken(interpVStringContent); 55 | return; 56 | 57 | case quote: 58 | if(input.peek(1) === quote) input.acceptToken(interpVStringContent, 2) 59 | else if(i > 0) input.acceptToken(interpVStringContent) 60 | else input.acceptToken(interpVStringEnd, 1); 61 | return; 62 | 63 | case braceL: 64 | if(input.peek(1) === braceL) input.acceptToken(interpVStringContent, 2) 65 | else input.acceptToken(interpVStringBrace); 66 | return; 67 | 68 | case braceR: 69 | if(input.peek(1) === braceR) input.acceptToken(interpVStringContent, 2) 70 | return; 71 | 72 | default: 73 | input.advance(); 74 | } 75 | } 76 | }); -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { parser as csharpParser } from "./syntax.grammar"; 2 | import { 3 | LRLanguage, 4 | LanguageSupport, 5 | indentNodeProp, 6 | foldNodeProp, 7 | foldInside, 8 | continuedIndent, 9 | } from "@codemirror/language"; 10 | import { styleTags, tags as t } from "@lezer/highlight"; 11 | 12 | export const parser = csharpParser; 13 | 14 | export const csharpLanguage = LRLanguage.define({ 15 | parser: parser.configure({ 16 | props: [ 17 | indentNodeProp.add({ 18 | Delim: continuedIndent({ except: /^\s*(?:case\b|default:)/ }), 19 | }), 20 | foldNodeProp.add({ 21 | Delim: foldInside, 22 | }), 23 | styleTags({ 24 | "Keyword ContextualKeyword SimpleType": t.keyword, 25 | "NullLiteral BooleanLiteral": t.bool, 26 | IntegerLiteral: t.integer, 27 | RealLiteral: t.float, 28 | 'StringLiteral CharacterLiteral InterpolatedRegularString InterpolatedVerbatimString $" @$" $@"': 29 | t.string, 30 | "LineComment BlockComment": t.comment, 31 | 32 | ". .. : Astrisk Slash % + - ++ -- Not ~ << & | ^ && || < > <= >= == NotEq = += -= *= SlashEq %= &= |= ^= ? ?? ??= =>": 33 | t.operator, 34 | 35 | PP_Directive: t.keyword, 36 | 37 | TypeIdentifier: t.typeName, 38 | "ArgumentName AttrsNamedArg": t.variableName, 39 | ConstName: t.constant(t.variableName), 40 | 41 | //Ident: t.name, 42 | MethodName: t.function(t.variableName), 43 | ParamName: [t.emphasis, t.variableName], 44 | VarName: t.variableName, 45 | "FieldName PropertyName": t.propertyName, 46 | 47 | "( )": t.paren, 48 | "{ }": t.brace, 49 | "[ ]": t.squareBracket, 50 | }), 51 | ], 52 | }), 53 | languageData: { 54 | commentTokens: { line: "//", block: { open: "/*", close: "*/" } }, 55 | closeBrackets: { brackets: ["(", "[", "{", '"', "'"] }, 56 | indentOnInput: 57 | /^\s*((\)|\]|\})$|(else|else\s+if|catch|finally|case)\b|default:)/, 58 | }, 59 | }); 60 | 61 | export function csharp() { 62 | return new LanguageSupport(csharpLanguage); 63 | } 64 | -------------------------------------------------------------------------------- /dev/print-lezer-tree.ts: -------------------------------------------------------------------------------- 1 | // From: https://gist.github.com/msteen/e4828fbf25d6efef73576fc43ac479d2/ 2 | 3 | import { Text } from "@codemirror/state" 4 | import { Input, NodeType, SyntaxNode, Tree, TreeCursor } from "@lezer/common" 5 | 6 | class StringInput implements Input { 7 | constructor(private readonly input: string) {} 8 | 9 | get length() { 10 | return this.input.length 11 | } 12 | 13 | chunk(from: number): string { 14 | return this.input.slice(from) 15 | } 16 | 17 | lineChunks = false 18 | 19 | read(from: number, to: number): string { 20 | return this.input.slice(from, to) 21 | } 22 | } 23 | 24 | export function sliceType(cursor: TreeCursor, input: Input, type: number): string | null { 25 | if (cursor.type.id === type) { 26 | const s = input.read(cursor.from, cursor.to) 27 | cursor.nextSibling() 28 | return s 29 | } 30 | return null 31 | } 32 | 33 | export function isType(cursor: TreeCursor, type: number): boolean { 34 | const cond = cursor.type.id === type 35 | if (cond) cursor.nextSibling() 36 | return cond 37 | } 38 | 39 | export type CursorNode = { type: NodeType; from: number; to: number; isLeaf: boolean } 40 | 41 | function cursorNode({ type, from, to }: TreeCursor, isLeaf = false): CursorNode { 42 | return { type, from, to, isLeaf } 43 | } 44 | 45 | export type TreeTraversal = { 46 | beforeEnter?: (cursor: TreeCursor) => void 47 | onEnter: (node: CursorNode) => false | void 48 | onLeave?: (node: CursorNode) => false | void 49 | } 50 | 51 | type TreeTraversalOptions = { 52 | from?: number 53 | to?: number 54 | includeParents?: boolean 55 | } & TreeTraversal 56 | 57 | export function traverseTree( 58 | cursor: TreeCursor | Tree | SyntaxNode, 59 | { 60 | from = -Infinity, 61 | to = Infinity, 62 | includeParents = false, 63 | beforeEnter, 64 | onEnter, 65 | onLeave, 66 | }: TreeTraversalOptions, 67 | ): void { 68 | if (!(cursor instanceof TreeCursor)) cursor = cursor.cursor() 69 | for (;;) { 70 | let node = cursorNode(cursor) 71 | let leave = false 72 | if (node.from <= to && node.to >= from) { 73 | const enter = !node.type.isAnonymous && (includeParents || (node.from >= from && node.to <= to)) 74 | if (enter && beforeEnter) beforeEnter(cursor) 75 | node.isLeaf = !cursor.firstChild() 76 | if (enter) { 77 | leave = true 78 | if (onEnter(node) === false) return 79 | } 80 | if (!node.isLeaf) continue 81 | } 82 | for (;;) { 83 | node = cursorNode(cursor, node.isLeaf) 84 | if (leave && onLeave) if (onLeave(node) === false) return 85 | leave = cursor.type.isAnonymous 86 | node.isLeaf = false 87 | if (cursor.nextSibling()) break 88 | if (!cursor.parent()) return 89 | leave = true 90 | } 91 | } 92 | } 93 | 94 | function isChildOf(child: CursorNode, parent: CursorNode): boolean { 95 | return ( 96 | child.from >= parent.from && child.from <= parent.to && child.to <= parent.to && child.to >= parent.from 97 | ) 98 | } 99 | 100 | export function validatorTraversal( 101 | input: Input | string, 102 | { fullMatch = true }: { fullMatch?: boolean } = {}, 103 | ) { 104 | if (typeof input === "string") input = new StringInput(input) 105 | const state = { 106 | valid: true, 107 | parentNodes: [] as CursorNode[], 108 | lastLeafTo: 0, 109 | } 110 | return { 111 | state, 112 | traversal: { 113 | onEnter(node) { 114 | state.valid = true 115 | if (!node.isLeaf) state.parentNodes.unshift(node) 116 | if (node.from > node.to || node.from < state.lastLeafTo) { 117 | state.valid = false 118 | } else if (node.isLeaf) { 119 | if (state.parentNodes.length && !isChildOf(node, state.parentNodes[0])) state.valid = false 120 | state.lastLeafTo = node.to 121 | } else { 122 | if (state.parentNodes.length) { 123 | if (!isChildOf(node, state.parentNodes[0])) state.valid = false 124 | } else if (fullMatch && (node.from !== 0 || node.to !== input.length)) { 125 | state.valid = false 126 | } 127 | } 128 | }, 129 | onLeave(node) { 130 | if (!node.isLeaf) state.parentNodes.shift() 131 | }, 132 | } as TreeTraversal, 133 | } 134 | } 135 | 136 | export function validateTree( 137 | tree: TreeCursor | Tree | SyntaxNode, 138 | input: Input | string, 139 | options?: { fullMatch?: boolean }, 140 | ): boolean { 141 | const { state, traversal } = validatorTraversal(input, options) 142 | traverseTree(tree, traversal) 143 | return state.valid 144 | } 145 | 146 | enum Color { 147 | Red = 31, 148 | Green = 32, 149 | Yellow = 33, 150 | } 151 | 152 | function colorize(value: any, color: number): string { 153 | // return "\u001b[" + color + "m" + String(value) + "\u001b[39m" 154 | return String(value) 155 | } 156 | 157 | type PrintTreeOptions = { from?: number; to?: number; start?: number; includeParents?: boolean } 158 | 159 | export function printTree( 160 | cursor: TreeCursor | Tree | SyntaxNode, 161 | input: Input | string, 162 | { from, to, start = 0, includeParents }: PrintTreeOptions = {}, 163 | ): string { 164 | const inp = typeof input === "string" ? new StringInput(input) : input 165 | const text = Text.of(inp.read(0, inp.length).split("\n")) 166 | const state = { 167 | output: "", 168 | prefixes: [] as string[], 169 | hasNextSibling: false, 170 | } 171 | const validator = validatorTraversal(inp) 172 | traverseTree(cursor, { 173 | from, 174 | to, 175 | includeParents, 176 | beforeEnter(cursor) { 177 | state.hasNextSibling = cursor.nextSibling() && cursor.prevSibling() 178 | }, 179 | onEnter(node) { 180 | validator.traversal.onEnter(node) 181 | const isTop = state.output === "" 182 | const hasPrefix = !isTop || node.from > 0 183 | if (hasPrefix) { 184 | state.output += (!isTop ? "\n" : "") + state.prefixes.join("") 185 | if (state.hasNextSibling) { 186 | state.output += " ├─ " 187 | state.prefixes.push(" │ ") 188 | } else { 189 | state.output += " └─ " 190 | state.prefixes.push(" ") 191 | } 192 | } 193 | const hasRange = node.from !== node.to 194 | state.output += 195 | (node.type.isError || !validator.state.valid ? colorize(node.type.name, Color.Red) : node.type.name) + 196 | " " + 197 | (hasRange 198 | ? "[" + 199 | colorize(locAt(text, start + node.from), Color.Yellow) + 200 | ".." + 201 | colorize(locAt(text, start + node.to), Color.Yellow) + 202 | "]" 203 | : colorize(locAt(text, start + node.from), Color.Yellow)) 204 | if (hasRange && node.isLeaf) { 205 | state.output += ": " + colorize(JSON.stringify(inp.read(node.from, node.to)), Color.Green) 206 | } 207 | }, 208 | onLeave(node) { 209 | validator.traversal.onLeave!(node) 210 | state.prefixes.pop() 211 | }, 212 | }) 213 | return state.output 214 | } 215 | 216 | function locAt(text: Text, pos: number): string { 217 | const line = text.lineAt(pos) 218 | return line.number + ":" + (pos - line.from) 219 | } 220 | 221 | export function logTree( 222 | tree: TreeCursor | Tree | SyntaxNode, 223 | input: string, 224 | options?: PrintTreeOptions, 225 | ): void { 226 | console.log(printTree(tree, input, options)) 227 | } 228 | -------------------------------------------------------------------------------- /dev/index.ts: -------------------------------------------------------------------------------- 1 | import { EditorState } from '@codemirror/state'; 2 | import { EditorView } from '@codemirror/view'; 3 | import { basicSetup } from 'codemirror'; 4 | import { csharp, parser } from "../dist/"; 5 | import { printTree } from "./print-lezer-tree"; 6 | import { oneDark } from '@codemirror/theme-one-dark'; 7 | 8 | const doc = /*` 9 | using System; 10 | using System.Reflection; 11 | 12 | public sealed class InterrogateHelpUrls 13 | { 14 | public static void Main(string[] args) 15 | { 16 | (Type a) helpType = typeof(HelpAttribute); 17 | string assemblyName = args[0]; 18 | foreach (Type t in Assembly.Load(assemblyName).GetTypes()) 19 | { 20 | Console.WriteLine($"Type : {t}"); 21 | HelpAttribute[] helpers = 22 | (HelpAttribute[])t.GetCustomAttributes(helpType, false); 23 | for (int at = 0; at != helpers.Length; at++) 24 | { 25 | Console.WriteLine($"\tUrl : {helpers[at].Url}"); 26 | } 27 | } 28 | } 29 | } 30 | `*/` 31 | // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. 32 | // See the LICENCE file in the repository root for full licence text. 33 | 34 | using System; 35 | using System.Collections.Generic; 36 | using System.IO; 37 | using System.Linq; 38 | using System.Reflection; 39 | using osu.Framework; 40 | using osu.Framework.Logging; 41 | using osu.Framework.Platform; 42 | 43 | namespace osu.Game.Rulesets 44 | { 45 | public abstract class RulesetStore : IDisposable, IRulesetStore 46 | { 47 | private const string ruleset_library_prefix = @"osu.Game.Rulesets"; 48 | 49 | protected readonly Dictionary LoadedAssemblies = new Dictionary(); 50 | 51 | /// 52 | /// All available rulesets. 53 | /// 54 | public abstract IEnumerable AvailableRulesets { get; } 55 | 56 | protected RulesetStore(Storage? storage = null) 57 | { 58 | A.B c = 1; 59 | A.B(1); 60 | A.B c = 1; 61 | A.B(1); 62 | A.B c = 1; 63 | // On android in release configuration assemblies are loaded from the apk directly into memory. 64 | // We cannot read assemblies from cwd, so should check loaded assemblies instead. 65 | loadFromAppDomain(); 66 | A.B c = 1; 67 | A.B(1); 68 | A.B c = 1; 69 | A.B(1); 70 | A.B c = 1; 71 | // This null check prevents Android from attempting to load the rulesets from disk, 72 | // as the underlying path "AppContext.BaseDirectory", despite being non-nullable, it returns null on android. 73 | // See https://github.com/xamarin/xamarin-android/issues/3489. 74 | if (RuntimeInfo.StartupDirectory is int (a, b, c) a) 75 | loadFromDisk(); 76 | 77 | // the event handler contains code for resolving dependency on the game assembly for rulesets located outside the base game directory. 78 | // It needs to be attached to the assembly lookup event before the actual call to loadUserRulesets() else rulesets located out of the base game directory will fail 79 | // to load as unable to locate the game core assembly. 80 | AppDomain.CurrentDomain.AssemblyResolve += resolveRulesetDependencyAssembly; 81 | 82 | var rulesetStorage = storage?.GetStorageForDirectory(@"rulesets"); 83 | if (rulesetStorage != null) 84 | loadUserRulesets(rulesetStorage); 85 | } 86 | 87 | /// 88 | /// Retrieve a ruleset using a known ID. 89 | /// 90 | /// The ruleset's internal ID. 91 | /// A ruleset, if available, else null. 92 | public RulesetInfo? GetRuleset(int id) => AvailableRulesets.FirstOrDefault(r => r.OnlineID == id); 93 | 94 | /// 95 | /// Retrieve a ruleset using a known short name. 96 | /// 97 | /// The ruleset's short name. 98 | /// A ruleset, if available, else null. 99 | public RulesetInfo? GetRuleset(string shortName) => AvailableRulesets.FirstOrDefault(r => r.ShortName == shortName); 100 | 101 | private Assembly? resolveRulesetDependencyAssembly(object? sender, ResolveEventArgs args) 102 | { 103 | var asm = new AssemblyName(args.Name); 104 | 105 | // the requesting assembly may be located out of the executable's base directory, thus requiring manual resolving of its dependencies. 106 | // this attempts resolving the ruleset dependencies on game core and framework assemblies by returning assemblies with the same assembly name 107 | // already loaded in the AppDomain. 108 | var domainAssembly = AppDomain.CurrentDomain.GetAssemblies() 109 | // Given name is always going to be equally-or-more qualified than the assembly name. 110 | .Where(a => 111 | { 112 | string? name = a.GetName().Name; 113 | if (name == null) 114 | return false; 115 | 116 | return args.Name.Contains(name, StringComparison.Ordinal); 117 | }) 118 | // Pick the greatest assembly version. 119 | .OrderByDescending(a => a.GetName().Version) 120 | .FirstOrDefault(); 121 | 122 | if (domainAssembly != null) 123 | return domainAssembly; 124 | 125 | return LoadedAssemblies.Keys.FirstOrDefault(a => a.FullName == asm.FullName); 126 | } 127 | 128 | private void loadFromAppDomain() 129 | { 130 | foreach (var ruleset in AppDomain.CurrentDomain.GetAssemblies()) 131 | { 132 | string? rulesetName = ruleset.GetName().Name; 133 | 134 | if (rulesetName == null) 135 | continue; 136 | 137 | if (!rulesetName.StartsWith(ruleset_library_prefix, StringComparison.InvariantCultureIgnoreCase) || rulesetName.Contains(@"Tests")) 138 | continue; 139 | 140 | addRuleset(ruleset); 141 | } 142 | } 143 | 144 | private void loadUserRulesets(Storage rulesetStorage) 145 | { 146 | var rulesets = rulesetStorage.GetFiles(@".", @$"{ruleset_library_prefix}.*.dll"); 147 | 148 | foreach (string? ruleset in rulesets.Where(f => !f.Contains(@"Tests"))) 149 | loadRulesetFromFile(rulesetStorage.GetFullPath(ruleset)); 150 | } 151 | 152 | private void loadFromDisk() 153 | { 154 | try 155 | { 156 | string[] files = Directory.GetFiles(RuntimeInfo.StartupDirectory, @$"{ruleset_library_prefix}.*.dll"); 157 | 158 | foreach (string file in files.Where(f => !Path.GetFileName(f).Contains("Tests"))) 159 | loadRulesetFromFile(file); 160 | } 161 | catch (Exception e) 162 | { 163 | Logger.Error(e, $"Could not load rulesets from directory {RuntimeInfo.StartupDirectory}"); 164 | } 165 | } 166 | 167 | private void loadRulesetFromFile(string file) 168 | { 169 | string? filename = Path.GetFileNameWithoutExtension(file); 170 | 171 | if (LoadedAssemblies.Values.Any(t => Path.GetFileNameWithoutExtension(t.Assembly.Location) == filename)) 172 | return; 173 | 174 | try 175 | { 176 | addRuleset(Assembly.LoadFrom(file)); 177 | } 178 | catch (Exception e) 179 | { 180 | LogFailedLoad(filename, e); 181 | } 182 | } 183 | 184 | private void addRuleset(Assembly assembly) 185 | { 186 | if (LoadedAssemblies.ContainsKey(assembly)) 187 | return; 188 | 189 | // the same assembly may be loaded twice in the same AppDomain (currently a thing in certain Rider versions https://youtrack.jetbrains.com/issue/RIDER-48799). 190 | // as a failsafe, also compare by FullName. 191 | if (LoadedAssemblies.Any(a => a.Key.FullName == assembly.FullName)) 192 | return; 193 | 194 | try 195 | { 196 | LoadedAssemblies[assembly] = assembly.GetTypes().First(t => t.IsPublic && t.IsSubclassOf(typeof(Ruleset))); 197 | } 198 | catch (Exception e) 199 | { 200 | LogFailedLoad(assembly.GetName().Name.Split('.').Last(), e); 201 | } 202 | } 203 | 204 | public void Dispose() 205 | { 206 | Dispose(true); 207 | GC.SuppressFinalize(this); 208 | } 209 | 210 | protected void Dispose(bool disposing) 211 | { 212 | AppDomain.CurrentDomain.AssemblyResolve -= resolveRulesetDependencyAssembly; 213 | } 214 | 215 | protected void LogFailedLoad(string name, Exception exception) 216 | { 217 | Logger.Log($"Could not load ruleset \\"{name}\\". Please check for an update from the developer.", level: LogLevel.Error); 218 | Logger.Log($"Ruleset load failed: {exception}"); 219 | } 220 | 221 | #region Implementation of IRulesetStore 222 | 223 | IRulesetInfo? IRulesetStore.GetRuleset(int id) => GetRuleset(id); 224 | IRulesetInfo? IRulesetStore.GetRuleset(string shortName) => GetRuleset(shortName); 225 | IEnumerable IRulesetStore.AvailableRulesets => AvailableRulesets; 226 | 227 | #endregion 228 | } 229 | } 230 | ` 231 | 232 | new EditorView({ 233 | state: EditorState.create({ 234 | doc, 235 | extensions: [basicSetup, csharp(), oneDark, EditorView.lineWrapping], 236 | }), 237 | parent: document.querySelector('#editor'), 238 | }); 239 | 240 | console.log(printTree(parser.parse(doc), doc)); 241 | -------------------------------------------------------------------------------- /src/syntax.grammar: -------------------------------------------------------------------------------- 1 | @top Program { compilationUnit } 2 | 3 | @detectDelim 4 | 5 | @precedence { 6 | namedArg, 7 | typeParams, 8 | typeArgs, 9 | typeAccess @left, 10 | typeUnary2 @left, typeUnary @left, 11 | else @right, 12 | cast, 13 | new, 14 | memberCall @left, 15 | memberAccess @left, 16 | elementAccess @left, 17 | varDecl @left, 18 | call @left, 19 | unary @left, 20 | range @left, 21 | switch @left 22 | with @left, 23 | mul_div @left, 24 | add_sub @left, 25 | shift_lr @left, 26 | compare @left, 27 | equality @left, 28 | and @left, 29 | xor @left, 30 | or @left, 31 | c_and @left, 32 | c_or @left, 33 | nullcoal @right, 34 | ternary @right, 35 | params, 36 | arrow @right, 37 | assign @right, 38 | throw @left, 39 | q_into @right, 40 | comma @left 41 | } 42 | 43 | @external tokens interpString from "./tokens" { 44 | interpStringContent, 45 | interpStringBrace, 46 | interpStringEnd 47 | } 48 | 49 | @external tokens interpVString from "./tokens" { 50 | interpVStringContent, 51 | interpVStringBrace, 52 | interpVStringEnd 53 | } 54 | 55 | @skip { newline | whitespace | LineComment | BlockComment | PP_Directive } 56 | 57 | @tokens { 58 | // Line terminators 59 | 60 | newline 61 | { $[\r\n\u0085\u2028\u2029] 62 | | "\r\n" 63 | } 64 | 65 | 66 | // Comments 67 | 68 | LineComment { "//" ![\r\n\u0085\u2028\u2029]* } 69 | 70 | BlockComment { "/*" (![\*] | "*" ![/])* "*/"? } 71 | 72 | 73 | // Whitespace 74 | 75 | whitespace { $[\t\u000b\u000c \u00a0\u1680\u2000-\u200a\u202a\u205f\u3000] } 76 | 77 | 78 | // General 79 | 80 | identifier { simpleIdentifier } 81 | 82 | simpleIdentifier { "@"? $[a-zA-Z_] $[a-zA-Z0-9_]* } // \u{a1}-\u{10ffff} 83 | 84 | 85 | // Integer literals 86 | 87 | IntegerLiteral 88 | { decimalInteger 89 | | hexadecimalInteger 90 | | binaryInteger 91 | } 92 | 93 | decimalInteger { decimalDigit decoratedDigit* integerTypeSuffix? } 94 | 95 | decoratedDigit { '_'* digit } 96 | 97 | decimalDigit { $[0-9] } 98 | 99 | integerTypeSuffix 100 | { 'U' | 'u' | 'L' | 'l' 101 | | 'UL' | 'Ul' | 'uL' | 'ul' | 'LU' | 'Lu' | 'lU' | 'lu' 102 | } 103 | 104 | hexadecimalInteger { '0' $[xX] decoratedDigit+ integerTypeSuffix? } 105 | 106 | hexDigit { $[0-9A-Fa-f] } 107 | 108 | binaryInteger { '0' $[bB] decoratedDigit+ integerTypeSuffix? } 109 | 110 | binaryDigit { $[01] } 111 | 112 | 113 | // Real literals 114 | 115 | RealLiteral 116 | { decimalDigit decoratedDigit* '.' decimalDigit decoratedDigit* exponentPart? realTypeSuffix? 117 | | '.' decimalDigit decoratedDigit* exponentPart? realTypeSuffix? 118 | | decimalDigit decoratedDigit* exponentPart realTypeSuffix? 119 | | decimalDigit decoratedDigit* realTypeSuffix 120 | } 121 | 122 | exponentPart { $[eE] $[+\-]? decimalDigit decoratedDigit* } 123 | 124 | realTypeSuffix { $[FfDdMm] } 125 | 126 | 127 | // Character literals 128 | 129 | CharacterLiteral { "'" character "'" } 130 | 131 | character 132 | { singleCharacter 133 | | simpleEscapeSequence 134 | | hexadecimalEscapeSequence 135 | | unicodeEscapeSequence 136 | } 137 | 138 | singleCharacter { !['\\\r\n\u0085\u2028\u2029] } 139 | 140 | simpleEscapeSequence { "\\" $['"\\0abfnrtv] } 141 | 142 | hexadecimalEscapeSequence { "\\x" hexDigit hexDigit? hexDigit? hexDigit? } 143 | 144 | unicodeEscapeSequence 145 | { "\\u" hexDigit hexDigit hexDigit hexDigit 146 | | "\\U" hexDigit hexDigit hexDigit hexDigit hexDigit hexDigit hexDigit hexDigit 147 | } 148 | 149 | 150 | // String literals 151 | 152 | StringLiteral 153 | { regularString 154 | | verbatimString 155 | } 156 | 157 | regularString { '"' regularStringCharacter* '"' 'u8'? } 158 | 159 | regularStringCharacter 160 | { singleRegularStringCharacter 161 | | simpleEscapeSequence 162 | | hexadecimalEscapeSequence 163 | | unicodeEscapeSequence 164 | } 165 | 166 | singleRegularStringCharacter { !["\\\r\n\u0085\u2028\u2029] } 167 | 168 | verbatimString { '@"' verbatimStringCharacter* '"' 'u8'? } 169 | 170 | verbatimStringCharacter 171 | { !["] 172 | | '""' 173 | } 174 | 175 | 176 | // Operators and punctuators 177 | 178 | '{' '}' '[' ']' '(' ')' '.' ',' ':' ';' 179 | '+' '-' '*'[@name=Astrisk] '/'[@name=Slash] '%' '&' '|' '^' '!'[@name=Not] '~' 180 | '=' '<' '>' '?' '??' '::' '++' '--' '&&' '||' 181 | '->' '==' '!='[@name=NotEq] '<=' '>=' '+=' '-=' '*=' '/='[@name=SlashEq] '%=' 182 | '&=' '|=' '^=' '<<' '<<=' '=>' '??=' 183 | '$"' '@$"' '$@"' 184 | '..' 185 | 186 | 187 | // General 188 | 189 | PP_Directive { pp_start pp_kind /*...*/ } 190 | 191 | // TODO: make this detect beginning of line 192 | pp_start { 193 | '#' whitespace* 194 | } 195 | 196 | pp_kind 197 | { pp_declaration 198 | | pp_conditional 199 | | pp_line 200 | | pp_diagnostic 201 | | pp_region 202 | | pp_pragma 203 | } 204 | 205 | pp_declaration 206 | { 'define' whitespace+ identifier 207 | | 'undef' whitespace+ identifier 208 | } 209 | 210 | pp_conditional 211 | { 'if' whitespace+ ![\n]+ 212 | | 'elif' whitespace+ ![\n]+ 213 | | 'else' 214 | | 'endif' 215 | } 216 | 217 | pp_diagnostic 218 | { 'error' (whitespace+ ![\n]+)? 219 | | 'warning' (whitespace+ ![\n]+)? 220 | } 221 | 222 | 223 | pp_region 224 | { 'region' (whitespace+ ![\n]+)? 225 | | 'endregion' (whitespace+ ![\n]+)? 226 | } 227 | 228 | pp_line { 'line' whitespace+ ![\n]+ } 229 | 230 | pp_pragma { 'pragma' (whitespace+ ![\n]+)? } 231 | 232 | 233 | // Precedence 234 | 235 | @precedence { RealLiteral, IntegerLiteral } 236 | 237 | @precedence { '..', RealLiteral, '.' } 238 | 239 | @precedence { LineComment, BlockComment, '/=', '/' } 240 | } 241 | 242 | 243 | // Keywords 244 | 245 | new { kw<"new"> } 246 | 247 | ref { kw<"ref"> } 248 | 249 | scoped { kw<"scoped"> } 250 | 251 | readonly { kw<"readonly"> } 252 | 253 | 254 | // Boolean literals 255 | 256 | BooleanLiteral { 257 | @specialize 258 | } 259 | 260 | 261 | // The null literal 262 | 263 | NullLiteral { 264 | @specialize 265 | } 266 | 267 | 268 | // Operators and punctuators 269 | 270 | RightShift { '>' '>' } 271 | 272 | RightShiftAssignment { '>' '>=' } 273 | 274 | 275 | // General (Types) 276 | 277 | TypeIdentifier { identifier ~tid } 278 | 279 | namespaceName { namespaceOrTypeName } 280 | 281 | typeName { namespaceOrTypeName } 282 | 283 | namespaceOrTypeNameAccess 284 | { !typeAccess '.' TypeIdentifier typeArgumentList? namespaceOrTypeNameAccess 285 | | !typeAccess '.' TypeIdentifier typeArgumentList? 286 | } 287 | 288 | namespaceOrTypeName 289 | { TypeIdentifier typeArgumentList? namespaceOrTypeNameAccess? 290 | | QualifiedAliasMember namespaceOrTypeNameAccess? 291 | } 292 | 293 | 294 | type { 295 | (typeName | SimpleType | tupleType) (!typeUnary2 ~elementAccess rankSpecifier+ nullOrPtr? | nullOrPtr) 296 | } 297 | 298 | nonArrayType { 299 | (typeName | SimpleType | tupleType) nullOrPtr? 300 | } 301 | 302 | nullOrPtr { 303 | !typeUnary '*'+ 304 | | 305 | !typeUnary '?' 306 | } 307 | 308 | arrayType { nonArrayType !typeUnary2 rankSpecifier+ } 309 | 310 | rankSpecifier { '[' ','* ']' } 311 | 312 | SimpleType { 313 | @specialize 334 | } 335 | 336 | tupleType//[@dynamicPrecedence=1] 337 | { delim<'(' ~tuple csep1<(type VarName)> ')'> 338 | | delim<'(' ~tuple type !comma ',' csep1 ')'> 339 | } 340 | 341 | 342 | // Type arguments 343 | 344 | typeArgumentList { !typeArgs '<' csep1 '>' } 345 | 346 | 347 | // General (Literals) 348 | 349 | literal 350 | { BooleanLiteral 351 | | IntegerLiteral 352 | | RealLiteral 353 | | CharacterLiteral 354 | | StringLiteral 355 | | NullLiteral 356 | } 357 | 358 | 359 | // General (Arguments) 360 | 361 | arguments { delim<'(' argumentList? ')'> } 362 | 363 | argumentList { csep1 } 364 | 365 | argument { ArgumentName? argumentValue } 366 | 367 | ArgumentName { identifier ~id ':' } 368 | 369 | argumentValue 370 | { expr 371 | | kw<'ref'> expr 372 | | kw<"in"> expr 373 | | kw<'out'> (scoped? localVarType)? VarName 374 | } 375 | 376 | 377 | // General (Expressions) 378 | 379 | primaryExpr 380 | { primaryNoArrayCreationExpr 381 | | ArrayCreationExpr 382 | } 383 | 384 | Ident/*[@dynamicPrecedence=1]*/ { identifier ~tid ~id } 385 | 386 | primaryNoArrayCreationExpr 387 | { literal 388 | | interpolatedStringExpr 389 | | Ident 390 | | ParenOrTupleExpr 391 | | memberAccess 392 | | nullableMemberAccess 393 | | callExpr 394 | | elementAccess 395 | | nullableElementAccess 396 | | thisAccess 397 | | baseAccess 398 | | postIncrementExpr 399 | | postDecrementExpr 400 | | nullCheckExpr 401 | | ObjectCreationExpr 402 | | anonObjectCreationExpr 403 | | typeofExpr 404 | | sizeofExpr 405 | | checkedExpr 406 | | uncheckedExpr 407 | | defaultValueExpr 408 | | nameofExpr 409 | | switchExpr 410 | | withExpr 411 | | anonMethodExpr 412 | | pointerMemberAccess 413 | | stackallocInit 414 | } 415 | 416 | 417 | // Interpolated string expressions 418 | 419 | interpolatedStringExpr { InterpolatedRegularString | InterpolatedVerbatimString } 420 | 421 | InterpolatedRegularString { '$"' interpStringParts* interpStringEnd } 422 | 423 | interpStringParts 424 | { interpStringContent 425 | | interpStringBrace expr (',' literal)? (':' identifier+)? '}' 426 | } 427 | 428 | InterpolatedVerbatimString { ('$@"' | '@$"') interpVStringParts* interpVStringEnd } 429 | 430 | interpVStringParts 431 | { interpVStringContent 432 | | interpVStringBrace expr (',' literal)? (':' identifier+)? '}' 433 | } 434 | 435 | 436 | // Simple names 437 | 438 | simpleName { identifier typeArgumentList? } 439 | 440 | 441 | // Paren/Tuple expressions 442 | 443 | ParenOrTupleExpr[@dynamicPrecedence=-1] { delim<'(' ~tuple csep1 ')'> } 444 | 445 | 446 | // Member access 447 | 448 | memberAccess 449 | { primaryExpr !memberAccess '.' VarName 450 | | primaryExpr !memberAccess memberCall 451 | | SimpleType !memberAccess '.' VarName 452 | | SimpleType !memberAccess memberCall 453 | | QualifiedAliasMember !memberAccess '.' VarName 454 | | QualifiedAliasMember !memberAccess memberCall 455 | } 456 | 457 | memberCall { '.' MethodName typeArgumentList? !memberCall arguments } 458 | 459 | 460 | nullableMemberAccess 461 | { primaryExpr !memberAccess '?' '.' VarName dependentAccess* 462 | | primaryExpr !memberAccess '?' memberCall dependentAccess* 463 | } 464 | 465 | 466 | dependentAccess 467 | { !memberAccess '.' VarName 468 | | memberCall 469 | | !elementAccess delim<'[' argumentList ']'> 470 | | typeArgumentList? !call arguments 471 | } 472 | 473 | 474 | // Call expression 475 | 476 | callExpr 477 | { MethodName typeArgumentList? !call arguments 478 | | primaryExpr typeArgumentList? !call arguments 479 | } 480 | 481 | 482 | // Element access 483 | 484 | elementAccess { 485 | primaryNoArrayCreationExpr !elementAccess ~elementAccess delim<'[' argumentList ']'> 486 | } 487 | 488 | nullableElementAccess { 489 | primaryNoArrayCreationExpr !elementAccess '?' delim<'[' argumentList ']'> dependentAccess* 490 | } 491 | 492 | 493 | // This access 494 | 495 | thisAccess { kw<"this"> } 496 | 497 | 498 | // Base access 499 | 500 | baseAccess 501 | { kw<"base"> !memberAccess '.' simpleName 502 | | kw<"base"> !elementAccess delim<'[' argumentList ']'> 503 | } 504 | 505 | 506 | // Incr/decr operators 507 | 508 | postIncrementExpr { primaryExpr !unary '++' } 509 | 510 | postDecrementExpr { primaryExpr !unary '--' } 511 | 512 | preIncrementExpr { !unary '++' primaryExpr } 513 | 514 | preDecrementExpr { !unary '--' primaryExpr } 515 | 516 | 517 | // Null-check expr 518 | 519 | nullCheckExpr { primaryExpr !unary '!' } 520 | 521 | 522 | // Object creation expr 523 | 524 | ObjectCreationExpr 525 | { !new new nonArrayType? arguments objectOrCollectionInit? 526 | | !new new nonArrayType objectOrCollectionInit 527 | } 528 | 529 | objectOrCollectionInit { objectInit | collectionInit } 530 | 531 | 532 | // Object initializers 533 | 534 | objectInit 535 | { delim<'{' csep1 '}'> 536 | | delim<'{' csep0 ',' '}'> 537 | } 538 | 539 | memberInit { InitializerTarget !assign '=' ref? initializerValue } 540 | 541 | InitializerTarget[@dynamicPrecedence=1] 542 | { identifier ~id 543 | | delim<'[' argumentList ']'> 544 | } 545 | 546 | initializerValue 547 | { nonAssignmentExpr 548 | | objectOrCollectionInit 549 | } 550 | 551 | 552 | // Collection initializers 553 | 554 | collectionInit { delim<'{' csep1 ','? '}'> } 555 | 556 | elementInit 557 | { ref? nonAssignmentExpr 558 | | delim<'{' csep1<(ref? expr)> '}'> 559 | } 560 | 561 | exprList { csep1 } 562 | 563 | 564 | // Array creation expr 565 | 566 | ArrayCreationExpr 567 | { !new new nonArrayType delim<'[' exprList ']'> rankSpecifier* arrayInit? 568 | | !new new arrayType arrayInit 569 | | !new new rankSpecifier arrayInit 570 | } 571 | 572 | 573 | // Anonymous object creation expr 574 | 575 | anonObjectCreationExpr { !new new anonObjectInit } 576 | 577 | anonObjectInit 578 | { delim<'{' csep0 '}'> 579 | | delim<'{' csep1 ',' '}'> 580 | } 581 | 582 | memberDeclarator 583 | { simpleName 584 | | memberAccess 585 | | primaryExpr !memberAccess '?' '.' simpleName 586 | | baseAccess 587 | | identifier !assign '=' ref? expr 588 | } 589 | 590 | 591 | // The typeof operator 592 | 593 | typeofExpr { 594 | kw<"typeof"> delim<'(' ( type | unboundTypeName ) ')'> 595 | } 596 | 597 | unboundTypeNameAccess 598 | { !typeAccess ('.' | '::') TypeIdentifier unboundTypeNameAccess 599 | | !typeArgs genericDimensionSpecifier unboundTypeNameAccess? 600 | } 601 | 602 | unboundTypeName { TypeIdentifier unboundTypeNameAccess } 603 | 604 | genericDimensionSpecifier { !typeArgs '<' ','* '>' } 605 | 606 | 607 | // The sizeof operator 608 | 609 | sizeofExpr { kw<"sizeof"> delim<'(' type ')'> } 610 | 611 | 612 | // The checked/unchecked operators 613 | 614 | checkedExpr { kw<"checked"> delim<'(' expr ')'> } 615 | 616 | uncheckedExpr { kw<"unchecked"> delim<'(' expr ')'> } 617 | 618 | 619 | // Default value expr 620 | 621 | defaultValueExpr { kw<"default"> ~default delim<'(' type ')'> } 622 | 623 | 624 | // Nameof expr 625 | 626 | nameofExpr { kw<"nameof"> delim<'(' namedEntity ')'> } 627 | 628 | namedEntity { namedEntityTarget ('.' simpleName)* } 629 | 630 | namedEntityTarget 631 | { simpleName 632 | | kw<"this"> 633 | | kw<"base"> 634 | | SimpleType 635 | | QualifiedAliasMember 636 | } 637 | 638 | 639 | // Pointer member access 640 | 641 | pointerMemberAccess { primaryExpr !memberAccess '->' simpleName } 642 | 643 | 644 | // Await expression 645 | 646 | awaitExpr { !unary kw<"await"> expr } 647 | 648 | 649 | // Switch expression 650 | 651 | switchExpr { 652 | primaryExpr !switch kw<"switch"> 653 | delim<'{' csep0 ','? '}'> 654 | } 655 | 656 | switchExprBranch { pattern (kw<"when"> expr)? !arrow '=>' expr } 657 | 658 | 659 | // With expression 660 | 661 | withExpr { primaryExpr !with kw<"with"> objectInit } 662 | 663 | 664 | // General 665 | 666 | UnaryExpr 667 | { !unary ('+' | '-' | '!' | '~' | '&' | '*' | '^') expr 668 | | preIncrementExpr 669 | | preDecrementExpr 670 | | Cast[@dynamicPrecedence=1] { delim<'(' ~tuple type ')'> !cast expr } 671 | | awaitExpr 672 | | !throw kw<"throw"> expr 673 | } 674 | 675 | 676 | BinaryExpr 677 | { expr !mul_div ('*' | '/' | '%') expr 678 | | expr !add_sub ('+' | '-') expr 679 | | expr !shift_lr ('<<' | RightShift) expr 680 | | expr !compare ('<' | '>' | '<=' | '>=') expr 681 | | expr !compare kw<"as"> type 682 | | expr !compare kw<"is"> topPattern 683 | | expr !equality ('==' | '!=') expr 684 | | expr !and '&' expr 685 | | expr !xor '^' expr 686 | | expr !or '|' expr 687 | | expr !c_and '&&' expr 688 | | expr !c_or '||' expr 689 | | expr !nullcoal '??' expr 690 | | expr !ternary '?' expr ':' expr 691 | } 692 | 693 | 694 | RangeExpr 695 | { !range '..' expr? 696 | | expr !range '..' expr? 697 | } 698 | 699 | 700 | // Lambda expr 701 | 702 | LambdaExpr[@dynamicPrecedence=1] { 703 | (kw<"async"> | kw<"static">)? type? anonFuncSignature !arrow '=>' anonFuncBody 704 | } 705 | 706 | anonMethodExpr { 707 | kw<"async">? kw<"delegate"> explicitAnonFuncSignature? block 708 | } 709 | 710 | anonFuncSignature { 711 | explicitAnonFuncSignature | implicitAnonFuncSignature 712 | } 713 | 714 | explicitAnonFuncSignature { delim<'(' csep0 ')'> } 715 | 716 | explicitAnonFuncParam { (kw<"ref"> | kw<"out">)? type ParamName } 717 | 718 | implicitAnonFuncSignature 719 | { delim<'(' csep1 ')'> 720 | | ParamName ~id 721 | } 722 | 723 | anonFuncBody { expr | block } 724 | 725 | 726 | // Query expr 727 | 728 | queryExpr { fromClause queryBody } 729 | 730 | fromClause { 731 | ckw<"from"> type? identifier kw<"in"> expr 732 | } 733 | 734 | queryBody { 735 | queryBodyClauses? selectOrGroupClause queryContinuation? 736 | } 737 | 738 | queryBodyClauses 739 | { queryBodyClause 740 | | queryBodyClauses queryBodyClause 741 | } 742 | 743 | queryBodyClause 744 | { fromClause 745 | | letClause 746 | | whereClause 747 | | joinClause 748 | | orderbyClause 749 | } 750 | 751 | letClause { ckw<"let"> identifier !assign '=' expr } 752 | 753 | whereClause { kw<"where"> expr } 754 | 755 | joinClause { 756 | ckw<"join"> type? identifier 757 | kw<"in"> expr 758 | ckw<"on"> expr 759 | ckw<"equals"> expr 760 | (ckw<"into"> identifier)? 761 | } 762 | 763 | orderbyClause { ckw<"orderby"> csep1 } 764 | 765 | ordering { expr orderingDirection } 766 | 767 | orderingDirection { ckw<"ascending"> | ckw<"descending"> } 768 | 769 | selectOrGroupClause { selectClause | groupClause } 770 | 771 | selectClause { ckw<"select"> expr } 772 | 773 | groupClause { ckw<"group"> expr ckw<"by"> expr } 774 | 775 | queryContinuation { !q_into ckw<"into"> identifier queryBody } 776 | 777 | 778 | // Expressions 779 | 780 | assignment { (primaryExpr | UnaryExpr) !assign assignOp ref? expr } 781 | 782 | assignOp 783 | { '=' | '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' 784 | | RightShiftAssignment | '??=' 785 | } 786 | 787 | 788 | expr { nonAssignmentExpr | assignment } 789 | 790 | nonAssignmentExpr 791 | { primaryExpr 792 | | UnaryExpr 793 | | BinaryExpr 794 | | RangeExpr 795 | | LambdaExpr 796 | | queryExpr 797 | | kw<"default"> ~default 798 | } 799 | 800 | 801 | // Patterns 802 | 803 | /*topPatternType { 804 | 805 | } 806 | 807 | topPatternTupleType[@dynamicPrecedence=1] 808 | { '(' ~tuple topPatternType !comma ',' csep1 ')' 809 | }*/ 810 | 811 | /* 812 | (typeName | SimpleType | TupleType) (!typeUnary2 ~elementAccess rankSpecifier+ nullOrPtr? | nullOrPtr) 813 | */ 814 | 815 | topPattern 816 | { pattern 817 | //| type 818 | } 819 | 820 | pattern 821 | { literal 822 | | sep1 823 | | discard 824 | | varPattern 825 | | RelationalPattern 826 | | LogicalPattern 827 | | PropertyPattern 828 | | tuplePattern 829 | | ListPattern 830 | } 831 | 832 | 833 | discard { ckw<"_"> } 834 | 835 | 836 | varPattern 837 | { kw<"var"> varDesignation 838 | | type // BUGGY!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 839 | PropertyPatternFields? 840 | varSimpleDesignation 841 | } 842 | 843 | varSimpleDesignation { !varDecl discard | !varDecl VarName } 844 | 845 | varDesignation 846 | { varSimpleDesignation 847 | | delim<'(' ~tuple csep0 ')'> 848 | } 849 | 850 | 851 | RelationalPattern { 852 | !unary ('<' | '>' | '<=' | '>=') pattern 853 | } 854 | 855 | 856 | LogicalPattern 857 | { !unary ckw<"not"> pattern 858 | | pattern !and ckw<"and"> pattern 859 | | pattern !or ckw<"or"> pattern 860 | } 861 | 862 | 863 | PropertyPattern { 864 | //(typeName | SimpleType | arrayType)? 865 | PropertyPatternFields 866 | varSimpleDesignation? 867 | } 868 | 869 | PropertyPatternFields { !new delim<'{' (csep1 ','?)? '}'> } 870 | 871 | PropertyPatternField { sep1 !assign ':' pattern } 872 | 873 | 874 | tuplePattern/*[@dynamicPrecedence=2]*/ { 875 | (typeName | SimpleType)? 876 | delim<'(' ~tuple csep1<(ArgumentName? pattern)> ')'> PropertyPatternFields? 877 | varSimpleDesignation? 878 | } 879 | 880 | 881 | ListPattern { 882 | delim<'[' (csep1<(slicePattern | pattern)> ','?)? ']'> 883 | varSimpleDesignation? 884 | } 885 | 886 | slicePattern { 887 | '..' pattern? 888 | } 889 | 890 | 891 | // General (Statements) 892 | 893 | stmt 894 | { labeledStmt 895 | | declStmt 896 | | embeddedStmt 897 | } 898 | 899 | embeddedStmt 900 | { block 901 | | emptyStmt 902 | | exprStmt 903 | | selectionStmt 904 | | iterationStmt 905 | | jumpStmt 906 | | tryStmt 907 | | checkedStmt 908 | | uncheckedStmt 909 | | lockStmt 910 | | usingStmt 911 | | yieldStmt 912 | | unsafeStmt 913 | | fixedStmt 914 | } 915 | 916 | 917 | // Block 918 | 919 | block { delim<'{' stmtList? '}'> } 920 | 921 | 922 | // Statement list 923 | 924 | stmtList { stmt+ } 925 | 926 | 927 | // Empty statement 928 | 929 | emptyStmt { ';' } 930 | 931 | 932 | // Labeled statement 933 | 934 | labeledStmt { identifier ':' stmt } 935 | 936 | 937 | // Declaration statement 938 | 939 | declStmt 940 | { LocalVarDecl 941 | | LocalConstDecl 942 | | LocalFuncDecl 943 | } 944 | 945 | 946 | // Local variable declaration 947 | 948 | LocalVarDecl 949 | { varRefModifier kw<"var"> csep1 950 | | varRefModifier type csep1 951 | | kw<"var"> varDesignation !assign '=' expr 952 | | kw<"var"> csep1 953 | // BUGGY!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 954 | //| type !varDecl varDesignation !assign '=' expr 955 | | type !varDecl csep1 956 | } 957 | 958 | varRefModifier 959 | { scoped refReadonly? 960 | | refReadonly 961 | } 962 | 963 | refReadonly 964 | { readonly ref readonly 965 | | readonly ref 966 | | ref readonly 967 | | ref ~ref 968 | } 969 | 970 | localVarType { type | kw<"var"> } 971 | 972 | VarName { identifier ~tid } 973 | 974 | varDeclarator { VarName (!assign '=' ref? varInit)? } 975 | 976 | varInit 977 | { expr 978 | | arrayInit 979 | } 980 | 981 | 982 | // Local constant declaration 983 | 984 | LocalConstDecl { 985 | kw<"const"> type csep1 986 | } 987 | 988 | ConstName { identifier ~tid } 989 | 990 | constDeclarator { ConstName !assign '=' expr } 991 | 992 | 993 | // Local function declaration 994 | 995 | LocalFuncDecl { localFuncHeader localFuncBody } 996 | 997 | localFuncHeader { 998 | (kw<"async"> | kw<"unsafe"> | kw<"static"> | kw<"extern">)* 999 | (ref ~ref)? type MethodName 1000 | (!typeParams typeParamList)? !params formalParams 1001 | typeParamConstraintsClause* 1002 | } 1003 | 1004 | localFuncBody 1005 | { block 1006 | | '=>' ref? expr ';' 1007 | } 1008 | 1009 | 1010 | // Expression statement 1011 | 1012 | exprStmt { stmtExpr ';' } 1013 | 1014 | stmtExpr 1015 | { callExprStmt 1016 | | ObjectCreationExpr 1017 | | assignment 1018 | | postIncrementExpr 1019 | | postDecrementExpr 1020 | | preIncrementExpr 1021 | | preDecrementExpr 1022 | | awaitExpr 1023 | } 1024 | 1025 | callExprStmt 1026 | { MethodName typeArgumentList? !call arguments 1027 | | primaryExpr !memberAccess memberCall 1028 | | primaryExpr typeArgumentList? !call arguments 1029 | } 1030 | 1031 | 1032 | // Selection statement 1033 | 1034 | selectionStmt { ifStmt | switchStmt } 1035 | 1036 | 1037 | // If statement 1038 | 1039 | ifStmt { 1040 | kw<"if"> delim<'(' expr ')'> embeddedStmt 1041 | (!else kw<"else"> embeddedStmt)? 1042 | } 1043 | 1044 | 1045 | // Switch statement 1046 | 1047 | switchStmt { kw<"switch"> delim<'(' expr ')'> switchBlock } 1048 | 1049 | switchBlock { delim<'{' switchBodyStart? '}'> } 1050 | 1051 | switchBodyStart 1052 | { kw<"case"> pattern (kw<"when"> expr)? ':' switchBody? 1053 | | kw<"default"> ':' switchBody? 1054 | } 1055 | 1056 | switchBody 1057 | { kw<"case"> pattern (kw<"when"> expr)? ':' switchBody? 1058 | | kw<"default"> ~default ':' stmt* 1059 | | stmt switchBody? 1060 | } 1061 | 1062 | 1063 | // Iteration statement 1064 | 1065 | iterationStmt 1066 | { whileStmt 1067 | | doStmt 1068 | | forStmt 1069 | | foreachStmt 1070 | } 1071 | 1072 | 1073 | // While statement 1074 | 1075 | whileStmt { kw<"while"> delim<'(' expr ')'> embeddedStmt } 1076 | 1077 | 1078 | // Do statement 1079 | 1080 | doStmt { kw<"do"> embeddedStmt kw<"while"> delim<'(' expr ')'> ';' } 1081 | 1082 | 1083 | // For statement 1084 | 1085 | forStmt { 1086 | kw<"for"> delim<'(' forInit? ';' expr? ';' forIter? ')'> embeddedStmt 1087 | } 1088 | 1089 | forInit { LocalVarDecl | csep1 } 1090 | 1091 | forIter { csep1 } 1092 | 1093 | 1094 | // Foreach statement 1095 | 1096 | foreachStmt { 1097 | kw<"await">? kw<"foreach"> delim<'(' scoped? localVarType varDesignation kw<"in"> expr ')'> 1098 | embeddedStmt 1099 | } 1100 | 1101 | 1102 | // Control flow statement 1103 | 1104 | jumpStmt 1105 | { breakStmt 1106 | | continueStmt 1107 | | gotoStmt 1108 | | returnStmt 1109 | | throwStmt 1110 | } 1111 | 1112 | breakStmt { kw<"break"> ';' } 1113 | 1114 | continueStmt { kw<"continue"> ';' } 1115 | 1116 | gotoStmt 1117 | { kw<"goto"> identifier ';' 1118 | | kw<"goto"> kw<"case"> expr ';' 1119 | | kw<"goto"> kw<"default"> ';' 1120 | } 1121 | 1122 | returnStmt { kw<"return"> (ref? expr)? ';' } 1123 | 1124 | throwStmt { kw<"throw"> expr? ';' } 1125 | 1126 | 1127 | // Try statement 1128 | 1129 | tryStmt 1130 | { kw<"try"> block catchClauses 1131 | | kw<"try"> block catchClauses? finallyClause 1132 | } 1133 | 1134 | catchClauses 1135 | { specificCatchClause+ 1136 | | specificCatchClause* generalCatchClause 1137 | } 1138 | 1139 | specificCatchClause 1140 | { kw<"catch"> exceptionSpecifier exceptionFilter? block 1141 | | kw<"catch"> exceptionFilter block 1142 | } 1143 | 1144 | exceptionSpecifier { delim<'(' type VarName? ')'> } 1145 | 1146 | exceptionFilter { kw<"when"> delim<'(' expr ')'> } 1147 | 1148 | generalCatchClause { kw<"catch"> block } 1149 | 1150 | finallyClause { kw<"finally"> block } 1151 | 1152 | 1153 | // Checked/Unchecked statement 1154 | 1155 | checkedStmt { kw<"checked"> block } 1156 | 1157 | uncheckedStmt { kw<"unchecked"> block } 1158 | 1159 | 1160 | // Lock statement 1161 | 1162 | lockStmt { kw<"lock"> delim<'(' expr ')'> embeddedStmt } 1163 | 1164 | 1165 | // Using statement 1166 | 1167 | usingStmt { kw<"using"> delim<'(' resourceAcquisition ')'> embeddedStmt } 1168 | 1169 | resourceAcquisition { LocalVarDecl | expr } 1170 | 1171 | 1172 | // Yield statement 1173 | 1174 | yieldStmt 1175 | { kw<"yield"> kw<"return"> expr ';' 1176 | | kw<"yield"> kw<"break"> ';' 1177 | } 1178 | 1179 | 1180 | // Unsafe statement 1181 | 1182 | unsafeStmt { kw<"unsafe"> block } 1183 | 1184 | 1185 | // Fixed statement 1186 | 1187 | fixedStmt { 1188 | kw<"fixed"> delim<'(' type csep1 ')'> embeddedStmt 1189 | } 1190 | 1191 | fixedPtrDeclarator { identifier '=' expr } 1192 | 1193 | 1194 | // Compilation unit 1195 | 1196 | compilationUnit { 1197 | externAliasDirective* usingDirective* /*globalAttrs?*/ namespaceMemberDecl* 1198 | } 1199 | 1200 | 1201 | // Namespace declaration 1202 | 1203 | namespaceDecl { kw<"namespace"> sep1 namespaceBody? ';'? } 1204 | 1205 | namespaceBody { 1206 | delim<'{' externAliasDirective* usingDirective* namespaceMemberDecl* '}'> 1207 | } 1208 | 1209 | 1210 | // Extern alias directive 1211 | 1212 | externAliasDirective { kw<"extern"> kw<"alias"> identifier ';' } 1213 | 1214 | 1215 | // Using directive 1216 | 1217 | usingDirective 1218 | { kw<"using"> TypeIdentifier '=' namespaceOrTypeName ';' 1219 | | kw<"global">? kw<"using"> namespaceName ';' 1220 | | kw<"global">? kw<"using"> kw<"static"> typeName ';' 1221 | } 1222 | 1223 | 1224 | // Namespace member declaration 1225 | 1226 | namespaceMemberDecl { namespaceDecl | typeDecl } 1227 | 1228 | 1229 | // Type declaration 1230 | 1231 | typeDecl 1232 | { classDecl 1233 | | structDecl 1234 | | interfaceDecl 1235 | | recordDecl 1236 | | enumDecl 1237 | | delegateDecl 1238 | } 1239 | 1240 | 1241 | // General 1242 | 1243 | QualifiedAliasMember { TypeIdentifier !typeAccess '::' TypeIdentifier typeArgumentList? } 1244 | 1245 | 1246 | // Modifiers 1247 | 1248 | modifier 1249 | { kw<'new'> 1250 | | kw<'public'> 1251 | | kw<'protected'> 1252 | | kw<'internal'> 1253 | | kw<'private'> 1254 | | kw<'static'> 1255 | | kw<'virtual'> 1256 | | kw<'sealed'> 1257 | | kw<'override'> 1258 | | kw<'abstract'> 1259 | | kw<'extern'> 1260 | | kw<'unsafe'> 1261 | | kw<'async'> 1262 | | kw<'readonly'> 1263 | | kw<'volatile'> 1264 | | kw<'partial'> 1265 | | kw<'ref'> 1266 | | kw<'required'> 1267 | | ckw<'file'> 1268 | } 1269 | 1270 | 1271 | // Type parameters 1272 | 1273 | typeParamList { '<' typeParams '>' } 1274 | 1275 | typeParams { csep1<(attrs? typeParam)> } 1276 | 1277 | typeParam { TypeIdentifier } 1278 | 1279 | 1280 | // Type parameter constraints 1281 | 1282 | typeParamConstraintsClause { kw<"where"> typeParam ':' typeParamConstraints } 1283 | 1284 | typeParamConstraints 1285 | { csep1 (',' ctorConstraint)? 1286 | | ctorConstraint 1287 | } 1288 | 1289 | primaryConstraint 1290 | { typeName '?'? 1291 | | kw<"class"> '?'? 1292 | | kw<"struct"> 1293 | | kw<"notnull"> 1294 | | kw<"default"> 1295 | | kw<"unmanaged"> 1296 | } 1297 | 1298 | ctorConstraint { new '(' ')' } 1299 | 1300 | 1301 | // Class declaration 1302 | 1303 | classDecl { 1304 | attrs? modifier* kw<"class"> 1305 | TypeIdentifier typeParamList? classBase? typeParamConstraintsClause* 1306 | classBody ';'? 1307 | } 1308 | 1309 | classBase { ':' csep1 } 1310 | 1311 | classBody { delim<'{' classMemberDecl* '}'> } 1312 | 1313 | classMemberDecl 1314 | { constantDecl 1315 | | fieldDecl 1316 | | methodDecl 1317 | | propertyDecl 1318 | | eventDecl 1319 | | indexerDecl 1320 | | operatorDecl 1321 | | ctorDecl 1322 | | finalizerDecl 1323 | | typeDecl 1324 | } 1325 | 1326 | 1327 | // Constant declaration 1328 | 1329 | constantDecl { 1330 | attrs? modifier* kw<"const"> type csep1 ';' 1331 | } 1332 | 1333 | 1334 | // Field declaration 1335 | 1336 | fieldDecl { 1337 | attrs? modifier* type csep1 ';' 1338 | } 1339 | 1340 | 1341 | // Method declaration 1342 | 1343 | methodDecl { attrs? modifier* methodHeader typeParamConstraintsClause* methodBody } 1344 | 1345 | // BUGGY!!!!!!!!!!!!!!!!!!!!!!!!!! 1346 | // type args get confused with type params 1347 | memberTypeNameAccess 1348 | { !typeAccess '.' TypeIdentifier typeArgumentList? memberTypeNameAccess 1349 | | !typeAccess '.' end 1350 | } 1351 | 1352 | memberTypeName 1353 | { TypeIdentifier typeArgumentList? memberTypeNameAccess 1354 | | QualifiedAliasMember memberTypeNameAccess 1355 | | end 1356 | } 1357 | 1358 | MethodName { identifier ~tid } 1359 | 1360 | methodHeader { 1361 | type memberTypeName<(MethodName typeParamList?)> !params formalParams 1362 | } 1363 | 1364 | methodBody 1365 | { block 1366 | | '=>' ref? expr ';' 1367 | | ';' 1368 | } 1369 | 1370 | 1371 | // Parameters 1372 | 1373 | formalParams { delim<'(' formalParamList? ')'> } 1374 | 1375 | formalParamList 1376 | { attrs? paramModifier? type ParamName defaultArg? (!comma ',' formalParamList)? 1377 | | attrs? ckw<"params"> arrayType ParamName 1378 | } 1379 | 1380 | ParamName { identifier ~id ~tid } 1381 | 1382 | fixedParam { 1383 | attrs? paramModifier? type ParamName defaultArg? 1384 | } 1385 | 1386 | defaultArg { !assign '=' expr } 1387 | 1388 | paramModifier 1389 | { paramModeModifier 1390 | | scoped paramModeModifier? 1391 | | kw<"this"> scoped? paramModeModifier? 1392 | } 1393 | 1394 | paramModeModifier 1395 | { kw<"ref"> 1396 | | kw<"out"> 1397 | | kw<"in"> 1398 | } 1399 | 1400 | 1401 | // Property declaration 1402 | 1403 | propertyDecl { 1404 | attrs? modifier* type propertyName propertyBody 1405 | } 1406 | 1407 | PropertyName { identifier ~tid } 1408 | 1409 | // TODO: fix `type A.B()` parsing `A.B` as full type 1410 | propertyName { memberTypeName } 1411 | 1412 | propertyBody 1413 | { delim<'{' accessorDecls '}'> propertyInit? 1414 | | '=>' ref? expr ';' 1415 | } 1416 | 1417 | propertyInit { '=' varInit ';' } 1418 | 1419 | accessorDecls 1420 | { getAccessorDecl setAccessorDecl? 1421 | | setAccessorDecl getAccessorDecl? 1422 | } 1423 | 1424 | getAccessorDecl { attrs? accessorModifier? kw<"get"> accessorBody } 1425 | 1426 | setAccessorDecl { attrs? accessorModifier? (kw<"set"> | kw<"init">) accessorBody } 1427 | 1428 | accessorModifier 1429 | { kw<'protected'> 1430 | | kw<'internal'> 1431 | | kw<'private'> 1432 | | kw<'protected'> kw<'internal'> 1433 | | kw<'internal'> kw<'protected'> 1434 | | kw<'protected'> kw<'private'> 1435 | | kw<'private'> kw<'protected'> 1436 | } 1437 | 1438 | accessorBody 1439 | { block 1440 | | '=>' ref? expr ';' 1441 | | ';' 1442 | } 1443 | 1444 | 1445 | // Event declaration 1446 | 1447 | eventDecl { 1448 | attrs? modifier* kw<"event"> type 1449 | ( csep1 1450 | | memberTypeName delim<'{' eventAccessorDecls '}'> 1451 | ) 1452 | } 1453 | 1454 | eventAccessorDecls 1455 | { addAccessorDecl removeAccessorDecl 1456 | | removeAccessorDecl addAccessorDecl 1457 | } 1458 | 1459 | addAccessorDecl { attrs? ckw<"add"> block } 1460 | 1461 | removeAccessorDecl { attrs? ckw<"remove"> block } 1462 | 1463 | 1464 | // Indexer declaration 1465 | 1466 | indexerDecl { 1467 | attrs? modifier* indexerDeclarator indexerBody 1468 | } 1469 | 1470 | indexerDeclarator { type memberTypeName> delim<'[' formalParamList ']'> } 1471 | 1472 | indexerBody 1473 | { delim<'{' accessorDecls '}'> 1474 | | '=>' ref? expr ';' 1475 | } 1476 | 1477 | 1478 | // Operator declaration 1479 | 1480 | operatorDecl { 1481 | attrs? modifier+ operatorDeclarator operatorBody 1482 | } 1483 | 1484 | operatorDeclarator 1485 | { unaryOpDeclarator 1486 | | binaryOpDeclarator 1487 | | conversionOpDeclarator 1488 | } 1489 | 1490 | unaryOpDeclarator { 1491 | type kw<"operator"> 1492 | ( '+' | '-' | '!' | '~' | '++' | '--' | BooleanLiteral ) 1493 | delim<'(' fixedParam ')'> 1494 | } 1495 | 1496 | binaryOpDeclarator { 1497 | type kw<"operator"> 1498 | ( '+' | '-' | '*' | '/' | '%' | '&' | '|' | '^' | '<<' 1499 | | RightShift | '==' | '!=' | '>' | '<' | '>=' | '<=' 1500 | ) 1501 | delim<'(' fixedParam ',' fixedParam ')'> 1502 | } 1503 | 1504 | conversionOpDeclarator { 1505 | (kw<"implicit"> | kw<"explicit">) kw<"operator"> type 1506 | delim<'(' fixedParam ')'> 1507 | } 1508 | 1509 | operatorBody 1510 | { block 1511 | | '=>' ref? expr ';' 1512 | | ';' 1513 | } 1514 | 1515 | 1516 | // Constructor declaration 1517 | 1518 | ctorDecl { 1519 | attrs? modifier* ctorDeclarator ctorBody 1520 | } 1521 | 1522 | ctorDeclarator { 1523 | TypeIdentifier formalParams ctorInit 1524 | } 1525 | 1526 | ctorInit { ':' (kw<"base"> | kw<"this">) arguments } 1527 | 1528 | ctorBody 1529 | { block 1530 | | '=>' expr ';' 1531 | | ';' 1532 | } 1533 | 1534 | 1535 | // Finalizer declaration 1536 | 1537 | finalizerDecl { 1538 | attrs? modifier* '~' TypeIdentifier '(' ')' finalizerBody 1539 | } 1540 | 1541 | finalizerBody 1542 | { block 1543 | | '=>' expr ';' 1544 | | ';' 1545 | } 1546 | 1547 | 1548 | // Struct declaration 1549 | 1550 | structDecl { 1551 | attrs? modifier* kw<"struct"> 1552 | TypeIdentifier typeParamList? classBase? typeParamConstraintsClause* 1553 | structBody ';'? 1554 | } 1555 | 1556 | structBody { delim<'{' structMemberDecl* '}'> } 1557 | 1558 | structMemberDecl 1559 | { constantDecl 1560 | | fieldDecl 1561 | | methodDecl 1562 | | propertyDecl 1563 | | eventDecl 1564 | | indexerDecl 1565 | | operatorDecl 1566 | | ctorDecl 1567 | | typeDecl 1568 | | fixedSizeBufferDecl 1569 | } 1570 | 1571 | 1572 | // Array initializer 1573 | 1574 | arrayInit 1575 | { delim<'{' varInitList? '}'> 1576 | | delim<'{' varInitList ',' '}'> 1577 | } 1578 | 1579 | varInitList { csep1<(expr | arrayInit)> } 1580 | 1581 | 1582 | // Stackalloc initializer 1583 | 1584 | stackallocInit 1585 | { kw<"stackalloc"> nonArrayType delim<'[' expr ']'> 1586 | | kw<"stackalloc"> delim<'[' expr? ']'> delim<'{' csep1 '}'> 1587 | } 1588 | 1589 | 1590 | // Interface declaration 1591 | 1592 | interfaceDecl { 1593 | attrs? modifier* kw<"interface"> 1594 | TypeIdentifier variantTypeParamList? classBase? typeParamConstraintsClause* 1595 | interfaceBody ';'? 1596 | } 1597 | 1598 | variantTypeParamList { '<' csep1 '>' } 1599 | 1600 | variantTypeParam { attrs? varianceAnnotation? typeParam } 1601 | 1602 | varianceAnnotation { kw<"in"> | kw<"out"> } 1603 | 1604 | interfaceBody { delim<'{' interfaceMemberDecl* '}'> } 1605 | 1606 | interfaceMemberDecl 1607 | { interfaceMethodDecl 1608 | | interfacePropertyDecl 1609 | | interfaceEventDecl 1610 | | interfaceIndexerDecl 1611 | } 1612 | 1613 | 1614 | // Interface method declaration 1615 | 1616 | interfaceMethodDecl { 1617 | attrs? new? type MethodName typeParamList? 1618 | formalParams typeParamConstraintsClause* ';' 1619 | } 1620 | 1621 | 1622 | // Interface property declaration 1623 | 1624 | interfacePropertyDecl { 1625 | attrs? new? type PropertyName delim<'{' interfaceAccessors '}'> 1626 | } 1627 | 1628 | interfaceAccessors 1629 | { attrs? kw<"get"> ';' 1630 | | attrs? kw<"set"> ';' 1631 | | attrs? kw<"get"> ';' attrs? kw<"set"> ';' 1632 | | attrs? kw<"set"> ';' attrs? kw<"get"> ';' 1633 | } 1634 | 1635 | 1636 | // Interface event declaration 1637 | 1638 | interfaceEventDecl { 1639 | attrs? new? kw<"event"> type MethodName ';' 1640 | } 1641 | 1642 | 1643 | // Interface indexer declaration 1644 | 1645 | interfaceIndexerDecl { 1646 | attrs? new? type kw<"this"> delim<'[' formalParamList ']'> 1647 | delim<'{' interfaceAccessors '}'> 1648 | } 1649 | 1650 | 1651 | // Record declaration 1652 | 1653 | recordDecl { 1654 | attrs? modifier* kw<"record"> kw<"struct">? 1655 | TypeIdentifier typeParamList? typeParamConstraintsClause* 1656 | formalParams? recordBase? 1657 | (classBody ';'? | ';') 1658 | } 1659 | 1660 | recordBase { 1661 | ':' typeName arguments? (',' typeName)* 1662 | } 1663 | 1664 | 1665 | // Enum declaration 1666 | 1667 | enumDecl { 1668 | attrs? modifier* kw<"enum"> TypeIdentifier enumBase? enumBody 1669 | } 1670 | 1671 | enumBase { ':' (SimpleType | typeName) } 1672 | 1673 | enumBody 1674 | { delim<'{' csep1 '}'> 1675 | | delim<'{' csep0 ',' '}'> 1676 | } 1677 | 1678 | enumMemberDecl { 1679 | attrs? ConstName ('=' expr)? 1680 | } 1681 | 1682 | 1683 | // Delegate declaration 1684 | 1685 | delegateDecl { 1686 | attrs? modifier* kw<"delegate"> type TypeIdentifier 1687 | variantTypeParamList? formalParams typeParamConstraintsClause* 1688 | ';' 1689 | } 1690 | 1691 | 1692 | // Fixed-size buffer declaration 1693 | 1694 | fixedSizeBufferDecl { 1695 | attrs? modifier* kw<"fixed"> type 1696 | csep1 ';' 1697 | } 1698 | 1699 | fixedSizeBufferDeclarator { identifier delim<'[' expr ']'> } 1700 | 1701 | 1702 | // Attributes 1703 | 1704 | /*globalAttrs { globalAttrSection+ } 1705 | 1706 | globalAttrSection { 1707 | '[' globalAttrTargetSpecifier csep1 ','? ']' 1708 | } 1709 | 1710 | globalAttrTargetSpecifier { globalAttrTarget ':' } 1711 | 1712 | globalAttrTarget { identifier }*/ 1713 | 1714 | attrs { attrSection+ } 1715 | 1716 | attrSection { 1717 | delim<'[' attrTargetSpecifier? csep1 ','? ']'> 1718 | } 1719 | 1720 | attrTargetSpecifier { attrTarget ':' } 1721 | 1722 | attrTarget { identifier } 1723 | 1724 | attr { typeName attrArgs? } 1725 | 1726 | attrArgs { delim<'(' attrArgListPos? ')'> } 1727 | 1728 | attrArgListPos 1729 | { ArgumentName nonAssignmentExpr (!comma ',' attrArgListPos)? 1730 | | nonAssignmentExpr (!comma ',' attrArgListPos)? 1731 | | AttrsNamedArg !assign '=' nonAssignmentExpr (!comma ',' attrArgListNamed) 1732 | } 1733 | 1734 | attrArgListNamed { 1735 | AttrsNamedArg !assign '=' nonAssignmentExpr (!comma ',' attrArgListNamed) 1736 | } 1737 | 1738 | AttrsNamedArg[@dynamicPrecedence=1] { identifier ~id } 1739 | 1740 | 1741 | // Util 1742 | 1743 | kw { @specialize[@name=Keyword] } 1744 | 1745 | ckw { @extend[@name=ContextualKeyword] } 1746 | 1747 | delim { delim[@name=Delim] { contents } } 1748 | 1749 | sep1 { rule (by rule)* } 1750 | 1751 | //sep0 { sep1? } 1752 | 1753 | csep1 { sep1 } 1754 | 1755 | csep0 { csep1? } 1756 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.12.13": 6 | version "7.16.7" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" 8 | integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== 9 | dependencies: 10 | "@babel/highlight" "^7.16.7" 11 | 12 | "@babel/helper-validator-identifier@^7.16.7": 13 | version "7.16.7" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" 15 | integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== 16 | 17 | "@babel/highlight@^7.16.7": 18 | version "7.17.9" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.9.tgz#61b2ee7f32ea0454612def4fccdae0de232b73e3" 20 | integrity sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.16.7" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@codemirror/autocomplete@^6.0.0": 27 | version "6.3.2" 28 | resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.3.2.tgz#cfd5d8eb2348dddf7b63098f9f09ff47b02f57db" 29 | integrity sha512-+VzxrHWkuvSSt0fw4I57SULo/NMrLnNgm6JHrkbIYfDw9jZJNTruCwkv32TCqSeC8xIXhYWMuxawwr/xOoHr8w== 30 | dependencies: 31 | "@codemirror/language" "^6.0.0" 32 | "@codemirror/state" "^6.0.0" 33 | "@codemirror/view" "^6.5.0" 34 | "@lezer/common" "^1.0.0" 35 | 36 | "@codemirror/buildhelper@^0.1.16": 37 | version "0.1.16" 38 | resolved "https://registry.yarnpkg.com/@codemirror/buildhelper/-/buildhelper-0.1.16.tgz#bda138522fdade53d63f457c440b64be48c7fa71" 39 | integrity sha512-b88pPVoLoBp3DHe+CK5p/1t/WFGYRGxn69d9Efp/cEP3uF91hXTIKOimaL3IyVhm9q6ILjKzn8q8MFUUy7GvwA== 40 | dependencies: 41 | "@lezer/generator" "^1.0.0" 42 | "@types/mocha" "^9.1.1" 43 | acorn "^8.1.0" 44 | acorn-walk "^8.0.2" 45 | esmoduleserve "^0.2.0" 46 | ist "^1.1.7" 47 | mocha "^10.0.0" 48 | rollup "^2.35.1" 49 | rollup-plugin-dts "^3.0.0" 50 | selenium-webdriver "^4.0.0-beta.3" 51 | serve-static "^1.14.1" 52 | typescript "^4.2.3" 53 | 54 | "@codemirror/commands@^6.0.0": 55 | version "6.1.2" 56 | resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.1.2.tgz#84fb7d170047c3aeb7b0047ace59510bb19208de" 57 | integrity sha512-sO3jdX1s0pam6lIdeSJLMN3DQ6mPEbM4yLvyKkdqtmd/UDwhXA5+AwFJ89rRXm6vTeOXBsE5cAmlos/t7MJdgg== 58 | dependencies: 59 | "@codemirror/language" "^6.0.0" 60 | "@codemirror/state" "^6.0.0" 61 | "@codemirror/view" "^6.0.0" 62 | "@lezer/common" "^1.0.0" 63 | 64 | "@codemirror/language@^6.0.0": 65 | version "6.3.1" 66 | resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.3.1.tgz#1d61f33aa5de9aa74a713ee1f5ce600adc74df6b" 67 | integrity sha512-MK+G1QKaGfSEUg9YEFaBkMBI6j1ge4VMBPZv9fDYotw7w695c42x5Ba1mmwBkesYnzYFBfte6Hh9TDcKa6xORQ== 68 | dependencies: 69 | "@codemirror/state" "^6.0.0" 70 | "@codemirror/view" "^6.0.0" 71 | "@lezer/common" "^1.0.0" 72 | "@lezer/highlight" "^1.0.0" 73 | "@lezer/lr" "^1.0.0" 74 | style-mod "^4.0.0" 75 | 76 | "@codemirror/lint@^6.0.0": 77 | version "6.1.0" 78 | resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.1.0.tgz#f006142d3a580fdb8ffc2faa3361b2232c08e079" 79 | integrity sha512-mdvDQrjRmYPvQ3WrzF6Ewaao+NWERYtpthJvoQ3tK3t/44Ynhk8ZGjTSL9jMEv8CgSMogmt75X8ceOZRDSXHtQ== 80 | dependencies: 81 | "@codemirror/state" "^6.0.0" 82 | "@codemirror/view" "^6.0.0" 83 | crelt "^1.0.5" 84 | 85 | "@codemirror/search@^6.0.0": 86 | version "6.2.3" 87 | resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.2.3.tgz#fab933fef1b1de8ef40cda275c73d9ac7a1ff40f" 88 | integrity sha512-V9n9233lopQhB1dyjsBK2Wc1i+8hcCqxl1wQ46c5HWWLePoe4FluV3TGHoZ04rBRlGjNyz9DTmpJErig8UE4jw== 89 | dependencies: 90 | "@codemirror/state" "^6.0.0" 91 | "@codemirror/view" "^6.0.0" 92 | crelt "^1.0.5" 93 | 94 | "@codemirror/state@^6.0.0", "@codemirror/state@^6.1.4": 95 | version "6.1.4" 96 | resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.1.4.tgz#2b654ae233ac4f41ee89ce095509ea35ecdf1031" 97 | integrity sha512-g+3OJuRylV5qsXuuhrc6Cvs1NQluNioepYMM2fhnpYkNk7NgX+j0AFuevKSVKzTDmDyt9+Puju+zPdHNECzCNQ== 98 | 99 | "@codemirror/theme-one-dark@^6.0.0": 100 | version "6.1.0" 101 | resolved "https://registry.yarnpkg.com/@codemirror/theme-one-dark/-/theme-one-dark-6.1.0.tgz#6f8b3c7fc22e9fec59edd573f4ba9546db42e007" 102 | integrity sha512-AiTHtFRu8+vWT9wWUWDM+cog6ZwgivJogB1Tm/g40NIpLwph7AnmxrSzWfvJN5fBVufsuwBxecQCNmdcR5D7Aw== 103 | dependencies: 104 | "@codemirror/language" "^6.0.0" 105 | "@codemirror/state" "^6.0.0" 106 | "@codemirror/view" "^6.0.0" 107 | "@lezer/highlight" "^1.0.0" 108 | 109 | "@codemirror/view@^6.0.0", "@codemirror/view@^6.5.0": 110 | version "6.5.1" 111 | resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.5.1.tgz#f4533cd796f0569508822d0012bee9a15dc4b3f9" 112 | integrity sha512-xBKP8N3AXOs06VcKvIuvIQoUlGs7Hb78ftJWahLaRX909jKPMgGxR5XjvrawzTTZMSTU3DzdjDNPwG6fPM/ypQ== 113 | dependencies: 114 | "@codemirror/state" "^6.1.4" 115 | style-mod "^4.0.0" 116 | w3c-keyname "^2.2.4" 117 | 118 | "@esbuild/linux-loong64@0.14.54": 119 | version "0.14.54" 120 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" 121 | integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== 122 | 123 | "@lezer/common@^1.0.0": 124 | version "1.0.1" 125 | resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.0.1.tgz#d014fda6d582c24336fadf2715e76f02f73c8908" 126 | integrity sha512-8TR5++Q/F//tpDsLd5zkrvEX5xxeemafEaek7mUp7Y+bI8cKQXdSqhzTOBaOogETcMOVr0pT3BBPXp13477ciw== 127 | 128 | "@lezer/generator@^1.0.0": 129 | version "1.1.3" 130 | resolved "https://registry.yarnpkg.com/@lezer/generator/-/generator-1.1.3.tgz#ec57d5594142421d4f58637400486a43afb55ea5" 131 | integrity sha512-qGF0I2TTJ+VBjjsVX8FGqKJy3laALBnVbD5EbXEu13Sgszl/vjnxjcZ69O8w9IK8/WtVFQLspU4UjCCUNRlWzA== 132 | dependencies: 133 | "@lezer/common" "^1.0.0" 134 | "@lezer/lr" "^1.0.0" 135 | 136 | "@lezer/highlight@^1.0.0": 137 | version "1.1.2" 138 | resolved "https://registry.yarnpkg.com/@lezer/highlight/-/highlight-1.1.2.tgz#60cd6c2a0a2cf753b8a026b04feeb0ea8df326ea" 139 | integrity sha512-CAun1WR1glxG9ZdOokTZwXbcwB7PXkIEyZRUMFBVwSrhTcogWq634/ByNImrkUnQhjju6xsIaOBIxvcRJtplXQ== 140 | dependencies: 141 | "@lezer/common" "^1.0.0" 142 | 143 | "@lezer/lr@^1.0.0": 144 | version "1.2.4" 145 | resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.2.4.tgz#380b8586c5578ca5d1187afd2284d51af103951e" 146 | integrity sha512-L/52/oMJBFXXx8qBYF4UgktLP2geQ/qn5Fd8+5L/mqlLLCB9+qdKktFAtejd9FdFMaFx6lrP5rmLz4sN3Kplcg== 147 | dependencies: 148 | "@lezer/common" "^1.0.0" 149 | 150 | "@types/mocha@^9.1.1": 151 | version "9.1.1" 152 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" 153 | integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== 154 | 155 | "@ungap/promise-all-settled@1.1.2": 156 | version "1.1.2" 157 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" 158 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 159 | 160 | acorn-walk@^8.0.0, acorn-walk@^8.0.2: 161 | version "8.2.0" 162 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" 163 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 164 | 165 | acorn@^8.0.4, acorn@^8.1.0: 166 | version "8.7.0" 167 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" 168 | integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== 169 | 170 | ansi-colors@4.1.1: 171 | version "4.1.1" 172 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 173 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 174 | 175 | ansi-regex@^5.0.1: 176 | version "5.0.1" 177 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 178 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 179 | 180 | ansi-styles@^3.2.1: 181 | version "3.2.1" 182 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 183 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 184 | dependencies: 185 | color-convert "^1.9.0" 186 | 187 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 188 | version "4.3.0" 189 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 190 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 191 | dependencies: 192 | color-convert "^2.0.1" 193 | 194 | anymatch@~3.1.2: 195 | version "3.1.2" 196 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 197 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 198 | dependencies: 199 | normalize-path "^3.0.0" 200 | picomatch "^2.0.4" 201 | 202 | argparse@^2.0.1: 203 | version "2.0.1" 204 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 205 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 206 | 207 | balanced-match@^1.0.0: 208 | version "1.0.2" 209 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 210 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 211 | 212 | binary-extensions@^2.0.0: 213 | version "2.2.0" 214 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 215 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 216 | 217 | brace-expansion@^1.1.7: 218 | version "1.1.11" 219 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 220 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 221 | dependencies: 222 | balanced-match "^1.0.0" 223 | concat-map "0.0.1" 224 | 225 | brace-expansion@^2.0.1: 226 | version "2.0.1" 227 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 228 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 229 | dependencies: 230 | balanced-match "^1.0.0" 231 | 232 | braces@~3.0.2: 233 | version "3.0.2" 234 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 235 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 236 | dependencies: 237 | fill-range "^7.0.1" 238 | 239 | browser-stdout@1.3.1: 240 | version "1.3.1" 241 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 242 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 243 | 244 | call-bind@^1.0.0, call-bind@^1.0.2: 245 | version "1.0.2" 246 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 247 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 248 | dependencies: 249 | function-bind "^1.1.1" 250 | get-intrinsic "^1.0.2" 251 | 252 | camelcase@^6.0.0: 253 | version "6.3.0" 254 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 255 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 256 | 257 | chalk@^2.0.0, chalk@^2.4.1: 258 | version "2.4.2" 259 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 260 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 261 | dependencies: 262 | ansi-styles "^3.2.1" 263 | escape-string-regexp "^1.0.5" 264 | supports-color "^5.3.0" 265 | 266 | chalk@^4.1.0: 267 | version "4.1.2" 268 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 269 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 270 | dependencies: 271 | ansi-styles "^4.1.0" 272 | supports-color "^7.1.0" 273 | 274 | chokidar@3.5.3: 275 | version "3.5.3" 276 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 277 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 278 | dependencies: 279 | anymatch "~3.1.2" 280 | braces "~3.0.2" 281 | glob-parent "~5.1.2" 282 | is-binary-path "~2.1.0" 283 | is-glob "~4.0.1" 284 | normalize-path "~3.0.0" 285 | readdirp "~3.6.0" 286 | optionalDependencies: 287 | fsevents "~2.3.2" 288 | 289 | cliui@^7.0.2: 290 | version "7.0.4" 291 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 292 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 293 | dependencies: 294 | string-width "^4.2.0" 295 | strip-ansi "^6.0.0" 296 | wrap-ansi "^7.0.0" 297 | 298 | codemirror@^6.0.0: 299 | version "6.0.1" 300 | resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-6.0.1.tgz#62b91142d45904547ee3e0e0e4c1a79158035a29" 301 | integrity sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg== 302 | dependencies: 303 | "@codemirror/autocomplete" "^6.0.0" 304 | "@codemirror/commands" "^6.0.0" 305 | "@codemirror/language" "^6.0.0" 306 | "@codemirror/lint" "^6.0.0" 307 | "@codemirror/search" "^6.0.0" 308 | "@codemirror/state" "^6.0.0" 309 | "@codemirror/view" "^6.0.0" 310 | 311 | color-convert@^1.9.0: 312 | version "1.9.3" 313 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 314 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 315 | dependencies: 316 | color-name "1.1.3" 317 | 318 | color-convert@^2.0.1: 319 | version "2.0.1" 320 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 321 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 322 | dependencies: 323 | color-name "~1.1.4" 324 | 325 | color-name@1.1.3: 326 | version "1.1.3" 327 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 328 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 329 | 330 | color-name@~1.1.4: 331 | version "1.1.4" 332 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 333 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 334 | 335 | concat-map@0.0.1: 336 | version "0.0.1" 337 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 338 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 339 | 340 | core-util-is@~1.0.0: 341 | version "1.0.3" 342 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" 343 | integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== 344 | 345 | crelt@^1.0.5: 346 | version "1.0.5" 347 | resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.5.tgz#57c0d52af8c859e354bace1883eb2e1eb182bb94" 348 | integrity sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA== 349 | 350 | cross-spawn@^6.0.5: 351 | version "6.0.5" 352 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 353 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 354 | dependencies: 355 | nice-try "^1.0.4" 356 | path-key "^2.0.1" 357 | semver "^5.5.0" 358 | shebang-command "^1.2.0" 359 | which "^1.2.9" 360 | 361 | debug@2.6.9: 362 | version "2.6.9" 363 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 364 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 365 | dependencies: 366 | ms "2.0.0" 367 | 368 | debug@4.3.4: 369 | version "4.3.4" 370 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 371 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 372 | dependencies: 373 | ms "2.1.2" 374 | 375 | decamelize@^4.0.0: 376 | version "4.0.0" 377 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 378 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 379 | 380 | define-properties@^1.1.3, define-properties@^1.1.4: 381 | version "1.1.4" 382 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" 383 | integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== 384 | dependencies: 385 | has-property-descriptors "^1.0.0" 386 | object-keys "^1.1.1" 387 | 388 | depd@2.0.0: 389 | version "2.0.0" 390 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" 391 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== 392 | 393 | destroy@1.2.0: 394 | version "1.2.0" 395 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" 396 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== 397 | 398 | diff@5.0.0: 399 | version "5.0.0" 400 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 401 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 402 | 403 | ee-first@1.1.1: 404 | version "1.1.1" 405 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 406 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 407 | 408 | emoji-regex@^8.0.0: 409 | version "8.0.0" 410 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 411 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 412 | 413 | encodeurl@~1.0.2: 414 | version "1.0.2" 415 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 416 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 417 | 418 | error-ex@^1.3.1: 419 | version "1.3.2" 420 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 421 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 422 | dependencies: 423 | is-arrayish "^0.2.1" 424 | 425 | es-abstract@^1.19.0, es-abstract@^1.20.4: 426 | version "1.20.4" 427 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" 428 | integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== 429 | dependencies: 430 | call-bind "^1.0.2" 431 | es-to-primitive "^1.2.1" 432 | function-bind "^1.1.1" 433 | function.prototype.name "^1.1.5" 434 | get-intrinsic "^1.1.3" 435 | get-symbol-description "^1.0.0" 436 | has "^1.0.3" 437 | has-property-descriptors "^1.0.0" 438 | has-symbols "^1.0.3" 439 | internal-slot "^1.0.3" 440 | is-callable "^1.2.7" 441 | is-negative-zero "^2.0.2" 442 | is-regex "^1.1.4" 443 | is-shared-array-buffer "^1.0.2" 444 | is-string "^1.0.7" 445 | is-weakref "^1.0.2" 446 | object-inspect "^1.12.2" 447 | object-keys "^1.1.1" 448 | object.assign "^4.1.4" 449 | regexp.prototype.flags "^1.4.3" 450 | safe-regex-test "^1.0.0" 451 | string.prototype.trimend "^1.0.5" 452 | string.prototype.trimstart "^1.0.5" 453 | unbox-primitive "^1.0.2" 454 | 455 | es-to-primitive@^1.2.1: 456 | version "1.2.1" 457 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 458 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 459 | dependencies: 460 | is-callable "^1.1.4" 461 | is-date-object "^1.0.1" 462 | is-symbol "^1.0.2" 463 | 464 | esbuild-android-64@0.14.54: 465 | version "0.14.54" 466 | resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" 467 | integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== 468 | 469 | esbuild-android-arm64@0.14.54: 470 | version "0.14.54" 471 | resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" 472 | integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== 473 | 474 | esbuild-darwin-64@0.14.54: 475 | version "0.14.54" 476 | resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" 477 | integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== 478 | 479 | esbuild-darwin-arm64@0.14.54: 480 | version "0.14.54" 481 | resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" 482 | integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== 483 | 484 | esbuild-freebsd-64@0.14.54: 485 | version "0.14.54" 486 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" 487 | integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== 488 | 489 | esbuild-freebsd-arm64@0.14.54: 490 | version "0.14.54" 491 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" 492 | integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== 493 | 494 | esbuild-linux-32@0.14.54: 495 | version "0.14.54" 496 | resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" 497 | integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== 498 | 499 | esbuild-linux-64@0.14.54: 500 | version "0.14.54" 501 | resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" 502 | integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== 503 | 504 | esbuild-linux-arm64@0.14.54: 505 | version "0.14.54" 506 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" 507 | integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== 508 | 509 | esbuild-linux-arm@0.14.54: 510 | version "0.14.54" 511 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" 512 | integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== 513 | 514 | esbuild-linux-mips64le@0.14.54: 515 | version "0.14.54" 516 | resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" 517 | integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== 518 | 519 | esbuild-linux-ppc64le@0.14.54: 520 | version "0.14.54" 521 | resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" 522 | integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== 523 | 524 | esbuild-linux-riscv64@0.14.54: 525 | version "0.14.54" 526 | resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" 527 | integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== 528 | 529 | esbuild-linux-s390x@0.14.54: 530 | version "0.14.54" 531 | resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" 532 | integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== 533 | 534 | esbuild-netbsd-64@0.14.54: 535 | version "0.14.54" 536 | resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" 537 | integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== 538 | 539 | esbuild-openbsd-64@0.14.54: 540 | version "0.14.54" 541 | resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" 542 | integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== 543 | 544 | esbuild-sunos-64@0.14.54: 545 | version "0.14.54" 546 | resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" 547 | integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== 548 | 549 | esbuild-windows-32@0.14.54: 550 | version "0.14.54" 551 | resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" 552 | integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== 553 | 554 | esbuild-windows-64@0.14.54: 555 | version "0.14.54" 556 | resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" 557 | integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== 558 | 559 | esbuild-windows-arm64@0.14.54: 560 | version "0.14.54" 561 | resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" 562 | integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== 563 | 564 | esbuild@^0.14.27: 565 | version "0.14.54" 566 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" 567 | integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== 568 | optionalDependencies: 569 | "@esbuild/linux-loong64" "0.14.54" 570 | esbuild-android-64 "0.14.54" 571 | esbuild-android-arm64 "0.14.54" 572 | esbuild-darwin-64 "0.14.54" 573 | esbuild-darwin-arm64 "0.14.54" 574 | esbuild-freebsd-64 "0.14.54" 575 | esbuild-freebsd-arm64 "0.14.54" 576 | esbuild-linux-32 "0.14.54" 577 | esbuild-linux-64 "0.14.54" 578 | esbuild-linux-arm "0.14.54" 579 | esbuild-linux-arm64 "0.14.54" 580 | esbuild-linux-mips64le "0.14.54" 581 | esbuild-linux-ppc64le "0.14.54" 582 | esbuild-linux-riscv64 "0.14.54" 583 | esbuild-linux-s390x "0.14.54" 584 | esbuild-netbsd-64 "0.14.54" 585 | esbuild-openbsd-64 "0.14.54" 586 | esbuild-sunos-64 "0.14.54" 587 | esbuild-windows-32 "0.14.54" 588 | esbuild-windows-64 "0.14.54" 589 | esbuild-windows-arm64 "0.14.54" 590 | 591 | escalade@^3.1.1: 592 | version "3.1.1" 593 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 594 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 595 | 596 | escape-html@~1.0.3: 597 | version "1.0.3" 598 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 599 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 600 | 601 | escape-string-regexp@4.0.0: 602 | version "4.0.0" 603 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 604 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 605 | 606 | escape-string-regexp@^1.0.5: 607 | version "1.0.5" 608 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 609 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 610 | 611 | esmoduleserve@^0.2.0: 612 | version "0.2.0" 613 | resolved "https://registry.yarnpkg.com/esmoduleserve/-/esmoduleserve-0.2.0.tgz#01ed56cbee408f624641dab0b2916a54407c891e" 614 | integrity sha512-vg1j7fzKZUFR5TCsYQ3PABfBRMRi6V9K7mxcRh2MftO3gwAHBwYaPHtLHFDsKVSxdHmpu/GgT37lsRT+vezaKQ== 615 | dependencies: 616 | acorn "^8.0.4" 617 | acorn-walk "^8.0.0" 618 | resolve "^1.15.1" 619 | serve-static "^1.14.1" 620 | 621 | etag@~1.8.1: 622 | version "1.8.1" 623 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 624 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 625 | 626 | fill-range@^7.0.1: 627 | version "7.0.1" 628 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 629 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 630 | dependencies: 631 | to-regex-range "^5.0.1" 632 | 633 | find-up@5.0.0: 634 | version "5.0.0" 635 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 636 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 637 | dependencies: 638 | locate-path "^6.0.0" 639 | path-exists "^4.0.0" 640 | 641 | flat@^5.0.2: 642 | version "5.0.2" 643 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 644 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 645 | 646 | fresh@0.5.2: 647 | version "0.5.2" 648 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 649 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 650 | 651 | fs.realpath@^1.0.0: 652 | version "1.0.0" 653 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 654 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 655 | 656 | fsevents@~2.3.2: 657 | version "2.3.2" 658 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 659 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 660 | 661 | function-bind@^1.1.1: 662 | version "1.1.1" 663 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 664 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 665 | 666 | function.prototype.name@^1.1.5: 667 | version "1.1.5" 668 | resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" 669 | integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== 670 | dependencies: 671 | call-bind "^1.0.2" 672 | define-properties "^1.1.3" 673 | es-abstract "^1.19.0" 674 | functions-have-names "^1.2.2" 675 | 676 | functions-have-names@^1.2.2: 677 | version "1.2.3" 678 | resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" 679 | integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== 680 | 681 | get-caller-file@^2.0.5: 682 | version "2.0.5" 683 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 684 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 685 | 686 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: 687 | version "1.1.3" 688 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" 689 | integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== 690 | dependencies: 691 | function-bind "^1.1.1" 692 | has "^1.0.3" 693 | has-symbols "^1.0.3" 694 | 695 | get-symbol-description@^1.0.0: 696 | version "1.0.0" 697 | resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" 698 | integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== 699 | dependencies: 700 | call-bind "^1.0.2" 701 | get-intrinsic "^1.1.1" 702 | 703 | glob-parent@~5.1.2: 704 | version "5.1.2" 705 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 706 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 707 | dependencies: 708 | is-glob "^4.0.1" 709 | 710 | glob@7.2.0, glob@^7.1.3: 711 | version "7.2.0" 712 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 713 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 714 | dependencies: 715 | fs.realpath "^1.0.0" 716 | inflight "^1.0.4" 717 | inherits "2" 718 | minimatch "^3.0.4" 719 | once "^1.3.0" 720 | path-is-absolute "^1.0.0" 721 | 722 | graceful-fs@^4.1.2: 723 | version "4.2.10" 724 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 725 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 726 | 727 | has-bigints@^1.0.1, has-bigints@^1.0.2: 728 | version "1.0.2" 729 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" 730 | integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== 731 | 732 | has-flag@^3.0.0: 733 | version "3.0.0" 734 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 735 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 736 | 737 | has-flag@^4.0.0: 738 | version "4.0.0" 739 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 740 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 741 | 742 | has-property-descriptors@^1.0.0: 743 | version "1.0.0" 744 | resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" 745 | integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== 746 | dependencies: 747 | get-intrinsic "^1.1.1" 748 | 749 | has-symbols@^1.0.2, has-symbols@^1.0.3: 750 | version "1.0.3" 751 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 752 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 753 | 754 | has-tostringtag@^1.0.0: 755 | version "1.0.0" 756 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" 757 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== 758 | dependencies: 759 | has-symbols "^1.0.2" 760 | 761 | has@^1.0.3: 762 | version "1.0.3" 763 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 764 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 765 | dependencies: 766 | function-bind "^1.1.1" 767 | 768 | he@1.2.0: 769 | version "1.2.0" 770 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 771 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 772 | 773 | hosted-git-info@^2.1.4: 774 | version "2.8.9" 775 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" 776 | integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== 777 | 778 | http-errors@2.0.0: 779 | version "2.0.0" 780 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" 781 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== 782 | dependencies: 783 | depd "2.0.0" 784 | inherits "2.0.4" 785 | setprototypeof "1.2.0" 786 | statuses "2.0.1" 787 | toidentifier "1.0.1" 788 | 789 | immediate@~3.0.5: 790 | version "3.0.6" 791 | resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" 792 | integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= 793 | 794 | inflight@^1.0.4: 795 | version "1.0.6" 796 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 797 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 798 | dependencies: 799 | once "^1.3.0" 800 | wrappy "1" 801 | 802 | inherits@2, inherits@2.0.4, inherits@~2.0.3: 803 | version "2.0.4" 804 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 805 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 806 | 807 | internal-slot@^1.0.3: 808 | version "1.0.3" 809 | resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" 810 | integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== 811 | dependencies: 812 | get-intrinsic "^1.1.0" 813 | has "^1.0.3" 814 | side-channel "^1.0.4" 815 | 816 | is-arrayish@^0.2.1: 817 | version "0.2.1" 818 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 819 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== 820 | 821 | is-bigint@^1.0.1: 822 | version "1.0.4" 823 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" 824 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== 825 | dependencies: 826 | has-bigints "^1.0.1" 827 | 828 | is-binary-path@~2.1.0: 829 | version "2.1.0" 830 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 831 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 832 | dependencies: 833 | binary-extensions "^2.0.0" 834 | 835 | is-boolean-object@^1.1.0: 836 | version "1.1.2" 837 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" 838 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== 839 | dependencies: 840 | call-bind "^1.0.2" 841 | has-tostringtag "^1.0.0" 842 | 843 | is-callable@^1.1.4, is-callable@^1.2.7: 844 | version "1.2.7" 845 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" 846 | integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== 847 | 848 | is-core-module@^2.9.0: 849 | version "2.11.0" 850 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" 851 | integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== 852 | dependencies: 853 | has "^1.0.3" 854 | 855 | is-date-object@^1.0.1: 856 | version "1.0.5" 857 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" 858 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== 859 | dependencies: 860 | has-tostringtag "^1.0.0" 861 | 862 | is-extglob@^2.1.1: 863 | version "2.1.1" 864 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 865 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 866 | 867 | is-fullwidth-code-point@^3.0.0: 868 | version "3.0.0" 869 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 870 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 871 | 872 | is-glob@^4.0.1, is-glob@~4.0.1: 873 | version "4.0.3" 874 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 875 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 876 | dependencies: 877 | is-extglob "^2.1.1" 878 | 879 | is-negative-zero@^2.0.2: 880 | version "2.0.2" 881 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" 882 | integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== 883 | 884 | is-number-object@^1.0.4: 885 | version "1.0.7" 886 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" 887 | integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== 888 | dependencies: 889 | has-tostringtag "^1.0.0" 890 | 891 | is-number@^7.0.0: 892 | version "7.0.0" 893 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 894 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 895 | 896 | is-plain-obj@^2.1.0: 897 | version "2.1.0" 898 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 899 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 900 | 901 | is-regex@^1.1.4: 902 | version "1.1.4" 903 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" 904 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== 905 | dependencies: 906 | call-bind "^1.0.2" 907 | has-tostringtag "^1.0.0" 908 | 909 | is-shared-array-buffer@^1.0.2: 910 | version "1.0.2" 911 | resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" 912 | integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== 913 | dependencies: 914 | call-bind "^1.0.2" 915 | 916 | is-string@^1.0.5, is-string@^1.0.7: 917 | version "1.0.7" 918 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" 919 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== 920 | dependencies: 921 | has-tostringtag "^1.0.0" 922 | 923 | is-symbol@^1.0.2, is-symbol@^1.0.3: 924 | version "1.0.4" 925 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" 926 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 927 | dependencies: 928 | has-symbols "^1.0.2" 929 | 930 | is-unicode-supported@^0.1.0: 931 | version "0.1.0" 932 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 933 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 934 | 935 | is-weakref@^1.0.2: 936 | version "1.0.2" 937 | resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" 938 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== 939 | dependencies: 940 | call-bind "^1.0.2" 941 | 942 | isarray@~1.0.0: 943 | version "1.0.0" 944 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 945 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 946 | 947 | isexe@^2.0.0: 948 | version "2.0.0" 949 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 950 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 951 | 952 | ist@^1.1.7: 953 | version "1.1.7" 954 | resolved "https://registry.yarnpkg.com/ist/-/ist-1.1.7.tgz#64161305bca42937d8e05394a2883c3431c5f7ff" 955 | integrity sha512-ex9JyqY+tCjBlxN1pXlqxEgtGGUGp1TG83ll1xpu8SfPgOhfAhEGCuepNHlB+d7Le+hLoBcfCu/G0ZQaFbi9hA== 956 | 957 | js-tokens@^4.0.0: 958 | version "4.0.0" 959 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 960 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 961 | 962 | js-yaml@4.1.0: 963 | version "4.1.0" 964 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 965 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 966 | dependencies: 967 | argparse "^2.0.1" 968 | 969 | json-parse-better-errors@^1.0.1: 970 | version "1.0.2" 971 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 972 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 973 | 974 | jszip@^3.6.0: 975 | version "3.9.1" 976 | resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.9.1.tgz#784e87f328450d1e8151003a9c67733e2b901051" 977 | integrity sha512-H9A60xPqJ1CuC4Ka6qxzXZeU8aNmgOeP5IFqwJbQQwtu2EUYxota3LdsiZWplF7Wgd9tkAd0mdu36nceSaPuYw== 978 | dependencies: 979 | lie "~3.3.0" 980 | pako "~1.0.2" 981 | readable-stream "~2.3.6" 982 | set-immediate-shim "~1.0.1" 983 | 984 | lie@~3.3.0: 985 | version "3.3.0" 986 | resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" 987 | integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== 988 | dependencies: 989 | immediate "~3.0.5" 990 | 991 | load-json-file@^4.0.0: 992 | version "4.0.0" 993 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" 994 | integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== 995 | dependencies: 996 | graceful-fs "^4.1.2" 997 | parse-json "^4.0.0" 998 | pify "^3.0.0" 999 | strip-bom "^3.0.0" 1000 | 1001 | locate-path@^6.0.0: 1002 | version "6.0.0" 1003 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1004 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1005 | dependencies: 1006 | p-locate "^5.0.0" 1007 | 1008 | log-symbols@4.1.0: 1009 | version "4.1.0" 1010 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 1011 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 1012 | dependencies: 1013 | chalk "^4.1.0" 1014 | is-unicode-supported "^0.1.0" 1015 | 1016 | magic-string@^0.25.7: 1017 | version "0.25.9" 1018 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" 1019 | integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== 1020 | dependencies: 1021 | sourcemap-codec "^1.4.8" 1022 | 1023 | memorystream@^0.3.1: 1024 | version "0.3.1" 1025 | resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" 1026 | integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== 1027 | 1028 | mime@1.6.0: 1029 | version "1.6.0" 1030 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 1031 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 1032 | 1033 | minimatch@5.0.1: 1034 | version "5.0.1" 1035 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" 1036 | integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== 1037 | dependencies: 1038 | brace-expansion "^2.0.1" 1039 | 1040 | minimatch@^3.0.4: 1041 | version "3.1.2" 1042 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1043 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1044 | dependencies: 1045 | brace-expansion "^1.1.7" 1046 | 1047 | mocha@^10.0.0: 1048 | version "10.0.0" 1049 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9" 1050 | integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== 1051 | dependencies: 1052 | "@ungap/promise-all-settled" "1.1.2" 1053 | ansi-colors "4.1.1" 1054 | browser-stdout "1.3.1" 1055 | chokidar "3.5.3" 1056 | debug "4.3.4" 1057 | diff "5.0.0" 1058 | escape-string-regexp "4.0.0" 1059 | find-up "5.0.0" 1060 | glob "7.2.0" 1061 | he "1.2.0" 1062 | js-yaml "4.1.0" 1063 | log-symbols "4.1.0" 1064 | minimatch "5.0.1" 1065 | ms "2.1.3" 1066 | nanoid "3.3.3" 1067 | serialize-javascript "6.0.0" 1068 | strip-json-comments "3.1.1" 1069 | supports-color "8.1.1" 1070 | workerpool "6.2.1" 1071 | yargs "16.2.0" 1072 | yargs-parser "20.2.4" 1073 | yargs-unparser "2.0.0" 1074 | 1075 | ms@2.0.0: 1076 | version "2.0.0" 1077 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1078 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1079 | 1080 | ms@2.1.2: 1081 | version "2.1.2" 1082 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1083 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1084 | 1085 | ms@2.1.3: 1086 | version "2.1.3" 1087 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1088 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1089 | 1090 | nanoid@3.3.3: 1091 | version "3.3.3" 1092 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" 1093 | integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== 1094 | 1095 | nanoid@^3.3.4: 1096 | version "3.3.4" 1097 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" 1098 | integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== 1099 | 1100 | nice-try@^1.0.4: 1101 | version "1.0.5" 1102 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 1103 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 1104 | 1105 | normalize-package-data@^2.3.2: 1106 | version "2.5.0" 1107 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 1108 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 1109 | dependencies: 1110 | hosted-git-info "^2.1.4" 1111 | resolve "^1.10.0" 1112 | semver "2 || 3 || 4 || 5" 1113 | validate-npm-package-license "^3.0.1" 1114 | 1115 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1116 | version "3.0.0" 1117 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1118 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1119 | 1120 | npm-run-all@^4.1.5: 1121 | version "4.1.5" 1122 | resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" 1123 | integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== 1124 | dependencies: 1125 | ansi-styles "^3.2.1" 1126 | chalk "^2.4.1" 1127 | cross-spawn "^6.0.5" 1128 | memorystream "^0.3.1" 1129 | minimatch "^3.0.4" 1130 | pidtree "^0.3.0" 1131 | read-pkg "^3.0.0" 1132 | shell-quote "^1.6.1" 1133 | string.prototype.padend "^3.0.0" 1134 | 1135 | object-inspect@^1.12.2, object-inspect@^1.9.0: 1136 | version "1.12.2" 1137 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" 1138 | integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== 1139 | 1140 | object-keys@^1.1.1: 1141 | version "1.1.1" 1142 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1143 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1144 | 1145 | object.assign@^4.1.4: 1146 | version "4.1.4" 1147 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" 1148 | integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== 1149 | dependencies: 1150 | call-bind "^1.0.2" 1151 | define-properties "^1.1.4" 1152 | has-symbols "^1.0.3" 1153 | object-keys "^1.1.1" 1154 | 1155 | on-finished@2.4.1: 1156 | version "2.4.1" 1157 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" 1158 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== 1159 | dependencies: 1160 | ee-first "1.1.1" 1161 | 1162 | once@^1.3.0: 1163 | version "1.4.0" 1164 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1165 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1166 | dependencies: 1167 | wrappy "1" 1168 | 1169 | p-limit@^3.0.2: 1170 | version "3.1.0" 1171 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1172 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1173 | dependencies: 1174 | yocto-queue "^0.1.0" 1175 | 1176 | p-locate@^5.0.0: 1177 | version "5.0.0" 1178 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1179 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1180 | dependencies: 1181 | p-limit "^3.0.2" 1182 | 1183 | pako@~1.0.2: 1184 | version "1.0.11" 1185 | resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" 1186 | integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== 1187 | 1188 | parse-json@^4.0.0: 1189 | version "4.0.0" 1190 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 1191 | integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== 1192 | dependencies: 1193 | error-ex "^1.3.1" 1194 | json-parse-better-errors "^1.0.1" 1195 | 1196 | parseurl@~1.3.3: 1197 | version "1.3.3" 1198 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 1199 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 1200 | 1201 | path-exists@^4.0.0: 1202 | version "4.0.0" 1203 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1204 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1205 | 1206 | path-is-absolute@^1.0.0: 1207 | version "1.0.1" 1208 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1209 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1210 | 1211 | path-key@^2.0.1: 1212 | version "2.0.1" 1213 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1214 | integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== 1215 | 1216 | path-parse@^1.0.7: 1217 | version "1.0.7" 1218 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1219 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1220 | 1221 | path-type@^3.0.0: 1222 | version "3.0.0" 1223 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" 1224 | integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== 1225 | dependencies: 1226 | pify "^3.0.0" 1227 | 1228 | picocolors@^1.0.0: 1229 | version "1.0.0" 1230 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 1231 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 1232 | 1233 | picomatch@^2.0.4, picomatch@^2.2.1: 1234 | version "2.3.1" 1235 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1236 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1237 | 1238 | pidtree@^0.3.0: 1239 | version "0.3.1" 1240 | resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" 1241 | integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== 1242 | 1243 | pify@^3.0.0: 1244 | version "3.0.0" 1245 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 1246 | integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== 1247 | 1248 | postcss@^8.4.13: 1249 | version "8.4.19" 1250 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.19.tgz#61178e2add236b17351897c8bcc0b4c8ecab56fc" 1251 | integrity sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA== 1252 | dependencies: 1253 | nanoid "^3.3.4" 1254 | picocolors "^1.0.0" 1255 | source-map-js "^1.0.2" 1256 | 1257 | process-nextick-args@~2.0.0: 1258 | version "2.0.1" 1259 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1260 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1261 | 1262 | randombytes@^2.1.0: 1263 | version "2.1.0" 1264 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1265 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1266 | dependencies: 1267 | safe-buffer "^5.1.0" 1268 | 1269 | range-parser@~1.2.1: 1270 | version "1.2.1" 1271 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 1272 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 1273 | 1274 | read-pkg@^3.0.0: 1275 | version "3.0.0" 1276 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" 1277 | integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== 1278 | dependencies: 1279 | load-json-file "^4.0.0" 1280 | normalize-package-data "^2.3.2" 1281 | path-type "^3.0.0" 1282 | 1283 | readable-stream@~2.3.6: 1284 | version "2.3.7" 1285 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 1286 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 1287 | dependencies: 1288 | core-util-is "~1.0.0" 1289 | inherits "~2.0.3" 1290 | isarray "~1.0.0" 1291 | process-nextick-args "~2.0.0" 1292 | safe-buffer "~5.1.1" 1293 | string_decoder "~1.1.1" 1294 | util-deprecate "~1.0.1" 1295 | 1296 | readdirp@~3.6.0: 1297 | version "3.6.0" 1298 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1299 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1300 | dependencies: 1301 | picomatch "^2.2.1" 1302 | 1303 | regexp.prototype.flags@^1.4.3: 1304 | version "1.4.3" 1305 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" 1306 | integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== 1307 | dependencies: 1308 | call-bind "^1.0.2" 1309 | define-properties "^1.1.3" 1310 | functions-have-names "^1.2.2" 1311 | 1312 | require-directory@^2.1.1: 1313 | version "2.1.1" 1314 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1315 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1316 | 1317 | resolve@^1.10.0, resolve@^1.15.1, resolve@^1.22.0: 1318 | version "1.22.1" 1319 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 1320 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 1321 | dependencies: 1322 | is-core-module "^2.9.0" 1323 | path-parse "^1.0.7" 1324 | supports-preserve-symlinks-flag "^1.0.0" 1325 | 1326 | rimraf@^3.0.0: 1327 | version "3.0.2" 1328 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1329 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1330 | dependencies: 1331 | glob "^7.1.3" 1332 | 1333 | rollup-plugin-dts@^3.0.0: 1334 | version "3.0.2" 1335 | resolved "https://registry.yarnpkg.com/rollup-plugin-dts/-/rollup-plugin-dts-3.0.2.tgz#2b628d88f864d271d6eaec2e4c2a60ae4e944c5c" 1336 | integrity sha512-hswlsdWu/x7k5pXzaLP6OvKRKcx8Bzprksz9i9mUe72zvt8LvqAb/AZpzs6FkLgmyRaN8B6rUQOVtzA3yEt9Yw== 1337 | dependencies: 1338 | magic-string "^0.25.7" 1339 | optionalDependencies: 1340 | "@babel/code-frame" "^7.12.13" 1341 | 1342 | "rollup@>=2.59.0 <2.78.0", rollup@^2.35.1: 1343 | version "2.77.3" 1344 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.3.tgz#8f00418d3a2740036e15deb653bed1a90ee0cc12" 1345 | integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g== 1346 | optionalDependencies: 1347 | fsevents "~2.3.2" 1348 | 1349 | safe-buffer@^5.1.0: 1350 | version "5.2.1" 1351 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1352 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1353 | 1354 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1355 | version "5.1.2" 1356 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1357 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1358 | 1359 | safe-regex-test@^1.0.0: 1360 | version "1.0.0" 1361 | resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" 1362 | integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== 1363 | dependencies: 1364 | call-bind "^1.0.2" 1365 | get-intrinsic "^1.1.3" 1366 | is-regex "^1.1.4" 1367 | 1368 | selenium-webdriver@^4.0.0-beta.3: 1369 | version "4.1.1" 1370 | resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.1.1.tgz#da083177d811f36614950e809e2982570f67d02e" 1371 | integrity sha512-Fr9e9LC6zvD6/j7NO8M1M/NVxFX67abHcxDJoP5w2KN/Xb1SyYLjMVPGgD14U2TOiKe4XKHf42OmFw9g2JgCBQ== 1372 | dependencies: 1373 | jszip "^3.6.0" 1374 | tmp "^0.2.1" 1375 | ws ">=7.4.6" 1376 | 1377 | "semver@2 || 3 || 4 || 5", semver@^5.5.0: 1378 | version "5.7.2" 1379 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" 1380 | integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== 1381 | 1382 | send@0.18.0: 1383 | version "0.18.0" 1384 | resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" 1385 | integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== 1386 | dependencies: 1387 | debug "2.6.9" 1388 | depd "2.0.0" 1389 | destroy "1.2.0" 1390 | encodeurl "~1.0.2" 1391 | escape-html "~1.0.3" 1392 | etag "~1.8.1" 1393 | fresh "0.5.2" 1394 | http-errors "2.0.0" 1395 | mime "1.6.0" 1396 | ms "2.1.3" 1397 | on-finished "2.4.1" 1398 | range-parser "~1.2.1" 1399 | statuses "2.0.1" 1400 | 1401 | serialize-javascript@6.0.0: 1402 | version "6.0.0" 1403 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 1404 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 1405 | dependencies: 1406 | randombytes "^2.1.0" 1407 | 1408 | serve-static@^1.14.1: 1409 | version "1.15.0" 1410 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" 1411 | integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== 1412 | dependencies: 1413 | encodeurl "~1.0.2" 1414 | escape-html "~1.0.3" 1415 | parseurl "~1.3.3" 1416 | send "0.18.0" 1417 | 1418 | set-immediate-shim@~1.0.1: 1419 | version "1.0.1" 1420 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" 1421 | integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= 1422 | 1423 | setprototypeof@1.2.0: 1424 | version "1.2.0" 1425 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 1426 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 1427 | 1428 | shebang-command@^1.2.0: 1429 | version "1.2.0" 1430 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1431 | integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== 1432 | dependencies: 1433 | shebang-regex "^1.0.0" 1434 | 1435 | shebang-regex@^1.0.0: 1436 | version "1.0.0" 1437 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1438 | integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== 1439 | 1440 | shell-quote@^1.6.1: 1441 | version "1.7.4" 1442 | resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8" 1443 | integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw== 1444 | 1445 | side-channel@^1.0.4: 1446 | version "1.0.4" 1447 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 1448 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 1449 | dependencies: 1450 | call-bind "^1.0.0" 1451 | get-intrinsic "^1.0.2" 1452 | object-inspect "^1.9.0" 1453 | 1454 | source-map-js@^1.0.2: 1455 | version "1.0.2" 1456 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 1457 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 1458 | 1459 | sourcemap-codec@^1.4.8: 1460 | version "1.4.8" 1461 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 1462 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 1463 | 1464 | spdx-correct@^3.0.0: 1465 | version "3.1.1" 1466 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" 1467 | integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== 1468 | dependencies: 1469 | spdx-expression-parse "^3.0.0" 1470 | spdx-license-ids "^3.0.0" 1471 | 1472 | spdx-exceptions@^2.1.0: 1473 | version "2.3.0" 1474 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" 1475 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 1476 | 1477 | spdx-expression-parse@^3.0.0: 1478 | version "3.0.1" 1479 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" 1480 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 1481 | dependencies: 1482 | spdx-exceptions "^2.1.0" 1483 | spdx-license-ids "^3.0.0" 1484 | 1485 | spdx-license-ids@^3.0.0: 1486 | version "3.0.12" 1487 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" 1488 | integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== 1489 | 1490 | statuses@2.0.1: 1491 | version "2.0.1" 1492 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" 1493 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== 1494 | 1495 | string-width@^4.1.0, string-width@^4.2.0: 1496 | version "4.2.3" 1497 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1498 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1499 | dependencies: 1500 | emoji-regex "^8.0.0" 1501 | is-fullwidth-code-point "^3.0.0" 1502 | strip-ansi "^6.0.1" 1503 | 1504 | string.prototype.padend@^3.0.0: 1505 | version "3.1.4" 1506 | resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz#2c43bb3a89eb54b6750de5942c123d6c98dd65b6" 1507 | integrity sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw== 1508 | dependencies: 1509 | call-bind "^1.0.2" 1510 | define-properties "^1.1.4" 1511 | es-abstract "^1.20.4" 1512 | 1513 | string.prototype.trimend@^1.0.5: 1514 | version "1.0.6" 1515 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" 1516 | integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== 1517 | dependencies: 1518 | call-bind "^1.0.2" 1519 | define-properties "^1.1.4" 1520 | es-abstract "^1.20.4" 1521 | 1522 | string.prototype.trimstart@^1.0.5: 1523 | version "1.0.6" 1524 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" 1525 | integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== 1526 | dependencies: 1527 | call-bind "^1.0.2" 1528 | define-properties "^1.1.4" 1529 | es-abstract "^1.20.4" 1530 | 1531 | string_decoder@~1.1.1: 1532 | version "1.1.1" 1533 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1534 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1535 | dependencies: 1536 | safe-buffer "~5.1.0" 1537 | 1538 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1539 | version "6.0.1" 1540 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1541 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1542 | dependencies: 1543 | ansi-regex "^5.0.1" 1544 | 1545 | strip-bom@^3.0.0: 1546 | version "3.0.0" 1547 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1548 | integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== 1549 | 1550 | strip-json-comments@3.1.1: 1551 | version "3.1.1" 1552 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1553 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1554 | 1555 | style-mod@^4.0.0: 1556 | version "4.0.0" 1557 | resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.0.0.tgz#97e7c2d68b592975f2ca7a63d0dd6fcacfe35a01" 1558 | integrity sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw== 1559 | 1560 | supports-color@8.1.1: 1561 | version "8.1.1" 1562 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 1563 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1564 | dependencies: 1565 | has-flag "^4.0.0" 1566 | 1567 | supports-color@^5.3.0: 1568 | version "5.5.0" 1569 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1570 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1571 | dependencies: 1572 | has-flag "^3.0.0" 1573 | 1574 | supports-color@^7.1.0: 1575 | version "7.2.0" 1576 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1577 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1578 | dependencies: 1579 | has-flag "^4.0.0" 1580 | 1581 | supports-preserve-symlinks-flag@^1.0.0: 1582 | version "1.0.0" 1583 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 1584 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1585 | 1586 | tmp@^0.2.1: 1587 | version "0.2.1" 1588 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" 1589 | integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== 1590 | dependencies: 1591 | rimraf "^3.0.0" 1592 | 1593 | to-regex-range@^5.0.1: 1594 | version "5.0.1" 1595 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1596 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1597 | dependencies: 1598 | is-number "^7.0.0" 1599 | 1600 | toidentifier@1.0.1: 1601 | version "1.0.1" 1602 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" 1603 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 1604 | 1605 | typescript@^4.2.3: 1606 | version "4.6.3" 1607 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" 1608 | integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== 1609 | 1610 | unbox-primitive@^1.0.2: 1611 | version "1.0.2" 1612 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" 1613 | integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== 1614 | dependencies: 1615 | call-bind "^1.0.2" 1616 | has-bigints "^1.0.2" 1617 | has-symbols "^1.0.3" 1618 | which-boxed-primitive "^1.0.2" 1619 | 1620 | util-deprecate@~1.0.1: 1621 | version "1.0.2" 1622 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1623 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1624 | 1625 | validate-npm-package-license@^3.0.1: 1626 | version "3.0.4" 1627 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 1628 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 1629 | dependencies: 1630 | spdx-correct "^3.0.0" 1631 | spdx-expression-parse "^3.0.0" 1632 | 1633 | vite@^2.3.8: 1634 | version "2.9.16" 1635 | resolved "https://registry.yarnpkg.com/vite/-/vite-2.9.16.tgz#daf7ba50f5cc37a7bf51b118ba06bc36e97898e9" 1636 | integrity sha512-X+6q8KPyeuBvTQV8AVSnKDvXoBMnTx8zxh54sOwmmuOdxkjMmEJXH2UEchA+vTMps1xw9vL64uwJOWryULg7nA== 1637 | dependencies: 1638 | esbuild "^0.14.27" 1639 | postcss "^8.4.13" 1640 | resolve "^1.22.0" 1641 | rollup ">=2.59.0 <2.78.0" 1642 | optionalDependencies: 1643 | fsevents "~2.3.2" 1644 | 1645 | w3c-keyname@^2.2.4: 1646 | version "2.2.6" 1647 | resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.6.tgz#8412046116bc16c5d73d4e612053ea10a189c85f" 1648 | integrity sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg== 1649 | 1650 | which-boxed-primitive@^1.0.2: 1651 | version "1.0.2" 1652 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" 1653 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 1654 | dependencies: 1655 | is-bigint "^1.0.1" 1656 | is-boolean-object "^1.1.0" 1657 | is-number-object "^1.0.4" 1658 | is-string "^1.0.5" 1659 | is-symbol "^1.0.3" 1660 | 1661 | which@^1.2.9: 1662 | version "1.3.1" 1663 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1664 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1665 | dependencies: 1666 | isexe "^2.0.0" 1667 | 1668 | workerpool@6.2.1: 1669 | version "6.2.1" 1670 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" 1671 | integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== 1672 | 1673 | wrap-ansi@^7.0.0: 1674 | version "7.0.0" 1675 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1676 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1677 | dependencies: 1678 | ansi-styles "^4.0.0" 1679 | string-width "^4.1.0" 1680 | strip-ansi "^6.0.0" 1681 | 1682 | wrappy@1: 1683 | version "1.0.2" 1684 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1685 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1686 | 1687 | ws@>=7.4.6: 1688 | version "8.5.0" 1689 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" 1690 | integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== 1691 | 1692 | y18n@^5.0.5: 1693 | version "5.0.8" 1694 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 1695 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1696 | 1697 | yargs-parser@20.2.4: 1698 | version "20.2.4" 1699 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 1700 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 1701 | 1702 | yargs-parser@^20.2.2: 1703 | version "20.2.9" 1704 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 1705 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 1706 | 1707 | yargs-unparser@2.0.0: 1708 | version "2.0.0" 1709 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 1710 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 1711 | dependencies: 1712 | camelcase "^6.0.0" 1713 | decamelize "^4.0.0" 1714 | flat "^5.0.2" 1715 | is-plain-obj "^2.1.0" 1716 | 1717 | yargs@16.2.0: 1718 | version "16.2.0" 1719 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 1720 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 1721 | dependencies: 1722 | cliui "^7.0.2" 1723 | escalade "^3.1.1" 1724 | get-caller-file "^2.0.5" 1725 | require-directory "^2.1.1" 1726 | string-width "^4.2.0" 1727 | y18n "^5.0.5" 1728 | yargs-parser "^20.2.2" 1729 | 1730 | yocto-queue@^0.1.0: 1731 | version "0.1.0" 1732 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1733 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1734 | --------------------------------------------------------------------------------