├── .gitignore
├── .npmignore
├── .prettierrc.yaml
├── .replit
├── LICENSE
├── README.md
├── dev
├── index.html
├── index.ts
├── print-lezer-tree.ts
├── vite.config.js
└── watch.cjs
├── package.json
├── replit.nix
├── src
├── content.js
├── highlight.ts
├── html-tokens.js
├── index.ts
├── syntax.grammar
├── syntax.grammar.d.ts
├── syntax.grammar.terms.d.ts
└── tokens.ts
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | example.png
--------------------------------------------------------------------------------
/.prettierrc.yaml:
--------------------------------------------------------------------------------
1 | printWidth: 90
2 | semi: false
3 | singleQuote: false
4 | quoteProps: preserve
5 | trailingComma: none
6 | bracketSpacing: true
7 | arrowParens: avoid
8 | endOfLine: auto
9 |
--------------------------------------------------------------------------------
/.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"]
--------------------------------------------------------------------------------
/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.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # CodeMirror Svelte Mode
2 |
3 | This is a CodeMirror 6 extension that adds support for Svelte.
4 |
5 | ### Usage
6 |
7 | ```typescript
8 | import { EditorState } from '@codemirror/state';
9 | import { EditorView } from '@codemirror/view';
10 | import { svelte } from "@replit/codemirror-lang-svelte";
11 | import { basicSetup } from 'codemirror';
12 |
13 | new EditorView({
14 | state: EditorState.create({
15 | doc: `
{a}
`,
16 | extensions: [basicSetup, svelte()],
17 | }),
18 | parent: document.querySelector('#editor'),
19 | });
20 | ```
--------------------------------------------------------------------------------
/dev/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Vite App
7 |
8 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/dev/index.ts:
--------------------------------------------------------------------------------
1 | import { EditorState } from '@codemirror/state';
2 | import { EditorView } from '@codemirror/view';
3 | import { basicSetup } from 'codemirror';
4 | import { svelte, svelteParser } from "../dist/";
5 | import { printTree } from "./print-lezer-tree";
6 | import { oneDark } from '@codemirror/theme-one-dark';
7 | import { syntaxTree } from '@codemirror/language';
8 |
9 | const testDoc = `
10 | {#unknown}
11 |
12 | {#each foo as foo}
13 | {#unknown}
14 | {/each}
15 |
16 |
17 |
18 |
19 |
20 |
26 |
27 | {#if nesting({ foo: "bar" })} asdf {/if}
28 | {#if foo} asdf {:else if aaggghg} foobar {:else} bar {/if}
29 | {#each asdf.foo({ test: "yes it ignores this as" }) as something} asfd {/each}
30 | {#each asdf as { foo }} asdf {/each}
31 | {#each asdf as { bar }} asdf {/each}
32 | {#each asdf as foo, bar} asdf {/each}
33 | {#each asdf as foo, bar (test)} asdf {/each}
34 |
35 | {#if answer === 42}
36 | what was the question?
37 | {/if}
38 |
39 | {#if porridge.temperature > 100}
40 | too hot!
41 | {:else if 80 > porridge.temperature}
42 | too cold!
43 | {:else}
44 | just right!
45 | {/if}
46 |
47 | Shopping list
48 |
49 | {#each items as item}
50 | {item.name} x {item.qty}
51 | {/each}
52 |
53 |
54 | {#each items as item, i}
55 | {i + 1}: {item.name} x {item.qty}
56 | {/each}
57 |
58 | {#each items as item (item.id)}
59 | {item.name} x {item.qty}
60 | {/each}
61 |
62 |
63 | {#each items as item, i (item.id)}
64 | {i + 1}: {item.name} x {item.qty}
65 | {/each}
66 |
67 | {#each items as { id, name, qty }, i (id)}
68 | {i + 1}: {name} x {qty}
69 | {/each}
70 |
71 | {#each objects as { id, ...rest }}
72 | {id}
73 | {/each}
74 |
75 | {#each items as [id, ...rest]}
76 | {id}
77 | {/each}
78 |
79 | {#each todos as todo}
80 | {todo.text}
81 | {:else}
82 | No tasks today!
83 | {/each}
84 |
85 | {#await promise}
86 |
87 | waiting for the promise to resolve...
88 | {:then value}
89 |
90 | The value is {value}
91 | {:catch error}
92 |
93 | Something went wrong: {error.message}
94 | {/await}
95 |
96 | {#await promise}
97 |
98 | waiting for the promise to resolve...
99 | {:then value}
100 |
101 | The value is {value}
102 | {/await}
103 |
104 | {#await promise then value}
105 | The value is {value}
106 | {/await}
107 | {#await promise catch error}
108 | The error is {error}
109 | {/await}
110 |
111 | {#key value}
112 | {value}
113 | {/key}
114 |
115 |
116 |
{post.title}
117 | {@html post.content}
118 |
119 |
120 | {@debug var}
121 |
122 | {@debug var1, var2, var3}
123 |
124 |
127 |
128 | {#each boxes as box}
129 | {@const area = box.width * box.height}
130 | {box.width} * {box.height} = {area}
131 | {/each}`
132 |
133 | const svelteTutorialDoc = "Hello world! \n\nHello {name.toUpperCase()}! \n\n \n \n\nThis is a paragraph.
\n\nThis is a paragraph.
\n\nThis is a paragraph.
\n \n\n{string}
\n\n{@html string}
\n\n\n\tClicked {count} {count === 1 ? 'time' : 'times'}\n \n\n\n\tClicked {count} {count === 1 ? 'time' : 'times'}\n \n\n\n\tClicked {count} {count === 1 ? 'time' : 'times'}\n \n\n\n\n\tClicked {count} {count === 1 ? 'time' : 'times'}\n \n\n{count} doubled is {doubled}
\n\n\n\tClicked {count} {count === 1 ? 'time' : 'times'}\n \n\n{numbers.join(' + ')} = {sum}
\n\n\n\tAdd a number\n \n\n{numbers.join(' + ')} = {sum}
\n\n\n\tAdd a number\n \n\n\n\n\n\tThe {name}
package is {speed} fast.\n\tDownload version {version} from npm \n\tand learn more here \n
\n\n\n\n \n\n\n\tLog out\n \n\n\n\tLog in\n \n\n{#if user.loggedIn}\n\t\n\t\tLog out\n\t \n{/if}\n\n{#if !user.loggedIn}\n\t\n\t\tLog in\n\t \n{/if}\n\n{#if user.loggedIn}\n\t\n\t\tLog out\n\t \n{:else}\n\t\n\t\tLog in\n\t \n{/if}\n\n{#if x > 10}\n\t{x} is greater than 10
\n{:else}\n\t{#if 5 > x}\n\t\t{x} is less than 5
\n\t{:else}\n\t\t{x} is between 5 and 10
\n\t{/if}\n{/if}\n\n{#if x > 10}\n\t{x} is greater than 10
\n{:else if 5 > x}\n\t{x} is less than 5
\n{:else}\n\t{x} is between 5 and 10
\n{/if}\n\nThe Famous Cats of YouTube \n\n\n\nThe Famous Cats of YouTube \n\n\n\n\n\tRemove first thing\n \n\n{#each things as thing}\n\t\n{/each}\n\n\n\tRemove first thing\n \n\n{#each things as thing (thing.id) }\n\t\n{/each}\n\n\n\tgenerate random number\n \n\n{#await promise}\n\t...waiting
\n{:then number}\n\tThe number is {number}
\n{:catch error}\n\t{error.message}
\n{/await}\n\n\n\tThe mouse position is {m.x} x {m.y}\n
\n\n m = { x: e.clientX, y: e.clientY }}\">\n\tThe mouse position is {m.x} x {m.y}\n
\n\n m = { x: e.clientX, y: e.clientY }}>\n\tThe mouse position is {m.x} x {m.y}\n
\n\n\n\tClick me\n \n\n\n\tClick to say hello\n \n\n\n\n \n\n \n\nHello {name}! \n\n\n\t \n\t \n \n\n\n\t \n\t \n \n\n{a} + {b} = {a + b}
\n\n\n\t \n\tYes! Send me regular email spam\n \n\n{#if yes}\n\tThank you. We will bombard your inbox and sell your personal details.
\n{:else}\n\tYou must opt-in to continue. If you're not paying, you're the product.
\n{/if}\n\n\n\tSubscribe\n \n\nSize \n\n\n\t \n\tOne scoop\n \n\n\n\t \n\tTwo scoops\n \n\n\n\t \n\tThree scoops\n \n\nFlavours \n\n{#each menu as flavour}\n\t\n\t\t \n\t\t{flavour}\n\t \n{/each}\n\n{#if flavours.length === 0}\n\tPlease select at least one flavour
\n{:else if flavours.length > scoops}\n\tCan't order more flavours than scoops!
\n{:else}\n\t\n\t\tYou ordered {scoops} {scoops === 1 ? 'scoop' : 'scoops'}\n\t\tof {join(flavours)}\n\t
\n{/if}\n\n{@html marked(value)}\n\n\n\nInsecurity questions \n\n\n\nselected question {selected ? selected.id : '[waiting...]'}
\n\nSize \n\n\n\t \n\tOne scoop\n \n\n\n\t \n\tTwo scoops\n \n\n\n\t \n\tThree scoops\n \n\nFlavours \n\n\n\t{#each menu as flavour}\n\t\t\n\t\t\t{flavour}\n\t\t \n\t{/each}\n \n\n{#if flavours.length === 0}\n\tPlease select at least one flavour
\n{:else if flavours.length > scoops}\n\tCan't order more flavours than scoops!
\n{:else}\n\t\n\t\tYou ordered {scoops} {scoops === 1 ? 'scoop' : 'scoops'}\n\t\tof {join(flavours)}\n\t
\n{/if}\n\n
\n\n{html} \n\nTodos \n\n{#each todos as todo}\n\t\n\t\t \n\n\t\t \n\t
\n{/each}\n\n{remaining} remaining
\n\n\n\tAdd new\n \n\n\n\tClear completed\n \n\nCaminandes: Llamigos \nFrom Blender Studio . CC-BY
\n\n\n\t
\n\t\t\n\t \n\n\t
\n\t\t
\n\n\t\t
\n\t\t\t{format(time)} \n\t\t\tclick anywhere to {paused ? 'play' : 'pause'} / drag to seek \n\t\t\t{format(duration)} \n\t\t
\n\t
\n
\n\n \n \n\nsize: {w}px x {h}px
\n\n\n\t{text} \n
\n\n \n\n{view} \n\n\n\n\n\t1 \n\t2 \n\t3 \n\t4 \n\t5 \n\t6 \n\t7 \n\t8 \n\t9 \n\n\tclear \n\t0 \n\tsubmit \n
\n\n\n\n field.focus()}>Focus field \n\n \n\nPhoto album \n\n\n\t{#each photos as photo}\n\t\t
\n\t\t\t \n\t\t\t{photo.title} \n\t\t \n\t{:else}\n\t\t\n\t\t
loading...
\n\t{/each}\n
\n\n\n\t
{open ? 'Close' : 'Open'} Timer \n\t
\n\t\tThe Timer component has been open for\n\t\t{seconds} {seconds === 1 ? 'second' : 'seconds'}\n\t
\n\t{#if open}\n\t
\n\t{/if}\n
\n\n \n\n progress.set(0)}\">\n\t0%\n \n\n progress.set(0.25)}\">\n\t25%\n \n\n progress.set(0.5)}\">\n\t50%\n \n\n progress.set(0.75)}\">\n\t75%\n \n\n progress.set(1)}\">\n\t100%\n \n\n\n\t\n\t\tstiffness ({coords.stiffness}) \n\t\t \n\t \n\n\t\n\t\tdamping ({coords.damping}) \n\t\t \n\t \n
\n\n coords.set({ x: e.clientX, y: e.clientY })}\"\n\ton:mousedown=\"{() => size.set(30)}\"\n\ton:mouseup=\"{() => size.set(10)}\"\n>\n\t\n \n\n{#if visible}\n\t\n\t\tFades in and out\n\t
\n{/if}\n\n{#if visible}\n\t\n\t\tFlies in and out\n\t
\n{/if}\n\n{#if visible}\n\t\n\t\tFlies in, fades out\n\t
\n{/if}\n\n\n\t \n\tvisible\n \n\n{#if visible}\n\t\n\t\ttransitions! \n\t
\n{/if}\n\nstatus: {status}
\n\n\n\t \n\tvisible\n \n\n{#if visible}\n\t status = 'intro started'}\"\n\t\ton:outrostart=\"{() => status = 'outro started'}\"\n\t\ton:introend=\"{() => status = 'intro ended'}\"\n\t\ton:outroend=\"{() => status = 'outro ended'}\"\n\t>\n\t\tFlies in and out\n\t
\n{/if}\n\n\n\t \n\tshow list\n \n\n\n\t \n\n \n\n{#if showItems}\n\t{#each items.slice(0, i) as item}\n\t\t\n\t\t\t{item}\n\t\t
\n\t{/each}\n{/if}\n\n\n\n\n\tThe number is:\n\t{#key number}\n\t\t\n\t\t\t{number}\n\t\t \n\t{/key}\n
\n \n {\n\t\tnumber += 1;\n\t}}>\n\tIncrement\n \n\n\n\n (showModal = true)}>Show Modal \n{#if showModal}\n\t (showModal = false)}>\n\t\tClick outside me!\n\t
\n{/if}\n\n\n\t \n\t{duration}ms\n \n\n pressed = true}\"\n\ton:mouseenter=\"{() => pressed = false}\"\n>press and hold \n\n{#if pressed}\n\tcongratulations, you pressed and held for {duration}ms
\n{/if}\n\n current = 'foo'}\"\n>foo \n\n current = 'bar'}\"\n>bar \n\n current = 'baz'}\"\n>baz \n\n\n\tsome {big ? 'big' : 'small'} text\n
\n\n \n\nThis is a paragraph.
\n\n \n\nThis is a paragraph.
\n\n\n\t\n\t\t{#if active}\n\t\t\t
I am being hovered upon.
\n\t\t{:else}\n\t\t\t
Hover over me!
\n\t\t{/if}\n\t
\n \n\n\n\t\n\t\t{#if active}\n\t\t\t
I am being hovered upon.
\n\t\t{:else}\n\t\t\t
Hover over me!
\n\t\t{/if}\n\t
\n \n\n\n\t\n\t\t{#if active}\n\t\t\t
I am being hovered upon.
\n\t\t{:else}\n\t\t\t
Hover over me!
\n\t\t{/if}\n\t
\n \n\n\n\t{#each options as option}\n\t\t{option} \n\t{/each}\n \n\nI'm a {selected} tag \n\n\n\n\n\t{#if key}\n\t\t
{key === ' ' ? 'Space' : key} \n\t\t
{code}
\n\t{:else}\n\t\t
Focus this window and press any key
\n\t{/if}\n
\n\n \n\n\n \n\n\n\t \n \n\nHello world! \n\n \n \n\n{@debug user}\n\nHello {user.firstname}! \n\n{#each confetti as c}\n\t{c.character} \n{/each}"
134 |
135 | const doc = testDoc + "\n" + svelteTutorialDoc
136 |
137 | const syncAST = EditorView.updateListener.of(update => {
138 | if (update.docChanged || update.selectionSet) {
139 | const { from: oldFrom, to: oldTo } = update.startState.selection.ranges[0]
140 | let { from, to } = update.state.selection.ranges[0]
141 |
142 | const docChanged = update.docChanged
143 | const selectionChanged =
144 | !((from === to && oldFrom === oldTo) || (from === oldFrom && to === oldTo))
145 | const hasSelection = from !== to
146 |
147 | if (docChanged || selectionChanged) {
148 | const ast = printTree(
149 | syntaxTree(update.view.state),
150 | update.state.doc.toString(),
151 | hasSelection ? { from, to } : undefined
152 | )
153 |
154 | queueMicrotask(() => {
155 | astView.dispatch({ changes: { from: 0, to: astView.state.doc.length, insert: ast }})
156 | })
157 | }
158 |
159 | }
160 | })
161 |
162 | const mainView = new EditorView({
163 | state: EditorState.create({
164 | doc,
165 | extensions: [basicSetup, svelte(), oneDark, EditorView.lineWrapping, syncAST],
166 | }),
167 | parent: document.querySelector('#editor'),
168 | });
169 |
170 | const astView = new EditorView({
171 | state: EditorState.create({
172 | doc: printTree(svelteParser.parse(doc), doc),
173 | extensions: [basicSetup, oneDark, EditorView.lineWrapping, EditorState.readOnly.of(true)]
174 | }),
175 | parent: document.querySelector('#editor-ast')
176 | })
--------------------------------------------------------------------------------
/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/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 | }
--------------------------------------------------------------------------------
/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])])
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@replit/codemirror-lang-svelte",
3 | "description": "Svelte language support for CodeMirror6",
4 | "version": "6.0.0",
5 | "author": {
6 | "name": "Brian Pool",
7 | "email": "brian@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 | "format": "prettier src/* --write --ignore-unknown"
27 | },
28 | "peerDependencies": {
29 | "@codemirror/autocomplete": "^6.0.0",
30 | "@codemirror/lang-css": "^6.0.1",
31 | "@codemirror/lang-html": "^6.2.0",
32 | "@codemirror/lang-javascript": "^6.1.1",
33 | "@codemirror/language": "^6.0.0",
34 | "@codemirror/state": "^6.0.0",
35 | "@codemirror/view": "^6.0.0",
36 | "@lezer/common": "^1.0.0",
37 | "@lezer/highlight": "^1.0.0",
38 | "@lezer/javascript": "^1.2.0",
39 | "@lezer/lr": "^1.0.0"
40 | },
41 | "devDependencies": {
42 | "@codemirror/autocomplete": "^6.0.0",
43 | "@codemirror/buildhelper": "^0.1.16",
44 | "@codemirror/lang-css": "^6.0.1",
45 | "@codemirror/lang-html": "^6.2.0",
46 | "@codemirror/lang-javascript": "^6.1.1",
47 | "@codemirror/language": "^6.0.0",
48 | "@codemirror/state": "^6.0.0",
49 | "@codemirror/theme-one-dark": "^6.0.0",
50 | "@codemirror/view": "^6.0.0",
51 | "@lezer/common": "^1.0.0",
52 | "@lezer/generator": "^1.0.0",
53 | "@lezer/highlight": "^1.0.0",
54 | "@lezer/javascript": "^1.2.0",
55 | "@lezer/lr": "^1.0.0",
56 | "codemirror": "^6.0.0",
57 | "npm-run-all": "^4.1.5",
58 | "prettier": "^2.8.0",
59 | "vite": "^2.9.17"
60 | },
61 | "repository": {
62 | "type": "git",
63 | "url": "https://github.com/replit/codemirror-lang-svelte.git"
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/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 | }
--------------------------------------------------------------------------------
/src/content.js:
--------------------------------------------------------------------------------
1 | import {
2 | ShortExpression,
3 | LongExpression,
4 | ScriptText,
5 | StyleText,
6 | TextareaText,
7 | Element
8 | } from "./syntax.grammar.terms"
9 | import { parseMixed } from "@lezer/common"
10 | import { parser as javascriptParser } from "@lezer/javascript"
11 |
12 | function getAttrs(element, input) {
13 | let attrs = Object.create(null)
14 | for (let att of element.firstChild.getChildren("Attribute")) {
15 | let name = att.getChild("AttributeName"),
16 | value = att.getChild("AttributeValue") || att.getChild("UnquotedAttributeValue")
17 | if (name)
18 | attrs[input.read(name.from, name.to)] = !value
19 | ? ""
20 | : value.name == "AttributeValue"
21 | ? input.read(value.from + 1, value.to - 1)
22 | : input.read(value.from, value.to)
23 | }
24 | return attrs
25 | }
26 |
27 | function maybeNest(node, input, tags) {
28 | let attrs
29 | for (let tag of tags) {
30 | if (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(node.node.parent, input))))
31 | return { parser: tag.parser }
32 | }
33 | return null
34 | }
35 |
36 | const expressionParser = javascriptParser.configure({ top: "SingleExpression" })
37 |
38 | // tags: {
39 | // tag: "script" | "style" | "textarea",
40 | // attrs?: ({[attr: string]: string}) => boolean,
41 | // parser: Parser
42 | // }[]
43 |
44 | export function configureNesting(tags) {
45 | let script = [],
46 | style = [],
47 | textarea = []
48 | for (let tag of tags) {
49 | let array =
50 | tag.tag == "script"
51 | ? script
52 | : tag.tag == "style"
53 | ? style
54 | : tag.tag == "textarea"
55 | ? textarea
56 | : null
57 | if (!array)
58 | throw new RangeError(
59 | "Only script, style, and textarea tags can host nested parsers"
60 | )
61 | array.push(tag)
62 | }
63 | return parseMixed((node, input) => {
64 | let id = node.type.id
65 | if (id === LongExpression) return { parser: expressionParser }
66 | if (id === ShortExpression) return { parser: expressionParser }
67 | if (id === ScriptText) return maybeNest(node, input, script)
68 | if (id === StyleText) return maybeNest(node, input, style)
69 | if (id === TextareaText) return maybeNest(node, input, textarea)
70 | return null
71 | })
72 | }
73 |
--------------------------------------------------------------------------------
/src/highlight.ts:
--------------------------------------------------------------------------------
1 | import { styleTags, tags as t } from "@lezer/highlight"
2 |
3 | export const svelteHighlighting = styleTags({
4 | "Text RawText": t.content,
5 | "StartTag StartCloseTag SelfClosingEndTag EndTag": t.angleBracket,
6 | "TagName": t.tagName,
7 | "MismatchedCloseTag/TagName": [t.tagName, t.invalid],
8 | "AttributeName": t.attributeName,
9 | "UnquotedAttributeValue": t.attributeValue,
10 | "DoubleQuote SingleQuote AttributeValueContent": t.attributeValue,
11 | "Is": t.definitionOperator,
12 | "EntityReference CharacterReference": t.character,
13 | "Comment": t.blockComment,
14 | "ProcessingInst": t.processingInstruction,
15 | "DoctypeDecl": t.documentMeta,
16 | "{ }": t.bracket,
17 | "[ ]": t.squareBracket,
18 | "( )": t.paren,
19 | "| , :": t.punctuation,
20 | "...": t.derefOperator,
21 | "ComponentName": t.className,
22 | "SvelteElementNamespace": t.namespace,
23 | "SvelteElementType": t.tagName,
24 | "StyleAttributeName": t.propertyName,
25 | "BlockType": t.controlKeyword,
26 | "BlockPrefix": t.typeOperator,
27 | "UnknownBlock/BlockType": t.invalid,
28 | "UnknownBlockContent": t.invalid,
29 | "if then catch": t.controlKeyword,
30 | "as": t.definitionOperator,
31 | "Variable": t.variableName,
32 | "Modifier": t.modifier,
33 | "DirectlyInterpolatedAttributeValue": t.attributeValue,
34 | "DirectiveOn/DirectiveName": t.controlKeyword,
35 | "DirectiveOn/DirectiveTarget": t.typeName,
36 | "DirectiveUse/DirectiveName": t.controlKeyword,
37 | "DirectiveUse/DirectiveTarget": t.function(t.variableName),
38 | "DirectiveBind/DirectiveName": t.controlKeyword,
39 | "DirectiveBind/DirectiveTarget": t.variableName,
40 | "DirectiveLet/DirectiveName": t.definitionKeyword,
41 | "DirectiveLet/DirectiveTarget": t.definition(t.variableName),
42 | "DirectiveTransition/DirectiveName": t.operatorKeyword,
43 | "DirectiveTransition/DirectiveTarget": t.function(t.variableName),
44 | "DirectiveIn/DirectiveName": t.operatorKeyword,
45 | "DirectiveIn/DirectiveTarget": t.function(t.variableName),
46 | "DirectiveOut/DirectiveName": t.operatorKeyword,
47 | "DirectiveOut/DirectiveTarget": t.function(t.variableName),
48 | "DirectiveAnimate/DirectiveName": t.operatorKeyword,
49 | "DirectiveAnimate/DirectiveTarget": t.function(t.variableName),
50 | "DirectiveClass/DirectiveName": t.attributeName,
51 | "DirectiveClass/DirectiveTarget": t.variableName,
52 | "DirectiveStyle/DirectiveName": t.attributeName,
53 | "DirectiveStyle/DirectiveTarget": t.propertyName
54 | })
55 |
--------------------------------------------------------------------------------
/src/html-tokens.js:
--------------------------------------------------------------------------------
1 | import { ExternalTokenizer, ContextTracker } from "@lezer/lr"
2 | import {
3 | StartTag,
4 | StartCloseTag,
5 | NoMatchStartCloseTag,
6 | MismatchedStartCloseTag,
7 | missingCloseTag,
8 | StartSelfClosingTag,
9 | IncompleteCloseTag,
10 | Element,
11 | OpenTag,
12 | StartScriptTag,
13 | scriptText,
14 | StartCloseScriptTag,
15 | StartStyleTag,
16 | styleText,
17 | StartCloseStyleTag,
18 | StartTextareaTag,
19 | textareaText,
20 | StartCloseTextareaTag
21 | } from "./syntax.grammar.terms"
22 |
23 | const selfClosers = {
24 | area: true,
25 | base: true,
26 | br: true,
27 | col: true,
28 | command: true,
29 | embed: true,
30 | frame: true,
31 | hr: true,
32 | img: true,
33 | input: true,
34 | keygen: true,
35 | link: true,
36 | meta: true,
37 | param: true,
38 | source: true,
39 | track: true,
40 | wbr: true,
41 | menuitem: true
42 | }
43 |
44 | const implicitlyClosed = {
45 | dd: true,
46 | li: true,
47 | optgroup: true,
48 | option: true,
49 | p: true,
50 | rp: true,
51 | rt: true,
52 | tbody: true,
53 | td: true,
54 | tfoot: true,
55 | th: true,
56 | tr: true
57 | }
58 |
59 | const closeOnOpen = {
60 | dd: { dd: true, dt: true },
61 | dt: { dd: true, dt: true },
62 | li: { li: true },
63 | option: { option: true, optgroup: true },
64 | optgroup: { optgroup: true },
65 | p: {
66 | address: true,
67 | article: true,
68 | aside: true,
69 | blockquote: true,
70 | dir: true,
71 | div: true,
72 | dl: true,
73 | fieldset: true,
74 | footer: true,
75 | form: true,
76 | h1: true,
77 | h2: true,
78 | h3: true,
79 | h4: true,
80 | h5: true,
81 | h6: true,
82 | header: true,
83 | hgroup: true,
84 | hr: true,
85 | menu: true,
86 | nav: true,
87 | ol: true,
88 | p: true,
89 | pre: true,
90 | section: true,
91 | table: true,
92 | ul: true
93 | },
94 | rp: { rp: true, rt: true },
95 | rt: { rp: true, rt: true },
96 | tbody: { tbody: true, tfoot: true },
97 | td: { td: true, th: true },
98 | tfoot: { tbody: true },
99 | th: { td: true, th: true },
100 | thead: { tbody: true, tfoot: true },
101 | tr: { tr: true }
102 | }
103 |
104 | function nameChar(ch) {
105 | return (
106 | ch == 45 ||
107 | ch == 46 ||
108 | ch == 58 ||
109 | (ch >= 65 && ch <= 90) ||
110 | ch == 95 ||
111 | (ch >= 97 && ch <= 122) ||
112 | ch >= 161
113 | )
114 | }
115 |
116 | function isSpace(ch) {
117 | return ch == 9 || ch == 10 || ch == 13 || ch == 32
118 | }
119 |
120 | let cachedName = null,
121 | cachedInput = null,
122 | cachedPos = 0
123 | function tagNameAfter(input, offset) {
124 | let pos = input.pos + offset
125 | if (cachedPos == pos && cachedInput == input) return cachedName
126 | let next = input.peek(offset)
127 | while (isSpace(next)) next = input.peek(++offset)
128 | let name = ""
129 | for (;;) {
130 | if (!nameChar(next)) break
131 | name += String.fromCharCode(next)
132 | next = input.peek(++offset)
133 | }
134 | // Undefined to signal there's a or -1
171 | ? new ElementContext(tagNameAfter(input, 1) || "", context)
172 | : context
173 | },
174 | reduce(context, term) {
175 | return term == Element && context ? context.parent : context
176 | },
177 | reuse(context, node, stack, input) {
178 | let type = node.type.id
179 | return type == StartTag || type == OpenTag
180 | ? new ElementContext(tagNameAfter(input, 1) || "", context)
181 | : context
182 | },
183 | hash(context) {
184 | return context ? context.hash : 0
185 | },
186 | strict: false
187 | })
188 |
189 | export const tagStart = new ExternalTokenizer(
190 | (input, stack) => {
191 | if (input.next != lessThan) {
192 | // End of file, close any open tags
193 | if (input.next < 0 && stack.context) input.acceptToken(missingCloseTag)
194 | return
195 | }
196 | input.advance()
197 | let close = input.next == slash
198 | if (close) input.advance()
199 | let name = tagNameAfter(input, 0)
200 | if (name === undefined) return
201 | if (!name) return input.acceptToken(close ? IncompleteCloseTag : StartTag)
202 |
203 | let parent = stack.context ? stack.context.name : null
204 | if (close) {
205 | if (name == parent) return input.acceptToken(StartCloseTag)
206 | if (parent && implicitlyClosed[parent])
207 | return input.acceptToken(missingCloseTag, -2)
208 | // if (stack.dialectEnabled(Dialect_noMatch)) return input.acceptToken(NoMatchStartCloseTag)
209 | for (let cx = stack.context; cx; cx = cx.parent) if (cx.name == name) return
210 | input.acceptToken(MismatchedStartCloseTag)
211 | } else {
212 | if (name == "script") return input.acceptToken(StartScriptTag)
213 | if (name == "style") return input.acceptToken(StartStyleTag)
214 | if (name == "textarea") return input.acceptToken(StartTextareaTag)
215 | if (selfClosers.hasOwnProperty(name)) return input.acceptToken(StartSelfClosingTag)
216 | if (parent && closeOnOpen[parent] && closeOnOpen[parent][name])
217 | input.acceptToken(missingCloseTag, -1)
218 | else input.acceptToken(StartTag)
219 | }
220 | },
221 | { contextual: true }
222 | )
223 |
224 | function contentTokenizer(tag, textToken, endToken) {
225 | let lastState = 2 + tag.length
226 | return new ExternalTokenizer(input => {
227 | // state means:
228 | // - 0 nothing matched
229 | // - 1 '<' matched
230 | // - 2 '' + possibly whitespace matched
231 | // - 3-(1+tag.length) part of the tag matched
232 | // - lastState whole tag + possibly whitespace matched
233 | for (let state = 0, matchedLen = 0, i = 0; ; i++) {
234 | if (input.next < 0) {
235 | if (i) input.acceptToken(textToken)
236 | break
237 | }
238 | if (
239 | (state == 0 && input.next == lessThan) ||
240 | (state == 1 && input.next == slash) ||
241 | (state >= 2 && state < lastState && input.next == tag.charCodeAt(state - 2))
242 | ) {
243 | state++
244 | matchedLen++
245 | } else if ((state == 2 || state == lastState) && isSpace(input.next)) {
246 | matchedLen++
247 | } else if (state == lastState && input.next == greaterThan) {
248 | if (i > matchedLen) input.acceptToken(textToken, -matchedLen)
249 | else input.acceptToken(endToken, -(matchedLen - 2))
250 | break
251 | } else if ((input.next == 10 /* '\n' */ || input.next == 13) /* '\r' */ && i) {
252 | input.acceptToken(textToken, 1)
253 | break
254 | } else {
255 | state = matchedLen = 0
256 | }
257 | input.advance()
258 | }
259 | })
260 | }
261 |
262 | export const scriptTokens = contentTokenizer("script", scriptText, StartCloseScriptTag)
263 |
264 | export const styleTokens = contentTokenizer("style", styleText, StartCloseStyleTag)
265 |
266 | export const textareaTokens = contentTokenizer(
267 | "textarea",
268 | textareaText,
269 | StartCloseTextareaTag
270 | )
271 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import { parser as svelteParser } from "./syntax.grammar"
2 | import {
3 | LRLanguage,
4 | LanguageSupport,
5 | indentNodeProp,
6 | foldNodeProp,
7 | syntaxTree
8 | } from "@codemirror/language"
9 | import { Parser, SyntaxNode } from "@lezer/common"
10 | import { cssLanguage, css } from "@codemirror/lang-css"
11 | import {
12 | javascriptLanguage,
13 | typescriptLanguage,
14 | javascript
15 | } from "@codemirror/lang-javascript"
16 | import { configureNesting } from "./content.js"
17 | import { htmlCompletionSource } from "@codemirror/lang-html"
18 | import { EditorView } from "@codemirror/view"
19 | import { EditorSelection, Text } from "@codemirror/state"
20 |
21 | type NestedLang = {
22 | tag: "script" | "style" | "textarea"
23 | attrs?: (attrs: { [attr: string]: string }) => boolean
24 | parser: Parser
25 | }
26 |
27 | const defaultNesting: NestedLang[] = [
28 | {
29 | tag: "script",
30 | attrs: attrs => attrs.type === "text/typescript" || attrs.lang === "ts",
31 | parser: typescriptLanguage.parser
32 | },
33 | {
34 | tag: "script",
35 | attrs(attrs) {
36 | return (
37 | !attrs.type ||
38 | /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(attrs.type)
39 | )
40 | },
41 | parser: javascriptLanguage.parser
42 | },
43 | {
44 | tag: "style",
45 | attrs(attrs) {
46 | return (
47 | (!attrs.lang || attrs.lang === "css" || attrs.lang === "scss") &&
48 | (!attrs.type || /^(text\/)?(x-)?(stylesheet|css|scss)$/i.test(attrs.type))
49 | )
50 | },
51 | parser: cssLanguage.parser
52 | }
53 | ]
54 |
55 | export { svelteParser }
56 |
57 | export const svelteLanguage = LRLanguage.define({
58 | // @ts-expect-error
59 | parser: svelteParser.configure({
60 | wrap: configureNesting(defaultNesting),
61 |
62 | props: [
63 | indentNodeProp.add({
64 | "Element": context => {
65 | let after = /^(\s*)(<\/)?/.exec(context.textAfter)!
66 | if (context.node.to <= context.pos + after[0].length) return context.continue()
67 | return context.lineIndent(context.node.from) + (after[2] ? 0 : context.unit)
68 | },
69 |
70 | "Block": context => {
71 | const node = context.node
72 | const text = context.textAfter.trim()
73 |
74 | if (text.startsWith("{/")) {
75 | const name = node.name
76 | if (
77 | (name === "IfBlock" && text.startsWith("{/if")) ||
78 | (name === "EachBlock" && text.startsWith("{/each")) ||
79 | (name === "AwaitBlock" && text.startsWith("{/await")) ||
80 | (name === "KeyBlock" && text.startsWith("{/key"))
81 | ) {
82 | return context.lineIndent(context.node.from)
83 | }
84 |
85 | return null
86 | }
87 |
88 | if (node.name === "IfBlock" || node.name === "EachBlock") {
89 | if (text.startsWith("{:else")) return context.lineIndent(node.from)
90 | } else if (node.name === "AwaitBlock") {
91 | if (text.startsWith("{:then")) return context.lineIndent(node.from)
92 | if (text.startsWith("{:catch")) return context.lineIndent(node.from)
93 | }
94 |
95 | // not sure if this needed to be duplicated
96 | let after = /^(\s*)(<\/)?/.exec(context.textAfter)!
97 | if (context.node.to <= context.pos + after[0].length) return context.continue()
98 | return context.lineIndent(context.node.from) + (after[2] ? 0 : context.unit)
99 | },
100 |
101 | "BlockOpen BlockClose BlockInline": context => {
102 | return context.column(context.node.from) + context.unit
103 | },
104 |
105 | "OpenTag CloseTag SelfClosingTag": context => {
106 | return context.column(context.node.from) + context.unit
107 | },
108 |
109 | "Document": context => {
110 | if (context.pos + /\s*/.exec(context.textAfter)![0].length < context.node.to) {
111 | return context.continue()
112 | }
113 |
114 | let endElt: SyntaxNode | null = null
115 | let close: SyntaxNode
116 |
117 | for (let cur = context.node; ; ) {
118 | let last = cur.lastChild
119 | if (!last || last.name != "Element" || last.to != cur.to) break
120 | endElt = cur = last
121 | }
122 |
123 | if (
124 | endElt &&
125 | !(
126 | (close = endElt.lastChild) &&
127 | (close.name === "CloseTag" || close.name === "SelfClosingTag")
128 | )
129 | ) {
130 | return context.lineIndent(endElt.from) + context.unit
131 | }
132 |
133 | return null
134 | }
135 | }),
136 |
137 | foldNodeProp.add({
138 | "Block": node => {
139 | const open = `${node.name}Open`
140 | const close = `${node.name}Close`
141 |
142 | const first = node.firstChild
143 | const last = node.lastChild
144 |
145 | if (!first || first.name !== open) return null
146 |
147 | return { from: first.to, to: last?.name === close ? last.from : node.to }
148 | },
149 |
150 | "Element": node => {
151 | let first = node.firstChild
152 | let last = node.lastChild!
153 | if (!first || first.name != "OpenTag") return null
154 | return { from: first.to, to: last.name === "CloseTag" ? last.from : node.to }
155 | }
156 | })
157 | ]
158 | }),
159 |
160 | languageData: {
161 | commentTokens: { block: { open: "" } },
162 | indentOnInput: /^\s*((<\/\w+\W)|(\{:(else|then|catch))|(\{\/(if|each|await|key)))$/,
163 | wordChars: "-._",
164 | autocomplete: htmlCompletionSource
165 | }
166 | })
167 |
168 | export function svelte() {
169 | return new LanguageSupport(svelteLanguage, [
170 | javascript().support,
171 | css().support,
172 | autoCloseTags
173 | ])
174 | }
175 |
176 | // unfortunately the HTML language explicitly checks for the language type,
177 | // so we have to duplicate the entire autoCloseTags extension
178 |
179 | function elementName(doc: Text, tree: SyntaxNode | null | undefined, max = doc.length) {
180 | if (!tree) return ""
181 | let tag = tree.firstChild
182 | let name =
183 | tag &&
184 | (tag.getChild("TagName") ||
185 | tag.getChild("ComponentName") ||
186 | tag.getChild("SvelteElementName"))
187 | return name ? doc.sliceString(name.from, Math.min(name.to, max)) : ""
188 | }
189 |
190 | const autoCloseTags = EditorView.inputHandler.of((view, from, to, text) => {
191 | if (
192 | view.composing ||
193 | view.state.readOnly ||
194 | from != to ||
195 | (text != ">" && text != "/") ||
196 | !svelteLanguage.isActiveAt(view.state, from, -1)
197 | )
198 | return false
199 | let { state } = view
200 | let changes = state.changeByRange(range => {
201 | let { head } = range
202 | let around = syntaxTree(state).resolveInner(head, -1)
203 | let name: string
204 |
205 | if (
206 | around.name === "TagName" ||
207 | around.name === "ComponentName" ||
208 | around.name === "SvelteElementName" ||
209 | around.name === "StartTag"
210 | ) {
211 | around = around.parent!
212 | }
213 |
214 | if (text === ">" && around.name === "OpenTag") {
215 | if (
216 | around.parent?.lastChild?.name != "CloseTag" &&
217 | (name = elementName(state.doc, around.parent, head))
218 | ) {
219 | let hasRightBracket = view.state.doc.sliceString(head, head + 1) === ">"
220 | let insert = `${hasRightBracket ? "" : ">"}${name}>`
221 | return {
222 | range: EditorSelection.cursor(head + 1),
223 | changes: { from: head + (hasRightBracket ? 1 : 0), insert }
224 | }
225 | }
226 | } else if (text === "/" && around.name === "OpenTag") {
227 | let empty = around.parent,
228 | base = empty?.parent
229 | if (
230 | empty!.from == head - 1 &&
231 | base!.lastChild?.name != "CloseTag" &&
232 | (name = elementName(state.doc, base, head))
233 | ) {
234 | let hasRightBracket = view.state.doc.sliceString(head, head + 1) === ">"
235 | let insert = `/${name}${hasRightBracket ? "" : ">"}`
236 | let pos = head + insert.length + (hasRightBracket ? 1 : 0)
237 | return { range: EditorSelection.cursor(pos), changes: { from: head, insert } }
238 | }
239 | }
240 | return { range }
241 | })
242 |
243 | if (changes.changes.empty) return false
244 |
245 | view.dispatch(changes, { userEvent: "input.type", scrollIntoView: true })
246 |
247 | return true
248 | })
249 |
--------------------------------------------------------------------------------
/src/syntax.grammar:
--------------------------------------------------------------------------------
1 | @top Document { (entity | DoctypeDecl)* }
2 |
3 | entity[@isGroup=Entity] {
4 | IfBlock |
5 | EachBlock |
6 | AwaitBlock |
7 | KeyBlock |
8 | RawHTMLBlock |
9 | DebugBlock |
10 | ConstBlock |
11 | Interpolation |
12 | UnknownBlock |
13 | Text |
14 | EntityReference |
15 | CharacterReference |
16 | InvalidEntity |
17 | Element |
18 | Comment |
19 | ProcessingInst |
20 | IncompleteCloseTag |
21 | MismatchedCloseTag |
22 | NoMatchCloseTag
23 | }
24 |
25 | IfBlock[group=Block] {
26 | IfBlockOpen (ElseBlock | entity)* IfBlockClose
27 | }
28 |
29 | EachBlock[group=Block] {
30 | EachBlockOpen (ElseBlock | entity)* EachBlockClose
31 | }
32 |
33 | AwaitBlock[group=Block] {
34 | AwaitBlockOpen (ThenBlock | CatchBlock | entity)* AwaitBlockClose
35 | }
36 |
37 | KeyBlock[group=Block] {
38 | KeyBlockOpen entity* KeyBlockClose
39 | }
40 |
41 | Element {
42 | OpenScriptTag ScriptText (CloseScriptTag | missingCloseTag) |
43 | OpenStyleTag StyleText (CloseStyleTag | missingCloseTag) |
44 | OpenTextareaTag TextareaText (CloseTextareaTag | missingCloseTag) |
45 | OpenTag entity* (CloseTag | missingCloseTag) |
46 | SelfClosingTag
47 | }
48 |
49 | ScriptText[group="TextContent Entity"] { scriptText* }
50 |
51 | StyleText[group="TextContent Entity"] { styleText* }
52 |
53 | TextareaText[group="TextContent Entity"] { textareaText* }
54 |
55 | Comment { commentStart commentContent* commentEnd }
56 |
57 | @skip { space } {
58 | OpenTag[closedBy=CloseTag] {
59 | StartTag elementName attr* EndTag
60 | }
61 |
62 | SelfClosingTag {
63 | StartSelfClosingTag TagName attr* EndTag |
64 | StartTag elementName attr* SelfClosingEndTag
65 | }
66 |
67 | MismatchedCloseTag {
68 | MismatchedStartCloseTag elementName EndTag
69 | }
70 |
71 | NoMatchCloseTag[@name=CloseTag] {
72 | NoMatchStartCloseTag elementName EndTag
73 | }
74 |
75 | CloseTag[openedBy=OpenTag] {
76 | StartCloseTag elementName EndTag
77 | }
78 |
79 | OpenScriptTag[@name=OpenTag,closedBy=CloseTag] {
80 | StartScriptTag TagName attr* EndTag
81 | }
82 |
83 | CloseScriptTag[@name=CloseTag,openedBy=OpenTag] {
84 | StartCloseScriptTag TagName EndTag
85 | }
86 |
87 | OpenStyleTag[@name=OpenTag,closedBy=CloseTag] {
88 | StartStyleTag TagName attr* EndTag
89 | }
90 |
91 | CloseStyleTag[@name=CloseTag,openedBy=OpenTag] {
92 | StartCloseStyleTag TagName EndTag
93 | }
94 |
95 | OpenTextareaTag[@name=OpenTag,closedBy=CloseTag] {
96 | StartTextareaTag TagName attr* EndTag
97 | }
98 |
99 | CloseTextareaTag[@name=CloseTag,openedBy=OpenTag] {
100 | StartCloseTextareaTag TagName EndTag
101 | }
102 |
103 | attr {
104 | DirectlyInterpolatedAttribute |
105 | SpreadInterpolatedAttribute |
106 | Directive |
107 | StyleAttribute |
108 | Attribute
109 | }
110 |
111 | DirectlyInterpolatedAttribute {
112 | "{" (DirectlyInterpolatedAttributeValue { identifier })? "}"
113 | }
114 |
115 | SpreadInterpolatedAttribute {
116 | "{" "..." LongExpression "}"
117 | }
118 |
119 | Directive {
120 | directiveStart
121 | ("|" Modifier)*
122 | (Is (AttributeValue | UnquotedAttributeValue))?
123 | }
124 |
125 | StyleAttribute {
126 | StyleAttributeName (Is (AttributeValue | UnquotedAttributeValue))?
127 | }
128 |
129 | Attribute {
130 | AttributeName
131 | ("|" Modifier)*
132 | (Is (AttributeValue | UnquotedAttributeValue))?
133 | }
134 |
135 | IfBlockOpen[group=BlockOpen,closedBy=IfBlockClose] {
136 | "{" pfx<"#"> blk<"if"> LongExpression "}"
137 | }
138 |
139 | IfBlockClose[group=BlockClose,openedBy=IfBlockOpen] {
140 | "{" pfx<"/"> blk<"if"> "}"
141 | }
142 |
143 | ElseBlock[group=BlockInline] {
144 | "{" pfx<":"> blk<"else"> (kw<"if"> LongExpression)? "}"
145 | }
146 |
147 | EachBlockOpen[group=BlockOpen,closedBy=EachBlockClose] {
148 | "{" pfx<"#"> blk<"each">
149 | ShortExpression
150 | kw<"as">
151 | ShortExpression
152 | (
153 | ("(" LongExpression ")") |
154 | ("," Variable? ("(" LongExpression ")")?)
155 | )?
156 | "}"
157 | }
158 |
159 | EachBlockClose[group=BlockClose,openedBy=EachBlockOpen] {
160 | "{" pfx<"/"> blk<"each"> "}"
161 | }
162 |
163 | AwaitBlockOpen[group=BlockOpen,closedBy=AwaitBlockClose] {
164 | "{" pfx<"#"> blk<"await">
165 | ShortExpression
166 | ((kw<"then"> | kw<"catch">) ShortExpression)?
167 | "}"
168 | }
169 |
170 | AwaitBlockClose[group=BlockClose,closedBy=AwaitBlockOpen] {
171 | "{" pfx<"/"> blk<"await"> "}"
172 | }
173 |
174 | ThenBlock[group=BlockInline] {
175 | "{" pfx<":"> blk<"then"> Variable? "}"
176 | }
177 |
178 | CatchBlock[group=BlockInline] {
179 | "{" pfx<":"> blk<"catch"> Variable? "}"
180 | }
181 |
182 | KeyBlockOpen[group=BlockOpen,closedBy=KeyBlockClose] {
183 | "{" pfx<"#"> blk<"key"> LongExpression "}"
184 | }
185 |
186 | KeyBlockClose[group=BlockClose,openedBy=KeyBlockOpen] {
187 | "{" pfx<"/"> blk<"key"> "}"
188 | }
189 |
190 | RawHTMLBlock[group=BlockInline] {
191 | "{" pfx<"@"> blk<"html"> LongExpression "}"
192 | }
193 |
194 | DebugBlock[group=BlockInline] {
195 | "{" pfx<"@"> blk<"debug"> Variable ("," Variable)* "}"
196 | }
197 |
198 | ConstBlock[group=BlockInline] {
199 | "{" pfx<"@"> blk<"const"> LongExpression "}"
200 | }
201 |
202 | UnknownBlock[group=BlockInline] {
203 | "{"
204 | BlockPrefix
205 | BlockType
206 | UnknownBlockContent?
207 | "}"
208 | }
209 |
210 | Interpolation {
211 | "{" LongExpression "}"
212 | }
213 | }
214 |
215 | elementName {
216 | TagName |
217 | ComponentName |
218 | SvelteElementName
219 | }
220 |
221 | SvelteElementName {
222 | @extend[@name=SvelteElementNamespace]
223 | ":"
224 | SvelteElementType
225 | }
226 |
227 | dr {
228 | dir[@name=Directive{name}] {
229 | dirName[@name=DirectiveName] { @extend }
230 | ":"
231 | DirectiveTarget
232 | }
233 | }
234 |
235 | directiveStart {
236 | dr<"On", "on"> |
237 | dr<"Bind", "bind"> |
238 | dr<"Let", "let"> |
239 | dr<"Class", "class"> |
240 | dr<"Style", "style"> |
241 | dr<"Use", "use"> |
242 | dr<"Transition", "transition"> |
243 | dr<"In", "in"> |
244 | dr<"Out", "out"> |
245 | dr<"Animate", "animate">
246 | }
247 |
248 | AttributeValue {
249 | Interpolation |
250 | "\"" attributeValueContentDouble? "\"" |
251 | "\'" attributeValueContentSingle? "\'"
252 | }
253 |
254 | attributeValueContentDouble[@name=AttributeValueContent] {
255 | (attributeValueContentCharDouble | attributeValueContentEntity)+
256 | }
257 |
258 | attributeValueContentSingle[@name=AttributeValueContent] {
259 | (attributeValueContentCharSingle | attributeValueContentEntity)+
260 | }
261 |
262 | attributeValueContentEntity {
263 | EntityReference |
264 | CharacterReference |
265 | Interpolation |
266 | InvalidEntity
267 | }
268 |
269 | @context elementContext from "./html-tokens.js"
270 |
271 | @external tokens scriptTokens from "./html-tokens.js" {
272 | scriptText
273 | StartCloseScriptTag[@name=StartCloseTag,closedBy=EndTag]
274 | }
275 |
276 | @external tokens styleTokens from "./html-tokens.js" {
277 | styleText
278 | StartCloseStyleTag[@name=StartCloseTag,closedBy=EndTag]
279 | }
280 |
281 | @external tokens textareaTokens from "./html-tokens.js" {
282 | textareaText
283 | StartCloseTextareaTag[@name=StartCloseTag,closedBy=EndTag]
284 | }
285 |
286 | @external tokens tagStart from "./html-tokens.js" {
287 | StartTag[closedBy="EndTag SelfClosingEndTag"],
288 | StartScriptTag[@name=StartTag,closedBy=EndTag],
289 | StartStyleTag[@name=StartTag,closedBy=EndTag],
290 | StartTextareaTag[@name=StartTag,closedBy=EndTag],
291 | StartSelfClosingTag[@name=StartTag,closedBy=EndTag],
292 | StartCloseTag[closedBy=EndTag],
293 | NoMatchStartCloseTag[@name=StartCloseTag,closedBy=EndTag]
294 | MismatchedStartCloseTag[@name=StartCloseTag,closedBy=EndTag],
295 | missingCloseTag,
296 | IncompleteCloseTag
297 | }
298 |
299 | @external tokens commentContent from "./tokens.js" {
300 | commentContent
301 | }
302 |
303 | @external tokens longExpression from "./tokens.js" {
304 | LongExpression
305 | }
306 |
307 | @external tokens shortExpression from "./tokens.js" {
308 | ShortExpression
309 | }
310 |
311 | kw { @specialize[@name={term}] }
312 |
313 | pfx { @extend[@name=BlockPrefix] }
314 |
315 | blk { @specialize[@name=BlockType] }
316 |
317 | @tokens {
318 | "\""[@name=DoubleQuote, openedBy="\"", closedBy="\""]
319 | "\'"[@name=SingleQuote, openedBy="\'", closedBy="\'"]
320 |
321 | "{"[closedBy="}"]
322 | "}"[openedBy="{"]
323 | "("[closedBy="("]
324 | ")"[openedBy=")"]
325 | "["[closedBy="]"]
326 | "]"[openedBy="["]
327 |
328 | "," "|" "..."
329 |
330 | space { (" " | "\t" | "\r" | "\n")+ }
331 |
332 | identifierChar { @asciiLetter | $[_$\u{a1}-\u{10ffff}] }
333 | word { identifierChar (identifierChar | @digit)* }
334 | identifier { word }
335 |
336 | Variable { identifierChar (identifierChar | @digit | ".")* }
337 |
338 | BlockPrefix { "#" | "@" | "/" | ":" }
339 | BlockType { identifier }
340 |
341 | UnknownBlockContent { ![}]+ }
342 |
343 | @precedence { UnknownBlockContent space }
344 |
345 | commentStart { "" }
347 |
348 | EndTag[openedBy="StartTag StartCloseTag"] { "/"? ">" }
349 | SelfClosingEndTag[openedBy=StartTag] { "/>" }
350 | @precedence { SelfClosingEndTag, EndTag }
351 |
352 | tagNameStart {
353 | "_" |
354 | @asciiLowercase |
355 | $[\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D] |
356 | $[\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u{10000}-\u{EFFFF}]
357 | }
358 |
359 | componentNameStart {
360 | @asciiUppercase
361 | }
362 |
363 | nameChar {
364 | "_" |
365 | "-" |
366 | "." |
367 | @asciiLetter |
368 | @digit |
369 | $[\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D] |
370 | $[\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u{10000}-\u{EFFFF}] |
371 | $[\u00B7\u0300-\u036F\u203F-\u2040]
372 | }
373 |
374 | TagName { tagNameStart nameChar* }
375 |
376 | ComponentName { componentNameStart nameChar* }
377 |
378 | SvelteElementType { @asciiLetter+ }
379 |
380 | attributeChar { ![\u0000-\u0020\u007F-\u009F"'>/=|:{\uFDD0-\uFDEF\uFFFE\uFFFF] }
381 |
382 | AttributeName { attributeChar+ }
383 | StyleAttributeName { "--" attributeChar+ }
384 | Modifier { attributeChar+ }
385 | DirectiveTarget { attributeChar+ }
386 |
387 | @precedence { StyleAttributeName AttributeName }
388 |
389 | UnquotedAttributeValue { ![ \t\n\r\u000C=<>"'`{] ![ \t\n\r\u000C=<>"'`]* }
390 |
391 | attributeValueContentCharDouble { !["&{] }
392 |
393 | attributeValueContentCharSingle { !['&{] }
394 |
395 | Is { "=" }
396 |
397 | EntityReference { "&" ![#; ]+ ";" }
398 |
399 | CharacterReference { "" ![; ]+ ";" }
400 |
401 | InvalidEntity { "&" }
402 |
403 | @precedence { CharacterReference, EntityReference, InvalidEntity }
404 |
405 | Text[group=TextContent] { ![<&{]+ }
406 |
407 | ProcessingInst { "" piContent }
408 |
409 | piContent { ![?] piContent | "?" piQuestion }
410 | piQuestion { ![>] piContent | ">" }
411 |
412 | DoctypeDecl { "]* ">" }
413 |
414 | @precedence { commentStart, ProcessingInst, DoctypeDecl }
415 | }
416 |
417 | @external propSource svelteHighlighting from "./highlight"
--------------------------------------------------------------------------------
/src/syntax.grammar.d.ts:
--------------------------------------------------------------------------------
1 | import { Parser } from "@lezer/common"
2 |
3 | export declare const parser: Parser
4 |
--------------------------------------------------------------------------------
/src/syntax.grammar.terms.d.ts:
--------------------------------------------------------------------------------
1 | export const scriptText = 138,
2 | StartCloseScriptTag = 1,
3 | styleText = 139,
4 | StartCloseStyleTag = 2,
5 | textareaText = 140,
6 | StartCloseTextareaTag = 3,
7 | StartTag = 4,
8 | StartScriptTag = 5,
9 | StartStyleTag = 6,
10 | StartTextareaTag = 7,
11 | StartSelfClosingTag = 8,
12 | StartCloseTag = 9,
13 | MismatchedStartCloseTag = 11,
14 | missingCloseTag = 141,
15 | IncompleteCloseTag = 12,
16 | commentContent = 142,
17 | LongExpression = 13,
18 | ShortExpression = 14,
19 | Element = 62,
20 | ScriptText = 103,
21 | StyleText = 106,
22 | TextareaText = 109,
23 | OpenTag = 111
24 |
--------------------------------------------------------------------------------
/src/tokens.ts:
--------------------------------------------------------------------------------
1 | import { ExternalTokenizer, InputStream } from "@lezer/lr"
2 | import {
3 | LongExpression as longExprToken,
4 | ShortExpression as shortExprToken,
5 | commentContent as cmtToken
6 | } from "./syntax.grammar.terms"
7 |
8 | const space = [
9 | 9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199,
10 | 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288
11 | ]
12 |
13 | const parenOpen = 40
14 | const parenClose = 41
15 | const squareOpen = 91
16 | const squareClose = 93
17 | const curlyOpen = 123
18 | const curlyClose = 125
19 | const comma = 44
20 | const colon = 58
21 | const hash = 35
22 | const at = 64
23 | const slash = 47
24 | const greaterThan = 62
25 | const dash = 45
26 | const quoteDouble = 34
27 | const quoteSingle = 39
28 | const backslash = 92
29 | const newline = 10
30 | const asterisk = 42
31 | const tick = 96
32 |
33 | const prefixes = [colon, hash, at, slash]
34 |
35 | export const commentContent = new ExternalTokenizer(input => {
36 | for (let dashes = 0, i = 0; ; i++) {
37 | if (input.next < 0) {
38 | if (i) input.acceptToken(cmtToken)
39 | break
40 | }
41 | if (input.next == dash) {
42 | dashes++
43 | } else if (input.next == greaterThan && dashes >= 2) {
44 | if (i > 3) input.acceptToken(cmtToken, -2)
45 | break
46 | } else {
47 | dashes = 0
48 | }
49 | input.advance()
50 | }
51 | })
52 |
53 | // TODO: string handler does not handle interpolation
54 |
55 | function createStringHandler(input: InputStream) {
56 | let inString = false
57 | let inStringType: "double" | "single" | "template" | null = null
58 | let inStringIgnoreNext = false
59 |
60 | return () => {
61 | if (inString) {
62 | if (inStringIgnoreNext) {
63 | inStringIgnoreNext = false
64 | return true
65 | }
66 |
67 | if (input.next === backslash) {
68 | inStringIgnoreNext = true
69 | return true
70 | }
71 |
72 | if (inStringType === "double" && input.next === quoteDouble) {
73 | inString = false
74 | inStringType = null
75 | return true
76 | }
77 |
78 | if (inStringType === "single" && input.next === quoteSingle) {
79 | inString = false
80 | inStringType = null
81 | return true
82 | }
83 |
84 | if (inStringType === "template" && input.next === tick) {
85 | inString = false
86 | inStringType = null
87 | return true
88 | }
89 |
90 | return true
91 | }
92 |
93 | if (input.next === quoteDouble) {
94 | inString = true
95 | inStringType = "double"
96 | return true
97 | }
98 |
99 | if (input.next === quoteSingle) {
100 | inString = true
101 | inStringType = "single"
102 | return true
103 | }
104 |
105 | if (input.next === tick) {
106 | inString = true
107 | inStringType = "template"
108 | return true
109 | }
110 |
111 | return false
112 | }
113 | }
114 |
115 | function createCommentHandler(input: InputStream) {
116 | let inLineComment = false
117 | let inBlockComment = false
118 |
119 | return () => {
120 | if (inLineComment) {
121 | if (input.next === newline) {
122 | inLineComment = false
123 | return true
124 | }
125 |
126 | return true
127 | }
128 |
129 | if (inBlockComment) {
130 | if (input.next === asterisk && input.peek(1) === slash) {
131 | inBlockComment = false
132 | return true
133 | }
134 |
135 | return true
136 | }
137 |
138 | if (input.next === slash && input.peek(1) === slash) {
139 | inLineComment = true
140 | return true
141 | }
142 |
143 | if (input.next === slash && input.peek(1) === asterisk) {
144 | inBlockComment = true
145 | return true
146 | }
147 |
148 | return false
149 | }
150 | }
151 |
152 | // closes on a delimiter that probably isn't in the expression
153 | export const longExpression = new ExternalTokenizer(input => {
154 | if (prefixes.includes(input.next)) {
155 | return
156 | }
157 |
158 | const commentHandler = createCommentHandler(input)
159 | const stringHandler = createStringHandler(input)
160 |
161 | let stack: ("(" | "{" | "[")[] = []
162 |
163 | const popIfMatch = (match: "(" | "{" | "[") => {
164 | const idx = stack.lastIndexOf(match)
165 | if (idx !== -1) {
166 | while (stack.length > idx) {
167 | stack.pop()
168 | }
169 | }
170 | }
171 |
172 | for (let pos = 0; ; pos++) {
173 | // end of input
174 | if (input.next < 0) {
175 | if (pos > 0) input.acceptToken(longExprToken)
176 | break
177 | }
178 |
179 | if (commentHandler() || stringHandler()) {
180 | input.advance()
181 | continue
182 | }
183 |
184 | if (
185 | stack.length === 0 &&
186 | (input.next === curlyClose ||
187 | input.next === parenClose ||
188 | input.next === squareClose)
189 | ) {
190 | input.acceptToken(longExprToken)
191 | break
192 | }
193 |
194 | // prettier-ignore
195 | switch (input.next) {
196 | case parenOpen: stack.push("("); break
197 | case parenClose: popIfMatch("("); break
198 | case squareOpen: stack.push("["); break
199 | case squareClose: popIfMatch("["); break
200 | case curlyOpen: stack.push("{"); break
201 | case curlyClose: popIfMatch("{"); break
202 | }
203 |
204 | input.advance()
205 | }
206 | })
207 |
208 | // same as long expression but will close on either a space or comma
209 | // that is reasonably not inside of the expression
210 | export const shortExpression = new ExternalTokenizer(input => {
211 | if (prefixes.includes(input.peek(0))) {
212 | return
213 | }
214 |
215 | const commentHandler = createCommentHandler(input)
216 | const stringHandler = createStringHandler(input)
217 |
218 | let stack: ("(" | "{" | "[")[] = []
219 |
220 | const popIfMatch = (match: "(" | "{" | "[") => {
221 | const idx = stack.lastIndexOf(match)
222 | if (idx !== -1) {
223 | while (stack.length > idx) {
224 | stack.pop()
225 | }
226 | }
227 | }
228 |
229 | for (let pos = 0; ; pos++) {
230 | // end of input
231 | if (input.next < 0) {
232 | if (pos > 0) input.acceptToken(shortExprToken)
233 | break
234 | }
235 |
236 | if (commentHandler() || stringHandler()) {
237 | input.advance()
238 | continue
239 | }
240 |
241 | if (
242 | stack.length === 0 &&
243 | (input.next === curlyClose ||
244 | input.next === parenClose ||
245 | input.next === squareClose ||
246 | input.next === comma
247 | )
248 | ) {
249 | input.acceptToken(shortExprToken)
250 | break
251 | }
252 |
253 | // prettier-ignore
254 | switch (input.next) {
255 | case parenOpen: stack.push("("); break
256 | case parenClose: popIfMatch("("); break
257 | case squareOpen: stack.push("["); break
258 | case squareClose: popIfMatch("["); break
259 | case curlyOpen: stack.push("{"); break
260 | case curlyClose: popIfMatch("{"); break
261 | }
262 |
263 | if (pos !== 0 && stack.length === 0 && space.includes(input.next)) {
264 | input.acceptToken(shortExprToken)
265 | break
266 | }
267 |
268 | input.advance()
269 | }
270 | })
271 |
--------------------------------------------------------------------------------
/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.18.6"
7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a"
8 | integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==
9 | dependencies:
10 | "@babel/highlight" "^7.18.6"
11 |
12 | "@babel/helper-validator-identifier@^7.18.6":
13 | version "7.19.1"
14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
15 | integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
16 |
17 | "@babel/highlight@^7.18.6":
18 | version "7.18.6"
19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
20 | integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
21 | dependencies:
22 | "@babel/helper-validator-identifier" "^7.18.6"
23 | chalk "^2.0.0"
24 | js-tokens "^4.0.0"
25 |
26 | "@codemirror/autocomplete@^6.0.0":
27 | version "6.3.4"
28 | resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.3.4.tgz#dd22f0a0220718e1f6e3b48319649859b6c929b6"
29 | integrity sha512-irxKsTSjS0OkfMWWt9YxtNK97++/E+XIHfKnRpSVfZyHzda/amYF0BR+T8mMkrGQWidx2zApxHx08GT13egyQA==
30 | dependencies:
31 | "@codemirror/language" "^6.0.0"
32 | "@codemirror/state" "^6.0.0"
33 | "@codemirror/view" "^6.6.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/lang-css@^6.0.0", "@codemirror/lang-css@^6.0.1":
65 | version "6.0.1"
66 | resolved "https://registry.yarnpkg.com/@codemirror/lang-css/-/lang-css-6.0.1.tgz#470fff614e4cfbbe796ec43103420d59c797dd7a"
67 | integrity sha512-rlLq1Dt0WJl+2epLQeAsfqIsx3lGu4HStHCJu95nGGuz2P2fNugbU3dQYafr2VRjM4eMC9HviI6jvS98CNtG5w==
68 | dependencies:
69 | "@codemirror/autocomplete" "^6.0.0"
70 | "@codemirror/language" "^6.0.0"
71 | "@codemirror/state" "^6.0.0"
72 | "@lezer/css" "^1.0.0"
73 |
74 | "@codemirror/lang-html@^6.2.0":
75 | version "6.3.1"
76 | resolved "https://registry.yarnpkg.com/@codemirror/lang-html/-/lang-html-6.3.1.tgz#01094bf141794e47f050000adce44c10c6533871"
77 | integrity sha512-36PoquiZ1S8HW0mF2hupZYPajYgpSwK27YDPOOwMk4jFW+shkS79I7mSNmYlDBkgRS8p3ldfh3dG2/HknwsawA==
78 | dependencies:
79 | "@codemirror/autocomplete" "^6.0.0"
80 | "@codemirror/lang-css" "^6.0.0"
81 | "@codemirror/lang-javascript" "^6.0.0"
82 | "@codemirror/language" "^6.0.0"
83 | "@codemirror/state" "^6.0.0"
84 | "@codemirror/view" "^6.2.2"
85 | "@lezer/common" "^1.0.0"
86 | "@lezer/html" "^1.1.0"
87 |
88 | "@codemirror/lang-javascript@^6.0.0", "@codemirror/lang-javascript@^6.1.1":
89 | version "6.1.1"
90 | resolved "https://registry.yarnpkg.com/@codemirror/lang-javascript/-/lang-javascript-6.1.1.tgz#f920192db30531927a02b8a1af9cf3c3d895101c"
91 | integrity sha512-F4+kiuC5d5dUSJmff96tJQwpEXs/tX/4bapMRnZWW6bHKK1Fx6MunTzopkCUWRa9bF87GPmb9m7Qtg7Yv8f3uQ==
92 | dependencies:
93 | "@codemirror/autocomplete" "^6.0.0"
94 | "@codemirror/language" "^6.0.0"
95 | "@codemirror/lint" "^6.0.0"
96 | "@codemirror/state" "^6.0.0"
97 | "@codemirror/view" "^6.0.0"
98 | "@lezer/common" "^1.0.0"
99 | "@lezer/javascript" "^1.0.0"
100 |
101 | "@codemirror/language@^6.0.0":
102 | version "6.3.1"
103 | resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.3.1.tgz#1d61f33aa5de9aa74a713ee1f5ce600adc74df6b"
104 | integrity sha512-MK+G1QKaGfSEUg9YEFaBkMBI6j1ge4VMBPZv9fDYotw7w695c42x5Ba1mmwBkesYnzYFBfte6Hh9TDcKa6xORQ==
105 | dependencies:
106 | "@codemirror/state" "^6.0.0"
107 | "@codemirror/view" "^6.0.0"
108 | "@lezer/common" "^1.0.0"
109 | "@lezer/highlight" "^1.0.0"
110 | "@lezer/lr" "^1.0.0"
111 | style-mod "^4.0.0"
112 |
113 | "@codemirror/lint@^6.0.0":
114 | version "6.1.0"
115 | resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.1.0.tgz#f006142d3a580fdb8ffc2faa3361b2232c08e079"
116 | integrity sha512-mdvDQrjRmYPvQ3WrzF6Ewaao+NWERYtpthJvoQ3tK3t/44Ynhk8ZGjTSL9jMEv8CgSMogmt75X8ceOZRDSXHtQ==
117 | dependencies:
118 | "@codemirror/state" "^6.0.0"
119 | "@codemirror/view" "^6.0.0"
120 | crelt "^1.0.5"
121 |
122 | "@codemirror/search@^6.0.0":
123 | version "6.2.3"
124 | resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.2.3.tgz#fab933fef1b1de8ef40cda275c73d9ac7a1ff40f"
125 | integrity sha512-V9n9233lopQhB1dyjsBK2Wc1i+8hcCqxl1wQ46c5HWWLePoe4FluV3TGHoZ04rBRlGjNyz9DTmpJErig8UE4jw==
126 | dependencies:
127 | "@codemirror/state" "^6.0.0"
128 | "@codemirror/view" "^6.0.0"
129 | crelt "^1.0.5"
130 |
131 | "@codemirror/state@^6.0.0", "@codemirror/state@^6.1.4":
132 | version "6.1.4"
133 | resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.1.4.tgz#2b654ae233ac4f41ee89ce095509ea35ecdf1031"
134 | integrity sha512-g+3OJuRylV5qsXuuhrc6Cvs1NQluNioepYMM2fhnpYkNk7NgX+j0AFuevKSVKzTDmDyt9+Puju+zPdHNECzCNQ==
135 |
136 | "@codemirror/theme-one-dark@^6.0.0":
137 | version "6.1.0"
138 | resolved "https://registry.yarnpkg.com/@codemirror/theme-one-dark/-/theme-one-dark-6.1.0.tgz#6f8b3c7fc22e9fec59edd573f4ba9546db42e007"
139 | integrity sha512-AiTHtFRu8+vWT9wWUWDM+cog6ZwgivJogB1Tm/g40NIpLwph7AnmxrSzWfvJN5fBVufsuwBxecQCNmdcR5D7Aw==
140 | dependencies:
141 | "@codemirror/language" "^6.0.0"
142 | "@codemirror/state" "^6.0.0"
143 | "@codemirror/view" "^6.0.0"
144 | "@lezer/highlight" "^1.0.0"
145 |
146 | "@codemirror/view@^6.0.0", "@codemirror/view@^6.2.2", "@codemirror/view@^6.6.0":
147 | version "6.6.0"
148 | resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.6.0.tgz#d89a24912ae2f4b9d7bd430c7804c25c5e32838c"
149 | integrity sha512-40VaFVZI3rkyjO5GHFAbNwaW+YgZexjKyx5gxLU2DvfuXAEZX0kW0apOXb0SBRLnKIQJ+U/n2nPfxgBVFHERrg==
150 | dependencies:
151 | "@codemirror/state" "^6.1.4"
152 | style-mod "^4.0.0"
153 | w3c-keyname "^2.2.4"
154 |
155 | "@esbuild/linux-loong64@0.14.54":
156 | version "0.14.54"
157 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028"
158 | integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==
159 |
160 | "@lezer/common@^1.0.0":
161 | version "1.0.2"
162 | resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.0.2.tgz#8fb9b86bdaa2ece57e7d59e5ffbcb37d71815087"
163 | integrity sha512-SVgiGtMnMnW3ActR8SXgsDhw7a0w0ChHSYAyAUxxrOiJ1OqYWEKk/xJd84tTSPo1mo6DXLObAJALNnd0Hrv7Ng==
164 |
165 | "@lezer/css@^1.0.0":
166 | version "1.1.0"
167 | resolved "https://registry.yarnpkg.com/@lezer/css/-/css-1.1.0.tgz#f86f35e5808c6c4f293e7a9ce509ee109180ae56"
168 | integrity sha512-3dc6l8ZQOOAZUhNk6ekrkaZ6iJScn0QKxsmKgmn0BsaIXePqgPPk3d1iqo/d7laICE6eYrLpxm5HrGyNyR0hfQ==
169 | dependencies:
170 | "@lezer/highlight" "^1.0.0"
171 | "@lezer/lr" "^1.0.0"
172 |
173 | "@lezer/generator@^1.0.0":
174 | version "1.1.3"
175 | resolved "https://registry.yarnpkg.com/@lezer/generator/-/generator-1.1.3.tgz#ec57d5594142421d4f58637400486a43afb55ea5"
176 | integrity sha512-qGF0I2TTJ+VBjjsVX8FGqKJy3laALBnVbD5EbXEu13Sgszl/vjnxjcZ69O8w9IK8/WtVFQLspU4UjCCUNRlWzA==
177 | dependencies:
178 | "@lezer/common" "^1.0.0"
179 | "@lezer/lr" "^1.0.0"
180 |
181 | "@lezer/highlight@^1.0.0":
182 | version "1.1.3"
183 | resolved "https://registry.yarnpkg.com/@lezer/highlight/-/highlight-1.1.3.tgz#bf5a36c2ee227f526d74997ac91f7777e29bd25d"
184 | integrity sha512-3vLKLPThO4td43lYRBygmMY18JN3CPh9w+XS2j8WC30vR4yZeFG4z1iFe4jXE43NtGqe//zHW5q8ENLlHvz9gw==
185 | dependencies:
186 | "@lezer/common" "^1.0.0"
187 |
188 | "@lezer/html@^1.1.0":
189 | version "1.2.0"
190 | resolved "https://registry.yarnpkg.com/@lezer/html/-/html-1.2.0.tgz#1db82c8005be288eb99c568baf66c8730b01877a"
191 | integrity sha512-T6sseEJQPTFayX3h9DINh7KyFBwCjEtrqQRD+7USmtkJh1xHDutsB6KYHKveSd+TbsedIPAcZwar+gkHl1rVSw==
192 | dependencies:
193 | "@lezer/common" "^1.0.0"
194 | "@lezer/highlight" "^1.0.0"
195 | "@lezer/lr" "^1.0.0"
196 |
197 | "@lezer/javascript@^1.0.0", "@lezer/javascript@^1.2.0":
198 | version "1.3.1"
199 | resolved "https://registry.yarnpkg.com/@lezer/javascript/-/javascript-1.3.1.tgz#de1d942adc964242d90e0ecb0fd00410f9a55512"
200 | integrity sha512-3Z6OggGxRuqMntAuadxW0Oy7Zbs56KJSwujDc6vwhVfbi5upHOEzNIrNLvphDU/HozLoTCGQcjNmjLkb2Zr5pg==
201 | dependencies:
202 | "@lezer/highlight" "^1.0.0"
203 | "@lezer/lr" "^1.0.0"
204 |
205 | "@lezer/lr@^1.0.0":
206 | version "1.2.5"
207 | resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.2.5.tgz#e9088164a711690596f17378665e0554157c9b03"
208 | integrity sha512-f9319YG1A/3ysgUE3bqCHEd7g+3ZZ71MWlwEc42mpnLVYXgfJJgtu1XAyBB4Kz8FmqmnFe9caopDqKeMMMAU6g==
209 | dependencies:
210 | "@lezer/common" "^1.0.0"
211 |
212 | "@types/mocha@^9.1.1":
213 | version "9.1.1"
214 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4"
215 | integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==
216 |
217 | acorn-walk@^8.0.0, acorn-walk@^8.0.2:
218 | version "8.2.0"
219 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
220 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
221 |
222 | acorn@^8.0.4, acorn@^8.1.0:
223 | version "8.8.1"
224 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73"
225 | integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==
226 |
227 | ansi-colors@4.1.1:
228 | version "4.1.1"
229 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
230 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
231 |
232 | ansi-regex@^5.0.1:
233 | version "5.0.1"
234 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
235 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
236 |
237 | ansi-styles@^3.2.1:
238 | version "3.2.1"
239 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
240 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
241 | dependencies:
242 | color-convert "^1.9.0"
243 |
244 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
245 | version "4.3.0"
246 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
247 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
248 | dependencies:
249 | color-convert "^2.0.1"
250 |
251 | anymatch@~3.1.2:
252 | version "3.1.3"
253 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
254 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
255 | dependencies:
256 | normalize-path "^3.0.0"
257 | picomatch "^2.0.4"
258 |
259 | argparse@^2.0.1:
260 | version "2.0.1"
261 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
262 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
263 |
264 | balanced-match@^1.0.0:
265 | version "1.0.2"
266 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
267 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
268 |
269 | binary-extensions@^2.0.0:
270 | version "2.2.0"
271 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
272 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
273 |
274 | brace-expansion@^1.1.7:
275 | version "1.1.11"
276 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
277 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
278 | dependencies:
279 | balanced-match "^1.0.0"
280 | concat-map "0.0.1"
281 |
282 | brace-expansion@^2.0.1:
283 | version "2.0.1"
284 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
285 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
286 | dependencies:
287 | balanced-match "^1.0.0"
288 |
289 | braces@~3.0.2:
290 | version "3.0.2"
291 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
292 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
293 | dependencies:
294 | fill-range "^7.0.1"
295 |
296 | browser-stdout@1.3.1:
297 | version "1.3.1"
298 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
299 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
300 |
301 | call-bind@^1.0.0, call-bind@^1.0.2:
302 | version "1.0.2"
303 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
304 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
305 | dependencies:
306 | function-bind "^1.1.1"
307 | get-intrinsic "^1.0.2"
308 |
309 | camelcase@^6.0.0:
310 | version "6.3.0"
311 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
312 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
313 |
314 | chalk@^2.0.0, chalk@^2.4.1:
315 | version "2.4.2"
316 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
317 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
318 | dependencies:
319 | ansi-styles "^3.2.1"
320 | escape-string-regexp "^1.0.5"
321 | supports-color "^5.3.0"
322 |
323 | chalk@^4.1.0:
324 | version "4.1.2"
325 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
326 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
327 | dependencies:
328 | ansi-styles "^4.1.0"
329 | supports-color "^7.1.0"
330 |
331 | chokidar@3.5.3:
332 | version "3.5.3"
333 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
334 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
335 | dependencies:
336 | anymatch "~3.1.2"
337 | braces "~3.0.2"
338 | glob-parent "~5.1.2"
339 | is-binary-path "~2.1.0"
340 | is-glob "~4.0.1"
341 | normalize-path "~3.0.0"
342 | readdirp "~3.6.0"
343 | optionalDependencies:
344 | fsevents "~2.3.2"
345 |
346 | cliui@^7.0.2:
347 | version "7.0.4"
348 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
349 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
350 | dependencies:
351 | string-width "^4.2.0"
352 | strip-ansi "^6.0.0"
353 | wrap-ansi "^7.0.0"
354 |
355 | codemirror@^6.0.0:
356 | version "6.0.1"
357 | resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-6.0.1.tgz#62b91142d45904547ee3e0e0e4c1a79158035a29"
358 | integrity sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==
359 | dependencies:
360 | "@codemirror/autocomplete" "^6.0.0"
361 | "@codemirror/commands" "^6.0.0"
362 | "@codemirror/language" "^6.0.0"
363 | "@codemirror/lint" "^6.0.0"
364 | "@codemirror/search" "^6.0.0"
365 | "@codemirror/state" "^6.0.0"
366 | "@codemirror/view" "^6.0.0"
367 |
368 | color-convert@^1.9.0:
369 | version "1.9.3"
370 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
371 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
372 | dependencies:
373 | color-name "1.1.3"
374 |
375 | color-convert@^2.0.1:
376 | version "2.0.1"
377 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
378 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
379 | dependencies:
380 | color-name "~1.1.4"
381 |
382 | color-name@1.1.3:
383 | version "1.1.3"
384 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
385 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
386 |
387 | color-name@~1.1.4:
388 | version "1.1.4"
389 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
390 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
391 |
392 | concat-map@0.0.1:
393 | version "0.0.1"
394 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
395 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
396 |
397 | core-util-is@~1.0.0:
398 | version "1.0.3"
399 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
400 | integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
401 |
402 | crelt@^1.0.5:
403 | version "1.0.5"
404 | resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.5.tgz#57c0d52af8c859e354bace1883eb2e1eb182bb94"
405 | integrity sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==
406 |
407 | cross-spawn@^6.0.5:
408 | version "6.0.5"
409 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
410 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
411 | dependencies:
412 | nice-try "^1.0.4"
413 | path-key "^2.0.1"
414 | semver "^5.5.0"
415 | shebang-command "^1.2.0"
416 | which "^1.2.9"
417 |
418 | debug@2.6.9:
419 | version "2.6.9"
420 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
421 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
422 | dependencies:
423 | ms "2.0.0"
424 |
425 | debug@4.3.4:
426 | version "4.3.4"
427 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
428 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
429 | dependencies:
430 | ms "2.1.2"
431 |
432 | decamelize@^4.0.0:
433 | version "4.0.0"
434 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
435 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
436 |
437 | define-properties@^1.1.3, define-properties@^1.1.4:
438 | version "1.1.4"
439 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
440 | integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
441 | dependencies:
442 | has-property-descriptors "^1.0.0"
443 | object-keys "^1.1.1"
444 |
445 | depd@2.0.0:
446 | version "2.0.0"
447 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
448 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
449 |
450 | destroy@1.2.0:
451 | version "1.2.0"
452 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
453 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
454 |
455 | diff@5.0.0:
456 | version "5.0.0"
457 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b"
458 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==
459 |
460 | ee-first@1.1.1:
461 | version "1.1.1"
462 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
463 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
464 |
465 | emoji-regex@^8.0.0:
466 | version "8.0.0"
467 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
468 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
469 |
470 | encodeurl@~1.0.2:
471 | version "1.0.2"
472 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
473 | integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
474 |
475 | error-ex@^1.3.1:
476 | version "1.3.2"
477 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
478 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
479 | dependencies:
480 | is-arrayish "^0.2.1"
481 |
482 | es-abstract@^1.19.0, es-abstract@^1.20.4:
483 | version "1.20.4"
484 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861"
485 | integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==
486 | dependencies:
487 | call-bind "^1.0.2"
488 | es-to-primitive "^1.2.1"
489 | function-bind "^1.1.1"
490 | function.prototype.name "^1.1.5"
491 | get-intrinsic "^1.1.3"
492 | get-symbol-description "^1.0.0"
493 | has "^1.0.3"
494 | has-property-descriptors "^1.0.0"
495 | has-symbols "^1.0.3"
496 | internal-slot "^1.0.3"
497 | is-callable "^1.2.7"
498 | is-negative-zero "^2.0.2"
499 | is-regex "^1.1.4"
500 | is-shared-array-buffer "^1.0.2"
501 | is-string "^1.0.7"
502 | is-weakref "^1.0.2"
503 | object-inspect "^1.12.2"
504 | object-keys "^1.1.1"
505 | object.assign "^4.1.4"
506 | regexp.prototype.flags "^1.4.3"
507 | safe-regex-test "^1.0.0"
508 | string.prototype.trimend "^1.0.5"
509 | string.prototype.trimstart "^1.0.5"
510 | unbox-primitive "^1.0.2"
511 |
512 | es-to-primitive@^1.2.1:
513 | version "1.2.1"
514 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
515 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
516 | dependencies:
517 | is-callable "^1.1.4"
518 | is-date-object "^1.0.1"
519 | is-symbol "^1.0.2"
520 |
521 | esbuild-android-64@0.14.54:
522 | version "0.14.54"
523 | resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be"
524 | integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==
525 |
526 | esbuild-android-arm64@0.14.54:
527 | version "0.14.54"
528 | resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771"
529 | integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==
530 |
531 | esbuild-darwin-64@0.14.54:
532 | version "0.14.54"
533 | resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25"
534 | integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==
535 |
536 | esbuild-darwin-arm64@0.14.54:
537 | version "0.14.54"
538 | resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73"
539 | integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==
540 |
541 | esbuild-freebsd-64@0.14.54:
542 | version "0.14.54"
543 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d"
544 | integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==
545 |
546 | esbuild-freebsd-arm64@0.14.54:
547 | version "0.14.54"
548 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48"
549 | integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==
550 |
551 | esbuild-linux-32@0.14.54:
552 | version "0.14.54"
553 | resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5"
554 | integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==
555 |
556 | esbuild-linux-64@0.14.54:
557 | version "0.14.54"
558 | resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652"
559 | integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==
560 |
561 | esbuild-linux-arm64@0.14.54:
562 | version "0.14.54"
563 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b"
564 | integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==
565 |
566 | esbuild-linux-arm@0.14.54:
567 | version "0.14.54"
568 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59"
569 | integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==
570 |
571 | esbuild-linux-mips64le@0.14.54:
572 | version "0.14.54"
573 | resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34"
574 | integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==
575 |
576 | esbuild-linux-ppc64le@0.14.54:
577 | version "0.14.54"
578 | resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e"
579 | integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==
580 |
581 | esbuild-linux-riscv64@0.14.54:
582 | version "0.14.54"
583 | resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8"
584 | integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==
585 |
586 | esbuild-linux-s390x@0.14.54:
587 | version "0.14.54"
588 | resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6"
589 | integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==
590 |
591 | esbuild-netbsd-64@0.14.54:
592 | version "0.14.54"
593 | resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81"
594 | integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==
595 |
596 | esbuild-openbsd-64@0.14.54:
597 | version "0.14.54"
598 | resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b"
599 | integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==
600 |
601 | esbuild-sunos-64@0.14.54:
602 | version "0.14.54"
603 | resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da"
604 | integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==
605 |
606 | esbuild-windows-32@0.14.54:
607 | version "0.14.54"
608 | resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31"
609 | integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==
610 |
611 | esbuild-windows-64@0.14.54:
612 | version "0.14.54"
613 | resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4"
614 | integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==
615 |
616 | esbuild-windows-arm64@0.14.54:
617 | version "0.14.54"
618 | resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982"
619 | integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==
620 |
621 | esbuild@^0.14.27:
622 | version "0.14.54"
623 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2"
624 | integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==
625 | optionalDependencies:
626 | "@esbuild/linux-loong64" "0.14.54"
627 | esbuild-android-64 "0.14.54"
628 | esbuild-android-arm64 "0.14.54"
629 | esbuild-darwin-64 "0.14.54"
630 | esbuild-darwin-arm64 "0.14.54"
631 | esbuild-freebsd-64 "0.14.54"
632 | esbuild-freebsd-arm64 "0.14.54"
633 | esbuild-linux-32 "0.14.54"
634 | esbuild-linux-64 "0.14.54"
635 | esbuild-linux-arm "0.14.54"
636 | esbuild-linux-arm64 "0.14.54"
637 | esbuild-linux-mips64le "0.14.54"
638 | esbuild-linux-ppc64le "0.14.54"
639 | esbuild-linux-riscv64 "0.14.54"
640 | esbuild-linux-s390x "0.14.54"
641 | esbuild-netbsd-64 "0.14.54"
642 | esbuild-openbsd-64 "0.14.54"
643 | esbuild-sunos-64 "0.14.54"
644 | esbuild-windows-32 "0.14.54"
645 | esbuild-windows-64 "0.14.54"
646 | esbuild-windows-arm64 "0.14.54"
647 |
648 | escalade@^3.1.1:
649 | version "3.1.1"
650 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
651 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
652 |
653 | escape-html@~1.0.3:
654 | version "1.0.3"
655 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
656 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
657 |
658 | escape-string-regexp@4.0.0:
659 | version "4.0.0"
660 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
661 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
662 |
663 | escape-string-regexp@^1.0.5:
664 | version "1.0.5"
665 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
666 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
667 |
668 | esmoduleserve@^0.2.0:
669 | version "0.2.0"
670 | resolved "https://registry.yarnpkg.com/esmoduleserve/-/esmoduleserve-0.2.0.tgz#01ed56cbee408f624641dab0b2916a54407c891e"
671 | integrity sha512-vg1j7fzKZUFR5TCsYQ3PABfBRMRi6V9K7mxcRh2MftO3gwAHBwYaPHtLHFDsKVSxdHmpu/GgT37lsRT+vezaKQ==
672 | dependencies:
673 | acorn "^8.0.4"
674 | acorn-walk "^8.0.0"
675 | resolve "^1.15.1"
676 | serve-static "^1.14.1"
677 |
678 | etag@~1.8.1:
679 | version "1.8.1"
680 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
681 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
682 |
683 | fill-range@^7.0.1:
684 | version "7.0.1"
685 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
686 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
687 | dependencies:
688 | to-regex-range "^5.0.1"
689 |
690 | find-up@5.0.0:
691 | version "5.0.0"
692 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
693 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
694 | dependencies:
695 | locate-path "^6.0.0"
696 | path-exists "^4.0.0"
697 |
698 | flat@^5.0.2:
699 | version "5.0.2"
700 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
701 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
702 |
703 | fresh@0.5.2:
704 | version "0.5.2"
705 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
706 | integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
707 |
708 | fs.realpath@^1.0.0:
709 | version "1.0.0"
710 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
711 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
712 |
713 | fsevents@~2.3.2:
714 | version "2.3.2"
715 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
716 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
717 |
718 | function-bind@^1.1.1:
719 | version "1.1.1"
720 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
721 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
722 |
723 | function.prototype.name@^1.1.5:
724 | version "1.1.5"
725 | resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
726 | integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
727 | dependencies:
728 | call-bind "^1.0.2"
729 | define-properties "^1.1.3"
730 | es-abstract "^1.19.0"
731 | functions-have-names "^1.2.2"
732 |
733 | functions-have-names@^1.2.2:
734 | version "1.2.3"
735 | resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
736 | integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
737 |
738 | get-caller-file@^2.0.5:
739 | version "2.0.5"
740 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
741 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
742 |
743 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3:
744 | version "1.1.3"
745 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385"
746 | integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==
747 | dependencies:
748 | function-bind "^1.1.1"
749 | has "^1.0.3"
750 | has-symbols "^1.0.3"
751 |
752 | get-symbol-description@^1.0.0:
753 | version "1.0.0"
754 | resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
755 | integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
756 | dependencies:
757 | call-bind "^1.0.2"
758 | get-intrinsic "^1.1.1"
759 |
760 | glob-parent@~5.1.2:
761 | version "5.1.2"
762 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
763 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
764 | dependencies:
765 | is-glob "^4.0.1"
766 |
767 | glob@7.2.0:
768 | version "7.2.0"
769 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
770 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
771 | dependencies:
772 | fs.realpath "^1.0.0"
773 | inflight "^1.0.4"
774 | inherits "2"
775 | minimatch "^3.0.4"
776 | once "^1.3.0"
777 | path-is-absolute "^1.0.0"
778 |
779 | glob@^7.1.3:
780 | version "7.2.3"
781 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
782 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
783 | dependencies:
784 | fs.realpath "^1.0.0"
785 | inflight "^1.0.4"
786 | inherits "2"
787 | minimatch "^3.1.1"
788 | once "^1.3.0"
789 | path-is-absolute "^1.0.0"
790 |
791 | graceful-fs@^4.1.2:
792 | version "4.2.10"
793 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
794 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
795 |
796 | has-bigints@^1.0.1, has-bigints@^1.0.2:
797 | version "1.0.2"
798 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
799 | integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
800 |
801 | has-flag@^3.0.0:
802 | version "3.0.0"
803 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
804 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
805 |
806 | has-flag@^4.0.0:
807 | version "4.0.0"
808 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
809 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
810 |
811 | has-property-descriptors@^1.0.0:
812 | version "1.0.0"
813 | resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
814 | integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
815 | dependencies:
816 | get-intrinsic "^1.1.1"
817 |
818 | has-symbols@^1.0.2, has-symbols@^1.0.3:
819 | version "1.0.3"
820 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
821 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
822 |
823 | has-tostringtag@^1.0.0:
824 | version "1.0.0"
825 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
826 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
827 | dependencies:
828 | has-symbols "^1.0.2"
829 |
830 | has@^1.0.3:
831 | version "1.0.3"
832 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
833 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
834 | dependencies:
835 | function-bind "^1.1.1"
836 |
837 | he@1.2.0:
838 | version "1.2.0"
839 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
840 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
841 |
842 | hosted-git-info@^2.1.4:
843 | version "2.8.9"
844 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
845 | integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
846 |
847 | http-errors@2.0.0:
848 | version "2.0.0"
849 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
850 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
851 | dependencies:
852 | depd "2.0.0"
853 | inherits "2.0.4"
854 | setprototypeof "1.2.0"
855 | statuses "2.0.1"
856 | toidentifier "1.0.1"
857 |
858 | immediate@~3.0.5:
859 | version "3.0.6"
860 | resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
861 | integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==
862 |
863 | inflight@^1.0.4:
864 | version "1.0.6"
865 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
866 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
867 | dependencies:
868 | once "^1.3.0"
869 | wrappy "1"
870 |
871 | inherits@2, inherits@2.0.4, inherits@~2.0.3:
872 | version "2.0.4"
873 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
874 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
875 |
876 | internal-slot@^1.0.3:
877 | version "1.0.3"
878 | resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
879 | integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
880 | dependencies:
881 | get-intrinsic "^1.1.0"
882 | has "^1.0.3"
883 | side-channel "^1.0.4"
884 |
885 | is-arrayish@^0.2.1:
886 | version "0.2.1"
887 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
888 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
889 |
890 | is-bigint@^1.0.1:
891 | version "1.0.4"
892 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
893 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
894 | dependencies:
895 | has-bigints "^1.0.1"
896 |
897 | is-binary-path@~2.1.0:
898 | version "2.1.0"
899 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
900 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
901 | dependencies:
902 | binary-extensions "^2.0.0"
903 |
904 | is-boolean-object@^1.1.0:
905 | version "1.1.2"
906 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
907 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
908 | dependencies:
909 | call-bind "^1.0.2"
910 | has-tostringtag "^1.0.0"
911 |
912 | is-callable@^1.1.4, is-callable@^1.2.7:
913 | version "1.2.7"
914 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
915 | integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
916 |
917 | is-core-module@^2.9.0:
918 | version "2.11.0"
919 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
920 | integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==
921 | dependencies:
922 | has "^1.0.3"
923 |
924 | is-date-object@^1.0.1:
925 | version "1.0.5"
926 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
927 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
928 | dependencies:
929 | has-tostringtag "^1.0.0"
930 |
931 | is-extglob@^2.1.1:
932 | version "2.1.1"
933 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
934 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
935 |
936 | is-fullwidth-code-point@^3.0.0:
937 | version "3.0.0"
938 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
939 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
940 |
941 | is-glob@^4.0.1, is-glob@~4.0.1:
942 | version "4.0.3"
943 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
944 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
945 | dependencies:
946 | is-extglob "^2.1.1"
947 |
948 | is-negative-zero@^2.0.2:
949 | version "2.0.2"
950 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
951 | integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
952 |
953 | is-number-object@^1.0.4:
954 | version "1.0.7"
955 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
956 | integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
957 | dependencies:
958 | has-tostringtag "^1.0.0"
959 |
960 | is-number@^7.0.0:
961 | version "7.0.0"
962 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
963 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
964 |
965 | is-plain-obj@^2.1.0:
966 | version "2.1.0"
967 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
968 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
969 |
970 | is-regex@^1.1.4:
971 | version "1.1.4"
972 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
973 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
974 | dependencies:
975 | call-bind "^1.0.2"
976 | has-tostringtag "^1.0.0"
977 |
978 | is-shared-array-buffer@^1.0.2:
979 | version "1.0.2"
980 | resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
981 | integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
982 | dependencies:
983 | call-bind "^1.0.2"
984 |
985 | is-string@^1.0.5, is-string@^1.0.7:
986 | version "1.0.7"
987 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
988 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
989 | dependencies:
990 | has-tostringtag "^1.0.0"
991 |
992 | is-symbol@^1.0.2, is-symbol@^1.0.3:
993 | version "1.0.4"
994 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
995 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
996 | dependencies:
997 | has-symbols "^1.0.2"
998 |
999 | is-unicode-supported@^0.1.0:
1000 | version "0.1.0"
1001 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
1002 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
1003 |
1004 | is-weakref@^1.0.2:
1005 | version "1.0.2"
1006 | resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
1007 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
1008 | dependencies:
1009 | call-bind "^1.0.2"
1010 |
1011 | isarray@~1.0.0:
1012 | version "1.0.0"
1013 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1014 | integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
1015 |
1016 | isexe@^2.0.0:
1017 | version "2.0.0"
1018 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1019 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
1020 |
1021 | ist@^1.1.7:
1022 | version "1.1.7"
1023 | resolved "https://registry.yarnpkg.com/ist/-/ist-1.1.7.tgz#64161305bca42937d8e05394a2883c3431c5f7ff"
1024 | integrity sha512-ex9JyqY+tCjBlxN1pXlqxEgtGGUGp1TG83ll1xpu8SfPgOhfAhEGCuepNHlB+d7Le+hLoBcfCu/G0ZQaFbi9hA==
1025 |
1026 | js-tokens@^4.0.0:
1027 | version "4.0.0"
1028 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1029 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1030 |
1031 | js-yaml@4.1.0:
1032 | version "4.1.0"
1033 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
1034 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
1035 | dependencies:
1036 | argparse "^2.0.1"
1037 |
1038 | json-parse-better-errors@^1.0.1:
1039 | version "1.0.2"
1040 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
1041 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
1042 |
1043 | jszip@^3.10.0:
1044 | version "3.10.1"
1045 | resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2"
1046 | integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==
1047 | dependencies:
1048 | lie "~3.3.0"
1049 | pako "~1.0.2"
1050 | readable-stream "~2.3.6"
1051 | setimmediate "^1.0.5"
1052 |
1053 | lie@~3.3.0:
1054 | version "3.3.0"
1055 | resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a"
1056 | integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==
1057 | dependencies:
1058 | immediate "~3.0.5"
1059 |
1060 | load-json-file@^4.0.0:
1061 | version "4.0.0"
1062 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
1063 | integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==
1064 | dependencies:
1065 | graceful-fs "^4.1.2"
1066 | parse-json "^4.0.0"
1067 | pify "^3.0.0"
1068 | strip-bom "^3.0.0"
1069 |
1070 | locate-path@^6.0.0:
1071 | version "6.0.0"
1072 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
1073 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
1074 | dependencies:
1075 | p-locate "^5.0.0"
1076 |
1077 | log-symbols@4.1.0:
1078 | version "4.1.0"
1079 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
1080 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
1081 | dependencies:
1082 | chalk "^4.1.0"
1083 | is-unicode-supported "^0.1.0"
1084 |
1085 | magic-string@^0.25.7:
1086 | version "0.25.9"
1087 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
1088 | integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
1089 | dependencies:
1090 | sourcemap-codec "^1.4.8"
1091 |
1092 | memorystream@^0.3.1:
1093 | version "0.3.1"
1094 | resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
1095 | integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==
1096 |
1097 | mime@1.6.0:
1098 | version "1.6.0"
1099 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
1100 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
1101 |
1102 | minimatch@5.0.1:
1103 | version "5.0.1"
1104 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b"
1105 | integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==
1106 | dependencies:
1107 | brace-expansion "^2.0.1"
1108 |
1109 | minimatch@^3.0.4, minimatch@^3.1.1:
1110 | version "3.1.2"
1111 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
1112 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
1113 | dependencies:
1114 | brace-expansion "^1.1.7"
1115 |
1116 | mocha@^10.0.0:
1117 | version "10.1.0"
1118 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.1.0.tgz#dbf1114b7c3f9d0ca5de3133906aea3dfc89ef7a"
1119 | integrity sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==
1120 | dependencies:
1121 | ansi-colors "4.1.1"
1122 | browser-stdout "1.3.1"
1123 | chokidar "3.5.3"
1124 | debug "4.3.4"
1125 | diff "5.0.0"
1126 | escape-string-regexp "4.0.0"
1127 | find-up "5.0.0"
1128 | glob "7.2.0"
1129 | he "1.2.0"
1130 | js-yaml "4.1.0"
1131 | log-symbols "4.1.0"
1132 | minimatch "5.0.1"
1133 | ms "2.1.3"
1134 | nanoid "3.3.3"
1135 | serialize-javascript "6.0.0"
1136 | strip-json-comments "3.1.1"
1137 | supports-color "8.1.1"
1138 | workerpool "6.2.1"
1139 | yargs "16.2.0"
1140 | yargs-parser "20.2.4"
1141 | yargs-unparser "2.0.0"
1142 |
1143 | ms@2.0.0:
1144 | version "2.0.0"
1145 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1146 | integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
1147 |
1148 | ms@2.1.2:
1149 | version "2.1.2"
1150 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1151 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1152 |
1153 | ms@2.1.3:
1154 | version "2.1.3"
1155 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
1156 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
1157 |
1158 | nanoid@3.3.3:
1159 | version "3.3.3"
1160 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25"
1161 | integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==
1162 |
1163 | nanoid@^3.3.6:
1164 | version "3.3.6"
1165 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
1166 | integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
1167 |
1168 | nice-try@^1.0.4:
1169 | version "1.0.5"
1170 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
1171 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
1172 |
1173 | normalize-package-data@^2.3.2:
1174 | version "2.5.0"
1175 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
1176 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
1177 | dependencies:
1178 | hosted-git-info "^2.1.4"
1179 | resolve "^1.10.0"
1180 | semver "2 || 3 || 4 || 5"
1181 | validate-npm-package-license "^3.0.1"
1182 |
1183 | normalize-path@^3.0.0, normalize-path@~3.0.0:
1184 | version "3.0.0"
1185 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
1186 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
1187 |
1188 | npm-run-all@^4.1.5:
1189 | version "4.1.5"
1190 | resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba"
1191 | integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==
1192 | dependencies:
1193 | ansi-styles "^3.2.1"
1194 | chalk "^2.4.1"
1195 | cross-spawn "^6.0.5"
1196 | memorystream "^0.3.1"
1197 | minimatch "^3.0.4"
1198 | pidtree "^0.3.0"
1199 | read-pkg "^3.0.0"
1200 | shell-quote "^1.6.1"
1201 | string.prototype.padend "^3.0.0"
1202 |
1203 | object-inspect@^1.12.2, object-inspect@^1.9.0:
1204 | version "1.12.2"
1205 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
1206 | integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
1207 |
1208 | object-keys@^1.1.1:
1209 | version "1.1.1"
1210 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
1211 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
1212 |
1213 | object.assign@^4.1.4:
1214 | version "4.1.4"
1215 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
1216 | integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
1217 | dependencies:
1218 | call-bind "^1.0.2"
1219 | define-properties "^1.1.4"
1220 | has-symbols "^1.0.3"
1221 | object-keys "^1.1.1"
1222 |
1223 | on-finished@2.4.1:
1224 | version "2.4.1"
1225 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
1226 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
1227 | dependencies:
1228 | ee-first "1.1.1"
1229 |
1230 | once@^1.3.0:
1231 | version "1.4.0"
1232 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1233 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
1234 | dependencies:
1235 | wrappy "1"
1236 |
1237 | p-limit@^3.0.2:
1238 | version "3.1.0"
1239 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
1240 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
1241 | dependencies:
1242 | yocto-queue "^0.1.0"
1243 |
1244 | p-locate@^5.0.0:
1245 | version "5.0.0"
1246 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
1247 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
1248 | dependencies:
1249 | p-limit "^3.0.2"
1250 |
1251 | pako@~1.0.2:
1252 | version "1.0.11"
1253 | resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
1254 | integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
1255 |
1256 | parse-json@^4.0.0:
1257 | version "4.0.0"
1258 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
1259 | integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==
1260 | dependencies:
1261 | error-ex "^1.3.1"
1262 | json-parse-better-errors "^1.0.1"
1263 |
1264 | parseurl@~1.3.3:
1265 | version "1.3.3"
1266 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
1267 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
1268 |
1269 | path-exists@^4.0.0:
1270 | version "4.0.0"
1271 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1272 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1273 |
1274 | path-is-absolute@^1.0.0:
1275 | version "1.0.1"
1276 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1277 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
1278 |
1279 | path-key@^2.0.1:
1280 | version "2.0.1"
1281 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
1282 | integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
1283 |
1284 | path-parse@^1.0.7:
1285 | version "1.0.7"
1286 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
1287 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
1288 |
1289 | path-type@^3.0.0:
1290 | version "3.0.0"
1291 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
1292 | integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
1293 | dependencies:
1294 | pify "^3.0.0"
1295 |
1296 | picocolors@^1.0.0:
1297 | version "1.0.0"
1298 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
1299 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
1300 |
1301 | picomatch@^2.0.4, picomatch@^2.2.1:
1302 | version "2.3.1"
1303 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
1304 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
1305 |
1306 | pidtree@^0.3.0:
1307 | version "0.3.1"
1308 | resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a"
1309 | integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==
1310 |
1311 | pify@^3.0.0:
1312 | version "3.0.0"
1313 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
1314 | integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==
1315 |
1316 | postcss@^8.4.13:
1317 | version "8.4.31"
1318 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
1319 | integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
1320 | dependencies:
1321 | nanoid "^3.3.6"
1322 | picocolors "^1.0.0"
1323 | source-map-js "^1.0.2"
1324 |
1325 | prettier@^2.8.0:
1326 | version "2.8.0"
1327 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.0.tgz#c7df58393c9ba77d6fba3921ae01faf994fb9dc9"
1328 | integrity sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==
1329 |
1330 | process-nextick-args@~2.0.0:
1331 | version "2.0.1"
1332 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
1333 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
1334 |
1335 | randombytes@^2.1.0:
1336 | version "2.1.0"
1337 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
1338 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
1339 | dependencies:
1340 | safe-buffer "^5.1.0"
1341 |
1342 | range-parser@~1.2.1:
1343 | version "1.2.1"
1344 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
1345 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
1346 |
1347 | read-pkg@^3.0.0:
1348 | version "3.0.0"
1349 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
1350 | integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==
1351 | dependencies:
1352 | load-json-file "^4.0.0"
1353 | normalize-package-data "^2.3.2"
1354 | path-type "^3.0.0"
1355 |
1356 | readable-stream@~2.3.6:
1357 | version "2.3.7"
1358 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
1359 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
1360 | dependencies:
1361 | core-util-is "~1.0.0"
1362 | inherits "~2.0.3"
1363 | isarray "~1.0.0"
1364 | process-nextick-args "~2.0.0"
1365 | safe-buffer "~5.1.1"
1366 | string_decoder "~1.1.1"
1367 | util-deprecate "~1.0.1"
1368 |
1369 | readdirp@~3.6.0:
1370 | version "3.6.0"
1371 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
1372 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
1373 | dependencies:
1374 | picomatch "^2.2.1"
1375 |
1376 | regexp.prototype.flags@^1.4.3:
1377 | version "1.4.3"
1378 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
1379 | integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
1380 | dependencies:
1381 | call-bind "^1.0.2"
1382 | define-properties "^1.1.3"
1383 | functions-have-names "^1.2.2"
1384 |
1385 | require-directory@^2.1.1:
1386 | version "2.1.1"
1387 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
1388 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
1389 |
1390 | resolve@^1.10.0, resolve@^1.15.1, resolve@^1.22.0:
1391 | version "1.22.1"
1392 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
1393 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
1394 | dependencies:
1395 | is-core-module "^2.9.0"
1396 | path-parse "^1.0.7"
1397 | supports-preserve-symlinks-flag "^1.0.0"
1398 |
1399 | rimraf@^3.0.0:
1400 | version "3.0.2"
1401 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
1402 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
1403 | dependencies:
1404 | glob "^7.1.3"
1405 |
1406 | rollup-plugin-dts@^3.0.0:
1407 | version "3.0.2"
1408 | resolved "https://registry.yarnpkg.com/rollup-plugin-dts/-/rollup-plugin-dts-3.0.2.tgz#2b628d88f864d271d6eaec2e4c2a60ae4e944c5c"
1409 | integrity sha512-hswlsdWu/x7k5pXzaLP6OvKRKcx8Bzprksz9i9mUe72zvt8LvqAb/AZpzs6FkLgmyRaN8B6rUQOVtzA3yEt9Yw==
1410 | dependencies:
1411 | magic-string "^0.25.7"
1412 | optionalDependencies:
1413 | "@babel/code-frame" "^7.12.13"
1414 |
1415 | "rollup@>=2.59.0 <2.78.0":
1416 | version "2.77.3"
1417 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.3.tgz#8f00418d3a2740036e15deb653bed1a90ee0cc12"
1418 | integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==
1419 | optionalDependencies:
1420 | fsevents "~2.3.2"
1421 |
1422 | rollup@^2.35.1:
1423 | version "2.79.1"
1424 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7"
1425 | integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==
1426 | optionalDependencies:
1427 | fsevents "~2.3.2"
1428 |
1429 | safe-buffer@^5.1.0:
1430 | version "5.2.1"
1431 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
1432 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1433 |
1434 | safe-buffer@~5.1.0, safe-buffer@~5.1.1:
1435 | version "5.1.2"
1436 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
1437 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
1438 |
1439 | safe-regex-test@^1.0.0:
1440 | version "1.0.0"
1441 | resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
1442 | integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==
1443 | dependencies:
1444 | call-bind "^1.0.2"
1445 | get-intrinsic "^1.1.3"
1446 | is-regex "^1.1.4"
1447 |
1448 | selenium-webdriver@^4.0.0-beta.3:
1449 | version "4.6.1"
1450 | resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.6.1.tgz#ac66867206542a40c24b5a44f4ccbae992e962dc"
1451 | integrity sha512-FT8Dw0tbzaTp8YYLuwhaCnve/nw03HKrOJrA3aUmTKmxaIFSP4kT2R5fN3K0RpV5kbR0ZnM4FGVI2vANBvekaA==
1452 | dependencies:
1453 | jszip "^3.10.0"
1454 | tmp "^0.2.1"
1455 | ws ">=8.7.0"
1456 |
1457 | "semver@2 || 3 || 4 || 5", semver@^5.5.0:
1458 | version "5.7.1"
1459 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
1460 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
1461 |
1462 | send@0.18.0:
1463 | version "0.18.0"
1464 | resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
1465 | integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
1466 | dependencies:
1467 | debug "2.6.9"
1468 | depd "2.0.0"
1469 | destroy "1.2.0"
1470 | encodeurl "~1.0.2"
1471 | escape-html "~1.0.3"
1472 | etag "~1.8.1"
1473 | fresh "0.5.2"
1474 | http-errors "2.0.0"
1475 | mime "1.6.0"
1476 | ms "2.1.3"
1477 | on-finished "2.4.1"
1478 | range-parser "~1.2.1"
1479 | statuses "2.0.1"
1480 |
1481 | serialize-javascript@6.0.0:
1482 | version "6.0.0"
1483 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
1484 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==
1485 | dependencies:
1486 | randombytes "^2.1.0"
1487 |
1488 | serve-static@^1.14.1:
1489 | version "1.15.0"
1490 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
1491 | integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
1492 | dependencies:
1493 | encodeurl "~1.0.2"
1494 | escape-html "~1.0.3"
1495 | parseurl "~1.3.3"
1496 | send "0.18.0"
1497 |
1498 | setimmediate@^1.0.5:
1499 | version "1.0.5"
1500 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
1501 | integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==
1502 |
1503 | setprototypeof@1.2.0:
1504 | version "1.2.0"
1505 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
1506 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
1507 |
1508 | shebang-command@^1.2.0:
1509 | version "1.2.0"
1510 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
1511 | integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==
1512 | dependencies:
1513 | shebang-regex "^1.0.0"
1514 |
1515 | shebang-regex@^1.0.0:
1516 | version "1.0.0"
1517 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
1518 | integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==
1519 |
1520 | shell-quote@^1.6.1:
1521 | version "1.7.4"
1522 | resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8"
1523 | integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==
1524 |
1525 | side-channel@^1.0.4:
1526 | version "1.0.4"
1527 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
1528 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
1529 | dependencies:
1530 | call-bind "^1.0.0"
1531 | get-intrinsic "^1.0.2"
1532 | object-inspect "^1.9.0"
1533 |
1534 | source-map-js@^1.0.2:
1535 | version "1.0.2"
1536 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
1537 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
1538 |
1539 | sourcemap-codec@^1.4.8:
1540 | version "1.4.8"
1541 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
1542 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
1543 |
1544 | spdx-correct@^3.0.0:
1545 | version "3.1.1"
1546 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
1547 | integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
1548 | dependencies:
1549 | spdx-expression-parse "^3.0.0"
1550 | spdx-license-ids "^3.0.0"
1551 |
1552 | spdx-exceptions@^2.1.0:
1553 | version "2.3.0"
1554 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
1555 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
1556 |
1557 | spdx-expression-parse@^3.0.0:
1558 | version "3.0.1"
1559 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
1560 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
1561 | dependencies:
1562 | spdx-exceptions "^2.1.0"
1563 | spdx-license-ids "^3.0.0"
1564 |
1565 | spdx-license-ids@^3.0.0:
1566 | version "3.0.12"
1567 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779"
1568 | integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==
1569 |
1570 | statuses@2.0.1:
1571 | version "2.0.1"
1572 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
1573 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
1574 |
1575 | string-width@^4.1.0, string-width@^4.2.0:
1576 | version "4.2.3"
1577 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
1578 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
1579 | dependencies:
1580 | emoji-regex "^8.0.0"
1581 | is-fullwidth-code-point "^3.0.0"
1582 | strip-ansi "^6.0.1"
1583 |
1584 | string.prototype.padend@^3.0.0:
1585 | version "3.1.4"
1586 | resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz#2c43bb3a89eb54b6750de5942c123d6c98dd65b6"
1587 | integrity sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==
1588 | dependencies:
1589 | call-bind "^1.0.2"
1590 | define-properties "^1.1.4"
1591 | es-abstract "^1.20.4"
1592 |
1593 | string.prototype.trimend@^1.0.5:
1594 | version "1.0.6"
1595 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533"
1596 | integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==
1597 | dependencies:
1598 | call-bind "^1.0.2"
1599 | define-properties "^1.1.4"
1600 | es-abstract "^1.20.4"
1601 |
1602 | string.prototype.trimstart@^1.0.5:
1603 | version "1.0.6"
1604 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4"
1605 | integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==
1606 | dependencies:
1607 | call-bind "^1.0.2"
1608 | define-properties "^1.1.4"
1609 | es-abstract "^1.20.4"
1610 |
1611 | string_decoder@~1.1.1:
1612 | version "1.1.1"
1613 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
1614 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
1615 | dependencies:
1616 | safe-buffer "~5.1.0"
1617 |
1618 | strip-ansi@^6.0.0, strip-ansi@^6.0.1:
1619 | version "6.0.1"
1620 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
1621 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
1622 | dependencies:
1623 | ansi-regex "^5.0.1"
1624 |
1625 | strip-bom@^3.0.0:
1626 | version "3.0.0"
1627 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
1628 | integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
1629 |
1630 | strip-json-comments@3.1.1:
1631 | version "3.1.1"
1632 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
1633 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
1634 |
1635 | style-mod@^4.0.0:
1636 | version "4.0.0"
1637 | resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.0.0.tgz#97e7c2d68b592975f2ca7a63d0dd6fcacfe35a01"
1638 | integrity sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==
1639 |
1640 | supports-color@8.1.1:
1641 | version "8.1.1"
1642 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
1643 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
1644 | dependencies:
1645 | has-flag "^4.0.0"
1646 |
1647 | supports-color@^5.3.0:
1648 | version "5.5.0"
1649 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1650 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1651 | dependencies:
1652 | has-flag "^3.0.0"
1653 |
1654 | supports-color@^7.1.0:
1655 | version "7.2.0"
1656 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1657 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1658 | dependencies:
1659 | has-flag "^4.0.0"
1660 |
1661 | supports-preserve-symlinks-flag@^1.0.0:
1662 | version "1.0.0"
1663 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
1664 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
1665 |
1666 | tmp@^0.2.1:
1667 | version "0.2.1"
1668 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
1669 | integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
1670 | dependencies:
1671 | rimraf "^3.0.0"
1672 |
1673 | to-regex-range@^5.0.1:
1674 | version "5.0.1"
1675 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1676 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1677 | dependencies:
1678 | is-number "^7.0.0"
1679 |
1680 | toidentifier@1.0.1:
1681 | version "1.0.1"
1682 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
1683 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
1684 |
1685 | typescript@^4.2.3:
1686 | version "4.9.3"
1687 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db"
1688 | integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==
1689 |
1690 | unbox-primitive@^1.0.2:
1691 | version "1.0.2"
1692 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
1693 | integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
1694 | dependencies:
1695 | call-bind "^1.0.2"
1696 | has-bigints "^1.0.2"
1697 | has-symbols "^1.0.3"
1698 | which-boxed-primitive "^1.0.2"
1699 |
1700 | util-deprecate@~1.0.1:
1701 | version "1.0.2"
1702 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1703 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
1704 |
1705 | validate-npm-package-license@^3.0.1:
1706 | version "3.0.4"
1707 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
1708 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
1709 | dependencies:
1710 | spdx-correct "^3.0.0"
1711 | spdx-expression-parse "^3.0.0"
1712 |
1713 | vite@^2.9.17:
1714 | version "2.9.17"
1715 | resolved "https://registry.yarnpkg.com/vite/-/vite-2.9.17.tgz#6b770525e12fa2a2e3a0fa0d028d304f4f7dc7d4"
1716 | integrity sha512-XxcRzra6d7xrKXH66jZUgb+srThoPu+TLJc06GifUyKq9JmjHkc1Numc8ra0h56rju2jfVWw3B3fs5l3OFMvUw==
1717 | dependencies:
1718 | esbuild "^0.14.27"
1719 | postcss "^8.4.13"
1720 | resolve "^1.22.0"
1721 | rollup ">=2.59.0 <2.78.0"
1722 | optionalDependencies:
1723 | fsevents "~2.3.2"
1724 |
1725 | w3c-keyname@^2.2.4:
1726 | version "2.2.6"
1727 | resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.6.tgz#8412046116bc16c5d73d4e612053ea10a189c85f"
1728 | integrity sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==
1729 |
1730 | which-boxed-primitive@^1.0.2:
1731 | version "1.0.2"
1732 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
1733 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
1734 | dependencies:
1735 | is-bigint "^1.0.1"
1736 | is-boolean-object "^1.1.0"
1737 | is-number-object "^1.0.4"
1738 | is-string "^1.0.5"
1739 | is-symbol "^1.0.3"
1740 |
1741 | which@^1.2.9:
1742 | version "1.3.1"
1743 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
1744 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
1745 | dependencies:
1746 | isexe "^2.0.0"
1747 |
1748 | workerpool@6.2.1:
1749 | version "6.2.1"
1750 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343"
1751 | integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==
1752 |
1753 | wrap-ansi@^7.0.0:
1754 | version "7.0.0"
1755 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
1756 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
1757 | dependencies:
1758 | ansi-styles "^4.0.0"
1759 | string-width "^4.1.0"
1760 | strip-ansi "^6.0.0"
1761 |
1762 | wrappy@1:
1763 | version "1.0.2"
1764 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1765 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
1766 |
1767 | ws@>=8.7.0:
1768 | version "8.11.0"
1769 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143"
1770 | integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==
1771 |
1772 | y18n@^5.0.5:
1773 | version "5.0.8"
1774 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
1775 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
1776 |
1777 | yargs-parser@20.2.4:
1778 | version "20.2.4"
1779 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"
1780 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==
1781 |
1782 | yargs-parser@^20.2.2:
1783 | version "20.2.9"
1784 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
1785 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
1786 |
1787 | yargs-unparser@2.0.0:
1788 | version "2.0.0"
1789 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"
1790 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
1791 | dependencies:
1792 | camelcase "^6.0.0"
1793 | decamelize "^4.0.0"
1794 | flat "^5.0.2"
1795 | is-plain-obj "^2.1.0"
1796 |
1797 | yargs@16.2.0:
1798 | version "16.2.0"
1799 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
1800 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
1801 | dependencies:
1802 | cliui "^7.0.2"
1803 | escalade "^3.1.1"
1804 | get-caller-file "^2.0.5"
1805 | require-directory "^2.1.1"
1806 | string-width "^4.2.0"
1807 | y18n "^5.0.5"
1808 | yargs-parser "^20.2.2"
1809 |
1810 | yocto-queue@^0.1.0:
1811 | version "0.1.0"
1812 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
1813 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
1814 |
--------------------------------------------------------------------------------