Mirror: The highly customizable and versatile GraphQL client with which you add on features like normalized caching as you grow.
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

test(workspace): Speed up slowest vitest tests (#3171)

authored by

Phil Pluckthun and committed by
GitHub
40cdb730 8b37c221

+321 -252
+5 -1
exchanges/graphcache/src/offlineExchange.test.ts
··· 6 6 OperationResult, 7 7 } from '@urql/core'; 8 8 import { print } from 'graphql'; 9 - import { vi, expect, it, describe } from 'vitest'; 9 + import { vi, expect, it, describe, beforeAll } from 'vitest'; 10 10 11 11 import { pipe, share, map, makeSubject, tap, publish } from 'wonka'; 12 12 import { queryResponse } from '../../../packages/core/src/test-utils'; ··· 104 104 }); 105 105 106 106 describe('offline', () => { 107 + beforeAll(() => { 108 + global.navigator = { onLine: true } as any; 109 + }); 110 + 107 111 it('should intercept errored mutations', () => { 108 112 const onlineSpy = vi.spyOn(navigator, 'onLine', 'get'); 109 113
+2
exchanges/refocus/src/refocusExchange.test.ts
··· 1 + // @vitest-environment jsdom 2 + 1 3 import { pipe, map, makeSubject, publish, tap } from 'wonka'; 2 4 import { vi, expect, it, beforeEach } from 'vitest'; 3 5
+1 -1
package.json
··· 106 106 "typescript": "^4.9.5", 107 107 "vite": "^3.2.4", 108 108 "vite-tsconfig-paths": "^4.0.7", 109 - "vitest": "^0.29.3" 109 + "vitest": "^0.30.1" 110 110 }, 111 111 "dependencies": { 112 112 "@actions/github": "^5.1.1",
+2
packages/core/src/internal/fetchOptions.test.ts
··· 1 + // @vitest-environment jsdom 2 + 1 3 import { expect, describe, it } from 'vitest'; 2 4 import { makeOperation } from '../utils/operation'; 3 5 import { queryOperation, mutationOperation } from '../test-utils';
+2
packages/core/src/utils/variables.test.ts
··· 1 + // @vitest-environment jsdom 2 + 1 3 import { stringifyVariables, extractFiles } from './variables'; 2 4 import { describe, it, expect } from 'vitest'; 3 5
+11 -6
packages/preact-urql/src/components/Mutation.test.tsx
··· 1 + // @vitest-environment jsdom 2 + 1 3 import { h } from 'preact'; 2 4 import { act, cleanup, render } from '@testing-library/preact'; 3 5 import { pipe, fromValue, delay } from 'wonka'; ··· 16 18 17 19 describe('Mutation', () => { 18 20 beforeEach(() => { 21 + vi.useFakeTimers(); 22 + 19 23 vi.spyOn(global.console, 'error').mockImplementation(() => { 20 24 // do nothing 21 25 }); ··· 25 29 cleanup(); 26 30 }); 27 31 28 - it('Should execute the mutation', async () => { 32 + it('Should execute the mutation', () => { 29 33 // eslint-disable-next-line 30 34 let execute = () => {}, 31 35 props = {}; ··· 55 59 fetching: false, 56 60 error: undefined, 57 61 }); 62 + 58 63 act(() => { 59 64 execute(); 60 65 }); 66 + 61 67 expect(props).toStrictEqual({ 62 68 data: undefined, 63 69 fetching: true, 64 70 error: undefined, 65 71 }); 66 72 67 - await new Promise(res => { 68 - setTimeout(() => { 69 - expect(props).toStrictEqual({ data: 1, fetching: false, error: 2 }); 70 - res(null); 71 - }, 400); 73 + act(() => { 74 + vi.advanceTimersByTime(400); 72 75 }); 76 + 77 + expect(props).toStrictEqual({ data: 1, fetching: false, error: 2 }); 73 78 }); 74 79 });
+2
packages/preact-urql/src/components/Query.test.tsx
··· 1 + // @vitest-environment jsdom 2 + 1 3 import { h } from 'preact'; 2 4 import { cleanup, render } from '@testing-library/preact'; 3 5 import { map, interval, pipe } from 'wonka';
+15 -11
packages/preact-urql/src/components/Subscription.test.tsx
··· 1 + // @vitest-environment jsdom 2 + 1 3 import { h } from 'preact'; 2 - import { cleanup, render } from '@testing-library/preact'; 4 + import { cleanup, render, act } from '@testing-library/preact'; 3 5 import { map, interval, pipe } from 'wonka'; 4 6 import { vi, expect, it, beforeEach, describe, afterEach } from 'vitest'; 5 7 ··· 8 10 9 11 const query = 'subscription Example { example }'; 10 12 const client = { 11 - executeSubscription: vi.fn(() => 12 - pipe( 13 + executeSubscription: vi.fn(() => { 14 + return pipe( 13 15 interval(200), 14 16 map((i: number) => ({ data: i, error: i + 1 })) 15 - ) 16 - ), 17 + ); 18 + }), 17 19 }; 18 20 19 21 describe('Subscription', () => { 20 22 beforeEach(() => { 23 + vi.useFakeTimers(); 21 24 vi.spyOn(global.console, 'error').mockImplementation(() => { 22 25 // do nothing 23 26 }); ··· 27 30 cleanup(); 28 31 }); 29 32 30 - it('Should execute the subscription', async () => { 33 + it('Should execute the subscription', () => { 31 34 let props = {}; 32 35 const Test = () => h('p', {}, 'hi'); 33 36 const App = () => { ··· 44 47 ], 45 48 }); 46 49 }; 50 + 47 51 render(h(App, {})); 52 + 48 53 expect(props).toStrictEqual({ 49 54 data: undefined, 50 55 fetching: true, 51 56 error: undefined, 52 57 }); 53 58 54 - await new Promise(res => { 55 - setTimeout(() => { 56 - expect(props).toStrictEqual({ data: 0, fetching: true, error: 1 }); 57 - res(null); 58 - }, 300); 59 + act(() => { 60 + vi.advanceTimersByTime(200); 59 61 }); 62 + 63 + expect(props).toStrictEqual({ data: 0, fetching: true, error: 1 }); 60 64 }); 61 65 });
+2
packages/preact-urql/src/hooks/useMutation.test.tsx
··· 1 + // @vitest-environment jsdom 2 + 1 3 import { FunctionalComponent as FC, h } from 'preact'; 2 4 import { render, cleanup, act } from '@testing-library/preact'; 3 5 import { print } from 'graphql';
+60 -75
packages/preact-urql/src/hooks/useQuery.test.tsx
··· 1 + // @vitest-environment jsdom 2 + 1 3 import { FunctionalComponent as FC, h } from 'preact'; 2 4 import { render, cleanup, act } from '@testing-library/preact'; 3 5 import { OperationContext } from '@urql/core'; 4 6 import { map, interval, pipe, never, onStart, onEnd, empty } from 'wonka'; 5 - import { 6 - vi, 7 - expect, 8 - it, 9 - beforeEach, 10 - describe, 11 - beforeAll, 12 - Mock, 13 - afterEach, 14 - } from 'vitest'; 7 + 8 + import { vi, expect, it, beforeEach, describe, afterEach, Mock } from 'vitest'; 15 9 16 10 import { useQuery, UseQueryArgs, UseQueryState } from './useQuery'; 17 11 import { Provider } from '../context'; ··· 46 40 return h('p', {}, state.data); 47 41 }; 48 42 49 - beforeAll(() => { 43 + beforeEach(() => { 44 + vi.useFakeTimers(); 50 45 vi.spyOn(global.console, 'error'); 51 46 }); 52 47 ··· 106 101 expect(state).toHaveProperty('fetching', true); 107 102 }); 108 103 109 - it('forwards data response', async () => { 104 + it('forwards data response', () => { 110 105 const { rerender } = render( 111 106 h(Provider, { 112 107 value: client as any, ··· 121 116 }) 122 117 ); 123 118 124 - await new Promise(res => { 125 - setTimeout(() => { 126 - rerender( 127 - h(Provider, { 128 - value: client as any, 129 - children: [h(QueryUser, { ...props })], 130 - }) 131 - ); 132 - expect(state).toHaveProperty('data', 0); 133 - res(null); 134 - }, 400); 119 + act(() => { 120 + vi.advanceTimersByTime(400); 121 + rerender( 122 + h(Provider, { 123 + value: client as any, 124 + children: [h(QueryUser, { ...props })], 125 + }) 126 + ); 135 127 }); 128 + 129 + expect(state).toHaveProperty('data', 0); 136 130 }); 137 131 138 - it('forwards error response', async () => { 132 + it('forwards error response', () => { 139 133 const { rerender } = render( 140 134 h(Provider, { 141 135 value: client as any, ··· 150 144 }) 151 145 ); 152 146 153 - await new Promise(res => { 154 - setTimeout(() => { 155 - rerender( 156 - h(Provider, { 157 - value: client as any, 158 - children: [h(QueryUser, { ...props })], 159 - }) 160 - ); 161 - expect(state).toHaveProperty('error', 1); 162 - res(null); 163 - }, 400); 147 + act(() => { 148 + vi.advanceTimersByTime(400); 149 + rerender( 150 + h(Provider, { 151 + value: client as any, 152 + children: [h(QueryUser, { ...props })], 153 + }) 154 + ); 164 155 }); 156 + 157 + expect(state).toHaveProperty('error', 1); 165 158 }); 166 159 167 - it('forwards extensions response', async () => { 160 + it('forwards extensions response', () => { 168 161 const { rerender } = render( 169 162 h(Provider, { 170 163 value: client as any, 171 164 children: [h(QueryUser, { ...props })], 172 165 }) 173 166 ); 174 - /** 175 - * Have to call update (without changes) in order to see the 176 - * result of the state change. 177 - */ 167 + 178 168 rerender( 179 169 h(Provider, { 180 170 value: client as any, ··· 182 172 }) 183 173 ); 184 174 185 - await new Promise(res => { 186 - setTimeout(() => { 187 - rerender( 188 - h(Provider, { 189 - value: client as any, 190 - children: [h(QueryUser, { ...props })], 191 - }) 192 - ); 193 - 194 - expect(state).toHaveProperty('extensions', { i: 1 }); 195 - res(null); 196 - }, 400); 175 + act(() => { 176 + vi.advanceTimersByTime(400); 177 + rerender( 178 + h(Provider, { 179 + value: client as any, 180 + children: [h(QueryUser, { ...props })], 181 + }) 182 + ); 197 183 }); 184 + 185 + expect(state).toHaveProperty('extensions', { i: 1 }); 198 186 }); 199 187 200 - it('sets fetching to false', async () => { 188 + it('sets fetching to false', () => { 201 189 const { rerender } = render( 202 190 h(Provider, { 203 191 value: client as any, ··· 212 200 }) 213 201 ); 214 202 215 - await new Promise(res => { 216 - setTimeout(() => { 217 - rerender( 218 - h(Provider, { 219 - value: client as any, 220 - children: [h(QueryUser, { ...props })], 221 - }) 222 - ); 223 - expect(state).toHaveProperty('fetching', false); 224 - res(null); 225 - }, 400); 203 + act(() => { 204 + vi.advanceTimersByTime(400); 205 + rerender( 206 + h(Provider, { 207 + value: client as any, 208 + children: [h(QueryUser, { ...props })], 209 + }) 210 + ); 226 211 }); 212 + 213 + expect(state).toHaveProperty('fetching', false); 227 214 }); 228 215 229 216 describe('on change', () => { ··· 237 224 }) 238 225 ); 239 226 240 - /** 241 - * Have to call update twice for the change to be detected. 242 - * Only a single change is detected (updating 5 times still only calls 243 - * execute subscription twice). 244 - */ 245 227 rerender( 246 228 h(Provider, { 247 229 value: client as any, 248 230 children: [h(QueryUser, { ...props, query: q })], 249 231 }) 250 232 ); 251 - rerender( 252 - h(Provider, { 253 - value: client as any, 254 - children: [h(QueryUser, { ...props, query: q })], 255 - }) 256 - ); 233 + 234 + act(() => { 235 + rerender( 236 + h(Provider, { 237 + value: client as any, 238 + children: [h(QueryUser, { ...props, query: q })], 239 + }) 240 + ); 241 + }); 257 242 258 243 expect(client.executeQuery).toBeCalledTimes(2); 259 244 });
+2
packages/preact-urql/src/hooks/useSubscription.test.tsx
··· 1 + // @vitest-environment jsdom 2 + 1 3 import { FunctionalComponent as FC, h } from 'preact'; 2 4 import { render, cleanup, act } from '@testing-library/preact'; 3 5 import { OperationContext } from '@urql/core';
+7 -6
packages/react-urql/src/components/Mutation.test.tsx
··· 1 + // @vitest-environment jsdom 2 + 1 3 import { vi, expect, it, beforeEach, describe, Mock, afterEach } from 'vitest'; 2 4 3 5 vi.mock('../context', async () => { ··· 27 29 28 30 describe('Mutation', () => { 29 31 beforeEach(() => { 32 + vi.useFakeTimers(); 30 33 // TODO: Fix use of act() 31 34 vi.spyOn(global.console, 'error').mockImplementation(() => { 32 35 // do nothing ··· 37 40 cleanup(); 38 41 }); 39 42 40 - it('Should execute the mutation', async () => { 43 + it('Should execute the mutation', () => { 41 44 let execute = () => { 42 45 /* noop */ 43 46 }, ··· 70 73 fetching: true, 71 74 error: undefined, 72 75 }); 73 - await new Promise(res => { 74 - setTimeout(() => { 75 - expect(props).toStrictEqual({ data: 1, fetching: false, error: 2 }); 76 - res(null); 77 - }, 400); 76 + act(() => { 77 + vi.advanceTimersByTime(400); 78 78 }); 79 + expect(props).toStrictEqual({ data: 1, fetching: false, error: 2 }); 79 80 }); 80 81 });
+2
packages/react-urql/src/components/Query.test.tsx
··· 1 + // @vitest-environment jsdom 2 + 1 3 import { vi, expect, it, beforeEach, describe, afterEach } from 'vitest'; 2 4 3 5 vi.mock('../context', async () => {
+28 -20
packages/react-urql/src/hooks/useMutation.test.tsx
··· 1 - import { vi, expect, it, beforeEach, describe, beforeAll, Mock } from 'vitest'; 1 + import { vi, expect, it, beforeEach, describe, Mock } from 'vitest'; 2 2 3 3 // Note: Testing for hooks is not yet supported in Enzyme - https://github.com/airbnb/enzyme/issues/2011 4 4 vi.mock('../context', async () => { ··· 42 42 return <p>{s.data}</p>; 43 43 }; 44 44 45 - beforeAll(() => { 46 - // TODO: Fix use of act() 45 + beforeEach(() => { 46 + vi.useFakeTimers(); 47 + 47 48 vi.spyOn(global.console, 'error').mockImplementation(() => { 48 49 // do nothing 49 50 }); 50 - }); 51 51 52 - beforeEach(() => { 53 52 client.executeMutation.mockClear(); 54 53 state = undefined; 55 54 execute = undefined; ··· 117 116 }); 118 117 119 118 describe('on subscription update', () => { 120 - it('forwards data response', async () => { 119 + it('forwards data response', () => { 121 120 const wrapper = renderer.create(<MutationUser {...props} />); 122 - await execute(); 123 - wrapper.update(<MutationUser {...props} />); 124 - 121 + execute(); 122 + act(() => { 123 + vi.advanceTimersByTime(200); 124 + wrapper.update(<MutationUser {...props} />); 125 + }); 125 126 expect(state).toHaveProperty('data', 1); 126 127 }); 127 128 128 - it('forwards error response', async () => { 129 + it('forwards error response', () => { 129 130 const wrapper = renderer.create(<MutationUser {...props} />); 130 - await execute(); 131 - wrapper.update(<MutationUser {...props} />); 132 - 131 + execute(); 132 + act(() => { 133 + vi.advanceTimersByTime(200); 134 + wrapper.update(<MutationUser {...props} />); 135 + }); 133 136 expect(state).toHaveProperty('error', 2); 134 137 }); 135 138 136 - it('forwards extensions response', async () => { 139 + it('forwards extensions response', () => { 137 140 const wrapper = renderer.create(<MutationUser {...props} />); 138 - await execute(); 139 - wrapper.update(<MutationUser {...props} />); 140 - 141 + execute(); 142 + act(() => { 143 + vi.advanceTimersByTime(200); 144 + wrapper.update(<MutationUser {...props} />); 145 + }); 141 146 expect(state).toHaveProperty('extensions', { i: 1 }); 142 147 }); 143 148 144 - it('sets fetching to false', async () => { 149 + it('sets fetching to false', () => { 145 150 const wrapper = renderer.create(<MutationUser {...props} />); 146 151 wrapper.update(<MutationUser {...props} />); 147 152 148 - await execute(); 149 - wrapper.update(<MutationUser {...props} />); 153 + execute(); 154 + act(() => { 155 + vi.advanceTimersByTime(200); 156 + wrapper.update(<MutationUser {...props} />); 157 + }); 150 158 expect(state).toHaveProperty('fetching', false); 151 159 }); 152 160 });
+36 -56
packages/react-urql/src/hooks/useQuery.test.tsx
··· 1 - import { vi, expect, it, beforeEach, describe, beforeAll, Mock } from 'vitest'; 1 + import { vi, expect, it, beforeEach, describe, Mock } from 'vitest'; 2 2 3 3 // Note: Testing for hooks is not yet supported in Enzyme - https://github.com/airbnb/enzyme/issues/2011 4 4 vi.mock('../context', async () => { ··· 52 52 return <p>{s.data}</p>; 53 53 }; 54 54 55 - beforeAll(() => { 55 + beforeEach(() => { 56 + vi.useFakeTimers(); 56 57 // TODO: Fix use of act() 57 58 vi.spyOn(global.console, 'error').mockImplementation(() => { 58 59 // do nothings 59 60 }); 60 - }); 61 61 62 - beforeEach(() => { 63 62 client.executeQuery.mockClear(); 64 63 state = undefined; 65 64 execute = undefined; ··· 101 100 }); 102 101 103 102 describe('on subscription update', () => { 104 - it('forwards data response', async () => { 103 + it('forwards data response', () => { 105 104 const wrapper = renderer.create(<QueryUser {...props} />); 106 105 /** 107 106 * Have to call update (without changes) in order to see the ··· 109 108 */ 110 109 wrapper.update(<QueryUser {...props} />); 111 110 112 - await new Promise(res => { 113 - setTimeout(() => { 114 - wrapper.update(<QueryUser {...props} />); 115 - expect(state).toHaveProperty('data', 0); 116 - res(null); 117 - }, 400); 111 + act(() => { 112 + vi.advanceTimersByTime(400); 113 + wrapper.update(<QueryUser {...props} />); 118 114 }); 115 + 116 + expect(state).toHaveProperty('data', 0); 119 117 }); 120 118 121 - it('forwards error response', async () => { 119 + it('forwards error response', () => { 122 120 const wrapper = renderer.create(<QueryUser {...props} />); 123 - /** 124 - * Have to call update (without changes) in order to see the 125 - * result of the state change. 126 - */ 127 121 wrapper.update(<QueryUser {...props} />); 128 122 129 - await new Promise(res => { 130 - setTimeout(() => { 131 - wrapper.update(<QueryUser {...props} />); 132 - expect(state).toHaveProperty('error', 1); 133 - res(null); 134 - }, 400); 123 + act(() => { 124 + vi.advanceTimersByTime(400); 125 + wrapper.update(<QueryUser {...props} />); 135 126 }); 127 + 128 + expect(state).toHaveProperty('error', 1); 136 129 }); 137 130 138 - it('forwards extensions response', async () => { 131 + it('forwards extensions response', () => { 139 132 const wrapper = renderer.create(<QueryUser {...props} />); 140 - /** 141 - * Have to call update (without changes) in order to see the 142 - * result of the state change. 143 - */ 144 133 wrapper.update(<QueryUser {...props} />); 145 134 146 - await new Promise(res => { 147 - setTimeout(() => { 148 - wrapper.update(<QueryUser {...props} />); 149 - expect(state).toHaveProperty('extensions', { i: 1 }); 150 - res(null); 151 - }, 400); 135 + act(() => { 136 + vi.advanceTimersByTime(400); 137 + wrapper.update(<QueryUser {...props} />); 152 138 }); 139 + 140 + expect(state).toHaveProperty('extensions', { i: 1 }); 153 141 }); 154 142 155 - it('sets fetching to false', async () => { 143 + it('sets fetching to false', () => { 156 144 const wrapper = renderer.create(<QueryUser {...props} />); 157 - /** 158 - * Have to call update (without changes) in order to see the 159 - * result of the state change. 160 - */ 161 145 wrapper.update(<QueryUser {...props} />); 162 146 163 - await new Promise(res => { 164 - setTimeout(() => { 165 - wrapper.update(<QueryUser {...props} />); 166 - expect(state).toHaveProperty('fetching', false); 167 - res(null); 168 - }, 400); 147 + act(() => { 148 + vi.advanceTimersByTime(400); 149 + wrapper.update(<QueryUser {...props} />); 169 150 }); 151 + 152 + expect(state).toHaveProperty('fetching', false); 170 153 }); 171 154 }); 172 155 ··· 175 158 176 159 it('new query executes subscription', () => { 177 160 const wrapper = renderer.create(<QueryUser {...props} />); 161 + wrapper.update(<QueryUser {...props} query={q} />); 178 162 179 - /** 180 - * Have to call update twice for the change to be detected. 181 - * Only a single change is detected (updating 5 times still only calls 182 - * execute subscription twice). 183 - */ 184 - wrapper.update(<QueryUser {...props} query={q} />); 185 - wrapper.update(<QueryUser {...props} query={q} />); 163 + act(() => { 164 + wrapper.update(<QueryUser {...props} query={q} />); 165 + }); 186 166 187 167 expect(client.executeQuery).toBeCalledTimes(2); 188 168 }); ··· 222 202 223 203 it('skips executing queries if pause updates to true', () => { 224 204 const wrapper = renderer.create(<QueryUser {...props} />); 225 - 226 - /** 227 - * Call update twice for the change to be detected. 228 - */ 229 - wrapper.update(<QueryUser {...props} pause={true} />); 230 205 wrapper.update(<QueryUser {...props} pause={true} />); 206 + 207 + act(() => { 208 + wrapper.update(<QueryUser {...props} pause={true} />); 209 + }); 210 + 231 211 expect(client.executeQuery).toBeCalledTimes(1); 232 212 }); 233 213 });
+2
packages/vue-urql/src/useClient.test.ts
··· 1 + // @vitest-environment jsdom 2 + 1 3 import { expect, it, describe } from 'vitest'; 2 4 import { defineComponent } from 'vue'; 3 5 import { mount } from '@vue/test-utils';
+2
packages/vue-urql/src/useSubscription.test.ts
··· 1 + // @vitest-environment jsdom 2 + 1 3 import { OperationResult, OperationResultSource } from '@urql/core'; 2 4 import { nextTick, reactive, ref } from 'vue'; 3 5 import { vi, expect, it, describe } from 'vitest';
+140 -74
pnpm-lock.yaml
··· 67 67 typescript: ^4.9.5 68 68 vite: ^3.2.4 69 69 vite-tsconfig-paths: ^4.0.7 70 - vitest: ^0.29.3 70 + vitest: ^0.30.1 71 71 dependencies: 72 72 '@actions/github': 5.1.1 73 73 node-fetch: 3.3.1 ··· 123 123 typescript: 4.9.5 124 124 vite: 3.2.5_67ayhxtn77ihpqz7ip4pro4g64 125 125 vite-tsconfig-paths: 4.0.7_mmfldfnusamjexuwtlvii3fpxu 126 - vitest: 0.29.3_jsdom@21.1.1+terser@5.16.6 126 + vitest: 0.30.1_jsdom@21.1.1+terser@5.16.6 127 127 128 128 exchanges/auth: 129 129 specifiers: ··· 542 542 '@babel/highlight': 7.18.6 543 543 dev: true 544 544 545 - /@babel/code-frame/7.18.6: 546 - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} 545 + /@babel/code-frame/7.21.4: 546 + resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} 547 547 engines: {node: '>=6.9.0'} 548 548 dependencies: 549 549 '@babel/highlight': 7.18.6 ··· 556 556 resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} 557 557 engines: {node: '>=6.9.0'} 558 558 dependencies: 559 - '@babel/code-frame': 7.18.6 559 + '@babel/code-frame': 7.21.4 560 560 '@babel/generator': 7.21.3 561 561 '@babel/helper-module-transforms': 7.21.2 562 562 '@babel/helpers': 7.21.0 ··· 580 580 engines: {node: '>=6.9.0'} 581 581 dependencies: 582 582 '@ampproject/remapping': 2.2.0 583 - '@babel/code-frame': 7.18.6 583 + '@babel/code-frame': 7.21.4 584 584 '@babel/generator': 7.21.3 585 585 '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 586 586 '@babel/helper-module-transforms': 7.21.2 ··· 1598 1598 resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} 1599 1599 engines: {node: '>=6.9.0'} 1600 1600 dependencies: 1601 - '@babel/code-frame': 7.18.6 1601 + '@babel/code-frame': 7.21.4 1602 1602 '@babel/parser': 7.21.3 1603 1603 '@babel/types': 7.21.3 1604 1604 ··· 1606 1606 resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==} 1607 1607 engines: {node: '>=6.9.0'} 1608 1608 dependencies: 1609 - '@babel/code-frame': 7.18.6 1609 + '@babel/code-frame': 7.21.4 1610 1610 '@babel/generator': 7.21.3 1611 1611 '@babel/helper-environment-visitor': 7.18.9 1612 1612 '@babel/helper-function-name': 7.21.0 ··· 1623 1623 resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==} 1624 1624 engines: {node: '>=6.9.0'} 1625 1625 dependencies: 1626 - '@babel/code-frame': 7.18.6 1626 + '@babel/code-frame': 7.21.4 1627 1627 '@babel/generator': 7.21.3 1628 1628 '@babel/helper-environment-visitor': 7.18.9 1629 1629 '@babel/helper-function-name': 7.21.0 ··· 2058 2058 engines: {node: '>=6.0.0'} 2059 2059 dependencies: 2060 2060 '@jridgewell/set-array': 1.1.2 2061 - '@jridgewell/sourcemap-codec': 1.4.14 2061 + '@jridgewell/sourcemap-codec': 1.4.15 2062 2062 2063 2063 /@jridgewell/gen-mapping/0.3.2: 2064 2064 resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} 2065 2065 engines: {node: '>=6.0.0'} 2066 2066 dependencies: 2067 2067 '@jridgewell/set-array': 1.1.2 2068 - '@jridgewell/sourcemap-codec': 1.4.14 2068 + '@jridgewell/sourcemap-codec': 1.4.15 2069 2069 '@jridgewell/trace-mapping': 0.3.17 2070 2070 2071 2071 /@jridgewell/resolve-uri/3.1.0: ··· 2085 2085 2086 2086 /@jridgewell/sourcemap-codec/1.4.14: 2087 2087 resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 2088 + 2089 + /@jridgewell/sourcemap-codec/1.4.15: 2090 + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 2088 2091 2089 2092 /@jridgewell/trace-mapping/0.3.17: 2090 2093 resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} ··· 2263 2266 promise-all-reject-late: 1.0.1 2264 2267 promise-call-limit: 1.0.1 2265 2268 read-package-json-fast: 3.0.2 2266 - semver: 7.3.8 2269 + semver: 7.5.0 2267 2270 ssri: 10.0.1 2268 2271 treeverse: 3.0.0 2269 2272 walk-up-path: 1.0.0 ··· 2277 2280 engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 2278 2281 dependencies: 2279 2282 '@gar/promisify': 1.1.3 2280 - semver: 7.3.8 2283 + semver: 7.5.0 2281 2284 dev: true 2282 2285 2283 2286 /@npmcli/fs/3.1.0: 2284 2287 resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} 2285 2288 engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 2286 2289 dependencies: 2287 - semver: 7.3.8 2290 + semver: 7.5.0 2288 2291 dev: true 2289 2292 2290 2293 /@npmcli/git/4.0.3: ··· 2298 2301 proc-log: 3.0.0 2299 2302 promise-inflight: 1.0.1 2300 2303 promise-retry: 2.0.1 2301 - semver: 7.3.8 2304 + semver: 7.5.0 2302 2305 which: 3.0.0 2303 2306 transitivePeerDependencies: 2304 2307 - bluebird ··· 2330 2333 cacache: 17.0.4 2331 2334 json-parse-even-better-errors: 3.0.0 2332 2335 pacote: 15.1.1 2333 - semver: 7.3.8 2336 + semver: 7.5.0 2334 2337 transitivePeerDependencies: 2335 2338 - bluebird 2336 2339 - supports-color ··· 2686 2689 resolution: {integrity: sha512-GObDVMaI4ARrZEXaRy4moolNAxWPKvEYNV/fa6Uc2eAzR/t4otS6A7EhrntPBIQLeehL9DbVhscvvv7gd6hWqA==} 2687 2690 engines: {node: '>=10'} 2688 2691 dependencies: 2689 - '@babel/code-frame': 7.18.6 2692 + '@babel/code-frame': 7.21.4 2690 2693 '@babel/runtime': 7.21.0 2691 2694 '@types/aria-query': 4.2.1 2692 2695 aria-query: 4.2.2 ··· 2970 2973 grapheme-splitter: 1.0.4 2971 2974 ignore: 5.2.4 2972 2975 natural-compare-lite: 1.4.0 2973 - semver: 7.3.8 2976 + semver: 7.5.0 2974 2977 tsutils: 3.21.0_typescript@4.9.5 2975 2978 typescript: 4.9.5 2976 2979 transitivePeerDependencies: ··· 3044 3047 debug: 4.3.4 3045 3048 globby: 11.1.0 3046 3049 is-glob: 4.0.3 3047 - semver: 7.3.8 3050 + semver: 7.5.0 3048 3051 tsutils: 3.21.0_typescript@4.9.5 3049 3052 typescript: 4.9.5 3050 3053 transitivePeerDependencies: ··· 3065 3068 '@typescript-eslint/typescript-estree': 5.55.0_typescript@4.9.5 3066 3069 eslint: 8.36.0 3067 3070 eslint-scope: 5.1.1 3068 - semver: 7.3.8 3071 + semver: 7.5.0 3069 3072 transitivePeerDependencies: 3070 3073 - supports-color 3071 3074 - typescript ··· 3079 3082 eslint-visitor-keys: 3.3.0 3080 3083 dev: true 3081 3084 3082 - /@vitest/expect/0.29.3: 3083 - resolution: {integrity: sha512-z/0JqBqqrdtrT/wzxNrWC76EpkOHdl+SvuNGxWulLaoluygntYyG5wJul5u/rQs5875zfFz/F+JaDf90SkLUIg==} 3085 + /@vitest/expect/0.30.1: 3086 + resolution: {integrity: sha512-c3kbEtN8XXJSeN81iDGq29bUzSjQhjES2WR3aColsS4lPGbivwLtas4DNUe0jD9gg/FYGIteqOenfU95EFituw==} 3084 3087 dependencies: 3085 - '@vitest/spy': 0.29.3 3086 - '@vitest/utils': 0.29.3 3088 + '@vitest/spy': 0.30.1 3089 + '@vitest/utils': 0.30.1 3087 3090 chai: 4.3.7 3088 3091 dev: true 3089 3092 3090 - /@vitest/runner/0.29.3: 3091 - resolution: {integrity: sha512-XLi8ctbvOWhUWmuvBUSIBf8POEDH4zCh6bOuVxm/KGfARpgmVF1ku+vVNvyq85va+7qXxtl+MFmzyXQ2xzhAvw==} 3093 + /@vitest/runner/0.30.1: 3094 + resolution: {integrity: sha512-W62kT/8i0TF1UBCNMRtRMOBWJKRnNyv9RrjIgdUryEe0wNpGZvvwPDLuzYdxvgSckzjp54DSpv1xUbv4BQ0qVA==} 3092 3095 dependencies: 3093 - '@vitest/utils': 0.29.3 3096 + '@vitest/utils': 0.30.1 3097 + concordance: 5.0.4 3094 3098 p-limit: 4.0.0 3095 3099 pathe: 1.1.0 3096 3100 dev: true 3097 3101 3098 - /@vitest/spy/0.29.3: 3099 - resolution: {integrity: sha512-LLpCb1oOCOZcBm0/Oxbr1DQTuKLRBsSIHyLYof7z4QVE8/v8NcZKdORjMUq645fcfX55+nLXwU/1AQ+c2rND+w==} 3102 + /@vitest/snapshot/0.30.1: 3103 + resolution: {integrity: sha512-fJZqKrE99zo27uoZA/azgWyWbFvM1rw2APS05yB0JaLwUIg9aUtvvnBf4q7JWhEcAHmSwbrxKFgyBUga6tq9Tw==} 3104 + dependencies: 3105 + magic-string: 0.30.0 3106 + pathe: 1.1.0 3107 + pretty-format: 27.5.1 3108 + dev: true 3109 + 3110 + /@vitest/spy/0.30.1: 3111 + resolution: {integrity: sha512-YfJeIf37GvTZe04ZKxzJfnNNuNSmTEGnla2OdL60C8od16f3zOfv9q9K0nNii0NfjDJRt/CVN/POuY5/zTS+BA==} 3100 3112 dependencies: 3101 - tinyspy: 1.1.1 3113 + tinyspy: 2.1.0 3102 3114 dev: true 3103 3115 3104 - /@vitest/utils/0.29.3: 3105 - resolution: {integrity: sha512-hg4Ff8AM1GtUnLpUJlNMxrf9f4lZr/xRJjh3uJ0QFP+vjaW82HAxKrmeBmLnhc8Os2eRf+f+VBu4ts7TafPPkA==} 3116 + /@vitest/utils/0.30.1: 3117 + resolution: {integrity: sha512-/c8Xv2zUVc+rnNt84QF0Y0zkfxnaGhp87K2dYJMLtLOIckPzuxLVzAtFCicGFdB4NeBHNzTRr1tNn7rCtQcWFA==} 3106 3118 dependencies: 3107 - cli-truncate: 3.1.0 3108 - diff: 5.1.0 3119 + concordance: 5.0.4 3109 3120 loupe: 2.3.6 3110 3121 pretty-format: 27.5.1 3111 3122 dev: true ··· 4084 4095 /bluebird/3.7.2: 4085 4096 resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} 4086 4097 4098 + /blueimp-md5/2.19.0: 4099 + resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} 4100 + dev: true 4101 + 4087 4102 /bn.js/4.12.0: 4088 4103 resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} 4089 4104 ··· 4348 4363 /builtins/5.0.1: 4349 4364 resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} 4350 4365 dependencies: 4351 - semver: 7.3.8 4366 + semver: 7.5.0 4352 4367 dev: true 4353 4368 4354 4369 /bytes/3.0.0: ··· 5045 5060 readable-stream: 2.3.7 5046 5061 typedarray: 0.0.6 5047 5062 5063 + /concordance/5.0.4: 5064 + resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} 5065 + engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} 5066 + dependencies: 5067 + date-time: 3.1.0 5068 + esutils: 2.0.3 5069 + fast-diff: 1.2.0 5070 + js-string-escape: 1.0.1 5071 + lodash: 4.17.21 5072 + md5-hex: 3.0.1 5073 + semver: 7.5.0 5074 + well-known-symbols: 2.0.0 5075 + dev: true 5076 + 5048 5077 /config-chain/1.1.13: 5049 5078 resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} 5050 5079 dependencies: ··· 5518 5547 pretty-bytes: 5.6.0 5519 5548 proxy-from-env: 1.0.0 5520 5549 request-progress: 3.0.0 5521 - semver: 7.3.8 5550 + semver: 7.5.0 5522 5551 supports-color: 8.1.1 5523 5552 tmp: 0.2.1 5524 5553 untildify: 4.0.0 ··· 5555 5584 resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} 5556 5585 dev: true 5557 5586 5587 + /date-time/3.1.0: 5588 + resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} 5589 + engines: {node: '>=6'} 5590 + dependencies: 5591 + time-zone: 1.0.0 5592 + dev: true 5593 + 5558 5594 /dayjs/1.11.7: 5559 5595 resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} 5560 5596 dev: true ··· 5897 5933 5898 5934 /detect-node/2.0.5: 5899 5935 resolution: {integrity: sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==} 5900 - 5901 - /diff/5.1.0: 5902 - resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} 5903 - engines: {node: '>=0.3.1'} 5904 - dev: true 5905 5936 5906 5937 /diffie-hellman/5.0.3: 5907 5938 resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} ··· 9053 9084 resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==} 9054 9085 dev: true 9055 9086 9087 + /js-string-escape/1.0.1: 9088 + resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} 9089 + engines: {node: '>= 0.8'} 9090 + dev: true 9091 + 9056 9092 /js-tokens/4.0.0: 9057 9093 resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 9058 9094 ··· 9592 9628 resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} 9593 9629 engines: {node: '>=12'} 9594 9630 dependencies: 9595 - '@jridgewell/sourcemap-codec': 1.4.14 9631 + '@jridgewell/sourcemap-codec': 1.4.15 9596 9632 dev: true 9597 9633 9598 9634 /magic-string/0.29.0: 9599 9635 resolution: {integrity: sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==} 9600 9636 engines: {node: '>=12'} 9601 9637 dependencies: 9602 - '@jridgewell/sourcemap-codec': 1.4.14 9638 + '@jridgewell/sourcemap-codec': 1.4.15 9639 + dev: true 9640 + 9641 + /magic-string/0.30.0: 9642 + resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} 9643 + engines: {node: '>=12'} 9644 + dependencies: 9645 + '@jridgewell/sourcemap-codec': 1.4.15 9603 9646 dev: true 9604 9647 9605 9648 /make-dir/1.3.0: ··· 9705 9748 9706 9749 /match-sorter/3.1.1: 9707 9750 resolution: {integrity: sha512-Qlox3wRM/Q4Ww9rv1cBmYKNJwWVX/WC+eA3+1S3Fv4EOhrqyp812ZEfVFKQk0AP6RfzmPUUOwEZBbJ8IRt8SOw==} 9708 - dependencies: 9709 - remove-accents: 0.4.2 9710 9751 bundledDependencies: 9711 9752 - remove-accents 9712 9753 9754 + /md5-hex/3.0.1: 9755 + resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} 9756 + engines: {node: '>=8'} 9757 + dependencies: 9758 + blueimp-md5: 2.19.0 9759 + dev: true 9760 + 9713 9761 /md5.js/1.3.5: 9714 9762 resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} 9715 9763 dependencies: ··· 10401 10449 nopt: 6.0.0 10402 10450 npmlog: 6.0.2 10403 10451 rimraf: 3.0.2 10404 - semver: 7.3.8 10452 + semver: 7.5.0 10405 10453 tar: 6.1.13 10406 10454 which: 2.0.2 10407 10455 transitivePeerDependencies: ··· 10487 10535 dependencies: 10488 10536 hosted-git-info: 6.1.1 10489 10537 is-core-module: 2.11.0 10490 - semver: 7.3.8 10538 + semver: 7.5.0 10491 10539 validate-npm-package-license: 3.0.4 10492 10540 dev: true 10493 10541 ··· 10548 10596 resolution: {integrity: sha512-SBU9oFglRVZnfElwAtF14NivyulDqF1VKqqwNsFW9HDcbHMAPHpRSsVFgKuwFGq/hVvWZExz62Th0kvxn/XE7Q==} 10549 10597 engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 10550 10598 dependencies: 10551 - semver: 7.3.8 10599 + semver: 7.5.0 10552 10600 dev: true 10553 10601 10554 10602 /npm-normalize-package-bin/3.0.0: ··· 10562 10610 dependencies: 10563 10611 hosted-git-info: 6.1.1 10564 10612 proc-log: 3.0.0 10565 - semver: 7.3.8 10613 + semver: 7.5.0 10566 10614 validate-npm-package-name: 5.0.0 10567 10615 dev: true 10568 10616 ··· 10580 10628 npm-install-checks: 6.0.0 10581 10629 npm-normalize-package-bin: 3.0.0 10582 10630 npm-package-arg: 10.1.0 10583 - semver: 7.3.8 10631 + semver: 7.5.0 10584 10632 dev: true 10585 10633 10586 10634 /npm-registry-fetch/14.0.3: ··· 11087 11135 resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 11088 11136 engines: {node: '>=8'} 11089 11137 dependencies: 11090 - '@babel/code-frame': 7.18.6 11138 + '@babel/code-frame': 7.21.4 11091 11139 error-ex: 1.3.2 11092 11140 json-parse-even-better-errors: 2.3.1 11093 11141 lines-and-columns: 1.2.4 ··· 12701 12749 unified: 8.4.2 12702 12750 dev: false 12703 12751 12704 - /remove-accents/0.4.2: 12705 - resolution: {integrity: sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==} 12706 - 12707 12752 /remove-trailing-separator/1.1.0: 12708 12753 resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} 12709 12754 ··· 12902 12947 rollup: 3.19.1 12903 12948 typescript: 4.9.5 12904 12949 optionalDependencies: 12905 - '@babel/code-frame': 7.18.6 12950 + '@babel/code-frame': 7.21.4 12906 12951 dev: true 12907 12952 12908 12953 /rollup-plugin-generate-package-json/3.2.0_rollup@3.19.1: ··· 13082 13127 resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} 13083 13128 hasBin: true 13084 13129 13085 - /semver/7.3.8: 13086 - resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} 13130 + /semver/7.5.0: 13131 + resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} 13087 13132 engines: {node: '>=10'} 13088 13133 hasBin: true 13089 13134 dependencies: ··· 14293 14338 /thunky/1.1.0: 14294 14339 resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} 14295 14340 14341 + /time-zone/1.0.0: 14342 + resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} 14343 + engines: {node: '>=4'} 14344 + dev: true 14345 + 14296 14346 /timed-out/4.0.1: 14297 14347 resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} 14298 14348 engines: {node: '>=0.10.0'} ··· 14318 14368 resolution: {integrity: sha512-iyziEiyFxX4kyxSp+MtY1oCH/lvjH3PxFN8PGCDeqcZWAJ/i+9y+nL85w99PxVzrIvew/GSkSbDYtiGVa85Afg==} 14319 14369 dev: true 14320 14370 14321 - /tinypool/0.3.1: 14322 - resolution: {integrity: sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==} 14371 + /tinypool/0.4.0: 14372 + resolution: {integrity: sha512-2ksntHOKf893wSAH4z/+JbPpi92esw8Gn9N2deXX+B0EO92hexAVI9GIZZPx7P5aYo5KULfeOSt3kMOmSOy6uA==} 14323 14373 engines: {node: '>=14.0.0'} 14324 14374 dev: true 14325 14375 14326 - /tinyspy/1.1.1: 14327 - resolution: {integrity: sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==} 14376 + /tinyspy/2.1.0: 14377 + resolution: {integrity: sha512-7eORpyqImoOvkQJCSkL0d0mB4NHHIFAy4b1u8PHdDa7SjGS2njzl6/lyGoZLm+eyYEtlUmFGE0rFj66SWxZgQQ==} 14328 14378 engines: {node: '>=14.0.0'} 14329 14379 dev: true 14330 14380 ··· 15089 15139 unist-util-stringify-position: 2.0.3 15090 15140 vfile-message: 2.0.4 15091 15141 15092 - /vite-node/0.29.3_67ayhxtn77ihpqz7ip4pro4g64: 15093 - resolution: {integrity: sha512-QYzYSA4Yt2IiduEjYbccfZQfxKp+T1Do8/HEpSX/G5WIECTFKJADwLs9c94aQH4o0A+UtCKU61lj1m5KvbxxQA==} 15094 - engines: {node: '>=v14.16.0'} 15142 + /vite-node/0.30.1_67ayhxtn77ihpqz7ip4pro4g64: 15143 + resolution: {integrity: sha512-vTikpU/J7e6LU/8iM3dzBo8ZhEiKZEKRznEMm+mJh95XhWaPrJQraT/QsT2NWmuEf+zgAoMe64PKT7hfZ1Njmg==} 15144 + engines: {node: '>=v14.18.0'} 15095 15145 hasBin: true 15096 15146 dependencies: 15097 15147 cac: 6.7.14 ··· 15195 15245 fsevents: 2.3.2 15196 15246 dev: true 15197 15247 15198 - /vitest/0.29.3_jsdom@21.1.1+terser@5.16.6: 15199 - resolution: {integrity: sha512-muMsbXnZsrzDGiyqf/09BKQsGeUxxlyLeLK/sFFM4EXdURPQRv8y7dco32DXaRORYP0bvyN19C835dT23mL0ow==} 15200 - engines: {node: '>=v14.16.0'} 15248 + /vitest/0.30.1_jsdom@21.1.1+terser@5.16.6: 15249 + resolution: {integrity: sha512-y35WTrSTlTxfMLttgQk4rHcaDkbHQwDP++SNwPb+7H8yb13Q3cu2EixrtHzF27iZ8v0XCciSsLg00RkPAzB/aA==} 15250 + engines: {node: '>=v14.18.0'} 15201 15251 hasBin: true 15202 15252 peerDependencies: 15203 15253 '@edge-runtime/vm': '*' ··· 15205 15255 '@vitest/ui': '*' 15206 15256 happy-dom: '*' 15207 15257 jsdom: '*' 15258 + playwright: '*' 15259 + safaridriver: '*' 15260 + webdriverio: '*' 15208 15261 peerDependenciesMeta: 15209 15262 '@edge-runtime/vm': 15210 15263 optional: true ··· 15216 15269 optional: true 15217 15270 jsdom: 15218 15271 optional: true 15272 + playwright: 15273 + optional: true 15274 + safaridriver: 15275 + optional: true 15276 + webdriverio: 15277 + optional: true 15219 15278 dependencies: 15220 15279 '@types/chai': 4.3.4 15221 15280 '@types/chai-subset': 1.3.3 15222 15281 '@types/node': 18.15.3 15223 - '@vitest/expect': 0.29.3 15224 - '@vitest/runner': 0.29.3 15225 - '@vitest/spy': 0.29.3 15226 - '@vitest/utils': 0.29.3 15282 + '@vitest/expect': 0.30.1 15283 + '@vitest/runner': 0.30.1 15284 + '@vitest/snapshot': 0.30.1 15285 + '@vitest/spy': 0.30.1 15286 + '@vitest/utils': 0.30.1 15227 15287 acorn: 8.8.2 15228 15288 acorn-walk: 8.2.0 15229 15289 cac: 6.7.14 15230 15290 chai: 4.3.7 15291 + concordance: 5.0.4 15231 15292 debug: 4.3.4 15232 15293 jsdom: 21.1.1 15233 15294 local-pkg: 0.4.3 15295 + magic-string: 0.30.0 15234 15296 pathe: 1.1.0 15235 15297 picocolors: 1.0.0 15236 15298 source-map: 0.6.1 15237 15299 std-env: 3.3.2 15238 15300 strip-literal: 1.0.1 15239 15301 tinybench: 2.4.0 15240 - tinypool: 0.3.1 15241 - tinyspy: 1.1.1 15302 + tinypool: 0.4.0 15242 15303 vite: 3.2.5_67ayhxtn77ihpqz7ip4pro4g64 15243 - vite-node: 0.29.3_67ayhxtn77ihpqz7ip4pro4g64 15304 + vite-node: 0.30.1_67ayhxtn77ihpqz7ip4pro4g64 15244 15305 why-is-node-running: 2.2.2 15245 15306 transitivePeerDependencies: 15246 15307 - less ··· 15497 15558 /websocket-extensions/0.1.4: 15498 15559 resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} 15499 15560 engines: {node: '>=0.8.0'} 15561 + 15562 + /well-known-symbols/2.0.0: 15563 + resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} 15564 + engines: {node: '>=6'} 15565 + dev: true 15500 15566 15501 15567 /whatwg-encoding/2.0.0: 15502 15568 resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
-2
vitest.config.ts
··· 14 14 }, 15 15 plugins: [tsconfigPaths()], 16 16 test: { 17 - environment: 'jsdom', 18 17 globals: false, 19 - maxConcurrency: 20, 20 18 setupFiles: [resolve(__dirname, 'scripts/vitest/setup.js')], 21 19 clearMocks: true, 22 20 exclude: [