From 999f3716075caf1172020a46cba0b49338ed5f37 Mon Sep 17 00:00:00 2001 From: Artyom Sovetnikov <2056864+elringus@users.noreply.github.com> Date: Sun, 31 Dec 2023 23:13:00 +0300 Subject: [PATCH] revamp with .net 8 (#123) --- .github/codecov.yml | 2 - .github/workflows/codeql.yml | 26 +- .github/workflows/cover.yml | 38 +- .github/workflows/deploy.yml | 29 + .github/workflows/publish.yml | 32 +- .gitignore | 22 +- Assets/PackageIcon.png | Bin 19524 -> 0 bytes Assets/PackageIcon.svg | 9 - DotNet/DotNetJS.Test/JSRuntimeTest.cs | 15 - DotNet/DotNetJS.Test/JSTest.cs | 26 - DotNet/DotNetJS.Test/JSTypesTest.cs | 32 - DotNet/DotNetJS.Test/MockRuntime.cs | 51 - DotNet/DotNetJS.sln | 45 - .../DotNetJS/Attributes/JSEventAttribute.cs | 10 - .../DotNetJS/Attributes/JSExportAttribute.cs | 22 - .../Attributes/JSFunctionAttribute.cs | 10 - .../DotNetJS/Attributes/JSImportAttribute.cs | 22 - DotNet/DotNetJS/Attributes/JSTypeAttribute.cs | 46 - DotNet/DotNetJS/Build/DotNetJS.targets | 32 - DotNet/DotNetJS/Build/DotNetJSLinker.xml | 6 - DotNet/DotNetJS/DotNetJS.csproj | 51 - DotNet/DotNetJS/IJSRuntime.cs | 15 - DotNet/DotNetJS/JS.cs | 48 - DotNet/DotNetJS/JSRuntime.cs | 83 - DotNet/Generator.Test/EventTest.cs | 41 - DotNet/Generator.Test/ExportTest.cs | 115 - DotNet/Generator.Test/FunctionTest.cs | 124 - DotNet/Generator.Test/GeneratorTest.cs | 84 - DotNet/Generator.Test/ImportTest.cs | 125 - DotNet/Generator/Common.cs | 142 - DotNet/Generator/Emitters/ExportType.cs | 71 - DotNet/Generator/Emitters/ImportType.cs | 86 - DotNet/Generator/Emitters/PartialClass.cs | 61 - DotNet/Generator/Emitters/PartialMethod.cs | 69 - DotNet/Generator/SourceGenerator.cs | 36 - DotNet/Generator/SyntaxReceiver.cs | 42 - DotNet/Packer.Test/BuildTest.cs | 37 - DotNet/Packer.Test/ContentTest.cs | 20 - DotNet/Packer.Test/LibraryTest.cs | 163 - DotNet/Packer.Test/Mock/MockAssembly.cs | 3 - DotNet/Packer.Test/Mock/MockData.cs | 97 - DotNet/Packer.Test/Mock/MockSource.cs | 3 - DotNet/Packer.Test/PublishTest.cs | 93 - DotNet/Packer/AssemblyInspector/Argument.cs | 10 - DotNet/Packer/AssemblyInspector/Assembly.cs | 3 - DotNet/Packer/AssemblyInspector/Method.cs | 22 - .../DeclarationGenerator/DeclarationFile.cs | 3 - .../DeclarationGenerator.cs | 89 - .../LibraryGenerator/BindingsGenerator.cs | 50 - .../LibraryGenerator/BootUrisTemplate.cs | 25 - .../Packer/LibraryGenerator/EmbedTemplate.cs | 29 - .../Packer/LibraryGenerator/EnumGenerator.cs | 23 - .../LibraryGenerator/LibraryGenerator.cs | 40 - .../LibraryGenerator/LibraryTemplate.cs | 17 - .../LibraryGenerator/SpaceObjectBuilder.cs | 37 - DotNet/Packer/NamespaceBuilder.cs | 45 - DotNet/Packer/PackerException.cs | 8 - DotNet/Packer/PublishDotNetJS.cs | 105 - DotNet/Packer/Utilities/TypeUtilities.cs | 115 - JavaScript/native/dotnet.js | 5541 --- JavaScript/native/dotnet.wasm | Bin 2475713 -> 0 bytes JavaScript/package-lock.json | 6194 --- JavaScript/package.json | 21 - JavaScript/scripts/compile-runtime.sh | 17 - JavaScript/scripts/compile-test.sh | 5 - JavaScript/scripts/install-emsdk.sh | 9 - JavaScript/src/boot.ts | 60 - JavaScript/src/crypto.ts | 20 - JavaScript/src/dotnet-js-interop.ts | 616 - JavaScript/src/dotnet.ts | 38 - JavaScript/src/event.ts | 66 - JavaScript/src/heap-lock.ts | 29 - JavaScript/src/interop.ts | 182 - JavaScript/src/mono.ts | 28 - JavaScript/src/wasm.ts | 27 - JavaScript/test/bench.js | 18 - JavaScript/test/boot.js | 65 - JavaScript/test/csharp.js | 71 - JavaScript/test/csharp/Test.Main/Event.cs | 13 - JavaScript/test/csharp/Test.Main/Function.cs | 26 - JavaScript/test/csharp/Test.Main/Instance.cs | 37 - JavaScript/test/csharp/Test.Main/Invokable.cs | 64 - JavaScript/test/csharp/Test.Main/Platform.cs | 62 - JavaScript/test/csharp/Test.Main/Program.cs | 31 - JavaScript/test/csharp/Test.Main/Stream.cs | 32 - .../test/csharp/Test.Main/Test.Main.csproj | 26 - JavaScript/test/csharp/Test.Types/Registry.cs | 26 - .../test/csharp/Test.Types/Test.Types.csproj | 13 - JavaScript/test/csharp/Test.sln | 16 - JavaScript/test/export.js | 48 - JavaScript/test/interop.js | 142 - JavaScript/test/packed.js | 66 - JavaScript/test/platform.js | 26 - JavaScript/tsconfig.json | 13 - JavaScript/webpack.config.js | 12 - LICENSE => LICENSE.md | 0 README.md | 458 +- Samples/HelloWorld/Project/HelloWorld.csproj | 11 - Samples/HelloWorld/Project/Program.cs | 23 - Samples/HelloWorld/README.md | 7 - Samples/HelloWorld/browser-es.html | 23 - Samples/HelloWorld/browser.html | 24 - Samples/HelloWorld/node-es.mjs | 15 - Samples/HelloWorld/node.js | 15 - .../backend/Backend.WASM/Backend.WASM.csproj | 17 - Samples/React/backend/Backend.WASM/Program.cs | 15 - Samples/React/backend/Backend/Backend.cs | 67 - Samples/React/backend/Backend/Backend.csproj | 8 - Samples/React/backend/Backend/IBackend.cs | 8 - Samples/React/backend/Backend/IFrontend.cs | 7 - Samples/React/backend/package.json | 6 - Samples/React/package-lock.json | 31040 ---------------- Samples/React/package.json | 27 - Samples/React/public/favicon.svg | 1 - Samples/React/scripts/build-backend.sh | 8 - Samples/React/src/boot.ts | 23 - Samples/React/src/index.tsx | 23 - Samples/React/src/stress.tsx | 50 - Samples/React/src/test/stress.test.tsx | 40 - Samples/React/tsconfig.json | 20 - Samples/WebExtension/README.md | 5 - Samples/WebExtension/package-lock.json | 5051 --- Samples/WebExtension/package.json | 35 - Samples/WebExtension/src/extension.ts | 24 - Samples/WebExtension/tsconfig.json | 8 - Samples/WebExtension/webpack.config.js | 15 - docs/.vitepress/config.ts | 56 + docs/.vitepress/md/index.ts | 11 + docs/.vitepress/md/md-link.ts | 30 + docs/.vitepress/md/md-replacer.ts | 39 + docs/.vitepress/theme/index.ts | 10 + docs/.vitepress/theme/style.css | 188 + docs/guide/index.md | 3 + docs/index.md | 75 + docs/package.json | 13 + docs/public/favicon.svg | 22 + docs/public/fonts/inter.woff2 | Bin 0 -> 100384 bytes docs/public/fonts/jb.woff2 | Bin 0 -> 46868 bytes docs/public/img/banner.png | Bin 0 -> 214477 bytes docs/public/img/logo.png | Bin 0 -> 39237 bytes docs/public/imgit/covers.json | 1 + docs/public/imgit/probes.json | 1 + docs/public/imgit/sizes.json | 1 + docs/public/imgit/specs.json | 1 + docs/tsconfig.json | 8 + samples/minimal/README.md | 7 + samples/minimal/cs/Minimal.csproj | 12 + samples/minimal/cs/Program.cs | 19 + samples/minimal/index.html | 22 + samples/minimal/main.mjs | 18 + samples/react/README.md | 10 + .../Backend.Prime/Backend.Prime.csproj | 13 + .../react/backend/Backend.Prime/IPrimeUI.cs | 16 + .../react/backend/Backend.Prime/Options.cs | 3 + samples/react/backend/Backend.Prime/Prime.cs | 77 + .../backend/Backend.WASM/Backend.WASM.csproj | 32 + samples/react/backend/Backend.WASM/Program.cs | 24 + .../react}/backend/Backend.sln | 8 +- samples/react/backend/Backend/Backend.csproj | 7 + samples/react/backend/Backend/IComputer.cs | 12 + samples/react/backend/package.json | 5 + .../React/public => samples/react}/index.html | 5 +- samples/react/package.json | 47 + samples/react/public/favicon.svg | 22 + samples/react/src/computer.tsx | 76 + .../React => samples/react}/src/donut.tsx | 8 +- .../React => samples/react}/src/index.css | 16 +- samples/react/src/main.tsx | 12 + samples/react/test/computer.test.tsx | 41 + samples/react/test/setup.ts | 4 + samples/react/tsconfig.json | 10 + samples/react/vite.config.ts | 25 + samples/trimming/README.md | 11 + samples/trimming/cs/Program.cs | 9 + samples/trimming/cs/Trimming.csproj | 22 + samples/trimming/main.mjs | 29 + .../LICENSE => samples/vscode/LICENSE.md | 0 samples/vscode/README.md | 11 + samples/vscode/assets/package-icon.png | Bin 0 -> 39237 bytes samples/vscode/package.json | 37 + samples/vscode/src/extension.js | 19 + src/cs/.scripts/cover.ps1 | 8 + src/cs/.scripts/pack.ps1 | 5 + src/cs/Bootsharp.Common.Test/BindingTest.cs | 25 + .../Bootsharp.Common.Test.csproj | 22 +- src/cs/Bootsharp.Common.Test/FunctionTest.cs | 28 + src/cs/Bootsharp.Common.Test/MockResolver.cs | 9 + src/cs/Bootsharp.Common.Test/Mocks.cs | 6 + .../cs/Bootsharp.Common.Test/NamespaceTest.cs | 16 +- .../Bootsharp.Common.Test/SerializerTest.cs | 99 + src/cs/Bootsharp.Common.Test/TypesTest.cs | 96 + .../Attributes/JSEventAttribute.cs | 15 + .../Attributes/JSExportAttribute.cs | 29 + .../Attributes/JSFunctionAttribute.cs | 17 + .../Attributes/JSImportAttribute.cs | 39 + .../Attributes/JSInvokableAttribute.cs | 14 + .../Attributes/JSNamespaceAttribute.cs | 10 +- .../Attributes/JSTypeAttribute.cs | 34 + .../Binding/BindingRegistry.cs | 31 + .../Bootsharp.Common/Binding/ExportBinding.cs | 8 + .../Bootsharp.Common/Binding/ImportBinding.cs | 7 + .../Bootsharp.Common/Bootsharp.Common.csproj | 20 + src/cs/Bootsharp.Common/Error.cs | 6 + src/cs/Bootsharp.Common/Interop/Function.cs | 40 + src/cs/Bootsharp.Common/Interop/Serializer.cs | 47 + .../Bootsharp.Generate.Test.csproj | 41 + .../Emitters/EventTest.cs | 73 + .../Emitters/ExportTest.cs | 121 + .../Emitters/FunctionTest.cs | 229 + .../Emitters/ImportTest.cs | 258 + .../Emitters/InvokableTest.cs | 47 + .../Bootsharp.Generate.Test/GeneratorTest.cs | 161 + src/cs/Bootsharp.Generate.Test/Verifier.cs | 16 + .../Bootsharp.Generate.csproj | 7 +- src/cs/Bootsharp.Generate/Common.cs | 143 + .../Emitters/BindingEmitter.cs | 102 + .../Bootsharp.Generate/Emitters/ExportType.cs | 65 + .../Bootsharp.Generate/Emitters/ImportType.cs | 63 + .../Emitters/PartialClass.cs | 72 + .../Emitters/PartialMethod.cs | 23 + src/cs/Bootsharp.Generate/SourceGenerator.cs | 45 + src/cs/Bootsharp.Generate/SyntaxReceiver.cs | 42 + .../Bootsharp.Inject.Test.csproj | 23 +- .../Bootsharp.Inject.Test/ExtensionsTest.cs | 43 + src/cs/Bootsharp.Inject.Test/Mocks.cs | 17 + .../Bootsharp.Inject/Bootsharp.Inject.csproj | 19 + src/cs/Bootsharp.Inject/Extensions.cs | 35 + .../Bootsharp.Publish.Test.csproj | 38 + .../Build/BindingTest.cs | 310 + .../Bootsharp.Publish.Test/Build/BuildTest.cs | 44 + .../Build}/DeclarationTest.cs | 245 +- .../Build/InspectionTest.cs | 35 + .../Build/PatcherTest.cs | 57 + .../Build/ResourceTest.cs | 40 + .../Mock/MockAssembly.cs | 3 + .../Mock/MockCompiler.cs | 14 +- .../Mock/MockProject.cs | 60 + .../Bootsharp.Publish.Test/Mock/MockSource.cs | 3 + .../Packer.Test.csproj | 0 .../Prepare/ExportTest.cs | 186 + .../Prepare/ImportTest.cs | 213 + .../Prepare/PrepareTest.cs | 23 + .../Prepare/SerializerTest.cs | 121 + src/cs/Bootsharp.Publish.Test/TaskTest.cs | 54 + .../AssemblyInspector/Argument.cs | 12 + .../AssemblyInspector/Assembly.cs | 3 + .../AssemblyInspector/AssemblyInspector.cs | 55 +- .../AssemblyInspector/Method.cs | 25 + .../AssemblyInspector/MethodType.cs | 2 +- .../BindingGenerator/Binding.cs | 3 + .../BindingGenerator/BindingGenerator.cs | 138 + .../Bootsharp.Publish.csproj | 17 + src/cs/Bootsharp.Publish/BuildBootsharp.cs | 66 + .../DeclarationGenerator.cs | 13 + .../MethodDeclarationGenerator.cs | 35 +- .../DeclarationGenerator/TypeConverter.cs | 22 +- .../DeclarationGenerator/TypeCrawler.cs | 9 +- .../TypeDeclarationGenerator.cs | 20 +- .../ModulePatchers/InternalPatcher.cs | 36 + .../ModulePatchers/ModulePatcher.cs | 60 + .../NamespaceBuilder/NamespaceBuilder.cs | 32 + .../NamespaceBuilder/NamespaceConverter.cs | 12 + .../cs/Bootsharp.Publish}/Packer.csproj | 0 src/cs/Bootsharp.Publish/PrepareBootsharp.cs | 61 + .../PrepareGenerators/ExportGenerator.cs | 78 + .../PrepareGenerators/ImportGenerator.cs | 78 + .../PrepareGenerators/SerializerGenerator.cs | 97 + .../ResourceGenerator/AssemblyResource.cs | 3 + .../ResourceGenerator/ResourceGenerator.cs | 25 + .../ResourceGenerator/ResourcesTemplate.cs | 21 + .../Utilities/TextUtilities.cs | 21 +- .../Utilities/TypeUtilities.cs | 195 + src/cs/Bootsharp.sln | 63 + src/cs/Bootsharp/Bootsharp.csproj | 38 + src/cs/Bootsharp/Build/Bootsharp.props | 40 + src/cs/Bootsharp/Build/Bootsharp.targets | 172 + src/cs/Bootsharp/Build/PackageTemplate.json | 6 + src/cs/Directory.Build.props | 20 + .../Project => src/cs}/nuget.config | 2 +- src/js/package.json | 16 + src/js/scripts/build.sh | 4 + src/js/scripts/compile-test.sh | 3 + src/js/src/bindings.g.ts | 2 + src/js/src/boot.ts | 69 + src/js/src/bootsharp.ts | 17 + src/js/src/config.ts | 39 + src/js/src/decoder.ts | 35 + src/js/src/dotnet.g.d.ts | 471 + src/js/src/dotnet.native.g.d.ts | 2 + src/js/src/dotnet.runtime.g.d.ts | 2 + src/js/src/event.ts | 95 + src/js/src/exports.ts | 8 + src/js/src/imports.ts | 6 + src/js/src/modules.ts | 22 + src/js/src/resources.g.ts | 4 + src/js/src/resources.ts | 22 + src/js/test/cs.mjs | 74 + src/js/test/cs/Test.Types/Registry.cs | 46 + src/js/test/cs/Test.Types/Test.Types.csproj | 13 + .../js/test/cs}/Test.Types/TrackType.cs | 0 .../js/test/cs}/Test.Types/Tracked.cs | 0 .../js/test/cs}/Test.Types/Vehicle.cs | 0 .../js/test/cs}/Test.Types/Wheeled.cs | 0 src/js/test/cs/Test.sln | 21 + src/js/test/cs/Test/Event.cs | 19 + src/js/test/cs/Test/Functions.cs | 29 + src/js/test/cs/Test/Invokable.cs | 31 + src/js/test/cs/Test/Platform.cs | 40 + src/js/test/cs/Test/Program.cs | 11 + src/js/test/cs/Test/Test.csproj | 20 + .../backend => src/js/test/cs}/nuget.config | 2 +- src/js/test/spec/boot.spec.mjs | 176 + .../js/test/spec/event.spec.mjs | 58 +- src/js/test/spec/export.spec.mjs | 18 + src/js/test/spec/interop.spec.mjs | 157 + src/js/test/spec/platform.spec.mjs | 23 + src/js/tsconfig.json | 9 + 317 files changed, 7690 insertions(+), 53663 deletions(-) delete mode 100644 .github/codecov.yml create mode 100644 .github/workflows/deploy.yml delete mode 100644 Assets/PackageIcon.png delete mode 100644 Assets/PackageIcon.svg delete mode 100644 DotNet/DotNetJS.Test/JSRuntimeTest.cs delete mode 100644 DotNet/DotNetJS.Test/JSTest.cs delete mode 100644 DotNet/DotNetJS.Test/JSTypesTest.cs delete mode 100644 DotNet/DotNetJS.Test/MockRuntime.cs delete mode 100644 DotNet/DotNetJS.sln delete mode 100644 DotNet/DotNetJS/Attributes/JSEventAttribute.cs delete mode 100644 DotNet/DotNetJS/Attributes/JSExportAttribute.cs delete mode 100644 DotNet/DotNetJS/Attributes/JSFunctionAttribute.cs delete mode 100644 DotNet/DotNetJS/Attributes/JSImportAttribute.cs delete mode 100644 DotNet/DotNetJS/Attributes/JSTypeAttribute.cs delete mode 100644 DotNet/DotNetJS/Build/DotNetJS.targets delete mode 100644 DotNet/DotNetJS/Build/DotNetJSLinker.xml delete mode 100644 DotNet/DotNetJS/DotNetJS.csproj delete mode 100644 DotNet/DotNetJS/IJSRuntime.cs delete mode 100644 DotNet/DotNetJS/JS.cs delete mode 100644 DotNet/DotNetJS/JSRuntime.cs delete mode 100644 DotNet/Generator.Test/EventTest.cs delete mode 100644 DotNet/Generator.Test/ExportTest.cs delete mode 100644 DotNet/Generator.Test/FunctionTest.cs delete mode 100644 DotNet/Generator.Test/GeneratorTest.cs delete mode 100644 DotNet/Generator.Test/ImportTest.cs delete mode 100644 DotNet/Generator/Common.cs delete mode 100644 DotNet/Generator/Emitters/ExportType.cs delete mode 100644 DotNet/Generator/Emitters/ImportType.cs delete mode 100644 DotNet/Generator/Emitters/PartialClass.cs delete mode 100644 DotNet/Generator/Emitters/PartialMethod.cs delete mode 100644 DotNet/Generator/SourceGenerator.cs delete mode 100644 DotNet/Generator/SyntaxReceiver.cs delete mode 100644 DotNet/Packer.Test/BuildTest.cs delete mode 100644 DotNet/Packer.Test/ContentTest.cs delete mode 100644 DotNet/Packer.Test/LibraryTest.cs delete mode 100644 DotNet/Packer.Test/Mock/MockAssembly.cs delete mode 100644 DotNet/Packer.Test/Mock/MockData.cs delete mode 100644 DotNet/Packer.Test/Mock/MockSource.cs delete mode 100644 DotNet/Packer.Test/PublishTest.cs delete mode 100644 DotNet/Packer/AssemblyInspector/Argument.cs delete mode 100644 DotNet/Packer/AssemblyInspector/Assembly.cs delete mode 100644 DotNet/Packer/AssemblyInspector/Method.cs delete mode 100644 DotNet/Packer/DeclarationGenerator/DeclarationFile.cs delete mode 100644 DotNet/Packer/DeclarationGenerator/DeclarationGenerator.cs delete mode 100644 DotNet/Packer/LibraryGenerator/BindingsGenerator.cs delete mode 100644 DotNet/Packer/LibraryGenerator/BootUrisTemplate.cs delete mode 100644 DotNet/Packer/LibraryGenerator/EmbedTemplate.cs delete mode 100644 DotNet/Packer/LibraryGenerator/EnumGenerator.cs delete mode 100644 DotNet/Packer/LibraryGenerator/LibraryGenerator.cs delete mode 100644 DotNet/Packer/LibraryGenerator/LibraryTemplate.cs delete mode 100644 DotNet/Packer/LibraryGenerator/SpaceObjectBuilder.cs delete mode 100644 DotNet/Packer/NamespaceBuilder.cs delete mode 100644 DotNet/Packer/PackerException.cs delete mode 100644 DotNet/Packer/PublishDotNetJS.cs delete mode 100644 DotNet/Packer/Utilities/TypeUtilities.cs delete mode 100644 JavaScript/native/dotnet.js delete mode 100644 JavaScript/native/dotnet.wasm delete mode 100644 JavaScript/package-lock.json delete mode 100644 JavaScript/package.json delete mode 100644 JavaScript/scripts/compile-runtime.sh delete mode 100644 JavaScript/scripts/compile-test.sh delete mode 100644 JavaScript/scripts/install-emsdk.sh delete mode 100644 JavaScript/src/boot.ts delete mode 100644 JavaScript/src/crypto.ts delete mode 100644 JavaScript/src/dotnet-js-interop.ts delete mode 100644 JavaScript/src/dotnet.ts delete mode 100644 JavaScript/src/event.ts delete mode 100644 JavaScript/src/heap-lock.ts delete mode 100644 JavaScript/src/interop.ts delete mode 100644 JavaScript/src/mono.ts delete mode 100644 JavaScript/src/wasm.ts delete mode 100644 JavaScript/test/bench.js delete mode 100644 JavaScript/test/boot.js delete mode 100644 JavaScript/test/csharp.js delete mode 100644 JavaScript/test/csharp/Test.Main/Event.cs delete mode 100644 JavaScript/test/csharp/Test.Main/Function.cs delete mode 100644 JavaScript/test/csharp/Test.Main/Instance.cs delete mode 100644 JavaScript/test/csharp/Test.Main/Invokable.cs delete mode 100644 JavaScript/test/csharp/Test.Main/Platform.cs delete mode 100644 JavaScript/test/csharp/Test.Main/Program.cs delete mode 100644 JavaScript/test/csharp/Test.Main/Stream.cs delete mode 100644 JavaScript/test/csharp/Test.Main/Test.Main.csproj delete mode 100644 JavaScript/test/csharp/Test.Types/Registry.cs delete mode 100644 JavaScript/test/csharp/Test.Types/Test.Types.csproj delete mode 100644 JavaScript/test/csharp/Test.sln delete mode 100644 JavaScript/test/export.js delete mode 100644 JavaScript/test/interop.js delete mode 100644 JavaScript/test/packed.js delete mode 100644 JavaScript/test/platform.js delete mode 100644 JavaScript/tsconfig.json delete mode 100644 JavaScript/webpack.config.js rename LICENSE => LICENSE.md (100%) delete mode 100644 Samples/HelloWorld/Project/HelloWorld.csproj delete mode 100644 Samples/HelloWorld/Project/Program.cs delete mode 100644 Samples/HelloWorld/README.md delete mode 100644 Samples/HelloWorld/browser-es.html delete mode 100644 Samples/HelloWorld/browser.html delete mode 100644 Samples/HelloWorld/node-es.mjs delete mode 100644 Samples/HelloWorld/node.js delete mode 100644 Samples/React/backend/Backend.WASM/Backend.WASM.csproj delete mode 100644 Samples/React/backend/Backend.WASM/Program.cs delete mode 100644 Samples/React/backend/Backend/Backend.cs delete mode 100644 Samples/React/backend/Backend/Backend.csproj delete mode 100644 Samples/React/backend/Backend/IBackend.cs delete mode 100644 Samples/React/backend/Backend/IFrontend.cs delete mode 100644 Samples/React/backend/package.json delete mode 100644 Samples/React/package-lock.json delete mode 100644 Samples/React/package.json delete mode 100644 Samples/React/public/favicon.svg delete mode 100644 Samples/React/scripts/build-backend.sh delete mode 100644 Samples/React/src/boot.ts delete mode 100644 Samples/React/src/index.tsx delete mode 100644 Samples/React/src/stress.tsx delete mode 100644 Samples/React/src/test/stress.test.tsx delete mode 100644 Samples/React/tsconfig.json delete mode 100644 Samples/WebExtension/README.md delete mode 100644 Samples/WebExtension/package-lock.json delete mode 100644 Samples/WebExtension/package.json delete mode 100644 Samples/WebExtension/src/extension.ts delete mode 100644 Samples/WebExtension/tsconfig.json delete mode 100644 Samples/WebExtension/webpack.config.js create mode 100644 docs/.vitepress/config.ts create mode 100644 docs/.vitepress/md/index.ts create mode 100644 docs/.vitepress/md/md-link.ts create mode 100644 docs/.vitepress/md/md-replacer.ts create mode 100644 docs/.vitepress/theme/index.ts create mode 100644 docs/.vitepress/theme/style.css create mode 100644 docs/guide/index.md create mode 100644 docs/index.md create mode 100644 docs/package.json create mode 100644 docs/public/favicon.svg create mode 100644 docs/public/fonts/inter.woff2 create mode 100644 docs/public/fonts/jb.woff2 create mode 100644 docs/public/img/banner.png create mode 100644 docs/public/img/logo.png create mode 100644 docs/public/imgit/covers.json create mode 100644 docs/public/imgit/probes.json create mode 100644 docs/public/imgit/sizes.json create mode 100644 docs/public/imgit/specs.json create mode 100644 docs/tsconfig.json create mode 100644 samples/minimal/README.md create mode 100644 samples/minimal/cs/Minimal.csproj create mode 100644 samples/minimal/cs/Program.cs create mode 100644 samples/minimal/index.html create mode 100644 samples/minimal/main.mjs create mode 100644 samples/react/README.md create mode 100644 samples/react/backend/Backend.Prime/Backend.Prime.csproj create mode 100644 samples/react/backend/Backend.Prime/IPrimeUI.cs create mode 100644 samples/react/backend/Backend.Prime/Options.cs create mode 100644 samples/react/backend/Backend.Prime/Prime.cs create mode 100644 samples/react/backend/Backend.WASM/Backend.WASM.csproj create mode 100644 samples/react/backend/Backend.WASM/Program.cs rename {Samples/React => samples/react}/backend/Backend.sln (68%) create mode 100644 samples/react/backend/Backend/Backend.csproj create mode 100644 samples/react/backend/Backend/IComputer.cs create mode 100644 samples/react/backend/package.json rename {Samples/React/public => samples/react}/index.html (58%) create mode 100644 samples/react/package.json create mode 100644 samples/react/public/favicon.svg create mode 100644 samples/react/src/computer.tsx rename {Samples/React => samples/react}/src/donut.tsx (66%) rename {Samples/React => samples/react}/src/index.css (74%) create mode 100644 samples/react/src/main.tsx create mode 100644 samples/react/test/computer.test.tsx create mode 100644 samples/react/test/setup.ts create mode 100644 samples/react/tsconfig.json create mode 100644 samples/react/vite.config.ts create mode 100644 samples/trimming/README.md create mode 100644 samples/trimming/cs/Program.cs create mode 100644 samples/trimming/cs/Trimming.csproj create mode 100644 samples/trimming/main.mjs rename Samples/WebExtension/LICENSE => samples/vscode/LICENSE.md (100%) create mode 100644 samples/vscode/README.md create mode 100644 samples/vscode/assets/package-icon.png create mode 100644 samples/vscode/package.json create mode 100644 samples/vscode/src/extension.js create mode 100644 src/cs/.scripts/cover.ps1 create mode 100644 src/cs/.scripts/pack.ps1 create mode 100644 src/cs/Bootsharp.Common.Test/BindingTest.cs rename DotNet/DotNetJS.Test/DotNetJS.Test.csproj => src/cs/Bootsharp.Common.Test/Bootsharp.Common.Test.csproj (57%) create mode 100644 src/cs/Bootsharp.Common.Test/FunctionTest.cs create mode 100644 src/cs/Bootsharp.Common.Test/MockResolver.cs create mode 100644 src/cs/Bootsharp.Common.Test/Mocks.cs rename DotNet/DotNetJS.Test/JSNamespaceTest.cs => src/cs/Bootsharp.Common.Test/NamespaceTest.cs (74%) create mode 100644 src/cs/Bootsharp.Common.Test/SerializerTest.cs create mode 100644 src/cs/Bootsharp.Common.Test/TypesTest.cs create mode 100644 src/cs/Bootsharp.Common/Attributes/JSEventAttribute.cs create mode 100644 src/cs/Bootsharp.Common/Attributes/JSExportAttribute.cs create mode 100644 src/cs/Bootsharp.Common/Attributes/JSFunctionAttribute.cs create mode 100644 src/cs/Bootsharp.Common/Attributes/JSImportAttribute.cs create mode 100644 src/cs/Bootsharp.Common/Attributes/JSInvokableAttribute.cs rename {DotNet/DotNetJS => src/cs/Bootsharp.Common}/Attributes/JSNamespaceAttribute.cs (75%) create mode 100644 src/cs/Bootsharp.Common/Attributes/JSTypeAttribute.cs create mode 100644 src/cs/Bootsharp.Common/Binding/BindingRegistry.cs create mode 100644 src/cs/Bootsharp.Common/Binding/ExportBinding.cs create mode 100644 src/cs/Bootsharp.Common/Binding/ImportBinding.cs create mode 100644 src/cs/Bootsharp.Common/Bootsharp.Common.csproj create mode 100644 src/cs/Bootsharp.Common/Error.cs create mode 100644 src/cs/Bootsharp.Common/Interop/Function.cs create mode 100644 src/cs/Bootsharp.Common/Interop/Serializer.cs create mode 100644 src/cs/Bootsharp.Generate.Test/Bootsharp.Generate.Test.csproj create mode 100644 src/cs/Bootsharp.Generate.Test/Emitters/EventTest.cs create mode 100644 src/cs/Bootsharp.Generate.Test/Emitters/ExportTest.cs create mode 100644 src/cs/Bootsharp.Generate.Test/Emitters/FunctionTest.cs create mode 100644 src/cs/Bootsharp.Generate.Test/Emitters/ImportTest.cs create mode 100644 src/cs/Bootsharp.Generate.Test/Emitters/InvokableTest.cs create mode 100644 src/cs/Bootsharp.Generate.Test/GeneratorTest.cs create mode 100644 src/cs/Bootsharp.Generate.Test/Verifier.cs rename DotNet/Generator/Generator.csproj => src/cs/Bootsharp.Generate/Bootsharp.Generate.csproj (50%) create mode 100644 src/cs/Bootsharp.Generate/Common.cs create mode 100644 src/cs/Bootsharp.Generate/Emitters/BindingEmitter.cs create mode 100644 src/cs/Bootsharp.Generate/Emitters/ExportType.cs create mode 100644 src/cs/Bootsharp.Generate/Emitters/ImportType.cs create mode 100644 src/cs/Bootsharp.Generate/Emitters/PartialClass.cs create mode 100644 src/cs/Bootsharp.Generate/Emitters/PartialMethod.cs create mode 100644 src/cs/Bootsharp.Generate/SourceGenerator.cs create mode 100644 src/cs/Bootsharp.Generate/SyntaxReceiver.cs rename DotNet/Generator.Test/Generator.Test.csproj => src/cs/Bootsharp.Inject.Test/Bootsharp.Inject.Test.csproj (62%) create mode 100644 src/cs/Bootsharp.Inject.Test/ExtensionsTest.cs create mode 100644 src/cs/Bootsharp.Inject.Test/Mocks.cs create mode 100644 src/cs/Bootsharp.Inject/Bootsharp.Inject.csproj create mode 100644 src/cs/Bootsharp.Inject/Extensions.cs create mode 100644 src/cs/Bootsharp.Publish.Test/Bootsharp.Publish.Test.csproj create mode 100644 src/cs/Bootsharp.Publish.Test/Build/BindingTest.cs create mode 100644 src/cs/Bootsharp.Publish.Test/Build/BuildTest.cs rename {DotNet/Packer.Test => src/cs/Bootsharp.Publish.Test/Build}/DeclarationTest.cs (74%) create mode 100644 src/cs/Bootsharp.Publish.Test/Build/InspectionTest.cs create mode 100644 src/cs/Bootsharp.Publish.Test/Build/PatcherTest.cs create mode 100644 src/cs/Bootsharp.Publish.Test/Build/ResourceTest.cs create mode 100644 src/cs/Bootsharp.Publish.Test/Mock/MockAssembly.cs rename {DotNet/Packer.Test => src/cs/Bootsharp.Publish.Test}/Mock/MockCompiler.cs (86%) create mode 100644 src/cs/Bootsharp.Publish.Test/Mock/MockProject.cs create mode 100644 src/cs/Bootsharp.Publish.Test/Mock/MockSource.cs rename {DotNet/Packer.Test => src/cs/Bootsharp.Publish.Test}/Packer.Test.csproj (100%) create mode 100644 src/cs/Bootsharp.Publish.Test/Prepare/ExportTest.cs create mode 100644 src/cs/Bootsharp.Publish.Test/Prepare/ImportTest.cs create mode 100644 src/cs/Bootsharp.Publish.Test/Prepare/PrepareTest.cs create mode 100644 src/cs/Bootsharp.Publish.Test/Prepare/SerializerTest.cs create mode 100644 src/cs/Bootsharp.Publish.Test/TaskTest.cs create mode 100644 src/cs/Bootsharp.Publish/AssemblyInspector/Argument.cs create mode 100644 src/cs/Bootsharp.Publish/AssemblyInspector/Assembly.cs rename {DotNet/Packer => src/cs/Bootsharp.Publish}/AssemblyInspector/AssemblyInspector.cs (72%) create mode 100644 src/cs/Bootsharp.Publish/AssemblyInspector/Method.cs rename {DotNet/Packer => src/cs/Bootsharp.Publish}/AssemblyInspector/MethodType.cs (68%) create mode 100644 src/cs/Bootsharp.Publish/BindingGenerator/Binding.cs create mode 100644 src/cs/Bootsharp.Publish/BindingGenerator/BindingGenerator.cs create mode 100644 src/cs/Bootsharp.Publish/Bootsharp.Publish.csproj create mode 100644 src/cs/Bootsharp.Publish/BuildBootsharp.cs create mode 100644 src/cs/Bootsharp.Publish/DeclarationGenerator/DeclarationGenerator.cs rename {DotNet/Packer => src/cs/Bootsharp.Publish}/DeclarationGenerator/MethodDeclarationGenerator.cs (63%) rename {DotNet/Packer => src/cs/Bootsharp.Publish}/DeclarationGenerator/TypeConverter.cs (89%) rename {DotNet/Packer => src/cs/Bootsharp.Publish}/DeclarationGenerator/TypeCrawler.cs (89%) rename {DotNet/Packer => src/cs/Bootsharp.Publish}/DeclarationGenerator/TypeDeclarationGenerator.cs (87%) create mode 100644 src/cs/Bootsharp.Publish/ModulePatchers/InternalPatcher.cs create mode 100644 src/cs/Bootsharp.Publish/ModulePatchers/ModulePatcher.cs create mode 100644 src/cs/Bootsharp.Publish/NamespaceBuilder/NamespaceBuilder.cs create mode 100644 src/cs/Bootsharp.Publish/NamespaceBuilder/NamespaceConverter.cs rename {DotNet/Packer => src/cs/Bootsharp.Publish}/Packer.csproj (100%) create mode 100644 src/cs/Bootsharp.Publish/PrepareBootsharp.cs create mode 100644 src/cs/Bootsharp.Publish/PrepareGenerators/ExportGenerator.cs create mode 100644 src/cs/Bootsharp.Publish/PrepareGenerators/ImportGenerator.cs create mode 100644 src/cs/Bootsharp.Publish/PrepareGenerators/SerializerGenerator.cs create mode 100644 src/cs/Bootsharp.Publish/ResourceGenerator/AssemblyResource.cs create mode 100644 src/cs/Bootsharp.Publish/ResourceGenerator/ResourceGenerator.cs create mode 100644 src/cs/Bootsharp.Publish/ResourceGenerator/ResourcesTemplate.cs rename {DotNet/Packer => src/cs/Bootsharp.Publish}/Utilities/TextUtilities.cs (50%) create mode 100644 src/cs/Bootsharp.Publish/Utilities/TypeUtilities.cs create mode 100644 src/cs/Bootsharp.sln create mode 100644 src/cs/Bootsharp/Bootsharp.csproj create mode 100644 src/cs/Bootsharp/Build/Bootsharp.props create mode 100644 src/cs/Bootsharp/Build/Bootsharp.targets create mode 100644 src/cs/Bootsharp/Build/PackageTemplate.json create mode 100644 src/cs/Directory.Build.props rename {Samples/HelloWorld/Project => src/cs}/nuget.config (67%) create mode 100644 src/js/package.json create mode 100644 src/js/scripts/build.sh create mode 100644 src/js/scripts/compile-test.sh create mode 100644 src/js/src/bindings.g.ts create mode 100644 src/js/src/boot.ts create mode 100644 src/js/src/bootsharp.ts create mode 100644 src/js/src/config.ts create mode 100644 src/js/src/decoder.ts create mode 100644 src/js/src/dotnet.g.d.ts create mode 100644 src/js/src/dotnet.native.g.d.ts create mode 100644 src/js/src/dotnet.runtime.g.d.ts create mode 100644 src/js/src/event.ts create mode 100644 src/js/src/exports.ts create mode 100644 src/js/src/imports.ts create mode 100644 src/js/src/modules.ts create mode 100644 src/js/src/resources.g.ts create mode 100644 src/js/src/resources.ts create mode 100644 src/js/test/cs.mjs create mode 100644 src/js/test/cs/Test.Types/Registry.cs create mode 100644 src/js/test/cs/Test.Types/Test.Types.csproj rename {JavaScript/test/csharp => src/js/test/cs}/Test.Types/TrackType.cs (100%) rename {JavaScript/test/csharp => src/js/test/cs}/Test.Types/Tracked.cs (100%) rename {JavaScript/test/csharp => src/js/test/cs}/Test.Types/Vehicle.cs (100%) rename {JavaScript/test/csharp => src/js/test/cs}/Test.Types/Wheeled.cs (100%) create mode 100644 src/js/test/cs/Test.sln create mode 100644 src/js/test/cs/Test/Event.cs create mode 100644 src/js/test/cs/Test/Functions.cs create mode 100644 src/js/test/cs/Test/Invokable.cs create mode 100644 src/js/test/cs/Test/Platform.cs create mode 100644 src/js/test/cs/Test/Program.cs create mode 100644 src/js/test/cs/Test/Test.csproj rename {Samples/React/backend => src/js/test/cs}/nuget.config (65%) create mode 100644 src/js/test/spec/boot.spec.mjs rename JavaScript/test/event.js => src/js/test/spec/event.spec.mjs (65%) create mode 100644 src/js/test/spec/export.spec.mjs create mode 100644 src/js/test/spec/interop.spec.mjs create mode 100644 src/js/test/spec/platform.spec.mjs create mode 100644 src/js/tsconfig.json diff --git a/.github/codecov.yml b/.github/codecov.yml deleted file mode 100644 index 6f0ab64b..00000000 --- a/.github/codecov.yml +++ /dev/null @@ -1,2 +0,0 @@ -ignore: - - "**/dotnet-js-interop.ts" diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 799ddfa7..33e30c0d 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -5,8 +5,6 @@ on: branches: [ main ] pull_request: branches: [ main ] - schedule: - - cron: '36 7 * * 0' jobs: analyze: @@ -19,24 +17,30 @@ jobs: strategy: fail-fast: false matrix: - language: [ 'csharp', 'javascript' ] + language: [ "csharp", "javascript" ] steps: - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: setup dotnet - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v3 with: - dotnet-version: 6.0.x + dotnet-version: 8 - name: initialize codeql uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} - name: build run: | - dotnet build DotNet/DotNetJS.sln - cd JavaScript - npm ci - npm run build - dotnet publish test/csharp/Test.sln + cd src/cs + dotnet workload restore + mkdir .nuget + dotnet build Bootsharp.Generate -c Release + dotnet build Bootsharp.Common -c Release + dotnet pack Bootsharp.Common -o .nuget + dotnet build -c Release + dotnet pack Bootsharp -o .nuget + cd ../js + npm install + bash scripts/build.sh - name: analyze uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/cover.yml b/.github/workflows/cover.yml index f465596a..d4b874b3 100644 --- a/.github/workflows/cover.yml +++ b/.github/workflows/cover.yml @@ -10,19 +10,37 @@ jobs: cover: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: setup dotnet - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v3 with: - dotnet-version: 6.0.x + dotnet-version: 8 + - uses: actions/setup-node@v3 + with: + node-version: 20 - name: cover run: | - dotnet test DotNet/DotNetJS.sln /p:CollectCoverage=true /p:CoverletOutputFormat=opencover - cd JavaScript - npm ci - npm run build - dotnet publish test/csharp/Test.sln - npm install -g nyc - nyc --reporter=lcov -x **/native -x **/bin -x **/dotnet-js-interop.ts npm run test + cd src/js + npm install + bash scripts/build.sh + cd ../cs + dotnet workload restore + mkdir .nuget + dotnet build Bootsharp.Generate -c Release + dotnet build Bootsharp.Common -c Release + dotnet pack Bootsharp.Common -o .nuget + dotnet build -c Release + dotnet pack Bootsharp -o .nuget + dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=opencover + cd ../js/test/cs + dotnet workload restore + dotnet publish -p:BootsharpName=embedded -p:BootsharpEmbedBinaries=true + dotnet publish -p:BootsharpName=sideload -p:BootsharpEmbedBinaries=false + cd ../.. + npm run cover - name: upload coverage reports to Codecov uses: codecov/codecov-action@v3 + with: + fail_ci_if_error: true + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..044f65c8 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,29 @@ +name: publish + +on: + workflow_dispatch: { } + push: + branches: + - main + +jobs: + deploy: + runs-on: ubuntu-latest + permissions: + pages: write + id-token: write + environment: + name: github-pages + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v3 + - name: build + run: | + cd docs + npm install + npm run docs:build + - uses: actions/configure-pages@v3 + - uses: actions/upload-pages-artifact@v2 + with: + path: docs/.vitepress/dist + - uses: actions/deploy-pages@v2 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9c4b81db..3a26e5cf 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -10,25 +10,29 @@ jobs: runs-on: ubuntu-latest steps: - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: setup dotnet - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v3 with: - dotnet-version: 6.0.x - - name: build - run: | - dotnet build DotNet/DotNetJS.sln - cd JavaScript - npm ci - npm run build + dotnet-version: 8 - name: package run: | - cd DotNet - dotnet pack -c Release -o packages + cd src/js + npm install + bash scripts/build.sh + cd ../cs + dotnet workload restore + mkdir .nuget + dotnet build Bootsharp.Generate -c Release + dotnet build Bootsharp.Common -c Release + dotnet pack Bootsharp.Common -o .nuget -c Release + dotnet pack Bootsharp.Inject -o .nuget -c Release + dotnet build -c Release + dotnet pack Bootsharp -o .nuget -c Release - name: publish to nuget run: | - dotnet nuget push "DotNet/packages/DotNetJS*.nupkg" -k ${{ secrets.NUGET_KEY }} -s https://www.nuget.org --skip-duplicate + dotnet nuget push "src/cs/.nuget/Bootsharp*.nupkg" -k ${{ secrets.NUGET_KEY }} -s https://www.nuget.org --skip-duplicate - name: publish to github run: | - dotnet nuget add source https://nuget.pkg.github.com/Elringus/index.json -n github --username Elringus --password ${{ secrets.GH_KEY }} --store-password-in-clear-text - dotnet nuget push "DotNet/packages/DotNetJS*.nupkg" -s github -k ${{ secrets.GH_KEY }} --skip-duplicate + dotnet nuget add source https://nuget.pkg.github.com/elringus/index.json -n github --username Elringus --password ${{ secrets.GH_KEY }} --store-password-in-clear-text + dotnet nuget push "src/cs/.nuget/Bootsharp*.nupkg" -s github -k ${{ secrets.GH_KEY }} --skip-duplicate diff --git a/.gitignore b/.gitignore index 4061ca78..8722cb99 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,13 @@ .vs .idea - -[Bb]in -[Oo]bj -[Pp]ackages - -*.suo -*.user - node_modules +coverage +cache dist -build -.nyc_output - -JavaScript/native/emsdk -JavaScript/native/runtime +bin +obj -!DotNet/DotNetJS/Build +*.suo +*.user +*.nupkg +package-lock.json diff --git a/Assets/PackageIcon.png b/Assets/PackageIcon.png deleted file mode 100644 index 664503523ab68fdc01cb681c8e6cec65306cfe65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19524 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 - - - - - - - - \ No newline at end of file diff --git a/DotNet/DotNetJS.Test/JSRuntimeTest.cs b/DotNet/DotNetJS.Test/JSRuntimeTest.cs deleted file mode 100644 index 4d8fcb5b..00000000 --- a/DotNet/DotNetJS.Test/JSRuntimeTest.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Text.Json.Serialization; -using Xunit; - -namespace DotNetJS.Test; - -public class JSRuntimeTest -{ - [Fact] - public void ConfigureJsonAffectsSerializerOptions () - { - var runtime = new JSRuntime(); - runtime.ConfigureJson(o => o.NumberHandling = JsonNumberHandling.WriteAsString); - Assert.Equal(JsonNumberHandling.WriteAsString, runtime.JsonSerializerOptions.NumberHandling); - } -} diff --git a/DotNet/DotNetJS.Test/JSTest.cs b/DotNet/DotNetJS.Test/JSTest.cs deleted file mode 100644 index cc0d881a..00000000 --- a/DotNet/DotNetJS.Test/JSTest.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Threading.Tasks; -using Xunit; - -namespace DotNetJS.Test; - -public class JSTest -{ - [Fact] - public void CanUseCustomRuntime () - { - var customRuntime = new MockRuntime(); - JS.Runtime = customRuntime; - Assert.Same(customRuntime, JS.Runtime); - } - - [Fact] - public async Task InvokeMethodsAreRoutedToRuntime () - { - JS.Runtime = new MockRuntime(); - Assert.Throws(() => JS.Invoke("")); - Assert.Throws(() => JS.Invoke("")); - await Assert.ThrowsAsync(() => JS.InvokeAsync("").AsTask()); - await Assert.ThrowsAsync(() => JS.InvokeAsync("").AsTask()); - } -} diff --git a/DotNet/DotNetJS.Test/JSTypesTest.cs b/DotNet/DotNetJS.Test/JSTypesTest.cs deleted file mode 100644 index 65918859..00000000 --- a/DotNet/DotNetJS.Test/JSTypesTest.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Xunit; - -namespace DotNetJS.Test; - -public class JSTypesTest -{ - private interface IMock { } - - [Fact] - public void ExportParametersEqualArguments () - { - var types = new[] { typeof(IMock) }; - var attribute = new JSExportAttribute(types, "foo", "bar", "nya", "far"); - Assert.Equal(types, attribute.Types); - Assert.Equal("foo", attribute.NamePattern); - Assert.Equal("bar", attribute.NameReplacement); - Assert.Equal("nya", attribute.InvokePattern); - Assert.Equal("far", attribute.InvokeReplacement); - } - - [Fact] - public void ImportParametersEqualArguments () - { - var types = new[] { typeof(IMock) }; - var attribute = new JSImportAttribute(types, "foo", "bar", "nya", "far"); - Assert.Equal(types, attribute.Types); - Assert.Equal("foo", attribute.NamePattern); - Assert.Equal("bar", attribute.NameReplacement); - Assert.Equal("nya", attribute.InvokePattern); - Assert.Equal("far", attribute.InvokeReplacement); - } -} diff --git a/DotNet/DotNetJS.Test/MockRuntime.cs b/DotNet/DotNetJS.Test/MockRuntime.cs deleted file mode 100644 index 6a5a3c7d..00000000 --- a/DotNet/DotNetJS.Test/MockRuntime.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Threading; -using System.Threading.Tasks; - -namespace DotNetJS.Test; - -[ExcludeFromCodeCoverage] -public class MockRuntime : IJSRuntime -{ - public void ConfigureJson (Action action) - { - throw new NotImplementedException(); - } - - public ValueTask InvokeAsync (string identifier, object[] args) - { - throw new NotImplementedException(); - } - - public ValueTask InvokeAsync (string identifier, CancellationToken cancellationToken, object[] args) - { - throw new NotImplementedException(); - } - - public TResult Invoke (string identifier, object[] args) - { - throw new NotImplementedException(); - } - - public TResult InvokeUnmarshalled (string identifier) - { - throw new NotImplementedException(); - } - - public TResult InvokeUnmarshalled (string identifier, T0 arg0) - { - throw new NotImplementedException(); - } - - public TResult InvokeUnmarshalled (string identifier, T0 arg0, T1 arg1) - { - throw new NotImplementedException(); - } - - public TResult InvokeUnmarshalled (string identifier, T0 arg0, T1 arg1, T2 arg2) - { - throw new NotImplementedException(); - } -} diff --git a/DotNet/DotNetJS.sln b/DotNet/DotNetJS.sln deleted file mode 100644 index 0c7a48ad..00000000 --- a/DotNet/DotNetJS.sln +++ /dev/null @@ -1,45 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetJS", "DotNetJS\DotNetJS.csproj", "{8D23B7D8-3E5D-420D-80FF-6A437B03D303}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Generator", "Generator\Generator.csproj", "{F395C565-EAFD-4F89-A7DD-4CA12761A86B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Packer", "Packer\Packer.csproj", "{4CB73FC6-D64D-470A-8490-7604A292B973}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetJS.Test", "DotNetJS.Test\DotNetJS.Test.csproj", "{AEE52DF2-26C4-479B-B62D-14B58903BCE7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Generator.Test", "Generator.Test\Generator.Test.csproj", "{B17E4577-6391-4669-9B12-083CA18ADF33}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Packer.Test", "Packer.Test\Packer.Test.csproj", "{62571679-675C-4E85-AB3F-5C243920EE6B}" -EndProject -Global - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8D23B7D8-3E5D-420D-80FF-6A437B03D303}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8D23B7D8-3E5D-420D-80FF-6A437B03D303}.Release|Any CPU.Build.0 = Release|Any CPU - {8D23B7D8-3E5D-420D-80FF-6A437B03D303}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8D23B7D8-3E5D-420D-80FF-6A437B03D303}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F395C565-EAFD-4F89-A7DD-4CA12761A86B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F395C565-EAFD-4F89-A7DD-4CA12761A86B}.Release|Any CPU.Build.0 = Release|Any CPU - {F395C565-EAFD-4F89-A7DD-4CA12761A86B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F395C565-EAFD-4F89-A7DD-4CA12761A86B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4CB73FC6-D64D-470A-8490-7604A292B973}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4CB73FC6-D64D-470A-8490-7604A292B973}.Release|Any CPU.Build.0 = Release|Any CPU - {4CB73FC6-D64D-470A-8490-7604A292B973}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4CB73FC6-D64D-470A-8490-7604A292B973}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AEE52DF2-26C4-479B-B62D-14B58903BCE7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AEE52DF2-26C4-479B-B62D-14B58903BCE7}.Release|Any CPU.Build.0 = Release|Any CPU - {AEE52DF2-26C4-479B-B62D-14B58903BCE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AEE52DF2-26C4-479B-B62D-14B58903BCE7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B17E4577-6391-4669-9B12-083CA18ADF33}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B17E4577-6391-4669-9B12-083CA18ADF33}.Release|Any CPU.Build.0 = Release|Any CPU - {B17E4577-6391-4669-9B12-083CA18ADF33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B17E4577-6391-4669-9B12-083CA18ADF33}.Debug|Any CPU.Build.0 = Debug|Any CPU - {62571679-675C-4E85-AB3F-5C243920EE6B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {62571679-675C-4E85-AB3F-5C243920EE6B}.Release|Any CPU.Build.0 = Release|Any CPU - {62571679-675C-4E85-AB3F-5C243920EE6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {62571679-675C-4E85-AB3F-5C243920EE6B}.Debug|Any CPU.Build.0 = Debug|Any CPU - EndGlobalSection - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Release|Any CPU = Release|Any CPU - Debug|Any CPU = Debug|Any CPU - EndGlobalSection -EndGlobal diff --git a/DotNet/DotNetJS/Attributes/JSEventAttribute.cs b/DotNet/DotNetJS/Attributes/JSEventAttribute.cs deleted file mode 100644 index 5834feff..00000000 --- a/DotNet/DotNetJS/Attributes/JSEventAttribute.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; - -namespace DotNetJS; - -/// -/// Applied to a partial method to bind it with an event meant to be -/// broadcast (invoked) in C# and subscribed (listened) to in JavaScript. -/// -[AttributeUsage(AttributeTargets.Method)] -public sealed class JSEventAttribute : Attribute { } diff --git a/DotNet/DotNetJS/Attributes/JSExportAttribute.cs b/DotNet/DotNetJS/Attributes/JSExportAttribute.cs deleted file mode 100644 index 5bcb5470..00000000 --- a/DotNet/DotNetJS/Attributes/JSExportAttribute.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; - -namespace DotNetJS; - -/// -/// When applied to WASM entry point assembly, specified interfaces will -/// be automatically exported for consumption on JavaScript side. -/// -/// -/// Generated bindings have to be initialized with the handler implementation. -/// For example, given 'IHandler' interface is exported, 'JSHandler' class will be generated, -/// which has to be instantiated with an 'IHandler' implementation instance. -/// -[AttributeUsage(AttributeTargets.Assembly)] -public sealed class JSExportAttribute : JSTypeAttribute -{ - /// - public JSExportAttribute (Type[] types, - string? namePattern = null, string? nameReplacement = null, - string? invokePattern = null, string? invokeReplacement = null) - : base(types, namePattern, nameReplacement, invokePattern, invokeReplacement) { } -} diff --git a/DotNet/DotNetJS/Attributes/JSFunctionAttribute.cs b/DotNet/DotNetJS/Attributes/JSFunctionAttribute.cs deleted file mode 100644 index 9349c62d..00000000 --- a/DotNet/DotNetJS/Attributes/JSFunctionAttribute.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; - -namespace DotNetJS; - -/// -/// Applied to a partial method to bind it with a JavaScript function. -/// The implementation is expected to be assigned as 'dotnet.Namespace.Method = function'. -/// -[AttributeUsage(AttributeTargets.Method)] -public sealed class JSFunctionAttribute : Attribute { } diff --git a/DotNet/DotNetJS/Attributes/JSImportAttribute.cs b/DotNet/DotNetJS/Attributes/JSImportAttribute.cs deleted file mode 100644 index d5ad0c2c..00000000 --- a/DotNet/DotNetJS/Attributes/JSImportAttribute.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; - -namespace DotNetJS; - -/// -/// When applied to WASM entry point assembly, JavaScript bindings for the specified interfaces -/// will be automatically generated for consumption on C# side. -/// -/// -/// Generated bindings have to be implemented on JavaScript side. -/// For example, given 'IFrontend' interface is imported, 'JSFrontend' class will be generated, -/// which has to be implemented in JavaScript. -/// -[AttributeUsage(AttributeTargets.Assembly)] -public sealed class JSImportAttribute : JSTypeAttribute -{ - /// - public JSImportAttribute (Type[] types, - string? namePattern = null, string? nameReplacement = null, - string? invokePattern = null, string? invokeReplacement = null) - : base(types, namePattern, nameReplacement, invokePattern, invokeReplacement) { } -} diff --git a/DotNet/DotNetJS/Attributes/JSTypeAttribute.cs b/DotNet/DotNetJS/Attributes/JSTypeAttribute.cs deleted file mode 100644 index 94cd0a97..00000000 --- a/DotNet/DotNetJS/Attributes/JSTypeAttribute.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; - -namespace DotNetJS; - -/// -/// The attribute for automatic JS bindings generation of specified types. -/// -public abstract class JSTypeAttribute : Attribute -{ - /// - /// The types to generated bindings for. - /// - public Type[] Types { get; } - /// - /// Regex pattern to match generated method names. - /// - public string? NamePattern { get; } - /// - /// Replacement for the pattern matches of the generated method names. - /// - public string? NameReplacement { get; } - /// - /// Regex pattern to match generated method invocations. - /// - public string? InvokePattern { get; } - /// - /// Replacement for the pattern matches of the generated method invocations. - /// - public string? InvokeReplacement { get; } - - /// The types to generated bindings for. - /// Regex pattern to match generated method names. - /// Replacement for the pattern matches of the generated method names. - /// Regex pattern to match generated method invocations. - /// Replacement for the pattern matches of the generated method invocations. - protected JSTypeAttribute (Type[] types, - string? namePattern = null, string? nameReplacement = null, - string? invokePattern = null, string? invokeReplacement = null) - { - Types = types; - NamePattern = namePattern; - NameReplacement = nameReplacement; - InvokePattern = invokePattern; - InvokeReplacement = invokeReplacement; - } -} diff --git a/DotNet/DotNetJS/Build/DotNetJS.targets b/DotNet/DotNetJS/Build/DotNetJS.targets deleted file mode 100644 index 028c0f7c..00000000 --- a/DotNet/DotNetJS/Build/DotNetJS.targets +++ /dev/null @@ -1,32 +0,0 @@ - - - - Release - true - true - true - false - false - false - $(MSBuildThisFileDirectory)../tasks/Packer.dll - $(MSBuildThisFileDirectory)../js - $(JSDir)/dotnet.wasm - - - - - - - - - - - - - diff --git a/DotNet/DotNetJS/Build/DotNetJSLinker.xml b/DotNet/DotNetJS/Build/DotNetJSLinker.xml deleted file mode 100644 index 448ffe44..00000000 --- a/DotNet/DotNetJS/Build/DotNetJSLinker.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/DotNet/DotNetJS/DotNetJS.csproj b/DotNet/DotNetJS/DotNetJS.csproj deleted file mode 100644 index 7c01bb13..00000000 --- a/DotNet/DotNetJS/DotNetJS.csproj +++ /dev/null @@ -1,51 +0,0 @@ - - - - net6.0 - DotNetJS - DotNetJS - DotNetJS - 0.23.4 - Elringus - Consume C# in JavaScript with comfort: single-file UMD library, auto-generated 2-way bindings and type definitions. - js umd wasm bindings interop codegen - https://github.com/Elringus/DotNetJS.git - git - https://github.com/Elringus/DotNetJS - https://raw.githubusercontent.com/Elringus/DotNetJS/feat/desc/Assets/PackageIcon.svg?sanitize=true - PackageIcon.png - MIT - false - true - README.md - NU5100 - enable - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DotNet/DotNetJS/IJSRuntime.cs b/DotNet/DotNetJS/IJSRuntime.cs deleted file mode 100644 index fba5c445..00000000 --- a/DotNet/DotNetJS/IJSRuntime.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Text.Json; -using Microsoft.JSInterop; - -namespace DotNetJS; - -/// -public interface IJSRuntime : IJSInProcessRuntime, IJSUnmarshalledRuntime -{ - /// - /// Overrides default JSON serializer options used for marshalling the interop data. - /// - /// An action to invoke over the serializer options. - void ConfigureJson (Action action); -} diff --git a/DotNet/DotNetJS/JS.cs b/DotNet/DotNetJS/JS.cs deleted file mode 100644 index ec17da69..00000000 --- a/DotNet/DotNetJS/JS.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Threading.Tasks; -using Microsoft.JSInterop; - -namespace DotNetJS; - -/// -/// Provides interop with JavaScript. -/// -public static class JS -{ - /// - /// JavaScript runtime instance used for interop. - /// - public static IJSRuntime Runtime { get; set; } = new JSRuntime(); - - /// - /// Invokes a global JavaScript function with the provided name and arguments. - /// - /// Name of the function to invoke. - /// JSON-serializable arguments for the function. - public static void Invoke (string name, params object[] args) => Runtime.InvokeVoid(name, args); - - /// - /// Invokes a global JavaScript function with the provided name and arguments. - /// - /// Name of the function to invoke. - /// JSON-serializable arguments for the function. - /// Expected return type of the function. - /// The result of the function invocation. - public static T Invoke (string name, params object[] args) => Runtime.Invoke(name, args); - - /// - /// Invokes a global asynchronous JavaScript function with the provided name and arguments. - /// - /// Name of the function to invoke. - /// JSON-serializable arguments for the function. - /// A task that resolves when the asynchronous function returns. - public static ValueTask InvokeAsync (string name, params object[] args) => Runtime.InvokeVoidAsync(name, args); - - /// - /// Invokes a global asynchronous JavaScript function with the provided name and arguments. - /// - /// Name of the function to invoke. - /// JSON-serializable arguments for the function. - /// Expected return type of the function. - /// A task with the result that resolves when the asynchronous function returns. - public static ValueTask InvokeAsync (string name, params object[] args) => Runtime.InvokeAsync(name, args); -} diff --git a/DotNet/DotNetJS/JSRuntime.cs b/DotNet/DotNetJS/JSRuntime.cs deleted file mode 100644 index 1c34b9ce..00000000 --- a/DotNet/DotNetJS/JSRuntime.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Diagnostics.CodeAnalysis; -using System.Reflection; -using System.Text.Json; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.JSInterop.WebAssembly; - -namespace DotNetJS; - -/// -public class JSRuntime : IJSRuntime -{ - /// - /// JSON serializer options of the JS interop runtime. - /// - public JsonSerializerOptions JsonSerializerOptions { get; } - - private readonly WebAssemblyJSRuntime defaultRuntime; - - /// - /// Constructs new instance of the JS interop runtime. - /// - public JSRuntime () - { - defaultRuntime = GetDefaultRuntime(); - JsonSerializerOptions = GetJsonSerializerOptions(defaultRuntime); - } - - /// - public void ConfigureJson (Action action) - { - action.Invoke(JsonSerializerOptions); - } - - /// - [ExcludeFromCodeCoverage] - public ValueTask InvokeAsync (string identifier, object?[]? args) - => defaultRuntime.InvokeAsync(identifier, args); - - /// - [ExcludeFromCodeCoverage] - public ValueTask InvokeAsync (string identifier, CancellationToken cancellationToken, object?[]? args) - => defaultRuntime.InvokeAsync(identifier, cancellationToken, args); - - /// - [ExcludeFromCodeCoverage] - public TResult Invoke (string identifier, params object?[]? args) - => defaultRuntime.Invoke(identifier, args); - - /// - [ExcludeFromCodeCoverage] - public TResult InvokeUnmarshalled (string identifier) - => defaultRuntime.InvokeUnmarshalled(identifier); - - /// - [ExcludeFromCodeCoverage] - public TResult InvokeUnmarshalled (string identifier, T0 arg0) - => defaultRuntime.InvokeUnmarshalled(identifier, arg0); - - /// - [ExcludeFromCodeCoverage] - public TResult InvokeUnmarshalled (string identifier, T0 arg0, T1 arg1) - => defaultRuntime.InvokeUnmarshalled(identifier, arg0, arg1); - - /// - [ExcludeFromCodeCoverage] - public TResult InvokeUnmarshalled (string identifier, T0 arg0, T1 arg1, T2 arg2) - => defaultRuntime.InvokeUnmarshalled(identifier, arg0, arg1, arg2); - - private static WebAssemblyJSRuntime GetDefaultRuntime () - { - var assembly = Assembly.Load("Microsoft.AspNetCore.Components.WebAssembly"); - var type = assembly.GetType("Microsoft.AspNetCore.Components.WebAssembly.Services.DefaultWebAssemblyJSRuntime"); - return (WebAssemblyJSRuntime)type!.GetField("Instance", BindingFlags.Static | BindingFlags.NonPublic)!.GetValue(null)!; - } - - private static JsonSerializerOptions GetJsonSerializerOptions (WebAssemblyJSRuntime runtime) - { - return (JsonSerializerOptions)typeof(Microsoft.JSInterop.JSRuntime).GetProperty("JsonSerializerOptions", - BindingFlags.Instance | BindingFlags.NonPublic)!.GetValue(runtime)!; - } -} diff --git a/DotNet/Generator.Test/EventTest.cs b/DotNet/Generator.Test/EventTest.cs deleted file mode 100644 index 69ce3d6c..00000000 --- a/DotNet/Generator.Test/EventTest.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Collections.Generic; - -namespace Generator.Test; - -public static class EventTest -{ - public static IEnumerable Data { get; } = new[] { - new object[] { - @" -partial class Foo -{ - [JSEvent] - partial void OnBar (); -}", - @" -partial class Foo -{ - partial void OnBar () => JS.Invoke(""dotnet.Bindings.onBar.broadcast""); -} -" - }, - new object[] { - @" -namespace Space; - -public static partial class Foo -{ - [JSEvent] - public static partial void OnBar (string a, int b); -}", - @" -namespace Space; - -public static partial class Foo -{ - public static partial void OnBar (string a, int b) => JS.Invoke(""dotnet.Space.onBar.broadcast"", new object[] { a, b }); -} -" - } - }; -} diff --git a/DotNet/Generator.Test/ExportTest.cs b/DotNet/Generator.Test/ExportTest.cs deleted file mode 100644 index f3766ccb..00000000 --- a/DotNet/Generator.Test/ExportTest.cs +++ /dev/null @@ -1,115 +0,0 @@ -using System.Collections.Generic; - -namespace Generator.Test; - -public static class ExportTest -{ - public static IEnumerable Data { get; } = new[] { - new object[] { - @" -using DotNetJS; -using System.Threading.Tasks; - -[assembly:JSExport(new[] { typeof(Bindings.IFoo) })] - -namespace Bindings; - -public readonly record struct Item(); - -public interface IFoo -{ - void Foo (string? foo); - ValueTask Bar (); - Item? Baz (); - Task Nya (); - string[] Far (int[] far); -} -", - @" -using Microsoft.JSInterop; - -namespace Foo; - -public class JSFoo -{ - private static global::Bindings.IFoo handler = null!; - - public JSFoo (global::Bindings.IFoo handler) - { - JSFoo.handler = handler; - } - - [JSInvokable] public static void Foo (global::System.String? foo) => handler.Foo(foo); - [JSInvokable] public static global::System.Threading.Tasks.ValueTask Bar () => handler.Bar(); - [JSInvokable] public static global::Bindings.Item? Baz () => handler.Baz(); - [JSInvokable] public static global::System.Threading.Tasks.Task Nya () => handler.Nya(); - [JSInvokable] public static global::System.String[] Far (global::System.Int32[] far) => handler.Far(far); -} -" - }, - new object[] { - @" -using DotNetJS; - -[assembly:JSExport(new[] { typeof(Bindings.IFoo) }, ""Foo"", ""Bar"", ""(.+)"", ""Try($1)"")] - -namespace Bindings; - -public interface IFoo -{ - void Foo (string foo); -} -", - @" -using Microsoft.JSInterop; - -namespace Foo; - -public class JSFoo -{ - private static global::Bindings.IFoo handler = null!; - - public JSFoo (global::Bindings.IFoo handler) - { - JSFoo.handler = handler; - } - - [JSInvokable] public static void Bar (global::System.String foo) => Try(handler.Foo(foo)); -} -" - }, - new object[] { - @" -using DotNetJS; -using Microsoft.JSInterop; - -[assembly:JSNamespace(@""Foo"", ""Bar"")] -[assembly:JSExport(new[] { typeof(A.B.C.IFoo) })] - -namespace A.B.C; - -public interface IFoo -{ - void Foo (); -} -", - @" -using Microsoft.JSInterop; - -namespace Foo; - -public class JSFoo -{ - private static global::A.B.C.IFoo handler = null!; - - public JSFoo (global::A.B.C.IFoo handler) - { - JSFoo.handler = handler; - } - - [JSInvokable] public static void Foo () => handler.Foo(); -} -" - } - }; -} diff --git a/DotNet/Generator.Test/FunctionTest.cs b/DotNet/Generator.Test/FunctionTest.cs deleted file mode 100644 index 123d4c27..00000000 --- a/DotNet/Generator.Test/FunctionTest.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System.Collections.Generic; - -namespace Generator.Test; - -public static class FunctionTest -{ - public static IEnumerable Data { get; } = new[] { - new object[] { - @" -using DotNetJS; - -partial class Foo -{ - [JSFunction] - partial void Bar (); -}", - @" -using DotNetJS; - -partial class Foo -{ - partial void Bar () => JS.Invoke(""dotnet.Bindings.bar""); -} -" - }, - new object[] { - @" -using System.Threading.Tasks; - -namespace File.Scoped; - -public static partial class Foo -{ - [JSFunction] - private static partial Task BarAsync (string a, int b); -}", - @" -using System.Threading.Tasks; - -namespace File.Scoped; - -public static partial class Foo -{ - private static partial Task BarAsync (string a, int b) => JS.InvokeAsync(""dotnet.File.Scoped.barAsync"", new object[] { a, b }).AsTask(); -} -" - }, - new object[] { - @" -using System.Threading.Tasks; - -namespace File.Scoped; - -public static partial class Foo -{ - [JSFunction] - private static partial Task BarAsync (); -}", - @" -using System.Threading.Tasks; - -namespace File.Scoped; - -public static partial class Foo -{ - private static partial Task BarAsync () => JS.InvokeAsync(""dotnet.File.Scoped.barAsync"").AsTask(); -} -" - }, - new object[] { - @" -using System; -using System.Threading.Tasks; - -namespace Classic -{ - partial class Foo - { - [JSFunction] - partial DateTime GetTime (DateTime time); - [JSFunction] - partial ValueTask GetTimeAsync (DateTime time); - } -}", - @" -using System; -using System.Threading.Tasks; - -namespace Classic -{ -partial class Foo -{ - partial DateTime GetTime (DateTime time) => JS.Invoke(""dotnet.Classic.getTime"", new object[] { time }); - partial ValueTask GetTimeAsync (DateTime time) => JS.InvokeAsync(""dotnet.Classic.getTimeAsync"", new object[] { time }); -} -} -" - }, - new object[] { - @" -using DotNetJS; - -[assembly:JSNamespace(@""A\.B\.(\S+)"", ""$1"")] - -namespace A.B.C; - -public partial class Foo -{ - [JSFunction] - public static partial void OnFun (Foo foo); -}", - @" -using DotNetJS; - -namespace A.B.C; - -public partial class Foo -{ - public static partial void OnFun (Foo foo) => JS.Invoke(""dotnet.C.onFun"", new object[] { foo }); -} -" - } - }; -} diff --git a/DotNet/Generator.Test/GeneratorTest.cs b/DotNet/Generator.Test/GeneratorTest.cs deleted file mode 100644 index f33feaff..00000000 --- a/DotNet/Generator.Test/GeneratorTest.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System.Text; -using System.Threading.Tasks; -using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.CSharp.Testing; -using Microsoft.CodeAnalysis.Testing; -using Microsoft.CodeAnalysis.Testing.Verifiers; -using Microsoft.CodeAnalysis.Text; -using Xunit; - -namespace Generator.Test; - -public class GeneratorTest -{ - private class Verifier : CSharpSourceGeneratorTest - where T : ISourceGenerator, new() - { - protected override bool IsCompilerDiagnosticIncluded (Diagnostic _, CompilerDiagnostics __) => false; - } - - private readonly Verifier verifier = new(); - - [Fact] - public async Task WhenSourceIsEmptyNothingIsGenerated () - { - verifier.TestCode = ""; - await verifier.RunAsync(); - } - - [Fact] - public async Task WhenNoFunctionClassesNothingIsGenerated () - { - verifier.TestCode = "partial class Foo { }"; - await verifier.RunAsync(); - } - - [Fact] - public async Task WhenAttributeIsFromOtherNamespaceItsIgnored () - { - verifier.TestCode = @" -[assembly:JSNamespace(@""Foo"", ""Bar"")] -public class JSNamespaceAttribute : System.Attribute { public JSNamespaceAttribute (string _, string __) { } } -"; - await verifier.RunAsync(); - } - - [Theory, MemberData(nameof(FunctionTest.Data), MemberType = typeof(FunctionTest))] - public Task PartialFunctionsAreImplemented (string source, string expected) - => Verify(source, expected, "FooFunctions.g.cs"); - - [Theory, MemberData(nameof(EventTest.Data), MemberType = typeof(EventTest))] - public Task PartialEventsAreImplemented (string source, string expected) - => Verify(source, expected, "FooEvents.g.cs"); - - [Theory, MemberData(nameof(ExportTest.Data), MemberType = typeof(ExportTest))] - public Task ExportTypesAreGenerated (string source, string expected) - => Verify(source, expected, "IFooExport.g.cs"); - - [Theory, MemberData(nameof(ImportTest.Data), MemberType = typeof(ImportTest))] - public Task ImportTypesAreGenerated (string source, string expected) - => Verify(source, expected, "IFooImport.g.cs"); - - private Task Verify (string source, string expected, string file) - { - expected = "#nullable enable\n#pragma warning disable\n" + - expected + - "\n#pragma warning restore\n#nullable restore\n"; - verifier.TestCode = source; - verifier.TestState.Sources.Add(("DotNetJS.cs", @" -using System; - -namespace DotNetJS; - -public class JSNamespaceAttribute : Attribute { public JSNamespaceAttribute (string _, string __) { } } -public class JSExportAttribute : Attribute { public JSExportAttribute (Type[] _, string __ = null, string ___ = null, string ____ = null, string _____ = null) { } } -public class JSImportAttribute : Attribute { public JSImportAttribute (Type[] _, string __ = null, string ___ = null, string ____ = null, string _____ = null) { } } -public class JSFunctionAttribute : Attribute { } -public class JSEventAttribute : Attribute { } - -")); - var expectedText = SourceText.From(expected, Encoding.UTF8); - verifier.TestState.GeneratedSources.Add((typeof(SourceGenerator), file, expectedText)); - return verifier.RunAsync(); - } -} diff --git a/DotNet/Generator.Test/ImportTest.cs b/DotNet/Generator.Test/ImportTest.cs deleted file mode 100644 index bd507bbf..00000000 --- a/DotNet/Generator.Test/ImportTest.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System.Collections.Generic; - -namespace Generator.Test; - -public static class ImportTest -{ - public static IEnumerable Data { get; } = new[] { - new object[] { - @" -using DotNetJS; -using System.Threading.Tasks; - -[assembly:JSImport(new[] { typeof(Bindings.IFoo) })] - -namespace Bindings; - -public interface IFoo -{ - void NotifyFoo (string foo); - bool Bar (); - ValueTask Nya (); - Task Far (); -} -", - @" -using DotNetJS; - -namespace Foo; - -public class JSFoo : global::Bindings.IFoo -{ - [JSEvent] public static void NotifyFoo (global::System.String foo) => JS.Invoke(""dotnet.Foo.notifyFoo.broadcast"", new object[] { foo }); - [JSFunction] public static global::System.Boolean Bar () => JS.Invoke(""dotnet.Foo.bar""); - [JSFunction] public static global::System.Threading.Tasks.ValueTask Nya () => JS.InvokeAsync(""dotnet.Foo.nya""); - [JSFunction] public static global::System.Threading.Tasks.Task Far () => JS.InvokeAsync(""dotnet.Foo.far"").AsTask(); - - void global::Bindings.IFoo.NotifyFoo (global::System.String foo) => NotifyFoo(foo); - global::System.Boolean global::Bindings.IFoo.Bar () => Bar(); - global::System.Threading.Tasks.ValueTask global::Bindings.IFoo.Nya () => Nya(); - global::System.Threading.Tasks.Task global::Bindings.IFoo.Far () => Far(); -} -" - }, - new object[] { - @" -using DotNetJS; - -[assembly:JSImport(new[] { typeof(Bindings.IFoo) }, ""Notify(.+)"", ""On$1"", ""(.+)"", ""Try($1)"")] - -namespace Bindings; - -public interface IFoo -{ - void NotifyFoo (string foo); - bool Bar (); -} -", - @" -using DotNetJS; - -namespace Foo; - -public class JSFoo : global::Bindings.IFoo -{ - [JSEvent] public static void OnFoo (global::System.String foo) => Try(JS.Invoke(""dotnet.Foo.onFoo.broadcast"", new object[] { foo })); - [JSFunction] public static global::System.Boolean Bar () => Try(JS.Invoke(""dotnet.Foo.bar"")); - - void global::Bindings.IFoo.NotifyFoo (global::System.String foo) => OnFoo(foo); - global::System.Boolean global::Bindings.IFoo.Bar () => Bar(); -} -" - }, - new object[] { - @" -using DotNetJS; - -[assembly:JSNamespace(@""Foo"", ""Bar"")] -[assembly:JSImport(new[] { typeof(A.B.C.IFoo) })] - -namespace A.B.C; - -public interface IFoo -{ - void F (); -} -", - @" -using DotNetJS; - -namespace Foo; - -public class JSFoo : global::A.B.C.IFoo -{ - [JSFunction] public static void F () => JS.Invoke(""dotnet.Bar.f""); - - void global::A.B.C.IFoo.F () => F(); -} -" - }, - new object[] { - @" -using DotNetJS; - -[assembly:JSImport(new[] { typeof(IFoo) }, ""Foo"", null, ""Foo"", null)] - -public interface IFoo -{ - void Foo (); -} -", - @" -using DotNetJS; - -namespace Foo; - -public class JSFoo : global::Bindings.IFoo -{ - [JSFunction] public static void Foo () => JS.Invoke(""dotnet.Foo.foo""); - - void global::Bindings.IFoo.Foo () => Foo(); -} -" - }, - }; -} diff --git a/DotNet/Generator/Common.cs b/DotNet/Generator/Common.cs deleted file mode 100644 index 1cbebf56..00000000 --- a/DotNet/Generator/Common.cs +++ /dev/null @@ -1,142 +0,0 @@ -using System.Collections.Immutable; -using System.Linq; -using System.Text.RegularExpressions; -using Microsoft.CodeAnalysis; - -namespace Generator -{ - internal static class Common - { - public const string FunctionAttribute = "JSFunctionAttribute"; - public const string EventAttribute = "JSEventAttribute"; - public const string ExportAttribute = "JSExportAttribute"; - public const string ImportAttribute = "JSImportAttribute"; - public const string NamespaceAttribute = "JSNamespaceAttribute"; - - public static string MuteNullableWarnings (string source) - { - return "#nullable enable\n#pragma warning disable\n\n" + - source + - "\n\n#pragma warning restore\n#nullable restore\n"; - } - - public static string BuildBindingType (ITypeSymbol type) - { - return $"JS{type.Name.Substring(1)}"; - } - - public static string BuildBindingNamespace (ITypeSymbol type) - { - return type.Name.Substring(1); - } - - public static string BuildFullName (ITypeSymbol type) - { - if (type.SpecialType == SpecialType.System_Void) return "void"; - if (type is IArrayTypeSymbol arrayType) return $"{BuildFullName(arrayType.ElementType)}[]"; - var nullable = type.NullableAnnotation == NullableAnnotation.Annotated ? "?" : ""; - if (IsGeneric(type, out var args)) return BuildGeneric(type, args) + nullable; - return $"global::{ResolveNamespace(type)}.{type.Name}{nullable}"; - - static string BuildGeneric (ITypeSymbol type, ImmutableArray args) - { - if (type.OriginalDefinition.SpecialType == SpecialType.System_Nullable_T) return BuildFullName(args[0]); - return $"global::{ResolveNamespace(type)}.{type.Name}<{string.Join(", ", args.Select(BuildFullName))}>"; - } - } - - public static string BuildInvoke (IMethodSymbol method, string methodName, Compilation compilation) - { - var @event = IsEvent(method); - var async = method.ReturnType.Name == "ValueTask" || method.ReturnType.Name == "Task"; - var assembly = ConvertNamespace(BuildBindingNamespace(method.ContainingType), compilation.Assembly); - var invokeMethod = GetInvokeMethod(); - var invokeParameters = GetInvokeParameters(); - var convertTask = method.ReturnType.Name == "Task" ? ".AsTask()" : ""; - return $"JS.{invokeMethod}({invokeParameters}){convertTask}"; - - string GetInvokeMethod () - { - if (method.ReturnsVoid) return "Invoke"; - if (async && IsGeneric(method.ReturnType, out var args)) - return $"InvokeAsync<{string.Join(", ", args.Select(BuildFullName))}>"; - if (async) return "InvokeAsync"; - return $"Invoke<{BuildFullName(method.ReturnType)}>"; - } - - string GetInvokeParameters () - { - var parameters = method.Parameters.Select(p => p.Name).ToArray(); - var args = $"\"dotnet.{assembly}.{ToFirstLower(methodName)}{(@event ? ".broadcast" : "")}\""; - if (parameters.Length == 0) return args; - args += $", new object[] {{ {string.Join(", ", parameters)} }}"; - return args; - } - } - - public static bool IsEvent (IMethodSymbol method) - { - return method.Name.StartsWith("Notify"); - } - - public static bool IsGeneric (ITypeSymbol type, out ImmutableArray args) - { - args = type is INamedTypeSymbol { IsGenericType: true } named ? named.TypeArguments : default; - return args != default; - } - - public static string ResolveNamespace (ISymbol symbol) - { - if (symbol.ContainingNamespace.IsGlobalNamespace) return "Bindings"; - return string.Join(".", symbol.ContainingNamespace.ConstituentNamespaces); - } - - public static string ConvertNamespace (string space, IAssemblySymbol assembly) - { - foreach (var attribute in assembly.GetAttributes().Where(IsNamespaceAttribute)) - space = Convert(space, attribute); - return space; - - static string Convert (string space, AttributeData attribute) - { - var pattern = (string)attribute.ConstructorArguments[0].Value; - var replacement = (string)attribute.ConstructorArguments[1].Value; - return Regex.Replace(space, pattern, replacement); - } - } - - public static string ConvertMethodName (string name, AttributeData attribute) - { - if (string.IsNullOrEmpty(attribute.ConstructorArguments.ElementAtOrDefault(1).Value as string) || - string.IsNullOrEmpty(attribute.ConstructorArguments.ElementAtOrDefault(2).Value as string)) - return name; - return Regex.Replace(name, - (string)attribute.ConstructorArguments[1].Value, - (string)attribute.ConstructorArguments[2].Value); - } - - public static string ConvertMethodInvocation (string body, AttributeData attribute) - { - if (string.IsNullOrEmpty(attribute.ConstructorArguments.ElementAtOrDefault(3).Value as string) || - string.IsNullOrEmpty(attribute.ConstructorArguments.ElementAtOrDefault(4).Value as string)) - return body; - return Regex.Replace(body, - (string)attribute.ConstructorArguments[3].Value, - (string)attribute.ConstructorArguments[4].Value); - } - - public static bool IsExportAttribute (AttributeData attribute) => IsJSAttribute(attribute, ExportAttribute); - public static bool IsImportAttribute (AttributeData attribute) => IsJSAttribute(attribute, ImportAttribute); - public static bool IsNamespaceAttribute (AttributeData attribute) => IsJSAttribute(attribute, NamespaceAttribute); - - public static bool IsJSAttribute (AttributeData attribute, string name) => - attribute.AttributeClass!.ContainingNamespace.Name == "DotNetJS" && - attribute.AttributeClass.Name == name; - - public static string ToFirstLower (string value) - { - if (value.Length == 1) char.ToLowerInvariant(value[0]); - return char.ToLowerInvariant(value[0]) + value.Substring(1); - } - } -} diff --git a/DotNet/Generator/Emitters/ExportType.cs b/DotNet/Generator/Emitters/ExportType.cs deleted file mode 100644 index 33a54699..00000000 --- a/DotNet/Generator/Emitters/ExportType.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.CodeAnalysis; -using static Generator.Common; - -namespace Generator -{ - internal class ExportType - { - public string Name { get; } - - private readonly ITypeSymbol type; - private readonly AttributeData attribute; - - public ExportType (ITypeSymbol type, AttributeData attribute) - { - this.type = type; - this.attribute = attribute; - Name = type.Name; - } - - public static IEnumerable Resolve (IAssemblySymbol assembly) => - assembly.GetAttributes().FirstOrDefault(IsExportAttribute) is { } attribute - ? attribute.ConstructorArguments[0].Values - .Select(v => v.Value).OfType() - .Where(t => t.TypeKind == TypeKind.Interface) - .Select(t => new ExportType(t, attribute)) - : Array.Empty(); - - public string EmitSource () - { - var specType = BuildFullName(type); - var implType = BuildBindingType(type); - - return MuteNullableWarnings($@"using Microsoft.JSInterop; - -namespace {BuildBindingNamespace(type)}; - -public class {implType} -{{ - private static {specType} handler = null!; - - public {implType} ({specType} handler) - {{ - {implType}.handler = handler; - }} - - {string.Join("\n ", type.GetMembers().OfType().Select(EmitMethod))} -}}"); - string EmitMethod (IMethodSymbol method) - { - return $"[JSInvokable] public static {EmitSignature()} => {EmitBody()};"; - - string EmitSignature () - { - var methodName = ConvertMethodName(method.Name, attribute); - var args = method.Parameters.Select(p => $"{BuildFullName(p.Type)} {p.Name}"); - return $"{BuildFullName(method.ReturnType)} {methodName} ({string.Join(", ", args)})"; - } - - string EmitBody () - { - var args = method.Parameters.Select(p => p.Name); - var body = $"handler.{method.Name}({string.Join(", ", args)})"; - return ConvertMethodInvocation(body, attribute); - } - } - } - } -} diff --git a/DotNet/Generator/Emitters/ImportType.cs b/DotNet/Generator/Emitters/ImportType.cs deleted file mode 100644 index bd8ab4cb..00000000 --- a/DotNet/Generator/Emitters/ImportType.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.CodeAnalysis; -using static Generator.Common; - -namespace Generator -{ - internal class ImportType - { - public string Name { get; } - - private readonly ITypeSymbol type; - private readonly AttributeData attribute; - - public ImportType (ITypeSymbol type, AttributeData attribute) - { - this.type = type; - this.attribute = attribute; - Name = type.Name; - } - - public static IEnumerable Resolve (IAssemblySymbol assembly) => - assembly.GetAttributes().FirstOrDefault(IsImportAttribute) is { } attribute - ? attribute.ConstructorArguments[0].Values - .Select(v => v.Value).OfType() - .Where(t => t.TypeKind == TypeKind.Interface) - .Select(t => new ImportType(t, attribute)) - : Array.Empty(); - - public string EmitSource (Compilation compilation) - { - var specType = BuildFullName(type); - var implType = BuildBindingType(type); - var methods = type.GetMembers().OfType().ToArray(); - - return MuteNullableWarnings($@"using DotNetJS; - -namespace {BuildBindingNamespace(type)}; - -public class {implType} : {specType} -{{ - {string.Join("\n ", methods.Select(EmitBinding))} - - {string.Join("\n ", methods.Select(EmitSpec))} -}}"); - string EmitBinding (IMethodSymbol method) - { - var methodName = ConvertMethodName(method.Name, attribute); - return $"{EmitAttribute()} public static {EmitSignature()} => {EmitBody()};"; - - string EmitAttribute () => IsEvent(method) ? "[JSEvent]" : "[JSFunction]"; - - string EmitSignature () - { - var args = method.Parameters.Select(p => $"{BuildFullName(p.Type)} {p.Name}"); - return $"{BuildFullName(method.ReturnType)} {methodName} ({string.Join(", ", args)})"; - } - - string EmitBody () - { - var body = BuildInvoke(method, methodName, compilation); - return ConvertMethodInvocation(body, attribute); - } - } - - string EmitSpec (IMethodSymbol method) - { - return $"{EmitSignature()} => {EmitBody()};"; - - string EmitSignature () - { - var args = method.Parameters.Select(p => $"{BuildFullName(p.Type)} {p.Name}"); - return $"{BuildFullName(method.ReturnType)} {specType}.{method.Name} ({string.Join(", ", args)})"; - } - - string EmitBody () - { - var methodName = ConvertMethodName(method.Name, attribute); - var args = method.Parameters.Select(p => p.Name); - return $"{methodName}({string.Join(", ", args)})"; - } - } - } - } -} diff --git a/DotNet/Generator/Emitters/PartialClass.cs b/DotNet/Generator/Emitters/PartialClass.cs deleted file mode 100644 index 0e629e50..00000000 --- a/DotNet/Generator/Emitters/PartialClass.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.CSharp.Syntax; -using static Generator.Common; - -namespace Generator -{ - internal class PartialClass - { - public string Name { get; } - - private readonly ClassDeclarationSyntax syntax; - private readonly IReadOnlyList methods; - - public PartialClass (ClassDeclarationSyntax syntax, IReadOnlyList methods) - { - this.syntax = syntax; - this.methods = methods; - Name = syntax.Identifier.ToString(); - } - - public string EmitSource (Compilation compilation) - { - return MuteNullableWarnings( - EmitUsings() + - WrapNamespace( - EmitHeader() + - EmitMethods(compilation) + - EmitFooter() - ) - ); - } - - private string EmitUsings () - { - var imports = syntax.SyntaxTree.GetRoot().DescendantNodesAndSelf().OfType(); - var result = string.Join("\n", imports); - return string.IsNullOrEmpty(result) ? "" : result + "\n\n"; - } - - private string EmitHeader () => $"{syntax.Modifiers} class {syntax.Identifier}\n{{\n"; - - private string EmitMethods (Compilation compilation) - { - var sources = methods.Select(m => " " + m.EmitSource(compilation)); - return string.Join("\n", sources); - } - - private string EmitFooter () => "\n}"; - - private string WrapNamespace (string source) - { - if (syntax.Parent is NamespaceDeclarationSyntax space) - return $"namespace {space.Name}\n{{\n{source}\n}}"; - if (syntax.Parent is FileScopedNamespaceDeclarationSyntax fileSpace) - return $"namespace {fileSpace.Name};\n\n{source}"; - return source; - } - } -} diff --git a/DotNet/Generator/Emitters/PartialMethod.cs b/DotNet/Generator/Emitters/PartialMethod.cs deleted file mode 100644 index 841e3c93..00000000 --- a/DotNet/Generator/Emitters/PartialMethod.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System.Linq; -using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.CSharp.Syntax; -using static Generator.Common; - -namespace Generator -{ - // TODO: Refactor to re-use Common.BuildInvoke (resolving symbols from compilation not working in JavaScript/test/csproj). - - internal class PartialMethod - { - private readonly MethodDeclarationSyntax syntax; - private readonly bool @event; - - public PartialMethod (MethodDeclarationSyntax syntax, bool @event) - { - this.syntax = syntax; - this.@event = @event; - } - - public string EmitSource (Compilation compilation) - { - var @namespace = GetNamespace(compilation); - return $"{EmitSignature()} => {EmitBody(@namespace)};"; - } - - private string GetNamespace (Compilation compilation) - { - var model = compilation.GetSemanticModel(syntax.SyntaxTree); - var symbol = model.GetEnclosingSymbol(syntax.SpanStart)!; - var space = symbol.ContainingNamespace.IsGlobalNamespace ? "Bindings" - : string.Join(".", symbol.ContainingNamespace.ConstituentNamespaces); - return ConvertNamespace(space, symbol.ContainingAssembly); - } - - private string EmitSignature () - { - return $"{syntax.Modifiers} {syntax.ReturnType} {syntax.Identifier} {syntax.ParameterList}"; - } - - private string EmitBody (string @namespace) - { - var invokeMethod = GetInvokeMethod(); - var invokeParameters = GetInvokeParameters(@namespace); - var convertTask = syntax.ReturnType.ToString().StartsWith("Task") ? ".AsTask()" : ""; - return $"JS.{invokeMethod}({invokeParameters}){convertTask}"; - } - - private string GetInvokeMethod () - { - var returnType = syntax.ReturnType.ToString(); - return - returnType is "void" ? "Invoke" : - returnType is "ValueTask" || returnType is "Task" ? "InvokeAsync" : - returnType.StartsWith("Task<") ? $"InvokeAsync<{returnType.Substring(5, returnType.Length - 6)}>" : - returnType.StartsWith("ValueTask<") ? $"InvokeAsync<{returnType.Substring(10, returnType.Length - 11)}>" : - $"Invoke<{returnType}>"; - } - - private string GetInvokeParameters (string assembly) - { - var args = $"\"dotnet.{assembly}.{ToFirstLower(syntax.Identifier.ToString())}{(@event ? ".broadcast" : "")}\""; - if (syntax.ParameterList.Parameters.Count == 0) return args; - var ids = syntax.ParameterList.Parameters.Select(p => p.Identifier); - args += $", new object[] {{ {string.Join(", ", ids)} }}"; - return args; - } - } -} diff --git a/DotNet/Generator/SourceGenerator.cs b/DotNet/Generator/SourceGenerator.cs deleted file mode 100644 index 8a15035e..00000000 --- a/DotNet/Generator/SourceGenerator.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Microsoft.CodeAnalysis; - -namespace Generator -{ - [Generator] - public class SourceGenerator : ISourceGenerator - { - public void Initialize (GeneratorInitializationContext context) - { - context.RegisterForSyntaxNotifications(() => new SyntaxReceiver()); - } - - public void Execute (GeneratorExecutionContext context) - { - AddGlobal(context); - if (context.SyntaxContextReceiver is SyntaxReceiver receiver) - AddPartial(context, receiver); - } - - private static void AddGlobal (GeneratorExecutionContext context) - { - foreach (var type in ExportType.Resolve(context.Compilation.Assembly)) - context.AddSource($"{type.Name}Export.g", type.EmitSource()); - foreach (var type in ImportType.Resolve(context.Compilation.Assembly)) - context.AddSource($"{type.Name}Import.g", type.EmitSource(context.Compilation)); - } - - private static void AddPartial (GeneratorExecutionContext context, SyntaxReceiver receiver) - { - foreach (var @class in receiver.FunctionClasses) - context.AddSource($"{@class.Name}Functions.g", @class.EmitSource(context.Compilation)); - foreach (var @class in receiver.EventClasses) - context.AddSource($"{@class.Name}Events.g", @class.EmitSource(context.Compilation)); - } - } -} diff --git a/DotNet/Generator/SyntaxReceiver.cs b/DotNet/Generator/SyntaxReceiver.cs deleted file mode 100644 index e279e845..00000000 --- a/DotNet/Generator/SyntaxReceiver.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.CSharp.Syntax; - -namespace Generator -{ - internal class SyntaxReceiver : ISyntaxContextReceiver - { - public List FunctionClasses { get; } = new List(); - public List EventClasses { get; } = new List(); - - public void OnVisitSyntaxNode (GeneratorSyntaxContext context) - { - if (context.Node is ClassDeclarationSyntax classSyntax) - VisitClass(classSyntax); - } - - private void VisitClass (ClassDeclarationSyntax syntax) - { - var functions = GetMethodsWithAttribute(syntax, "JSFunction"); - if (functions.Count > 0) FunctionClasses.Add(new PartialClass(syntax, functions)); - var events = GetMethodsWithAttribute(syntax, "JSEvent"); - if (events.Count > 0) EventClasses.Add(new PartialClass(syntax, events)); - } - - private List GetMethodsWithAttribute (ClassDeclarationSyntax syntax, string attribute) - { - return syntax.Members - .OfType() - .Where(s => HasAttribute(s, attribute)) - .Select(m => new PartialMethod(m, attribute == "JSEvent")).ToList(); - } - - private bool HasAttribute (MethodDeclarationSyntax syntax, string attributeName) - { - return syntax.AttributeLists - .SelectMany(l => l.Attributes) - .Any(a => a.ToString().Contains(attributeName)); - } - } -} diff --git a/DotNet/Packer.Test/BuildTest.cs b/DotNet/Packer.Test/BuildTest.cs deleted file mode 100644 index ca9df1cf..00000000 --- a/DotNet/Packer.Test/BuildTest.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using Microsoft.Build.Utilities.ProjectCreation; - -namespace Packer.Test; - -public abstract class BuildTest : IDisposable -{ - protected MockData Data { get; } = new(); - protected PublishDotNetJS Task => Data.Task; - protected BuildEngine Engine => (BuildEngine)Task.BuildEngine; - - public void Dispose () - { - Data.Dispose(); - GC.SuppressFinalize(this); - } - - protected void AddAssembly (string assemblyName, params MockSource[] sources) - { - Data.AddAssembly(new(assemblyName, sources)); - } - - protected void AddAssembly (params MockSource[] sources) - { - AddAssembly($"MockAssembly{Guid.NewGuid():N}.dll", sources); - } - - protected MockSource With (string @namespace, string code, bool wrapInClass = true) - { - return new(@namespace, code, wrapInClass); - } - - protected MockSource With (string code, bool wrapInClass = true) - { - return With(null, code, wrapInClass); - } -} diff --git a/DotNet/Packer.Test/ContentTest.cs b/DotNet/Packer.Test/ContentTest.cs deleted file mode 100644 index 4fa4a80d..00000000 --- a/DotNet/Packer.Test/ContentTest.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Text.RegularExpressions; -using Xunit; - -namespace Packer.Test; - -public abstract class ContentTest : BuildTest -{ - protected abstract string TestedContent { get; } - - protected void Contains (string content) - { - Assert.Contains(content, TestedContent); - } - - protected MatchCollection Matches (string pattern) - { - Assert.Matches(pattern, TestedContent); - return Regex.Matches(TestedContent, pattern); - } -} diff --git a/DotNet/Packer.Test/LibraryTest.cs b/DotNet/Packer.Test/LibraryTest.cs deleted file mode 100644 index 6d504c54..00000000 --- a/DotNet/Packer.Test/LibraryTest.cs +++ /dev/null @@ -1,163 +0,0 @@ -using Xunit; - -namespace Packer.Test; - -public class LibraryTest : ContentTest -{ - protected override string TestedContent => Data.GeneratedLibrary; - - [Fact] - public void LibraryContainsJSRuntime () - { - Task.Execute(); - Contains(MockData.JSFileContent); - } - - [Fact] - public void WhenEmbedBinariesDisabledLibraryExportsBootUris () - { - AddAssembly("Foo.dll"); - Task.EmbedBinaries = false; - Task.Execute(); - Contains("exports.getBootUris = () => ({"); - Contains("wasm: \"dotnet.wasm\""); - Contains("entryAssembly: \"Foo.dll\""); - Contains("assemblies: ["); - Contains("Foo.dll"); - Contains("DotNetJS.dll"); - } - - [Fact] - public void LibraryExportsNamespaceObject () - { - AddAssembly(With("Foo", "[JSInvokable] public static void Bar () { }")); - Task.Execute(); - Contains("exports.Foo = {};"); - } - - [Fact] - public void WhenSpaceContainDotsObjectCreatedForEachPartInOrder () - { - AddAssembly(With("Foo.Bar.Nya", "[JSInvokable] public static void Bar () { }")); - Task.Execute(); - Matches(@"exports.Foo = {};\s*exports.Foo.Bar = {};\s*exports.Foo.Bar.Nya = {};"); - } - - [Fact] - public void WhenMultipleSpacesEachGetItsOwnObject () - { - AddAssembly( - With("Foo", "[JSInvokable] public static void Foo () { }"), - With("Bar.Nya", "[JSFunction] public static void Fun () { }")); - Task.Execute(); - Contains("exports.Foo = {};"); - Contains("exports.Bar = {};"); - Contains("exports.Bar.Nya = {};"); - } - - [Fact] - public void WhenMultipleAssembliesWithEqualSpaceObjectDeclaredOnlyOnce () - { - AddAssembly(With("Foo", "[JSInvokable] public static void Bar () { }")); - AddAssembly(With("Foo", "[JSFunction] public static void Fun () { }")); - Task.Execute(); - Assert.Single(Matches("exports.Foo =")); - } - - [Fact] - public void DifferentSpacesWithSameRootAssignedIndividually () - { - AddAssembly( - With("Nya.Foo", "[JSInvokable] public static void Foo () { }"), - With("Nya.Bar", "[JSFunction] public static void Fun () { }")); - Task.Execute(); - Assert.Single(Matches("exports.Nya = {}")); - } - - [Fact] - public void BindingForInvokableMethodIsGenerated () - { - AddAssembly("foo.asm.dll", With("Foo.Bar", "[JSInvokable] public static void Nya () { }")); - Task.Execute(); - Contains("exports.Foo.Bar.nya = () => exports.invoke('foo.asm', 'Nya');"); - } - - [Fact] - public void BindingForFunctionMethodIsGenerated () - { - AddAssembly(With("Foo.Bar", "[JSFunction] public static void Fun () { }")); - Task.Execute(); - Contains("exports.Foo.Bar.fun = undefined;"); - } - - [Fact] - public void BindingForEventMethodIsGenerated () - { - AddAssembly(With("Asm", "[JSEvent] public static void OnFoo (string bar) { }")); - Task.Execute(); - Contains("exports.Asm.onFoo = new exports.Event();"); - } - - [Fact] - public void BindingsFromMultipleSpacesAssignedToRespectiveObjects () - { - AddAssembly("foo.asm.dll", With("Foo", "[JSInvokable] public static void Foo () { }")); - AddAssembly("bar.nya.asm.dll", With("Bar.Nya", "[JSFunction] public static void Fun () { }")); - Task.Execute(); - Contains("exports.Foo.foo = () => exports.invoke('foo.asm', 'Foo');"); - Contains("exports.Bar.Nya.fun = undefined;"); - } - - [Fact] - public void WhenNoSpaceBindingsAreAssignedToBindingsObject () - { - AddAssembly("asm.dll", - With("[JSInvokable] public static void Nya () { }"), - With("[JSFunction] public static void Fun () { }")); - Task.Execute(); - Contains("exports.Bindings.nya = () => exports.invoke('asm', 'Nya');"); - Contains("exports.Bindings.fun = undefined;"); - } - - [Fact] - public void NamespaceAttributeOverrideObjectNames () - { - AddAssembly("asm.dll", - With(@"[assembly:JSNamespace(@""Foo\.Bar\.(\S+)"", ""$1"")]", false), - With("Foo.Bar.Nya", "[JSInvokable] public static void GetNya () { }"), - With("Foo.Bar.Fun", "[JSFunction] public static void OnFun () { }")); - Task.Execute(); - Contains("exports.Nya.getNya = () => exports.invoke('asm', 'GetNya');"); - Contains("exports.Fun.onFun = undefined;"); - } - - [Fact] - public void VariablesConflictingWithJSTypesAreRenamed () - { - AddAssembly(With("[JSInvokable] public static void Fun (string function) { }")); - Task.Execute(); - Contains("fun = (fn) => exports.invoke"); - } - - [Fact] - public void AsyncMethodsBindViaInvokeAsync () - { - AddAssembly( - With("[JSInvokable] public static Task Asy () => default;"), - With("[JSInvokable] public static ValueTask AsyValue () => default;")); - Task.Execute(); - Contains("asy = () => exports.invokeAsync"); - Contains("asyValue = () => exports.invokeAsync"); - } - - [Fact] - public void ExportedEnumsAreDeclaredInJS () - { - AddAssembly( - With("n", "public enum Foo { A, B }"), - With("n", "[JSInvokable] public static Foo GetFoo () => default;")); - Task.Execute(); - Contains("exports.n = {};"); - Contains("exports.n.Foo = { A: \"A\", B: \"B\" };"); - } -} diff --git a/DotNet/Packer.Test/Mock/MockAssembly.cs b/DotNet/Packer.Test/Mock/MockAssembly.cs deleted file mode 100644 index e76199d0..00000000 --- a/DotNet/Packer.Test/Mock/MockAssembly.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace Packer.Test; - -public record MockAssembly(string Name, MockSource[] Sources); diff --git a/DotNet/Packer.Test/Mock/MockData.cs b/DotNet/Packer.Test/Mock/MockData.cs deleted file mode 100644 index 0cc8cb4c..00000000 --- a/DotNet/Packer.Test/Mock/MockData.cs +++ /dev/null @@ -1,97 +0,0 @@ -using System; -using System.IO; -using System.Reflection; -using DotNetJS; -using Microsoft.Build.Utilities.ProjectCreation; -using Microsoft.CodeAnalysis; -using Microsoft.JSInterop; - -namespace Packer.Test; - -public sealed class MockData : IDisposable -{ - public const string WasmFileContent = "mockwasmcontent"; - public const string JSFileContent = "(function(){})();"; - public const string MapFileContent = "{version:3,file:\"dotnet.js\"}"; - - public string PublishDir { get; } - public string BlazorOutDir { get; } - public string JSDir { get; } - public string WasmFile { get; } - public string JSFile { get; } - public string MapFile { get; } - public PublishDotNetJS Task { get; } - - public string GeneratedLibrary => ReadGeneratedFileText("dotnet.js"); - public string GeneratedDeclaration => ReadGeneratedFileText("dotnet.d.ts"); - public string GeneratedMap => ReadGeneratedFileText("dotnet.js.map"); - - private readonly string root = GetRandomRoot(); - private readonly MockCompiler compiler = new(); - - public MockData () - { - PublishDir = Path.Combine(root, "publish"); - BlazorOutDir = Path.Combine(PublishDir, "blazor"); - JSDir = Path.Combine(root, "js"); - WasmFile = Path.Combine(JSDir, "dotnet.wasm"); - JSFile = Path.Combine(JSDir, "dotnet.js"); - MapFile = Path.Combine(JSDir, "dotnet.js.map"); - Task = CreateTask(); - CreateBuildResources(); - } - - public void Dispose () => Directory.Delete(root, true); - - public void AddAssembly (MockAssembly assembly) - { - var assemblyPath = Path.Combine(BlazorOutDir, assembly.Name); - compiler.Compile(assembly.Sources, assemblyPath); - Task.EntryAssemblyName = assembly.Name; - } - - private string ReadGeneratedFileText (string fileName) - { - var filePath = Path.Combine(PublishDir, fileName); - return File.Exists(filePath) ? File.ReadAllText(filePath) : null; - } - - private PublishDotNetJS CreateTask () => new() { - PublishDir = PublishDir, - BlazorOutDir = BlazorOutDir, - JSDir = JSDir, - WasmFile = WasmFile, - EntryAssemblyName = "System.Runtime.dll", - BuildEngine = BuildEngine.Create() - }; - - private void CreateBuildResources () - { - Directory.CreateDirectory(PublishDir); - Directory.CreateDirectory(BlazorOutDir); - Directory.CreateDirectory(JSDir); - File.WriteAllText(WasmFile, WasmFileContent); - File.WriteAllText(JSFile, JSFileContent); - File.WriteAllText(MapFile, MapFileContent); - foreach (var path in GetReferencePaths()) - File.Copy(path, Path.Combine(BlazorOutDir, Path.GetFileName(path))); - } - - private static string GetRandomRoot () - { - var testAssembly = Assembly.GetExecutingAssembly().Location; - var assemblyDir = Path.Combine(Path.GetDirectoryName(testAssembly)); - return Path.Combine(assemblyDir, $"temp{Guid.NewGuid():N}"); - } - - private static string[] GetReferencePaths () - { - var coreDir = Path.GetDirectoryName(typeof(object).Assembly.Location); - return new[] { - MetadataReference.CreateFromFile(Path.Combine(coreDir, "System.Runtime.dll")).FilePath, - MetadataReference.CreateFromFile(typeof(object).Assembly.Location).FilePath, - MetadataReference.CreateFromFile(typeof(JSFunctionAttribute).Assembly.Location).FilePath, - MetadataReference.CreateFromFile(typeof(JSInvokableAttribute).Assembly.Location).FilePath - }; - } -} diff --git a/DotNet/Packer.Test/Mock/MockSource.cs b/DotNet/Packer.Test/Mock/MockSource.cs deleted file mode 100644 index f8d22814..00000000 --- a/DotNet/Packer.Test/Mock/MockSource.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace Packer.Test; - -public record MockSource(string Namespace, string Code, bool WrapInClass); diff --git a/DotNet/Packer.Test/PublishTest.cs b/DotNet/Packer.Test/PublishTest.cs deleted file mode 100644 index 77cb8bb6..00000000 --- a/DotNet/Packer.Test/PublishTest.cs +++ /dev/null @@ -1,93 +0,0 @@ -using System.IO; -using Xunit; - -namespace Packer.Test; - -public class PublishTest : BuildTest -{ - [Fact] - public void LibraryPublished () - { - Task.Execute(); - Assert.NotNull(Data.GeneratedLibrary); - } - - [Fact] - public void DeclarationPublished () - { - Task.Execute(); - Assert.NotNull(Data.GeneratedDeclaration); - } - - [Fact] - public void SourceMapPublished () - { - Task.Execute(); - Assert.NotNull(Data.GeneratedMap); - } - - [Fact] - public void BinariesEmbeddedByDefault () - { - Task.Execute(); - Assert.Contains("bootWithData(bootData)", Data.GeneratedLibrary); - } - - [Fact] - public void BinariesNotEmbeddedWhenRequested () - { - Task.EmbedBinaries = false; - Task.Execute(); - Assert.DoesNotContain("bootWithData(bootData)", Data.GeneratedLibrary); - } - - [Fact] - public void AssembliesAndWasmArePublishedWhenEmbeddingDisabled () - { - AddAssembly("Foo.dll"); - Task.EmbedBinaries = false; - Task.Execute(); - Assert.True(File.Exists(Path.Combine(Data.PublishDir, Data.WasmFile))); - Assert.True(File.Exists(Path.Combine(Data.PublishDir, "managed/Foo.dll"))); - Assert.True(File.Exists(Path.Combine(Data.PublishDir, "managed/DotNetJS.dll"))); - } - - [Fact] - public void PublishDirectoryCleanedByDefault () - { - var filePath = Path.Combine(Data.PublishDir, "test"); - File.WriteAllText(filePath, ""); - Task.Execute(); - Assert.False(File.Exists(filePath)); - } - - [Fact] - public void PublishDirectoryNotCleanedWhenRequested () - { - var filePath = Path.Combine(Data.PublishDir, "test"); - File.WriteAllText(filePath, ""); - Task.Clean = false; - Task.Execute(); - Assert.True(File.Exists(filePath)); - } - - [Fact] - public void AllAssembliesAreInspected () - { - AddAssembly("Foo.dll"); - Task.Execute(); - Assert.Contains(Engine.Messages, w => w.Contains("Foo.dll")); - Assert.Contains(Engine.Messages, w => w.Contains("DotNetJS.dll")); - Assert.Contains(Engine.Messages, w => w.Contains("System.Runtime.dll")); - Assert.Contains(Engine.Messages, w => w.Contains("Microsoft.JSInterop.dll")); - Assert.Contains(Engine.Messages, w => w.Contains("System.Private.CoreLib.dll")); - } - - [Fact] - public void WhenAssemblyInspectionFailsWarningIsLogged () - { - File.WriteAllText(Path.Combine(Data.BlazorOutDir, "foo.dll"), "corrupted"); - Task.Execute(); - Assert.Contains(Engine.Warnings, w => w.Contains("Failed to inspect 'foo.dll' assembly")); - } -} diff --git a/DotNet/Packer/AssemblyInspector/Argument.cs b/DotNet/Packer/AssemblyInspector/Argument.cs deleted file mode 100644 index 7fddcc08..00000000 --- a/DotNet/Packer/AssemblyInspector/Argument.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Packer; - -internal record Argument -{ - public string Name { get; init; } = null!; - public string Type { get; init; } = null!; - public bool Nullable { get; init; } - - public override string ToString () => $"{Name}: {Type}"; -} diff --git a/DotNet/Packer/AssemblyInspector/Assembly.cs b/DotNet/Packer/AssemblyInspector/Assembly.cs deleted file mode 100644 index a105e52c..00000000 --- a/DotNet/Packer/AssemblyInspector/Assembly.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace Packer; - -internal record Assembly(string Name, byte[] Bytes); diff --git a/DotNet/Packer/AssemblyInspector/Method.cs b/DotNet/Packer/AssemblyInspector/Method.cs deleted file mode 100644 index d26f5760..00000000 --- a/DotNet/Packer/AssemblyInspector/Method.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections.Generic; -using System.Linq; - -namespace Packer; - -internal record Method -{ - public string Name { get; init; } = null!; - public string Assembly { get; init; } = null!; - public string Namespace { get; init; } = null!; - public IReadOnlyList Arguments { get; init; } = null!; - public string ReturnType { get; init; } = null!; - public bool ReturnNullable { get; init; } - public bool Async { get; init; } - public MethodType Type { get; init; } - - public override string ToString () - { - var args = string.Join(", ", Arguments.Select(a => a.ToString())); - return $"[{Type}] {Namespace}.{Name} ({args}) => {ReturnType}"; - } -} diff --git a/DotNet/Packer/DeclarationGenerator/DeclarationFile.cs b/DotNet/Packer/DeclarationGenerator/DeclarationFile.cs deleted file mode 100644 index 469c487a..00000000 --- a/DotNet/Packer/DeclarationGenerator/DeclarationFile.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace Packer; - -internal record DeclarationFile(string FileName, string Source); diff --git a/DotNet/Packer/DeclarationGenerator/DeclarationGenerator.cs b/DotNet/Packer/DeclarationGenerator/DeclarationGenerator.cs deleted file mode 100644 index 5cf0e624..00000000 --- a/DotNet/Packer/DeclarationGenerator/DeclarationGenerator.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; -using static Packer.TextUtilities; - -namespace Packer; - -internal class DeclarationGenerator -{ - private readonly MethodDeclarationGenerator methodsGenerator = new(); - private readonly List declarations = new(); - private readonly TypeDeclarationGenerator typesGenerator; - private readonly bool embedded; - - public DeclarationGenerator (NamespaceBuilder spaceBuilder, bool embedded) - { - typesGenerator = new TypeDeclarationGenerator(spaceBuilder); - this.embedded = embedded; - } - - public void LoadDeclarations (string directory) - { - foreach (var path in Directory.GetFiles(directory, "*.d.ts")) - { - var fileName = Path.GetFileNameWithoutExtension(path)[..^2]; - var source = File.ReadAllText(path); - declarations.Add(new DeclarationFile(fileName, source)); - } - } - - public string Generate (AssemblyInspector inspector) => JoinLines(0, - !embedded ? GenerateSideLoadDeclarations() : null, - JoinLines(declarations.Select(GenerateForDeclaration), 0), - typesGenerator.Generate(inspector.Types), - methodsGenerator.Generate(inspector.Methods) - ) + "\n"; - - private string GenerateSideLoadDeclarations () => JoinLines(0, - "export interface BootUris {", JoinLines(1, true, - "wasm: string;", - "assemblies: string[];", - "entryAssembly: string;"), - "}", - "export declare function getBootUris(): BootUris;" - ); - - private string GenerateForDeclaration (DeclarationFile declaration) - { - if (!ShouldExportDeclaration(declaration)) return ""; - var source = declaration.Source; - foreach (var line in SplitLines(source)) - if (line.StartsWith("import")) - source = source.Replace(line, GetSourceForImportLine(line)); - return ModifyInternalDeclarations(source); - } - - private static bool ShouldExportDeclaration (DeclarationFile declaration) - { - return declaration.FileName switch { - "boot" or "interop" or "event" => true, - _ => false - }; - } - - private string GetSourceForImportLine (string line) - { - var importStart = line.LastIndexOf("\"./", StringComparison.Ordinal) + 3; - var importLength = line.Length - importStart - 2; - var import = line.Substring(importStart, importLength); - foreach (var declaration in declarations) - if (declaration.FileName == import) - return declaration.Source; - throw new PackerException($"Failed to find type import for '{import}'."); - } - - private string ModifyInternalDeclarations (string source) - { - if (embedded) source = source.Replace("boot(bootData: BootData):", "boot():"); - RemoveLine("function initializeInterop"); - RemoveLine("function initializeMono"); - RemoveLine("function callEntryPoint"); - return source; - - void RemoveLine (string lineFragment) => - source = Regex.Replace(source, $@"^.*{lineFragment}.*", "", RegexOptions.Multiline); - } -} diff --git a/DotNet/Packer/LibraryGenerator/BindingsGenerator.cs b/DotNet/Packer/LibraryGenerator/BindingsGenerator.cs deleted file mode 100644 index 5ec25213..00000000 --- a/DotNet/Packer/LibraryGenerator/BindingsGenerator.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Linq; -using static Packer.TextUtilities; - -namespace Packer; - -internal class BindingsGenerator -{ - private readonly SpaceObjectBuilder objectBuilder = new(); - private readonly EnumGenerator enumGenerator; - private readonly AssemblyInspector inspector; - - public BindingsGenerator (AssemblyInspector inspector, NamespaceBuilder spaceBuilder) - { - this.inspector = inspector; - enumGenerator = new(spaceBuilder); - } - - public string Generate () - { - objectBuilder.Reset(); - return JoinLines( - JoinLines(inspector.Methods.Where(m => m.Type == MethodType.Invokable).Select(EmitInvokable)), - JoinLines(inspector.Methods.Where(m => m.Type == MethodType.Function).Select(EmitFunction)), - JoinLines(inspector.Methods.Where(m => m.Type == MethodType.Event).Select(EmitEvent)), - JoinLines(inspector.Types.Where(t => t.IsEnum).Select(e => enumGenerator.Generate(e, objectBuilder))) - ); - } - - private string EmitInvokable (Method method) - { - var funcArgs = string.Join(", ", method.Arguments.Select(a => a.Name)); - var methodArgs = $"'{method.Assembly}', '{method.Name}'" + (funcArgs == "" ? "" : $", {funcArgs}"); - var invoke = method.Async ? "invokeAsync" : "invoke"; - var body = $"exports.{invoke}({methodArgs})"; - var js = $"exports.{method.Namespace}.{ToFirstLower(method.Name)} = ({funcArgs}) => {body};"; - return objectBuilder.EnsureNamespaceObjectsDeclared(method.Namespace, js); - } - - private string EmitFunction (Method method) - { - var js = $"exports.{method.Namespace}.{ToFirstLower(method.Name)} = undefined;"; - return objectBuilder.EnsureNamespaceObjectsDeclared(method.Namespace, js); - } - - private string EmitEvent (Method method) - { - var js = $"exports.{method.Namespace}.{ToFirstLower(method.Name)} = new exports.Event();"; - return objectBuilder.EnsureNamespaceObjectsDeclared(method.Namespace, js); - } -} diff --git a/DotNet/Packer/LibraryGenerator/BootUrisTemplate.cs b/DotNet/Packer/LibraryGenerator/BootUrisTemplate.cs deleted file mode 100644 index 3ca6b6c7..00000000 --- a/DotNet/Packer/LibraryGenerator/BootUrisTemplate.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using static Packer.TextUtilities; - -namespace Packer; - -internal class BootUrisTemplate -{ - public string WasmUri { get; init; } = null!; - public string EntryAssemblyUri { get; init; } = null!; - public IReadOnlyCollection Assemblies { get; init; } = null!; - - public string Build () => JoinLines(1, - "exports.getBootUris = () => ({", JoinLines(2, true, - $"wasm: \"{WasmUri}\",", - $"entryAssembly: \"{EntryAssemblyUri}\",", - "assemblies: [", JoinLines(EmitAssemblies(), 3, true), "]"), - "});" - ); - - private IEnumerable EmitAssemblies () - { - return Assemblies.Select(a => $"\"{a.Name}\","); - } -} diff --git a/DotNet/Packer/LibraryGenerator/EmbedTemplate.cs b/DotNet/Packer/LibraryGenerator/EmbedTemplate.cs deleted file mode 100644 index f626f91f..00000000 --- a/DotNet/Packer/LibraryGenerator/EmbedTemplate.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Packer; - -internal class EmbedTemplate -{ - public string RuntimeWasm { get; init; } = null!; - public IReadOnlyCollection Assemblies { get; init; } = null!; - public string EntryAssemblyName { get; init; } = null!; - - public string Build () => $@" - const bootWithData = exports.boot; - exports.boot = async function () {{ - const bootData = {{ - wasm: '{RuntimeWasm}', - assemblies: [{string.Join(", ", Assemblies.Select(EmbedAssembly))}], - entryAssemblyName: '{EntryAssemblyName}' - }}; - await bootWithData(bootData); - }};"; - - private static string EmbedAssembly (Assembly assembly) - { - var base64 = Convert.ToBase64String(assembly.Bytes); - return $"{{ name: '{assembly.Name}', data: '{base64}' }}"; - } -} diff --git a/DotNet/Packer/LibraryGenerator/EnumGenerator.cs b/DotNet/Packer/LibraryGenerator/EnumGenerator.cs deleted file mode 100644 index b7ee8553..00000000 --- a/DotNet/Packer/LibraryGenerator/EnumGenerator.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Linq; - -namespace Packer; - -internal class EnumGenerator -{ - private readonly NamespaceBuilder spaceBuilder; - - public EnumGenerator (NamespaceBuilder spaceBuilder) - { - this.spaceBuilder = spaceBuilder; - } - - public string Generate (Type @enum, SpaceObjectBuilder objectBuilder) - { - var values = Enum.GetNames(@enum); - var fields = string.Join(", ", values.Select(v => $"{v}: \"{v}\"")); - var space = spaceBuilder.Build(@enum); - var js = $"exports.{space}.{@enum.Name} = {{ {fields} }};"; - return objectBuilder.EnsureNamespaceObjectsDeclared(space, js); - } -} diff --git a/DotNet/Packer/LibraryGenerator/LibraryGenerator.cs b/DotNet/Packer/LibraryGenerator/LibraryGenerator.cs deleted file mode 100644 index dd866328..00000000 --- a/DotNet/Packer/LibraryGenerator/LibraryGenerator.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using static Packer.TextUtilities; - -namespace Packer; - -internal class LibraryGenerator -{ - private readonly AssemblyInspector inspector; - private readonly BindingsGenerator bindingsGenerator; - private readonly string runtimeJS; - private readonly string entryAssemblyName; - - public LibraryGenerator (NamespaceBuilder spaceBuilder, AssemblyInspector inspector, - string runtimeJS, string entryAssemblyName) - { - this.inspector = inspector; - this.runtimeJS = runtimeJS; - this.entryAssemblyName = entryAssemblyName; - bindingsGenerator = new(inspector, spaceBuilder); - } - - public string GenerateSideLoad (string wasmUri) => - GenerateLibrary(new BootUrisTemplate { - WasmUri = wasmUri, - Assemblies = inspector.Assemblies, - EntryAssemblyUri = entryAssemblyName - }.Build()); - - public string GenerateEmbedded (byte[] wasmBytes) => - GenerateLibrary(new EmbedTemplate { - RuntimeWasm = Convert.ToBase64String(wasmBytes), - Assemblies = inspector.Assemblies, - EntryAssemblyName = entryAssemblyName - }.Build()); - - private string GenerateLibrary (string initJS) => new LibraryTemplate { - RuntimeJS = runtimeJS, - InitJS = JoinLines(bindingsGenerator.Generate(), initJS) - }.Build(); -} diff --git a/DotNet/Packer/LibraryGenerator/LibraryTemplate.cs b/DotNet/Packer/LibraryGenerator/LibraryTemplate.cs deleted file mode 100644 index 634eb165..00000000 --- a/DotNet/Packer/LibraryGenerator/LibraryTemplate.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace Packer; - -internal class LibraryTemplate -{ - public string RuntimeJS { get; init; } = null!; - public string InitJS { get; init; } = null!; - - public string Build () => $@"{RuntimeJS} -(function (root, factory) {{ - if (typeof exports === 'object' && typeof exports.nodeName !== 'string') - factory(module.exports, global); - else factory(root.dotnet, root); -}}(typeof self !== 'undefined' ? self : this, function (exports, global) {{ - {InitJS} - global.dotnet = exports; -}}));"; -} diff --git a/DotNet/Packer/LibraryGenerator/SpaceObjectBuilder.cs b/DotNet/Packer/LibraryGenerator/SpaceObjectBuilder.cs deleted file mode 100644 index 6fcc8d90..00000000 --- a/DotNet/Packer/LibraryGenerator/SpaceObjectBuilder.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using static Packer.TextUtilities; - -namespace Packer; - -internal class SpaceObjectBuilder -{ - private readonly HashSet declaredObjects = new(); - private readonly List names = new(); - - public string EnsureNamespaceObjectsDeclared (string space, string js) - { - BuildObjectNamesForNamespace(space); - foreach (var obj in names) - if (declaredObjects.Add(obj)) - js = JoinLines($"exports.{obj} = {{}};", js); - return js; - } - - public void Reset () - { - declaredObjects.Clear(); - } - - private void BuildObjectNamesForNamespace (string space) - { - names.Clear(); - var parts = space.Split('.'); - for (int i = 0; i < parts.Length; i++) - { - var previousParts = i > 0 ? string.Join(".", parts.Take(i)) + "." : ""; - names.Add(previousParts + parts[i]); - } - names.Reverse(); - } -} diff --git a/DotNet/Packer/NamespaceBuilder.cs b/DotNet/Packer/NamespaceBuilder.cs deleted file mode 100644 index 810c96fa..00000000 --- a/DotNet/Packer/NamespaceBuilder.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text.RegularExpressions; -using static Packer.TypeUtilities; - -namespace Packer; - -internal class NamespaceBuilder -{ - private const string converterAttributeName = "JSNamespaceAttribute"; - private readonly List> converters = new(); - - public void CollectConverters (string outDir, string entryAssembly) - { - using var context = CreateLoadContext(outDir); - var assemblyPath = Path.Combine(outDir, entryAssembly); - var assembly = context.LoadFromAssemblyPath(assemblyPath); - foreach (var attribute in CollectAttributes(assembly)) - AddConverter(attribute); - } - - public string Build (Type type) - { - var space = type.Namespace ?? "Bindings"; - foreach (var converter in converters) - space = converter(space); - return space; - } - - private CustomAttributeData[] CollectAttributes (System.Reflection.Assembly assembly) - { - return assembly.CustomAttributes - .Where(a => a.AttributeType.Name == converterAttributeName).ToArray(); - } - - private void AddConverter (CustomAttributeData attribute) - { - var pattern = attribute.ConstructorArguments[0].Value as string; - var replacement = attribute.ConstructorArguments[1].Value as string; - converters.Add(space => Regex.Replace(space, pattern!, replacement!)); - } -} diff --git a/DotNet/Packer/PackerException.cs b/DotNet/Packer/PackerException.cs deleted file mode 100644 index 8d0e0474..00000000 --- a/DotNet/Packer/PackerException.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System; - -namespace Packer; - -public class PackerException : Exception -{ - public PackerException (string message) : base(message) { } -} diff --git a/DotNet/Packer/PublishDotNetJS.cs b/DotNet/Packer/PublishDotNetJS.cs deleted file mode 100644 index 9b8ff0eb..00000000 --- a/DotNet/Packer/PublishDotNetJS.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System.Collections.Generic; -using System.IO; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; - -namespace Packer; - -public class PublishDotNetJS : Task -{ - [Required] public string PublishDir { get; set; } = null!; - [Required] public string BlazorOutDir { get; set; } = null!; - [Required] public string JSDir { get; set; } = null!; - [Required] public string WasmFile { get; set; } = null!; - [Required] public string EntryAssemblyName { get; set; } = null!; - public bool EmbedBinaries { get; set; } = true; - public bool Clean { get; set; } = true; - - public override bool Execute () - { - var sources = GenerateSources(); - if (Clean) CleanPublishDirectory(); - PublishLibrary(sources.Library); - PublishDeclaration(sources.Declaration); - PublishSourceMap(); - if (!EmbedBinaries) PublishBinaries(sources.Assemblies); - return true; - } - - private (IReadOnlyList Assemblies, - string Library, string Declaration) GenerateSources () - { - var builder = CreateNamespaceBuilder(); - using var inspector = InspectAssemblies(builder); - return (inspector.Assemblies, - GenerateLibrary(inspector, builder), - GenerateDeclaration(inspector, builder)); - } - - private void CleanPublishDirectory () - { - Directory.Delete(PublishDir, true); - Directory.CreateDirectory(PublishDir); - } - - private void PublishLibrary (string source) - { - var path = Path.Combine(PublishDir, "dotnet.js"); - File.WriteAllText(path, source); - Log.LogMessage(MessageImportance.High, $"JavaScript UMD library is published at {path}."); - } - - private void PublishDeclaration (string source) - { - var file = Path.Combine(PublishDir, "dotnet.d.ts"); - File.WriteAllText(file, source); - } - - private void PublishSourceMap () - { - var source = Path.Combine(JSDir, "dotnet.js.map"); - var destination = Path.Combine(PublishDir, "dotnet.js.map"); - File.Copy(source, destination, true); - } - - private void PublishBinaries (IEnumerable assemblies) - { - var wasmPath = Path.Combine(PublishDir, Path.GetFileName(WasmFile)); - var wasmBytes = File.ReadAllBytes(WasmFile); - File.WriteAllBytes(wasmPath, wasmBytes); - Directory.CreateDirectory(Path.Combine(PublishDir, "managed")); - foreach (var assembly in assemblies) - File.WriteAllBytes(Path.Combine(PublishDir, $"managed/{assembly.Name}"), assembly.Bytes); - } - - private NamespaceBuilder CreateNamespaceBuilder () - { - var builder = new NamespaceBuilder(); - builder.CollectConverters(BlazorOutDir, EntryAssemblyName); - return builder; - } - - private AssemblyInspector InspectAssemblies (NamespaceBuilder spaceBuilder) - { - var inspector = new AssemblyInspector(spaceBuilder); - inspector.InspectInDirectory(BlazorOutDir); - inspector.Report(Log); - return inspector; - } - - private string GenerateLibrary (AssemblyInspector inspector, NamespaceBuilder spaceBuilder) - { - var runtimeJS = File.ReadAllText(Path.Combine(JSDir, "dotnet.js")); - var generator = new LibraryGenerator(spaceBuilder, inspector, runtimeJS, EntryAssemblyName); - return EmbedBinaries - ? generator.GenerateEmbedded(File.ReadAllBytes(WasmFile)) - : generator.GenerateSideLoad(Path.GetFileName(WasmFile)); - } - - private string GenerateDeclaration (AssemblyInspector inspector, NamespaceBuilder spaceBuilder) - { - var generator = new DeclarationGenerator(spaceBuilder, EmbedBinaries); - generator.LoadDeclarations(JSDir); - return generator.Generate(inspector); - } -} diff --git a/DotNet/Packer/Utilities/TypeUtilities.cs b/DotNet/Packer/Utilities/TypeUtilities.cs deleted file mode 100644 index 9eddb023..00000000 --- a/DotNet/Packer/Utilities/TypeUtilities.cs +++ /dev/null @@ -1,115 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Runtime.InteropServices; -using System.Threading.Tasks; - -namespace Packer; - -internal static class TypeUtilities -{ - public static bool IsAwaitable (Type type) - { - return type.GetMethod(nameof(Task.GetAwaiter)) != null; - } - - public static bool IsList (Type type) - { - return type.IsArray || IsGenericList(type) || type.GetInterfaces().Any(IsGenericList); - - bool IsGenericList (Type type) => type.IsGenericType && - (type.GetGenericTypeDefinition().FullName == typeof(IList<>).FullName || - type.GetGenericTypeDefinition().FullName == typeof(IReadOnlyList<>).FullName); - } - - public static bool IsDictionary (Type type) - { - return IsDict(type) || type.GetInterfaces().Any(IsDict); - - bool IsDict (Type type) => type.IsGenericType && - (type.GetGenericTypeDefinition().FullName == typeof(IDictionary<,>).FullName || - type.GetGenericTypeDefinition().FullName == typeof(IReadOnlyDictionary<,>).FullName); - } - - public static Type GetListElementType (Type arrayType) - { - return arrayType.IsArray - ? arrayType.GetElementType()! - : arrayType.GenericTypeArguments[0]; - } - - public static NullabilityInfo GetNullability (PropertyInfo property) - { - return new NullabilityInfoContext().Create(property); - } - - public static NullabilityInfo GetNullability (ParameterInfo parameter) - { - return new NullabilityInfoContext().Create(parameter); - } - - public static bool IsNullable (PropertyInfo property) - { - if (IsNullable(property.PropertyType)) return true; - return GetNullability(property).ReadState == NullabilityState.Nullable; - } - - public static bool IsNullable (ParameterInfo parameter) - { - if (IsNullable(parameter.ParameterType)) return true; - return GetNullability(parameter).ReadState == NullabilityState.Nullable; - } - - public static bool IsNullable (MethodInfo method) - { - if (IsNullable(method.ReturnParameter)) return true; - if (!IsAwaitable(method.ReturnType)) return false; - return GetNullability(method.ReturnParameter).GenericTypeArguments - .FirstOrDefault()?.ReadState == NullabilityState.Nullable; - } - - public static bool IsNullable (Type type) - { - return type.IsGenericType && - type.Name.Contains("Nullable`") && - type.GetGenericArguments().Length == 1; - } - - public static Type GetNullableUnderlyingType (Type type) - { - return type.GetGenericArguments()[0]; - } - - public static bool IsAutoProperty (PropertyInfo property) - { - var backingFieldName = $"<{property.Name}>k__BackingField"; - var backingField = property.DeclaringType!.GetField(backingFieldName, BindingFlags.NonPublic | BindingFlags.Instance); - return backingField != null; - } - - public static MetadataLoadContext CreateLoadContext (string directory) - { - var assemblyPaths = Directory.GetFiles(RuntimeEnvironment.GetRuntimeDirectory(), "*.dll").ToList(); - foreach (var path in Directory.GetFiles(directory, "*.dll")) - if (assemblyPaths.All(p => Path.GetFileName(p) != Path.GetFileName(path))) - assemblyPaths.Add(path); - var resolver = new PathAssemblyResolver(assemblyPaths); - return new MetadataLoadContext(resolver); - } - - public static bool ShouldIgnoreAssembly (string assemblyPath) - { - var assemblyName = Path.GetFileName(assemblyPath); - return assemblyName.StartsWith("System.") || - assemblyName.StartsWith("Microsoft.") || - assemblyName.StartsWith("netstandard"); - } - - public static string GetGenericNameWithoutArgs (Type type) - { - var delimiterIndex = type.Name.IndexOf('`'); - return type.Name[..delimiterIndex]; - } -} diff --git a/JavaScript/native/dotnet.js b/JavaScript/native/dotnet.js deleted file mode 100644 index 624d41b0..00000000 --- a/JavaScript/native/dotnet.js +++ /dev/null @@ -1,5541 +0,0 @@ -var Module = (function () { - var _scriptDir = typeof document !== "undefined" && document.currentScript ? document.currentScript.src : undefined; - - return ( - function (Module) { - Module = Module || {}; - - var Module = typeof Module !== "undefined" ? Module : {}; - var readyPromiseResolve, readyPromiseReject; - Module["ready"] = new Promise(function (resolve, reject) { - readyPromiseResolve = resolve; - readyPromiseReject = reject; - }); - var moduleOverrides = {}; - var key; - for (key in Module) {if (Module.hasOwnProperty(key)) {moduleOverrides[key] = Module[key];}} - var arguments_ = []; - var thisProgram = "./this.program"; - var quit_ = function (status, toThrow) {throw toThrow;}; - var ENVIRONMENT_IS_WEB = true; - var ENVIRONMENT_IS_WORKER = false; - var ENVIRONMENT_IS_NODE = false; - var ENVIRONMENT_IS_SHELL = false; - var scriptDirectory = ""; - function locateFile(path) { - if (Module["locateFile"]) {return Module["locateFile"](path, scriptDirectory);} - return scriptDirectory + path; - } - var read_, readAsync, readBinary, setWindowTitle; - if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { - if (ENVIRONMENT_IS_WORKER) {scriptDirectory = self.location.href;} else if (typeof document !== "undefined" && document.currentScript) {scriptDirectory = document.currentScript.src;} - if (_scriptDir) {scriptDirectory = _scriptDir;} - if (scriptDirectory.indexOf("blob:") !== 0) {scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf("/") + 1);} else {scriptDirectory = "";} - { - read_ = function (url) { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - xhr.send(null); - return xhr.responseText; - }; - if (ENVIRONMENT_IS_WORKER) { - readBinary = function (url) { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - xhr.responseType = "arraybuffer"; - xhr.send(null); - return new Uint8Array(xhr.response); - }; - } - readAsync = function (url, onload, onerror) { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, true); - xhr.responseType = "arraybuffer"; - xhr.onload = function () { - if (xhr.status == 200 || xhr.status == 0 && xhr.response) { - onload(xhr.response); - return; - } - onerror(); - }; - xhr.onerror = onerror; - xhr.send(null); - }; - } - setWindowTitle = function (title) {document.title = title;}; - } else {} - var out = Module["print"] || console.log.bind(console); - var err = Module["printErr"] || console.warn.bind(console); - for (key in moduleOverrides) {if (moduleOverrides.hasOwnProperty(key)) {Module[key] = moduleOverrides[key];}} - moduleOverrides = null; - if (Module["arguments"]) arguments_ = Module["arguments"]; - if (Module["thisProgram"]) thisProgram = Module["thisProgram"]; - if (Module["quit"]) quit_ = Module["quit"]; - var STACK_ALIGN = 16; - function alignMemory(size, factor) { - if (!factor) factor = STACK_ALIGN; - return Math.ceil(size / factor) * factor; - } - function warnOnce(text) { - if (!warnOnce.shown) warnOnce.shown = {}; - if (!warnOnce.shown[text]) { - warnOnce.shown[text] = 1; - err(text); - } - } - function convertJsFunctionToWasm(func, sig) { - if (typeof WebAssembly.Function === "function") { - var typeNames = { "i": "i32", "j": "i64", "f": "f32", "d": "f64" }; - var type = { parameters: [], results: sig[0] == "v" ? [] : [typeNames[sig[0]]] }; - for (var i = 1; i < sig.length; ++i) {type.parameters.push(typeNames[sig[i]]);} - return new WebAssembly.Function(type, func); - } - var typeSection = [1, 0, 1, 96]; - var sigRet = sig.slice(0, 1); - var sigParam = sig.slice(1); - var typeCodes = { "i": 127, "j": 126, "f": 125, "d": 124 }; - typeSection.push(sigParam.length); - for (var i = 0; i < sigParam.length; ++i) {typeSection.push(typeCodes[sigParam[i]]);} - if (sigRet == "v") {typeSection.push(0);} else {typeSection = typeSection.concat([1, typeCodes[sigRet]]);} - typeSection[1] = typeSection.length - 2; - var bytes = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0].concat(typeSection, [2, 7, 1, 1, 101, 1, 102, 0, 0, 7, 5, 1, 1, 102, 0, 0])); - var module = new WebAssembly.Module(bytes); - var instance = new WebAssembly.Instance(module, { "e": { "f": func } }); - var wrappedFunc = instance.exports["f"]; - return wrappedFunc; - } - var freeTableIndexes = []; - var functionsInTableMap; - function getEmptyTableSlot() { - if (freeTableIndexes.length) {return freeTableIndexes.pop();} - try {wasmTable.grow(1);} catch (err) { - if (!(err instanceof RangeError)) {throw err;} - throw"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."; - } - return wasmTable.length - 1; - } - function addFunctionWasm(func, sig) { - if (!functionsInTableMap) { - functionsInTableMap = new WeakMap; - for (var i = 0; i < wasmTable.length; i++) { - var item = wasmTable.get(i); - if (item) {functionsInTableMap.set(item, i);} - } - } - if (functionsInTableMap.has(func)) {return functionsInTableMap.get(func);} - var ret = getEmptyTableSlot(); - try {wasmTable.set(ret, func);} catch (err) { - if (!(err instanceof TypeError)) {throw err;} - var wrapped = convertJsFunctionToWasm(func, sig); - wasmTable.set(ret, wrapped); - } - functionsInTableMap.set(func, ret); - return ret; - } - function addFunction(func, sig) {return addFunctionWasm(func, sig);} - var tempRet0 = 0; - var setTempRet0 = function (value) {tempRet0 = value;}; - var getTempRet0 = function () {return tempRet0;}; - var wasmBinary; - if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"]; - var noExitRuntime = Module["noExitRuntime"] || true; - if (typeof WebAssembly !== "object") {abort("no native wasm support detected");} - function setValue(ptr, value, type, noSafe) { - type = type || "i8"; - if (type.charAt(type.length - 1) === "*") type = "i32"; - switch (type) { - case"i1": - HEAP8[ptr >> 0] = value; - break; - case"i8": - HEAP8[ptr >> 0] = value; - break; - case"i16": - HEAP16[ptr >> 1] = value; - break; - case"i32": - HEAP32[ptr >> 2] = value; - break; - case"i64": - tempI64 = [value >>> 0, (tempDouble = value, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[ptr >> 2] = tempI64[0], HEAP32[ptr + 4 >> 2] = tempI64[1]; - break; - case"float": - HEAPF32[ptr >> 2] = value; - break; - case"double": - HEAPF64[ptr >> 3] = value; - break; - default: - abort("invalid type for setValue: " + type); - } - } - function getValue(ptr, type, noSafe) { - type = type || "i8"; - if (type.charAt(type.length - 1) === "*") type = "i32"; - switch (type) { - case"i1": - return HEAP8[ptr >> 0]; - case"i8": - return HEAP8[ptr >> 0]; - case"i16": - return HEAP16[ptr >> 1]; - case"i32": - return HEAP32[ptr >> 2]; - case"i64": - return HEAP32[ptr >> 2]; - case"float": - return HEAPF32[ptr >> 2]; - case"double": - return HEAPF64[ptr >> 3]; - default: - abort("invalid type for getValue: " + type); - } - return null; - } - var wasmMemory; - var ABORT = false; - var EXITSTATUS; - function assert(condition, text) {if (!condition) {abort("Assertion failed: " + text);}} - function getCFunc(ident) { - var func = Module["_" + ident]; - assert(func, "Cannot call unknown function " + ident + ", make sure it is exported"); - return func; - } - function ccall(ident, returnType, argTypes, args, opts) { - var toC = { - "string": function (str) { - var ret = 0; - if (str !== null && str !== undefined && str !== 0) { - var len = (str.length << 2) + 1; - ret = stackAlloc(len); - stringToUTF8(str, ret, len); - } - return ret; - }, "array": function (arr) { - var ret = stackAlloc(arr.length); - writeArrayToMemory(arr, ret); - return ret; - } - }; - function convertReturnValue(ret) { - if (returnType === "string") return UTF8ToString(ret); - if (returnType === "boolean") return Boolean(ret); - return ret; - } - var func = getCFunc(ident); - var cArgs = []; - var stack = 0; - if (args) { - for (var i = 0; i < args.length; i++) { - var converter = toC[argTypes[i]]; - if (converter) { - if (stack === 0) stack = stackSave(); - cArgs[i] = converter(args[i]); - } else {cArgs[i] = args[i];} - } - } - var ret = func.apply(null, cArgs); - ret = convertReturnValue(ret); - if (stack !== 0) stackRestore(stack); - return ret; - } - function cwrap(ident, returnType, argTypes, opts) { - argTypes = argTypes || []; - var numericArgs = argTypes.every(function (type) {return type === "number";}); - var numericRet = returnType !== "string"; - if (numericRet && numericArgs && !opts) {return getCFunc(ident);} - return function () {return ccall(ident, returnType, argTypes, arguments, opts);}; - } - var ALLOC_STACK = 1; - var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : undefined; - function UTF8ArrayToString(heap, idx, maxBytesToRead) { - var endIdx = idx + maxBytesToRead; - var endPtr = idx; - while (heap[endPtr] && !(endPtr >= endIdx)) ++endPtr; - if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) {return UTF8Decoder.decode(heap.subarray(idx, endPtr));} else { - var str = ""; - while (idx < endPtr) { - var u0 = heap[idx++]; - if (!(u0 & 128)) { - str += String.fromCharCode(u0); - continue; - } - var u1 = heap[idx++] & 63; - if ((u0 & 224) == 192) { - str += String.fromCharCode((u0 & 31) << 6 | u1); - continue; - } - var u2 = heap[idx++] & 63; - if ((u0 & 240) == 224) {u0 = (u0 & 15) << 12 | u1 << 6 | u2;} else {u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63;} - if (u0 < 65536) {str += String.fromCharCode(u0);} else { - var ch = u0 - 65536; - str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); - } - } - } - return str; - } - function UTF8ToString(ptr, maxBytesToRead) {return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "";} - function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { - if (!(maxBytesToWrite > 0)) return 0; - var startIdx = outIdx; - var endIdx = outIdx + maxBytesToWrite - 1; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) { - var u1 = str.charCodeAt(++i); - u = 65536 + ((u & 1023) << 10) | u1 & 1023; - } - if (u <= 127) { - if (outIdx >= endIdx) break; - heap[outIdx++] = u; - } else if (u <= 2047) { - if (outIdx + 1 >= endIdx) break; - heap[outIdx++] = 192 | u >> 6; - heap[outIdx++] = 128 | u & 63; - } else if (u <= 65535) { - if (outIdx + 2 >= endIdx) break; - heap[outIdx++] = 224 | u >> 12; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63; - } else { - if (outIdx + 3 >= endIdx) break; - heap[outIdx++] = 240 | u >> 18; - heap[outIdx++] = 128 | u >> 12 & 63; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63; - } - } - heap[outIdx] = 0; - return outIdx - startIdx; - } - function stringToUTF8(str, outPtr, maxBytesToWrite) {return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);} - function lengthBytesUTF8(str) { - var len = 0; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; - if (u <= 127) ++len; else if (u <= 2047) len += 2; else if (u <= 65535) len += 3; else len += 4; - } - return len; - } - var UTF16Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le") : undefined; - function stringToUTF16(str, outPtr, maxBytesToWrite) { - if (maxBytesToWrite === undefined) {maxBytesToWrite = 2147483647;} - if (maxBytesToWrite < 2) return 0; - maxBytesToWrite -= 2; - var startPtr = outPtr; - var numCharsToWrite = maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length; - for (var i = 0; i < numCharsToWrite; ++i) { - var codeUnit = str.charCodeAt(i); - HEAP16[outPtr >> 1] = codeUnit; - outPtr += 2; - } - HEAP16[outPtr >> 1] = 0; - return outPtr - startPtr; - } - function allocateUTF8(str) { - var size = lengthBytesUTF8(str) + 1; - var ret = _malloc(size); - if (ret) stringToUTF8Array(str, HEAP8, ret, size); - return ret; - } - function writeArrayToMemory(array, buffer) {HEAP8.set(array, buffer);} - function writeAsciiToMemory(str, buffer, dontAddNull) { - for (var i = 0; i < str.length; ++i) {HEAP8[buffer++ >> 0] = str.charCodeAt(i);} - if (!dontAddNull) HEAP8[buffer >> 0] = 0; - } - function alignUp(x, multiple) { - if (x % multiple > 0) {x += multiple - x % multiple;} - return x; - } - var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; - function updateGlobalBufferAndViews(buf) { - buffer = buf; - Module["HEAP8"] = HEAP8 = new Int8Array(buf); - Module["HEAP16"] = HEAP16 = new Int16Array(buf); - Module["HEAP32"] = HEAP32 = new Int32Array(buf); - Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); - Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf); - Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf); - Module["HEAPF32"] = HEAPF32 = new Float32Array(buf); - Module["HEAPF64"] = HEAPF64 = new Float64Array(buf); - } - var INITIAL_MEMORY = Module["INITIAL_MEMORY"] || 16777216; - var wasmTable; - var __ATPRERUN__ = []; - var __ATINIT__ = []; - var __ATMAIN__ = []; - var __ATPOSTRUN__ = []; - var runtimeInitialized = false; - var runtimeExited = false; - function preRun() { - if (Module["preRun"]) { - if (typeof Module["preRun"] == "function") Module["preRun"] = [Module["preRun"]]; - while (Module["preRun"].length) {addOnPreRun(Module["preRun"].shift());} - } - callRuntimeCallbacks(__ATPRERUN__); - } - function initRuntime() { - runtimeInitialized = true; - if (!Module["noFSInit"] && !FS.init.initialized) FS.init(); - TTY.init(); - SOCKFS.root = FS.mount(SOCKFS, {}, null); - callRuntimeCallbacks(__ATINIT__); - } - function exitRuntime() {runtimeExited = true;} - function postRun() { - if (Module["postRun"]) { - if (typeof Module["postRun"] == "function") Module["postRun"] = [Module["postRun"]]; - while (Module["postRun"].length) {addOnPostRun(Module["postRun"].shift());} - } - callRuntimeCallbacks(__ATPOSTRUN__); - } - function addOnPreRun(cb) {__ATPRERUN__.unshift(cb);} - function addOnInit(cb) {__ATINIT__.unshift(cb);} - function addOnPostRun(cb) {__ATPOSTRUN__.unshift(cb);} - var runDependencies = 0; - var runDependencyWatcher = null; - var dependenciesFulfilled = null; - function getUniqueRunDependency(id) {return id;} - function addRunDependency(id) { - runDependencies++; - if (Module["monitorRunDependencies"]) {Module["monitorRunDependencies"](runDependencies);} - } - function removeRunDependency(id) { - runDependencies--; - if (Module["monitorRunDependencies"]) {Module["monitorRunDependencies"](runDependencies);} - if (runDependencies == 0) { - if (runDependencyWatcher !== null) { - clearInterval(runDependencyWatcher); - runDependencyWatcher = null; - } - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback(); - } - } - } - Module["preloadedImages"] = {}; - Module["preloadedAudios"] = {}; - function abort(what) { - if (Module["onAbort"]) {Module["onAbort"](what);} - what += ""; - err(what); - ABORT = true; - EXITSTATUS = 1; - what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info."; - var e = new WebAssembly.RuntimeError(what); - readyPromiseReject(e); - throw e; - } - var dataURIPrefix = "data:application/octet-stream;base64,"; - function isDataURI(filename) {return filename.startsWith(dataURIPrefix);} - var wasmBinaryFile = "dotnet.wasm"; - if (!isDataURI(wasmBinaryFile)) {wasmBinaryFile = locateFile(wasmBinaryFile);} - function getBinary(file) { - try { - if (file == wasmBinaryFile && wasmBinary) {return new Uint8Array(wasmBinary);} - if (readBinary) {return readBinary(file);} else {throw"both async and sync fetching of the wasm failed";} - } catch (err) {abort(err);} - } - function getBinaryPromise() { - if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { - if (typeof fetch === "function") { - return fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function (response) { - if (!response["ok"]) {throw"failed to load wasm binary file at '" + wasmBinaryFile + "'";} - return response["arrayBuffer"](); - }).catch(function () {return getBinary(wasmBinaryFile);}); - } - } - return Promise.resolve().then(function () {return getBinary(wasmBinaryFile);}); - } - function createWasm() { - var info = { "env": asmLibraryArg, "wasi_snapshot_preview1": asmLibraryArg }; - function receiveInstance(instance, module) { - var exports = instance.exports; - Module["asm"] = exports; - wasmMemory = Module["asm"]["memory"]; - updateGlobalBufferAndViews(wasmMemory.buffer); - wasmTable = Module["asm"]["__indirect_function_table"]; - addOnInit(Module["asm"]["__wasm_call_ctors"]); - removeRunDependency("wasm-instantiate"); - } - addRunDependency("wasm-instantiate"); - function receiveInstantiationResult(result) {receiveInstance(result["instance"]);} - function instantiateArrayBuffer(receiver) { - return getBinaryPromise().then(function (binary) { - var result = WebAssembly.instantiate(binary, info); - return result; - }).then(receiver, function (reason) { - err("failed to asynchronously prepare wasm: " + reason); - abort(reason); - }); - } - function instantiateAsync() { - if (!wasmBinary && typeof WebAssembly.instantiateStreaming === "function" && !isDataURI(wasmBinaryFile) && typeof fetch === "function") { - return fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function (response) { - var result = WebAssembly.instantiateStreaming(response, info); - return result.then(receiveInstantiationResult, function (reason) { - err("wasm streaming compile failed: " + reason); - err("falling back to ArrayBuffer instantiation"); - return instantiateArrayBuffer(receiveInstantiationResult); - }); - }); - } else {return instantiateArrayBuffer(receiveInstantiationResult);} - } - if (Module["instantiateWasm"]) { - try { - var exports = Module["instantiateWasm"](info, receiveInstance); - return exports; - } catch (e) { - err("Module.instantiateWasm callback failed with error: " + e); - return false; - } - } - instantiateAsync().catch(readyPromiseReject); - return {}; - } - var tempDouble; - var tempI64; - var ASM_CONSTS = { - 581932: function ($0, $1) {MONO.string_decoder.decode($0, $0 + $1, true);}, 581983: function ($0, $1, $2) { - var js_str = MONO.string_decoder.copy($0); - try { - var res = eval(js_str); - setValue($2, 0, "i32"); - if (res === null || res === undefined) return 0; else res = res.toString(); - } catch (e) { - res = e.toString(); - setValue($2, 1, "i32"); - if (res === null || res === undefined) res = "unknown exception"; - var stack = e.stack; - if (stack) {if (stack.startsWith(res)) res = stack; else res += "\n" + stack;} - } - var buff = Module._malloc((res.length + 1) * 2); - stringToUTF16(res, buff, (res.length + 1) * 2); - setValue($1, res.length, "i32"); - return buff; - }, 582538: function ($0, $1, $2, $3, $4) { - var log_level = $0; - var message = Module.UTF8ToString($1); - var isFatal = $2; - var domain = Module.UTF8ToString($3); - var dataPtr = $4; - if (MONO["logging"] && MONO.logging["trace"]) { - MONO.logging.trace(domain, log_level, message, isFatal, dataPtr); - return; - } - if (isFatal) console.trace(message); - switch (Module.UTF8ToString($0)) { - case"critical": - case"error": - console.error(message); - break; - case"warning": - console.warn(message); - break; - case"message": - console.log(message); - break; - case"info": - console.info(message); - break; - case"debug": - console.debug(message); - break; - default: - console.log(message); - break; - } - }, 583162: function ($0, $1) { - var level = $0; - var message = Module.UTF8ToString($1); - var namespace = "Debugger.Debug"; - if (MONO["logging"] && MONO.logging["debugger"]) { - MONO.logging.debugger(level, message); - return; - } - console.debug("%s: %s", namespace, message); - }, 583402: function ($0, $1, $2, $3) {MONO.mono_wasm_add_dbg_command_received($0, $1, $2, $3);}, 583464: function ($0, $1, $2, $3) {MONO.mono_wasm_add_dbg_command_received($0, $1, $2, $3);}, 583526: function ($0, $1, $2, $3) {MONO.mono_wasm_add_dbg_command_received($0, $1, $2, $3);}, 583588: function ($0, $1, $2, $3) {MONO.mono_wasm_add_dbg_command_received($0, $1, $2, $3);}, 583650: function ($0, $1) {MONO.mono_wasm_add_dbg_command_received(1, 0, $0, $1);} - }; - function compile_function(snippet_ptr, len, is_exception) { - try { - var data = MONO.string_decoder.decode(snippet_ptr, snippet_ptr + len); - var wrapper = "(function () { " + data + " })"; - var funcFactory = eval(wrapper); - var func = funcFactory(); - if (typeof func !== "function") {throw new Error("Code must return an instance of a JavaScript function. " + "Please use `return` statement to return a function.");} - setValue(is_exception, 0, "i32"); - return BINDING.js_to_mono_obj(func, true); - } catch (e) { - res = e.toString(); - setValue(is_exception, 1, "i32"); - if (res === null || res === undefined) res = "unknown exception"; - return BINDING.js_to_mono_obj(res, true); - } - } - function callRuntimeCallbacks(callbacks) { - while (callbacks.length > 0) { - var callback = callbacks.shift(); - if (typeof callback == "function") { - callback(Module); - continue; - } - var func = callback.func; - if (typeof func === "number") {if (callback.arg === undefined) {wasmTable.get(func)();} else {wasmTable.get(func)(callback.arg);}} else {func(callback.arg === undefined ? null : callback.arg);} - } - } - function demangle(func) {return func;} - function demangleAll(text) { - var regex = /\b_Z[\w\d_]+/g; - return text.replace(regex, function (x) { - var y = demangle(x); - return x === y ? x : y + " [" + x + "]"; - }); - } - function jsStackTrace() { - var error = new Error; - if (!error.stack) { - try {throw new Error;} catch (e) {error = e;} - if (!error.stack) {return "(no stack trace available)";} - } - return error.stack.toString(); - } - var runtimeKeepaliveCounter = 0; - function keepRuntimeAlive() {return noExitRuntime || runtimeKeepaliveCounter > 0;} - function ___assert_fail(condition, filename, line, func) {abort("Assertion failed: " + UTF8ToString(condition) + ", at: " + [filename ? UTF8ToString(filename) : "unknown filename", line, func ? UTF8ToString(func) : "unknown function"]);} - var _emscripten_get_now; - _emscripten_get_now = function () {return 0;}; - var _emscripten_get_now_is_monotonic = true; - function setErrNo(value) { - HEAP32[___errno_location() >> 2] = value; - return value; - } - function _clock_gettime(clk_id, tp) { - var now; - if (clk_id === 0) {now = Date.now();} else if ((clk_id === 1 || clk_id === 4) && _emscripten_get_now_is_monotonic) {now = _emscripten_get_now();} else { - setErrNo(28); - return -1; - } - HEAP32[tp >> 2] = now / 1e3 | 0; - HEAP32[tp + 4 >> 2] = now % 1e3 * 1e3 * 1e3 | 0; - return 0; - } - function ___clock_gettime(a0, a1) {return _clock_gettime(a0, a1);} - var ExceptionInfoAttrs = { DESTRUCTOR_OFFSET: 0, REFCOUNT_OFFSET: 4, TYPE_OFFSET: 8, CAUGHT_OFFSET: 12, RETHROWN_OFFSET: 13, SIZE: 16 }; - function ___cxa_allocate_exception(size) {return _malloc(size + ExceptionInfoAttrs.SIZE) + ExceptionInfoAttrs.SIZE;} - function ExceptionInfo(excPtr) { - this.excPtr = excPtr; - this.ptr = excPtr - ExceptionInfoAttrs.SIZE; - this.set_type = function (type) {HEAP32[this.ptr + ExceptionInfoAttrs.TYPE_OFFSET >> 2] = type;}; - this.get_type = function () {return HEAP32[this.ptr + ExceptionInfoAttrs.TYPE_OFFSET >> 2];}; - this.set_destructor = function (destructor) {HEAP32[this.ptr + ExceptionInfoAttrs.DESTRUCTOR_OFFSET >> 2] = destructor;}; - this.get_destructor = function () {return HEAP32[this.ptr + ExceptionInfoAttrs.DESTRUCTOR_OFFSET >> 2];}; - this.set_refcount = function (refcount) {HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2] = refcount;}; - this.set_caught = function (caught) { - caught = caught ? 1 : 0; - HEAP8[this.ptr + ExceptionInfoAttrs.CAUGHT_OFFSET >> 0] = caught; - }; - this.get_caught = function () {return HEAP8[this.ptr + ExceptionInfoAttrs.CAUGHT_OFFSET >> 0] != 0;}; - this.set_rethrown = function (rethrown) { - rethrown = rethrown ? 1 : 0; - HEAP8[this.ptr + ExceptionInfoAttrs.RETHROWN_OFFSET >> 0] = rethrown; - }; - this.get_rethrown = function () {return HEAP8[this.ptr + ExceptionInfoAttrs.RETHROWN_OFFSET >> 0] != 0;}; - this.init = function (type, destructor) { - this.set_type(type); - this.set_destructor(destructor); - this.set_refcount(0); - this.set_caught(false); - this.set_rethrown(false); - }; - this.add_ref = function () { - var value = HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2]; - HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2] = value + 1; - }; - this.release_ref = function () { - var prev = HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2]; - HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2] = prev - 1; - return prev === 1; - }; - } - function CatchInfo(ptr) { - this.free = function () { - _free(this.ptr); - this.ptr = 0; - }; - this.set_base_ptr = function (basePtr) {HEAP32[this.ptr >> 2] = basePtr;}; - this.get_base_ptr = function () {return HEAP32[this.ptr >> 2];}; - this.set_adjusted_ptr = function (adjustedPtr) { - var ptrSize = 4; - HEAP32[this.ptr + ptrSize >> 2] = adjustedPtr; - }; - this.get_adjusted_ptr = function () { - var ptrSize = 4; - return HEAP32[this.ptr + ptrSize >> 2]; - }; - this.get_exception_ptr = function () { - var isPointer = ___cxa_is_pointer_type(this.get_exception_info().get_type()); - if (isPointer) {return HEAP32[this.get_base_ptr() >> 2];} - var adjusted = this.get_adjusted_ptr(); - if (adjusted !== 0) return adjusted; - return this.get_base_ptr(); - }; - this.get_exception_info = function () {return new ExceptionInfo(this.get_base_ptr());}; - if (ptr === undefined) { - this.ptr = _malloc(8); - this.set_adjusted_ptr(0); - } else {this.ptr = ptr;} - } - var exceptionCaught = []; - function exception_addRef(info) {info.add_ref();} - var uncaughtExceptionCount = 0; - function ___cxa_begin_catch(ptr) { - var catchInfo = new CatchInfo(ptr); - var info = catchInfo.get_exception_info(); - if (!info.get_caught()) { - info.set_caught(true); - uncaughtExceptionCount--; - } - info.set_rethrown(false); - exceptionCaught.push(catchInfo); - exception_addRef(info); - return catchInfo.get_exception_ptr(); - } - var exceptionLast = 0; - function ___cxa_free_exception(ptr) {return _free(new ExceptionInfo(ptr).ptr);} - function exception_decRef(info) { - if (info.release_ref() && !info.get_rethrown()) { - var destructor = info.get_destructor(); - if (destructor) {wasmTable.get(destructor)(info.excPtr);} - ___cxa_free_exception(info.excPtr); - } - } - function ___cxa_end_catch() { - _setThrew(0); - var catchInfo = exceptionCaught.pop(); - exception_decRef(catchInfo.get_exception_info()); - catchInfo.free(); - exceptionLast = 0; - } - function ___resumeException(catchInfoPtr) { - var catchInfo = new CatchInfo(catchInfoPtr); - var ptr = catchInfo.get_base_ptr(); - if (!exceptionLast) {exceptionLast = ptr;} - catchInfo.free(); - throw ptr; - } - function ___cxa_find_matching_catch_3() { - var thrown = exceptionLast; - if (!thrown) { - setTempRet0(0); - return 0 | 0; - } - var info = new ExceptionInfo(thrown); - var thrownType = info.get_type(); - var catchInfo = new CatchInfo; - catchInfo.set_base_ptr(thrown); - if (!thrownType) { - setTempRet0(0); - return catchInfo.ptr | 0; - } - var typeArray = Array.prototype.slice.call(arguments); - var stackTop = stackSave(); - var exceptionThrowBuf = stackAlloc(4); - HEAP32[exceptionThrowBuf >> 2] = thrown; - for (var i = 0; i < typeArray.length; i++) { - var caughtType = typeArray[i]; - if (caughtType === 0 || caughtType === thrownType) {break;} - if (___cxa_can_catch(caughtType, thrownType, exceptionThrowBuf)) { - var adjusted = HEAP32[exceptionThrowBuf >> 2]; - if (thrown !== adjusted) {catchInfo.set_adjusted_ptr(adjusted);} - setTempRet0(caughtType); - return catchInfo.ptr | 0; - } - } - stackRestore(stackTop); - setTempRet0(thrownType); - return catchInfo.ptr | 0; - } - function ___cxa_throw(ptr, type, destructor) { - var info = new ExceptionInfo(ptr); - info.init(type, destructor); - exceptionLast = ptr; - uncaughtExceptionCount++; - throw ptr; - } - var PATH = { - splitPath: function (filename) { - var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; - return splitPathRe.exec(filename).slice(1); - }, normalizeArray: function (parts, allowAboveRoot) { - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === ".") {parts.splice(i, 1);} else if (last === "..") { - parts.splice(i, 1); - up++; - } else if (up) { - parts.splice(i, 1); - up--; - } - } - if (allowAboveRoot) {for (; up; up--) {parts.unshift("..");}} - return parts; - }, normalize: function (path) { - var isAbsolute = path.charAt(0) === "/", trailingSlash = path.substr(-1) === "/"; - path = PATH.normalizeArray(path.split("/").filter(function (p) {return !!p;}), !isAbsolute).join("/"); - if (!path && !isAbsolute) {path = ".";} - if (path && trailingSlash) {path += "/";} - return (isAbsolute ? "/" : "") + path; - }, dirname: function (path) { - var result = PATH.splitPath(path), root = result[0], dir = result[1]; - if (!root && !dir) {return ".";} - if (dir) {dir = dir.substr(0, dir.length - 1);} - return root + dir; - }, basename: function (path) { - if (path === "/") return "/"; - path = PATH.normalize(path); - path = path.replace(/\/$/, ""); - var lastSlash = path.lastIndexOf("/"); - if (lastSlash === -1) return path; - return path.substr(lastSlash + 1); - }, extname: function (path) {return PATH.splitPath(path)[3];}, join: function () { - var paths = Array.prototype.slice.call(arguments, 0); - return PATH.normalize(paths.join("/")); - }, join2: function (l, r) {return PATH.normalize(l + "/" + r);} - }; - function getRandomDevice() { - if (typeof crypto === "object" && typeof crypto["getRandomValues"] === "function") { - var randomBuffer = new Uint8Array(1); - return function () { - crypto.getRandomValues(randomBuffer); - return randomBuffer[0]; - }; - } else return function () {abort("randomDevice");}; - } - var PATH_FS = { - resolve: function () { - var resolvedPath = "", resolvedAbsolute = false; - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = i >= 0 ? arguments[i] : FS.cwd(); - if (typeof path !== "string") {throw new TypeError("Arguments to path.resolve must be strings");} else if (!path) {return "";} - resolvedPath = path + "/" + resolvedPath; - resolvedAbsolute = path.charAt(0) === "/"; - } - resolvedPath = PATH.normalizeArray(resolvedPath.split("/").filter(function (p) {return !!p;}), !resolvedAbsolute).join("/"); - return (resolvedAbsolute ? "/" : "") + resolvedPath || "."; - }, relative: function (from, to) { - from = PATH_FS.resolve(from).substr(1); - to = PATH_FS.resolve(to).substr(1); - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) {if (arr[start] !== "") break;} - var end = arr.length - 1; - for (; end >= 0; end--) {if (arr[end] !== "") break;} - if (start > end) return []; - return arr.slice(start, end - start + 1); - } - var fromParts = trim(from.split("/")); - var toParts = trim(to.split("/")); - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; - } - } - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) {outputParts.push("..");} - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - return outputParts.join("/"); - } - }; - var TTY = { - ttys: [], init: function () {}, shutdown: function () {}, register: function (dev, ops) { - TTY.ttys[dev] = { input: [], output: [], ops: ops }; - FS.registerDevice(dev, TTY.stream_ops); - }, stream_ops: { - open: function (stream) { - var tty = TTY.ttys[stream.node.rdev]; - if (!tty) {throw new FS.ErrnoError(43);} - stream.tty = tty; - stream.seekable = false; - }, close: function (stream) {stream.tty.ops.flush(stream.tty);}, flush: function (stream) {stream.tty.ops.flush(stream.tty);}, read: function (stream, buffer, offset, length, pos) { - if (!stream.tty || !stream.tty.ops.get_char) {throw new FS.ErrnoError(60);} - var bytesRead = 0; - for (var i = 0; i < length; i++) { - var result; - try {result = stream.tty.ops.get_char(stream.tty);} catch (e) {throw new FS.ErrnoError(29);} - if (result === undefined && bytesRead === 0) {throw new FS.ErrnoError(6);} - if (result === null || result === undefined) break; - bytesRead++; - buffer[offset + i] = result; - } - if (bytesRead) {stream.node.timestamp = Date.now();} - return bytesRead; - }, write: function (stream, buffer, offset, length, pos) { - if (!stream.tty || !stream.tty.ops.put_char) {throw new FS.ErrnoError(60);} - try {for (var i = 0; i < length; i++) {stream.tty.ops.put_char(stream.tty, buffer[offset + i]);}} catch (e) {throw new FS.ErrnoError(29);} - if (length) {stream.node.timestamp = Date.now();} - return i; - } - }, default_tty_ops: { - get_char: function (tty) { - if (!tty.input.length) { - var result = null; - if (typeof window != "undefined" && typeof window.prompt == "function") { - result = window.prompt("Input: "); - if (result !== null) {result += "\n";} - } else if (typeof readline == "function") { - result = readline(); - if (result !== null) {result += "\n";} - } - if (!result) {return null;} - tty.input = intArrayFromString(result, true); - } - return tty.input.shift(); - }, put_char: function (tty, val) { - if (val === null || val === 10) { - out(UTF8ArrayToString(tty.output, 0)); - tty.output = []; - } else {if (val != 0) tty.output.push(val);} - }, flush: function (tty) { - if (tty.output && tty.output.length > 0) { - out(UTF8ArrayToString(tty.output, 0)); - tty.output = []; - } - } - }, default_tty1_ops: { - put_char: function (tty, val) { - if (val === null || val === 10) { - err(UTF8ArrayToString(tty.output, 0)); - tty.output = []; - } else {if (val != 0) tty.output.push(val);} - }, flush: function (tty) { - if (tty.output && tty.output.length > 0) { - err(UTF8ArrayToString(tty.output, 0)); - tty.output = []; - } - } - } - }; - function mmapAlloc(size) { - var alignedSize = alignMemory(size, 65536); - var ptr = _malloc(alignedSize); - while (size < alignedSize) HEAP8[ptr + size++] = 0; - return ptr; - } - var MEMFS = { - ops_table: null, mount: function (mount) {return MEMFS.createNode(null, "/", 16384 | 511, 0);}, createNode: function (parent, name, mode, dev) { - if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {throw new FS.ErrnoError(63);} - if (!MEMFS.ops_table) {MEMFS.ops_table = { dir: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr, lookup: MEMFS.node_ops.lookup, mknod: MEMFS.node_ops.mknod, rename: MEMFS.node_ops.rename, unlink: MEMFS.node_ops.unlink, rmdir: MEMFS.node_ops.rmdir, readdir: MEMFS.node_ops.readdir, symlink: MEMFS.node_ops.symlink }, stream: { llseek: MEMFS.stream_ops.llseek } }, file: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr }, stream: { llseek: MEMFS.stream_ops.llseek, read: MEMFS.stream_ops.read, write: MEMFS.stream_ops.write, allocate: MEMFS.stream_ops.allocate, mmap: MEMFS.stream_ops.mmap, msync: MEMFS.stream_ops.msync } }, link: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr, readlink: MEMFS.node_ops.readlink }, stream: {} }, chrdev: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr }, stream: FS.chrdev_stream_ops } };} - var node = FS.createNode(parent, name, mode, dev); - if (FS.isDir(node.mode)) { - node.node_ops = MEMFS.ops_table.dir.node; - node.stream_ops = MEMFS.ops_table.dir.stream; - node.contents = {}; - } else if (FS.isFile(node.mode)) { - node.node_ops = MEMFS.ops_table.file.node; - node.stream_ops = MEMFS.ops_table.file.stream; - node.usedBytes = 0; - node.contents = null; - } else if (FS.isLink(node.mode)) { - node.node_ops = MEMFS.ops_table.link.node; - node.stream_ops = MEMFS.ops_table.link.stream; - } else if (FS.isChrdev(node.mode)) { - node.node_ops = MEMFS.ops_table.chrdev.node; - node.stream_ops = MEMFS.ops_table.chrdev.stream; - } - node.timestamp = Date.now(); - if (parent) { - parent.contents[name] = node; - parent.timestamp = node.timestamp; - } - return node; - }, getFileDataAsTypedArray: function (node) { - if (!node.contents) return new Uint8Array(0); - if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); - return new Uint8Array(node.contents); - }, expandFileStorage: function (node, newCapacity) { - var prevCapacity = node.contents ? node.contents.length : 0; - if (prevCapacity >= newCapacity) return; - var CAPACITY_DOUBLING_MAX = 1024 * 1024; - newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0); - if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); - var oldContents = node.contents; - node.contents = new Uint8Array(newCapacity); - if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); - }, resizeFileStorage: function (node, newSize) { - if (node.usedBytes == newSize) return; - if (newSize == 0) { - node.contents = null; - node.usedBytes = 0; - } else { - var oldContents = node.contents; - node.contents = new Uint8Array(newSize); - if (oldContents) {node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes)));} - node.usedBytes = newSize; - } - }, node_ops: { - getattr: function (node) { - var attr = {}; - attr.dev = FS.isChrdev(node.mode) ? node.id : 1; - attr.ino = node.id; - attr.mode = node.mode; - attr.nlink = 1; - attr.uid = 0; - attr.gid = 0; - attr.rdev = node.rdev; - if (FS.isDir(node.mode)) {attr.size = 4096;} else if (FS.isFile(node.mode)) {attr.size = node.usedBytes;} else if (FS.isLink(node.mode)) {attr.size = node.link.length;} else {attr.size = 0;} - attr.atime = new Date(node.timestamp); - attr.mtime = new Date(node.timestamp); - attr.ctime = new Date(node.timestamp); - attr.blksize = 4096; - attr.blocks = Math.ceil(attr.size / attr.blksize); - return attr; - }, setattr: function (node, attr) { - if (attr.mode !== undefined) {node.mode = attr.mode;} - if (attr.timestamp !== undefined) {node.timestamp = attr.timestamp;} - if (attr.size !== undefined) {MEMFS.resizeFileStorage(node, attr.size);} - }, lookup: function (parent, name) {throw FS.genericErrors[44];}, mknod: function (parent, name, mode, dev) {return MEMFS.createNode(parent, name, mode, dev);}, rename: function (old_node, new_dir, new_name) { - if (FS.isDir(old_node.mode)) { - var new_node; - try {new_node = FS.lookupNode(new_dir, new_name);} catch (e) {} - if (new_node) {for (var i in new_node.contents) {throw new FS.ErrnoError(55);}} - } - delete old_node.parent.contents[old_node.name]; - old_node.parent.timestamp = Date.now(); - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - new_dir.timestamp = old_node.parent.timestamp; - old_node.parent = new_dir; - }, unlink: function (parent, name) { - delete parent.contents[name]; - parent.timestamp = Date.now(); - }, rmdir: function (parent, name) { - var node = FS.lookupNode(parent, name); - for (var i in node.contents) {throw new FS.ErrnoError(55);} - delete parent.contents[name]; - parent.timestamp = Date.now(); - }, readdir: function (node) { - var entries = [".", ".."]; - for (var key in node.contents) { - if (!node.contents.hasOwnProperty(key)) {continue;} - entries.push(key); - } - return entries; - }, symlink: function (parent, newname, oldpath) { - var node = MEMFS.createNode(parent, newname, 511 | 40960, 0); - node.link = oldpath; - return node; - }, readlink: function (node) { - if (!FS.isLink(node.mode)) {throw new FS.ErrnoError(28);} - return node.link; - } - }, stream_ops: { - read: function (stream, buffer, offset, length, position) { - var contents = stream.node.contents; - if (position >= stream.node.usedBytes) return 0; - var size = Math.min(stream.node.usedBytes - position, length); - if (size > 8 && contents.subarray) {buffer.set(contents.subarray(position, position + size), offset);} else {for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i];} - return size; - }, write: function (stream, buffer, offset, length, position, canOwn) { - if (buffer.buffer === HEAP8.buffer) {canOwn = false;} - if (!length) return 0; - var node = stream.node; - node.timestamp = Date.now(); - if (buffer.subarray && (!node.contents || node.contents.subarray)) { - if (canOwn) { - node.contents = buffer.subarray(offset, offset + length); - node.usedBytes = length; - return length; - } else if (node.usedBytes === 0 && position === 0) { - node.contents = buffer.slice(offset, offset + length); - node.usedBytes = length; - return length; - } else if (position + length <= node.usedBytes) { - node.contents.set(buffer.subarray(offset, offset + length), position); - return length; - } - } - MEMFS.expandFileStorage(node, position + length); - if (node.contents.subarray && buffer.subarray) {node.contents.set(buffer.subarray(offset, offset + length), position);} else {for (var i = 0; i < length; i++) {node.contents[position + i] = buffer[offset + i];}} - node.usedBytes = Math.max(node.usedBytes, position + length); - return length; - }, llseek: function (stream, offset, whence) { - var position = offset; - if (whence === 1) {position += stream.position;} else if (whence === 2) {if (FS.isFile(stream.node.mode)) {position += stream.node.usedBytes;}} - if (position < 0) {throw new FS.ErrnoError(28);} - return position; - }, allocate: function (stream, offset, length) { - MEMFS.expandFileStorage(stream.node, offset + length); - stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length); - }, mmap: function (stream, address, length, position, prot, flags) { - if (address !== 0) {throw new FS.ErrnoError(28);} - if (!FS.isFile(stream.node.mode)) {throw new FS.ErrnoError(43);} - var ptr; - var allocated; - var contents = stream.node.contents; - if (!(flags & 2) && contents.buffer === buffer) { - allocated = false; - ptr = contents.byteOffset; - } else { - if (position > 0 || position + length < contents.length) {if (contents.subarray) {contents = contents.subarray(position, position + length);} else {contents = Array.prototype.slice.call(contents, position, position + length);}} - allocated = true; - ptr = mmapAlloc(length); - if (!ptr) {throw new FS.ErrnoError(48);} - HEAP8.set(contents, ptr); - } - return { ptr: ptr, allocated: allocated }; - }, msync: function (stream, buffer, offset, length, mmapFlags) { - if (!FS.isFile(stream.node.mode)) {throw new FS.ErrnoError(43);} - if (mmapFlags & 2) {return 0;} - var bytesWritten = MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); - return 0; - } - } - }; - var FS = { - root: null, mounts: [], devices: {}, streams: [], nextInode: 1, nameTable: null, currentPath: "/", initialized: false, ignorePermissions: true, trackingDelegate: {}, tracking: { openFlags: { READ: 1, WRITE: 2 } }, ErrnoError: null, genericErrors: {}, filesystems: null, syncFSRequests: 0, lookupPath: function (path, opts) { - path = PATH_FS.resolve(FS.cwd(), path); - opts = opts || {}; - if (!path) return { path: "", node: null }; - var defaults = { follow_mount: true, recurse_count: 0 }; - for (var key in defaults) {if (opts[key] === undefined) {opts[key] = defaults[key];}} - if (opts.recurse_count > 8) {throw new FS.ErrnoError(32);} - var parts = PATH.normalizeArray(path.split("/").filter(function (p) {return !!p;}), false); - var current = FS.root; - var current_path = "/"; - for (var i = 0; i < parts.length; i++) { - var islast = i === parts.length - 1; - if (islast && opts.parent) {break;} - current = FS.lookupNode(current, parts[i]); - current_path = PATH.join2(current_path, parts[i]); - if (FS.isMountpoint(current)) {if (!islast || islast && opts.follow_mount) {current = current.mounted.root;}} - if (!islast || opts.follow) { - var count = 0; - while (FS.isLink(current.mode)) { - var link = FS.readlink(current_path); - current_path = PATH_FS.resolve(PATH.dirname(current_path), link); - var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count }); - current = lookup.node; - if (count++ > 40) {throw new FS.ErrnoError(32);} - } - } - } - return { path: current_path, node: current }; - }, getPath: function (node) { - var path; - while (true) { - if (FS.isRoot(node)) { - var mount = node.mount.mountpoint; - if (!path) return mount; - return mount[mount.length - 1] !== "/" ? mount + "/" + path : mount + path; - } - path = path ? node.name + "/" + path : node.name; - node = node.parent; - } - }, hashName: function (parentid, name) { - var hash = 0; - for (var i = 0; i < name.length; i++) {hash = (hash << 5) - hash + name.charCodeAt(i) | 0;} - return (parentid + hash >>> 0) % FS.nameTable.length; - }, hashAddNode: function (node) { - var hash = FS.hashName(node.parent.id, node.name); - node.name_next = FS.nameTable[hash]; - FS.nameTable[hash] = node; - }, hashRemoveNode: function (node) { - var hash = FS.hashName(node.parent.id, node.name); - if (FS.nameTable[hash] === node) {FS.nameTable[hash] = node.name_next;} else { - var current = FS.nameTable[hash]; - while (current) { - if (current.name_next === node) { - current.name_next = node.name_next; - break; - } - current = current.name_next; - } - } - }, lookupNode: function (parent, name) { - var errCode = FS.mayLookup(parent); - if (errCode) {throw new FS.ErrnoError(errCode, parent);} - var hash = FS.hashName(parent.id, name); - for (var node = FS.nameTable[hash]; node; node = node.name_next) { - var nodeName = node.name; - if (node.parent.id === parent.id && nodeName === name) {return node;} - } - return FS.lookup(parent, name); - }, createNode: function (parent, name, mode, rdev) { - var node = new FS.FSNode(parent, name, mode, rdev); - FS.hashAddNode(node); - return node; - }, destroyNode: function (node) {FS.hashRemoveNode(node);}, isRoot: function (node) {return node === node.parent;}, isMountpoint: function (node) {return !!node.mounted;}, isFile: function (mode) {return (mode & 61440) === 32768;}, isDir: function (mode) {return (mode & 61440) === 16384;}, isLink: function (mode) {return (mode & 61440) === 40960;}, isChrdev: function (mode) {return (mode & 61440) === 8192;}, isBlkdev: function (mode) {return (mode & 61440) === 24576;}, isFIFO: function (mode) {return (mode & 61440) === 4096;}, isSocket: function (mode) {return (mode & 49152) === 49152;}, flagModes: { "r": 0, "r+": 2, "w": 577, "w+": 578, "a": 1089, "a+": 1090 }, modeStringToFlags: function (str) { - var flags = FS.flagModes[str]; - if (typeof flags === "undefined") {throw new Error("Unknown file open mode: " + str);} - return flags; - }, flagsToPermissionString: function (flag) { - var perms = ["r", "w", "rw"][flag & 3]; - if (flag & 512) {perms += "w";} - return perms; - }, nodePermissions: function (node, perms) { - if (FS.ignorePermissions) {return 0;} - if (perms.includes("r") && !(node.mode & 292)) {return 2;} else if (perms.includes("w") && !(node.mode & 146)) {return 2;} else if (perms.includes("x") && !(node.mode & 73)) {return 2;} - return 0; - }, mayLookup: function (dir) { - var errCode = FS.nodePermissions(dir, "x"); - if (errCode) return errCode; - if (!dir.node_ops.lookup) return 2; - return 0; - }, mayCreate: function (dir, name) { - try { - var node = FS.lookupNode(dir, name); - return 20; - } catch (e) {} - return FS.nodePermissions(dir, "wx"); - }, mayDelete: function (dir, name, isdir) { - var node; - try {node = FS.lookupNode(dir, name);} catch (e) {return e.errno;} - var errCode = FS.nodePermissions(dir, "wx"); - if (errCode) {return errCode;} - if (isdir) { - if (!FS.isDir(node.mode)) {return 54;} - if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {return 10;} - } else {if (FS.isDir(node.mode)) {return 31;}} - return 0; - }, mayOpen: function (node, flags) { - if (!node) {return 44;} - if (FS.isLink(node.mode)) {return 32;} else if (FS.isDir(node.mode)) {if (FS.flagsToPermissionString(flags) !== "r" || flags & 512) {return 31;}} - return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); - }, MAX_OPEN_FDS: 4096, nextfd: function (fd_start, fd_end) { - fd_start = fd_start || 0; - fd_end = fd_end || FS.MAX_OPEN_FDS; - for (var fd = fd_start; fd <= fd_end; fd++) {if (!FS.streams[fd]) {return fd;}} - throw new FS.ErrnoError(33); - }, getStream: function (fd) {return FS.streams[fd];}, createStream: function (stream, fd_start, fd_end) { - if (!FS.FSStream) { - FS.FSStream = function () {}; - FS.FSStream.prototype = { object: { get: function () {return this.node;}, set: function (val) {this.node = val;} }, isRead: { get: function () {return (this.flags & 2097155) !== 1;} }, isWrite: { get: function () {return (this.flags & 2097155) !== 0;} }, isAppend: { get: function () {return this.flags & 1024;} } }; - } - var newStream = new FS.FSStream; - for (var p in stream) {newStream[p] = stream[p];} - stream = newStream; - var fd = FS.nextfd(fd_start, fd_end); - stream.fd = fd; - FS.streams[fd] = stream; - return stream; - }, closeStream: function (fd) {FS.streams[fd] = null;}, chrdev_stream_ops: { - open: function (stream) { - var device = FS.getDevice(stream.node.rdev); - stream.stream_ops = device.stream_ops; - if (stream.stream_ops.open) {stream.stream_ops.open(stream);} - }, llseek: function () {throw new FS.ErrnoError(70);} - }, major: function (dev) {return dev >> 8;}, minor: function (dev) {return dev & 255;}, makedev: function (ma, mi) {return ma << 8 | mi;}, registerDevice: function (dev, ops) {FS.devices[dev] = { stream_ops: ops };}, getDevice: function (dev) {return FS.devices[dev];}, getMounts: function (mount) { - var mounts = []; - var check = [mount]; - while (check.length) { - var m = check.pop(); - mounts.push(m); - check.push.apply(check, m.mounts); - } - return mounts; - }, syncfs: function (populate, callback) { - if (typeof populate === "function") { - callback = populate; - populate = false; - } - FS.syncFSRequests++; - if (FS.syncFSRequests > 1) {err("warning: " + FS.syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work");} - var mounts = FS.getMounts(FS.root.mount); - var completed = 0; - function doCallback(errCode) { - FS.syncFSRequests--; - return callback(errCode); - } - function done(errCode) { - if (errCode) { - if (!done.errored) { - done.errored = true; - return doCallback(errCode); - } - return; - } - if (++completed >= mounts.length) {doCallback(null);} - } - mounts.forEach(function (mount) { - if (!mount.type.syncfs) {return done(null);} - mount.type.syncfs(mount, populate, done); - }); - }, mount: function (type, opts, mountpoint) { - var root = mountpoint === "/"; - var pseudo = !mountpoint; - var node; - if (root && FS.root) {throw new FS.ErrnoError(10);} else if (!root && !pseudo) { - var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); - mountpoint = lookup.path; - node = lookup.node; - if (FS.isMountpoint(node)) {throw new FS.ErrnoError(10);} - if (!FS.isDir(node.mode)) {throw new FS.ErrnoError(54);} - } - var mount = { type: type, opts: opts, mountpoint: mountpoint, mounts: [] }; - var mountRoot = type.mount(mount); - mountRoot.mount = mount; - mount.root = mountRoot; - if (root) {FS.root = mountRoot;} else if (node) { - node.mounted = mount; - if (node.mount) {node.mount.mounts.push(mount);} - } - return mountRoot; - }, unmount: function (mountpoint) { - var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); - if (!FS.isMountpoint(lookup.node)) {throw new FS.ErrnoError(28);} - var node = lookup.node; - var mount = node.mounted; - var mounts = FS.getMounts(mount); - Object.keys(FS.nameTable).forEach(function (hash) { - var current = FS.nameTable[hash]; - while (current) { - var next = current.name_next; - if (mounts.includes(current.mount)) {FS.destroyNode(current);} - current = next; - } - }); - node.mounted = null; - var idx = node.mount.mounts.indexOf(mount); - node.mount.mounts.splice(idx, 1); - }, lookup: function (parent, name) {return parent.node_ops.lookup(parent, name);}, mknod: function (path, mode, dev) { - var lookup = FS.lookupPath(path, { parent: true }); - var parent = lookup.node; - var name = PATH.basename(path); - if (!name || name === "." || name === "..") {throw new FS.ErrnoError(28);} - var errCode = FS.mayCreate(parent, name); - if (errCode) {throw new FS.ErrnoError(errCode);} - if (!parent.node_ops.mknod) {throw new FS.ErrnoError(63);} - return parent.node_ops.mknod(parent, name, mode, dev); - }, create: function (path, mode) { - mode = mode !== undefined ? mode : 438; - mode &= 4095; - mode |= 32768; - return FS.mknod(path, mode, 0); - }, mkdir: function (path, mode) { - mode = mode !== undefined ? mode : 511; - mode &= 511 | 512; - mode |= 16384; - return FS.mknod(path, mode, 0); - }, mkdirTree: function (path, mode) { - var dirs = path.split("/"); - var d = ""; - for (var i = 0; i < dirs.length; ++i) { - if (!dirs[i]) continue; - d += "/" + dirs[i]; - try {FS.mkdir(d, mode);} catch (e) {if (e.errno != 20) throw e;} - } - }, mkdev: function (path, mode, dev) { - if (typeof dev === "undefined") { - dev = mode; - mode = 438; - } - mode |= 8192; - return FS.mknod(path, mode, dev); - }, symlink: function (oldpath, newpath) { - if (!PATH_FS.resolve(oldpath)) {throw new FS.ErrnoError(44);} - var lookup = FS.lookupPath(newpath, { parent: true }); - var parent = lookup.node; - if (!parent) {throw new FS.ErrnoError(44);} - var newname = PATH.basename(newpath); - var errCode = FS.mayCreate(parent, newname); - if (errCode) {throw new FS.ErrnoError(errCode);} - if (!parent.node_ops.symlink) {throw new FS.ErrnoError(63);} - return parent.node_ops.symlink(parent, newname, oldpath); - }, rename: function (old_path, new_path) { - var old_dirname = PATH.dirname(old_path); - var new_dirname = PATH.dirname(new_path); - var old_name = PATH.basename(old_path); - var new_name = PATH.basename(new_path); - var lookup, old_dir, new_dir; - lookup = FS.lookupPath(old_path, { parent: true }); - old_dir = lookup.node; - lookup = FS.lookupPath(new_path, { parent: true }); - new_dir = lookup.node; - if (!old_dir || !new_dir) throw new FS.ErrnoError(44); - if (old_dir.mount !== new_dir.mount) {throw new FS.ErrnoError(75);} - var old_node = FS.lookupNode(old_dir, old_name); - var relative = PATH_FS.relative(old_path, new_dirname); - if (relative.charAt(0) !== ".") {throw new FS.ErrnoError(28);} - relative = PATH_FS.relative(new_path, old_dirname); - if (relative.charAt(0) !== ".") {throw new FS.ErrnoError(55);} - var new_node; - try {new_node = FS.lookupNode(new_dir, new_name);} catch (e) {} - if (old_node === new_node) {return;} - var isdir = FS.isDir(old_node.mode); - var errCode = FS.mayDelete(old_dir, old_name, isdir); - if (errCode) {throw new FS.ErrnoError(errCode);} - errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name); - if (errCode) {throw new FS.ErrnoError(errCode);} - if (!old_dir.node_ops.rename) {throw new FS.ErrnoError(63);} - if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) {throw new FS.ErrnoError(10);} - if (new_dir !== old_dir) { - errCode = FS.nodePermissions(old_dir, "w"); - if (errCode) {throw new FS.ErrnoError(errCode);} - } - try {if (FS.trackingDelegate["willMovePath"]) {FS.trackingDelegate["willMovePath"](old_path, new_path);}} catch (e) {err("FS.trackingDelegate['willMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message);} - FS.hashRemoveNode(old_node); - try {old_dir.node_ops.rename(old_node, new_dir, new_name);} catch (e) {throw e;} finally {FS.hashAddNode(old_node);} - try {if (FS.trackingDelegate["onMovePath"]) FS.trackingDelegate["onMovePath"](old_path, new_path);} catch (e) {err("FS.trackingDelegate['onMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message);} - }, rmdir: function (path) { - var lookup = FS.lookupPath(path, { parent: true }); - var parent = lookup.node; - var name = PATH.basename(path); - var node = FS.lookupNode(parent, name); - var errCode = FS.mayDelete(parent, name, true); - if (errCode) {throw new FS.ErrnoError(errCode);} - if (!parent.node_ops.rmdir) {throw new FS.ErrnoError(63);} - if (FS.isMountpoint(node)) {throw new FS.ErrnoError(10);} - try {if (FS.trackingDelegate["willDeletePath"]) {FS.trackingDelegate["willDeletePath"](path);}} catch (e) {err("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message);} - parent.node_ops.rmdir(parent, name); - FS.destroyNode(node); - try {if (FS.trackingDelegate["onDeletePath"]) FS.trackingDelegate["onDeletePath"](path);} catch (e) {err("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message);} - }, readdir: function (path) { - var lookup = FS.lookupPath(path, { follow: true }); - var node = lookup.node; - if (!node.node_ops.readdir) {throw new FS.ErrnoError(54);} - return node.node_ops.readdir(node); - }, unlink: function (path) { - var lookup = FS.lookupPath(path, { parent: true }); - var parent = lookup.node; - var name = PATH.basename(path); - var node = FS.lookupNode(parent, name); - var errCode = FS.mayDelete(parent, name, false); - if (errCode) {throw new FS.ErrnoError(errCode);} - if (!parent.node_ops.unlink) {throw new FS.ErrnoError(63);} - if (FS.isMountpoint(node)) {throw new FS.ErrnoError(10);} - try {if (FS.trackingDelegate["willDeletePath"]) {FS.trackingDelegate["willDeletePath"](path);}} catch (e) {err("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message);} - parent.node_ops.unlink(parent, name); - FS.destroyNode(node); - try {if (FS.trackingDelegate["onDeletePath"]) FS.trackingDelegate["onDeletePath"](path);} catch (e) {err("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message);} - }, readlink: function (path) { - var lookup = FS.lookupPath(path); - var link = lookup.node; - if (!link) {throw new FS.ErrnoError(44);} - if (!link.node_ops.readlink) {throw new FS.ErrnoError(28);} - return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link)); - }, stat: function (path, dontFollow) { - var lookup = FS.lookupPath(path, { follow: !dontFollow }); - var node = lookup.node; - if (!node) {throw new FS.ErrnoError(44);} - if (!node.node_ops.getattr) {throw new FS.ErrnoError(63);} - return node.node_ops.getattr(node); - }, lstat: function (path) {return FS.stat(path, true);}, chmod: function (path, mode, dontFollow) { - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { follow: !dontFollow }); - node = lookup.node; - } else {node = path;} - if (!node.node_ops.setattr) {throw new FS.ErrnoError(63);} - node.node_ops.setattr(node, { mode: mode & 4095 | node.mode & ~4095, timestamp: Date.now() }); - }, lchmod: function (path, mode) {FS.chmod(path, mode, true);}, fchmod: function (fd, mode) { - var stream = FS.getStream(fd); - if (!stream) {throw new FS.ErrnoError(8);} - FS.chmod(stream.node, mode); - }, chown: function (path, uid, gid, dontFollow) { - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { follow: !dontFollow }); - node = lookup.node; - } else {node = path;} - if (!node.node_ops.setattr) {throw new FS.ErrnoError(63);} - node.node_ops.setattr(node, { timestamp: Date.now() }); - }, lchown: function (path, uid, gid) {FS.chown(path, uid, gid, true);}, fchown: function (fd, uid, gid) { - var stream = FS.getStream(fd); - if (!stream) {throw new FS.ErrnoError(8);} - FS.chown(stream.node, uid, gid); - }, truncate: function (path, len) { - if (len < 0) {throw new FS.ErrnoError(28);} - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { follow: true }); - node = lookup.node; - } else {node = path;} - if (!node.node_ops.setattr) {throw new FS.ErrnoError(63);} - if (FS.isDir(node.mode)) {throw new FS.ErrnoError(31);} - if (!FS.isFile(node.mode)) {throw new FS.ErrnoError(28);} - var errCode = FS.nodePermissions(node, "w"); - if (errCode) {throw new FS.ErrnoError(errCode);} - node.node_ops.setattr(node, { size: len, timestamp: Date.now() }); - }, ftruncate: function (fd, len) { - var stream = FS.getStream(fd); - if (!stream) {throw new FS.ErrnoError(8);} - if ((stream.flags & 2097155) === 0) {throw new FS.ErrnoError(28);} - FS.truncate(stream.node, len); - }, utime: function (path, atime, mtime) { - var lookup = FS.lookupPath(path, { follow: true }); - var node = lookup.node; - node.node_ops.setattr(node, { timestamp: Math.max(atime, mtime) }); - }, open: function (path, flags, mode, fd_start, fd_end) { - if (path === "") {throw new FS.ErrnoError(44);} - flags = typeof flags === "string" ? FS.modeStringToFlags(flags) : flags; - mode = typeof mode === "undefined" ? 438 : mode; - if (flags & 64) {mode = mode & 4095 | 32768;} else {mode = 0;} - var node; - if (typeof path === "object") {node = path;} else { - path = PATH.normalize(path); - try { - var lookup = FS.lookupPath(path, { follow: !(flags & 131072) }); - node = lookup.node; - } catch (e) {} - } - var created = false; - if (flags & 64) { - if (node) {if (flags & 128) {throw new FS.ErrnoError(20);}} else { - node = FS.mknod(path, mode, 0); - created = true; - } - } - if (!node) {throw new FS.ErrnoError(44);} - if (FS.isChrdev(node.mode)) {flags &= ~512;} - if (flags & 65536 && !FS.isDir(node.mode)) {throw new FS.ErrnoError(54);} - if (!created) { - var errCode = FS.mayOpen(node, flags); - if (errCode) {throw new FS.ErrnoError(errCode);} - } - if (flags & 512) {FS.truncate(node, 0);} - flags &= ~(128 | 512 | 131072); - var stream = FS.createStream({ node: node, path: FS.getPath(node), flags: flags, seekable: true, position: 0, stream_ops: node.stream_ops, ungotten: [], error: false }, fd_start, fd_end); - if (stream.stream_ops.open) {stream.stream_ops.open(stream);} - if (Module["logReadFiles"] && !(flags & 1)) { - if (!FS.readFiles) FS.readFiles = {}; - if (!(path in FS.readFiles)) { - FS.readFiles[path] = 1; - err("FS.trackingDelegate error on read file: " + path); - } - } - try { - if (FS.trackingDelegate["onOpenFile"]) { - var trackingFlags = 0; - if ((flags & 2097155) !== 1) {trackingFlags |= FS.tracking.openFlags.READ;} - if ((flags & 2097155) !== 0) {trackingFlags |= FS.tracking.openFlags.WRITE;} - FS.trackingDelegate["onOpenFile"](path, trackingFlags); - } - } catch (e) {err("FS.trackingDelegate['onOpenFile']('" + path + "', flags) threw an exception: " + e.message);} - return stream; - }, close: function (stream) { - if (FS.isClosed(stream)) {throw new FS.ErrnoError(8);} - if (stream.getdents) stream.getdents = null; - try {if (stream.stream_ops.close) {stream.stream_ops.close(stream);}} catch (e) {throw e;} finally {FS.closeStream(stream.fd);} - stream.fd = null; - }, isClosed: function (stream) {return stream.fd === null;}, llseek: function (stream, offset, whence) { - if (FS.isClosed(stream)) {throw new FS.ErrnoError(8);} - if (!stream.seekable || !stream.stream_ops.llseek) {throw new FS.ErrnoError(70);} - if (whence != 0 && whence != 1 && whence != 2) {throw new FS.ErrnoError(28);} - stream.position = stream.stream_ops.llseek(stream, offset, whence); - stream.ungotten = []; - return stream.position; - }, read: function (stream, buffer, offset, length, position) { - if (length < 0 || position < 0) {throw new FS.ErrnoError(28);} - if (FS.isClosed(stream)) {throw new FS.ErrnoError(8);} - if ((stream.flags & 2097155) === 1) {throw new FS.ErrnoError(8);} - if (FS.isDir(stream.node.mode)) {throw new FS.ErrnoError(31);} - if (!stream.stream_ops.read) {throw new FS.ErrnoError(28);} - var seeking = typeof position !== "undefined"; - if (!seeking) {position = stream.position;} else if (!stream.seekable) {throw new FS.ErrnoError(70);} - var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); - if (!seeking) stream.position += bytesRead; - return bytesRead; - }, write: function (stream, buffer, offset, length, position, canOwn) { - if (length < 0 || position < 0) {throw new FS.ErrnoError(28);} - if (FS.isClosed(stream)) {throw new FS.ErrnoError(8);} - if ((stream.flags & 2097155) === 0) {throw new FS.ErrnoError(8);} - if (FS.isDir(stream.node.mode)) {throw new FS.ErrnoError(31);} - if (!stream.stream_ops.write) {throw new FS.ErrnoError(28);} - if (stream.seekable && stream.flags & 1024) {FS.llseek(stream, 0, 2);} - var seeking = typeof position !== "undefined"; - if (!seeking) {position = stream.position;} else if (!stream.seekable) {throw new FS.ErrnoError(70);} - var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); - if (!seeking) stream.position += bytesWritten; - try {if (stream.path && FS.trackingDelegate["onWriteToFile"]) FS.trackingDelegate["onWriteToFile"](stream.path);} catch (e) {err("FS.trackingDelegate['onWriteToFile']('" + stream.path + "') threw an exception: " + e.message);} - return bytesWritten; - }, allocate: function (stream, offset, length) { - if (FS.isClosed(stream)) {throw new FS.ErrnoError(8);} - if (offset < 0 || length <= 0) {throw new FS.ErrnoError(28);} - if ((stream.flags & 2097155) === 0) {throw new FS.ErrnoError(8);} - if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) {throw new FS.ErrnoError(43);} - if (!stream.stream_ops.allocate) {throw new FS.ErrnoError(138);} - stream.stream_ops.allocate(stream, offset, length); - }, mmap: function (stream, address, length, position, prot, flags) { - if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) {throw new FS.ErrnoError(2);} - if ((stream.flags & 2097155) === 1) {throw new FS.ErrnoError(2);} - if (!stream.stream_ops.mmap) {throw new FS.ErrnoError(43);} - return stream.stream_ops.mmap(stream, address, length, position, prot, flags); - }, msync: function (stream, buffer, offset, length, mmapFlags) { - if (!stream || !stream.stream_ops.msync) {return 0;} - return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); - }, munmap: function (stream) {return 0;}, ioctl: function (stream, cmd, arg) { - if (!stream.stream_ops.ioctl) {throw new FS.ErrnoError(59);} - return stream.stream_ops.ioctl(stream, cmd, arg); - }, readFile: function (path, opts) { - opts = opts || {}; - opts.flags = opts.flags || 0; - opts.encoding = opts.encoding || "binary"; - if (opts.encoding !== "utf8" && opts.encoding !== "binary") {throw new Error("Invalid encoding type \"" + opts.encoding + "\"");} - var ret; - var stream = FS.open(path, opts.flags); - var stat = FS.stat(path); - var length = stat.size; - var buf = new Uint8Array(length); - FS.read(stream, buf, 0, length, 0); - if (opts.encoding === "utf8") {ret = UTF8ArrayToString(buf, 0);} else if (opts.encoding === "binary") {ret = buf;} - FS.close(stream); - return ret; - }, writeFile: function (path, data, opts) { - opts = opts || {}; - opts.flags = opts.flags || 577; - var stream = FS.open(path, opts.flags, opts.mode); - if (typeof data === "string") { - var buf = new Uint8Array(lengthBytesUTF8(data) + 1); - var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); - FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); - } else if (ArrayBuffer.isView(data)) {FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn);} else {throw new Error("Unsupported data type");} - FS.close(stream); - }, cwd: function () {return FS.currentPath;}, chdir: function (path) { - var lookup = FS.lookupPath(path, { follow: true }); - if (lookup.node === null) {throw new FS.ErrnoError(44);} - if (!FS.isDir(lookup.node.mode)) {throw new FS.ErrnoError(54);} - var errCode = FS.nodePermissions(lookup.node, "x"); - if (errCode) {throw new FS.ErrnoError(errCode);} - FS.currentPath = lookup.path; - }, createDefaultDirectories: function () { - FS.mkdir("/tmp"); - FS.mkdir("/home"); - FS.mkdir("/home/web_user"); - }, createDefaultDevices: function () { - FS.mkdir("/dev"); - FS.registerDevice(FS.makedev(1, 3), { read: function () {return 0;}, write: function (stream, buffer, offset, length, pos) {return length;} }); - FS.mkdev("/dev/null", FS.makedev(1, 3)); - TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); - TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); - FS.mkdev("/dev/tty", FS.makedev(5, 0)); - FS.mkdev("/dev/tty1", FS.makedev(6, 0)); - var random_device = getRandomDevice(); - FS.createDevice("/dev", "random", random_device); - FS.createDevice("/dev", "urandom", random_device); - FS.mkdir("/dev/shm"); - FS.mkdir("/dev/shm/tmp"); - }, createSpecialDirectories: function () { - FS.mkdir("/proc"); - var proc_self = FS.mkdir("/proc/self"); - FS.mkdir("/proc/self/fd"); - FS.mount({ - mount: function () { - var node = FS.createNode(proc_self, "fd", 16384 | 511, 73); - node.node_ops = { - lookup: function (parent, name) { - var fd = +name; - var stream = FS.getStream(fd); - if (!stream) throw new FS.ErrnoError(8); - var ret = { parent: null, mount: { mountpoint: "fake" }, node_ops: { readlink: function () {return stream.path;} } }; - ret.parent = ret; - return ret; - } - }; - return node; - } - }, {}, "/proc/self/fd"); - }, createStandardStreams: function () { - if (Module["stdin"]) {FS.createDevice("/dev", "stdin", Module["stdin"]);} else {FS.symlink("/dev/tty", "/dev/stdin");} - if (Module["stdout"]) {FS.createDevice("/dev", "stdout", null, Module["stdout"]);} else {FS.symlink("/dev/tty", "/dev/stdout");} - if (Module["stderr"]) {FS.createDevice("/dev", "stderr", null, Module["stderr"]);} else {FS.symlink("/dev/tty1", "/dev/stderr");} - var stdin = FS.open("/dev/stdin", 0); - var stdout = FS.open("/dev/stdout", 1); - var stderr = FS.open("/dev/stderr", 1); - }, ensureErrnoError: function () { - if (FS.ErrnoError) return; - FS.ErrnoError = function ErrnoError(errno, node) { - this.node = node; - this.setErrno = function (errno) {this.errno = errno;}; - this.setErrno(errno); - this.message = "FS error"; - }; - FS.ErrnoError.prototype = new Error; - FS.ErrnoError.prototype.constructor = FS.ErrnoError; - [44].forEach(function (code) { - FS.genericErrors[code] = new FS.ErrnoError(code); - FS.genericErrors[code].stack = ""; - }); - }, staticInit: function () { - FS.ensureErrnoError(); - FS.nameTable = new Array(4096); - FS.mount(MEMFS, {}, "/"); - FS.createDefaultDirectories(); - FS.createDefaultDevices(); - FS.createSpecialDirectories(); - FS.filesystems = { "MEMFS": MEMFS }; - }, init: function (input, output, error) { - FS.init.initialized = true; - FS.ensureErrnoError(); - Module["stdin"] = input || Module["stdin"]; - Module["stdout"] = output || Module["stdout"]; - Module["stderr"] = error || Module["stderr"]; - FS.createStandardStreams(); - }, quit: function () { - FS.init.initialized = false; - var fflush = Module["_fflush"]; - if (fflush) fflush(0); - for (var i = 0; i < FS.streams.length; i++) { - var stream = FS.streams[i]; - if (!stream) {continue;} - FS.close(stream); - } - }, getMode: function (canRead, canWrite) { - var mode = 0; - if (canRead) mode |= 292 | 73; - if (canWrite) mode |= 146; - return mode; - }, findObject: function (path, dontResolveLastLink) { - var ret = FS.analyzePath(path, dontResolveLastLink); - if (ret.exists) {return ret.object;} else {return null;} - }, analyzePath: function (path, dontResolveLastLink) { - try { - var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); - path = lookup.path; - } catch (e) {} - var ret = { isRoot: false, exists: false, error: 0, name: null, path: null, object: null, parentExists: false, parentPath: null, parentObject: null }; - try { - var lookup = FS.lookupPath(path, { parent: true }); - ret.parentExists = true; - ret.parentPath = lookup.path; - ret.parentObject = lookup.node; - ret.name = PATH.basename(path); - lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); - ret.exists = true; - ret.path = lookup.path; - ret.object = lookup.node; - ret.name = lookup.node.name; - ret.isRoot = lookup.path === "/"; - } catch (e) {ret.error = e.errno;} - return ret; - }, createPath: function (parent, path, canRead, canWrite) { - parent = typeof parent === "string" ? parent : FS.getPath(parent); - var parts = path.split("/").reverse(); - while (parts.length) { - var part = parts.pop(); - if (!part) continue; - var current = PATH.join2(parent, part); - try {FS.mkdir(current);} catch (e) {} - parent = current; - } - return current; - }, createFile: function (parent, name, properties, canRead, canWrite) { - var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); - var mode = FS.getMode(canRead, canWrite); - return FS.create(path, mode); - }, createDataFile: function (parent, name, data, canRead, canWrite, canOwn) { - var path = name ? PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name) : parent; - var mode = FS.getMode(canRead, canWrite); - var node = FS.create(path, mode); - if (data) { - if (typeof data === "string") { - var arr = new Array(data.length); - for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); - data = arr; - } - FS.chmod(node, mode | 146); - var stream = FS.open(node, 577); - FS.write(stream, data, 0, data.length, 0, canOwn); - FS.close(stream); - FS.chmod(node, mode); - } - return node; - }, createDevice: function (parent, name, input, output) { - var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); - var mode = FS.getMode(!!input, !!output); - if (!FS.createDevice.major) FS.createDevice.major = 64; - var dev = FS.makedev(FS.createDevice.major++, 0); - FS.registerDevice(dev, { - open: function (stream) {stream.seekable = false;}, close: function (stream) {if (output && output.buffer && output.buffer.length) {output(10);}}, read: function (stream, buffer, offset, length, pos) { - var bytesRead = 0; - for (var i = 0; i < length; i++) { - var result; - try {result = input();} catch (e) {throw new FS.ErrnoError(29);} - if (result === undefined && bytesRead === 0) {throw new FS.ErrnoError(6);} - if (result === null || result === undefined) break; - bytesRead++; - buffer[offset + i] = result; - } - if (bytesRead) {stream.node.timestamp = Date.now();} - return bytesRead; - }, write: function (stream, buffer, offset, length, pos) { - for (var i = 0; i < length; i++) {try {output(buffer[offset + i]);} catch (e) {throw new FS.ErrnoError(29);}} - if (length) {stream.node.timestamp = Date.now();} - return i; - } - }); - return FS.mkdev(path, mode, dev); - }, forceLoadFile: function (obj) { - if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; - if (typeof XMLHttpRequest !== "undefined") {throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");} else if (read_) { - try { - obj.contents = intArrayFromString(read_(obj.url), true); - obj.usedBytes = obj.contents.length; - } catch (e) {throw new FS.ErrnoError(29);} - } else {throw new Error("Cannot load without read() or XMLHttpRequest.");} - }, createLazyFile: function (parent, name, url, canRead, canWrite) { - function LazyUint8Array() { - this.lengthKnown = false; - this.chunks = []; - } - LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) { - if (idx > this.length - 1 || idx < 0) {return undefined;} - var chunkOffset = idx % this.chunkSize; - var chunkNum = idx / this.chunkSize | 0; - return this.getter(chunkNum)[chunkOffset]; - }; - LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) {this.getter = getter;}; - LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { - var xhr = new XMLHttpRequest; - xhr.open("HEAD", url, false); - xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); - var datalength = Number(xhr.getResponseHeader("Content-length")); - var header; - var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; - var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; - var chunkSize = 1024 * 1024; - if (!hasByteServing) chunkSize = datalength; - var doXHR = function (from, to) { - if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); - if (to > datalength - 1) throw new Error("only " + datalength + " bytes available! programmer error!"); - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); - if (typeof Uint8Array != "undefined") xhr.responseType = "arraybuffer"; - if (xhr.overrideMimeType) {xhr.overrideMimeType("text/plain; charset=x-user-defined");} - xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); - if (xhr.response !== undefined) {return new Uint8Array(xhr.response || []);} else {return intArrayFromString(xhr.responseText || "", true);} - }; - var lazyArray = this; - lazyArray.setDataGetter(function (chunkNum) { - var start = chunkNum * chunkSize; - var end = (chunkNum + 1) * chunkSize - 1; - end = Math.min(end, datalength - 1); - if (typeof lazyArray.chunks[chunkNum] === "undefined") {lazyArray.chunks[chunkNum] = doXHR(start, end);} - if (typeof lazyArray.chunks[chunkNum] === "undefined") throw new Error("doXHR failed!"); - return lazyArray.chunks[chunkNum]; - }); - if (usesGzip || !datalength) { - chunkSize = datalength = 1; - datalength = this.getter(0).length; - chunkSize = datalength; - out("LazyFiles on gzip forces download of the whole file when length is accessed"); - } - this._length = datalength; - this._chunkSize = chunkSize; - this.lengthKnown = true; - }; - if (typeof XMLHttpRequest !== "undefined") { - if (!ENVIRONMENT_IS_WORKER) throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc"; - var lazyArray = new LazyUint8Array; - Object.defineProperties(lazyArray, { - length: { - get: function () { - if (!this.lengthKnown) {this.cacheLength();} - return this._length; - } - }, chunkSize: { - get: function () { - if (!this.lengthKnown) {this.cacheLength();} - return this._chunkSize; - } - } - }); - var properties = { isDevice: false, contents: lazyArray }; - } else {var properties = { isDevice: false, url: url };} - var node = FS.createFile(parent, name, properties, canRead, canWrite); - if (properties.contents) {node.contents = properties.contents;} else if (properties.url) { - node.contents = null; - node.url = properties.url; - } - Object.defineProperties(node, { usedBytes: { get: function () {return this.contents.length;} } }); - var stream_ops = {}; - var keys = Object.keys(node.stream_ops); - keys.forEach(function (key) { - var fn = node.stream_ops[key]; - stream_ops[key] = function forceLoadLazyFile() { - FS.forceLoadFile(node); - return fn.apply(null, arguments); - }; - }); - stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) { - FS.forceLoadFile(node); - var contents = stream.node.contents; - if (position >= contents.length) return 0; - var size = Math.min(contents.length - position, length); - if (contents.slice) {for (var i = 0; i < size; i++) {buffer[offset + i] = contents[position + i];}} else {for (var i = 0; i < size; i++) {buffer[offset + i] = contents.get(position + i);}} - return size; - }; - node.stream_ops = stream_ops; - return node; - }, createPreloadedFile: function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) { - Browser.init(); - var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; - var dep = getUniqueRunDependency("cp " + fullname); - function processData(byteArray) { - function finish(byteArray) { - if (preFinish) preFinish(); - if (!dontCreateFile) {FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);} - if (onload) onload(); - removeRunDependency(dep); - } - var handled = false; - Module["preloadPlugins"].forEach(function (plugin) { - if (handled) return; - if (plugin["canHandle"](fullname)) { - plugin["handle"](byteArray, fullname, finish, function () { - if (onerror) onerror(); - removeRunDependency(dep); - }); - handled = true; - } - }); - if (!handled) finish(byteArray); - } - addRunDependency(dep); - if (typeof url == "string") {Browser.asyncLoad(url, function (byteArray) {processData(byteArray);}, onerror);} else {processData(url);} - }, indexedDB: function () {return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;}, DB_NAME: function () {return "EM_FS_" + window.location.pathname;}, DB_VERSION: 20, DB_STORE_NAME: "FILE_DATA", saveFilesToDB: function (paths, onload, onerror) { - onload = onload || function () {}; - onerror = onerror || function () {}; - var indexedDB = FS.indexedDB(); - try {var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);} catch (e) {return onerror(e);} - openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { - out("creating db"); - var db = openRequest.result; - db.createObjectStore(FS.DB_STORE_NAME); - }; - openRequest.onsuccess = function openRequest_onsuccess() { - var db = openRequest.result; - var transaction = db.transaction([FS.DB_STORE_NAME], "readwrite"); - var files = transaction.objectStore(FS.DB_STORE_NAME); - var ok = 0, fail = 0, total = paths.length; - function finish() {if (fail == 0) onload(); else onerror();} - paths.forEach(function (path) { - var putRequest = files.put(FS.analyzePath(path).object.contents, path); - putRequest.onsuccess = function putRequest_onsuccess() { - ok++; - if (ok + fail == total) finish(); - }; - putRequest.onerror = function putRequest_onerror() { - fail++; - if (ok + fail == total) finish(); - }; - }); - transaction.onerror = onerror; - }; - openRequest.onerror = onerror; - }, loadFilesFromDB: function (paths, onload, onerror) { - onload = onload || function () {}; - onerror = onerror || function () {}; - var indexedDB = FS.indexedDB(); - try {var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);} catch (e) {return onerror(e);} - openRequest.onupgradeneeded = onerror; - openRequest.onsuccess = function openRequest_onsuccess() { - var db = openRequest.result; - try {var transaction = db.transaction([FS.DB_STORE_NAME], "readonly");} catch (e) { - onerror(e); - return; - } - var files = transaction.objectStore(FS.DB_STORE_NAME); - var ok = 0, fail = 0, total = paths.length; - function finish() {if (fail == 0) onload(); else onerror();} - paths.forEach(function (path) { - var getRequest = files.get(path); - getRequest.onsuccess = function getRequest_onsuccess() { - if (FS.analyzePath(path).exists) {FS.unlink(path);} - FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true); - ok++; - if (ok + fail == total) finish(); - }; - getRequest.onerror = function getRequest_onerror() { - fail++; - if (ok + fail == total) finish(); - }; - }); - transaction.onerror = onerror; - }; - openRequest.onerror = onerror; - } - }; - var SYSCALLS = { - mappings: {}, DEFAULT_POLLMASK: 5, umask: 511, calculateAt: function (dirfd, path, allowEmpty) { - if (path[0] === "/") {return path;} - var dir; - if (dirfd === -100) {dir = FS.cwd();} else { - var dirstream = FS.getStream(dirfd); - if (!dirstream) throw new FS.ErrnoError(8); - dir = dirstream.path; - } - if (path.length == 0) { - if (!allowEmpty) {throw new FS.ErrnoError(44);} - return dir; - } - return PATH.join2(dir, path); - }, doStat: function (func, path, buf) { - try {var stat = func(path);} catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) {return -54;} - throw e; - } - HEAP32[buf >> 2] = stat.dev; - HEAP32[buf + 4 >> 2] = 0; - HEAP32[buf + 8 >> 2] = stat.ino; - HEAP32[buf + 12 >> 2] = stat.mode; - HEAP32[buf + 16 >> 2] = stat.nlink; - HEAP32[buf + 20 >> 2] = stat.uid; - HEAP32[buf + 24 >> 2] = stat.gid; - HEAP32[buf + 28 >> 2] = stat.rdev; - HEAP32[buf + 32 >> 2] = 0; - tempI64 = [stat.size >>> 0, (tempDouble = stat.size, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 40 >> 2] = tempI64[0], HEAP32[buf + 44 >> 2] = tempI64[1]; - HEAP32[buf + 48 >> 2] = 4096; - HEAP32[buf + 52 >> 2] = stat.blocks; - HEAP32[buf + 56 >> 2] = stat.atime.getTime() / 1e3 | 0; - HEAP32[buf + 60 >> 2] = 0; - HEAP32[buf + 64 >> 2] = stat.mtime.getTime() / 1e3 | 0; - HEAP32[buf + 68 >> 2] = 0; - HEAP32[buf + 72 >> 2] = stat.ctime.getTime() / 1e3 | 0; - HEAP32[buf + 76 >> 2] = 0; - tempI64 = [stat.ino >>> 0, (tempDouble = stat.ino, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 80 >> 2] = tempI64[0], HEAP32[buf + 84 >> 2] = tempI64[1]; - return 0; - }, doMsync: function (addr, stream, len, flags, offset) { - var buffer = HEAPU8.slice(addr, addr + len); - FS.msync(stream, buffer, offset, len, flags); - }, doMkdir: function (path, mode) { - path = PATH.normalize(path); - if (path[path.length - 1] === "/") path = path.substr(0, path.length - 1); - FS.mkdir(path, mode, 0); - return 0; - }, doMknod: function (path, mode, dev) { - switch (mode & 61440) { - case 32768: - case 8192: - case 24576: - case 4096: - case 49152: - break; - default: - return -28; - } - FS.mknod(path, mode, dev); - return 0; - }, doReadlink: function (path, buf, bufsize) { - if (bufsize <= 0) return -28; - var ret = FS.readlink(path); - var len = Math.min(bufsize, lengthBytesUTF8(ret)); - var endChar = HEAP8[buf + len]; - stringToUTF8(ret, buf, bufsize + 1); - HEAP8[buf + len] = endChar; - return len; - }, doAccess: function (path, amode) { - if (amode & ~7) {return -28;} - var node; - var lookup = FS.lookupPath(path, { follow: true }); - node = lookup.node; - if (!node) {return -44;} - var perms = ""; - if (amode & 4) perms += "r"; - if (amode & 2) perms += "w"; - if (amode & 1) perms += "x"; - if (perms && FS.nodePermissions(node, perms)) {return -2;} - return 0; - }, doDup: function (path, flags, suggestFD) { - var suggest = FS.getStream(suggestFD); - if (suggest) FS.close(suggest); - return FS.open(path, flags, 0, suggestFD, suggestFD).fd; - }, doReadv: function (stream, iov, iovcnt, offset) { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[iov + i * 8 >> 2]; - var len = HEAP32[iov + (i * 8 + 4) >> 2]; - var curr = FS.read(stream, HEAP8, ptr, len, offset); - if (curr < 0) return -1; - ret += curr; - if (curr < len) break; - } - return ret; - }, doWritev: function (stream, iov, iovcnt, offset) { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[iov + i * 8 >> 2]; - var len = HEAP32[iov + (i * 8 + 4) >> 2]; - var curr = FS.write(stream, HEAP8, ptr, len, offset); - if (curr < 0) return -1; - ret += curr; - } - return ret; - }, varargs: undefined, get: function () { - SYSCALLS.varargs += 4; - var ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; - return ret; - }, getStr: function (ptr) { - var ret = UTF8ToString(ptr); - return ret; - }, getStreamFromFD: function (fd) { - var stream = FS.getStream(fd); - if (!stream) throw new FS.ErrnoError(8); - return stream; - }, get64: function (low, high) {return low;} - }; - function ___sys_access(path, amode) { - try { - path = SYSCALLS.getStr(path); - return SYSCALLS.doAccess(path, amode); - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_chdir(path) { - try { - path = SYSCALLS.getStr(path); - FS.chdir(path); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_chmod(path, mode) { - try { - path = SYSCALLS.getStr(path); - FS.chmod(path, mode); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - var ERRNO_CODES = { - EPERM: 63, ENOENT: 44, ESRCH: 71, EINTR: 27, EIO: 29, ENXIO: 60, E2BIG: 1, ENOEXEC: 45, EBADF: 8, ECHILD: 12, EAGAIN: 6, EWOULDBLOCK: 6, ENOMEM: 48, EACCES: 2, EFAULT: 21, ENOTBLK: 105, EBUSY: 10, EEXIST: 20, EXDEV: 75, ENODEV: 43, ENOTDIR: 54, EISDIR: 31, EINVAL: 28, ENFILE: 41, EMFILE: 33, ENOTTY: 59, ETXTBSY: 74, EFBIG: 22, ENOSPC: 51, ESPIPE: 70, EROFS: 69, EMLINK: 34, EPIPE: 64, EDOM: 18, ERANGE: 68, ENOMSG: 49, EIDRM: 24, ECHRNG: 106, EL2NSYNC: 156, EL3HLT: 107, EL3RST: 108, ELNRNG: 109, EUNATCH: 110, ENOCSI: 111, EL2HLT: 112, EDEADLK: 16, ENOLCK: 46, EBADE: 113, EBADR: 114, EXFULL: 115, ENOANO: 104, EBADRQC: 103, EBADSLT: 102, EDEADLOCK: 16, EBFONT: 101, ENOSTR: 100, ENODATA: 116, ETIME: 117, ENOSR: 118, ENONET: 119, ENOPKG: 120, EREMOTE: 121, ENOLINK: 47, EADV: 122, ESRMNT: 123, ECOMM: 124, EPROTO: 65, EMULTIHOP: 36, EDOTDOT: 125, EBADMSG: 9, ENOTUNIQ: 126, EBADFD: 127, EREMCHG: 128, ELIBACC: 129, ELIBBAD: 130, ELIBSCN: 131, ELIBMAX: 132, ELIBEXEC: 133, ENOSYS: 52, ENOTEMPTY: 55, ENAMETOOLONG: 37, ELOOP: 32, EOPNOTSUPP: 138, EPFNOSUPPORT: 139, ECONNRESET: 15, ENOBUFS: 42, EAFNOSUPPORT: 5, EPROTOTYPE: 67, ENOTSOCK: 57, ENOPROTOOPT: 50, ESHUTDOWN: 140, ECONNREFUSED: 14, EADDRINUSE: 3, ECONNABORTED: 13, ENETUNREACH: 40, ENETDOWN: 38, ETIMEDOUT: 73, EHOSTDOWN: 142, EHOSTUNREACH: 23, EINPROGRESS: 26, EALREADY: 7, EDESTADDRREQ: 17, EMSGSIZE: 35, EPROTONOSUPPORT: 66, ESOCKTNOSUPPORT: 137, EADDRNOTAVAIL: 4, ENETRESET: 39, EISCONN: 30, ENOTCONN: 53, ETOOMANYREFS: 141, EUSERS: 136, EDQUOT: 19, ESTALE: 72, ENOTSUP: 138, ENOMEDIUM: 148, EILSEQ: 25, EOVERFLOW: 61, ECANCELED: 11, ENOTRECOVERABLE: 56, EOWNERDEAD: 62, ESTRPIPE: 135 - }; - var SOCKFS = { - mount: function (mount) { - Module["websocket"] = Module["websocket"] && "object" === typeof Module["websocket"] ? Module["websocket"] : {}; - Module["websocket"]._callbacks = {}; - Module["websocket"]["on"] = function (event, callback) { - if ("function" === typeof callback) {this._callbacks[event] = callback;} - return this; - }; - Module["websocket"].emit = function (event, param) {if ("function" === typeof this._callbacks[event]) {this._callbacks[event].call(this, param);}}; - return FS.createNode(null, "/", 16384 | 511, 0); - }, createSocket: function (family, type, protocol) { - type &= ~526336; - var streaming = type == 1; - if (protocol) {assert(streaming == (protocol == 6));} - var sock = { family: family, type: type, protocol: protocol, server: null, error: null, peers: {}, pending: [], recv_queue: [], sock_ops: SOCKFS.websocket_sock_ops }; - var name = SOCKFS.nextname(); - var node = FS.createNode(SOCKFS.root, name, 49152, 0); - node.sock = sock; - var stream = FS.createStream({ path: name, node: node, flags: 2, seekable: false, stream_ops: SOCKFS.stream_ops }); - sock.stream = stream; - return sock; - }, getSocket: function (fd) { - var stream = FS.getStream(fd); - if (!stream || !FS.isSocket(stream.node.mode)) {return null;} - return stream.node.sock; - }, stream_ops: { - poll: function (stream) { - var sock = stream.node.sock; - return sock.sock_ops.poll(sock); - }, ioctl: function (stream, request, varargs) { - var sock = stream.node.sock; - return sock.sock_ops.ioctl(sock, request, varargs); - }, read: function (stream, buffer, offset, length, position) { - var sock = stream.node.sock; - var msg = sock.sock_ops.recvmsg(sock, length); - if (!msg) {return 0;} - buffer.set(msg.buffer, offset); - return msg.buffer.length; - }, write: function (stream, buffer, offset, length, position) { - var sock = stream.node.sock; - return sock.sock_ops.sendmsg(sock, buffer, offset, length); - }, close: function (stream) { - var sock = stream.node.sock; - sock.sock_ops.close(sock); - } - }, nextname: function () { - if (!SOCKFS.nextname.current) {SOCKFS.nextname.current = 0;} - return "socket[" + SOCKFS.nextname.current++ + "]"; - }, websocket_sock_ops: { - createPeer: function (sock, addr, port) { - var ws; - if (typeof addr === "object") { - ws = addr; - addr = null; - port = null; - } - if (ws) { - if (ws._socket) { - addr = ws._socket.remoteAddress; - port = ws._socket.remotePort; - } else { - var result = /ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url); - if (!result) {throw new Error("WebSocket URL must be in the format ws(s)://address:port");} - addr = result[1]; - port = parseInt(result[2], 10); - } - } else { - try { - var runtimeConfig = Module["websocket"] && "object" === typeof Module["websocket"]; - var url = "ws:#".replace("#", "//"); - if (runtimeConfig) {if ("string" === typeof Module["websocket"]["url"]) {url = Module["websocket"]["url"];}} - if (url === "ws://" || url === "wss://") { - var parts = addr.split("/"); - url = url + parts[0] + ":" + port + "/" + parts.slice(1).join("/"); - } - var subProtocols = "binary"; - if (runtimeConfig) {if ("string" === typeof Module["websocket"]["subprotocol"]) {subProtocols = Module["websocket"]["subprotocol"];}} - var opts = undefined; - if (subProtocols !== "null") { - subProtocols = subProtocols.replace(/^ +| +$/g, "").split(/ *, */); - opts = ENVIRONMENT_IS_NODE ? { "protocol": subProtocols.toString() } : subProtocols; - } - if (runtimeConfig && null === Module["websocket"]["subprotocol"]) { - subProtocols = "null"; - opts = undefined; - } - var WebSocketConstructor; - {WebSocketConstructor = WebSocket;} - ws = new WebSocketConstructor(url, opts); - ws.binaryType = "arraybuffer"; - } catch (e) {throw new FS.ErrnoError(ERRNO_CODES.EHOSTUNREACH);} - } - var peer = { addr: addr, port: port, socket: ws, dgram_send_queue: [] }; - SOCKFS.websocket_sock_ops.addPeer(sock, peer); - SOCKFS.websocket_sock_ops.handlePeerEvents(sock, peer); - if (sock.type === 2 && typeof sock.sport !== "undefined") {peer.dgram_send_queue.push(new Uint8Array([255, 255, 255, 255, "p".charCodeAt(0), "o".charCodeAt(0), "r".charCodeAt(0), "t".charCodeAt(0), (sock.sport & 65280) >> 8, sock.sport & 255]));} - return peer; - }, getPeer: function (sock, addr, port) {return sock.peers[addr + ":" + port];}, addPeer: function (sock, peer) {sock.peers[peer.addr + ":" + peer.port] = peer;}, removePeer: function (sock, peer) {delete sock.peers[peer.addr + ":" + peer.port];}, handlePeerEvents: function (sock, peer) { - var first = true; - var handleOpen = function () { - Module["websocket"].emit("open", sock.stream.fd); - try { - var queued = peer.dgram_send_queue.shift(); - while (queued) { - peer.socket.send(queued); - queued = peer.dgram_send_queue.shift(); - } - } catch (e) {peer.socket.close();} - }; - function handleMessage(data) { - if (typeof data === "string") { - var encoder = new TextEncoder; - data = encoder.encode(data); - } else { - assert(data.byteLength !== undefined); - if (data.byteLength == 0) {return;} else {data = new Uint8Array(data);} - } - var wasfirst = first; - first = false; - if (wasfirst && data.length === 10 && data[0] === 255 && data[1] === 255 && data[2] === 255 && data[3] === 255 && data[4] === "p".charCodeAt(0) && data[5] === "o".charCodeAt(0) && data[6] === "r".charCodeAt(0) && data[7] === "t".charCodeAt(0)) { - var newport = data[8] << 8 | data[9]; - SOCKFS.websocket_sock_ops.removePeer(sock, peer); - peer.port = newport; - SOCKFS.websocket_sock_ops.addPeer(sock, peer); - return; - } - sock.recv_queue.push({ addr: peer.addr, port: peer.port, data: data }); - Module["websocket"].emit("message", sock.stream.fd); - } - if (ENVIRONMENT_IS_NODE) { - peer.socket.on("open", handleOpen); - peer.socket.on("message", function (data, flags) { - if (!flags.binary) {return;} - handleMessage(new Uint8Array(data).buffer); - }); - peer.socket.on("close", function () {Module["websocket"].emit("close", sock.stream.fd);}); - peer.socket.on("error", function (error) { - sock.error = ERRNO_CODES.ECONNREFUSED; - Module["websocket"].emit("error", [sock.stream.fd, sock.error, "ECONNREFUSED: Connection refused"]); - }); - } else { - peer.socket.onopen = handleOpen; - peer.socket.onclose = function () {Module["websocket"].emit("close", sock.stream.fd);}; - peer.socket.onmessage = function peer_socket_onmessage(event) {handleMessage(event.data);}; - peer.socket.onerror = function (error) { - sock.error = ERRNO_CODES.ECONNREFUSED; - Module["websocket"].emit("error", [sock.stream.fd, sock.error, "ECONNREFUSED: Connection refused"]); - }; - } - }, poll: function (sock) { - if (sock.type === 1 && sock.server) {return sock.pending.length ? 64 | 1 : 0;} - var mask = 0; - var dest = sock.type === 1 ? SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport) : null; - if (sock.recv_queue.length || !dest || dest && dest.socket.readyState === dest.socket.CLOSING || dest && dest.socket.readyState === dest.socket.CLOSED) {mask |= 64 | 1;} - if (!dest || dest && dest.socket.readyState === dest.socket.OPEN) {mask |= 4;} - if (dest && dest.socket.readyState === dest.socket.CLOSING || dest && dest.socket.readyState === dest.socket.CLOSED) {mask |= 16;} - return mask; - }, ioctl: function (sock, request, arg) { - switch (request) { - case 21531: - var bytes = 0; - if (sock.recv_queue.length) {bytes = sock.recv_queue[0].data.length;} - HEAP32[arg >> 2] = bytes; - return 0; - default: - return ERRNO_CODES.EINVAL; - } - }, close: function (sock) { - if (sock.server) { - try {sock.server.close();} catch (e) {} - sock.server = null; - } - var peers = Object.keys(sock.peers); - for (var i = 0; i < peers.length; i++) { - var peer = sock.peers[peers[i]]; - try {peer.socket.close();} catch (e) {} - SOCKFS.websocket_sock_ops.removePeer(sock, peer); - } - return 0; - }, bind: function (sock, addr, port) { - if (typeof sock.saddr !== "undefined" || typeof sock.sport !== "undefined") {throw new FS.ErrnoError(ERRNO_CODES.EINVAL);} - sock.saddr = addr; - sock.sport = port; - if (sock.type === 2) { - if (sock.server) { - sock.server.close(); - sock.server = null; - } - try {sock.sock_ops.listen(sock, 0);} catch (e) { - if (!(e instanceof FS.ErrnoError)) throw e; - if (e.errno !== ERRNO_CODES.EOPNOTSUPP) throw e; - } - } - }, connect: function (sock, addr, port) { - if (sock.server) {throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);} - if (typeof sock.daddr !== "undefined" && typeof sock.dport !== "undefined") { - var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport); - if (dest) {if (dest.socket.readyState === dest.socket.CONNECTING) {throw new FS.ErrnoError(ERRNO_CODES.EALREADY);} else {throw new FS.ErrnoError(ERRNO_CODES.EISCONN);}} - } - var peer = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port); - sock.daddr = peer.addr; - sock.dport = peer.port; - throw new FS.ErrnoError(ERRNO_CODES.EINPROGRESS); - }, listen: function (sock, backlog) {if (!ENVIRONMENT_IS_NODE) {throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);}}, accept: function (listensock) { - if (!listensock.server) {throw new FS.ErrnoError(ERRNO_CODES.EINVAL);} - var newsock = listensock.pending.shift(); - newsock.stream.flags = listensock.stream.flags; - return newsock; - }, getname: function (sock, peer) { - var addr, port; - if (peer) { - if (sock.daddr === undefined || sock.dport === undefined) {throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);} - addr = sock.daddr; - port = sock.dport; - } else { - addr = sock.saddr || 0; - port = sock.sport || 0; - } - return { addr: addr, port: port }; - }, sendmsg: function (sock, buffer, offset, length, addr, port) { - if (sock.type === 2) { - if (addr === undefined || port === undefined) { - addr = sock.daddr; - port = sock.dport; - } - if (addr === undefined || port === undefined) {throw new FS.ErrnoError(ERRNO_CODES.EDESTADDRREQ);} - } else { - addr = sock.daddr; - port = sock.dport; - } - var dest = SOCKFS.websocket_sock_ops.getPeer(sock, addr, port); - if (sock.type === 1) {if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);} else if (dest.socket.readyState === dest.socket.CONNECTING) {throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);}} - if (ArrayBuffer.isView(buffer)) { - offset += buffer.byteOffset; - buffer = buffer.buffer; - } - var data; - data = buffer.slice(offset, offset + length); - if (sock.type === 2) { - if (!dest || dest.socket.readyState !== dest.socket.OPEN) { - if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {dest = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);} - dest.dgram_send_queue.push(data); - return length; - } - } - try { - dest.socket.send(data); - return length; - } catch (e) {throw new FS.ErrnoError(ERRNO_CODES.EINVAL);} - }, recvmsg: function (sock, length) { - if (sock.type === 1 && sock.server) {throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);} - var queued = sock.recv_queue.shift(); - if (!queued) { - if (sock.type === 1) { - var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport); - if (!dest) {throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);} else if (dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {return null;} else {throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);} - } else {throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);} - } - var queuedLength = queued.data.byteLength || queued.data.length; - var queuedOffset = queued.data.byteOffset || 0; - var queuedBuffer = queued.data.buffer || queued.data; - var bytesRead = Math.min(length, queuedLength); - var res = { buffer: new Uint8Array(queuedBuffer, queuedOffset, bytesRead), addr: queued.addr, port: queued.port }; - if (sock.type === 1 && bytesRead < queuedLength) { - var bytesRemaining = queuedLength - bytesRead; - queued.data = new Uint8Array(queuedBuffer, queuedOffset + bytesRead, bytesRemaining); - sock.recv_queue.unshift(queued); - } - return res; - } - } - }; - function getSocketFromFD(fd) { - var socket = SOCKFS.getSocket(fd); - if (!socket) throw new FS.ErrnoError(8); - return socket; - } - function inetNtop4(addr) {return (addr & 255) + "." + (addr >> 8 & 255) + "." + (addr >> 16 & 255) + "." + (addr >> 24 & 255);} - function inetNtop6(ints) { - var str = ""; - var word = 0; - var longest = 0; - var lastzero = 0; - var zstart = 0; - var len = 0; - var i = 0; - var parts = [ints[0] & 65535, ints[0] >> 16, ints[1] & 65535, ints[1] >> 16, ints[2] & 65535, ints[2] >> 16, ints[3] & 65535, ints[3] >> 16]; - var hasipv4 = true; - var v4part = ""; - for (i = 0; i < 5; i++) { - if (parts[i] !== 0) { - hasipv4 = false; - break; - } - } - if (hasipv4) { - v4part = inetNtop4(parts[6] | parts[7] << 16); - if (parts[5] === -1) { - str = "::ffff:"; - str += v4part; - return str; - } - if (parts[5] === 0) { - str = "::"; - if (v4part === "0.0.0.0") v4part = ""; - if (v4part === "0.0.0.1") v4part = "1"; - str += v4part; - return str; - } - } - for (word = 0; word < 8; word++) { - if (parts[word] === 0) { - if (word - lastzero > 1) {len = 0;} - lastzero = word; - len++; - } - if (len > longest) { - longest = len; - zstart = word - longest + 1; - } - } - for (word = 0; word < 8; word++) { - if (longest > 1) { - if (parts[word] === 0 && word >= zstart && word < zstart + longest) { - if (word === zstart) { - str += ":"; - if (zstart === 0) str += ":"; - } - continue; - } - } - str += Number(_ntohs(parts[word] & 65535)).toString(16); - str += word < 7 ? ":" : ""; - } - return str; - } - function readSockaddr(sa, salen) { - var family = HEAP16[sa >> 1]; - var port = _ntohs(HEAPU16[sa + 2 >> 1]); - var addr; - switch (family) { - case 2: - if (salen !== 16) {return { errno: 28 };} - addr = HEAP32[sa + 4 >> 2]; - addr = inetNtop4(addr); - break; - case 10: - if (salen !== 28) {return { errno: 28 };} - addr = [HEAP32[sa + 8 >> 2], HEAP32[sa + 12 >> 2], HEAP32[sa + 16 >> 2], HEAP32[sa + 20 >> 2]]; - addr = inetNtop6(addr); - break; - default: - return { errno: 5 }; - } - return { family: family, addr: addr, port: port }; - } - function getSocketAddress(addrp, addrlen, allowNull) { - if (allowNull && addrp === 0) return null; - var info = readSockaddr(addrp, addrlen); - if (info.errno) throw new FS.ErrnoError(info.errno); - info.addr = DNS.lookup_addr(info.addr) || info.addr; - return info; - } - function ___sys_connect(fd, addr, addrlen) { - try { - var sock = getSocketFromFD(fd); - var info = getSocketAddress(addr, addrlen); - sock.sock_ops.connect(sock, info.addr, info.port); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_fadvise64_64(fd, offset, len, advice) {return 0;} - function ___sys_fchmod(fd, mode) { - try { - FS.fchmod(fd, mode); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_fcntl64(fd, cmd, varargs) { - SYSCALLS.varargs = varargs; - try { - var stream = SYSCALLS.getStreamFromFD(fd); - switch (cmd) { - case 0: { - var arg = SYSCALLS.get(); - if (arg < 0) {return -28;} - var newStream; - newStream = FS.open(stream.path, stream.flags, 0, arg); - return newStream.fd; - } - case 1: - case 2: - return 0; - case 3: - return stream.flags; - case 4: { - var arg = SYSCALLS.get(); - stream.flags |= arg; - return 0; - } - case 12: { - var arg = SYSCALLS.get(); - var offset = 0; - HEAP16[arg + offset >> 1] = 2; - return 0; - } - case 13: - case 14: - return 0; - case 16: - case 8: - return -28; - case 9: - setErrNo(28); - return -1; - default: {return -28;} - } - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_fstat64(fd, buf) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - return SYSCALLS.doStat(FS.stat, stream.path, buf); - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_fstatfs64(fd, size, buf) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - return ___sys_statfs64(0, size, buf); - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_ftruncate64(fd, zero, low, high) { - try { - var length = SYSCALLS.get64(low, high); - FS.ftruncate(fd, length); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_getcwd(buf, size) { - try { - if (size === 0) return -28; - var cwd = FS.cwd(); - var cwdLengthInBytes = lengthBytesUTF8(cwd); - if (size < cwdLengthInBytes + 1) return -68; - stringToUTF8(cwd, buf, size); - return buf; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_getdents64(fd, dirp, count) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - if (!stream.getdents) {stream.getdents = FS.readdir(stream.path);} - var struct_size = 280; - var pos = 0; - var off = FS.llseek(stream, 0, 1); - var idx = Math.floor(off / struct_size); - while (idx < stream.getdents.length && pos + struct_size <= count) { - var id; - var type; - var name = stream.getdents[idx]; - if (name[0] === ".") { - id = 1; - type = 4; - } else { - var child = FS.lookupNode(stream.node, name); - id = child.id; - type = FS.isChrdev(child.mode) ? 2 : FS.isDir(child.mode) ? 4 : FS.isLink(child.mode) ? 10 : 8; - } - tempI64 = [id >>> 0, (tempDouble = id, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[dirp + pos >> 2] = tempI64[0], HEAP32[dirp + pos + 4 >> 2] = tempI64[1]; - tempI64 = [(idx + 1) * struct_size >>> 0, (tempDouble = (idx + 1) * struct_size, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[dirp + pos + 8 >> 2] = tempI64[0], HEAP32[dirp + pos + 12 >> 2] = tempI64[1]; - HEAP16[dirp + pos + 16 >> 1] = 280; - HEAP8[dirp + pos + 18 >> 0] = type; - stringToUTF8(name, dirp + pos + 19, 256); - pos += struct_size; - idx += 1; - } - FS.llseek(stream, idx * struct_size, 0); - return pos; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_getpid() {return 42;} - function ___sys_getrusage(who, usage) { - try { - _memset(usage, 0, 136); - HEAP32[usage >> 2] = 1; - HEAP32[usage + 4 >> 2] = 2; - HEAP32[usage + 8 >> 2] = 3; - HEAP32[usage + 12 >> 2] = 4; - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_ioctl(fd, op, varargs) { - SYSCALLS.varargs = varargs; - try { - var stream = SYSCALLS.getStreamFromFD(fd); - switch (op) { - case 21509: - case 21505: { - if (!stream.tty) return -59; - return 0; - } - case 21510: - case 21511: - case 21512: - case 21506: - case 21507: - case 21508: { - if (!stream.tty) return -59; - return 0; - } - case 21519: { - if (!stream.tty) return -59; - var argp = SYSCALLS.get(); - HEAP32[argp >> 2] = 0; - return 0; - } - case 21520: { - if (!stream.tty) return -59; - return -28; - } - case 21531: { - var argp = SYSCALLS.get(); - return FS.ioctl(stream, op, argp); - } - case 21523: { - if (!stream.tty) return -59; - return 0; - } - case 21524: { - if (!stream.tty) return -59; - return 0; - } - default: - abort("bad ioctl syscall " + op); - } - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_link(oldpath, newpath) {return -34;} - function ___sys_lstat64(path, buf) { - try { - path = SYSCALLS.getStr(path); - return SYSCALLS.doStat(FS.lstat, path, buf); - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_madvise1(addr, length, advice) {return 0;} - function ___sys_mkdir(path, mode) { - try { - path = SYSCALLS.getStr(path); - return SYSCALLS.doMkdir(path, mode); - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function syscallMmap2(addr, len, prot, flags, fd, off) { - off <<= 12; - var ptr; - var allocated = false; - if ((flags & 16) !== 0 && addr % 65536 !== 0) {return -28;} - if ((flags & 32) !== 0) { - ptr = _memalign(65536, len); - if (!ptr) return -48; - _memset(ptr, 0, len); - allocated = true; - } else { - var info = FS.getStream(fd); - if (!info) return -8; - var res = FS.mmap(info, addr, len, off, prot, flags); - ptr = res.ptr; - allocated = res.allocated; - } - SYSCALLS.mappings[ptr] = { malloc: ptr, len: len, allocated: allocated, fd: fd, prot: prot, flags: flags, offset: off }; - return ptr; - } - function ___sys_mmap2(addr, len, prot, flags, fd, off) { - try {return syscallMmap2(addr, len, prot, flags, fd, off);} catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_msync(addr, len, flags) { - try { - var info = SYSCALLS.mappings[addr]; - if (!info) return 0; - SYSCALLS.doMsync(addr, FS.getStream(info.fd), len, info.flags, 0); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function syscallMunmap(addr, len) { - if ((addr | 0) === -1 || len === 0) {return -28;} - var info = SYSCALLS.mappings[addr]; - if (!info) return 0; - if (len === info.len) { - var stream = FS.getStream(info.fd); - if (stream) { - if (info.prot & 2) {SYSCALLS.doMsync(addr, stream, len, info.flags, info.offset);} - FS.munmap(stream); - } - SYSCALLS.mappings[addr] = null; - if (info.allocated) {_free(info.malloc);} - } - return 0; - } - function ___sys_munmap(addr, len) { - try {return syscallMunmap(addr, len);} catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_open(path, flags, varargs) { - SYSCALLS.varargs = varargs; - try { - var pathname = SYSCALLS.getStr(path); - var mode = varargs ? SYSCALLS.get() : 0; - var stream = FS.open(pathname, flags, mode); - return stream.fd; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_readlink(path, buf, bufsize) { - try { - path = SYSCALLS.getStr(path); - return SYSCALLS.doReadlink(path, buf, bufsize); - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function inetPton4(str) { - var b = str.split("."); - for (var i = 0; i < 4; i++) { - var tmp = Number(b[i]); - if (isNaN(tmp)) return null; - b[i] = tmp; - } - return (b[0] | b[1] << 8 | b[2] << 16 | b[3] << 24) >>> 0; - } - function jstoi_q(str) {return parseInt(str);} - function inetPton6(str) { - var words; - var w, offset, z; - var valid6regx = /^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i; - var parts = []; - if (!valid6regx.test(str)) {return null;} - if (str === "::") {return [0, 0, 0, 0, 0, 0, 0, 0];} - if (str.startsWith("::")) {str = str.replace("::", "Z:");} else {str = str.replace("::", ":Z:");} - if (str.indexOf(".") > 0) { - str = str.replace(new RegExp("[.]", "g"), ":"); - words = str.split(":"); - words[words.length - 4] = jstoi_q(words[words.length - 4]) + jstoi_q(words[words.length - 3]) * 256; - words[words.length - 3] = jstoi_q(words[words.length - 2]) + jstoi_q(words[words.length - 1]) * 256; - words = words.slice(0, words.length - 2); - } else {words = str.split(":");} - offset = 0; - z = 0; - for (w = 0; w < words.length; w++) { - if (typeof words[w] === "string") { - if (words[w] === "Z") { - for (z = 0; z < 8 - words.length + 1; z++) {parts[w + z] = 0;} - offset = z - 1; - } else {parts[w + offset] = _htons(parseInt(words[w], 16));} - } else {parts[w + offset] = words[w];} - } - return [parts[1] << 16 | parts[0], parts[3] << 16 | parts[2], parts[5] << 16 | parts[4], parts[7] << 16 | parts[6]]; - } - function writeSockaddr(sa, family, addr, port, addrlen) { - switch (family) { - case 2: - addr = inetPton4(addr); - if (addrlen) {HEAP32[addrlen >> 2] = 16;} - HEAP16[sa >> 1] = family; - HEAP32[sa + 4 >> 2] = addr; - HEAP16[sa + 2 >> 1] = _htons(port); - tempI64 = [0 >>> 0, (tempDouble = 0, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[sa + 8 >> 2] = tempI64[0], HEAP32[sa + 12 >> 2] = tempI64[1]; - break; - case 10: - addr = inetPton6(addr); - if (addrlen) {HEAP32[addrlen >> 2] = 28;} - HEAP32[sa >> 2] = family; - HEAP32[sa + 8 >> 2] = addr[0]; - HEAP32[sa + 12 >> 2] = addr[1]; - HEAP32[sa + 16 >> 2] = addr[2]; - HEAP32[sa + 20 >> 2] = addr[3]; - HEAP16[sa + 2 >> 1] = _htons(port); - HEAP32[sa + 4 >> 2] = 0; - HEAP32[sa + 24 >> 2] = 0; - break; - default: - return 5; - } - return 0; - } - var DNS = { - address_map: { id: 1, addrs: {}, names: {} }, lookup_name: function (name) { - var res = inetPton4(name); - if (res !== null) {return name;} - res = inetPton6(name); - if (res !== null) {return name;} - var addr; - if (DNS.address_map.addrs[name]) {addr = DNS.address_map.addrs[name];} else { - var id = DNS.address_map.id++; - assert(id < 65535, "exceeded max address mappings of 65535"); - addr = "172.29." + (id & 255) + "." + (id & 65280); - DNS.address_map.names[addr] = name; - DNS.address_map.addrs[name] = addr; - } - return addr; - }, lookup_addr: function (addr) { - if (DNS.address_map.names[addr]) {return DNS.address_map.names[addr];} - return null; - } - }; - function ___sys_recvfrom(fd, buf, len, flags, addr, addrlen) { - try { - var sock = getSocketFromFD(fd); - var msg = sock.sock_ops.recvmsg(sock, len); - if (!msg) return 0; - if (addr) {var errno = writeSockaddr(addr, sock.family, DNS.lookup_name(msg.addr), msg.port, addrlen);} - HEAPU8.set(msg.buffer, buf); - return msg.buffer.byteLength; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_rename(old_path, new_path) { - try { - old_path = SYSCALLS.getStr(old_path); - new_path = SYSCALLS.getStr(new_path); - FS.rename(old_path, new_path); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_rmdir(path) { - try { - path = SYSCALLS.getStr(path); - FS.rmdir(path); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_sendto(fd, message, length, flags, addr, addr_len) { - try { - var sock = getSocketFromFD(fd); - var dest = getSocketAddress(addr, addr_len, true); - if (!dest) {return FS.write(sock.stream, HEAP8, message, length);} else {return sock.sock_ops.sendmsg(sock, HEAP8, message, length, dest.addr, dest.port);} - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_setsockopt(fd) { - try {return -50;} catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_shutdown(fd, how) { - try { - getSocketFromFD(fd); - return -52; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_socket(domain, type, protocol) { - try { - var sock = SOCKFS.createSocket(domain, type, protocol); - return sock.stream.fd; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_stat64(path, buf) { - try { - path = SYSCALLS.getStr(path); - return SYSCALLS.doStat(FS.stat, path, buf); - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_symlink(target, linkpath) { - try { - target = SYSCALLS.getStr(target); - linkpath = SYSCALLS.getStr(linkpath); - FS.symlink(target, linkpath); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_unlink(path) { - try { - path = SYSCALLS.getStr(path); - FS.unlink(path); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function ___sys_utimensat(dirfd, path, times, flags) { - try { - path = SYSCALLS.getStr(path); - path = SYSCALLS.calculateAt(dirfd, path, true); - var seconds = HEAP32[times >> 2]; - var nanoseconds = HEAP32[times + 4 >> 2]; - var atime = seconds * 1e3 + nanoseconds / (1e3 * 1e3); - times += 8; - seconds = HEAP32[times >> 2]; - nanoseconds = HEAP32[times + 4 >> 2]; - var mtime = seconds * 1e3 + nanoseconds / (1e3 * 1e3); - FS.utime(path, atime, mtime); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return -e.errno; - } - } - function _abort() {abort();} - function _emscripten_get_now_res() {return 1e3;} - function _clock_getres(clk_id, res) { - var nsec; - if (clk_id === 0) {nsec = 1e3 * 1e3;} else if (clk_id === 1 && _emscripten_get_now_is_monotonic) {nsec = _emscripten_get_now_res();} else { - setErrNo(28); - return -1; - } - HEAP32[res >> 2] = nsec / 1e9 | 0; - HEAP32[res + 4 >> 2] = nsec; - return 0; - } - function _difftime(time1, time0) {return time1 - time0;} - var DOTNETENTROPY = { - batchedQuotaMax: 65536, getBatchedRandomValues: function (buffer, bufferLength) { - for (var i = 0; i < bufferLength; i += this.batchedQuotaMax) { - var view = new Uint8Array(Module.HEAPU8.buffer, buffer + i, Math.min(bufferLength - i, this.batchedQuotaMax)); - crypto.getRandomValues(view); - } - } - }; - function _dotnet_browser_entropy(buffer, bufferLength) { - if (typeof crypto === "object" && typeof crypto["getRandomValues"] === "function") { - DOTNETENTROPY.getBatchedRandomValues(buffer, bufferLength); - return 0; - } else {return -1;} - } - var readAsmConstArgsArray = []; - function readAsmConstArgs(sigPtr, buf) { - readAsmConstArgsArray.length = 0; - var ch; - buf >>= 2; - while (ch = HEAPU8[sigPtr++]) { - var double = ch < 105; - if (double && buf & 1) buf++; - readAsmConstArgsArray.push(double ? HEAPF64[buf++ >> 1] : HEAP32[buf]); - ++buf; - } - return readAsmConstArgsArray; - } - function _emscripten_asm_const_int(code, sigPtr, argbuf) { - var args = readAsmConstArgs(sigPtr, argbuf); - return ASM_CONSTS[code].apply(null, args); - } - function _emscripten_get_heap_max() {return 2147483648;} - function _emscripten_memcpy_big(dest, src, num) {HEAPU8.copyWithin(dest, src, src + num);} - function emscripten_realloc_buffer(size) { - try { - wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16); - updateGlobalBufferAndViews(wasmMemory.buffer); - return 1; - } catch (e) {} - } - function _emscripten_resize_heap(requestedSize) { - var oldSize = HEAPU8.length; - requestedSize = requestedSize >>> 0; - var maxHeapSize = 2147483648; - if (requestedSize > maxHeapSize) {return false;} - for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { - var overGrownHeapSize = oldSize * (1 + .2 / cutDown); - overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296); - var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)); - var replacement = emscripten_realloc_buffer(newSize); - if (replacement) {return true;} - } - return false; - } - function _emscripten_thread_sleep(msecs) { - var start = _emscripten_get_now(); - while (_emscripten_get_now() - start < msecs) {} - } - var ENV = {}; - function getExecutableName() {return thisProgram || "./this.program";} - function getEnvStrings() { - if (!getEnvStrings.strings) { - var lang = (typeof navigator === "object" && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8"; - var env = { "USER": "web_user", "LOGNAME": "web_user", "PATH": "/", "PWD": "/", "HOME": "/home/web_user", "LANG": lang, "_": getExecutableName() }; - for (var x in ENV) {env[x] = ENV[x];} - var strings = []; - for (var x in env) {strings.push(x + "=" + env[x]);} - getEnvStrings.strings = strings; - } - return getEnvStrings.strings; - } - function _environ_get(__environ, environ_buf) { - try { - var bufSize = 0; - getEnvStrings().forEach(function (string, i) { - var ptr = environ_buf + bufSize; - HEAP32[__environ + i * 4 >> 2] = ptr; - writeAsciiToMemory(string, ptr); - bufSize += string.length + 1; - }); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno; - } - } - function _environ_sizes_get(penviron_count, penviron_buf_size) { - try { - var strings = getEnvStrings(); - HEAP32[penviron_count >> 2] = strings.length; - var bufSize = 0; - strings.forEach(function (string) {bufSize += string.length + 1;}); - HEAP32[penviron_buf_size >> 2] = bufSize; - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno; - } - } - function _exit(status) {exit(status);} - function _fd_close(fd) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - FS.close(stream); - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno; - } - } - function _fd_fdstat_get(fd, pbuf) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var type = stream.tty ? 2 : FS.isDir(stream.mode) ? 3 : FS.isLink(stream.mode) ? 7 : 4; - HEAP8[pbuf >> 0] = type; - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno; - } - } - function _fd_pread(fd, iov, iovcnt, offset_low, offset_high, pnum) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var num = SYSCALLS.doReadv(stream, iov, iovcnt, offset_low); - HEAP32[pnum >> 2] = num; - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno; - } - } - function _fd_pwrite(fd, iov, iovcnt, offset_low, offset_high, pnum) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var num = SYSCALLS.doWritev(stream, iov, iovcnt, offset_low); - HEAP32[pnum >> 2] = num; - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno; - } - } - function _fd_read(fd, iov, iovcnt, pnum) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var num = SYSCALLS.doReadv(stream, iov, iovcnt); - HEAP32[pnum >> 2] = num; - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno; - } - } - function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var HIGH_OFFSET = 4294967296; - var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0); - var DOUBLE_LIMIT = 9007199254740992; - if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) {return -61;} - FS.llseek(stream, offset, whence); - tempI64 = [stream.position >>> 0, (tempDouble = stream.position, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[newOffset >> 2] = tempI64[0], HEAP32[newOffset + 4 >> 2] = tempI64[1]; - if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno; - } - } - function _fd_sync(fd) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - if (stream.stream_ops && stream.stream_ops.fsync) {return -stream.stream_ops.fsync(stream);} - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno; - } - } - function _fd_write(fd, iov, iovcnt, pnum) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var num = SYSCALLS.doWritev(stream, iov, iovcnt); - HEAP32[pnum >> 2] = num; - return 0; - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno; - } - } - function _flock(fd, operation) {return 0;} - var GAI_ERRNO_MESSAGES = {}; - function _gai_strerror(val) { - var buflen = 256; - if (!_gai_strerror.buffer) { - _gai_strerror.buffer = _malloc(buflen); - GAI_ERRNO_MESSAGES["0"] = "Success"; - GAI_ERRNO_MESSAGES["" + -1] = "Invalid value for 'ai_flags' field"; - GAI_ERRNO_MESSAGES["" + -2] = "NAME or SERVICE is unknown"; - GAI_ERRNO_MESSAGES["" + -3] = "Temporary failure in name resolution"; - GAI_ERRNO_MESSAGES["" + -4] = "Non-recoverable failure in name res"; - GAI_ERRNO_MESSAGES["" + -6] = "'ai_family' not supported"; - GAI_ERRNO_MESSAGES["" + -7] = "'ai_socktype' not supported"; - GAI_ERRNO_MESSAGES["" + -8] = "SERVICE not supported for 'ai_socktype'"; - GAI_ERRNO_MESSAGES["" + -10] = "Memory allocation failure"; - GAI_ERRNO_MESSAGES["" + -11] = "System error returned in 'errno'"; - GAI_ERRNO_MESSAGES["" + -12] = "Argument buffer overflow"; - } - var msg = "Unknown error"; - if (val in GAI_ERRNO_MESSAGES) {if (GAI_ERRNO_MESSAGES[val].length > buflen - 1) {msg = "Message too long";} else {msg = GAI_ERRNO_MESSAGES[val];}} - writeAsciiToMemory(msg, _gai_strerror.buffer); - return _gai_strerror.buffer; - } - function _getTempRet0() {return getTempRet0();} - function _gettimeofday(ptr) { - var now = Date.now(); - HEAP32[ptr >> 2] = now / 1e3 | 0; - HEAP32[ptr + 4 >> 2] = now % 1e3 * 1e3 | 0; - return 0; - } - function _gmtime_r(time, tmPtr) { - var date = new Date(HEAP32[time >> 2] * 1e3); - HEAP32[tmPtr >> 2] = date.getUTCSeconds(); - HEAP32[tmPtr + 4 >> 2] = date.getUTCMinutes(); - HEAP32[tmPtr + 8 >> 2] = date.getUTCHours(); - HEAP32[tmPtr + 12 >> 2] = date.getUTCDate(); - HEAP32[tmPtr + 16 >> 2] = date.getUTCMonth(); - HEAP32[tmPtr + 20 >> 2] = date.getUTCFullYear() - 1900; - HEAP32[tmPtr + 24 >> 2] = date.getUTCDay(); - HEAP32[tmPtr + 36 >> 2] = 0; - HEAP32[tmPtr + 32 >> 2] = 0; - var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); - var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0; - HEAP32[tmPtr + 28 >> 2] = yday; - if (!_gmtime_r.GMTString) _gmtime_r.GMTString = allocateUTF8("GMT"); - HEAP32[tmPtr + 40 >> 2] = _gmtime_r.GMTString; - return tmPtr; - } - function _llvm_eh_typeid_for(type) {return type;} - function _tzset() { - if (_tzset.called) return; - _tzset.called = true; - var currentYear = (new Date).getFullYear(); - var winter = new Date(currentYear, 0, 1); - var summer = new Date(currentYear, 6, 1); - var winterOffset = winter.getTimezoneOffset(); - var summerOffset = summer.getTimezoneOffset(); - var stdTimezoneOffset = Math.max(winterOffset, summerOffset); - HEAP32[__get_timezone() >> 2] = stdTimezoneOffset * 60; - HEAP32[__get_daylight() >> 2] = Number(winterOffset != summerOffset); - function extractZone(date) { - var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/); - return match ? match[1] : "GMT"; - } - var winterName = extractZone(winter); - var summerName = extractZone(summer); - var winterNamePtr = allocateUTF8(winterName); - var summerNamePtr = allocateUTF8(summerName); - if (summerOffset < winterOffset) { - HEAP32[__get_tzname() >> 2] = winterNamePtr; - HEAP32[__get_tzname() + 4 >> 2] = summerNamePtr; - } else { - HEAP32[__get_tzname() >> 2] = summerNamePtr; - HEAP32[__get_tzname() + 4 >> 2] = winterNamePtr; - } - } - function _localtime_r(time, tmPtr) { - _tzset(); - var date = new Date(HEAP32[time >> 2] * 1e3); - HEAP32[tmPtr >> 2] = date.getSeconds(); - HEAP32[tmPtr + 4 >> 2] = date.getMinutes(); - HEAP32[tmPtr + 8 >> 2] = date.getHours(); - HEAP32[tmPtr + 12 >> 2] = date.getDate(); - HEAP32[tmPtr + 16 >> 2] = date.getMonth(); - HEAP32[tmPtr + 20 >> 2] = date.getFullYear() - 1900; - HEAP32[tmPtr + 24 >> 2] = date.getDay(); - var start = new Date(date.getFullYear(), 0, 1); - var yday = (date.getTime() - start.getTime()) / (1e3 * 60 * 60 * 24) | 0; - HEAP32[tmPtr + 28 >> 2] = yday; - HEAP32[tmPtr + 36 >> 2] = -(date.getTimezoneOffset() * 60); - var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); - var winterOffset = start.getTimezoneOffset(); - var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0; - HEAP32[tmPtr + 32 >> 2] = dst; - var zonePtr = HEAP32[__get_tzname() + (dst ? 4 : 0) >> 2]; - HEAP32[tmPtr + 40 >> 2] = zonePtr; - return tmPtr; - } - var MONO = { - pump_count: 0, timeout_queue: [], spread_timers_maximum: 0, _vt_stack: [], mono_wasm_runtime_is_ready: false, mono_wasm_ignore_pdb_load_errors: true, _id_table: {}, pump_message: function () { - if (!this.mono_background_exec) this.mono_background_exec = Module.cwrap("mono_background_exec", null); - while (MONO.timeout_queue.length > 0) { - --MONO.pump_count; - MONO.timeout_queue.shift()(); - } - while (MONO.pump_count > 0) { - --MONO.pump_count; - this.mono_background_exec(); - } - }, export_functions: function (module) { - module["pump_message"] = MONO.pump_message.bind(MONO); - module["prevent_timer_throttling"] = MONO.prevent_timer_throttling.bind(MONO); - module["mono_wasm_set_timeout_exec"] = MONO.mono_wasm_set_timeout_exec.bind(MONO); - module["mono_load_runtime_and_bcl"] = MONO.mono_load_runtime_and_bcl.bind(MONO); - module["mono_load_runtime_and_bcl_args"] = MONO.mono_load_runtime_and_bcl_args.bind(MONO); - module["mono_wasm_load_bytes_into_heap"] = MONO.mono_wasm_load_bytes_into_heap.bind(MONO); - module["mono_wasm_load_icu_data"] = MONO.mono_wasm_load_icu_data.bind(MONO); - module["mono_wasm_get_icudt_name"] = MONO.mono_wasm_get_icudt_name.bind(MONO); - module["mono_wasm_globalization_init"] = MONO.mono_wasm_globalization_init.bind(MONO); - module["mono_wasm_get_loaded_files"] = MONO.mono_wasm_get_loaded_files.bind(MONO); - module["mono_wasm_new_root_buffer"] = MONO.mono_wasm_new_root_buffer.bind(MONO); - module["mono_wasm_new_root_buffer_from_pointer"] = MONO.mono_wasm_new_root_buffer_from_pointer.bind(MONO); - module["mono_wasm_new_root"] = MONO.mono_wasm_new_root.bind(MONO); - module["mono_wasm_new_roots"] = MONO.mono_wasm_new_roots.bind(MONO); - module["mono_wasm_release_roots"] = MONO.mono_wasm_release_roots.bind(MONO); - module["mono_wasm_load_config"] = MONO.mono_wasm_load_config.bind(MONO); - }, _base64Converter: { - _base64Table: ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/"], _makeByteReader: function (bytes, index, count) { - var position = typeof index === "number" ? index : 0; - var endpoint; - if (typeof count === "number") endpoint = position + count; else endpoint = bytes.length - position; - var result = { - read: function () { - if (position >= endpoint) return false; - var nextByte = bytes[position]; - position += 1; - return nextByte; - } - }; - Object.defineProperty(result, "eof", { get: function () {return position >= endpoint;}, configurable: true, enumerable: true }); - return result; - }, toBase64StringImpl: function (inArray, offset, length) { - var reader = this._makeByteReader(inArray, offset, length); - var result = ""; - var ch1 = 0, ch2 = 0, ch3 = 0, bits = 0, equalsCount = 0, sum = 0; - var mask1 = (1 << 24) - 1, mask2 = (1 << 18) - 1, mask3 = (1 << 12) - 1, mask4 = (1 << 6) - 1; - var shift1 = 18, shift2 = 12, shift3 = 6, shift4 = 0; - while (true) { - ch1 = reader.read(); - ch2 = reader.read(); - ch3 = reader.read(); - if (ch1 === false) break; - if (ch2 === false) { - ch2 = 0; - equalsCount += 1; - } - if (ch3 === false) { - ch3 = 0; - equalsCount += 1; - } - sum = ch1 << 16 | ch2 << 8 | ch3 << 0; - bits = (sum & mask1) >> shift1; - result += this._base64Table[bits]; - bits = (sum & mask2) >> shift2; - result += this._base64Table[bits]; - if (equalsCount < 2) { - bits = (sum & mask3) >> shift3; - result += this._base64Table[bits]; - } - if (equalsCount === 2) {result += "==";} else if (equalsCount === 1) {result += "=";} else { - bits = (sum & mask4) >> shift4; - result += this._base64Table[bits]; - } - } - return result; - } - }, _mono_wasm_root_buffer_prototype: { - _throw_index_out_of_range: function () {throw new Error("index out of range");}, _check_in_range: function (index) {if (index >= this.__count || index < 0) this._throw_index_out_of_range();}, get_address: function (index) { - this._check_in_range(index); - return this.__offset + index * 4; - }, get_address_32: function (index) { - this._check_in_range(index); - return this.__offset32 + index; - }, get: function (index) { - this._check_in_range(index); - return Module.HEAP32[this.get_address_32(index)]; - }, set: function (index, value) { - Module.HEAP32[this.get_address_32(index)] = value; - return value; - }, _unsafe_get: function (index) {return Module.HEAP32[this.__offset32 + index];}, _unsafe_set: function (index, value) {Module.HEAP32[this.__offset32 + index] = value;}, clear: function () {if (this.__offset) MONO._zero_region(this.__offset, this.__count * 4);}, release: function () { - if (this.__offset && this.__ownsAllocation) { - MONO.mono_wasm_deregister_root(this.__offset); - MONO._zero_region(this.__offset, this.__count * 4); - Module._free(this.__offset); - } - this.__handle = this.__offset = this.__count = this.__offset32 = 0; - }, toString: function () {return "[root buffer @" + this.get_address(0) + ", size " + this.__count + "]";} - }, _scratch_root_buffer: null, _scratch_root_free_indices: null, _scratch_root_free_indices_count: 0, _scratch_root_free_instances: [], _mono_wasm_root_prototype: { - get_address: function () {return this.__buffer.get_address(this.__index);}, get_address_32: function () {return this.__buffer.get_address_32(this.__index);}, get: function () { - var result = this.__buffer._unsafe_get(this.__index); - return result; - }, set: function (value) { - this.__buffer._unsafe_set(this.__index, value); - return value; - }, valueOf: function () {return this.get();}, clear: function () {this.set(0);}, release: function () { - const maxPooledInstances = 128; - if (MONO._scratch_root_free_instances.length > maxPooledInstances) { - MONO._mono_wasm_release_scratch_index(this.__index); - this.__buffer = 0; - this.__index = 0; - } else { - this.set(0); - MONO._scratch_root_free_instances.push(this); - } - }, toString: function () {return "[root @" + this.get_address() + "]";} - }, _mono_wasm_release_scratch_index: function (index) { - if (index === undefined) return; - this._scratch_root_buffer.set(index, 0); - this._scratch_root_free_indices[this._scratch_root_free_indices_count] = index; - this._scratch_root_free_indices_count++; - }, _mono_wasm_claim_scratch_index: function () { - if (!this._scratch_root_buffer) { - const maxScratchRoots = 8192; - this._scratch_root_buffer = this.mono_wasm_new_root_buffer(maxScratchRoots, "js roots"); - this._scratch_root_free_indices = new Int32Array(maxScratchRoots); - this._scratch_root_free_indices_count = maxScratchRoots; - for (var i = 0; i < maxScratchRoots; i++) this._scratch_root_free_indices[i] = maxScratchRoots - i - 1; - Object.defineProperty(this._mono_wasm_root_prototype, "value", { get: this._mono_wasm_root_prototype.get, set: this._mono_wasm_root_prototype.set, configurable: false }); - } - if (this._scratch_root_free_indices_count < 1) throw new Error("Out of scratch root space"); - var result = this._scratch_root_free_indices[this._scratch_root_free_indices_count - 1]; - this._scratch_root_free_indices_count--; - return result; - }, _zero_region: function (byteOffset, sizeBytes) {if (byteOffset % 4 === 0 && sizeBytes % 4 === 0) Module.HEAP32.fill(0, byteOffset / 4, sizeBytes / 4); else Module.HEAP8.fill(0, byteOffset, sizeBytes);}, mono_wasm_new_root_buffer: function (capacity, msg) { - if (!this.mono_wasm_register_root || !this.mono_wasm_deregister_root) { - this.mono_wasm_register_root = Module.cwrap("mono_wasm_register_root", "number", ["number", "number", "string"]); - this.mono_wasm_deregister_root = Module.cwrap("mono_wasm_deregister_root", null, ["number"]); - } - if (capacity <= 0) throw new Error("capacity >= 1"); - capacity = capacity | 0; - var capacityBytes = capacity * 4; - var offset = Module._malloc(capacityBytes); - if (offset % 4 !== 0) throw new Error("Malloc returned an unaligned offset"); - this._zero_region(offset, capacityBytes); - var result = Object.create(this._mono_wasm_root_buffer_prototype); - result.__offset = offset; - result.__offset32 = offset / 4 | 0; - result.__count = capacity; - result.length = capacity; - result.__handle = this.mono_wasm_register_root(offset, capacityBytes, msg || 0); - result.__ownsAllocation = true; - return result; - }, mono_wasm_new_root_buffer_from_pointer: function (offset, capacity, msg) { - if (!this.mono_wasm_register_root || !this.mono_wasm_deregister_root) { - this.mono_wasm_register_root = Module.cwrap("mono_wasm_register_root", "number", ["number", "number", "string"]); - this.mono_wasm_deregister_root = Module.cwrap("mono_wasm_deregister_root", null, ["number"]); - } - if (capacity <= 0) throw new Error("capacity >= 1"); - capacity = capacity | 0; - var capacityBytes = capacity * 4; - if (offset % 4 !== 0) throw new Error("Unaligned offset"); - this._zero_region(offset, capacityBytes); - var result = Object.create(this._mono_wasm_root_buffer_prototype); - result.__offset = offset; - result.__offset32 = offset / 4 | 0; - result.__count = capacity; - result.length = capacity; - result.__handle = this.mono_wasm_register_root(offset, capacityBytes, msg || 0); - result.__ownsAllocation = false; - return result; - }, mono_wasm_new_root: function (value) { - var result; - if (this._scratch_root_free_instances.length > 0) {result = this._scratch_root_free_instances.pop();} else { - var index = this._mono_wasm_claim_scratch_index(); - var buffer = this._scratch_root_buffer; - result = Object.create(this._mono_wasm_root_prototype); - result.__buffer = buffer; - result.__index = index; - } - if (value !== undefined) { - if (typeof value !== "number") throw new Error("value must be an address in the managed heap"); - result.set(value); - } else {result.set(0);} - return result; - }, mono_wasm_new_roots: function (count_or_values) { - var result; - if (Array.isArray(count_or_values)) { - result = new Array(count_or_values.length); - for (var i = 0; i < result.length; i++) result[i] = this.mono_wasm_new_root(count_or_values[i]); - } else if ((count_or_values | 0) > 0) { - result = new Array(count_or_values); - for (var i = 0; i < result.length; i++) result[i] = this.mono_wasm_new_root(); - } else {throw new Error("count_or_values must be either an array or a number greater than 0");} - return result; - }, mono_wasm_release_roots: function () { - for (var i = 0; i < arguments.length; i++) { - if (!arguments[i]) continue; - arguments[i].release(); - } - }, mono_text_decoder: undefined, string_decoder: { - copy: function (mono_string) { - if (mono_string === 0) return null; - if (!this.mono_wasm_string_root) this.mono_wasm_string_root = MONO.mono_wasm_new_root(); - this.mono_wasm_string_root.value = mono_string; - if (!this.mono_wasm_string_get_data) this.mono_wasm_string_get_data = Module.cwrap("mono_wasm_string_get_data", null, ["number", "number", "number", "number"]); - if (!this.mono_wasm_string_decoder_buffer) this.mono_wasm_string_decoder_buffer = Module._malloc(12); - let ppChars = this.mono_wasm_string_decoder_buffer + 0, pLengthBytes = this.mono_wasm_string_decoder_buffer + 4, pIsInterned = this.mono_wasm_string_decoder_buffer + 8; - this.mono_wasm_string_get_data(mono_string, ppChars, pLengthBytes, pIsInterned); - if (!this.mono_wasm_empty_string) this.mono_wasm_empty_string = ""; - let result = this.mono_wasm_empty_string; - let lengthBytes = Module.HEAP32[pLengthBytes / 4], pChars = Module.HEAP32[ppChars / 4], isInterned = Module.HEAP32[pIsInterned / 4]; - if (pLengthBytes && pChars) { - if (isInterned && MONO.interned_string_table && MONO.interned_string_table.has(mono_string)) {result = MONO.interned_string_table.get(mono_string);} else { - result = this.decode(pChars, pChars + lengthBytes, false); - if (isInterned) { - if (!MONO.interned_string_table) MONO.interned_string_table = new Map; - MONO.interned_string_table.set(mono_string, result); - } - } - } - this.mono_wasm_string_root.value = 0; - return result; - }, decode: function (start, end, save) { - if (!MONO.mono_text_decoder) {MONO.mono_text_decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le") : undefined;} - var str = ""; - if (MONO.mono_text_decoder) { - var subArray = typeof SharedArrayBuffer !== "undefined" && Module.HEAPU8.buffer instanceof SharedArrayBuffer ? Module.HEAPU8.slice(start, end) : Module.HEAPU8.subarray(start, end); - str = MONO.mono_text_decoder.decode(subArray); - } else { - for (var i = 0; i < end - start; i += 2) { - var char = Module.getValue(start + i, "i16"); - str += String.fromCharCode(char); - } - } - if (save) this.result = str; - return str; - } - }, mono_wasm_add_dbg_command_received: function (res_ok, id, buffer, buffer_len) { - const assembly_data = new Uint8Array(Module.HEAPU8.buffer, buffer, buffer_len); - const base64String = MONO._base64Converter.toBase64StringImpl(assembly_data); - const buffer_obj = { res_ok: res_ok, res: { id: id, value: base64String } }; - if (MONO.commands_received.has(id)) console.warn("Addind an id that already exists in commands_received"); - MONO.commands_received.set(id, buffer_obj); - }, mono_wasm_malloc_and_set_debug_buffer: function (command_parameters) { - if (command_parameters.length > this._debugger_buffer_len) { - if (this._debugger_buffer) Module._free(this._debugger_buffer); - this._debugger_buffer_len = Math.max(command_parameters.length, this._debugger_buffer_len, 256); - this._debugger_buffer = Module._malloc(this._debugger_buffer_len); - } - this._debugger_heap_bytes = new Uint8Array(Module.HEAPU8.buffer, this._debugger_buffer, this._debugger_buffer_len); - this._debugger_heap_bytes.set(this._base64_to_uint8(command_parameters)); - }, mono_wasm_send_dbg_command_with_parms: function (id, command_set, command, command_parameters, length, valtype, newvalue) { - this.mono_wasm_malloc_and_set_debug_buffer(command_parameters); - this._c_fn_table.mono_wasm_send_dbg_command_with_parms_wrapper(id, command_set, command, this._debugger_buffer, length, valtype, newvalue.toString()); - let { res_ok: res_ok, res: res } = MONO.commands_received.remove(id); - if (!res_ok) throw new Error(`Failed on mono_wasm_invoke_method_debugger_agent_with_parms`); - return res; - }, mono_wasm_send_dbg_command: function (id, command_set, command, command_parameters) { - this.mono_wasm_malloc_and_set_debug_buffer(command_parameters); - this._c_fn_table.mono_wasm_send_dbg_command_wrapper(id, command_set, command, this._debugger_buffer, command_parameters.length); - let { res_ok: res_ok, res: res } = MONO.commands_received.remove(id); - if (!res_ok) throw new Error(`Failed on mono_wasm_send_dbg_command`); - return res; - }, mono_wasm_get_dbg_command_info: function () { - let { res_ok: res_ok, res: res } = MONO.commands_received.remove(0); - if (!res_ok) throw new Error(`Failed on mono_wasm_get_dbg_command_info`); - return res; - }, _get_cfo_res_details: function (objectId, args) { - if (!(objectId in this._call_function_res_cache)) throw new Error(`Could not find any object with id ${objectId}`); - const real_obj = this._call_function_res_cache[objectId]; - const descriptors = Object.getOwnPropertyDescriptors(real_obj); - if (args.accessorPropertiesOnly) {Object.keys(descriptors).forEach(k => {if (descriptors[k].get === undefined) Reflect.deleteProperty(descriptors, k);});} - let res_details = []; - Object.keys(descriptors).forEach(k => { - let new_obj; - let prop_desc = descriptors[k]; - if (typeof prop_desc.value == "object") {new_obj = Object.assign({ name: k }, prop_desc);} else if (prop_desc.value !== undefined) {new_obj = { name: k, value: Object.assign({ type: typeof prop_desc.value, description: "" + prop_desc.value }, prop_desc) };} else if (prop_desc.get !== undefined) {new_obj = { name: k, get: { className: "Function", description: `get ${k} () {}`, type: "function" } };} else {new_obj = { name: k, value: { type: "symbol", value: "", description: "" } };} - res_details.push(new_obj); - }); - return { __value_as_json_string__: JSON.stringify(res_details) }; - }, mono_wasm_get_details: function (objectId, args = {}) {return this._get_cfo_res_details(`dotnet:cfo_res:${objectId}`, args);}, _cache_call_function_res: function (obj) { - const id = `dotnet:cfo_res:${this._next_call_function_res_id++}`; - this._call_function_res_cache[id] = obj; - return id; - }, mono_wasm_release_object: function (objectId) {if (objectId in this._cache_call_function_res) delete this._cache_call_function_res[objectId];}, _create_proxy_from_object_id: function (objectId, details) { - if (objectId.startsWith("dotnet:array:")) { - if (details.items === undefined) { - const ret = details.map(p => p.value); - return ret; - } - if (details.dimensionsDetails == undefined || details.dimensionsDetails.length == 1) { - const ret = details.items.map(p => p.value); - return ret; - } - } - let proxy = {}; - Object.keys(details).forEach(p => { - var prop = details[p]; - if (prop.get !== undefined) { - Object.defineProperty(proxy, prop.name, { - get() {return MONO.mono_wasm_send_dbg_command(prop.get.id, prop.get.commandSet, prop.get.command, prop.get.buffer, prop.get.length);}, set: function (newValue) { - MONO.mono_wasm_send_dbg_command_with_parms(prop.set.id, prop.set.commandSet, prop.set.command, prop.set.buffer, prop.set.length, prop.set.valtype, newValue); - return true; - } - }); - } else if (prop.set !== undefined) { - Object.defineProperty(proxy, prop.name, { - get() {return prop.value;}, set: function (newValue) { - MONO.mono_wasm_send_dbg_command_with_parms(prop.set.id, prop.set.commandSet, prop.set.command, prop.set.buffer, prop.set.length, prop.set.valtype, newValue); - return true; - } - }); - } else {proxy[prop.name] = prop.value;} - }); - return proxy; - }, mono_wasm_call_function_on: function (request) { - if (request.arguments != undefined && !Array.isArray(request.arguments)) throw new Error(`"arguments" should be an array, but was ${request.arguments}`); - const objId = request.objectId; - const details = request.details; - let proxy; - if (objId.startsWith("dotnet:cfo_res:")) {if (objId in this._call_function_res_cache) proxy = this._call_function_res_cache[objId]; else throw new Error(`Unknown object id ${objId}`);} else {proxy = this._create_proxy_from_object_id(objId, details);} - const fn_args = request.arguments != undefined ? request.arguments.map(a => JSON.stringify(a.value)) : []; - const fn_eval_str = `var fn = ${request.functionDeclaration}; fn.call (proxy, ...[${fn_args}]);`; - const fn_res = eval(fn_eval_str); - if (fn_res === undefined) return { type: "undefined" }; - if (Object(fn_res) !== fn_res) { - if (typeof fn_res == "object" && fn_res == null) return { type: typeof fn_res, subtype: `${fn_res}`, value: null }; - return { type: typeof fn_res, description: `${fn_res}`, value: `${fn_res}` }; - } - if (request.returnByValue && fn_res.subtype == undefined) return { type: "object", value: fn_res }; - if (Object.getPrototypeOf(fn_res) == Array.prototype) { - const fn_res_id = this._cache_call_function_res(fn_res); - return { type: "object", subtype: "array", className: "Array", description: `Array(${fn_res.length})`, objectId: fn_res_id }; - } - if (fn_res.value !== undefined || fn_res.subtype !== undefined) {return fn_res;} - if (fn_res == proxy) return { type: "object", className: "Object", description: "Object", objectId: objId }; - const fn_res_id = this._cache_call_function_res(fn_res); - return { type: "object", className: "Object", description: "Object", objectId: fn_res_id }; - }, _clear_per_step_state: function () { - this._next_id_var = 0; - this._id_table = {}; - }, mono_wasm_debugger_resume: function () {this._clear_per_step_state();}, mono_wasm_detach_debugger: function () { - if (!this.mono_wasm_set_is_debugger_attached) this.mono_wasm_set_is_debugger_attached = Module.cwrap("mono_wasm_set_is_debugger_attached", "void", ["bool"]); - this.mono_wasm_set_is_debugger_attached(false); - }, _register_c_fn: function (name, ...args) {Object.defineProperty(this._c_fn_table, name + "_wrapper", { value: Module.cwrap(name, ...args) });}, _register_c_var_fn: function (name, ret_type, params) { - if (ret_type !== "bool") throw new Error(`Bug: Expected a C function signature that returns bool`); - this._register_c_fn(name, ret_type, params); - Object.defineProperty(this, name + "_info", { - value: function (...args) { - MONO.var_info = []; - const res_ok = MONO._c_fn_table[name + "_wrapper"](...args); - let res = MONO.var_info; - MONO.var_info = []; - if (res_ok) { - res = this._fixup_name_value_objects(res); - return { res_ok: res_ok, res: res }; - } - return { res_ok: res_ok, res: undefined }; - } - }); - }, mono_wasm_runtime_ready: function () { - MONO.commands_received = new Map; - MONO.commands_received.remove = function (key) { - const value = this.get(key); - this.delete(key); - return value; - }; - this.mono_wasm_runtime_is_ready = true; - this._clear_per_step_state(); - this._next_call_function_res_id = 0; - this._call_function_res_cache = {}; - this._c_fn_table = {}; - this._register_c_fn("mono_wasm_send_dbg_command", "bool", ["number", "number", "number", "number", "number"]); - this._register_c_fn("mono_wasm_send_dbg_command_with_parms", "bool", ["number", "number", "number", "number", "number", "number", "string"]); - this._debugger_buffer_len = -1; - if (globalThis.dotnetDebugger) debugger; else {}; - }, mono_wasm_setenv: function (name, value) { - if (!this.wasm_setenv) this.wasm_setenv = Module.cwrap("mono_wasm_setenv", null, ["string", "string"]); - this.wasm_setenv(name, value); - }, mono_wasm_set_runtime_options: function (options) { - if (!this.wasm_parse_runtime_options) this.wasm_parse_runtime_options = Module.cwrap("mono_wasm_parse_runtime_options", null, ["number", "number"]); - var argv = Module._malloc(options.length * 4); - var wasm_strdup = Module.cwrap("mono_wasm_strdup", "number", ["string"]); - let aindex = 0; - for (var i = 0; i < options.length; ++i) { - Module.setValue(argv + aindex * 4, wasm_strdup(options[i]), "i32"); - aindex += 1; - } - this.wasm_parse_runtime_options(options.length, argv); - }, mono_wasm_init_aot_profiler: function (options) { - if (options == null) options = {}; - if (!("write_at" in options)) options.write_at = "Interop/Runtime::StopProfile"; - if (!("send_to" in options)) options.send_to = "Interop/Runtime::DumpAotProfileData"; - var arg = "aot:write-at-method=" + options.write_at + ",send-to-method=" + options.send_to; - Module.ccall("mono_wasm_load_profiler_aot", null, ["string"], [arg]); - }, mono_wasm_init_coverage_profiler: function (options) { - if (options == null) options = {}; - if (!("write_at" in options)) options.write_at = "WebAssembly.Runtime::StopProfile"; - if (!("send_to" in options)) options.send_to = "WebAssembly.Runtime::DumpCoverageProfileData"; - var arg = "coverage:write-at-method=" + options.write_at + ",send-to-method=" + options.send_to; - Module.ccall("mono_wasm_load_profiler_coverage", null, ["string"], [arg]); - }, _apply_configuration_from_args: function (args) { - for (var k in args.environment_variables || {}) MONO.mono_wasm_setenv(k, args.environment_variables[k]); - if (args.runtime_options) MONO.mono_wasm_set_runtime_options(args.runtime_options); - if (args.aot_profiler_options) MONO.mono_wasm_init_aot_profiler(args.aot_profiler_options); - if (args.coverage_profiler_options) MONO.mono_wasm_init_coverage_profiler(args.coverage_profiler_options); - }, _get_fetch_file_cb_from_args: function (args) { - if (typeof args.fetch_file_cb === "function") return args.fetch_file_cb; - if (ENVIRONMENT_IS_NODE) { - var fs = {}; - return function (asset) { - console.debug("MONO_WASM: Loading... " + asset); - var binary = fs.readFileSync(asset); - var resolve_func2 = function (resolve, reject) {resolve(new Uint8Array(binary));}; - var resolve_func1 = function (resolve, reject) { - var response = { ok: true, url: asset, arrayBuffer: function () {return new Promise(resolve_func2);} }; - resolve(response); - }; - return new Promise(resolve_func1); - }; - } else if (typeof fetch === "function") {return function (asset) {return fetch(asset, { credentials: "same-origin" });};} else {throw new Error("No fetch_file_cb was provided and this environment does not expose 'fetch'.");} - }, _handle_loaded_asset: function (ctx, asset, url, blob) { - var bytes = new Uint8Array(blob); - if (ctx.tracing) console.log("MONO_WASM: Loaded:", asset.name, "size", bytes.length, "from", url); - var virtualName = asset.virtual_path || asset.name; - var offset = null; - switch (asset.behavior) { - case"resource": - case"assembly": - ctx.loaded_files.push({ url: url, file: virtualName }); - case"heap": - case"icu": - offset = this.mono_wasm_load_bytes_into_heap(bytes); - ctx.loaded_assets[virtualName] = [offset, bytes.length]; - break; - case"vfs": - var lastSlash = virtualName.lastIndexOf("/"); - var parentDirectory = lastSlash > 0 ? virtualName.substr(0, lastSlash) : null; - var fileName = lastSlash > 0 ? virtualName.substr(lastSlash + 1) : virtualName; - if (fileName.startsWith("/")) fileName = fileName.substr(1); - if (parentDirectory) { - if (ctx.tracing) console.log("MONO_WASM: Creating directory '" + parentDirectory + "'"); - var pathRet = ctx.createPath("/", parentDirectory, true, true); - } else {parentDirectory = "/";} - if (ctx.tracing) console.log("MONO_WASM: Creating file '" + fileName + "' in directory '" + parentDirectory + "'"); - if (!this.mono_wasm_load_data_archive(bytes, parentDirectory)) {var fileRet = ctx.createDataFile(parentDirectory, fileName, bytes, true, true, true);} - break; - default: - throw new Error("Unrecognized asset behavior:", asset.behavior, "for asset", asset.name); - } - if (asset.behavior === "assembly") { - var hasPpdb = ctx.mono_wasm_add_assembly(virtualName, offset, bytes.length); - if (!hasPpdb) { - var index = ctx.loaded_files.findIndex(element => element.file == virtualName); - ctx.loaded_files.splice(index, 1); - } - } else if (asset.behavior === "icu") {if (this.mono_wasm_load_icu_data(offset)) ctx.num_icu_assets_loaded_successfully += 1; else console.error("Error loading ICU asset", asset.name);} else if (asset.behavior === "resource") {ctx.mono_wasm_add_satellite_assembly(virtualName, asset.culture, offset, bytes.length);} - }, mono_load_runtime_and_bcl: function (unused_vfs_prefix, deploy_prefix, debug_level, file_list, loaded_cb, fetch_file_cb) { - var args = { fetch_file_cb: fetch_file_cb, loaded_cb: loaded_cb, debug_level: debug_level, assembly_root: deploy_prefix, assets: [] }; - for (var i = 0; i < file_list.length; i++) { - var file_name = file_list[i]; - var behavior; - if (file_name.startsWith("icudt") && file_name.endsWith(".dat")) {behavior = "icu";} else {behavior = "assembly";} - args.assets.push({ name: file_name, behavior: behavior }); - } - return this.mono_load_runtime_and_bcl_args(args); - }, mono_load_runtime_and_bcl_args: function (args) { - try {return this._load_assets_and_runtime(args);} catch (exc) { - console.error("error in mono_load_runtime_and_bcl_args:", exc); - throw exc; - } - }, mono_wasm_load_bytes_into_heap: function (bytes) { - var memoryOffset = Module._malloc(bytes.length); - var heapBytes = new Uint8Array(Module.HEAPU8.buffer, memoryOffset, bytes.length); - heapBytes.set(bytes); - return memoryOffset; - }, num_icu_assets_loaded_successfully: 0, mono_wasm_load_icu_data: function (offset) { - var fn = Module.cwrap("mono_wasm_load_icu_data", "number", ["number"]); - var ok = fn(offset) === 1; - if (ok) this.num_icu_assets_loaded_successfully++; - return ok; - }, mono_wasm_get_icudt_name: function (culture) {return Module.ccall("mono_wasm_get_icudt_name", "string", ["string"], [culture]);}, _finalize_startup: function (args, ctx) { - var loaded_files_with_debug_info = []; - MONO.loaded_assets = ctx.loaded_assets; - ctx.loaded_files.forEach(value => loaded_files_with_debug_info.push(value.url)); - MONO.loaded_files = loaded_files_with_debug_info; - if (ctx.tracing) { - console.log("MONO_WASM: loaded_assets: " + JSON.stringify(ctx.loaded_assets)); - console.log("MONO_WASM: loaded_files: " + JSON.stringify(ctx.loaded_files)); - } - var load_runtime = Module.cwrap("mono_wasm_load_runtime", null, ["string", "number"]); - console.debug("MONO_WASM: Initializing mono runtime"); - this.mono_wasm_globalization_init(args.globalization_mode); - if (ENVIRONMENT_IS_SHELL || ENVIRONMENT_IS_NODE) { - try {load_runtime("unused", args.debug_level);} catch (ex) { - print("MONO_WASM: load_runtime () failed: " + ex); - print("MONO_WASM: Stacktrace: \n"); - print(ex.stack); - var wasm_exit = Module.cwrap("mono_wasm_exit", null, ["number"]); - wasm_exit(1); - } - } else {load_runtime("unused", args.debug_level);} - let tz; - try {tz = Intl.DateTimeFormat().resolvedOptions().timeZone;} catch {} - MONO.mono_wasm_setenv("TZ", tz || "UTC"); - MONO.mono_wasm_runtime_ready(); - args.loaded_cb(); - }, _load_assets_and_runtime: function (args) { - if (args.enable_debugging) args.debug_level = args.enable_debugging; - if (args.assembly_list) throw new Error("Invalid args (assembly_list was replaced by assets)"); - if (args.runtime_assets) throw new Error("Invalid args (runtime_assets was replaced by assets)"); - if (args.runtime_asset_sources) throw new Error("Invalid args (runtime_asset_sources was replaced by remote_sources)"); - if (!args.loaded_cb) throw new Error("loaded_cb not provided"); - var ctx = { tracing: args.diagnostic_tracing || false, pending_count: args.assets.length, mono_wasm_add_assembly: Module.cwrap("mono_wasm_add_assembly", "number", ["string", "number", "number"]), mono_wasm_add_satellite_assembly: Module.cwrap("mono_wasm_add_satellite_assembly", "void", ["string", "string", "number", "number"]), loaded_assets: Object.create(null), loaded_files: [], createPath: Module["FS_createPath"], createDataFile: Module["FS_createDataFile"] }; - if (ctx.tracing) console.log("mono_wasm_load_runtime_with_args", JSON.stringify(args)); - this._apply_configuration_from_args(args); - var fetch_file_cb = this._get_fetch_file_cb_from_args(args); - var onPendingRequestComplete = function () { - --ctx.pending_count; - if (ctx.pending_count === 0) { - try {MONO._finalize_startup(args, ctx);} catch (exc) { - console.error("Unhandled exception in _finalize_startup", exc); - throw exc; - } - } - }; - var processFetchResponseBuffer = function (asset, url, blob) { - try {MONO._handle_loaded_asset(ctx, asset, url, blob);} catch (exc) { - console.error("Unhandled exception in processFetchResponseBuffer", exc); - throw exc; - } finally {onPendingRequestComplete();} - }; - args.assets.forEach(function (asset) { - var attemptNextSource; - var sourceIndex = 0; - var sourcesList = asset.load_remote ? args.remote_sources : [""]; - var handleFetchResponse = function (response) { - if (!response.ok) { - try { - attemptNextSource(); - return; - } catch (exc) { - console.error("MONO_WASM: Unhandled exception in handleFetchResponse attemptNextSource for asset", asset.name, exc); - throw exc; - } - } - try { - var bufferPromise = response["arrayBuffer"](); - bufferPromise.then(processFetchResponseBuffer.bind(this, asset, response.url)); - } catch (exc) { - console.error("MONO_WASM: Unhandled exception in handleFetchResponse for asset", asset.name, exc); - attemptNextSource(); - } - }; - attemptNextSource = function () { - if (sourceIndex >= sourcesList.length) { - var msg = "MONO_WASM: Failed to load " + asset.name; - try { - var isOk = asset.is_optional || asset.name.match(/\.pdb$/) && MONO.mono_wasm_ignore_pdb_load_errors; - if (isOk) console.debug(msg); else { - console.error(msg); - throw new Error(msg); - } - } finally {onPendingRequestComplete();} - } - var sourcePrefix = sourcesList[sourceIndex]; - sourceIndex++; - if (sourcePrefix === "./") sourcePrefix = ""; - var attemptUrl; - if (sourcePrefix.trim() === "") { - if (asset.behavior === "assembly") attemptUrl = locateFile(args.assembly_root + "/" + asset.name); else if (asset.behavior === "resource") { - var path = asset.culture !== "" ? `${asset.culture}/${asset.name}` : asset.name; - attemptUrl = locateFile(args.assembly_root + "/" + path); - } else attemptUrl = asset.name; - } else {attemptUrl = sourcePrefix + asset.name;} - try { - if (asset.name === attemptUrl) {if (ctx.tracing) console.log("Attempting to fetch '%s'", attemptUrl);} else {if (ctx.tracing) console.log("Attempting to fetch '%s' for '%s'", attemptUrl, asset.name);} - var fetch_promise = fetch_file_cb(attemptUrl); - fetch_promise.then(handleFetchResponse); - } catch (exc) { - console.error("MONO_WASM: Error fetching '%s'\n%s", attemptUrl, exc); - attemptNextSource(); - } - }; - attemptNextSource(); - }); - }, mono_wasm_globalization_init: function (globalization_mode) { - var invariantMode = false; - if (globalization_mode === "invariant") invariantMode = true; - if (!invariantMode) { - if (this.num_icu_assets_loaded_successfully > 0) {console.debug("MONO_WASM: ICU data archive(s) loaded, disabling invariant mode");} else if (globalization_mode !== "icu") { - console.debug("MONO_WASM: ICU data archive(s) not loaded, using invariant globalization mode"); - invariantMode = true; - } else { - var msg = "invariant globalization mode is inactive and no ICU data archives were loaded"; - console.error("MONO_WASM: ERROR: " + msg); - throw new Error(msg); - } - } - if (invariantMode) this.mono_wasm_setenv("DOTNET_SYSTEM_GLOBALIZATION_INVARIANT", "1"); - this.mono_wasm_setenv("DOTNET_SYSTEM_GLOBALIZATION_PREDEFINED_CULTURES_ONLY", "1"); - }, mono_wasm_get_loaded_files: function () { - if (!this.mono_wasm_set_is_debugger_attached) this.mono_wasm_set_is_debugger_attached = Module.cwrap("mono_wasm_set_is_debugger_attached", "void", ["bool"]); - this.mono_wasm_set_is_debugger_attached(true); - return MONO.loaded_files; - }, mono_wasm_get_loaded_asset_table: function () {return MONO.loaded_assets;}, _base64_to_uint8: function (base64String) { - const byteCharacters = atob(base64String); - const byteNumbers = new Array(byteCharacters.length); - for (let i = 0; i < byteCharacters.length; i++) {byteNumbers[i] = byteCharacters.charCodeAt(i);} - return new Uint8Array(byteNumbers); - }, mono_wasm_load_data_archive: function (data, prefix) { - if (data.length < 8) return false; - var dataview = new DataView(data.buffer); - var magic = dataview.getUint32(0, true); - if (magic != 1651270004) {return false;} - var manifestSize = dataview.getUint32(4, true); - if (manifestSize == 0 || data.length < manifestSize + 8) return false; - var manifest; - try { - manifestContent = Module.UTF8ArrayToString(data, 8, manifestSize); - manifest = JSON.parse(manifestContent); - if (!(manifest instanceof Array)) return false; - } catch (exc) {return false;} - data = data.slice(manifestSize + 8); - var folders = new Set; - manifest.filter(m => { - var file = m[0]; - var last = file.lastIndexOf("/"); - var directory = file.slice(0, last + 1); - folders.add(directory); - }); - folders.forEach(folder => {Module["FS_createPath"](prefix, folder, true, true);}); - for (row of manifest) { - var name = row[0]; - var length = row[1]; - var bytes = data.slice(0, length); - Module["FS_createDataFile"](prefix, name, bytes, true, true); - data = data.slice(length); - } - return true; - }, mono_wasm_raise_debug_event: function (event, args = {}) { - if (typeof event !== "object") throw new Error(`event must be an object, but got ${JSON.stringify(event)}`); - if (event.eventName === undefined) throw new Error(`event.eventName is a required parameter, in event: ${JSON.stringify(event)}`); - if (typeof args !== "object") throw new Error(`args must be an object, but got ${JSON.stringify(args)}`); - console.debug("mono_wasm_debug_event_raised:aef14bca-5519-4dfe-b35a-f867abc123ae", JSON.stringify(event), JSON.stringify(args)); - }, mono_wasm_load_config: async function (configFilePath) { - Module.addRunDependency(configFilePath); - try { - let config = null; - if (ENVIRONMENT_IS_WEB) { - const configRaw = await fetch(configFilePath); - config = await configRaw.json(); - } else if (ENVIRONMENT_IS_NODE) {config = {};} else {config = JSON.parse(read(configFilePath));} - Module.config = config; - } catch (e) {Module.config = { message: "failed to load config file", error: e };} finally {Module.removeRunDependency(configFilePath);} - }, mono_wasm_set_timeout_exec: function (id) { - if (!this.mono_set_timeout_exec) this.mono_set_timeout_exec = Module.cwrap("mono_set_timeout_exec", null, ["number"]); - this.mono_set_timeout_exec(id); - }, prevent_timer_throttling: function () { - let now = (new Date).valueOf(); - const desired_reach_time = now + 1e3 * 60 * 6; - const next_reach_time = Math.max(now + 1e3, this.spread_timers_maximum); - const light_throttling_frequency = 1e3; - for (var schedule = next_reach_time; schedule < desired_reach_time; schedule += light_throttling_frequency) { - const delay = schedule - now; - setTimeout(() => { - this.mono_wasm_set_timeout_exec(0); - MONO.pump_count++; - MONO.pump_message(); - }, delay); - } - this.spread_timers_maximum = desired_reach_time; - } - }; - function _mono_set_timeout(timeout, id) { - if (typeof globalThis.setTimeout === "function") { - if (MONO.lastScheduleTimeoutId) { - globalThis.clearTimeout(MONO.lastScheduleTimeoutId); - MONO.lastScheduleTimeoutId = undefined; - } - MONO.lastScheduleTimeoutId = globalThis.setTimeout(function mono_wasm_set_timeout_exec() {MONO.mono_wasm_set_timeout_exec(id);}, timeout); - } else { - ++MONO.pump_count; - MONO.timeout_queue.push(function () {MONO.mono_wasm_set_timeout_exec(id);}); - } - } - var BINDING = { - BINDING_ASM: "[System.Private.Runtime.InteropServices.JavaScript]System.Runtime.InteropServices.JavaScript.Runtime", _cs_owned_objects_by_js_handle: [], _js_handle_free_list: [], _next_js_handle: 1, mono_wasm_marshal_enum_as_int: true, mono_bindings_init: function (binding_asm) {this.BINDING_ASM = binding_asm;}, export_functions: function (module) { - module["mono_bindings_init"] = BINDING.mono_bindings_init.bind(BINDING); - module["mono_bind_method"] = BINDING.bind_method.bind(BINDING); - module["mono_method_invoke"] = BINDING.call_method.bind(BINDING); - module["mono_method_get_call_signature"] = BINDING.mono_method_get_call_signature.bind(BINDING); - module["mono_method_resolve"] = BINDING.resolve_method_fqn.bind(BINDING); - module["mono_bind_static_method"] = BINDING.bind_static_method.bind(BINDING); - module["mono_call_static_method"] = BINDING.call_static_method.bind(BINDING); - module["mono_bind_assembly_entry_point"] = BINDING.bind_assembly_entry_point.bind(BINDING); - module["mono_call_assembly_entry_point"] = BINDING.call_assembly_entry_point.bind(BINDING); - module["mono_intern_string"] = BINDING.mono_intern_string.bind(BINDING); - }, bindings_lazy_init: function () { - if (this.init) return; - this.init = true; - this.wasm_type_symbol = Symbol.for("wasm type"); - this.js_owned_gc_handle_symbol = Symbol.for("wasm js_owned_gc_handle"); - this.cs_owned_js_handle_symbol = Symbol.for("wasm cs_owned_js_handle"); - this.delegate_invoke_symbol = Symbol.for("wasm delegate_invoke"); - this.delegate_invoke_signature_symbol = Symbol.for("wasm delegate_invoke_signature"); - this.listener_registration_count_symbol = Symbol.for("wasm listener_registration_count"); - Object.prototype[this.wasm_type_symbol] = 0; - Array.prototype[this.wasm_type_symbol] = 1; - ArrayBuffer.prototype[this.wasm_type_symbol] = 2; - DataView.prototype[this.wasm_type_symbol] = 3; - Function.prototype[this.wasm_type_symbol] = 4; - Map.prototype[this.wasm_type_symbol] = 5; - if (typeof SharedArrayBuffer !== "undefined") SharedArrayBuffer.prototype[this.wasm_type_symbol] = 6; - Int8Array.prototype[this.wasm_type_symbol] = 10; - Uint8Array.prototype[this.wasm_type_symbol] = 11; - Uint8ClampedArray.prototype[this.wasm_type_symbol] = 12; - Int16Array.prototype[this.wasm_type_symbol] = 13; - Uint16Array.prototype[this.wasm_type_symbol] = 14; - Int32Array.prototype[this.wasm_type_symbol] = 15; - Uint32Array.prototype[this.wasm_type_symbol] = 16; - Float32Array.prototype[this.wasm_type_symbol] = 17; - Float64Array.prototype[this.wasm_type_symbol] = 18; - this.assembly_load = Module.cwrap("mono_wasm_assembly_load", "number", ["string"]); - this.find_corlib_class = Module.cwrap("mono_wasm_find_corlib_class", "number", ["string", "string"]); - this.find_class = Module.cwrap("mono_wasm_assembly_find_class", "number", ["number", "string", "string"]); - this._find_method = Module.cwrap("mono_wasm_assembly_find_method", "number", ["number", "string", "number"]); - this.invoke_method = Module.cwrap("mono_wasm_invoke_method", "number", ["number", "number", "number", "number"]); - this.mono_string_get_utf8 = Module.cwrap("mono_wasm_string_get_utf8", "number", ["number"]); - this.mono_wasm_string_from_utf16 = Module.cwrap("mono_wasm_string_from_utf16", "number", ["number", "number"]); - this.mono_get_obj_type = Module.cwrap("mono_wasm_get_obj_type", "number", ["number"]); - this.mono_array_length = Module.cwrap("mono_wasm_array_length", "number", ["number"]); - this.mono_array_get = Module.cwrap("mono_wasm_array_get", "number", ["number", "number"]); - this.mono_obj_array_new = Module.cwrap("mono_wasm_obj_array_new", "number", ["number"]); - this.mono_obj_array_set = Module.cwrap("mono_wasm_obj_array_set", "void", ["number", "number", "number"]); - this.mono_wasm_register_bundled_satellite_assemblies = Module.cwrap("mono_wasm_register_bundled_satellite_assemblies", "void", []); - this.mono_wasm_try_unbox_primitive_and_get_type = Module.cwrap("mono_wasm_try_unbox_primitive_and_get_type", "number", ["number", "number"]); - this.mono_wasm_box_primitive = Module.cwrap("mono_wasm_box_primitive", "number", ["number", "number", "number"]); - this.mono_wasm_intern_string = Module.cwrap("mono_wasm_intern_string", "number", ["number"]); - this.assembly_get_entry_point = Module.cwrap("mono_wasm_assembly_get_entry_point", "number", ["number"]); - this.mono_wasm_get_delegate_invoke = Module.cwrap("mono_wasm_get_delegate_invoke", "number", ["number"]); - this.mono_wasm_string_array_new = Module.cwrap("mono_wasm_string_array_new", "number", ["number"]); - this._box_buffer = Module._malloc(16); - this._unbox_buffer = Module._malloc(16); - this._class_int32 = this.find_corlib_class("System", "Int32"); - this._class_uint32 = this.find_corlib_class("System", "UInt32"); - this._class_double = this.find_corlib_class("System", "Double"); - this._class_boolean = this.find_corlib_class("System", "Boolean"); - this.mono_typed_array_new = Module.cwrap("mono_wasm_typed_array_new", "number", ["number", "number", "number", "number"]); - var binding_fqn_asm = this.BINDING_ASM.substring(this.BINDING_ASM.indexOf("[") + 1, this.BINDING_ASM.indexOf("]")).trim(); - var binding_fqn_class = this.BINDING_ASM.substring(this.BINDING_ASM.indexOf("]") + 1).trim(); - this.binding_module = this.assembly_load(binding_fqn_asm); - if (!this.binding_module) throw"Can't find bindings module assembly: " + binding_fqn_asm; - var namespace = null, classname = null; - if (binding_fqn_class !== null && typeof binding_fqn_class !== "undefined") { - namespace = "System.Runtime.InteropServices.JavaScript"; - classname = binding_fqn_class.length > 0 ? binding_fqn_class : "Runtime"; - if (binding_fqn_class.indexOf(".") != -1) { - var idx = binding_fqn_class.lastIndexOf("."); - namespace = binding_fqn_class.substring(0, idx); - classname = binding_fqn_class.substring(idx + 1); - } - } - var wasm_runtime_class = this.find_class(this.binding_module, namespace, classname); - if (!wasm_runtime_class) throw"Can't find " + binding_fqn_class + " class"; - var get_method = function (method_name) { - var res = BINDING.find_method(wasm_runtime_class, method_name, -1); - if (!res) throw"Can't find method " + namespace + "." + classname + ":" + method_name; - return res; - }; - var bind_runtime_method = function (method_name, signature) { - var method = get_method(method_name); - return BINDING.bind_method(method, 0, signature, "BINDINGS_" + method_name); - }; - this.get_call_sig = get_method("GetCallSignature"); - this._get_cs_owned_object_by_js_handle = bind_runtime_method("GetCSOwnedObjectByJSHandle", "ii!"); - this._get_cs_owned_object_js_handle = bind_runtime_method("GetCSOwnedObjectJSHandle", "mi"); - this._try_get_cs_owned_object_js_handle = bind_runtime_method("TryGetCSOwnedObjectJSHandle", "mi"); - this._create_cs_owned_proxy = bind_runtime_method("CreateCSOwnedProxy", "iii!"); - this._get_js_owned_object_by_gc_handle = bind_runtime_method("GetJSOwnedObjectByGCHandle", "i!"); - this._get_js_owned_object_gc_handle = bind_runtime_method("GetJSOwnedObjectGCHandle", "m"); - this._release_js_owned_object_by_gc_handle = bind_runtime_method("ReleaseJSOwnedObjectByGCHandle", "i"); - this._create_tcs = bind_runtime_method("CreateTaskSource", ""); - this._set_tcs_result = bind_runtime_method("SetTaskSourceResult", "io"); - this._set_tcs_failure = bind_runtime_method("SetTaskSourceFailure", "is"); - this._get_tcs_task = bind_runtime_method("GetTaskSourceTask", "i!"); - this._setup_js_cont = bind_runtime_method("SetupJSContinuation", "mo"); - this._object_to_string = bind_runtime_method("ObjectToString", "m"); - this._get_date_value = bind_runtime_method("GetDateValue", "m"); - this._create_date_time = bind_runtime_method("CreateDateTime", "d!"); - this._create_uri = bind_runtime_method("CreateUri", "s!"); - this._is_simple_array = bind_runtime_method("IsSimpleArray", "m"); - this._are_promises_supported = (typeof Promise === "object" || typeof Promise === "function") && typeof Promise.resolve === "function"; - this.isThenable = (js_obj => {return Promise.resolve(js_obj) === js_obj || (typeof js_obj === "object" || typeof js_obj === "function") && typeof js_obj.then === "function";}); - this.isChromium = false; - if (globalThis.navigator) { - var nav = globalThis.navigator; - if (nav.userAgentData && nav.userAgentData.brands) {this.isChromium = nav.userAgentData.brands.some(i => i.brand == "Chromium");} else if (globalThis.navigator.userAgent) {this.isChromium = nav.userAgent.includes("Chrome");} - } - this._empty_string = ""; - this._empty_string_ptr = 0; - this._interned_string_full_root_buffers = []; - this._interned_string_current_root_buffer = null; - this._interned_string_current_root_buffer_count = 0; - this._interned_js_string_table = new Map; - this._js_owned_object_table = new Map; - this._use_finalization_registry = typeof globalThis.FinalizationRegistry === "function"; - this._use_weak_ref = typeof globalThis.WeakRef === "function"; - if (this._use_finalization_registry) {this._js_owned_object_registry = new globalThis.FinalizationRegistry(this._js_owned_object_finalized.bind(this));} - }, _js_owned_object_finalized: function (gc_handle) { - this._js_owned_object_table.delete(gc_handle); - this._release_js_owned_object_by_gc_handle(gc_handle); - }, _lookup_js_owned_object: function (gc_handle) { - if (!gc_handle) return null; - var wr = this._js_owned_object_table.get(gc_handle); - if (wr) {return wr.deref();} - return null; - }, _register_js_owned_object: function (gc_handle, js_obj) { - var wr; - if (this._use_weak_ref) {wr = new WeakRef(js_obj);} else {wr = { deref: () => {return js_obj;} };} - this._js_owned_object_table.set(gc_handle, wr); - }, _wrap_js_thenable_as_task: function (thenable) { - this.bindings_lazy_init(); - if (!thenable) return null; - var thenable_js_handle = BINDING.mono_wasm_get_js_handle(thenable); - const tcs_gc_handle = this._create_tcs(); - thenable.then(result => { - this._set_tcs_result(tcs_gc_handle, result); - this._mono_wasm_release_js_handle(thenable_js_handle); - if (!this._use_finalization_registry) {this._release_js_owned_object_by_gc_handle(tcs_gc_handle);} - }, reason => { - this._set_tcs_failure(tcs_gc_handle, reason ? reason.toString() : ""); - this._mono_wasm_release_js_handle(thenable_js_handle); - if (!this._use_finalization_registry) {this._release_js_owned_object_by_gc_handle(tcs_gc_handle);} - }); - if (this._use_finalization_registry) {this._js_owned_object_registry.register(thenable, tcs_gc_handle);} - return this._get_tcs_task(tcs_gc_handle); - }, _unbox_task_root_as_promise: function (root) { - this.bindings_lazy_init(); - const self = this; - if (root.value === 0) return null; - if (!this._are_promises_supported) throw new Error("Promises are not supported thus 'System.Threading.Tasks.Task' can not work in this context."); - const gc_handle = this._get_js_owned_object_gc_handle(root.value); - var result = this._lookup_js_owned_object(gc_handle); - if (!result) { - var cont_obj = null; - var result = new Promise(function (resolve, reject) { - if (self._use_finalization_registry) {cont_obj = { resolve: resolve, reject: reject };} else { - cont_obj = { - resolve: function () { - const res = resolve.apply(null, arguments); - self._js_owned_object_table.delete(gc_handle); - self._release_js_owned_object_by_gc_handle(gc_handle); - return res; - }, reject: function () { - const res = reject.apply(null, arguments); - self._js_owned_object_table.delete(gc_handle); - self._release_js_owned_object_by_gc_handle(gc_handle); - return res; - } - }; - } - }); - this._setup_js_cont(root.value, cont_obj); - if (this._use_finalization_registry) {this._js_owned_object_registry.register(result, gc_handle);} - this._register_js_owned_object(gc_handle, result); - } - return result; - }, _unbox_ref_type_root_as_js_object: function (root) { - this.bindings_lazy_init(); - if (root.value === 0) return null; - var js_handle = this._try_get_cs_owned_object_js_handle(root.value, false); - if (js_handle) { - if (js_handle === -1) {throw new Error("Cannot access a disposed JSObject at " + root.value);} - return this.mono_wasm_get_jsobj_from_js_handle(js_handle); - } - const gc_handle = this._get_js_owned_object_gc_handle(root.value); - var result = this._lookup_js_owned_object(gc_handle); - if (!result) { - result = {}; - result[BINDING.js_owned_gc_handle_symbol] = gc_handle; - if (this._use_finalization_registry) {this._js_owned_object_registry.register(result, gc_handle);} - this._register_js_owned_object(gc_handle, result); - } - return result; - }, _wrap_delegate_root_as_function: function (root) { - this.bindings_lazy_init(); - if (root.value === 0) return null; - const gc_handle = this._get_js_owned_object_gc_handle(root.value); - return this._wrap_delegate_gc_handle_as_function(gc_handle); - }, _wrap_delegate_gc_handle_as_function: function (gc_handle, after_listener_callback) { - this.bindings_lazy_init(); - var result = this._lookup_js_owned_object(gc_handle); - if (!result) { - result = function () { - const delegateRoot = MONO.mono_wasm_new_root(BINDING.get_js_owned_object_by_gc_handle(gc_handle)); - try { - const res = BINDING.call_method(result[BINDING.delegate_invoke_symbol], delegateRoot.value, result[BINDING.delegate_invoke_signature_symbol], arguments); - if (after_listener_callback) {after_listener_callback();} - return res; - } finally {delegateRoot.release();} - }; - const delegateRoot = MONO.mono_wasm_new_root(BINDING.get_js_owned_object_by_gc_handle(gc_handle)); - try { - if (typeof result[BINDING.delegate_invoke_symbol] === "undefined") { - result[BINDING.delegate_invoke_symbol] = BINDING.mono_wasm_get_delegate_invoke(delegateRoot.value); - if (!result[BINDING.delegate_invoke_symbol]) {throw new Error("System.Delegate Invoke method can not be resolved.");} - } - if (typeof result[BINDING.delegate_invoke_signature_symbol] === "undefined") {result[BINDING.delegate_invoke_signature_symbol] = Module.mono_method_get_call_signature(result[BINDING.delegate_invoke_symbol], delegateRoot.value);} - } finally {delegateRoot.release();} - if (this._use_finalization_registry) {this._js_owned_object_registry.register(result, gc_handle);} - this._register_js_owned_object(gc_handle, result); - } - return result; - }, mono_intern_string: function (string) { - if (string.length === 0) return this._empty_string; - var ptr = this.js_string_to_mono_string_interned(string); - var result = MONO.interned_string_table.get(ptr); - return result; - }, _store_string_in_intern_table: function (string, ptr, internIt) { - if (!ptr) throw new Error("null pointer passed to _store_string_in_intern_table"); else if (typeof ptr !== "number") throw new Error(`non-pointer passed to _store_string_in_intern_table: ${typeof ptr}`); - const internBufferSize = 8192; - if (this._interned_string_current_root_buffer_count >= internBufferSize) { - this._interned_string_full_root_buffers.push(this._interned_string_current_root_buffer); - this._interned_string_current_root_buffer = null; - } - if (!this._interned_string_current_root_buffer) { - this._interned_string_current_root_buffer = MONO.mono_wasm_new_root_buffer(internBufferSize, "interned strings"); - this._interned_string_current_root_buffer_count = 0; - } - var rootBuffer = this._interned_string_current_root_buffer; - var index = this._interned_string_current_root_buffer_count++; - rootBuffer.set(index, ptr); - if (internIt) rootBuffer.set(index, ptr = this.mono_wasm_intern_string(ptr)); - if (!ptr) throw new Error("mono_wasm_intern_string produced a null pointer"); - this._interned_js_string_table.set(string, ptr); - if (!MONO.interned_string_table) MONO.interned_string_table = new Map; - MONO.interned_string_table.set(ptr, string); - if (string.length === 0 && !this._empty_string_ptr) this._empty_string_ptr = ptr; - return ptr; - }, js_string_to_mono_string_interned: function (string) { - var text = typeof string === "symbol" ? string.description || Symbol.keyFor(string) || "" : string; - if (text.length === 0 && this._empty_string_ptr) return this._empty_string_ptr; - var ptr = this._interned_js_string_table.get(string); - if (ptr) return ptr; - ptr = this.js_string_to_mono_string_new(text); - ptr = this._store_string_in_intern_table(string, ptr, true); - return ptr; - }, js_string_to_mono_string: function (string) { - if (string === null) return null; else if (typeof string === "symbol") return this.js_string_to_mono_string_interned(string); else if (typeof string !== "string") throw new Error("Expected string argument, got " + typeof string); - if (string.length === 0) return this.js_string_to_mono_string_interned(string); - if (string.length <= 256) { - var interned = this._interned_js_string_table.get(string); - if (interned) return interned; - } - return this.js_string_to_mono_string_new(string); - }, js_string_to_mono_string_new: function (string) { - var buffer = Module._malloc((string.length + 1) * 2); - var buffer16 = buffer / 2 | 0; - for (var i = 0; i < string.length; i++) Module.HEAP16[buffer16 + i] = string.charCodeAt(i); - Module.HEAP16[buffer16 + string.length] = 0; - var result = this.mono_wasm_string_from_utf16(buffer, string.length); - Module._free(buffer); - return result; - }, find_method: function (klass, name, n) { - var result = this._find_method(klass, name, n); - if (result) { - if (!this._method_descriptions) this._method_descriptions = new Map; - this._method_descriptions.set(result, name); - } - return result; - }, get_js_obj: function (js_handle) { - if (js_handle > 0) return this.mono_wasm_get_jsobj_from_js_handle(js_handle); - return null; - }, _get_string_from_intern_table: function (mono_obj) { - if (!MONO.interned_string_table) return undefined; - return MONO.interned_string_table.get(mono_obj); - }, conv_string: function (mono_obj) {return MONO.string_decoder.copy(mono_obj);}, is_nested_array: function (ele) {return this._is_simple_array(ele);}, mono_array_to_js_array: function (mono_array) { - if (mono_array === 0) return null; - var arrayRoot = MONO.mono_wasm_new_root(mono_array); - try {return this._mono_array_root_to_js_array(arrayRoot);} finally {arrayRoot.release();} - }, _mono_array_root_to_js_array: function (arrayRoot) { - if (arrayRoot.value === 0) return null; - let elemRoot = MONO.mono_wasm_new_root(); - try { - var len = this.mono_array_length(arrayRoot.value); - var res = new Array(len); - for (var i = 0; i < len; ++i) { - elemRoot.value = this.mono_array_get(arrayRoot.value, i); - if (this.is_nested_array(elemRoot.value)) res[i] = this._mono_array_root_to_js_array(elemRoot); else res[i] = this._unbox_mono_obj_root(elemRoot); - } - } finally {elemRoot.release();} - return res; - }, js_array_to_mono_array: function (js_array, asString, should_add_in_flight) { - var mono_array = asString ? this.mono_wasm_string_array_new(js_array.length) : this.mono_obj_array_new(js_array.length); - let [arrayRoot, elemRoot] = MONO.mono_wasm_new_roots([mono_array, 0]); - try { - for (var i = 0; i < js_array.length; ++i) { - var obj = js_array[i]; - if (asString) obj = obj.toString(); - elemRoot.value = this._js_to_mono_obj(should_add_in_flight, obj); - this.mono_obj_array_set(arrayRoot.value, i, elemRoot.value); - } - return mono_array; - } finally {MONO.mono_wasm_release_roots(arrayRoot, elemRoot);} - }, js_to_mono_obj: function (js_obj) {return this._js_to_mono_obj(false, js_obj);}, unbox_mono_obj: function (mono_obj) { - if (mono_obj === 0) return undefined; - var root = MONO.mono_wasm_new_root(mono_obj); - try {return this._unbox_mono_obj_root(root);} finally {root.release();} - }, _unbox_cs_owned_root_as_js_object: function (root) { - var js_handle = this._get_cs_owned_object_js_handle(root.value, false); - var js_obj = BINDING.mono_wasm_get_jsobj_from_js_handle(js_handle); - return js_obj; - }, _unbox_mono_obj_root_with_known_nonprimitive_type: function (root, type) { - if (root.value === undefined) throw new Error(`Expected a root but got ${root}`); - switch (type) { - case 26: - case 27: - throw new Error("int64 not available"); - case 3: - case 29: - return this.conv_string(root.value); - case 4: - throw new Error("no idea on how to unbox value types"); - case 5: - return this._wrap_delegate_root_as_function(root); - case 6: - return this._unbox_task_root_as_promise(root); - case 7: - return this._unbox_ref_type_root_as_js_object(root); - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: - case 16: - case 17: - case 18: - throw new Error("Marshalling of primitive arrays are not supported. Use the corresponding TypedArray instead."); - case 20: - var dateValue = this._get_date_value(root.value); - return new Date(dateValue); - case 21: - var dateoffsetValue = this._object_to_string(root.value); - return dateoffsetValue; - case 22: - var uriValue = this._object_to_string(root.value); - return uriValue; - case 23: - return this._unbox_cs_owned_root_as_js_object(root); - case 30: - return undefined; - default: - throw new Error(`no idea on how to unbox object kind ${type} at offset ${root.value} (root address is ${root.get_address()})`); - } - }, _unbox_mono_obj_root: function (root) { - if (root.value === 0) return undefined; - var type = this.mono_wasm_try_unbox_primitive_and_get_type(root.value, this._unbox_buffer); - switch (type) { - case 1: - return Module.HEAP32[this._unbox_buffer / 4]; - case 25: - return Module.HEAPU32[this._unbox_buffer / 4]; - case 24: - return Module.HEAPF32[this._unbox_buffer / 4]; - case 2: - return Module.HEAPF64[this._unbox_buffer / 8]; - case 8: - return Module.HEAP32[this._unbox_buffer / 4] !== 0; - case 28: - return String.fromCharCode(Module.HEAP32[this._unbox_buffer / 4]); - default: - return this._unbox_mono_obj_root_with_known_nonprimitive_type(root, type); - } - }, js_typedarray_to_heap: function (typedArray) { - var numBytes = typedArray.length * typedArray.BYTES_PER_ELEMENT; - var ptr = Module._malloc(numBytes); - var heapBytes = new Uint8Array(Module.HEAPU8.buffer, ptr, numBytes); - heapBytes.set(new Uint8Array(typedArray.buffer, typedArray.byteOffset, numBytes)); - return heapBytes; - }, _box_js_int: function (js_obj) { - Module.HEAP32[this._box_buffer / 4] = js_obj; - return this.mono_wasm_box_primitive(this._class_int32, this._box_buffer, 4); - }, _box_js_uint: function (js_obj) { - Module.HEAPU32[this._box_buffer / 4] = js_obj; - return this.mono_wasm_box_primitive(this._class_uint32, this._box_buffer, 4); - }, _box_js_double: function (js_obj) { - Module.HEAPF64[this._box_buffer / 8] = js_obj; - return this.mono_wasm_box_primitive(this._class_double, this._box_buffer, 8); - }, _box_js_bool: function (js_obj) { - Module.HEAP32[this._box_buffer / 4] = js_obj ? 1 : 0; - return this.mono_wasm_box_primitive(this._class_boolean, this._box_buffer, 4); - }, _js_to_mono_uri: function (should_add_in_flight, js_obj) { - this.bindings_lazy_init(); - switch (true) { - case js_obj === null: - case typeof js_obj === "undefined": - return 0; - case typeof js_obj === "symbol": - case typeof js_obj === "string": - return this._create_uri(js_obj); - default: - return this._extract_mono_obj(should_add_in_flight, js_obj); - } - }, _js_to_mono_obj: function (should_add_in_flight, js_obj) { - this.bindings_lazy_init(); - switch (true) { - case js_obj === null: - case typeof js_obj === "undefined": - return 0; - case typeof js_obj === "number": { - if ((js_obj | 0) === js_obj) result = this._box_js_int(js_obj); else if (js_obj >>> 0 === js_obj) result = this._box_js_uint(js_obj); else result = this._box_js_double(js_obj); - if (!result) throw new Error(`Boxing failed for ${js_obj}`); - return result; - } - case typeof js_obj === "string": - return this.js_string_to_mono_string(js_obj); - case typeof js_obj === "symbol": - return this.js_string_to_mono_string_interned(js_obj); - case typeof js_obj === "boolean": - return this._box_js_bool(js_obj); - case this.isThenable(js_obj) === true: - return this._wrap_js_thenable_as_task(js_obj); - case js_obj.constructor.name === "Date": - return this._create_date_time(js_obj.getTime()); - default: - return this._extract_mono_obj(should_add_in_flight, js_obj); - } - }, _extract_mono_obj: function (should_add_in_flight, js_obj) { - if (js_obj === null || typeof js_obj === "undefined") return 0; - var result = null; - if (js_obj[BINDING.js_owned_gc_handle_symbol]) { - result = this.get_js_owned_object_by_gc_handle(js_obj[BINDING.js_owned_gc_handle_symbol]); - return result; - } - if (js_obj[BINDING.cs_owned_js_handle_symbol]) { - result = this.get_cs_owned_object_by_js_handle(js_obj[BINDING.cs_owned_js_handle_symbol], should_add_in_flight); - if (!result) {delete js_obj[BINDING.cs_owned_js_handle_symbol];} - } - if (!result) { - const wasm_type = js_obj[this.wasm_type_symbol]; - const wasm_type_id = typeof wasm_type === "undefined" ? 0 : wasm_type; - var js_handle = BINDING.mono_wasm_get_js_handle(js_obj); - result = this._create_cs_owned_proxy(js_handle, wasm_type_id, should_add_in_flight); - } - return result; - }, has_backing_array_buffer: function (js_obj) {return typeof SharedArrayBuffer !== "undefined" ? js_obj.buffer instanceof ArrayBuffer || js_obj.buffer instanceof SharedArrayBuffer : js_obj.buffer instanceof ArrayBuffer;}, js_typed_array_to_array: function (js_obj) { - if (!!(this.has_backing_array_buffer(js_obj) && js_obj.BYTES_PER_ELEMENT)) { - var arrayType = js_obj[this.wasm_type_symbol]; - var heapBytes = this.js_typedarray_to_heap(js_obj); - var bufferArray = this.mono_typed_array_new(heapBytes.byteOffset, js_obj.length, js_obj.BYTES_PER_ELEMENT, arrayType); - Module._free(heapBytes.byteOffset); - return bufferArray; - } else {throw new Error("Object '" + js_obj + "' is not a typed array");} - }, typedarray_copy_to: function (typed_array, pinned_array, begin, end, bytes_per_element) { - if (!!(this.has_backing_array_buffer(typed_array) && typed_array.BYTES_PER_ELEMENT)) { - if (bytes_per_element !== typed_array.BYTES_PER_ELEMENT) throw new Error("Inconsistent element sizes: TypedArray.BYTES_PER_ELEMENT '" + typed_array.BYTES_PER_ELEMENT + "' sizeof managed element: '" + bytes_per_element + "'"); - var num_of_bytes = (end - begin) * bytes_per_element; - var view_bytes = typed_array.length * typed_array.BYTES_PER_ELEMENT; - if (num_of_bytes > view_bytes) num_of_bytes = view_bytes; - var offset = begin * bytes_per_element; - var heapBytes = new Uint8Array(Module.HEAPU8.buffer, pinned_array + offset, num_of_bytes); - heapBytes.set(new Uint8Array(typed_array.buffer, typed_array.byteOffset, num_of_bytes)); - return num_of_bytes; - } else {throw new Error("Object '" + typed_array + "' is not a typed array");} - }, typedarray_copy_from: function (typed_array, pinned_array, begin, end, bytes_per_element) { - if (!!(this.has_backing_array_buffer(typed_array) && typed_array.BYTES_PER_ELEMENT)) { - if (bytes_per_element !== typed_array.BYTES_PER_ELEMENT) throw new Error("Inconsistent element sizes: TypedArray.BYTES_PER_ELEMENT '" + typed_array.BYTES_PER_ELEMENT + "' sizeof managed element: '" + bytes_per_element + "'"); - var num_of_bytes = (end - begin) * bytes_per_element; - var view_bytes = typed_array.length * typed_array.BYTES_PER_ELEMENT; - if (num_of_bytes > view_bytes) num_of_bytes = view_bytes; - var typedarrayBytes = new Uint8Array(typed_array.buffer, 0, num_of_bytes); - var offset = begin * bytes_per_element; - typedarrayBytes.set(Module.HEAPU8.subarray(pinned_array + offset, pinned_array + offset + num_of_bytes)); - return num_of_bytes; - } else {throw new Error("Object '" + typed_array + "' is not a typed array");} - }, typed_array_from: function (pinned_array, begin, end, bytes_per_element, type) { - var newTypedArray = 0; - switch (type) { - case 5: - newTypedArray = new Int8Array(end - begin); - break; - case 6: - newTypedArray = new Uint8Array(end - begin); - break; - case 7: - newTypedArray = new Int16Array(end - begin); - break; - case 8: - newTypedArray = new Uint16Array(end - begin); - break; - case 9: - newTypedArray = new Int32Array(end - begin); - break; - case 10: - newTypedArray = new Uint32Array(end - begin); - break; - case 13: - newTypedArray = new Float32Array(end - begin); - break; - case 14: - newTypedArray = new Float64Array(end - begin); - break; - case 15: - newTypedArray = new Uint8ClampedArray(end - begin); - break; - } - this.typedarray_copy_from(newTypedArray, pinned_array, begin, end, bytes_per_element); - return newTypedArray; - }, js_to_mono_enum: function (js_obj, method, parmIdx) { - this.bindings_lazy_init(); - if (typeof js_obj !== "number") throw new Error(`Expected numeric value for enum argument, got '${js_obj}'`); - return js_obj | 0; - }, get_js_owned_object_by_gc_handle: function (gc_handle) { - if (!gc_handle) {return 0;} - return this._get_js_owned_object_by_gc_handle(gc_handle); - }, get_cs_owned_object_by_js_handle: function (js_handle, should_add_in_flight) { - if (!js_handle) {return 0;} - return this._get_cs_owned_object_by_js_handle(js_handle, should_add_in_flight); - }, mono_method_get_call_signature: function (method, mono_obj) { - let instanceRoot = MONO.mono_wasm_new_root(mono_obj); - try { - this.bindings_lazy_init(); - return this.call_method(this.get_call_sig, null, "im", [method, instanceRoot.value]); - } finally {instanceRoot.release();} - }, _create_named_function: function (name, argumentNames, body, closure) { - var result = null, closureArgumentList = null, closureArgumentNames = null; - if (closure) { - closureArgumentNames = Object.keys(closure); - closureArgumentList = new Array(closureArgumentNames.length); - for (var i = 0, l = closureArgumentNames.length; i < l; i++) closureArgumentList[i] = closure[closureArgumentNames[i]]; - } - var constructor = this._create_rebindable_named_function(name, argumentNames, body, closureArgumentNames); - result = constructor.apply(null, closureArgumentList); - return result; - }, _create_rebindable_named_function: function (name, argumentNames, body, closureArgNames) { - var strictPrefix = "\"use strict\";\r\n"; - var uriPrefix = "", escapedFunctionIdentifier = ""; - if (name) { - uriPrefix = "//# sourceURL=https://mono-wasm.invalid/" + name + "\r\n"; - escapedFunctionIdentifier = name; - } else {escapedFunctionIdentifier = "unnamed";} - var rawFunctionText = "function " + escapedFunctionIdentifier + "(" + argumentNames.join(", ") + ") {\r\n" + body + "\r\n};\r\n"; - var lineBreakRE = /\r(\n?)/g; - rawFunctionText = uriPrefix + strictPrefix + rawFunctionText.replace(lineBreakRE, "\r\n ") + ` return ${escapedFunctionIdentifier};\r\n`; - var result = null, keys = null; - if (closureArgNames) {keys = closureArgNames.concat([rawFunctionText]);} else {keys = [rawFunctionText];} - result = Function.apply(Function, keys); - return result; - }, _create_primitive_converters: function () { - var result = new Map; - result.set("m", { steps: [{}], size: 0 }); - result.set("s", { steps: [{ convert: this.js_string_to_mono_string.bind(this) }], size: 0, needs_root: true }); - result.set("S", { steps: [{ convert: this.js_string_to_mono_string_interned.bind(this) }], size: 0, needs_root: true }); - result.set("o", { steps: [{ convert: this._js_to_mono_obj.bind(this, false) }], size: 0, needs_root: true }); - result.set("u", { steps: [{ convert: this._js_to_mono_uri.bind(this, false) }], size: 0, needs_root: true }); - result.set("j", { steps: [{ convert: this.js_to_mono_enum.bind(this), indirect: "i32" }], size: 8 }); - result.set("i", { steps: [{ indirect: "i32" }], size: 8 }); - result.set("l", { steps: [{ indirect: "i64" }], size: 8 }); - result.set("f", { steps: [{ indirect: "float" }], size: 8 }); - result.set("d", { steps: [{ indirect: "double" }], size: 8 }); - this._primitive_converters = result; - return result; - }, _create_converter_for_marshal_string: function (args_marshal) { - var primitiveConverters = this._primitive_converters; - if (!primitiveConverters) primitiveConverters = this._create_primitive_converters(); - var steps = []; - var size = 0; - var is_result_definitely_unmarshaled = false, is_result_possibly_unmarshaled = false, result_unmarshaled_if_argc = -1, needs_root_buffer = false; - for (var i = 0; i < args_marshal.length; ++i) { - var key = args_marshal[i]; - if (i === args_marshal.length - 1) { - if (key === "!") { - is_result_definitely_unmarshaled = true; - continue; - } else if (key === "m") { - is_result_possibly_unmarshaled = true; - result_unmarshaled_if_argc = args_marshal.length - 1; - } - } else if (key === "!") throw new Error("! must be at the end of the signature"); - var conv = primitiveConverters.get(key); - if (!conv) throw new Error("Unknown parameter type " + type); - var localStep = Object.create(conv.steps[0]); - localStep.size = conv.size; - if (conv.needs_root) needs_root_buffer = true; - localStep.needs_root = conv.needs_root; - localStep.key = args_marshal[i]; - steps.push(localStep); - size += conv.size; - } - return { steps: steps, size: size, args_marshal: args_marshal, is_result_definitely_unmarshaled: is_result_definitely_unmarshaled, is_result_possibly_unmarshaled: is_result_possibly_unmarshaled, result_unmarshaled_if_argc: result_unmarshaled_if_argc, needs_root_buffer: needs_root_buffer }; - }, _get_converter_for_marshal_string: function (args_marshal) { - if (!this._signature_converters) this._signature_converters = new Map; - var converter = this._signature_converters.get(args_marshal); - if (!converter) { - converter = this._create_converter_for_marshal_string(args_marshal); - this._signature_converters.set(args_marshal, converter); - } - return converter; - }, _compile_converter_for_marshal_string: function (args_marshal) { - var converter = this._get_converter_for_marshal_string(args_marshal); - if (typeof converter.args_marshal !== "string") throw new Error("Corrupt converter for '" + args_marshal + "'"); - if (converter.compiled_function && converter.compiled_variadic_function) return converter; - var converterName = args_marshal.replace("!", "_result_unmarshaled"); - converter.name = converterName; - var body = []; - var argumentNames = ["buffer", "rootBuffer", "method"]; - var bufferSizeBytes = converter.size + args_marshal.length * 4 + 16; - var rootBufferSize = args_marshal.length; - var indirectBaseOffset = ((args_marshal.length * 4 + 7) / 8 | 0) * 8; - var closure = {}; - var indirectLocalOffset = 0; - body.push(`if (!buffer) buffer = Module._malloc (${bufferSizeBytes});`, `var indirectStart = buffer + ${indirectBaseOffset};`, "var indirect32 = (indirectStart / 4) | 0, indirect64 = (indirectStart / 8) | 0;", "var buffer32 = (buffer / 4) | 0;", ""); - for (let i = 0; i < converter.steps.length; i++) { - var step = converter.steps[i]; - var closureKey = "step" + i; - var valueKey = "value" + i; - var argKey = "arg" + i; - argumentNames.push(argKey); - if (step.convert) { - closure[closureKey] = step.convert; - body.push(`var ${valueKey} = ${closureKey}(${argKey}, method, ${i});`); - } else {body.push(`var ${valueKey} = ${argKey};`);} - if (step.needs_root) body.push(`rootBuffer.set (${i}, ${valueKey});`); - if (step.indirect) { - var heapArrayName = null; - switch (step.indirect) { - case"u32": - heapArrayName = "HEAPU32"; - break; - case"i32": - heapArrayName = "HEAP32"; - break; - case"float": - heapArrayName = "HEAPF32"; - break; - case"double": - body.push(`Module.HEAPF64[indirect64 + ${indirectLocalOffset / 8}] = ${valueKey};`); - break; - case"i64": - body.push(`Module.setValue (indirectStart + ${indirectLocalOffset}, ${valueKey}, 'i64');`); - break; - default: - throw new Error("Unimplemented indirect type: " + step.indirect); - } - if (heapArrayName) body.push(`Module.${heapArrayName}[indirect32 + ${indirectLocalOffset / 4}] = ${valueKey};`); - body.push(`Module.HEAP32[buffer32 + ${i}] = indirectStart + ${indirectLocalOffset};`, ""); - indirectLocalOffset += step.size; - } else { - body.push(`Module.HEAP32[buffer32 + ${i}] = ${valueKey};`, ""); - indirectLocalOffset += 4; - } - } - body.push("return buffer;"); - var bodyJs = body.join("\r\n"), compiledFunction = null, compiledVariadicFunction = null; - try { - compiledFunction = this._create_named_function("converter_" + converterName, argumentNames, bodyJs, closure); - converter.compiled_function = compiledFunction; - } catch (exc) { - converter.compiled_function = null; - console.warn("compiling converter failed for", bodyJs, "with error", exc); - throw exc; - } - argumentNames = ["existingBuffer", "rootBuffer", "method", "args"]; - closure = { converter: compiledFunction }; - body = ["return converter(", " existingBuffer, rootBuffer, method,"]; - for (let i = 0; i < converter.steps.length; i++) {body.push(" args[" + i + (i == converter.steps.length - 1 ? "]" : "], "));} - body.push(");"); - bodyJs = body.join("\r\n"); - try { - compiledVariadicFunction = this._create_named_function("variadic_converter_" + converterName, argumentNames, bodyJs, closure); - converter.compiled_variadic_function = compiledVariadicFunction; - } catch (exc) { - converter.compiled_variadic_function = null; - console.warn("compiling converter failed for", bodyJs, "with error", exc); - throw exc; - } - converter.scratchRootBuffer = null; - converter.scratchBuffer = 0 | 0; - return converter; - }, _verify_args_for_method_call: function (args_marshal, args) { - var has_args = args && typeof args === "object" && args.length > 0; - var has_args_marshal = typeof args_marshal === "string"; - if (has_args) {if (!has_args_marshal) throw new Error("No signature provided for method call."); else if (args.length > args_marshal.length) throw new Error("Too many parameter values. Expected at most " + args_marshal.length + " value(s) for signature " + args_marshal);} - return has_args_marshal && has_args; - }, _get_buffer_for_method_call: function (converter) { - if (!converter) return 0; - var result = converter.scratchBuffer; - converter.scratchBuffer = 0; - return result; - }, _get_args_root_buffer_for_method_call: function (converter) { - if (!converter) return null; - if (!converter.needs_root_buffer) return null; - var result; - if (converter.scratchRootBuffer) { - result = converter.scratchRootBuffer; - converter.scratchRootBuffer = null; - } else { - result = MONO.mono_wasm_new_root_buffer(converter.steps.length); - result.converter = converter; - } - return result; - }, _release_args_root_buffer_from_method_call: function (converter, argsRootBuffer) { - if (!argsRootBuffer || !converter) return; - if (!converter.scratchRootBuffer) { - argsRootBuffer.clear(); - converter.scratchRootBuffer = argsRootBuffer; - } else {argsRootBuffer.release();} - }, _release_buffer_from_method_call: function (converter, buffer) { - if (!converter || !buffer) return; - if (!converter.scratchBuffer) converter.scratchBuffer = buffer | 0; else Module._free(buffer | 0); - }, _convert_exception_for_method_call: function (result, exception) { - if (exception === 0) return null; - var msg = this.conv_string(result); - var err = new Error(msg); - return err; - }, _maybe_produce_signature_warning: function (converter) { - if (converter.has_warned_about_signature) return; - console.warn("MONO_WASM: Deprecated raw return value signature: '" + converter.args_marshal + "'. End the signature with '!' instead of 'm'."); - converter.has_warned_about_signature = true; - }, _decide_if_result_is_marshaled: function (converter, argc) { - if (!converter) return true; - if (converter.is_result_possibly_unmarshaled && argc === converter.result_unmarshaled_if_argc) { - if (argc < converter.result_unmarshaled_if_argc) throw new Error(["Expected >= ", converter.result_unmarshaled_if_argc, "argument(s) but got", argc, "for signature " + converter.args_marshal].join(" ")); - this._maybe_produce_signature_warning(converter); - return false; - } else { - if (argc < converter.steps.length) throw new Error(["Expected", converter.steps.length, "argument(s) but got", argc, "for signature " + converter.args_marshal].join(" ")); - return !converter.is_result_definitely_unmarshaled; - } - }, call_method: function (method, this_arg, args_marshal, args) { - this.bindings_lazy_init(); - this_arg = this_arg | 0; - if ((method | 0) !== method) throw new Error(`method must be an address in the native heap, but was '${method}'`); - if (!method) throw new Error("no method specified"); - var needs_converter = this._verify_args_for_method_call(args_marshal, args); - var buffer = 0, converter = null, argsRootBuffer = null; - var is_result_marshaled = true; - if (needs_converter) { - converter = this._compile_converter_for_marshal_string(args_marshal); - is_result_marshaled = this._decide_if_result_is_marshaled(converter, args.length); - argsRootBuffer = this._get_args_root_buffer_for_method_call(converter); - var scratchBuffer = this._get_buffer_for_method_call(converter); - buffer = converter.compiled_variadic_function(scratchBuffer, argsRootBuffer, method, args); - } - return this._call_method_with_converted_args(method, this_arg, converter, buffer, is_result_marshaled, argsRootBuffer); - }, _handle_exception_for_call: function (converter, buffer, resultRoot, exceptionRoot, argsRootBuffer) { - var exc = this._convert_exception_for_method_call(resultRoot.value, exceptionRoot.value); - if (!exc) return; - this._teardown_after_call(converter, buffer, resultRoot, exceptionRoot, argsRootBuffer); - throw exc; - }, _handle_exception_and_produce_result_for_call: function (converter, buffer, resultRoot, exceptionRoot, argsRootBuffer, is_result_marshaled) { - this._handle_exception_for_call(converter, buffer, resultRoot, exceptionRoot, argsRootBuffer); - if (is_result_marshaled) result = this._unbox_mono_obj_root(resultRoot); else result = resultRoot.value; - this._teardown_after_call(converter, buffer, resultRoot, exceptionRoot, argsRootBuffer); - return result; - }, _teardown_after_call: function (converter, buffer, resultRoot, exceptionRoot, argsRootBuffer) { - this._release_args_root_buffer_from_method_call(converter, argsRootBuffer); - this._release_buffer_from_method_call(converter, buffer | 0); - if (resultRoot) resultRoot.release(); - if (exceptionRoot) exceptionRoot.release(); - }, _get_method_description: function (method) { - if (!this._method_descriptions) this._method_descriptions = new Map; - var result = this._method_descriptions.get(method); - if (!result) result = "method#" + method; - return result; - }, _call_method_with_converted_args: function (method, this_arg, converter, buffer, is_result_marshaled, argsRootBuffer) { - var resultRoot = MONO.mono_wasm_new_root(), exceptionRoot = MONO.mono_wasm_new_root(); - resultRoot.value = this.invoke_method(method, this_arg, buffer, exceptionRoot.get_address()); - return this._handle_exception_and_produce_result_for_call(converter, buffer, resultRoot, exceptionRoot, argsRootBuffer, is_result_marshaled); - }, bind_method: function (method, this_arg, args_marshal, friendly_name) { - this.bindings_lazy_init(); - this_arg = this_arg | 0; - var converter = null; - if (typeof args_marshal === "string") converter = this._compile_converter_for_marshal_string(args_marshal); - var closure = { library_mono: MONO, binding_support: this, method: method, this_arg: this_arg }; - var converterKey = "converter_" + converter.name; - if (converter) closure[converterKey] = converter; - var argumentNames = []; - var body = ["var resultRoot = library_mono.mono_wasm_new_root (), exceptionRoot = library_mono.mono_wasm_new_root ();", ""]; - if (converter) { - body.push(`var argsRootBuffer = binding_support._get_args_root_buffer_for_method_call (${converterKey});`, `var scratchBuffer = binding_support._get_buffer_for_method_call (${converterKey});`, `var buffer = ${converterKey}.compiled_function (`, " scratchBuffer, argsRootBuffer, method,"); - for (var i = 0; i < converter.steps.length; i++) { - var argName = "arg" + i; - argumentNames.push(argName); - body.push(" " + argName + (i == converter.steps.length - 1 ? "" : ", ")); - } - body.push(");"); - } else {body.push("var argsRootBuffer = null, buffer = 0;");} - if (converter.is_result_definitely_unmarshaled) {body.push("var is_result_marshaled = false;");} else if (converter.is_result_possibly_unmarshaled) {body.push(`var is_result_marshaled = arguments.length !== ${converter.result_unmarshaled_if_argc};`);} else {body.push("var is_result_marshaled = true;");} - body.push("", "resultRoot.value = binding_support.invoke_method (method, this_arg, buffer, exceptionRoot.get_address ());", `binding_support._handle_exception_for_call (${converterKey}, buffer, resultRoot, exceptionRoot, argsRootBuffer);`, "", "var result = undefined;", "if (!is_result_marshaled) ", " result = resultRoot.value;", "else if (resultRoot.value !== 0) {", " var resultType = binding_support.mono_wasm_try_unbox_primitive_and_get_type (resultRoot.value, buffer);", " switch (resultType) {", " case 1:", " result = Module.HEAP32[buffer / 4]; break;", " case 25:", " result = Module.HEAPU32[buffer / 4]; break;", " case 24:", " result = Module.HEAPF32[buffer / 4]; break;", " case 2:", " result = Module.HEAPF64[buffer / 8]; break;", " case 8:", " result = (Module.HEAP32[buffer / 4]) !== 0; break;", " case 28:", " result = String.fromCharCode(Module.HEAP32[buffer / 4]); break;", " default:", " result = binding_support._unbox_mono_obj_root_with_known_nonprimitive_type (resultRoot, resultType); break;", " }", "}", "", `binding_support._teardown_after_call (${converterKey}, buffer, resultRoot, exceptionRoot, argsRootBuffer);`, "return result;"); - bodyJs = body.join("\r\n"); - if (friendly_name) { - var escapeRE = /[^A-Za-z0-9_]/g; - friendly_name = friendly_name.replace(escapeRE, "_"); - } - var displayName = "managed_" + (friendly_name || method); - if (this_arg) displayName += "_with_this_" + this_arg; - return this._create_named_function(displayName, argumentNames, bodyJs, closure); - }, resolve_method_fqn: function (fqn) { - this.bindings_lazy_init(); - var assembly = fqn.substring(fqn.indexOf("[") + 1, fqn.indexOf("]")).trim(); - fqn = fqn.substring(fqn.indexOf("]") + 1).trim(); - var methodname = fqn.substring(fqn.indexOf(":") + 1); - fqn = fqn.substring(0, fqn.indexOf(":")).trim(); - var namespace = ""; - var classname = fqn; - if (fqn.indexOf(".") != -1) { - var idx = fqn.lastIndexOf("."); - namespace = fqn.substring(0, idx); - classname = fqn.substring(idx + 1); - } - if (!assembly.trim()) throw new Error("No assembly name specified"); - if (!classname.trim()) throw new Error("No class name specified"); - if (!methodname.trim()) throw new Error("No method name specified"); - var asm = this.assembly_load(assembly); - if (!asm) throw new Error("Could not find assembly: " + assembly); - var klass = this.find_class(asm, namespace, classname); - if (!klass) throw new Error("Could not find class: " + namespace + ":" + classname + " in assembly " + assembly); - var method = this.find_method(klass, methodname, -1); - if (!method) throw new Error("Could not find method: " + methodname); - return method; - }, call_static_method: function (fqn, args, signature) { - this.bindings_lazy_init(); - var method = this.resolve_method_fqn(fqn); - if (typeof signature === "undefined") signature = Module.mono_method_get_call_signature(method); - return this.call_method(method, null, signature, args); - }, bind_static_method: function (fqn, signature) { - this.bindings_lazy_init(); - var method = this.resolve_method_fqn(fqn); - if (typeof signature === "undefined") signature = Module.mono_method_get_call_signature(method); - return BINDING.bind_method(method, null, signature, fqn); - }, bind_assembly_entry_point: function (assembly, signature) { - this.bindings_lazy_init(); - var asm = this.assembly_load(assembly); - if (!asm) throw new Error("Could not find assembly: " + assembly); - var method = this.assembly_get_entry_point(asm); - if (!method) throw new Error("Could not find entry point for assembly: " + assembly); - if (typeof signature === "undefined") signature = Module.mono_method_get_call_signature(method); - return function () { - try { - var args = [...arguments]; - if (args.length > 0 && Array.isArray(args[0])) args[0] = BINDING.js_array_to_mono_array(args[0], true, false); - let result = BINDING.call_method(method, null, signature, args); - return Promise.resolve(result); - } catch (error) {return Promise.reject(error);} - }; - }, call_assembly_entry_point: function (assembly, args, signature) {return this.bind_assembly_entry_point(assembly, signature)(...args);}, mono_wasm_get_jsobj_from_js_handle: function (js_handle) { - if (js_handle > 0) return this._cs_owned_objects_by_js_handle[js_handle]; - return null; - }, mono_wasm_get_js_handle: function (js_obj) { - if (js_obj[BINDING.cs_owned_js_handle_symbol]) {return js_obj[BINDING.cs_owned_js_handle_symbol];} - var js_handle = this._js_handle_free_list.length ? this._js_handle_free_list.pop() : this._next_js_handle++; - this._cs_owned_objects_by_js_handle[js_handle] = js_obj; - js_obj[BINDING.cs_owned_js_handle_symbol] = js_handle; - return js_handle; - }, _mono_wasm_release_js_handle: function (js_handle) { - var obj = BINDING._cs_owned_objects_by_js_handle[js_handle]; - if (typeof obj !== "undefined" && obj !== null) { - if (globalThis === obj) return obj; - if (typeof obj[BINDING.cs_owned_js_handle_symbol] !== "undefined") {obj[BINDING.cs_owned_js_handle_symbol] = undefined;} - BINDING._cs_owned_objects_by_js_handle[js_handle] = undefined; - BINDING._js_handle_free_list.push(js_handle); - } - return obj; - } - }; - function _mono_wasm_add_event_listener(objHandle, name, listener_gc_handle, optionsHandle) { - var nameRoot = MONO.mono_wasm_new_root(name); - try { - BINDING.bindings_lazy_init(); - var sName = BINDING.conv_string(nameRoot.value); - var obj = BINDING.mono_wasm_get_jsobj_from_js_handle(objHandle); - if (!obj) throw new Error("ERR09: Invalid JS object handle for '" + sName + "'"); - const prevent_timer_throttling = !BINDING.isChromium || obj.constructor.name !== "WebSocket" ? null : () => MONO.prevent_timer_throttling(0); - var listener = BINDING._wrap_delegate_gc_handle_as_function(listener_gc_handle, prevent_timer_throttling); - if (!listener) throw new Error("ERR10: Invalid listener gc_handle"); - var options = optionsHandle ? BINDING.mono_wasm_get_jsobj_from_js_handle(optionsHandle) : null; - if (!BINDING._use_finalization_registry) {listener[BINDING.listener_registration_count_symbol] = listener[BINDING.listener_registration_count_symbol] ? listener[BINDING.listener_registration_count_symbol] + 1 : 1;} - if (options) obj.addEventListener(sName, listener, options); else obj.addEventListener(sName, listener); - return 0; - } catch (exc) {return BINDING.js_string_to_mono_string(exc.message);} finally {nameRoot.release();} - } - function _mono_wasm_asm_loaded(assembly_name, assembly_ptr, assembly_len, pdb_ptr, pdb_len) { - if (MONO.mono_wasm_runtime_is_ready !== true) return; - const assembly_name_str = assembly_name !== 0 ? Module.UTF8ToString(assembly_name).concat(".dll") : ""; - const assembly_data = new Uint8Array(Module.HEAPU8.buffer, assembly_ptr, assembly_len); - const assembly_b64 = MONO._base64Converter.toBase64StringImpl(assembly_data); - let pdb_b64; - if (pdb_ptr) { - const pdb_data = new Uint8Array(Module.HEAPU8.buffer, pdb_ptr, pdb_len); - pdb_b64 = MONO._base64Converter.toBase64StringImpl(pdb_data); - } - MONO.mono_wasm_raise_debug_event({ eventName: "AssemblyLoaded", assembly_name: assembly_name_str, assembly_b64: assembly_b64, pdb_b64: pdb_b64 }); - } - function _mono_wasm_create_cs_owned_object(core_name, args, is_exception) { - var argsRoot = MONO.mono_wasm_new_root(args), nameRoot = MONO.mono_wasm_new_root(core_name); - try { - BINDING.bindings_lazy_init(); - var js_name = BINDING.conv_string(nameRoot.value); - if (!js_name) { - setValue(is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string("Invalid name @" + nameRoot.value); - } - var coreObj = globalThis[js_name]; - if (coreObj === null || typeof coreObj === "undefined") { - setValue(is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string("JavaScript host object '" + js_name + "' not found."); - } - var js_args = BINDING._mono_array_root_to_js_array(argsRoot); - try { - var allocator = function (constructor, js_args) { - var argsList = new Array; - argsList[0] = constructor; - if (js_args) argsList = argsList.concat(js_args); - var tempCtor = constructor.bind.apply(constructor, argsList); - var js_obj = new tempCtor; - return js_obj; - }; - var js_obj = allocator(coreObj, js_args); - var js_handle = BINDING.mono_wasm_get_js_handle(js_obj); - return BINDING._js_to_mono_obj(false, js_handle); - } catch (e) { - var res = e.toString(); - setValue(is_exception, 1, "i32"); - if (res === null || res === undefined) res = "Error allocating object."; - return BINDING.js_string_to_mono_string(res); - } - } finally { - argsRoot.release(); - nameRoot.release(); - } - } - function _mono_wasm_fire_debugger_agent_message() {debugger} - function _mono_wasm_get_by_index(js_handle, property_index, is_exception) { - BINDING.bindings_lazy_init(); - var obj = BINDING.mono_wasm_get_jsobj_from_js_handle(js_handle); - if (!obj) { - setValue(is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string("ERR03: Invalid JS object handle '" + js_handle + "' while getting [" + property_index + "]"); - } - try { - var m = obj[property_index]; - return BINDING._js_to_mono_obj(true, m); - } catch (e) { - var res = e.toString(); - setValue(is_exception, 1, "i32"); - if (res === null || typeof res === "undefined") res = "unknown exception"; - return BINDING.js_string_to_mono_string(res); - } - } - function _mono_wasm_get_global_object(global_name, is_exception) { - var nameRoot = MONO.mono_wasm_new_root(global_name); - try { - BINDING.bindings_lazy_init(); - var js_name = BINDING.conv_string(nameRoot.value); - var globalObj; - if (!js_name) {globalObj = globalThis;} else {globalObj = globalThis[js_name];} - if (globalObj === null || typeof globalObj === undefined) { - setValue(is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string("Global object '" + js_name + "' not found."); - } - return BINDING._js_to_mono_obj(true, globalObj); - } finally {nameRoot.release();} - } - function _mono_wasm_get_object_property(js_handle, property_name, is_exception) { - BINDING.bindings_lazy_init(); - var nameRoot = MONO.mono_wasm_new_root(property_name); - try { - var js_name = BINDING.conv_string(nameRoot.value); - if (!js_name) { - setValue(is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string("Invalid property name object '" + nameRoot.value + "'"); - } - var obj = BINDING.mono_wasm_get_jsobj_from_js_handle(js_handle); - if (!obj) { - setValue(is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string("ERR01: Invalid JS object handle '" + js_handle + "' while geting '" + js_name + "'"); - } - var res; - try { - var m = obj[js_name]; - return BINDING._js_to_mono_obj(true, m); - } catch (e) { - var res = e.toString(); - setValue(is_exception, 1, "i32"); - if (res === null || typeof res === "undefined") res = "unknown exception"; - return BINDING.js_string_to_mono_string(res); - } - } finally {nameRoot.release();} - } - var DOTNET = { conv_string: function (mono_obj) {return MONO.string_decoder.copy(mono_obj);} }; - function _mono_wasm_invoke_js_blazor(exceptionMessage, callInfo, arg0, arg1, arg2) { - var mono_string = globalThis._mono_string_cached || (globalThis._mono_string_cached = Module.cwrap("mono_wasm_string_from_js", "number", ["string"])); - try { - var blazorExports = globalThis.Blazor; - if (!blazorExports) {throw new Error("The blazor.webassembly.js library is not loaded.");} - return blazorExports._internal.invokeJSFromDotNet(callInfo, arg0, arg1, arg2); - } catch (ex) { - var exceptionJsString = ex.message + "\n" + ex.stack; - var exceptionSystemString = mono_string(exceptionJsString); - setValue(exceptionMessage, exceptionSystemString, "i32"); - return 0; - } - } - function _mono_wasm_invoke_js_marshalled(exceptionMessage, asyncHandleLongPtr, functionName, argsJson, treatResultAsVoid) { - var mono_string = globalThis._mono_string_cached || (globalThis._mono_string_cached = Module.cwrap("mono_wasm_string_from_js", "number", ["string"])); - try { - var u32Index = asyncHandleLongPtr >> 2; - var asyncHandleJsNumber = Module.HEAPU32[u32Index + 1] * 4294967296 + Module.HEAPU32[u32Index]; - var funcNameJsString = DOTNET.conv_string(functionName); - var argsJsonJsString = argsJson && DOTNET.conv_string(argsJson); - var dotNetExports = globaThis.DotNet; - if (!dotNetExports) {throw new Error("The Microsoft.JSInterop.js library is not loaded.");} - if (asyncHandleJsNumber) { - dotNetExports.jsCallDispatcher.beginInvokeJSFromDotNet(asyncHandleJsNumber, funcNameJsString, argsJsonJsString, treatResultAsVoid); - return 0; - } else { - var resultJson = dotNetExports.jsCallDispatcher.invokeJSFromDotNet(funcNameJsString, argsJsonJsString, treatResultAsVoid); - return resultJson === null ? 0 : mono_string(resultJson); - } - } catch (ex) { - var exceptionJsString = ex.message + "\n" + ex.stack; - var exceptionSystemString = mono_string(exceptionJsString); - setValue(exceptionMessage, exceptionSystemString, "i32"); - return 0; - } - } - function _mono_wasm_invoke_js_unmarshalled(exceptionMessage, funcName, arg0, arg1, arg2) { - try { - var funcNameJsString = DOTNET.conv_string(funcName); - var dotNetExports = globalThis.DotNet; - if (!dotNetExports) {throw new Error("The Microsoft.JSInterop.js library is not loaded.");} - var funcInstance = dotNetExports.jsCallDispatcher.findJSFunction(funcNameJsString); - return funcInstance.call(null, arg0, arg1, arg2); - } catch (ex) { - var exceptionJsString = ex.message + "\n" + ex.stack; - var mono_string = Module.cwrap("mono_wasm_string_from_js", "number", ["string"]); - var exceptionSystemString = mono_string(exceptionJsString); - setValue(exceptionMessage, exceptionSystemString, "i32"); - return 0; - } - } - function _mono_wasm_invoke_js_with_args(js_handle, method_name, args, is_exception) { - let argsRoot = MONO.mono_wasm_new_root(args), nameRoot = MONO.mono_wasm_new_root(method_name); - try { - BINDING.bindings_lazy_init(); - var js_name = BINDING.conv_string(nameRoot.value); - if (!js_name || typeof js_name !== "string") { - setValue(is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string("ERR12: Invalid method name object '" + nameRoot.value + "'"); - } - var obj = BINDING.get_js_obj(js_handle); - if (!obj) { - setValue(is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string("ERR13: Invalid JS object handle '" + js_handle + "' while invoking '" + js_name + "'"); - } - var js_args = BINDING._mono_array_root_to_js_array(argsRoot); - var res; - try { - var m = obj[js_name]; - if (typeof m === "undefined") throw new Error("Method: '" + js_name + "' not found for: '" + Object.prototype.toString.call(obj) + "'"); - var res = m.apply(obj, js_args); - return BINDING._js_to_mono_obj(true, res); - } catch (e) { - var res = e.toString(); - setValue(is_exception, 1, "i32"); - if (res === null || res === undefined) res = "unknown exception"; - return BINDING.js_string_to_mono_string(res); - } - } finally { - argsRoot.release(); - nameRoot.release(); - } - } - function _mono_wasm_release_cs_owned_object(js_handle) { - BINDING.bindings_lazy_init(); - BINDING._mono_wasm_release_js_handle(js_handle); - } - function _mono_wasm_remove_event_listener(objHandle, name, listener_gc_handle, capture) { - var nameRoot = MONO.mono_wasm_new_root(name); - try { - BINDING.bindings_lazy_init(); - var obj = BINDING.mono_wasm_get_jsobj_from_js_handle(objHandle); - if (!obj) throw new Error("ERR11: Invalid JS object handle"); - var listener = BINDING._lookup_js_owned_object(listener_gc_handle); - if (!listener) return; - var sName = BINDING.conv_string(nameRoot.value); - obj.removeEventListener(sName, listener, !!capture); - if (!BINDING._use_finalization_registry) { - listener[BINDING.listener_registration_count_symbol]--; - if (listener[BINDING.listener_registration_count_symbol] === 0) { - BINDING._js_owned_object_table.delete(listener_gc_handle); - BINDING._release_js_owned_object_by_gc_handle(listener_gc_handle); - } - } - return 0; - } catch (exc) {return BINDING.js_string_to_mono_string(exc.message);} finally {nameRoot.release();} - } - function _mono_wasm_set_by_index(js_handle, property_index, value, is_exception) { - var valueRoot = MONO.mono_wasm_new_root(value); - try { - BINDING.bindings_lazy_init(); - var obj = BINDING.mono_wasm_get_jsobj_from_js_handle(js_handle); - if (!obj) { - setValue(is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string("ERR04: Invalid JS object handle '" + js_handle + "' while setting [" + property_index + "]"); - } - var js_value = BINDING._unbox_mono_obj_root(valueRoot); - try { - obj[property_index] = js_value; - return true; - } catch (e) { - var res = e.toString(); - setValue(is_exception, 1, "i32"); - if (res === null || typeof res === "undefined") res = "unknown exception"; - return BINDING.js_string_to_mono_string(res); - } - } finally {valueRoot.release();} - } - function _mono_wasm_set_object_property(js_handle, property_name, value, createIfNotExist, hasOwnProperty, is_exception) { - var valueRoot = MONO.mono_wasm_new_root(value), nameRoot = MONO.mono_wasm_new_root(property_name); - try { - BINDING.bindings_lazy_init(); - var property = BINDING.conv_string(nameRoot.value); - if (!property) { - setValue(is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string("Invalid property name object '" + property_name + "'"); - } - var js_obj = BINDING.mono_wasm_get_jsobj_from_js_handle(js_handle); - if (!js_obj) { - setValue(is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string("ERR02: Invalid JS object handle '" + js_handle + "' while setting '" + property + "'"); - } - var result = false; - var js_value = BINDING._unbox_mono_obj_root(valueRoot); - if (createIfNotExist) { - js_obj[property] = js_value; - result = true; - } else { - result = false; - if (!createIfNotExist) {if (!js_obj.hasOwnProperty(property)) return false;} - if (hasOwnProperty === true) { - if (js_obj.hasOwnProperty(property)) { - js_obj[property] = js_value; - result = true; - } - } else { - js_obj[property] = js_value; - result = true; - } - } - return BINDING._box_js_bool(result); - } finally { - nameRoot.release(); - valueRoot.release(); - } - } - function _mono_wasm_typed_array_copy_from(js_handle, pinned_array, begin, end, bytes_per_element, is_exception) { - BINDING.bindings_lazy_init(); - var js_obj = BINDING.mono_wasm_get_jsobj_from_js_handle(js_handle); - if (!js_obj) { - setValue(is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string("ERR08: Invalid JS object handle '" + js_handle + "'"); - } - var res = BINDING.typedarray_copy_from(js_obj, pinned_array, begin, end, bytes_per_element); - return BINDING._js_to_mono_obj(false, res); - } - function _mono_wasm_typed_array_copy_to(js_handle, pinned_array, begin, end, bytes_per_element, is_exception) { - BINDING.bindings_lazy_init(); - var js_obj = BINDING.mono_wasm_get_jsobj_from_js_handle(js_handle); - if (!js_obj) { - setValue(is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string("ERR07: Invalid JS object handle '" + js_handle + "'"); - } - var res = BINDING.typedarray_copy_to(js_obj, pinned_array, begin, end, bytes_per_element); - return BINDING._js_to_mono_obj(false, res); - } - function _mono_wasm_typed_array_from(pinned_array, begin, end, bytes_per_element, type, is_exception) { - BINDING.bindings_lazy_init(); - var res = BINDING.typed_array_from(pinned_array, begin, end, bytes_per_element, type); - return BINDING._js_to_mono_obj(true, res); - } - function _mono_wasm_typed_array_to_array(js_handle, is_exception) { - BINDING.bindings_lazy_init(); - var js_obj = BINDING.mono_wasm_get_jsobj_from_js_handle(js_handle); - if (!js_obj) { - setValue(is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string("ERR06: Invalid JS object handle '" + js_handle + "'"); - } - return BINDING.js_typed_array_to_array(js_obj, false); - } - function _schedule_background_exec() { - ++MONO.pump_count; - if (typeof globalThis.setTimeout === "function") {globalThis.setTimeout(MONO.pump_message, 0);} - } - function _setTempRet0(val) {setTempRet0(val);} - function __isLeapYear(year) {return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);} - function __arraySum(array, index) { - var sum = 0; - for (var i = 0; i <= index; sum += array[i++]) {} - return sum; - } - var __MONTH_DAYS_LEAP = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - var __MONTH_DAYS_REGULAR = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - function __addDays(date, days) { - var newDate = new Date(date.getTime()); - while (days > 0) { - var leap = __isLeapYear(newDate.getFullYear()); - var currentMonth = newDate.getMonth(); - var daysInCurrentMonth = (leap ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR)[currentMonth]; - if (days > daysInCurrentMonth - newDate.getDate()) { - days -= daysInCurrentMonth - newDate.getDate() + 1; - newDate.setDate(1); - if (currentMonth < 11) {newDate.setMonth(currentMonth + 1);} else { - newDate.setMonth(0); - newDate.setFullYear(newDate.getFullYear() + 1); - } - } else { - newDate.setDate(newDate.getDate() + days); - return newDate; - } - } - return newDate; - } - function _strftime(s, maxsize, format, tm) { - var tm_zone = HEAP32[tm + 40 >> 2]; - var date = { tm_sec: HEAP32[tm >> 2], tm_min: HEAP32[tm + 4 >> 2], tm_hour: HEAP32[tm + 8 >> 2], tm_mday: HEAP32[tm + 12 >> 2], tm_mon: HEAP32[tm + 16 >> 2], tm_year: HEAP32[tm + 20 >> 2], tm_wday: HEAP32[tm + 24 >> 2], tm_yday: HEAP32[tm + 28 >> 2], tm_isdst: HEAP32[tm + 32 >> 2], tm_gmtoff: HEAP32[tm + 36 >> 2], tm_zone: tm_zone ? UTF8ToString(tm_zone) : "" }; - var pattern = UTF8ToString(format); - var EXPANSION_RULES_1 = { "%c": "%a %b %d %H:%M:%S %Y", "%D": "%m/%d/%y", "%F": "%Y-%m-%d", "%h": "%b", "%r": "%I:%M:%S %p", "%R": "%H:%M", "%T": "%H:%M:%S", "%x": "%m/%d/%y", "%X": "%H:%M:%S", "%Ec": "%c", "%EC": "%C", "%Ex": "%m/%d/%y", "%EX": "%H:%M:%S", "%Ey": "%y", "%EY": "%Y", "%Od": "%d", "%Oe": "%e", "%OH": "%H", "%OI": "%I", "%Om": "%m", "%OM": "%M", "%OS": "%S", "%Ou": "%u", "%OU": "%U", "%OV": "%V", "%Ow": "%w", "%OW": "%W", "%Oy": "%y" }; - for (var rule in EXPANSION_RULES_1) {pattern = pattern.replace(new RegExp(rule, "g"), EXPANSION_RULES_1[rule]);} - var WEEKDAYS = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; - var MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; - function leadingSomething(value, digits, character) { - var str = typeof value === "number" ? value.toString() : value || ""; - while (str.length < digits) {str = character[0] + str;} - return str; - } - function leadingNulls(value, digits) {return leadingSomething(value, digits, "0");} - function compareByDay(date1, date2) { - function sgn(value) {return value < 0 ? -1 : value > 0 ? 1 : 0;} - var compare; - if ((compare = sgn(date1.getFullYear() - date2.getFullYear())) === 0) {if ((compare = sgn(date1.getMonth() - date2.getMonth())) === 0) {compare = sgn(date1.getDate() - date2.getDate());}} - return compare; - } - function getFirstWeekStartDate(janFourth) { - switch (janFourth.getDay()) { - case 0: - return new Date(janFourth.getFullYear() - 1, 11, 29); - case 1: - return janFourth; - case 2: - return new Date(janFourth.getFullYear(), 0, 3); - case 3: - return new Date(janFourth.getFullYear(), 0, 2); - case 4: - return new Date(janFourth.getFullYear(), 0, 1); - case 5: - return new Date(janFourth.getFullYear() - 1, 11, 31); - case 6: - return new Date(janFourth.getFullYear() - 1, 11, 30); - } - } - function getWeekBasedYear(date) { - var thisDate = __addDays(new Date(date.tm_year + 1900, 0, 1), date.tm_yday); - var janFourthThisYear = new Date(thisDate.getFullYear(), 0, 4); - var janFourthNextYear = new Date(thisDate.getFullYear() + 1, 0, 4); - var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear); - var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear); - if (compareByDay(firstWeekStartThisYear, thisDate) <= 0) {if (compareByDay(firstWeekStartNextYear, thisDate) <= 0) {return thisDate.getFullYear() + 1;} else {return thisDate.getFullYear();}} else {return thisDate.getFullYear() - 1;} - } - var EXPANSION_RULES_2 = { - "%a": function (date) {return WEEKDAYS[date.tm_wday].substring(0, 3);}, "%A": function (date) {return WEEKDAYS[date.tm_wday];}, "%b": function (date) {return MONTHS[date.tm_mon].substring(0, 3);}, "%B": function (date) {return MONTHS[date.tm_mon];}, "%C": function (date) { - var year = date.tm_year + 1900; - return leadingNulls(year / 100 | 0, 2); - }, "%d": function (date) {return leadingNulls(date.tm_mday, 2);}, "%e": function (date) {return leadingSomething(date.tm_mday, 2, " ");}, "%g": function (date) {return getWeekBasedYear(date).toString().substring(2);}, "%G": function (date) {return getWeekBasedYear(date);}, "%H": function (date) {return leadingNulls(date.tm_hour, 2);}, "%I": function (date) { - var twelveHour = date.tm_hour; - if (twelveHour == 0) twelveHour = 12; else if (twelveHour > 12) twelveHour -= 12; - return leadingNulls(twelveHour, 2); - }, "%j": function (date) {return leadingNulls(date.tm_mday + __arraySum(__isLeapYear(date.tm_year + 1900) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, date.tm_mon - 1), 3);}, "%m": function (date) {return leadingNulls(date.tm_mon + 1, 2);}, "%M": function (date) {return leadingNulls(date.tm_min, 2);}, "%n": function () {return "\n";}, "%p": function (date) {if (date.tm_hour >= 0 && date.tm_hour < 12) {return "AM";} else {return "PM";}}, "%S": function (date) {return leadingNulls(date.tm_sec, 2);}, "%t": function () {return "\t";}, "%u": function (date) {return date.tm_wday || 7;}, "%U": function (date) { - var janFirst = new Date(date.tm_year + 1900, 0, 1); - var firstSunday = janFirst.getDay() === 0 ? janFirst : __addDays(janFirst, 7 - janFirst.getDay()); - var endDate = new Date(date.tm_year + 1900, date.tm_mon, date.tm_mday); - if (compareByDay(firstSunday, endDate) < 0) { - var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth() - 1) - 31; - var firstSundayUntilEndJanuary = 31 - firstSunday.getDate(); - var days = firstSundayUntilEndJanuary + februaryFirstUntilEndMonth + endDate.getDate(); - return leadingNulls(Math.ceil(days / 7), 2); - } - return compareByDay(firstSunday, janFirst) === 0 ? "01" : "00"; - }, "%V": function (date) { - var janFourthThisYear = new Date(date.tm_year + 1900, 0, 4); - var janFourthNextYear = new Date(date.tm_year + 1901, 0, 4); - var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear); - var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear); - var endDate = __addDays(new Date(date.tm_year + 1900, 0, 1), date.tm_yday); - if (compareByDay(endDate, firstWeekStartThisYear) < 0) {return "53";} - if (compareByDay(firstWeekStartNextYear, endDate) <= 0) {return "01";} - var daysDifference; - if (firstWeekStartThisYear.getFullYear() < date.tm_year + 1900) {daysDifference = date.tm_yday + 32 - firstWeekStartThisYear.getDate();} else {daysDifference = date.tm_yday + 1 - firstWeekStartThisYear.getDate();} - return leadingNulls(Math.ceil(daysDifference / 7), 2); - }, "%w": function (date) {return date.tm_wday;}, "%W": function (date) { - var janFirst = new Date(date.tm_year, 0, 1); - var firstMonday = janFirst.getDay() === 1 ? janFirst : __addDays(janFirst, janFirst.getDay() === 0 ? 1 : 7 - janFirst.getDay() + 1); - var endDate = new Date(date.tm_year + 1900, date.tm_mon, date.tm_mday); - if (compareByDay(firstMonday, endDate) < 0) { - var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth() - 1) - 31; - var firstMondayUntilEndJanuary = 31 - firstMonday.getDate(); - var days = firstMondayUntilEndJanuary + februaryFirstUntilEndMonth + endDate.getDate(); - return leadingNulls(Math.ceil(days / 7), 2); - } - return compareByDay(firstMonday, janFirst) === 0 ? "01" : "00"; - }, "%y": function (date) {return (date.tm_year + 1900).toString().substring(2);}, "%Y": function (date) {return date.tm_year + 1900;}, "%z": function (date) { - var off = date.tm_gmtoff; - var ahead = off >= 0; - off = Math.abs(off) / 60; - off = off / 60 * 100 + off % 60; - return (ahead ? "+" : "-") + String("0000" + off).slice(-4); - }, "%Z": function (date) {return date.tm_zone;}, "%%": function () {return "%";} - }; - for (var rule in EXPANSION_RULES_2) {if (pattern.includes(rule)) {pattern = pattern.replace(new RegExp(rule, "g"), EXPANSION_RULES_2[rule](date));}} - var bytes = intArrayFromString(pattern, false); - if (bytes.length > maxsize) {return 0;} - writeArrayToMemory(bytes, s); - return bytes.length - 1; - } - function _time(ptr) { - var ret = Date.now() / 1e3 | 0; - if (ptr) {HEAP32[ptr >> 2] = ret;} - return ret; - } - var FSNode = function (parent, name, mode, rdev) { - if (!parent) {parent = this;} - this.parent = parent; - this.mount = parent.mount; - this.mounted = null; - this.id = FS.nextInode++; - this.name = name; - this.mode = mode; - this.node_ops = {}; - this.stream_ops = {}; - this.rdev = rdev; - }; - var readMode = 292 | 73; - var writeMode = 146; - Object.defineProperties(FSNode.prototype, { read: { get: function () {return (this.mode & readMode) === readMode;}, set: function (val) {val ? this.mode |= readMode : this.mode &= ~readMode;} }, write: { get: function () {return (this.mode & writeMode) === writeMode;}, set: function (val) {val ? this.mode |= writeMode : this.mode &= ~writeMode;} }, isFolder: { get: function () {return FS.isDir(this.mode);} }, isDevice: { get: function () {return FS.isChrdev(this.mode);} } }); - FS.FSNode = FSNode; - FS.staticInit(); - Module["FS_createPath"] = FS.createPath; - Module["FS_createDataFile"] = FS.createDataFile; - Module["FS_createPath"] = FS.createPath; - Module["FS_createDataFile"] = FS.createDataFile; - Module["FS_createPreloadedFile"] = FS.createPreloadedFile; - Module["FS_createLazyFile"] = FS.createLazyFile; - Module["FS_createDevice"] = FS.createDevice; - Module["FS_unlink"] = FS.unlink; - MONO.export_functions(Module); - BINDING.export_functions(Module); - var ASSERTIONS = false; - function intArrayFromString(stringy, dontAddNull, length) { - var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1; - var u8array = new Array(len); - var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); - if (dontAddNull) u8array.length = numBytesWritten; - return u8array; - } - var asmLibraryArg = { - "__assert_fail": ___assert_fail, "__clock_gettime": ___clock_gettime, "__cxa_allocate_exception": ___cxa_allocate_exception, "__cxa_begin_catch": ___cxa_begin_catch, "__cxa_end_catch": ___cxa_end_catch, "__cxa_find_matching_catch_3": ___cxa_find_matching_catch_3, "__cxa_throw": ___cxa_throw, "__resumeException": ___resumeException, "__sys_access": ___sys_access, "__sys_chdir": ___sys_chdir, "__sys_chmod": ___sys_chmod, "__sys_connect": ___sys_connect, "__sys_fadvise64_64": ___sys_fadvise64_64, "__sys_fchmod": ___sys_fchmod, "__sys_fcntl64": ___sys_fcntl64, "__sys_fstat64": ___sys_fstat64, "__sys_fstatfs64": ___sys_fstatfs64, "__sys_ftruncate64": ___sys_ftruncate64, "__sys_getcwd": ___sys_getcwd, "__sys_getdents64": ___sys_getdents64, "__sys_getpid": ___sys_getpid, "__sys_getrusage": ___sys_getrusage, "__sys_ioctl": ___sys_ioctl, "__sys_link": ___sys_link, "__sys_lstat64": ___sys_lstat64, "__sys_madvise1": ___sys_madvise1, "__sys_mkdir": ___sys_mkdir, "__sys_mmap2": ___sys_mmap2, "__sys_msync": ___sys_msync, "__sys_munmap": ___sys_munmap, "__sys_open": ___sys_open, "__sys_readlink": ___sys_readlink, "__sys_recvfrom": ___sys_recvfrom, "__sys_rename": ___sys_rename, "__sys_rmdir": ___sys_rmdir, "__sys_sendto": ___sys_sendto, "__sys_setsockopt": ___sys_setsockopt, "__sys_shutdown": ___sys_shutdown, "__sys_socket": ___sys_socket, "__sys_stat64": ___sys_stat64, "__sys_symlink": ___sys_symlink, "__sys_unlink": ___sys_unlink, "__sys_utimensat": ___sys_utimensat, "abort": _abort, "clock_getres": _clock_getres, "clock_gettime": _clock_gettime, "compile_function": compile_function, "difftime": _difftime, "dotnet_browser_entropy": _dotnet_browser_entropy, "emscripten_asm_const_int": _emscripten_asm_const_int, "emscripten_get_heap_max": _emscripten_get_heap_max, "emscripten_memcpy_big": _emscripten_memcpy_big, "emscripten_resize_heap": _emscripten_resize_heap, "emscripten_thread_sleep": _emscripten_thread_sleep, "environ_get": _environ_get, "environ_sizes_get": _environ_sizes_get, "exit": _exit, "fd_close": _fd_close, "fd_fdstat_get": _fd_fdstat_get, "fd_pread": _fd_pread, "fd_pwrite": _fd_pwrite, "fd_read": _fd_read, "fd_seek": _fd_seek, "fd_sync": _fd_sync, "fd_write": _fd_write, "flock": _flock, "gai_strerror": _gai_strerror, "getTempRet0": _getTempRet0, "gettimeofday": _gettimeofday, "gmtime_r": _gmtime_r, "invoke_vi": invoke_vi, "llvm_eh_typeid_for": _llvm_eh_typeid_for, "localtime_r": _localtime_r, "mono_set_timeout": _mono_set_timeout, "mono_wasm_add_event_listener": _mono_wasm_add_event_listener, "mono_wasm_asm_loaded": _mono_wasm_asm_loaded, "mono_wasm_create_cs_owned_object": _mono_wasm_create_cs_owned_object, "mono_wasm_fire_debugger_agent_message": _mono_wasm_fire_debugger_agent_message, "mono_wasm_get_by_index": _mono_wasm_get_by_index, "mono_wasm_get_global_object": _mono_wasm_get_global_object, "mono_wasm_get_object_property": _mono_wasm_get_object_property, "mono_wasm_invoke_js_blazor": _mono_wasm_invoke_js_blazor, "mono_wasm_invoke_js_marshalled": _mono_wasm_invoke_js_marshalled, "mono_wasm_invoke_js_unmarshalled": _mono_wasm_invoke_js_unmarshalled, "mono_wasm_invoke_js_with_args": _mono_wasm_invoke_js_with_args, "mono_wasm_release_cs_owned_object": _mono_wasm_release_cs_owned_object, "mono_wasm_remove_event_listener": _mono_wasm_remove_event_listener, "mono_wasm_set_by_index": _mono_wasm_set_by_index, "mono_wasm_set_object_property": _mono_wasm_set_object_property, "mono_wasm_typed_array_copy_from": _mono_wasm_typed_array_copy_from, "mono_wasm_typed_array_copy_to": _mono_wasm_typed_array_copy_to, "mono_wasm_typed_array_from": _mono_wasm_typed_array_from, "mono_wasm_typed_array_to_array": _mono_wasm_typed_array_to_array, "schedule_background_exec": _schedule_background_exec, "setTempRet0": _setTempRet0, "strftime": _strftime, "time": _time, "tzset": _tzset - }; - var asm = createWasm(); - var ___wasm_call_ctors = Module["___wasm_call_ctors"] = function () {return (___wasm_call_ctors = Module["___wasm_call_ctors"] = Module["asm"]["__wasm_call_ctors"]).apply(null, arguments);}; - var _mono_wasm_register_root = Module["_mono_wasm_register_root"] = function () {return (_mono_wasm_register_root = Module["_mono_wasm_register_root"] = Module["asm"]["mono_wasm_register_root"]).apply(null, arguments);}; - var _mono_wasm_deregister_root = Module["_mono_wasm_deregister_root"] = function () {return (_mono_wasm_deregister_root = Module["_mono_wasm_deregister_root"] = Module["asm"]["mono_wasm_deregister_root"]).apply(null, arguments);}; - var _mono_wasm_add_assembly = Module["_mono_wasm_add_assembly"] = function () {return (_mono_wasm_add_assembly = Module["_mono_wasm_add_assembly"] = Module["asm"]["mono_wasm_add_assembly"]).apply(null, arguments);}; - var _mono_wasm_add_satellite_assembly = Module["_mono_wasm_add_satellite_assembly"] = function () {return (_mono_wasm_add_satellite_assembly = Module["_mono_wasm_add_satellite_assembly"] = Module["asm"]["mono_wasm_add_satellite_assembly"]).apply(null, arguments);}; - var _mono_wasm_setenv = Module["_mono_wasm_setenv"] = function () {return (_mono_wasm_setenv = Module["_mono_wasm_setenv"] = Module["asm"]["mono_wasm_setenv"]).apply(null, arguments);}; - var _free = Module["_free"] = function () {return (_free = Module["_free"] = Module["asm"]["free"]).apply(null, arguments);}; - var _mono_wasm_register_bundled_satellite_assemblies = Module["_mono_wasm_register_bundled_satellite_assemblies"] = function () {return (_mono_wasm_register_bundled_satellite_assemblies = Module["_mono_wasm_register_bundled_satellite_assemblies"] = Module["asm"]["mono_wasm_register_bundled_satellite_assemblies"]).apply(null, arguments);}; - var _mono_wasm_load_runtime = Module["_mono_wasm_load_runtime"] = function () {return (_mono_wasm_load_runtime = Module["_mono_wasm_load_runtime"] = Module["asm"]["mono_wasm_load_runtime"]).apply(null, arguments);}; - var _malloc = Module["_malloc"] = function () {return (_malloc = Module["_malloc"] = Module["asm"]["malloc"]).apply(null, arguments);}; - var _mono_wasm_assembly_load = Module["_mono_wasm_assembly_load"] = function () {return (_mono_wasm_assembly_load = Module["_mono_wasm_assembly_load"] = Module["asm"]["mono_wasm_assembly_load"]).apply(null, arguments);}; - var _mono_wasm_find_corlib_class = Module["_mono_wasm_find_corlib_class"] = function () {return (_mono_wasm_find_corlib_class = Module["_mono_wasm_find_corlib_class"] = Module["asm"]["mono_wasm_find_corlib_class"]).apply(null, arguments);}; - var _mono_wasm_assembly_find_class = Module["_mono_wasm_assembly_find_class"] = function () {return (_mono_wasm_assembly_find_class = Module["_mono_wasm_assembly_find_class"] = Module["asm"]["mono_wasm_assembly_find_class"]).apply(null, arguments);}; - var _mono_wasm_assembly_find_method = Module["_mono_wasm_assembly_find_method"] = function () {return (_mono_wasm_assembly_find_method = Module["_mono_wasm_assembly_find_method"] = Module["asm"]["mono_wasm_assembly_find_method"]).apply(null, arguments);}; - var _mono_wasm_get_delegate_invoke = Module["_mono_wasm_get_delegate_invoke"] = function () {return (_mono_wasm_get_delegate_invoke = Module["_mono_wasm_get_delegate_invoke"] = Module["asm"]["mono_wasm_get_delegate_invoke"]).apply(null, arguments);}; - var _mono_wasm_box_primitive = Module["_mono_wasm_box_primitive"] = function () {return (_mono_wasm_box_primitive = Module["_mono_wasm_box_primitive"] = Module["asm"]["mono_wasm_box_primitive"]).apply(null, arguments);}; - var _mono_wasm_invoke_method = Module["_mono_wasm_invoke_method"] = function () {return (_mono_wasm_invoke_method = Module["_mono_wasm_invoke_method"] = Module["asm"]["mono_wasm_invoke_method"]).apply(null, arguments);}; - var _mono_wasm_assembly_get_entry_point = Module["_mono_wasm_assembly_get_entry_point"] = function () {return (_mono_wasm_assembly_get_entry_point = Module["_mono_wasm_assembly_get_entry_point"] = Module["asm"]["mono_wasm_assembly_get_entry_point"]).apply(null, arguments);}; - var _mono_wasm_string_get_utf8 = Module["_mono_wasm_string_get_utf8"] = function () {return (_mono_wasm_string_get_utf8 = Module["_mono_wasm_string_get_utf8"] = Module["asm"]["mono_wasm_string_get_utf8"]).apply(null, arguments);}; - var _mono_wasm_string_convert = Module["_mono_wasm_string_convert"] = function () {return (_mono_wasm_string_convert = Module["_mono_wasm_string_convert"] = Module["asm"]["mono_wasm_string_convert"]).apply(null, arguments);}; - var _mono_wasm_string_from_js = Module["_mono_wasm_string_from_js"] = function () {return (_mono_wasm_string_from_js = Module["_mono_wasm_string_from_js"] = Module["asm"]["mono_wasm_string_from_js"]).apply(null, arguments);}; - var _mono_wasm_string_from_utf16 = Module["_mono_wasm_string_from_utf16"] = function () {return (_mono_wasm_string_from_utf16 = Module["_mono_wasm_string_from_utf16"] = Module["asm"]["mono_wasm_string_from_utf16"]).apply(null, arguments);}; - var _mono_wasm_get_obj_type = Module["_mono_wasm_get_obj_type"] = function () {return (_mono_wasm_get_obj_type = Module["_mono_wasm_get_obj_type"] = Module["asm"]["mono_wasm_get_obj_type"]).apply(null, arguments);}; - var _mono_wasm_try_unbox_primitive_and_get_type = Module["_mono_wasm_try_unbox_primitive_and_get_type"] = function () {return (_mono_wasm_try_unbox_primitive_and_get_type = Module["_mono_wasm_try_unbox_primitive_and_get_type"] = Module["asm"]["mono_wasm_try_unbox_primitive_and_get_type"]).apply(null, arguments);}; - var _mono_unbox_int = Module["_mono_unbox_int"] = function () {return (_mono_unbox_int = Module["_mono_unbox_int"] = Module["asm"]["mono_unbox_int"]).apply(null, arguments);}; - var _mono_wasm_array_length = Module["_mono_wasm_array_length"] = function () {return (_mono_wasm_array_length = Module["_mono_wasm_array_length"] = Module["asm"]["mono_wasm_array_length"]).apply(null, arguments);}; - var _mono_wasm_array_get = Module["_mono_wasm_array_get"] = function () {return (_mono_wasm_array_get = Module["_mono_wasm_array_get"] = Module["asm"]["mono_wasm_array_get"]).apply(null, arguments);}; - var _mono_wasm_obj_array_new = Module["_mono_wasm_obj_array_new"] = function () {return (_mono_wasm_obj_array_new = Module["_mono_wasm_obj_array_new"] = Module["asm"]["mono_wasm_obj_array_new"]).apply(null, arguments);}; - var _mono_wasm_obj_array_set = Module["_mono_wasm_obj_array_set"] = function () {return (_mono_wasm_obj_array_set = Module["_mono_wasm_obj_array_set"] = Module["asm"]["mono_wasm_obj_array_set"]).apply(null, arguments);}; - var _mono_wasm_string_array_new = Module["_mono_wasm_string_array_new"] = function () {return (_mono_wasm_string_array_new = Module["_mono_wasm_string_array_new"] = Module["asm"]["mono_wasm_string_array_new"]).apply(null, arguments);}; - var _mono_wasm_exec_regression = Module["_mono_wasm_exec_regression"] = function () {return (_mono_wasm_exec_regression = Module["_mono_wasm_exec_regression"] = Module["asm"]["mono_wasm_exec_regression"]).apply(null, arguments);}; - var _mono_wasm_exit = Module["_mono_wasm_exit"] = function () {return (_mono_wasm_exit = Module["_mono_wasm_exit"] = Module["asm"]["mono_wasm_exit"]).apply(null, arguments);}; - var _mono_wasm_set_main_args = Module["_mono_wasm_set_main_args"] = function () {return (_mono_wasm_set_main_args = Module["_mono_wasm_set_main_args"] = Module["asm"]["mono_wasm_set_main_args"]).apply(null, arguments);}; - var _mono_wasm_strdup = Module["_mono_wasm_strdup"] = function () {return (_mono_wasm_strdup = Module["_mono_wasm_strdup"] = Module["asm"]["mono_wasm_strdup"]).apply(null, arguments);}; - var _mono_wasm_parse_runtime_options = Module["_mono_wasm_parse_runtime_options"] = function () {return (_mono_wasm_parse_runtime_options = Module["_mono_wasm_parse_runtime_options"] = Module["asm"]["mono_wasm_parse_runtime_options"]).apply(null, arguments);}; - var _mono_wasm_enable_on_demand_gc = Module["_mono_wasm_enable_on_demand_gc"] = function () {return (_mono_wasm_enable_on_demand_gc = Module["_mono_wasm_enable_on_demand_gc"] = Module["asm"]["mono_wasm_enable_on_demand_gc"]).apply(null, arguments);}; - var _mono_wasm_intern_string = Module["_mono_wasm_intern_string"] = function () {return (_mono_wasm_intern_string = Module["_mono_wasm_intern_string"] = Module["asm"]["mono_wasm_intern_string"]).apply(null, arguments);}; - var _mono_wasm_string_get_data = Module["_mono_wasm_string_get_data"] = function () {return (_mono_wasm_string_get_data = Module["_mono_wasm_string_get_data"] = Module["asm"]["mono_wasm_string_get_data"]).apply(null, arguments);}; - var _mono_wasm_typed_array_new = Module["_mono_wasm_typed_array_new"] = function () {return (_mono_wasm_typed_array_new = Module["_mono_wasm_typed_array_new"] = Module["asm"]["mono_wasm_typed_array_new"]).apply(null, arguments);}; - var _mono_wasm_unbox_enum = Module["_mono_wasm_unbox_enum"] = function () {return (_mono_wasm_unbox_enum = Module["_mono_wasm_unbox_enum"] = Module["asm"]["mono_wasm_unbox_enum"]).apply(null, arguments);}; - var _memset = Module["_memset"] = function () {return (_memset = Module["_memset"] = Module["asm"]["memset"]).apply(null, arguments);}; - var ___errno_location = Module["___errno_location"] = function () {return (___errno_location = Module["___errno_location"] = Module["asm"]["__errno_location"]).apply(null, arguments);}; - var _putchar = Module["_putchar"] = function () {return (_putchar = Module["_putchar"] = Module["asm"]["putchar"]).apply(null, arguments);}; - var _mono_background_exec = Module["_mono_background_exec"] = function () {return (_mono_background_exec = Module["_mono_background_exec"] = Module["asm"]["mono_background_exec"]).apply(null, arguments);}; - var _mono_wasm_get_icudt_name = Module["_mono_wasm_get_icudt_name"] = function () {return (_mono_wasm_get_icudt_name = Module["_mono_wasm_get_icudt_name"] = Module["asm"]["mono_wasm_get_icudt_name"]).apply(null, arguments);}; - var _mono_wasm_load_icu_data = Module["_mono_wasm_load_icu_data"] = function () {return (_mono_wasm_load_icu_data = Module["_mono_wasm_load_icu_data"] = Module["asm"]["mono_wasm_load_icu_data"]).apply(null, arguments);}; - var _mono_print_method_from_ip = Module["_mono_print_method_from_ip"] = function () {return (_mono_print_method_from_ip = Module["_mono_print_method_from_ip"] = Module["asm"]["mono_print_method_from_ip"]).apply(null, arguments);}; - var _mono_set_timeout_exec = Module["_mono_set_timeout_exec"] = function () {return (_mono_set_timeout_exec = Module["_mono_set_timeout_exec"] = Module["asm"]["mono_set_timeout_exec"]).apply(null, arguments);}; - var _ntohs = Module["_ntohs"] = function () {return (_ntohs = Module["_ntohs"] = Module["asm"]["ntohs"]).apply(null, arguments);}; - var _htons = Module["_htons"] = function () {return (_htons = Module["_htons"] = Module["asm"]["htons"]).apply(null, arguments);}; - var _mono_wasm_set_is_debugger_attached = Module["_mono_wasm_set_is_debugger_attached"] = function () {return (_mono_wasm_set_is_debugger_attached = Module["_mono_wasm_set_is_debugger_attached"] = Module["asm"]["mono_wasm_set_is_debugger_attached"]).apply(null, arguments);}; - var _mono_wasm_send_dbg_command_with_parms = Module["_mono_wasm_send_dbg_command_with_parms"] = function () {return (_mono_wasm_send_dbg_command_with_parms = Module["_mono_wasm_send_dbg_command_with_parms"] = Module["asm"]["mono_wasm_send_dbg_command_with_parms"]).apply(null, arguments);}; - var _mono_wasm_send_dbg_command = Module["_mono_wasm_send_dbg_command"] = function () {return (_mono_wasm_send_dbg_command = Module["_mono_wasm_send_dbg_command"] = Module["asm"]["mono_wasm_send_dbg_command"]).apply(null, arguments);}; - var _emscripten_main_thread_process_queued_calls = Module["_emscripten_main_thread_process_queued_calls"] = function () {return (_emscripten_main_thread_process_queued_calls = Module["_emscripten_main_thread_process_queued_calls"] = Module["asm"]["emscripten_main_thread_process_queued_calls"]).apply(null, arguments);}; - var _htonl = Module["_htonl"] = function () {return (_htonl = Module["_htonl"] = Module["asm"]["htonl"]).apply(null, arguments);}; - var __get_tzname = Module["__get_tzname"] = function () {return (__get_tzname = Module["__get_tzname"] = Module["asm"]["_get_tzname"]).apply(null, arguments);}; - var __get_daylight = Module["__get_daylight"] = function () {return (__get_daylight = Module["__get_daylight"] = Module["asm"]["_get_daylight"]).apply(null, arguments);}; - var __get_timezone = Module["__get_timezone"] = function () {return (__get_timezone = Module["__get_timezone"] = Module["asm"]["_get_timezone"]).apply(null, arguments);}; - var stackSave = Module["stackSave"] = function () {return (stackSave = Module["stackSave"] = Module["asm"]["stackSave"]).apply(null, arguments);}; - var stackRestore = Module["stackRestore"] = function () {return (stackRestore = Module["stackRestore"] = Module["asm"]["stackRestore"]).apply(null, arguments);}; - var stackAlloc = Module["stackAlloc"] = function () {return (stackAlloc = Module["stackAlloc"] = Module["asm"]["stackAlloc"]).apply(null, arguments);}; - var _setThrew = Module["_setThrew"] = function () {return (_setThrew = Module["_setThrew"] = Module["asm"]["setThrew"]).apply(null, arguments);}; - var ___cxa_can_catch = Module["___cxa_can_catch"] = function () {return (___cxa_can_catch = Module["___cxa_can_catch"] = Module["asm"]["__cxa_can_catch"]).apply(null, arguments);}; - var ___cxa_is_pointer_type = Module["___cxa_is_pointer_type"] = function () {return (___cxa_is_pointer_type = Module["___cxa_is_pointer_type"] = Module["asm"]["__cxa_is_pointer_type"]).apply(null, arguments);}; - var _memalign = Module["_memalign"] = function () {return (_memalign = Module["_memalign"] = Module["asm"]["memalign"]).apply(null, arguments);}; - var dynCall_iijj = Module["dynCall_iijj"] = function () {return (dynCall_iijj = Module["dynCall_iijj"] = Module["asm"]["dynCall_iijj"]).apply(null, arguments);}; - var dynCall_iij = Module["dynCall_iij"] = function () {return (dynCall_iij = Module["dynCall_iij"] = Module["asm"]["dynCall_iij"]).apply(null, arguments);}; - var dynCall_ji = Module["dynCall_ji"] = function () {return (dynCall_ji = Module["dynCall_ji"] = Module["asm"]["dynCall_ji"]).apply(null, arguments);}; - var dynCall_j = Module["dynCall_j"] = function () {return (dynCall_j = Module["dynCall_j"] = Module["asm"]["dynCall_j"]).apply(null, arguments);}; - var dynCall_iijji = Module["dynCall_iijji"] = function () {return (dynCall_iijji = Module["dynCall_iijji"] = Module["asm"]["dynCall_iijji"]).apply(null, arguments);}; - var dynCall_jiji = Module["dynCall_jiji"] = function () {return (dynCall_jiji = Module["dynCall_jiji"] = Module["asm"]["dynCall_jiji"]).apply(null, arguments);}; - var dynCall_iiji = Module["dynCall_iiji"] = function () {return (dynCall_iiji = Module["dynCall_iiji"] = Module["asm"]["dynCall_iiji"]).apply(null, arguments);}; - var dynCall_iijiiij = Module["dynCall_iijiiij"] = function () {return (dynCall_iijiiij = Module["dynCall_iijiiij"] = Module["asm"]["dynCall_iijiiij"]).apply(null, arguments);}; - var dynCall_iiiij = Module["dynCall_iiiij"] = function () {return (dynCall_iiiij = Module["dynCall_iiiij"] = Module["asm"]["dynCall_iiiij"]).apply(null, arguments);}; - var dynCall_jiiij = Module["dynCall_jiiij"] = function () {return (dynCall_jiiij = Module["dynCall_jiiij"] = Module["asm"]["dynCall_jiiij"]).apply(null, arguments);}; - var dynCall_viiijjii = Module["dynCall_viiijjii"] = function () {return (dynCall_viiijjii = Module["dynCall_viiijjii"] = Module["asm"]["dynCall_viiijjii"]).apply(null, arguments);}; - var dynCall_jd = Module["dynCall_jd"] = function () {return (dynCall_jd = Module["dynCall_jd"] = Module["asm"]["dynCall_jd"]).apply(null, arguments);}; - var dynCall_jf = Module["dynCall_jf"] = function () {return (dynCall_jf = Module["dynCall_jf"] = Module["asm"]["dynCall_jf"]).apply(null, arguments);}; - var dynCall_vijj = Module["dynCall_vijj"] = function () {return (dynCall_vijj = Module["dynCall_vijj"] = Module["asm"]["dynCall_vijj"]).apply(null, arguments);}; - var dynCall_iiijiiii = Module["dynCall_iiijiiii"] = function () {return (dynCall_iiijiiii = Module["dynCall_iiijiiii"] = Module["asm"]["dynCall_iiijiiii"]).apply(null, arguments);}; - var dynCall_vj = Module["dynCall_vj"] = function () {return (dynCall_vj = Module["dynCall_vj"] = Module["asm"]["dynCall_vj"]).apply(null, arguments);}; - var dynCall_jiiiii = Module["dynCall_jiiiii"] = function () {return (dynCall_jiiiii = Module["dynCall_jiiiii"] = Module["asm"]["dynCall_jiiiii"]).apply(null, arguments);}; - var dynCall_iji = Module["dynCall_iji"] = function () {return (dynCall_iji = Module["dynCall_iji"] = Module["asm"]["dynCall_iji"]).apply(null, arguments);}; - var dynCall_ij = Module["dynCall_ij"] = function () {return (dynCall_ij = Module["dynCall_ij"] = Module["asm"]["dynCall_ij"]).apply(null, arguments);}; - var dynCall_jij = Module["dynCall_jij"] = function () {return (dynCall_jij = Module["dynCall_jij"] = Module["asm"]["dynCall_jij"]).apply(null, arguments);}; - var dynCall_jijj = Module["dynCall_jijj"] = function () {return (dynCall_jijj = Module["dynCall_jijj"] = Module["asm"]["dynCall_jijj"]).apply(null, arguments);}; - var dynCall_iijjiii = Module["dynCall_iijjiii"] = function () {return (dynCall_iijjiii = Module["dynCall_iijjiii"] = Module["asm"]["dynCall_iijjiii"]).apply(null, arguments);}; - var dynCall_vijjjii = Module["dynCall_vijjjii"] = function () {return (dynCall_vijjjii = Module["dynCall_vijjjii"] = Module["asm"]["dynCall_vijjjii"]).apply(null, arguments);}; - var dynCall_iijii = Module["dynCall_iijii"] = function () {return (dynCall_iijii = Module["dynCall_iijii"] = Module["asm"]["dynCall_iijii"]).apply(null, arguments);}; - var dynCall_iijiii = Module["dynCall_iijiii"] = function () {return (dynCall_iijiii = Module["dynCall_iijiii"] = Module["asm"]["dynCall_iijiii"]).apply(null, arguments);}; - var dynCall_vijiiii = Module["dynCall_vijiiii"] = function () {return (dynCall_vijiiii = Module["dynCall_vijiiii"] = Module["asm"]["dynCall_vijiiii"]).apply(null, arguments);}; - var dynCall_iijiiii = Module["dynCall_iijiiii"] = function () {return (dynCall_iijiiii = Module["dynCall_iijiiii"] = Module["asm"]["dynCall_iijiiii"]).apply(null, arguments);}; - var dynCall_vij = Module["dynCall_vij"] = function () {return (dynCall_vij = Module["dynCall_vij"] = Module["asm"]["dynCall_vij"]).apply(null, arguments);}; - var dynCall_jii = Module["dynCall_jii"] = function () {return (dynCall_jii = Module["dynCall_jii"] = Module["asm"]["dynCall_jii"]).apply(null, arguments);}; - var dynCall_jiiiiiiiii = Module["dynCall_jiiiiiiiii"] = function () {return (dynCall_jiiiiiiiii = Module["dynCall_jiiiiiiiii"] = Module["asm"]["dynCall_jiiiiiiiii"]).apply(null, arguments);}; - var dynCall_jj = Module["dynCall_jj"] = function () {return (dynCall_jj = Module["dynCall_jj"] = Module["asm"]["dynCall_jj"]).apply(null, arguments);}; - var dynCall_iiijiiiii = Module["dynCall_iiijiiiii"] = function () {return (dynCall_iiijiiiii = Module["dynCall_iiijiiiii"] = Module["asm"]["dynCall_iiijiiiii"]).apply(null, arguments);}; - function invoke_vi(index, a1) { - var sp = stackSave(); - try {wasmTable.get(index)(a1);} catch (e) { - stackRestore(sp); - if (e !== e + 0 && e !== "longjmp") throw e; - _setThrew(1, 0); - } - } - Module["ccall"] = ccall; - Module["cwrap"] = cwrap; - Module["setValue"] = setValue; - Module["getValue"] = getValue; - Module["UTF8ArrayToString"] = UTF8ArrayToString; - Module["UTF8ToString"] = UTF8ToString; - Module["addRunDependency"] = addRunDependency; - Module["removeRunDependency"] = removeRunDependency; - Module["FS_createPath"] = FS.createPath; - Module["FS_createDataFile"] = FS.createDataFile; - Module["FS_createPreloadedFile"] = FS.createPreloadedFile; - Module["FS_createLazyFile"] = FS.createLazyFile; - Module["FS_createDevice"] = FS.createDevice; - Module["FS_unlink"] = FS.unlink; - Module["addFunction"] = addFunction; - Module["MONO"] = MONO; - Module["BINDING"] = BINDING; - var calledRun; - function ExitStatus(status) { - this.name = "ExitStatus"; - this.message = "Program terminated with exit(" + status + ")"; - this.status = status; - } - dependenciesFulfilled = function runCaller() { - if (!calledRun) run(); - if (!calledRun) dependenciesFulfilled = runCaller; - }; - function run(args) { - args = args || arguments_; - if (runDependencies > 0) {return;} - preRun(); - if (runDependencies > 0) {return;} - function doRun() { - if (calledRun) return; - calledRun = true; - Module["calledRun"] = true; - if (ABORT) return; - initRuntime(); - readyPromiseResolve(Module); - if (Module["onRuntimeInitialized"]) Module["onRuntimeInitialized"](); - postRun(); - } - if (Module["setStatus"]) { - Module["setStatus"]("Running..."); - setTimeout(function () { - setTimeout(function () {Module["setStatus"]("");}, 1); - doRun(); - }, 1); - } else {doRun();} - } - Module["run"] = run; - function exit(status, implicit) { - EXITSTATUS = status; - if (implicit && keepRuntimeAlive() && status === 0) {return;} - if (keepRuntimeAlive()) {} else { - exitRuntime(); - if (Module["onExit"]) Module["onExit"](status); - ABORT = true; - } - quit_(status, new ExitStatus(status)); - } - if (Module["preInit"]) { - if (typeof Module["preInit"] == "function") Module["preInit"] = [Module["preInit"]]; - while (Module["preInit"].length > 0) {Module["preInit"].pop()();} - } - run(); - - return Module.ready; - } - ); -})(); -if (typeof exports === "object" && typeof module === "object") - module.exports = Module; -else if (typeof define === "function" && define["amd"]) - define([], function () { return Module; }); -else if (typeof exports === "object") - exports["Module"] = Module; diff --git a/JavaScript/native/dotnet.wasm b/JavaScript/native/dotnet.wasm deleted file mode 100644 index 3d23d89b02dec7507b86abb8c9e7ae883d071ac4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2475713 zcmcG%cR*W7nlF0Jk#x>cKo&L#BqS`!U_cg0$Yf(5FrMAL`}XeJoqO-R-F=UC+qjL} zX>7V@dT#d^=WJt~Z~*6=1I{_;oO8|@=lFhK9bxDR|Gg(!sybC)ef8z~s#J7y?R$6Q zIgaCRSl;sA@O}6`-w1u^oA1L>jr&H^hdooleWS%U^|F%tMn{kI%+aUrnfpd$?bIQu zHL3<1xo`NN`Jcab;IR+?=WqC5_+J3=GlA1IsIVcd0W~>@hg$V@^*XF7@K+Fq@@EkK zGXV&F{>(VRB$_^drWOuWp$`$k|Cs^wK^0(Vu18H{s25lm~3_F!nA@CqU>ij^4H@(nn`1%kWT!&5V#te0kar|uvfsD6EdQL?8X1N1=Cs?9_Y9^jQhMu{*q5H(-BRFUJ6 z!H_OhAPR&*C>Aw|N@i8Vv4(MzS9=bT)_?1Rhmu zL8Z=|zShWr2$sgH<^#Oc0KS5F&;z9Gn%vn2$ zkRVi8Qbe$qHK__AB7$JtufqWM&96nuePbrb`WN?2qxuI{BL@!>L=pBc;Gq+yYs8D7 z@>oEjg@!B!55yY~pu}3p;)afaFrL+jC$K23QE^DDm*6RcQbZ*(P!ew}R;xxpbg@Uw z12n36eI2U~qD6zc7%|ib8i_15wu5k5jnw%5vl{vks~7-_`r5i)6^O{h@`~?Ygt1M& z)f9LCF{G%deed4Iy-JHZwJ+()Nz`WV)}womqCX%VDJtpyV~_8Pi@NkK`nGHPKlSLv z$pjGnw*b1e@723=`>tJ!J8~icx&9W=58WGpFY)y@V8djAasCL*K(0)qL9fUzC*YwX{3?eT5YNSO zY6#S!M^A#}7+Ve0-Vml!uO8i0fTr~nH3VQt>Y*Ie&7#m2qR&9v#|urN*LOYKxY^Gtrqkp!fSCjOta~TkQ?`+Qh(^!XkTj z=v>_K2T<~D`wriK*Q>`5-NDx%i#w=9SQx`(32g2kN;wVD7Fkr(;g9W$;1QqzN-q9m zhvJ@$4K}w??Jn)ytH&QW9SzV2o$bdG6+x5=(FxXB)UADKht4J4zbgW&4xNkAI28vd z|7~%%p8r-{n!@P`N8_$tf9zIN+_{JpRMN4i6I_;ohN{TEE&i^gyNX0@Z=|*tV-AK| zWeL!b$Pe9$3%?T0T+sAg`;sEaytr4dI>fq8Btunr){Z?&yOT$NC&ZK@Xda#y)P%0| zPmobiZyifIse1De)nN@x1|gtpkMbUA2xcI>d;6ZfJNKY?Q2b*_@gGveQgAj?3Pq?Mp#BqcRBAuqg=EwP9Nw5#M(#3Hn%&=}rXI z>8l`vtv?W--Fvq$4LYq#U9aNq?cvA#-%*tWRUuenZTUL@q{~0_Dk%+y0Z;??(ZO{*_nvze2E!EX)gpOxHiPaLVplD?5D#Yel2J;^(^VAx@gdJ zx|VbgdQDK(#2ss7(LX5DUfmd3WJp2D_x`C{{m|fyKXhkJjJSqQfZzh8MZLQg7x(14 z{2ksxfxDzvkM2diOa4^MtpD#S!B__he*P{{2xQf%BWa#INfolSfoCGHU?S$6s@sJ( z=%Z%e-Wl{NQ9hygCPOa;Z&yYmmF9kFVvjX~icdFYM>Uu~cC9RM;*gc}&H>F+@32|~48ljd&W zoaLDB#Ty)?YWsL@)?0OHfIxHJPi>*7UTFcfNe zOsJELW{WK*sjkcv>YD1xBy}2&7er3aqg4{bf8n@L&@F3qyk4W%0WDrSUdJb(ThdC@ zV&pWksNr<7&J4alxmL$A`=>ok~F{sF$tnZCu&7O)^LJ}1Pa06!$Hb=k~PnpFb1+A z39^@nnYA=MSmQJhBVHspC<)U53{AX5B|de72$}#jLACK(QIthNgeY_*P&7+MKmZ2; z%1l3;Y+@~F0;@!qNYoJ!LFq~B0%rshm>+X%1V{;*H(_e1nGvPegBQJC&kF=ZB4htx zF+`FM1$(nTtqJ2LfwS_Q25Ve1jf_>&lZ~M@c`R~g-K*OL;}>pYsrN00*m+tm#WG*?!PquDtP~IKAB5) z8$%)D@4I$`(8~bO z%32vEhJXT%o;t2_Yep*^+59TSDlCP)0*Q6OVvFgS9*?43B6tl14%p0*Z)y z2>RjVL@uU=-XW6wQbQ zEtpzh$EpH2n`elDT6i&e3%}w00cpQ9AqQH*%1y!EtUfCs>eTsBN)2|h^!$Y zRzWmTXn@jqgfdCcQ6L97&=(04v#}Sm3DRp!3@sxZAefl2FlfjX;0v+=4u7gPd57%2FVcu^yOOFd`;kzfgvu^Cj?gLQ!ntTBQ?2sIlZ3kuZg3o->wup$A5 zj`3gtIGRFp%!CCA1|%35GI*njoEsjjH2_Y7PK{XzC2f+e05KLsjSebAAEYfH{6jp< zs11_DO9qK172ro4Ojy+FHE4ojne#F$UU|fh-Mv1wL9zrsZ zy+M|!l3>`vO9d@Ah*2P$%mTCPnz9In+{lZ0by#!B!D&*^1^R#yTtT3)ai~gTFc3y) z1;&oRON>*H;epacYtqD9n^4xZDzsb#Q*RBP#4;HGlGWj&QNh2@`6CsU3^FRdp z41$q2BeqF8$$+4NkcEI|g5#5|W5pF?piHgKB!`fd!gUY?5p)eQ$b!BM#6My;7GtEI z&;s;;6%AHmre%+`LeUq?j?Rh@Bv3L4UBVXOYxbo(`KQ zYzXDZuPBz&Du5S6fT*MsC0GKbif{|e3)-=U8z=_Q3$FYB=gay3EpkK)ot9z}xTD1z zJi(^ySQ5$CkO{#R;Lo&R!W3YE$OuFe!WUlb3niLK_6B$uvU&=D2!n_SFhsn_RDhTA z5j>G@&<1q}I|-U{ER2Pbld)3-#|zN~m}v;(SpCKd!YUMJDG(xL3w%fjR!#xVAen(m z(pWM<2eKL1I8nrs8hl}MrK8=50U;HWTCi_x)TmXX2Co)W$5-P@`p(3ES66A5x<+PAzuS&I(UgGA;Ls?ISA2+h&~i5Y3~3JH;d3OM2!{Otg~QG0pXEB zfEy5w=_vY9$VHw`>lZC<=*QAY$rnu~VlRmuidJjIj*cQN(SfB<3uA(>LK47&vWc8bW>VU;2lMWl%Ag=vX+ zEqJFn$XgLVvG;|KQX3Noq=fAm5+U+wti`Z3L<-up7y+jVk!2wQCT`Ri1;l17X*9bA zTMCM!IuXGQzz_s`i5zUnnvi7FW*S2@CYU<*O(7=amLw&_56VhGuAoN@wAn1wCSo&W z)L6_`TZ9cMjn+u#2ERl4qWvA5j3x4t&IAL+RuD@G44e!fBBn1iphS&*;R)KoOo&AY zS{m6#%{tgM`b{F4QQZrsjuj0EsY1&Lq#^<{mQ3cVM437X0w-WN$pE9o3M9alL9!^A z1uSjQCaHw7I_8vE4`G=mqX^y5?ib(4CowlV)QlU_CeuMQ7iCzJne|cLV!{);v;+X* z!jiH2Y3VeA&K4-vViE`++eq|VcymMu@=7rwA|fKh%9%`9D3Oi92SP&~q0qOWJ&##p zv7Cva(XCr|f?=Ulzu+gdK4J!Z0X^-_5CoW`v3LZ^!H5pq7+4ZziAKl>CMQZ}EYl1G zkwcCDl<4pwaCoe$RwVN>Hmu;o3=s%=ifnA90Y1=2hYYY3CII?2T7ZK#HpDo4z?Wzy z7$}nDL36>Pp=QdOSS_w+j*nyxQ zfdMB9;6h->D=ZvSO^{*O6tY1CBmkSGf)lJvASeL>sWRsvW-$w#7N01gQbmg*!< zHcMvG2`^nh0K}rHRkTKm-a!e0YH}CAO4)Em?4WTX39|+kL||Ewvpv}oY=ntYl^{iZ zKoGZN{@6P~^B6&?2rK|7a72qo;sqheOrZ&8B$=?i!Xg1yNY03BkU7~Y$Rn$Tz<7ZWI|b4qd3f$wmGWxFLKL>tHti z*fvetJ?rJ`_A+a;V@T340t-T7BB}TfDceCAu%Jd zfDdLV2vf9tDzx$N(B7DmL%4GbohD9;w2BVk!nm+7tu~5=!;T?WNbxGFWc65Naqua! z16as})CVJnCBdY$9xPCR0`qn{P(oS-kC63-Cf7g@NJpTA0x$vtKq&Ngh(ssgxF(6vQ4}cEc*4-F#%8DrQ!s7fgo~;`P76GzV-G^3Mk#jt zbzZO|%yELpgJ?xFx6Ien+9qfg(HXSX9vy_hPm> z6v;3S-RPJbS(nSjM-lfhUV=nu#O{ymjKQJ>)38-FNGR!0aKf0Jw;^CeClgMwI0waG z7#R(u3M~zYocIL+C$mVF@KZ-n?ohOoV(A?U1_DAk^Je0N>>6aoVkC~qL%IJ9#qk|n zm-1f=Y!vQ`uphM3g2L8zv_cGZb@brC2~F7IAmn4= zg|uJ^IQP(Dp+^plvsyZ>1wF`OWKn0bQ3M7~(cz?JO~pnvOsyjSRWnUMFtAll$fvzA z@k1vWL>K}pt#zr(dmXdqeJiVvfG(T zU2Z-!)IvJeV&mj&hLe3AFXy}O@&EWQu_0J?DQ_UvfoRNgACq7jk}_ri4mELdPHQeo9c>`!1Y0z+(>9fPV966U(`=45^gKF4T{2P9mjcqIbpK1U8|40pk~nXojPB9crYHmjsf&?cl}C(x5W z}ykqyeEFL|h8$(d#FH!>vSiDH#_!yB2jQ?a`|@ z_iaS|{lH$h+lX7Hy^4DE=uygbu+{f;EdF(0#|Afe+vAQZ-GJ`)ZP%Z;;s%$NsRNhP zio15jrLuaEPU>|}MhI>Q;YJkqowif2;$rT4VRHSHUnl$)mql?W`ma%y;L2&2287V9 z$0FP)W4G11irv`7QSMq{0}kuxWH%(ao(--VvrD2Kdi3gA@-6PY0gn59gDbyZ$Ejef zzgL5M!@utDR$ST{7X^DaK!A%}xOv&N_&d7Ds$Ns&N*fUNZI3_VmQzW$lG2hNi@6^f z^aSs;266uAsh7~#NeMaK6#c2FXAipf{f7pc!(CIl^-3T=ly=JG{uo)0AlQdHUq9k< zH}}(DchMa$++FAX)Id_fQLGCnQ`5Qs-9QO65iX6h>$BW1-ulUiydS#%iqE3{|E{z%SH?G~$E)@L3)h!#AU2{w?do3q2d>}W?xO3o z{rLvhwu8LY4;;WZkR{z%#vRJnH zw&Gs6h{%-A4R1(%kTnu_$M&V|xe>gri0p0lNAnGC z8>`wX?*2nJuAHYhLn3`qh#P^p;f%k5U{|+ERuyffoF`6x(js=N^<;Ph-7-fgkM70XszN<(l6Lt1-`gXu^lxWk z5C2x&8^OPr8_>?co|Uf96F0D(47PuZE3bdxb`{e7U);X$(7x`r`<23QwFz=zaRv(o zbKI+iG8Eq)1a#+a6`DH!)V+Y#my(h$UAV#Rj18W-A?*xxk6lW*q3!fvpSWS|Lh2r9 zWC=IC-B(myO7J|Q{uuxz+{ku~8Vo2w8#k&U4r&-(-_V6Yl()0g4f>H9(8`TzKvYMr zqQO%qZfyOeKN3IV>c`V?d`h_S^&@`l!cAyruA6~%mv9ps$N+R#)`Nq>N%fuJlAByV zA0E4KQ+~xHA>^jkHxWt1K~+7Qj3}Zae)Th36FBc+gdX9n<&Sx_9m|lAr8c?W}RGajtbv za*lTnb5=O}JNr2oJBK^xIwv^CIxEq;UpLq}(K*|>(Rt9h$GOXS*m=Y`(7D99!MWAB z-MQPj**V&I$a%oI%z4E!)w$Gp6eISsar<@qP@m!);+)}J=N#v(c20B7bWV2;b&he) zaV~eRbgpo&a?W#>JLfysI~Oo&*zu$%lPH|3VtQOieJsI;n(u(`1O1Zzk%PxZ|1k~+xeaR zRDKt~o8QCl<@fOi`9u6+{w@EGf6ss5Kk}dW&-@qUh<$~ALVsa^Fi;pI3>Jn6Lxo|& zaAAZnQWzzS7RrS&LWM9^7$=MuCI}OSN@0>PS(qX$6b5OAYR-g?){N0qXvS*BX~t_N zXsR^TnrWKpn$w!)nuD4nniGw8YIkWrX+CSdXkOdj*voYlx(T}3#+ms8^FI{~ZQEbG zC*P3E#kt~2ag8{+aBb8sakscj+$SCq4~rwB9*S2(UdpfJmEvgqTKx?DO#MpzD*bAG zjefg+D*r-rS$|FcKz~_&C_k5P%D3d}c;As<$hYN_c;ChQntWA0BcGPf%V*_N@;Ui} zd{Mq6Ka&@V5B2+XkMvLEr}88DvHVznUw$B8k)P!(79B!ve!1!$HGgypI@8h$qCOhW)zzI{H3pIA$2a-bc}M z+;D>R@7J9)oHCq7`+gmLXv}`y8N*rjKF2Vf$M*%p9m4~|Bf}u$U}Lp$nsK`Ev!TCn zsd1%om2tJPuW_Amy|JHht8tfckMXndi?Pf!!nDUY$u!wC!!*mZ*K|TYXW9^Q$aK(j zCFDlP-H_Gha`PJV3304>oO!%?f_b93(md5%WnO2VX`W?XYu;eKV}59UYyM#F*Jx0q zA&rJM8s2C`qp^*~H9BtmVp!H_d83t$&NRB%XryJ1@s)Y0WtC+i=)P>ZYPo44{vKK; zgboOOW_fS=m~LU=&I0dq1Otp7tYk*4Bgv! zp}4X!N$YjvF-N+`7WL(z?p}pm3jchjpiQ zzIB0hp>>XVhIL%X#E_XG+pSZrRo3a&)z%v88tYo?qL7W&gZw({dg})3EbAQWT8pN@_poo$j^~qBFk)jZF{VHt^2J9 ztOu=!tcQW=sO7BXgyo#&RmhXZlQmBpKWqFp{9X81>v-!V>*n z#Kwrj5l16NTCYXiintqbFXDd0gNTO_FCsogl<|Edr$kPTtd5)(IWuxr-@vyHb+uuZg8+9uhi z*rwX5Y}K}Dw&}JRwwbnBw%N8hwz;->w)wUNwuQDuw#Bw3wxzaZw&k`Jww1P3w$-*8 z+Zx+i+dA8N+XmZ4+a}v)+ZNka+cw*F+YZ}K+b-K~+aB9q+dkWV+X34_+acRw+Y#GQ z+cDd5+X>rA+bP>=+Zo$g+d12L+XdT2+a=p&+ZEeY+cn#D+YQ@I+b!E|+a23o+dbQT z+XLG}+aud!+Y{SU+cVp9+Y4K*?WOIN?X~TV?XB&-?St*3?UU`Z?Tf9<-q+sG-rqjJ zKF~hMKG;6QKGZ(UKHNUSKGHtQKH6SxA7ihukF}4pkGD^-PqbIsC)p?4r`V_3tL)YG zY4+*%8TOg>S@zlXIrh2sdG`7C1@?vZMfSz^CHAHEW%lLv750_(Rrb~P8v7diTKhWt zdiw_ZM*AlFX8RWVR{J*lcKZ(dPWvwVZu=hlUi%^YVSC@Geo_6S21X5v8XPqwYG_nh z)Uc?}_Tf?Eqbj4ON8OIP6LmLggkywbq+^t0w4>ZH#!=xI>lo)4@0j42=%{o|a!hti zaZGhoIjSAg9Mc^$95WrW9J3vB9CID>9P=Fu919(X4T~I$9ZMWb9m^cc9V>usrDK<4 zx8sYWuk)khv*WmUQamQU#(Tf+jrdl4C%zZSZa;`0#T(iM;!*hRBJq}ZN4zcG6eozE z#Lr^2_(d#}`bw2zKWUoSUm76I5T}bX#evcwX|Qxnye{4lhe)sGH}YHgo%~+@Ab*t0 z^q=I<@)voCez1O^et>?EzOTNYzQ2B`eyB7|8ZM2HMoO2(QPODXmH1S5MZ79L)0IoL z;&X9~^g^tVYAmZQFU7T%HI}i`IBC2zL7FI4N|zj$9mgEU9VZ+o9j6?p9cLT|9akI& z97h~y9jmN+9M>IJ9p@b99oHQD92XpW9s3=J9Ty#k97i2D95)@e9Jd{J9Csb}9QPd$ z91k6j9FHAu98Vk{9Pb=Y9nT!^9d8}a9WNZUj+c&Cj@OP!(qw6hG*zmSs-JiZ(o(TTS|hEM z)=BH74bnzwleAgdB5jqnN!z6z(oSiYv|HLE?Un9G`=tHS0qLN0NIEPXk&a5oq~p>F z>7;Z@IxU@%&PwN`^U?+BqI5~REM1YVO4p?8(hcdRbW6G|-IeZ1_oWBYL+O$9Sb8Eo zm7Yn@r5DmHu~vF1y^>x_Z=|=T z5P7IPOdc+ekVnd+J}4iOUx3r>c@BHW-7F`}a zI{Hj#Rdj{8I(lRDz37M0o1%9{?~2}o&zaEL=)HyXJ*Vlsrt_OFXu7cJqNY!y7dKtf zbZJu>wYq6d(=|=kHeJ_rebWt1H#XhebZgUXO?Nfj-Sl+RJ5BF5t&ZN^Y)`XlHp6~h zZPN;5b=#lJsqPx;P&pqG0z`fGF+P%!Z!d>HD=DzN};lAm<<-YB{mi-m=x3hip5u*2x@Rb^&StytR2yBRuMnR$d)4e^vq#Ow#f*=c5Hm5RGG_G0Xe=&P}(W6#7s#d~z~ z%I3t)k>>ZBSHwMT{Te`;P9Hze+2^T}~j z;;Q0C#tn@dA6FSSG44_GNpY{6zis}ed3D@?xF^k@H6I)|J8ody@HpaeN!-%7MRChn zot{_6t%`%R*>i=sEA9ZRZHwC;ch7sld&zs*d(pcm?v8gy+|IbA-eun9-bLQU-pSte z-dWz+-Z|dAaXY;G;%0j1diTdI^ltEO^ltKQ^X~K#?%L=hamRqKD*AZb$+%N-m*Vck zU5+~)cP8#^+_kvtap&T0#GQ}38FwM>R@}w7+i_Ro?#5k>yBBvq?m^t+xF>NBDdSZ;|hWIK%g`#itfz_e*?a>wDw&#Vz&C_pR`)^sV;Q z_-6ao_-dn9`KnxNeJ6Y;eOr8|eW!e9e3yM!eAj%}eK&kJeYbsge0P2KeD{41e2;xc zd`EqUePa{HC5}&=kT@~%gYTnnpYM?GiSMcJneVypg|F84()Y^u+V{ry*7wf$-uKD( z+4sd)me@D3Ut<5n0f_?>2PFcqu~ zRnhD5*^qcA@l&(U%{C@(PTZ7uGI49-@x;4{_Y!v`)+WA8e4SY1+mcB1ze=ofy-6%f z>YG&CtSYHGX?oJcq!~%Gl6E8=Nt&HBH)&qd{G=sGOOw_ntxH;;v@vOG(x#-%NgI;3 zBppgRoOCwnTvBDynWR%mr<0~7T}Zl^1kY}KJn1Cf*yki&Pr8+KIq5~x^Q6_uYmzr4 z*CxG5TAy5&yeD~g^1kG~$%|vgCvQ!j>ie9uJ$YC1j^v%m6Os=kA51=+JS2H|@`&V- z$)l1-CzmIWNgkU#F1aFka`Keq%H*o#smarltCLSA%}Ab}yd`;C^1S4k$+MDYC(lWq zn_Lw=KY2m&!sNxtOOuZzA4@)-d?I;`Z)GxcmApTBN%G0$qsga}YkZ5)aw@sXbvF50 z@|fm#lW!;ANxqnTKly#~#FUXKqf*Gyo+Ov2j7b@kQo)|ari^1H^^9k=2`N?4l_^yz zwb3(EW~Cf8%ubn;GB;&jN`+XRGA(6(%EpvUDVy=xl0wgmQWmFdO`d90QlqEdnv~Tkhf-Fi98NisvMS|3%2D)C`+}5(7_}{Bd&&+#?_zB$fO$V) z4hEmsq#R2*o^k@u>X;2F>w#-+%E^>dDeF>BrZGPOK)RO*=2iqx^G<5H)lR;5;_&P<)1IzM$m>dMqrsY_BQ}_fnsxK1+Rt_iMc0;Qbcw_o+kt&r@Hd z)~3EpE%RSX9qNCVI>Ydb+;=b6csTWf(rS4AMlRC^l+)q9?!ms+= zNdGAR$<%WH82?y5Y&Ml_w!&ZK8s}f`pXjgjkM~dZPx0SPo$FuhpXXoTU+SOlpYEUG zpXp!dpXOiWpX#sCFY~YPFY(Xv&-Typukx?{V)9Q{MfzuKl(rWzxbc|Klulw4NM!9HaP9Qzani|+VHd?X(Q4`rj@6S zN*kS4qaTwtHm!=ak4u}7HZg5V+N89~w8`k1npT~*FpaodoHjjev42|H%(S^_v(x6J z%}bk){sn1^(q4!g(l(}1blj9y6}=gsy=jNpn4@W1F=k8J_Ot_O`_lGf%t4Gfly)TT zMA}I<-?6k)X_wPZr(H@rpLQYbOxoGB3h^R7=hB|0y=6Gwr`=0?n07zyZt5f8x|{Yq z?RDCVv|8YLnf40U-lV-t8yFx82M0a?;#1n^w7!8aX=QDKf#HFXftd_u zc3?>0VcNLB-PG}c#r_e2QGv06^1$doMPLkIX9Q*iDg%=OlLJ!%Qv+3j>cF(Xbd0Nw zUhJPAmII#6WGD(>jN7Dn*!ScTLN1H z+XFiTy8?Rxdjq=zpdOpGiNPPMEi+??~UBz9)TW z`mXf7>HE^JrC(3Kk$yA%e)@y-Tj}@GAErNIaOcv`r(a6HoPHtwV)~WztLe|upQk@b z-<o~W-pRO&r+cW~&v=mW z5cNkHkMZ;*<7vh-lrJ)BGhU*k)>r8LknuL-UB;)3FByF^`(^ge9FRFM6T6Abv6xf%%%PbRGB;#y%p~be%AA}zC39+KRc3YOw9M(5^D^gWF3wz^ zxha#VI-Gef^L*y%%&VE#G9PF5&l;9BJd1c8ku@@_Dtc7b=&bUrs;u={8?rWLt;^bx zwKHp1*7mHcx%;yYWbMw{mvuO+Hu@MFaXjln*2SzdS(mb|XWhuUokdaPUe<%GhgsLM z9%VhwdYbht>rU3pq>{HpNvsYxF%s!EQ zI*E8amwi6_LiWY%RdHvtw`E_-zMOqE8&Nu&tp7@OmFrse&FtIR*RvmHKghn5{V028 z(yi>r*-x@belN3MWxvjTn*ApGEuO2QKV*N*{*?VCyDX<~PQRS~IoK;C49uC3IVfjv z&XAm;Im2>>=Zwf1nKLS9bWVBBgq$%s6**&bW+qL_nVduT#^;<6C+3W4zA5KQ&Xb(l zoEJIIbEZbm$(ft8B4=gJ;+*9x7Vah_>)vDM{PS6V?|tdHir zf;~Wm_`20e@lC6@tw!aI&Ks6DBCkAeOy0;moX_Mf$Xk*(E^mC^^1PvWEAuAiP1RQB zP0E{`HzjXs-m1LSc?N-WqDP3Z05W*dAF3?${ppdaw_k1 z-rl@@c?a?i z&byv>Gw*iZ{k%JQck}M$J;-~AS>RW#E5y;QYxI-z-n1%jO`MErUD2BCZ*1!&t(Uf5 z+qUvjT5oB+t@ZZSyIb#Qy|eYM)_X8=VdC-Ddt2{oy}$M0)(2W2 zY<;Npk=93BA8mE1^~KiYr8isOY5lbIi`K7Ne`@`?^*o#;yl?ZN&Br#x8|}Ftw&|zr zQT8hPl!MCi)(4bDd~Ngu(@D0&yV3?{2Fh?{gi@{4=tn6h#UX}jWwcU`=L%&kzQ-x! zS)bZ7QK`h!WMvBLuTpNbnWxN9<|uQOTWuC8^OXh4Lgh}I<;qg!c;jWtI%TJ_LRqQo zQg$n=6r40DHOd;4Ta<0ec4ddsS2?6ml*Fo_oKT*(Ijfvj&Y=IWas=N;m1Fomshm=X zlN-uSWmNvO{1@V&{K5G{^M~b+$RC+soixT%KS%JV`LFZezaqbHLBE3j1p^8O77QvFTri|yXu+_8;RPcKMiz`J7+tW{ zGPYn*!Ty5n1=9;=6wE1DT(G2IX~D9B-O1$PUs72GSR zz~;ATOM{)**c0sX#4@6QD<#V-YAZC{Fg+t%p&we8<_K->Mg3UOfDF9i!i zUm)kC_n@|e+YV`aADkR-e8uuYe1Q}AgZ!7a{R;aQR)}}n-fjE5?Tfar+kS3ahLcIU zD}dkp3u~MQ3NII4C_IeXrNZ-tM^IiYJX3fa<%vQ=^~@jk6b{C9;y&!EWQ>5Kc?{o- zQ!L+mxEM}oy2mWhRh+BPmcS*8|x(4_fZxpi)ZCY=LX%a|y@3F(3f z03cN+xO745(kSz1#(+ek3pJO9DtsfOVo`X@jY7AI&dmWHqiGmMV;GG_qq6OEGd9{p zHFfl^)6Eoo(5&!X2#R+JmU6wZ6Ny)5XgxYq8BtnBE`tKuZr%mlM5R`pPODC*H4=nQ z*%zEmOEs4cjmja+hR@g8jEf{*--lrZ)jS~;gf{ecaZEe-Lnl@$tt^uYnF1~?Z>~6i z%fv$ksze1Uv|T(pMNqX1$@0*O#`3(-j+&;6hf`W*bI=HwbO|nPutNtOXX8&7`Y4=R zi;vF56C|ec2vCmz$~+n%cS|ZsL25J%L^Uk1f`1-R$!nNCU6N%2xCq*fn*%F^3*=~F ze;&CDfr~Dw3y>+T+QFt+7vIH0{j3*%KcV0+1C5{v(ohC$B(wDBAqY&NcL|^om<$Y7 zN2tM-TX5-I;%|V?=+arP7uJmuTm}dR8yE>Q&z!5^IlIq+~U zxr;{tptcRB$8azbq}HRWL!i12V09`iLja+YGeJ6dguawI-6?(CTBA!#Z30O~XotU_ zsq;S?pdqDWs_z+Rn3kC|1Pd|OdE{3rm>e`TBWdX?FAxk-?a|bGcAbRXBGZ-FE(DGO zO9eZy9aZ=Y5o?8vH55W_k~M?~gqZA{2-6_CP)!q@jl~MBNifp0A}CsTqldiH1x{dq z44N!ftXB=@#gwe)tE^#~q*@KJ#Nq?Zk9b8ERL7VWw7}!oXcmevEdoz4c&Rq8;(9`tx-d;5Caj>j3!_czyXCKDlNAfyG3~ANgk0(RGaQKMoEFxr7>ELYutj0 zLqiQJ4hKb3)h}0c8TrrAqyGyrxeuD0_IA8G^N&QxMDH7PP4FBm#0I1OOM0 zam;Gbz+8bjCxo3Dd%ERO7k%pF(5&2jIclGwyp&Bk3X%Ne7B1S#ip_v&|H?_?$Wm;ZVyZRH%y_k|;C+!#!x07Jx>|HPW$LqwK>t27U+? z8EY~PJ%&0uz&*sEwn02P7v&ZnBe|_*uEs4X7=yaY*u^Db7y>|pKHzBBXQJ?f@xMU? zgB3~|F!k#4gk&2 zk{?2hp&-gk43f!%TujGmGWxiGVylLck?+zX31c$476m)R6F|GLJcJ%(dI&aRQaB>b zU?lMvT_GeM@JVA#YHFsA2|g%?9>lt|7+}(oH1xj-p>%2HXpN#LF=&-z=no3O($7YK zSb{XlVnCP(LZh7fD+moiY#*UfA_ziIF8vh*La#%!c6$Deq&AA9r1i>j& z7sb@kK`CQ?A4_>*9z|Y>7=@mh9o!O$AxHs=+N~k9qy~Y44k~a76k5xiC?p!?K*$Vz z+@cr~+w3R>HD>8X;<~}W;E0#Z00|JaAmGaxF$%eua&^97c@=I4xuc>yn4Xl)3K<2A z8R1kB32?xs82SJ`oM;pCj$0366`A@D-HwGR!5@zw7nJGRkebp2qE+uq|BOEZRd5$fW;>Rw_U6OguZG!EKWaT3KblfqdGdx1E!un`QUvJ+vmv5j z3YGffD^R7WTq5ZntC?!#Dv?+!!ABR5S;=80v3#Byc76j%ZM-fh6Ejt@Uc1;#K_8?9 z(kZ43ZIp3mnvp955;awnm1mk+hPA~yXPHE#aYP!YY#5?d`cNpK%@8EVleM6afhgCP zXpqWGr>%-I6^QU*>V~(g8fOtySphKeAp*O1E0#VgnCVwwAIk(q3W8m`>QV3knDXb} zgLDn5Rl}f6tLuDLQ)}vBRl?|wjpvp#6hEQb_Dg&sp8I>}s zY(eE`lv`2$5#=_Nr6{+f?1^#*%C0DPqU?-v7s`$(ccc6Uo;--=W-x^0z4W zqx@Ht2T=Yq%7ZBX0p%f-ZBZUZ*#_kil({I6qRd2j3}pc2ag-@2PoVUnJc%+MVHI^AsUzub(S^>oKXrgpohLOr->YbH+7n@lwg;MHy z?kX8NdF_Zv&0ya~;!6qZs$9G4>Eh92MGn<-Zi5RolgmJYrkv0NQBXh<+5lW2@J9d# zBK4obtEn*nu@AzA6x$P{a(j=UJmS=Vbx&Q`)?K7vf`mO3@XAKQIK2*VdL3XG3q8EDb`!c0dxC)Fb%5n{ zfEE^ic;!-m03rYd0n6$D%jy746oq)@O$FdeQ8@u=_pFm4S5IGO^xYi`ppHSHZ-PL` z!@p|ocj&7g1EAjqf&MiJbgT{tYWoNDRa^m3+aM4YEoK94zW*wXOmwXo4VVBb%u-T< zKqNKqGV`qu4;x(RPXfaVii9 zQqF7(+V%PQ!OGoaGm38l47KuKqJMuZA%j}ag^%L|;K$;w?Ak^|*E zlqQt-QOYPEpwyy#h>`+Kolj>XqT9c$Cjk zMxuOyG7M!cN{b7730f^=lME;a?Lc zH}XTvh$zg(j+2oNQdC4>qw_l6rAIEUr7(%?f)0^rO>iNi(hQsSQU2r6D-Ub5E`#N2 zTcvEEPC1O@C=7d3XouctYsVu|#~8LU8G~B0D=#<3P&#KhA1>hFjAbmO{$~q`YC5w~ zw94Ukf-*s8nG&UGqn=Hixk_fD@V_TWG9MVwJv-4dK(y@8DC36Jaj0CY#JXh}z_wt- zAY%BYs+g}jl__XnyBo~TkIjowK0~0KGW&cphT4P>ZeJE5RHCSGUGtpxqQckgq(-T5TZ3uQoD6#mF zD)7WX{OaKzR&ma)!6y{!431cglq_RM(MFk&%CdBl+s$}4JC@{?Y&rF3iGvPg_eg{{gnG=-5cVJ7Y=qQ$V|IMn_>i+1yLRYmbWOUq-gmf?=^Vr_TIf zdH*kaZyqOCaov6QU3xT{o{_GEz(NAt-I5bI0h`#wCXSPE3Ew7Rdw*+4jLj#t2{*fqVy7;mvIXuE! z<18}}%l#B-icJoe`L|x)QuiXi{FX97v%;+!_<%pPZH2j=rg$HZD!=$eJ)E>%r5;TB zSY=v18YBlN=-;exN|V*>78M*%KmHv5o^-t9SiNa+HgN1+O&;h^7oX^|G(_ZM%09|c z%D#H2p@G|A;Y{UO#?$Fwe0?XHE{+iKp9&EH<;Oq6(wABwRkapK`C$*F=;!%8h~KUGJ(%CE_&tQ*E%}|t@853CoX1R@!>B2=b)8j~%Mcrm+TU0qmHSbed7~s8$$kR_k zGhO09^~%)1D;1z_-7$-0E1cBQB^QWu~iWY{lB*Rqnqv#Vebk>5Af&oz?XI;#J1$?&5U{ud9pKsk|;PUN_-&mAx_u zi86)~L7&1Da3)#1AD6Qmk;Vlc$L3?`Rx=MP4JuTUPW_n~bT|_rs`>f4|aQEspS&ajf%%iI5HO~Z? z+d#icT}A5A)pXu+m&&hF*X%blJ*JwjekH(fDnu0EMOjM^o0%S4O&>TcOqW>}>r&?T zhlR?#o6O_bkU3m?D6Aq6x75|79$!sgIn1TDix6A6{j=;<4pTSr6|% zGd-c2{tDBu*wq8qonDoB{@j`AqH6k^;{!SL^sCghyUk2btfu#$z=cl^9n%ZFDsu&y zCsosT!FP979bS}m8d)b-(4RjRWZaR( z3t1&Ak}k2V#&|X2%2#J#K++o)I+iQKvY50pK9U|IF_yyj_Hete0j zBhM@{^08o#6J^k4nyQ+VI6F>a`a;=2)=|xV%r~hu3(^p{?GD1!JMizAWX??OVTz&i zP#Q2uUpqlsTG6j~J@}ZJ>1oyUrCH3IEBq*J36Q5((_^+$#>C^0-9OD`|P8V0xYZcA=3!j{k?s)|U$l5VoQcWMZ+)6AX zGMGOj1%Sb+P}^Q!4vj+eWinvw3Yj9I56d44s$ z7|n+NW8nX-OM`T&%ebJ5>yzf%C|&;MjP$~4dh|;{y3$do=tbg~f7HzMqH6m1?m>E* z>sI}Unpb5mA#-UpJ>`%91}geh>Kd?JTul$Z3ZIlwV%NQ*S7k2Ub!K`=HGLgZaFWB< zLng1vyqnBRtLalG5urdTze>INy&37UYP#+{_U0Yu6}>3y;Gvo6W!3bY>rk*Pix*|> ze)P=r@@o3)W;*1Ukly^dsjP)$T~STvU#i{Sihh;)@R2jq<@Dc6*a*mQ@uI9{6u1(z z^9RgL+1dO9r5yvWSD|~yvT7iaU!|@l_3CQ6qzmd)YA^1nce`YtC>my%db*j*mq`nV>P{Va(aDM?>i@3#v3!zo2u#38-*CP zxzWH^{f6M4YP$cgHHHNG73}V7W@t@&3%gj?I4pQVuC=U%WZha#54k!@hcYY2i%RYP z`i%6pYP#%N?fx^{bp=i%_4aByM1j3CiSVKV*N}BbHNEdDhUzSf7iFy=>&|L=0$KNG zS-dD~Em?O}(|fLf-7Je2Wi3Iu?yjc$>=T&E@vGF=515(WQ%%o3QVX3xze-&N?7h|W z&?{-&3=J>J+8ue{hp058LQ?%oJLz4vQcjYoOz-SZ&vzy8kXh#5jAZv$)8`LDsV#@$ zs-jnwTu$Z#blZb8FtI=2QXdB2gVpqaPni}T@F_vw&0zIVH9dK9y22@l;7_*JTTRx( z)$~$DUa+HJX$QYGBVXJ1r$^rCET47E7hal?K2lAuX8gQ8W0e;XnZJ5Q`Y0px$I@#Y ztFqRTqTne=vS#X!^TsX9EJxCuly=?6{$~y zVG*7dQu$Tt?yt;9p8>;TE|p)UE+lmogXeg9GsEV1rL95W&oY#3jhP7eQQCZT;JIpg zp-a2a(iSgZp+e(dtra_S*{e;U*OU4}HQn%3O^l%uF~h%DSDbSF7n>*97UR ztb_BSthM{hOkab-taOzt6!5H!^C|OsH9dV+x-9F>r(4F-M`xsOFl9L|&`!2~1-|l; z8R?sB(fU+=m3lp?zoD&tD!)oS1`KO3O+J-hr4Et$7N*Ik@@p8d?{8D9q0r`r{3>-N zsqa+NhkPo(N`3od>C-)$f!=-tu4a2uI0rLeJhXDmo~w0Ax`sIef9aL=!0%_j;M_{A zC7CyepI5=i@opPhPS5KqE8< z=3s-drqKr*OvUA+cwRlcFsPa~$R}dw0j}1zcOb(f(>G}CD&vEGnQmc}m*G7m40cj_vmVqG*PJ?&MI#SONjbpWe@l4UUr$U~ahxDk zCYeky-MWl$*=jRL?(3HWj%5k+Pa=1p#nVoiExlcxWW7E(t)kh^ZL|$9!H( z?H#1Eti4Um@$lNRlo}%>=Kbyency^YcaZGs!q|DNEfv>7j0Ht+ng9vOmvFc!MU#`c z3MjJ_mcV!zBj@6bDf%iiKS{nv5?4dK%A%WJB)LiY1pEn|Yc67SkdrNT(`T87K7FFi z#{qexO8h2h^G5Ims_6|U(mo{=iYF|gSakY`DA<%y6~?8v-y{tvxKNa03B@}jbJ6cm z5R2;-5IhIsmTX~_jUmzL^Xqn0{^)8lw>r%lXe)J=RFvv=lg!H=L<{E zOH0p}l%5&uEW$?c*zf%Lrqc5*rRUp9&v%rb?{UwyWNDI~b`BnT23@C{n2S=kqj#B? zTYeZ!9;!yS)vg&o+79Cf{}1ZGZt|cM1Pj-Qoyw(z;nAAfMsW#dSSN&)K(SP2R+GCY zHF2ik@F8#u&&oZMnp3_pP_0inHJxOtK*;8)fDA+?tuw}1jWtnJA#~5mVxNfxGl=uX zCC4iQ2}9iqggYOdg7iU69q%y$%Ud z7@^AazWd|m1T4;Y{UwE6fH(RY3?WhAiV~K8Nm0KHN^}VOVU^Rc5JVGI>ci;B z6d>*zA72=1cu9#VrJdGlBL}0^GpHy<(sAny&y6&=6nF`M!g+&*>$gV2NtDo8HFQCv zG0BiMCc8le-!AWP+t2v!`JuUdrK0*ICNq@V06!A=B<2!N)~+o3t$4ZAiq(W->NgFGL&w@PkoF9=4%&%0 zR%#Fb2ul_~>V;_H#@A=GJcg_VbL0-AFKIY^0pWDb?Vn8hmFXT_O{kK>VAU~HH}^p8 z>_PhI+;_e!Jl<27khk4)jco(3^$PV)aSbL5*`U(=qE?z;V9NSk!}NYK_&2(XhRlOc z)vO90m`kwWeRzOv%*$uGu(WJE?ALI);v^3kr!PGkrfZ_o-sQrRT^{25LV|AR2#cJ|>6-`AiIQiT#PSg8;k8r3G}6PxJj8l9<&H|auK}IWo9<^1_ivEy zZx4I*rU%%=vJKJ$?cuRM(!`Ep2Yn6(^>F^@QamO+5HU2*9-ccUNDsBA%NQT$+tZOe zEwHB-&cexRPgm{BBFCPN<>?4}I?Y1B8#vDv&D_GG1f<75Z&qkK;%~Op?506v8ncf$ zIc0;CV5{`O&vAxnno3wR)s*W(oF)>$%}~Xmqo?p?DAIl3INg0$KBiNteStFpXm}7| z+EJ?L3!=aSQ{g3xE%um5NcBObEORNMt`iJQ32`;sK6UMHIWkqZNn9fWUugI+KWXI7 zXvE;9fgQ3uJ+5+wV4}7QfS#2s)))!ueDK70U_u!%E{__Lpx^jla<4Ls zoerLP2oFwU^{W#W8ZmE)Bp)TLvYDV%SYCQ_rB?X-i|@;7o#a}501Yl5fC@`q3FmQ(x;DUOosj1Qcb6$ZQ?is#`2KcfP=`r-ZY1EV{s*N71AsbmV z&@61U_Ny?>j$<=Kp6DS1R5?smPO`BG5IZBH`B7bpT2$jcKJnq@?Ap@$FwFr7kJOkD zUPqtfDsE!1IY?tqU%#Ty;ShtTiOe}Y4h%i2e|;P?jk|5WTpvee*n*6i(otv2*@I1T zzOO{QIn27Lt_sBrHw5p-$sRq}9HXWx#B8s_MGvYl$Nb!8s*GDxHMzRsy4Nx6qDu7+ zBNYYQUNF$$3Cq@qj8TOoOAl08sG7lo*MLkJJ$S5qGUyerJ~L<6Kpn@fv?ai_D4{dr zn^qIIEQSaJq|avUnI88C$?0Z5!JGO1O^?NVCw+u^vLK+{&}pZU{AP-HN3=x+ch3&f zYs^5rt3Rr}5(eXZ!|I&THm01+k4_zrsn7dRreR^WB4j{VXhV(aPQ~?R(UIzIZk+^a zld0w)735|d-8~-eT=$v8uhTTzIUP!7OMVJcWUG&JfB~~X#ETV8KhFZ)s>HJ29p?K} zr2yMY<744CI-%1m%uFl*RH95zI0o(0aU%` zI_{Wovh7z(UWi$9paUFYF&oN+(gIV29xJGD^%x+{?sO7|!)S^?qFd->LxT>YV@cMp zc5+?2ETzq1S+gfMwRc@bZHNG=rwo@ms@6Eh!pcdqZS;OCB#qBRS^IWwH>4>7uOv?f z%%@CRl06|P6Zv`e&ft$L1JJeUe}EPSKgIl}i#gX6qyx<6Ft{2k#I+s0HFaPxa@GdC zrw`P&62>{4Jnqlp%!WEK&yWrr`r)kfiq551|Dh{Pwku45yzt7b@TyW_mfFdGx@mwdyWho+|6@NJ z0M22dWRB&949n^g7GHs@AFQNj?(Hi;zAH_My!7i?={4=8pCW4i^(|cm$aaM(;0n{6 zNCKmV|0bQn5Racdf8P-Ky6RDtZPJYzG5yI6QEnVyF~WlzB<;K)CZB;ERk#6R*BRQq zS<1%80eVM}I(9{IGboIgt0H+k#`6&-FV&=WG08-HIcoU;hoj$mt1P$cwUe#;-6mST zBin%HI^IB-@+rJ}(5TSFYpqh6uBJnFf}=%6B%@od)p*?qmG6W^85dw4Vwm7cXDhKB z94yvPawFfd)7nKH9$KyiO;8_!EJDy3SU?3B)zWd)X&imPTi<*X>IYO~gKFi5kI8O1 zRB6yzT@tl&ljS-eSw1|FVUIZ;k@m^yN%#3_y0@G1K_hSnfIn{&J>Q3A51DD;mvtT} ziGEX(9!wa1Xc2HWD_}Ktcd6CR59OcJq^j;BPf}*3p==9C*gY|am)T@c$c}rcO*Kap zGTFtDHU&YPyc8j$a*r>b>l&oktHc0&WPC8bqTbIZ+W8b$_9yCvKM0>SK)=?cV0`xe ziNN0Te5|GNs7 zDbeumQls%OAJ6k0qK_ztYlxiH@ipz02+_+eZg!;CNuEweZQ0**GaF=Aln+ zoTpDkNS);a4ie`6XGS!_1Qw?*Mm5X1E^3;UN$d>WLp>~oCAr$H@Ehvk>E?LU@`*$8 z;50dPv1C2T8M-Kd4pxOqC?$2~~_JUha>4>aDO8ZK4sot_IkQ{~v}=!KET9PL>8aY06-2uY zVJg;Engq49m5#H@Qv(B*Lt9m4#9Uk5tdMJQz|{F0%mpR0ApQJc1BbZn6s>UKYihIs zB#jt%;^$$GGVHVQwDkI?v@_hqX_)SLf1LhV$|j$MgC8+JPB+4b;sBInEsUHOB4^4Z z4{bzb%)0j|K!21kQ3FCfEAaSsG%S~K82)4pf&HPx8KxUcoawF*({^ToK3z*}mbOhx zNe^)_%pnju+MuVTa-lRp_1RJxpf6M|LbwSk7fa>r#VtT$uX5U+Nt$u`%C1q0Ye_2X z=-9m%QWv@T#-|tVEhi`e$&YQPm|oM;P+F?GWUGE(QnkNz-)b5m!cg)md4RW6V2bH4 z8cc6Rd~gz&d$Kbc)0NLHZn;@C^y^@*Y!$ONMjTM}ZYRoW8c zF}aHK9!a|JbV7<@C6gPTZ?btXNZU^rjacp*K7=78CwwC&@JS;BIQjbi3)-_S?IQdN^otZWQ#+3Adr+yUAm^{6x7K{XyUK8hf(_ zZFTc{IOmjgP;$lcWD2Hid%(Wfl>wY8CdnqY0+Ro_LU+jsnFptnh&~$Ys5NO1X(|fPbSn0B5(m0Hw$wxIa#m*2qWwG288;62DJ{^Af zJtdMQ3~Poy6C$I6E%49)j=a|^vOiKBwTZwZ9XX_TqONAd)3eq&%}p0P6T7CIqq8xt z?T*>Lwrs;-vPNiGR*ryU>&>W+Gh1YWZ|d>_WSVf)rID(}qq^u=KU_ zAZm-|MBnT(2Pj>S48Dt-W#Upvw}4|!VFLFwNsX~CNZ$+CEo)9nmpZ$!gahxDbx6!;|xMK6S>$;Nj3BN-6fqcyl{sf_72|?Aq!@G1FrC98c}+68SIcfj z!skj4dG3ZVW!qF+fwUX=57AhF$aGEsD{9CZN2ooqgs z9J+l2xtK=?KqhCKQ+F91juLsWr0Y%AOLXa$O(g{beR^1XOgfq{WvZyq;nQ96%1JfOAlif!ujx+A`(Or7 z$MsD_+KAwYskcdAGS-@o9)+M0B*)m#iqc8`{5~gzC7((qvnM%xBbR^8l87xFyTQQnqha}P zF7Sp^CbuE?CrD1FkiThwH-en zxXQLq;&dg=#9!r8%C1wU1uPj9#qhSIdygo(j%VwSYyB? zaw<`;F1%`?lxj)@p_7%@k3I@zm?5{$i z?@+3rX=u>scl5Y;K=i0xV?1*PDD-16%!k4G!hJ6xAgYa34JV#FFTEP9Sl38l z<@^~>1sHOv3v3R$OP}0J9UnSV=U(|Zdb2AKR+F-k$#%a7nQ`1nDP|McX&~H2sias>;0J zm5_6SX5 z#-~MGY8lOkdgbqH$w3B)5$%CR!r^MtU6NDZ(t;^49n zR;-R@Yz>`N)bh{HETWx4>qZht`YShKgc6RQ9*4Ex4w}+IXd<%x7?$pP2_6MHr=`OM zh&diA=L71#@Uf582bw}tXBW=*)eY#D=@N1_u<9lhqKDf`2}f7D{Jti|D_>CNJnx}% z{s$xos;LU_(dPhJhfU6Q&7r)C9$KFBy90sdal=lN*(Ki0M#hi~{yTN@RX7 zmdLhTw1pd}^VmU9TUeTo`EgU@-^&z4^3ZBnGt=q?Wf-@7CJ7tqIZ>%d$ z%cOIcw>e}dpvc;eM?uwgOT(ZCMMw_CiSKky3q39k!M8+rV-!oSpVZ)0X&T>2U;|iA z%ats{1GNo!Xx@nJNnOXllT>3P`Bij%gWf>EtW~ZtR;621zMsAu%!b;~(Ar=&|4!Kf zP2%M8_q7YHnodcF>|O)sxW$((TL>cVyPArQagY`fiy#wEn9vbhyW3ogx$%_$FmLz@Xo-o~K zBHl(MtVJ4qgm!|Go2+y3PCsN4E|p^2GclUn!ZTR=BkL~~EtL+{xeY?RY-yV(9K@{n zgiW{)i<+n(B}WIUR8ZSm-G{5hq`^#91F0q=Tx=mmxD|IHgXvCEHCr%d{<4sxR{9qz!>53ta!F|L`wzNi(nvSA!QsS`GNBvQA z!9OdXjoQ}EDmttUj9MPopn$=nqdW>IWHww1M}x?g45gX0se zPo53YN!%`exo5p605sEbGrd zQc$TiHL9~8OT>XNDTd~Ssx?dc%p=5C>dpveiq0@v7t!pDZfD!qSDg{qS~N&rQy7QM z3anp5ZiL4A`B6Qp{i` zo?Nzy2%(JQF^g2dQpp%@$pu~-x^&APqNshA{sOxSltuw$^p%SD9 ztFHvPd7bbICsQsu;MoMX=SD7wRYF|go@?4~qtnX%e$-4LV;JiXyYGsj3n|@1G_VqC z`)H7(!&wp>d@HGjTUqj|Bcl0{{0!l-#tE_#ge*rd|$19 zV8X;?(gu^KY#84g-WT2cfz&dyWxA`x^O7kHQFtj8|@zL z5$zeh9Ig%*#V5um#V5z7#HYrm#iz$-#An8f;}hbg!NtKP!KJ~n;IiQI;EG^*aAj~+ zaCLA^aBcAG;JV=Y;D+EvzF2chaBFZ|aC>k^aA$CHa9415a8Gb=a9?nL@Idfj@Ow{3 zPe&iuKTq-B9pO3g%IMtq&hV34{=ug{yY(M^?)Nv};uD|V>JLBjXWOLPe&LH>`tpw7 z_=~^%>+gK`Z~p%K|L~9h`fvYh@IU@@_K*Mf&;QT=oih~d8tfMA73>}C6YLxO@#p{K zPyc+o?RWUfSHJf4zxw94zWuj5eedu7>7W1Q2Rr}p-+%OzpZ?d+{(F~S{Bmxvd$32a zXRu$ee{eu>U~o`yaBxU4FE})qA1nwC3l0yC2#ySn3XTqr362ep3yu#K1}6lIf)j(2 zf|G+&f>VRjg42UDf-{4~!CArC!LNcP!8yUX!Fj>?!3DvE!9~GE;nHxU7vn3!i^EI8 zOT%U1W#Q%F+3_vmE#Xc4cQgMT8XXiJ932wPi*66^i;jwqjE{+rj?WJ-2rmrxihdO@ ziO-5Fl~bbQqlM84(W2K-Yeca-Y4ES-Y?!iJ|I3Y zJ~W;mA08hOFNhC|4~h?t4~gf+D}pD2Rl&2tf#E@1Kzm3yFFZ87HN1^$X%~ctg@(-xuE>KM+3^KNvp~KNLS4KN7EupN=1m zAB$JSkH=5M$HvF;-@l&cMXhda zjGHV}n{qeTdp;5LG$+)1Sdb}HhD$vM8?}h77j}}NAU}o9xZ@w^sL;*q(%N0kP3{v2 zcBZ1q&a-)L@O=w~Gx4E}I+sBvTy_H4pNptAq`6_f-Y)_cgfZT&o4v5y^4g2(y^;{; zh`UJaME&oU(zOoC($|*K<$TD}-zlZD?8(#LE~O*;JpHXwx-IuT-8H3j+eh)~zbU2L z+Q_HBSxVP-OvcX}rF23H^7Pk>^m_COc`B7<8uMB?i{^J(Y{5qTuNGNuo#v^(Ql!_T zk4Ld$bt9UMBCE?;p9*}I5qi0t)k^54a#kzC7s=AHM#?e8)IQV4m}OYc7M1U?M%9MI zNvF(2FSL3x{Xl~&$vp$wU*b^krH=ynpXVO4?BU&^^2BA(&*rX|F%tx@A6Jc6?a0-W)RcT-4 zES?t4Zt%Gh`9gZMT1)g#UM+Cag4xcd#^S6m zcVDoJNOQLGqDmfuCx#~I!IR-yLb~D|gVH12jjPt6g8UYqKy6GRA&Pb*(WylkTG3|Bqac?JqQ{D^Z2JOnY@ zX-nsOtd9rQx6#vC8+C3R;y~1NnQ@^H={=W#wbKOOPB^ZtolGbUpc9;UuyT^k5U1!g z_Knv)-@EX`J@Y^3r%#v1b9aJ1VKH7Vvmf#^K_9RfUuRe6pZTGyexIM1m?vtk4Wsb{ zf0~yJgDqzn4mSJg1&l89L){E+PrK-@czgP1ecQsG{!RCZ+tW@6Th2L(n9&%IAC>2y z+nG}Qf^z6;WR~spn^%L)f%KzaLhzQz2Fb?SipSuZ<6P2qkHh^gB_gyY2a#cfBV)GiXdq7aldEfgLxj`o2~0 zGb|3sQMJ`Q_}aNE8+Ilrl#NWC7Sher1AG*xIWQfKN;Fy6xjrzxIT3wvZZI75DurkI zgvY}4l}h26re5YbVMLItrHCOdHft0qM}bmnJFC&IfA(Wk@21Y{;ZBLm(w*;_n1$0fIm*6O!ct7klv54>NumsJ6EGB&m%_g<~Rfc_L8i$FvkV zN_$xODCDrdaea zr%w`t!d`Vvn;Dosm^ULr%b<=L%}^Efn?8jUIL=O}6?#_yQ@#Z3DrvSyBL&j(g-7E9=fyvavASa$;3=Q8fdMB3e~2d3rE}Ep&+}=?{7tEtUH&13T6%deIrPF_8sV{4r+db+MdV92A z1`u{GKGCRrEs<|Dmkqt>f!{-X(%_RS|y zn87!BDQHe)i)5lcTUmNjE)!J7=&z#~{Wiom?Pn_)i#G!en=|W*TdH$Elw>M1uJ&zC zR98oJH0PU$kd=r`2}4E=H%yb+*tYSUgr07gIhh9V#N=g7!wj8F|BrbAGesKgqLDCL zSL;tC=uRLQ(qwhu4vKj~;~k4VmLmpOj8Y{SbC|_q&4Pa=2LAUmK*@uF(!Vhz`}v@= zH&W@Ha2ZBn7*yPHd}tFl<2FGOK!RQis-l^CNUW3&wd|BlC#iirA$%&X*nC&JYWjEx zU0`e06xBLM$5|bKz-HbWi50(+SSc3|sWY=IyG5iK&~=pku4eC&tW{fjJS1;{F3YyuQ>J?soRAwCiJKgH6}S+fH+Ev%XOUgmA;eJ`kpqZbbPv#p+K zBKAKK$Y0RE!qtL=PX(b)zdn{F_{pWQo4iJF?xVwUJj&l_OS(jxE@TLN=#B~9xd=GkK0XmH90$ea2{DuO&1J^|n!TBQB7e(MY>+?KnMrA5a9F(cJ zAbp|hibB*NE5zep3@;=|U+C9ap?HwGG^S$pe23z-x$!bSTd)qNs3w_f$1zW@PwkLY z-*_i-TKE!PPl8K~GG?fM!%oAglZS)6HaEF!TamComATtOM}O9=t9%=j(?`v$Z}N}B z$%>XIdrd~xuHMTyC}cP*%w#A?zsSD2DAZAgMIk}@LRV#lJ`@=iB!t(KxUwLzo@7{% z6)jJ8c}8})3^hM$X>UP#!Cz4nYL(%4hZhp0FLZfU=!41d?=_EYVN8fUjmrueAGQ$x zrH!tLdAiFox+6%j5WOJ1=r1h_b(CUJNRYnJC0U^lM~VdvA@(#bE@-STDHe1^%+p<( z(H$;DT`ttpwlBAC43Y8ba)8oKw(PUs5dSikPRnB%?cAirN`$ z(M3Ue(f_I_)GEcl8eT|{zR=lOp${g-ziZP8A@(%RDrkJzQvByOx+3Q3F3#wVAjLxT zg7l(4vnbS2ibWwo`a)-9g+3f97Bqy|(>T4LvA(2O&=oOH_q2@ea4CLuxLOI)i~iK2 zP^%RGdUzp0`a-8g+3f97Bqy|(>S4^vA(2O&=oOHcVR|%xD<6pwZ$$9(u@B1qEM?8|8jUC zLHa_+WrcDn{+273zty>#7S@E?Q#rPv;^kOSA>o59UjCttvdDSL$7Ga8kYpi#L3;5Y zT@>ml$)b=TeW9bWLLZhS3o1hGsT^5QS$~o&D2tq@d_+chxFqfHh1^ToI#7^a{D&8X zS|#~6!*x=SzR+P=p${raRx!hsQn)>t1qGQ8Uz99lhLaXOPkMevdIVV(4IoJ00EZTZ zI?A#rBuHOqURLNslVw3hxILLe3Nq_amIZ0i^P~^XNDr4KM}1lik|2Ep98?r)mF2gG z7ZRi|bYNEKgUXT>&2Z%qZcpZbg3O06OBOZ5NsFE*y?;h}1X&ghAV}W;`xS*c%CaaV zNMC5*tk8!h%Yuw>doueJWY(iB3(}(JN$;JJ9xltT4OcNi`UcpmDAX#;?+h;_NMC5r ztk4IQB{Rz5$|2mI%pL`q4_}r{DuMK6=Kn%H$DijckigW&8$}wm%CE zwT;QH#Z|@^*B)uH11hENTH3Z%UF`H5MQNJUZPj%xuR@;s>qYqv`&7)VM;C*NdyRap zz|^W-wt3YRlZtyxuNIhEd9po=u9#HZV|t~))XI}>WOT)(;vUoL0#hqb=DY5SNyR;; zmkUg-JefngD<&29m|iL{wen;>%&wSJ++%vNz|_i!JRNP~Fw!qZNlQ}xNVp4IBX;p!#l_y)%cEzOP z9@8@grdFP8q1zRcihE2?7noXkvh_??Oe*d%Jyl?8<;fN~T`{S+$F#D*)XJ01WxHZh zagXWA0#hqbHo@(RNyR;;CkjlhJlQ;^D<&29m>w@Mwen<>o35Bt++$i%U=mLnLoCvu zD-IR(I36o-h#TU8;<4Fo74$eBEpTLfjLmARpvUn@fg|H%Z1!3OJ&uP992p;Dv(zf+ zaXeJu$oLqWjaEUAd#KvkH0~4-_~uKE`I3RnX(Ozrd04F*b{=f*!|x1&)l5 zvDso3^f>M)DWHVdnQ9>;A3j*O47*;W_G(7{P>RJ4vv7q|AIzm<9NSR_(T+D| zjKqV0xZC>2CGT=iX8CZGg~#5Qff67ZyRVFZ#!fBfS>3VRP{y)FMKS9cmOQIFmg~z{ zJ`t3$sf%UD?I@&TF*OPyB~x zNEmaSGK@J`cZ^qzgfZ7I!aTH7}V=#J}>c3iD3n*(&mb#Xhc);7%ny5m~fj;pmbbAax+E^5cs+KwfF zZZ`fxaJ3v1zGZ`~=PRpl0*yLSTu{bB+vxzKA1RbIMl9!-u^{O`4stBY8Y7nT%2;w4 zn_X4b7_ppN#*$0duqbPcSk5V9X|>ME8Y7k^Wh|}MSy^Mm@~biyzg(ih7rGgd0iW0oOikT^<*Z(dI>K03NV!HQw1ZKNZ3ABsGdBx6!pIZSQ?Bpv?ObEgHvjuDA9OdlvIK9Zop(=seEQ&-FMiSvzW3 zR)pM-`tK#N=4efSnwx6RX6}u7m9xx14e#~~N+LcuW286%*(zc_J(lauK^bs&5g(X=7I@Vc;~$memBVzG*8%P5 zq+Od1mFk_tbmwmW4Bc;`0C`!b0RK^{P@dJjLi-gQ{B{bEBXA0^Ye^90td0thJhy#G z1@_HYDVnNP1(IjCFDb!38F+Uw@121bm`w@(vm~<|rn}7cYDZ^Euv@9_Z7{~Av((nu zcIU7k1NIz_(0Isz!9BNxd5?BrRmKaLM;$WHMwi{&fyJr^=5hBD=DF>_t(bpO!n|8M za4Y6LN|<*Y4(x2Vv0;MIcPcWThuVR2%sqpD7*_TyVP40_6%0*l(-xTjtAzQzcHmab zdzCQ1+YX#d!+8E#3G>=^;8x6gmoUH64lK-^nCvOb;q7)X;fy{V^pqv=Ry$aRtz7pt z?O++Ua;<;U4whjn*Z0kKunb$drf(Er+=t+`4t(WV#p?ykwmA&Q%Cm~s3YZKFqxJsI zc-Xw-)piJs$5GB+7{n{>5OBgLLR~W&%<6U+IN5fN*JXowxg92Vsu{pb-2h%J0JxCC zONIJ0r|zfI=sSLo@p|fM+z8<&0esp1r|DGRmPX-)P6()ObNZ3~eEN#?pFlGGj8Tw0 zUm(eN$Xz`~<+*ME&lUi~>OnPzcKlv_svWNX{%qCfbg{x^6I^Li68Nf4D6A&FBCFGX zs!z`k-Ty$Srk~jn)iVXEtUkHB$?EfTH-M)KfMN9+pP`RjNk?(4UfXc-sh&$UMkkzFnh&wU}*TRc8YHXUf@TMiX-Cn?{h0h!b?l#~$ zT-w5xoUT^9L|@xIJmBr6+Q6l}WVEPRNtE1l$UREgeCF1S^zc~BPK1&(^_6n-4BS$b zE8(_jf_=HlgWX&LD{-!?4z;aV((;>p-RuHS;mKgQK!|U}0BkuapWOcFY`)nyUR&>d z{N*yBJzZ(j-~uLH?ANSurCVot zbHCbz<^Z>frQEl-TA$kK=gKLroa45x0bQ0lk#@*GpYyuD+6zwmARmDoxV`XoNdnwN zRMXvLUK0MkxIQ_)bm3ATaO0C>{l`Q>%|@-&I<0_47{`dJzoDD-ba9j}aW(d4j5438>rAbV(XFti`&Tj1MOFSM-5BjxTXbP#TJ9_|-*iK-zs# z#{Mw_H40APhQ!Ra)zs>Co$0xJ?#o>PdV^~X-RD|Tll*$E?9xf@NzzSD`E2~xq3(Js zmB?PFQH1D+w7~O45NwPZecfR`jnRI2H zVN7?wi-+XBNnI(}B~*4FvF=E9Uv0_iU{^CD`{L%!Ylqh{>lnXf9g!Jg8KpX|8@TFl z2Xwa@318Ne9Pft9@3rqV`v3*kfO$$K8LLQS<|) z*`#Y6#Zv2Kc*Tb|Id;7*7e1NM95_d2(k`;PufLI?OLkW;R>j}sdk3F3)rTdy=}I?) zZ9j0HK0(_a0wFg2C1cjQ9_c&%x|&R?Pu=awP#qGCct2g2duT<+o7O8c$#@q-I!8fK zd|`)6RQZBAJx<@_u?uOrY_8vZDRP2tc-8lKxM+@B;NUIY^YkEn?Pij=5^~obBtJn{ zz}lU$(nBtyj42Jxs##irwxz$Lj@Ic^1>kWS~FhE|@tnUe}^ zK$_ad6Ih;cUCf?9*QBSU#}BP#7c5Tq7@9Kp6AeHMhxo!^d1-bt!W6 z9vSnO=4RXOF*JYZ_MzqBF5809UMjn93)-QDbB6|Y*%s9Atb2Lg6?1ma@Kdb5*&f@5 zd(Qoalb3b2Wf^|g$`i6ajKoU4%`^zfla!feyEK>2d&at@F`Sb!fY2JpAJFraW^Fn* zC{9Qh9?M6cMEUg5S4PSwD_`TIqPq4_Z_kYLZ;{>(x;4v;2l>8jtwz~E zQKbHYd~T$)0T7KK$Ta;=cX9p)Ow|1jmsIOOm?I7rLDs83TsWp2WK(vSQ=}TULRa#Uq6I31xG-+!Z)0y zy^73&8xSBTY(p(y63qKS)}f5{B^m8Zk)4JV3RT|Vxp+9RwI;2$MP(WnK$iN) zQVl~H+fFfci@GYqydrD;a@#liW`&=3cNW_n;8PTo$E}zNlZ5DJ+6?7k+-%+KDI?pL zJgR$Pdw6(^&rJ#wxBqJ5qA#qiW7U?P!7Kwvs|vOAqm8K}?6HmTUZ>573rFYN-9}lA zK_%@?Rs=S469bD!rhU=Kv@d9<9XqM%Td;JD4kMJRU!mI8Ybxn!t%S=19yJ@O(&u+< z*rlb#Ne2je`XwcZ^D-RX4(W8!2qA#y+9bu_SlR4hek@?Sqq9Q|(Jv;IBk~S1yA!m1 z=59@`Y=*f^4a`bIjo3ugrQTscTEfDh{Wz4SvQa;I86x*h#w z?YM9{xNdK_a)9o*PHM;1Dz6-%JFXMkaecf}`7EP^pV8z1-El4IhARi?j_ZVWTF9D1Z*RkDj z31E!4j_HW2)FlNlMqEd?<7(}a0vIE%quOz`c1Zz@5!aFJxLUiU0LF;x2*cH`VaX~! z!r^>(0vRK=!`nG)?UVu-Bd)``;S#_YaV==a)z&EmGe>JD@AgTe78#^M6{8rv#H> z598K6ne#%^pN(z$;~WQ>^NBgFhu1vCbLMSo2&^q~{ zo}=<`z-soo}==x&wAmZ zRUfG5s66bwUU+C5AE@f6Z0t3h4PBP*_N~Td;u(bbR*5gdj!@a=x( z`>0IqIh?6tqioDf70&RCBig4l1Eu1l^03GM10Ja7s66bxzIZ6jc&X>8Jk0%nzytLh zm51Hd7Z0VW2=yG5hh5hT53Tl_dXCD&(0bva)qYdYQF&Mwe89Pto3&?CH$Ovcwcpfp zR36@2FFdr`Z|XTJ5AUuQ9@^|TRUMU$wZqw1Z}$5Ni>EOAP2ERj>K*cnMTvXV_jKTG z*f*t0!4`QT@2&7#eVt?P-!3TB}!+_zlSXUY#CIh_OE6F}C7w7RB}Gi_^gi@=uIL{*9u%9y^d9 zwfO5raXpUf)Z*G~q^Ge%Vo?U#Sk-$zb3jjelDpWc<-^U>>f`tY!YfnDX2@$@C}
hkFYHHFI`zv7gk`;J|Ug4J1Z|hsJSY0mUHHbQu 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

#l4bs1pv>QV^_!AV;;Y#r9Oy?-Z6 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
eGyt)8Wl&?jRS@^M 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%0Aj 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 }z7i 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

+=mx`0DH;ZBxz@6>Xg*k0^(@%l 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

j<^8FGb|q3#7KMxxe!}(d@fEj81erNVuztr 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

;&{%llWsPuLPx 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

+ + Bootsharp + +

+
+

+ nuget + codefactor + codecov + codeql +

+
+ +# Bootsharp + +Compile C# solution into single-file ES module with auto-generated JavaScript bindings and type definitions. + +![](https://raw.githubusercontent.com/elringus/bootsharp/main/docs/public/img/banner.png) + +Documentation will be added later. Please refer to [samples](https://github.com/elringus/bootsharp/tree/main/samples) for the time being. diff --git a/Samples/HelloWorld/Project/HelloWorld.csproj b/Samples/HelloWorld/Project/HelloWorld.csproj deleted file mode 100644 index ec4c5484..00000000 --- a/Samples/HelloWorld/Project/HelloWorld.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - net6.0 - - - - - - - diff --git a/Samples/HelloWorld/Project/Program.cs b/Samples/HelloWorld/Project/Program.cs deleted file mode 100644 index 89226ca9..00000000 --- a/Samples/HelloWorld/Project/Program.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using DotNetJS; -using Microsoft.JSInterop; - -namespace HelloWorld; - -public partial class Program -{ - // Entry point is invoked by the JavaScript runtime on boot. - public static void Main () - { - // Invoking 'dotnet.HelloWorld.GetHostName()' JavaScript function. - var hostName = GetHostName(); - // Writing to JavaScript host console. - Console.WriteLine($"Hello {hostName}, DotNet here!"); - } - - [JSFunction] // The interoperability code is auto-generated. - public static partial string GetHostName (); - - [JSInvokable] // The method is invoked from JavaScript. - public static string GetName () => "DotNet"; -} diff --git a/Samples/HelloWorld/README.md b/Samples/HelloWorld/README.md deleted file mode 100644 index bc632d76..00000000 --- a/Samples/HelloWorld/README.md +++ /dev/null @@ -1,7 +0,0 @@ -Example on consuming the library in various JavaScript environments. - -- Run `dotnet publish` in "Project" folder to compile the library -- Open `browser.html` in a web browser to test global script import -- Run `npx serve` under the samples directory and navigate to `HelloWorld/browser-es.html` to test module script import -- Run `node node.js` to test CommonJS module import -- Run `node node-es.mjs` to test ES module import (requires node v17 or later) diff --git a/Samples/HelloWorld/browser-es.html b/Samples/HelloWorld/browser-es.html deleted file mode 100644 index 5b2fe062..00000000 --- a/Samples/HelloWorld/browser-es.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - -Open console (Ctrl+Shift+I) to see the output. - - diff --git a/Samples/HelloWorld/browser.html b/Samples/HelloWorld/browser.html deleted file mode 100644 index 56facb3c..00000000 --- a/Samples/HelloWorld/browser.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - -Open console (Ctrl+Shift+I) to see the output. - - - - - diff --git a/Samples/HelloWorld/node-es.mjs b/Samples/HelloWorld/node-es.mjs deleted file mode 100644 index 2a918fc3..00000000 --- a/Samples/HelloWorld/node-es.mjs +++ /dev/null @@ -1,15 +0,0 @@ -// Example on consuming the library as ECMAScript module. -// Run 'node node-es.mjs' with node v17 or later to test. - -import dotnet from "./Project/bin/dotnet.js"; - -// Providing implementation for 'GetHostName' function declared in 'HelloWorld' C# assembly. -dotnet.HelloWorld.getHostName = () => "Node.js"; - -(async function () { - // Booting the DotNet runtime and invoking entry point. - await dotnet.boot(); - // Invoking 'GetName()' C# method defined in 'HelloWorld' assembly. - const guestName = dotnet.HelloWorld.getName(); - console.log(`Welcome, ${guestName}! Enjoy your ECMAScript module space.`); -})(); diff --git a/Samples/HelloWorld/node.js b/Samples/HelloWorld/node.js deleted file mode 100644 index 90e74c3a..00000000 --- a/Samples/HelloWorld/node.js +++ /dev/null @@ -1,15 +0,0 @@ -// Example on consuming the library as CommonJS module. -// Run 'node node.js' to test. - -const dotnet = require("./Project/bin/dotnet"); - -// Providing implementation for 'GetHostName' function declared in 'HelloWorld' C# assembly. -dotnet.HelloWorld.getHostName = () => "Node.js"; - -(async function () { - // Booting the DotNet runtime and invoking entry point. - await dotnet.boot(); - // Invoking 'GetName()' C# method defined in 'HelloWorld' assembly. - const guestName = dotnet.HelloWorld.getName(); - console.log(`Welcome, ${guestName}! Enjoy your CommonJS module space.`); -})(); diff --git a/Samples/React/backend/Backend.WASM/Backend.WASM.csproj b/Samples/React/backend/Backend.WASM/Backend.WASM.csproj deleted file mode 100644 index e4a11a56..00000000 --- a/Samples/React/backend/Backend.WASM/Backend.WASM.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - net6.0 - enable - false - - - - - - - - - - - diff --git a/Samples/React/backend/Backend.WASM/Program.cs b/Samples/React/backend/Backend.WASM/Program.cs deleted file mode 100644 index f1d2716c..00000000 --- a/Samples/React/backend/Backend.WASM/Program.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Backend; -using DotNetJS; - -[assembly: JSExport(new[] { typeof(IBackend) })] -[assembly: JSImport(new[] { typeof(IFrontend) }, namePattern: "Notify(.+)", nameReplacement: "On$1")] - -namespace Backend.WASM; - -public static class Program -{ - public static void Main () - { - _ = new JSBackend(new Backend(new Frontend.JSFrontend())); - } -} diff --git a/Samples/React/backend/Backend/Backend.cs b/Samples/React/backend/Backend/Backend.cs deleted file mode 100644 index 9aaef719..00000000 --- a/Samples/React/backend/Backend/Backend.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System; -using System.Threading; -using System.Threading.Tasks; - -namespace Backend; - -public class Backend : IBackend -{ - private readonly IFrontend frontend; - - private CancellationTokenSource? cts; - - public Backend (IFrontend frontend) - { - this.frontend = frontend; - } - - public void StartStress () - { - cts?.Cancel(); - cts = new CancellationTokenSource(); - _ = Stress(cts.Token); - } - - public void StopStress () - { - cts?.Cancel(); - } - - public bool IsStressing () - { - return !cts?.IsCancellationRequested ?? false; - } - - private async Task Stress (CancellationToken token) - { - while (!token.IsCancellationRequested) - { - var time = DateTime.Now; - ComputePrime(frontend.GetStressPower()); - frontend.NotifyStressComplete((DateTime.Now - time).Milliseconds); - await Task.Delay(1); - } - } - - private void ComputePrime (int n) - { - var count = 0; - var a = (long)2; - while (count < n) - { - var b = (long)2; - var prime = 1; - while (b * b <= a) - { - if (a % b == 0) - { - prime = 0; - break; - } - b++; - } - if (prime > 0) count++; - a++; - } - } -} diff --git a/Samples/React/backend/Backend/Backend.csproj b/Samples/React/backend/Backend/Backend.csproj deleted file mode 100644 index 58ef59a2..00000000 --- a/Samples/React/backend/Backend/Backend.csproj +++ /dev/null @@ -1,8 +0,0 @@ - - - - net6.0 - enable - - - diff --git a/Samples/React/backend/Backend/IBackend.cs b/Samples/React/backend/Backend/IBackend.cs deleted file mode 100644 index f24de8af..00000000 --- a/Samples/React/backend/Backend/IBackend.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Backend; - -public interface IBackend -{ - void StartStress (); - void StopStress (); - bool IsStressing (); -} diff --git a/Samples/React/backend/Backend/IFrontend.cs b/Samples/React/backend/Backend/IFrontend.cs deleted file mode 100644 index b951d9d2..00000000 --- a/Samples/React/backend/Backend/IFrontend.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Backend; - -public interface IFrontend -{ - int GetStressPower (); - void NotifyStressComplete (int time); -} diff --git a/Samples/React/backend/package.json b/Samples/React/backend/package.json deleted file mode 100644 index 2418ea27..00000000 --- a/Samples/React/backend/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "private": true, - "name": "backend", - "main": "Backend.WASM/bin/dotnet.js", - "types": "Backend.WASM/bin/dotnet.d.ts" -} diff --git a/Samples/React/package-lock.json b/Samples/React/package-lock.json deleted file mode 100644 index 0bf42208..00000000 --- a/Samples/React/package-lock.json +++ /dev/null @@ -1,31040 +0,0 @@ -{ - "name": "react-sample", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "react-sample", - "dependencies": { - "backend": "file:./backend", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "@types/jest": "^29.1.2", - "@types/react": "^18.0.21", - "@types/react-dom": "^18.0.6", - "react-scripts": "^5.0.1", - "typescript": "^4.8.4" - } - }, - "backend": {}, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/eslint-parser": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz", - "integrity": "sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==", - "dev": true, - "dependencies": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.11.0", - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@babel/eslint-parser/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.2", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dev": true, - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", - "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", - "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", - "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", - "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.2.tgz", - "integrity": "sha512-nkBH96IBmgKnbHQ5gXFrcmez+Z9S2EIDKDQGp005ROqBigc88Tky4rzCnlP/lnlj245dCEQl4/YyV0V1kYh5dw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/plugin-syntax-decorators": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", - "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", - "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", - "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", - "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", - "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", - "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-flow": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", - "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", - "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.19.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", - "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", - "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", - "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", - "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", - "dev": true, - "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@csstools/normalize.css": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", - "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==", - "dev": true - }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "dev": true, - "dependencies": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", - "dev": true, - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "dev": true, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/selector-specificity": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", - "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", - "dev": true, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2", - "postcss-selector-parser": "^6.0.10" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", - "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/console/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "dev": true, - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/core/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/core/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/core/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/environment/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/environment/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.3.1.tgz", - "integrity": "sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.2.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/fake-timers/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/globals/node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/reporters/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/schemas": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", - "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "dev": true, - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-result/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-result/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/transform/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/types": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", - "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "dependencies": { - "eslint-scope": "5.1.1" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.9.tgz", - "integrity": "sha512-7QV4cqUwhkDIHpMAZ9mestSJ2DMIotVTbOUwbiudhjCRTAWWKIaBecELiEM2LT3AHFeOAaHIcFu4dbXjX+9GBA==", - "dev": true, - "dependencies": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.3", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">= 10.13" - }, - "peerDependencies": { - "@types/webpack": "4.x || 5.x", - "react-refresh": ">=0.10.0 <1.0.0", - "sockjs-client": "^1.4.0", - "type-fest": ">=0.17.0 <4.0.0", - "webpack": ">=4.43.0 <6.0.0", - "webpack-dev-server": "3.x || 4.x", - "webpack-hot-middleware": "2.x", - "webpack-plugin-serve": "0.x || 1.x" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - }, - "sockjs-client": { - "optional": true - }, - "type-fest": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - }, - "webpack-hot-middleware": { - "optional": true - }, - "webpack-plugin-serve": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", - "dev": true - }, - "node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz", - "integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "dev": true, - "dependencies": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "dev": true, - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "dev": true, - "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.6" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@testing-library/dom": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz", - "integrity": "sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^4.2.0", - "aria-query": "^5.0.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@testing-library/react": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", - "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^8.5.0", - "@types/react-dom": "^18.0.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@testing-library/user-event": { - "version": "14.4.3", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.4.3.tgz", - "integrity": "sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==", - "dev": true, - "engines": { - "node": ">=12", - "npm": ">=6" - }, - "peerDependencies": { - "@testing-library/dom": ">=7.21.4" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.1.20", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", - "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", - "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", - "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true - }, - "node_modules/@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.2.3", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.3.tgz", - "integrity": "sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w==", - "dev": true, - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/jest/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@types/jest/node_modules/pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@types/jest/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.0.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", - "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "dev": true, - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", - "dev": true - }, - "node_modules/@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.14.tgz", - "integrity": "sha512-9Pj7abXoW1RSTcZaL2Hk6G2XyLMlp5ECdVC/Zf2p/KBjC3srijLGgRAXOBjtFrJoIrvxdTKyKDA14bEcbxBaWw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.44.0.tgz", - "integrity": "sha512-j5ULd7FmmekcyWeArx+i8x7sdRHzAtXTkmDPthE4amxZOWKFK7bomoJ4r7PJ8K7PoMzD16U8MmuZFAonr1ERvw==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.44.0", - "@typescript-eslint/type-utils": "5.44.0", - "@typescript-eslint/utils": "5.44.0", - "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.44.0.tgz", - "integrity": "sha512-j8GLemAySe8oUCgILdUaT66pemdWSYcwUYG2Pb71O119hCdvkU+4q8sUTbnDg8NhlZEzSWG2N1v4IxT1kEZrGg==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "5.44.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.44.0.tgz", - "integrity": "sha512-H7LCqbZnKqkkgQHaKLGC6KUjt3pjJDx8ETDqmwncyb6PuoigYajyAwBGz08VU/l86dZWZgI4zm5k2VaKqayYyA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.44.0", - "@typescript-eslint/types": "5.44.0", - "@typescript-eslint/typescript-estree": "5.44.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.44.0.tgz", - "integrity": "sha512-2pKml57KusI0LAhgLKae9kwWeITZ7IsZs77YxyNyIVOwQ1kToyXRaJLl+uDEXzMN5hnobKUOo2gKntK9H1YL8g==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.44.0", - "@typescript-eslint/visitor-keys": "5.44.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.44.0.tgz", - "integrity": "sha512-A1u0Yo5wZxkXPQ7/noGkRhV4J9opcymcr31XQtOzcc5nO/IHN2E2TPMECKWYpM3e6olWEM63fq/BaL1wEYnt/w==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.44.0", - "@typescript-eslint/utils": "5.44.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.44.0.tgz", - "integrity": "sha512-Tp+zDnHmGk4qKR1l+Y1rBvpjpm5tGXX339eAlRBDg+kgZkz9Bw+pqi4dyseOZMsGuSH69fYfPJCBKBrbPCxYFQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.44.0.tgz", - "integrity": "sha512-M6Jr+RM7M5zeRj2maSfsZK2660HKAJawv4Ud0xT+yauyvgrsHu276VtXlKDFnEmhG+nVEd0fYZNXGoAgxwDWJw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.44.0", - "@typescript-eslint/visitor-keys": "5.44.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.44.0.tgz", - "integrity": "sha512-fMzA8LLQ189gaBjS0MZszw5HBdZgVwxVFShCO3QN+ws3GlPkcy9YuS3U4wkT6su0w+Byjq3mS3uamy9HE4Yfjw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.44.0", - "@typescript-eslint/types": "5.44.0", - "@typescript-eslint/typescript-estree": "5.44.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.44.0.tgz", - "integrity": "sha512-a48tLG8/4m62gPFbJ27FxwCOqPKxsb8KC3HkmYoq2As/4YyjQl1jDbRr1s63+g4FS/iIehjmN3L5UjmKva1HzQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.44.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-node/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", - "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", - "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "dev": true, - "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-jest/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/babel-plugin-named-asset-import": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "dev": true, - "peerDependencies": { - "@babel/core": "^7.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", - "dev": true - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" - } - }, - "node_modules/backend": { - "resolved": "backend", - "link": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "node_modules/bfj": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", - "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.5", - "check-types": "^11.1.1", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/bonjour-service": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", - "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001434", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", - "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/check-types": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.2.tgz", - "integrity": "sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA==", - "dev": true - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.2.tgz", - "integrity": "sha512-lVZdhvbEudris15CLytp2u6Y0p5EKfztae9Fqa189MfNmln9F33XuH69v5fvNfiRN5/0eAUz2yJL3mo+nhaRKg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "node_modules/clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/coa/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/coa/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/coa/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/core-js": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", - "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", - "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", - "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-blank-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-has-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-loader": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.2.tgz", - "integrity": "sha512-oqGbbVcBJkm8QwmnNzrFrWTnudnRZC+1eXikLJl0n4ljcfotgRifpg2a1lKy8jTrc4/d9A/ap1GFq1jDKG7J+Q==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.18", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "dev": true, - "dependencies": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "dev": true, - "bin": { - "css-prefers-color-scheme": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssdb": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.1.0.tgz", - "integrity": "sha512-Sd99PrFgx28ez4GHu8yoQIufc/70h9oYowDf4EjeIKi8mac9whxRjhM3IaMr6EllP6KKKWtJrMfN6C7T9tIWvQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.14", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", - "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", - "dev": true, - "dependencies": { - "cssnano-preset-default": "^5.2.13", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", - "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.3", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.1", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/csso/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz", - "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==", - "dev": true - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-equal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.1.0.tgz", - "integrity": "sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dev": true, - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "dev": true, - "dependencies": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "node_modules/diff-sequences": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz", - "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "node_modules/dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "dev": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-accessibility-api": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz", - "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==", - "dev": true - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/ejs": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", - "dev": true, - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dev": true, - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "node_modules/es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", - "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-react-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@babel/plugin-syntax-flow": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.9", - "eslint": "^8.1.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.31.11", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz", - "integrity": "sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-testing-library": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.9.1.tgz", - "integrity": "sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "^5.13.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6" - }, - "peerDependencies": { - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "dev": true, - "dependencies": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", - "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.3.1.tgz", - "integrity": "sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.3.1", - "jest-get-type": "^29.2.0", - "jest-matcher-utils": "^29.3.1", - "jest-message-util": "^29.3.1", - "jest-util": "^29.3.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "node_modules/harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "dev": true, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dev": true, - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", - "dev": true - }, - "node_modules/identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "dev": true, - "dependencies": { - "harmony-reflect": "^1.4.6" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "9.0.16", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", - "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", - "dev": true, - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "dev": true, - "dependencies": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-circus/node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "dev": true, - "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-cli/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-cli/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-cli/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-config/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-config/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-config/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-diff": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.3.1.tgz", - "integrity": "sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.3.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-each/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-environment-jsdom/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-environment-node/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.2.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", - "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-haste-map/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-haste-map/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-jasmine2/node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "dev": true, - "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-leak-detector/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz", - "integrity": "sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.3.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/jest-message-util": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.3.1.tgz", - "integrity": "sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.3.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.3.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-mock/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-mock/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-resolve/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-resolve/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "dev": true, - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-runner/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-runtime/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-snapshot/node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", - "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.3.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-validate/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watch-typeahead": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", - "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^28.0.0", - "jest-watcher": "^28.0.0", - "slash": "^4.0.0", - "string-length": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "jest": "^27.0.0 || ^28.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dev": true, - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dev": true, - "dependencies": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/jest-watch-typeahead/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", - "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", - "dev": true, - "dependencies": { - "char-regex": "^2.0.0", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", - "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", - "dev": true, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-watcher/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-sdsl": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", - "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", - "dev": true, - "bin": { - "lz-string": "bin/bin.js" - } - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.4.12", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", - "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.0.tgz", - "integrity": "sha512-auqtVo8KhTScMsba7MbijqZTfibbXiBNlPAQbsVt7enQfcDYLdgG57eGxMqwVU3mfeWANY4F1wUg+rMF+ycZgw==", - "dev": true, - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", - "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "dev": true, - "dependencies": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.4.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", - "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-browser-comments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "browserslist": ">=4", - "postcss": ">=8" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-custom-properties": { - "version": "12.1.10", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.10.tgz", - "integrity": "sha512-U3BHdgrYhCrwTVcByFHs9EOBoqcKq4Lf3kXwbTi4hhq0qWhl/pDWq2THbv/ICX/Fl9KqeHBb8OVrTf2OaYF07A==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-flexbugs-fixes": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", - "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", - "dev": true, - "peerDependencies": { - "postcss": "^8.1.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "dev": true, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "dev": true, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "dev": true, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", - "dev": true, - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.3.3" - } - }, - "node_modules/postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "dev": true, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", - "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dev": true, - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nested": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", - "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "dev": true, - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-normalize": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", - "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", - "dev": true, - "dependencies": { - "@csstools/normalize.css": "*", - "postcss-browser-comments": "^4", - "sanitize.css": "*" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "browserslist": ">= 4", - "postcss": ">= 8" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dev": true, - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-opacity-percentage": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", - "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==", - "dev": true, - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "engines": { - "node": "^12 || ^14 || >=16" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dev": true, - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "dev": true, - "peerDependencies": { - "postcss": "^8" - } - }, - "node_modules/postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-preset-env": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", - "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", - "dev": true, - "dependencies": { - "@csstools/postcss-cascade-layers": "^1.1.1", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.13", - "browserslist": "^4.21.4", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.1.0", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.10", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.2.0", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", - "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "dev": true, - "peerDependencies": { - "postcss": "^8.0.3" - } - }, - "node_modules/postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/postcss-svgo/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/postcss-svgo/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/postcss-svgo/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-svgo/node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dev": true, - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dev": true, - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-app-polyfill": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", - "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", - "dev": true, - "dependencies": { - "core-js": "^3.19.2", - "object-assign": "^4.1.1", - "promise": "^8.1.0", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.9", - "whatwg-fetch": "^3.6.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", - "dev": true - }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-scripts": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", - "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@svgr/webpack": "^5.5.0", - "babel-jest": "^27.4.2", - "babel-loader": "^8.2.3", - "babel-plugin-named-asset-import": "^0.3.8", - "babel-preset-react-app": "^10.0.1", - "bfj": "^7.0.2", - "browserslist": "^4.18.1", - "camelcase": "^6.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.5.1", - "css-minimizer-webpack-plugin": "^3.2.0", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.1", - "eslint-webpack-plugin": "^3.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "html-webpack-plugin": "^5.5.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.3", - "jest-resolve": "^27.4.2", - "jest-watch-typeahead": "^1.0.0", - "mini-css-extract-plugin": "^2.4.5", - "postcss": "^8.4.4", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", - "postcss-normalize": "^10.0.1", - "postcss-preset-env": "^7.0.1", - "prompts": "^2.4.2", - "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.1", - "react-refresh": "^0.11.0", - "resolve": "^1.20.0", - "resolve-url-loader": "^4.0.0", - "sass-loader": "^12.3.0", - "semver": "^7.3.5", - "source-map-loader": "^3.0.0", - "style-loader": "^3.3.1", - "tailwindcss": "^3.0.2", - "terser-webpack-plugin": "^5.2.5", - "webpack": "^5.64.4", - "webpack-dev-server": "^4.6.0", - "webpack-manifest-plugin": "^4.0.2", - "workbox-webpack-plugin": "^6.4.1" - }, - "bin": { - "react-scripts": "bin/react-scripts.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - }, - "peerDependencies": { - "react": ">= 16", - "typescript": "^3.2.1 || ^4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "dev": true, - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=8.9" - }, - "peerDependencies": { - "rework": "1.0.1", - "rework-visit": "1.0.0" - }, - "peerDependenciesMeta": { - "rework": { - "optional": true - }, - "rework-visit": { - "optional": true - } - } - }, - "node_modules/resolve-url-loader/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sanitize.css": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", - "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", - "dev": true - }, - "node_modules/sass-loader": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", - "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", - "dev": true, - "dependencies": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", - "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "dev": true - }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "node_modules/svgo/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/svgo/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/tailwindcss": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz", - "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==", - "dev": true, - "dependencies": { - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "detective": "^5.2.1", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "lilconfig": "^2.0.6", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.18", - "postcss-import": "^14.1.0", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.4", - "postcss-nested": "6.0.0", - "postcss-selector-parser": "^6.0.10", - "postcss-value-parser": "^4.2.0", - "quick-lru": "^5.1.1", - "resolve": "^1.22.1" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "dev": true, - "dependencies": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", - "dev": true - }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", - "dev": true - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-manifest-plugin": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", - "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", - "dev": true, - "dependencies": { - "tapable": "^2.0.0", - "webpack-sources": "^2.2.0" - }, - "engines": { - "node": ">=12.22.0" - }, - "peerDependencies": { - "webpack": "^4.44.2 || ^5.47.0" - } - }, - "node_modules/webpack-manifest-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workbox-background-sync": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", - "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", - "dev": true, - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-broadcast-update": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", - "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", - "dev": true, - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-build": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", - "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", - "dev": true, - "dependencies": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.5.4", - "workbox-broadcast-update": "6.5.4", - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-google-analytics": "6.5.4", - "workbox-navigation-preload": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-range-requests": "6.5.4", - "workbox-recipes": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4", - "workbox-streams": "6.5.4", - "workbox-sw": "6.5.4", - "workbox-window": "6.5.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "dev": true, - "dependencies": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "ajv": ">=8" - } - }, - "node_modules/workbox-build/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/workbox-build/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/workbox-build/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/workbox-build/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dev": true, - "dependencies": { - "whatwg-url": "^7.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/workbox-build/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/workbox-build/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/workbox-build/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/workbox-cacheable-response": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", - "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", - "dev": true, - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-core": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", - "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==", - "dev": true - }, - "node_modules/workbox-expiration": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", - "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", - "dev": true, - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-google-analytics": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", - "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", - "dev": true, - "dependencies": { - "workbox-background-sync": "6.5.4", - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "node_modules/workbox-navigation-preload": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", - "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", - "dev": true, - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-precaching": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", - "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", - "dev": true, - "dependencies": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "node_modules/workbox-range-requests": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", - "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", - "dev": true, - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-recipes": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", - "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", - "dev": true, - "dependencies": { - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "node_modules/workbox-routing": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", - "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", - "dev": true, - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-strategies": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", - "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", - "dev": true, - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-streams": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", - "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", - "dev": true, - "dependencies": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4" - } - }, - "node_modules/workbox-sw": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", - "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==", - "dev": true - }, - "node_modules/workbox-webpack-plugin": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz", - "integrity": "sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "^2.1.0", - "pretty-bytes": "^5.4.1", - "upath": "^1.2.0", - "webpack-sources": "^1.4.3", - "workbox-build": "6.5.4" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.9.0" - } - }, - "node_modules/workbox-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/workbox-window": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", - "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", - "dev": true, - "dependencies": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.5.4" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", - "dev": true - }, - "@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/eslint-parser": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz", - "integrity": "sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==", - "dev": true, - "requires": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", - "dev": true, - "requires": { - "@babel/types": "^7.20.2", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", - "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", - "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "dev": true, - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dev": true, - "requires": { - "@babel/types": "^7.20.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", - "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - } - }, - "@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", - "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", - "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.2.tgz", - "integrity": "sha512-nkBH96IBmgKnbHQ5gXFrcmez+Z9S2EIDKDQGp005ROqBigc88Tky4rzCnlP/lnlj245dCEQl4/YyV0V1kYh5dw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/plugin-syntax-decorators": "^7.19.0" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", - "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.1" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", - "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", - "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", - "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", - "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", - "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-flow": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", - "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", - "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", - "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", - "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", - "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", - "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - } - }, - "@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - } - }, - "@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.10" - } - }, - "@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", - "dev": true, - "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@csstools/normalize.css": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", - "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==", - "dev": true - }, - "@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "dev": true, - "requires": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - } - }, - "@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", - "dev": true, - "requires": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - } - }, - "@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "dev": true, - "requires": {} - }, - "@csstools/selector-specificity": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", - "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", - "dev": true, - "requires": {} - }, - "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "globals": { - "version": "13.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", - "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/expect-utils": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.3.1.tgz", - "integrity": "sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g==", - "dev": true, - "requires": { - "jest-get-type": "^29.2.0" - } - }, - "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true - }, - "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - } - } - }, - "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/schemas": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", - "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - } - }, - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/types": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", - "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", - "dev": true, - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "requires": { - "eslint-scope": "5.1.1" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.9.tgz", - "integrity": "sha512-7QV4cqUwhkDIHpMAZ9mestSJ2DMIotVTbOUwbiudhjCRTAWWKIaBecELiEM2LT3AHFeOAaHIcFu4dbXjX+9GBA==", - "dev": true, - "requires": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.3", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - } - }, - "@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - } - } - }, - "@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", - "dev": true - }, - "@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "dev": true - }, - "@sinonjs/commons": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz", - "integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "dev": true, - "requires": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "dev": true - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "dev": true - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "dev": true - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "dev": true - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "dev": true - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "dev": true - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "dev": true - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "dev": true - }, - "@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "dev": true, - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - } - }, - "@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "dev": true, - "requires": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "dev": true, - "requires": { - "@babel/types": "^7.12.6" - } - }, - "@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - } - }, - "@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - } - }, - "@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - } - }, - "@testing-library/dom": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz", - "integrity": "sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^4.2.0", - "aria-query": "^5.0.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", - "pretty-format": "^27.0.2" - } - }, - "@testing-library/react": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", - "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^8.5.0", - "@types/react-dom": "^18.0.0" - } - }, - "@testing-library/user-event": { - "version": "14.4.3", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.4.3.tgz", - "integrity": "sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==", - "dev": true, - "requires": {} - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true - }, - "@types/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.20", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", - "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", - "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dev": true, - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/eslint": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", - "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true - }, - "@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "29.2.3", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.3.tgz", - "integrity": "sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w==", - "dev": true, - "requires": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "dev": true, - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - } - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", - "dev": true - }, - "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "18.0.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", - "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "dev": true, - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", - "dev": true - }, - "@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "17.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.14.tgz", - "integrity": "sha512-9Pj7abXoW1RSTcZaL2Hk6G2XyLMlp5ECdVC/Zf2p/KBjC3srijLGgRAXOBjtFrJoIrvxdTKyKDA14bEcbxBaWw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.44.0.tgz", - "integrity": "sha512-j5ULd7FmmekcyWeArx+i8x7sdRHzAtXTkmDPthE4amxZOWKFK7bomoJ4r7PJ8K7PoMzD16U8MmuZFAonr1ERvw==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.44.0", - "@typescript-eslint/type-utils": "5.44.0", - "@typescript-eslint/utils": "5.44.0", - "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.44.0.tgz", - "integrity": "sha512-j8GLemAySe8oUCgILdUaT66pemdWSYcwUYG2Pb71O119hCdvkU+4q8sUTbnDg8NhlZEzSWG2N1v4IxT1kEZrGg==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.44.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.44.0.tgz", - "integrity": "sha512-H7LCqbZnKqkkgQHaKLGC6KUjt3pjJDx8ETDqmwncyb6PuoigYajyAwBGz08VU/l86dZWZgI4zm5k2VaKqayYyA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.44.0", - "@typescript-eslint/types": "5.44.0", - "@typescript-eslint/typescript-estree": "5.44.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.44.0.tgz", - "integrity": "sha512-2pKml57KusI0LAhgLKae9kwWeITZ7IsZs77YxyNyIVOwQ1kToyXRaJLl+uDEXzMN5hnobKUOo2gKntK9H1YL8g==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.44.0", - "@typescript-eslint/visitor-keys": "5.44.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.44.0.tgz", - "integrity": "sha512-A1u0Yo5wZxkXPQ7/noGkRhV4J9opcymcr31XQtOzcc5nO/IHN2E2TPMECKWYpM3e6olWEM63fq/BaL1wEYnt/w==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "5.44.0", - "@typescript-eslint/utils": "5.44.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.44.0.tgz", - "integrity": "sha512-Tp+zDnHmGk4qKR1l+Y1rBvpjpm5tGXX339eAlRBDg+kgZkz9Bw+pqi4dyseOZMsGuSH69fYfPJCBKBrbPCxYFQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.44.0.tgz", - "integrity": "sha512-M6Jr+RM7M5zeRj2maSfsZK2660HKAJawv4Ud0xT+yauyvgrsHu276VtXlKDFnEmhG+nVEd0fYZNXGoAgxwDWJw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.44.0", - "@typescript-eslint/visitor-keys": "5.44.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.44.0.tgz", - "integrity": "sha512-fMzA8LLQ189gaBjS0MZszw5HBdZgVwxVFShCO3QN+ws3GlPkcy9YuS3U4wkT6su0w+Byjq3mS3uamy9HE4Yfjw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.44.0", - "@typescript-eslint/types": "5.44.0", - "@typescript-eslint/typescript-estree": "5.44.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.44.0.tgz", - "integrity": "sha512-a48tLG8/4m62gPFbJ27FxwCOqPKxsb8KC3HkmYoq2As/4YyjQl1jDbRr1s63+g4FS/iIehjmN3L5UjmKva1HzQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.44.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "requires": {} - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "address": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", - "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", - "dev": true - }, - "adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - } - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, - "requires": { - "deep-equal": "^2.0.5" - } - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "axe-core": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", - "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==", - "dev": true - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "dev": true, - "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - } - }, - "babel-plugin-named-asset-import": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "dev": true, - "requires": {} - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", - "dev": true - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", - "dev": true, - "requires": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" - } - }, - "backend": { - "version": "file:backend" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "bfj": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", - "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "check-types": "^11.1.1", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "bonjour-service": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", - "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", - "dev": true, - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001434", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", - "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==", - "dev": true - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "check-types": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.2.tgz", - "integrity": "sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "ci-info": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.2.tgz", - "integrity": "sha512-lVZdhvbEudris15CLytp2u6Y0p5EKfztae9Fqa189MfNmln9F33XuH69v5fvNfiRN5/0eAUz2yJL3mo+nhaRKg==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - }, - "common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "core-js": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", - "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==", - "dev": true - }, - "core-js-compat": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", - "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", - "dev": true, - "requires": { - "browserslist": "^4.21.4" - } - }, - "core-js-pure": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", - "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, - "css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "dev": true, - "requires": {} - }, - "css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "css-loader": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.2.tgz", - "integrity": "sha512-oqGbbVcBJkm8QwmnNzrFrWTnudnRZC+1eXikLJl0n4ljcfotgRifpg2a1lKy8jTrc4/d9A/ap1GFq1jDKG7J+Q==", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.18", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - } - }, - "css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "dev": true, - "requires": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "dev": true, - "requires": {} - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "cssdb": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.1.0.tgz", - "integrity": "sha512-Sd99PrFgx28ez4GHu8yoQIufc/70h9oYowDf4EjeIKi8mac9whxRjhM3IaMr6EllP6KKKWtJrMfN6C7T9tIWvQ==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "5.1.14", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", - "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", - "dev": true, - "requires": { - "cssnano-preset-default": "^5.2.13", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-default": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", - "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", - "dev": true, - "requires": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.3", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.1", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - } - }, - "cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "requires": {} - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "requires": { - "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decimal.js": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz", - "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "deep-equal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.1.0.tgz", - "integrity": "sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.8" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "requires": { - "execa": "^5.0.0" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dev": true, - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "dev": true, - "requires": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - } - }, - "didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "diff-sequences": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz", - "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "dev": true, - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-accessibility-api": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz", - "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==", - "dev": true - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "ejs": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", - "dev": true, - "requires": { - "jake": "^10.8.5" - } - }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "dev": true - }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dev": true, - "requires": { - "stackframe": "^1.3.4" - } - }, - "es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - } - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz", - "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "globals": { - "version": "13.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", - "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "eslint-config-react-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", - "dev": true, - "requires": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dev": true, - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "dev": true, - "requires": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - } - }, - "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "^5.0.0" - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" - }, - "dependencies": { - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-plugin-react": { - "version": "7.31.11", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz", - "integrity": "sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==", - "dev": true, - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "requires": {} - }, - "eslint-plugin-testing-library": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.9.1.tgz", - "integrity": "sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "^5.13.0" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "dev": true, - "requires": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expect": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.3.1.tgz", - "integrity": "sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA==", - "dev": true, - "requires": { - "@jest/expect-utils": "^29.3.1", - "jest-get-type": "^29.2.0", - "jest-matcher-utils": "^29.3.1", - "jest-message-util": "^29.3.1", - "jest-util": "^29.3.1" - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - } - } - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dev": true, - "requires": { - "duplexer": "^0.1.2" - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - } - }, - "html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - }, - "idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", - "dev": true - }, - "identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "dev": true, - "requires": { - "harmony-reflect": "^1.4.6" - } - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "immer": { - "version": "9.0.16", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", - "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "dev": true - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "dev": true - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", - "dev": true, - "requires": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - } - }, - "jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "dev": true, - "requires": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - } - }, - "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true - }, - "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "dev": true, - "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "dev": true, - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-diff": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.3.1.tgz", - "integrity": "sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.3.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "dev": true, - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - } - } - }, - "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-get-type": { - "version": "29.2.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", - "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true - }, - "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "dev": true, - "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - } - } - }, - "jest-matcher-utils": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz", - "integrity": "sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.3.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "dev": true, - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - } - } - }, - "jest-message-util": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.3.1.tgz", - "integrity": "sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.3.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.3.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "dev": true, - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - } - } - }, - "jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true - }, - "jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true - }, - "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-util": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", - "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", - "dev": true, - "requires": { - "@jest/types": "^29.3.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - } - } - }, - "jest-watch-typeahead": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", - "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^28.0.0", - "jest-watcher": "^28.0.0", - "slash": "^4.0.0", - "string-length": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } - } - }, - "@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true - }, - "jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } - } - }, - "jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true - }, - "jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dev": true, - "requires": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "dependencies": { - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - }, - "string-length": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", - "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", - "dev": true, - "requires": { - "char-regex": "^2.0.0", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "char-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", - "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", - "dev": true - } - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - } - } - } - } - }, - "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - } - } - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-sdsl": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", - "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "dev": true - }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true - }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", - "dev": true - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true - }, - "memfs": { - "version": "3.4.12", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", - "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", - "dev": true, - "requires": { - "fs-monkey": "^1.0.3" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mini-css-extract-plugin": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.0.tgz", - "integrity": "sha512-auqtVo8KhTScMsba7MbijqZTfibbXiBNlPAQbsVt7enQfcDYLdgG57eGxMqwVU3mfeWANY4F1wUg+rMF+ycZgw==", - "dev": true, - "requires": { - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "nwsapi": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", - "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "dev": true, - "requires": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dev": true, - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - } - } - }, - "postcss": { - "version": "8.4.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", - "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", - "dev": true, - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-browser-comments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", - "dev": true, - "requires": {} - }, - "postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-properties": { - "version": "12.1.10", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.10.tgz", - "integrity": "sha512-U3BHdgrYhCrwTVcByFHs9EOBoqcKq4Lf3kXwbTi4hhq0qWhl/pDWq2THbv/ICX/Fl9KqeHBb8OVrTf2OaYF07A==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "dev": true, - "requires": {} - }, - "postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "requires": {} - }, - "postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, - "requires": {} - }, - "postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, - "requires": {} - }, - "postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-flexbugs-fixes": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", - "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", - "dev": true, - "requires": {} - }, - "postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "dev": true, - "requires": {} - }, - "postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "dev": true, - "requires": {} - }, - "postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - }, - "postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "dev": true, - "requires": {} - }, - "postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", - "dev": true, - "requires": { - "camelcase-css": "^2.0.1" - } - }, - "postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "requires": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - } - }, - "postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - } - }, - "postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "dev": true, - "requires": {} - }, - "postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "dev": true, - "requires": {} - }, - "postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - } - }, - "postcss-merge-rules": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", - "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dev": true, - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-nested": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", - "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "dev": true, - "requires": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-normalize": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", - "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", - "dev": true, - "requires": { - "@csstools/normalize.css": "*", - "postcss-browser-comments": "^4", - "sanitize.css": "*" - } - }, - "postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, - "requires": {} - }, - "postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dev": true, - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-opacity-percentage": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", - "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==", - "dev": true - }, - "postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dev": true, - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "dev": true, - "requires": {} - }, - "postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-preset-env": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", - "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", - "dev": true, - "requires": { - "@csstools/postcss-cascade-layers": "^1.1.1", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.13", - "browserslist": "^4.21.4", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.1.0", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.10", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.2.0", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-reduce-initial": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", - "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "dev": true, - "requires": {} - }, - "postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - } - } - } - }, - "postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, - "pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dev": true, - "requires": { - "asap": "~2.0.6" - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - } - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - } - } - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dev": true, - "requires": { - "performance-now": "^2.1.0" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-app-polyfill": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", - "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", - "dev": true, - "requires": { - "core-js": "^3.19.2", - "object-assign": "^4.1.1", - "promise": "^8.1.0", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.9", - "whatwg-fetch": "^3.6.2" - } - }, - "react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "dev": true - } - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", - "dev": true - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", - "dev": true - }, - "react-scripts": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", - "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", - "dev": true, - "requires": { - "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@svgr/webpack": "^5.5.0", - "babel-jest": "^27.4.2", - "babel-loader": "^8.2.3", - "babel-plugin-named-asset-import": "^0.3.8", - "babel-preset-react-app": "^10.0.1", - "bfj": "^7.0.2", - "browserslist": "^4.18.1", - "camelcase": "^6.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.5.1", - "css-minimizer-webpack-plugin": "^3.2.0", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.1", - "eslint-webpack-plugin": "^3.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "fsevents": "^2.3.2", - "html-webpack-plugin": "^5.5.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.3", - "jest-resolve": "^27.4.2", - "jest-watch-typeahead": "^1.0.0", - "mini-css-extract-plugin": "^2.4.5", - "postcss": "^8.4.4", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", - "postcss-normalize": "^10.0.1", - "postcss-preset-env": "^7.0.1", - "prompts": "^2.4.2", - "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.1", - "react-refresh": "^0.11.0", - "resolve": "^1.20.0", - "resolve-url-loader": "^4.0.0", - "sass-loader": "^12.3.0", - "semver": "^7.3.5", - "source-map-loader": "^3.0.0", - "style-loader": "^3.3.1", - "tailwindcss": "^3.0.2", - "terser-webpack-plugin": "^5.2.5", - "webpack": "^5.64.4", - "webpack-dev-server": "^4.6.0", - "webpack-manifest-plugin": "^4.0.2", - "workbox-webpack-plugin": "^6.4.1" - } - }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "requires": { - "pify": "^2.3.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dev": true, - "requires": { - "minimatch": "^3.0.5" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "dev": true, - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", - "dev": true - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true - }, - "renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "dependencies": { - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - } - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sanitize.css": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", - "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", - "dev": true - }, - "sass-loader": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", - "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", - "dev": true, - "requires": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "requires": { - "node-forge": "^1" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "source-map-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", - "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.1" - } - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - } - } - }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true, - "requires": {} - }, - "stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "dev": true - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - }, - "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - } - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "tailwindcss": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz", - "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==", - "dev": true, - "requires": { - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "detective": "^5.2.1", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "lilconfig": "^2.0.6", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.18", - "postcss-import": "^14.1.0", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.4", - "postcss-nested": "6.0.0", - "postcss-selector-parser": "^6.0.10", - "postcss-value-parser": "^4.2.0", - "quick-lru": "^5.1.1", - "resolve": "^1.22.1" - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "dev": true - }, - "tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "dev": true, - "requires": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "dependencies": { - "type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "dev": true - } - } - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "dependencies": { - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true - } - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", - "dev": true - }, - "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - } - } - }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", - "dev": true - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } - } - }, - "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", - "dev": true, - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "dependencies": { - "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, - "requires": {} - } - } - }, - "webpack-manifest-plugin": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", - "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", - "dev": true, - "requires": { - "tapable": "^2.0.0", - "webpack-sources": "^2.2.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } - } - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - } - }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "workbox-background-sync": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", - "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", - "dev": true, - "requires": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "workbox-broadcast-update": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", - "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-build": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", - "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", - "dev": true, - "requires": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.5.4", - "workbox-broadcast-update": "6.5.4", - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-google-analytics": "6.5.4", - "workbox-navigation-preload": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-range-requests": "6.5.4", - "workbox-recipes": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4", - "workbox-streams": "6.5.4", - "workbox-sw": "6.5.4", - "workbox-window": "6.5.4" - }, - "dependencies": { - "@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "dev": true, - "requires": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - } - }, - "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dev": true, - "requires": { - "whatwg-url": "^7.0.0" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "workbox-cacheable-response": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", - "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-core": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", - "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==", - "dev": true - }, - "workbox-expiration": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", - "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", - "dev": true, - "requires": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "workbox-google-analytics": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", - "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", - "dev": true, - "requires": { - "workbox-background-sync": "6.5.4", - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-navigation-preload": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", - "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-precaching": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", - "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", - "dev": true, - "requires": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-range-requests": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", - "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-recipes": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", - "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", - "dev": true, - "requires": { - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-routing": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", - "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-strategies": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", - "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-streams": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", - "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", - "dev": true, - "requires": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4" - } - }, - "workbox-sw": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", - "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==", - "dev": true - }, - "workbox-webpack-plugin": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz", - "integrity": "sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "^2.1.0", - "pretty-bytes": "^5.4.1", - "upath": "^1.2.0", - "webpack-sources": "^1.4.3", - "workbox-build": "6.5.4" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - } - } - }, - "workbox-window": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", - "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", - "dev": true, - "requires": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.5.4" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "requires": {} - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/Samples/React/package.json b/Samples/React/package.json deleted file mode 100644 index ad996e36..00000000 --- a/Samples/React/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "private": true, - "name": "react-sample", - "browserslist": { - "production": ["defaults"], - "development": ["last 1 version"] - }, - "scripts": { - "test": "react-scripts test", - "start": "react-scripts start", - "build": "react-scripts build" - }, - "dependencies": { - "backend": "file:./backend", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@types/react": "^18.0.21", - "@types/react-dom": "^18.0.6", - "@types/jest": "^29.1.2", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "react-scripts": "^5.0.1", - "typescript": "^4.8.4" - } -} diff --git a/Samples/React/public/favicon.svg b/Samples/React/public/favicon.svg deleted file mode 100644 index 7a873ced..00000000 --- a/Samples/React/public/favicon.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Samples/React/scripts/build-backend.sh b/Samples/React/scripts/build-backend.sh deleted file mode 100644 index 861c706a..00000000 --- a/Samples/React/scripts/build-backend.sh +++ /dev/null @@ -1,8 +0,0 @@ -printf "Building backend...\n\n" -cd ../backend -dotnet publish -c release - -printf "\nCopying build artifacts to public...\n\n" -rm -rf ../public/bin -cp -a ./Backend.WASM/bin/managed/. ../public/bin/ -cp ./Backend.WASM/bin/dotnet.wasm ../public/bin/dotnet.wasm diff --git a/Samples/React/src/boot.ts b/Samples/React/src/boot.ts deleted file mode 100644 index 43e764b3..00000000 --- a/Samples/React/src/boot.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { BootData, getBootUris, boot } from "backend"; - -export async function bootBackend() { - await boot(await fetchBootData()); -} - -async function fetchBootData(): Promise { - const uris = getBootUris(); - return { - wasm: await fetchBinary(uris.wasm), - assemblies: await Promise.all(uris.assemblies.map(fetchAssembly)), - entryAssemblyName: uris.entryAssembly - }; - - async function fetchBinary(name: string) { - const uri = `${process.env.PUBLIC_URL}/bin/${name}`; - return new Uint8Array(await (await fetch(uri)).arrayBuffer()); - } - - async function fetchAssembly(name: string) { - return { name, data: await fetchBinary(name) }; - } -} diff --git a/Samples/React/src/index.tsx b/Samples/React/src/index.tsx deleted file mode 100644 index c5695c35..00000000 --- a/Samples/React/src/index.tsx +++ /dev/null @@ -1,23 +0,0 @@ -/// - -import { StrictMode } from "react"; -import { createRoot } from "react-dom/client"; -import { bootBackend } from "boot"; -import { Donut } from "donut"; -import { Stress } from "stress"; -import "index.css"; - -(async function () { - await bootBackend(); - await renderApp(); -})(); - -async function renderApp() { - const container = document.getElementById("react-app")!; - await createRoot(container).render( - - - - - ); -} diff --git a/Samples/React/src/stress.tsx b/Samples/React/src/stress.tsx deleted file mode 100644 index 484c2b98..00000000 --- a/Samples/React/src/stress.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { useEffect, useState } from "react"; -import { Backend, Frontend } from "backend"; - -type Props = { - power: number; -}; - -export const Stress = (props: Props) => { - const [stressing, setStressing] = useState(false); - const [iterations, setIterations] = useState(""); - - useEffect(() => { - Frontend.getStressPower = () => props.power; - }, [props.power]); - - useEffect(() => { - Frontend.onStressComplete.subscribe(logIteration); - return () => Frontend.onStressComplete.unsubscribe(logIteration); - }, []); - - return ( -
-
- This sample shows the benefit of running dotnet on worker thread. - The Donut is animating on the main (UI) thread and dotnet is running stress test. - When built without 'CreateWorker' enabled, the animation will perform poorly. -
- -
- {iterations} -
-
- ); - - function toggleStress() { - if (Backend.isStressing()) Backend.stopStress(); - else Backend.startStress(); - setStressing(!stressing); - } - - function logIteration(time: number) { - setIterations(i => { - if (i.length > 999) i = i.substring(0, i.lastIndexOf("\n")); - const stamp = new Date().toLocaleTimeString([], { hour12: false }); - return `[${stamp}] Stressed over ${time}ms.\n${i}`; - }); - } -}; diff --git a/Samples/React/src/test/stress.test.tsx b/Samples/React/src/test/stress.test.tsx deleted file mode 100644 index 88a44c98..00000000 --- a/Samples/React/src/test/stress.test.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { render, act, screen } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { Backend, Frontend } from "backend"; -import { Stress } from "stress"; - -beforeEach(() => { - Backend.startStress = jest.fn(); - Backend.stopStress = jest.fn(); - Backend.isStressing = jest.fn(); -}); - -test("stress is not running initially", () => { - render(); - expect(Backend.startStress).not.toBeCalled(); -}); - -test("get stress power returns value specified in props", async () => { - render(); - expect(Frontend.getStressPower()).toEqual(666); -}); - -test("stress iteration time is written to screen", async () => { - render(); - await act(() => Frontend.onStressComplete.broadcast(13)); - expect(screen.getByText(/Stressed over 13ms/)); -}); - -test("button click stops stress when stress is running", async () => { - Backend.isStressing = () => true; - render(); - await userEvent.click(screen.getByRole("button")); - expect(Backend.stopStress).toBeCalled(); -}); - -test("button click starts stress when stress is not running", async () => { - Backend.isStressing = () => false; - render(); - await userEvent.click(screen.getByRole("button")); - expect(Backend.startStress).toBeCalled(); -}); diff --git a/Samples/React/tsconfig.json b/Samples/React/tsconfig.json deleted file mode 100644 index 0ef148b0..00000000 --- a/Samples/React/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "CommonJS", - "moduleResolution": "node", - "allowJs": true, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noFallthroughCasesInSwitch": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "baseUrl": "src", - "jsx": "react-jsx" - }, - "include": ["src"] -} diff --git a/Samples/WebExtension/README.md b/Samples/WebExtension/README.md deleted file mode 100644 index 150b26a9..00000000 --- a/Samples/WebExtension/README.md +++ /dev/null @@ -1,5 +0,0 @@ -An example on using [DotNetJS](https://github.com/Elringus/DotNetJS)-compiled C# program within VS Code standalone (node.js) and [web extension](https://code.visualstudio.com/api/extension-guides/web-extensions). - -Install [Hello, DotNetJS!](https://marketplace.visualstudio.com/items?itemName=Elringus.dotnetjs) extension in VS Code, open command palette (`Ctrl+Shift+P` on standalone or `F1` on web) and execute `Hello, DotNetJS!` command. If successful, a welcome notification will appear. - -![](https://i.gyazo.com/a3ec0ee51f14970a7eca24169d682274.png) diff --git a/Samples/WebExtension/package-lock.json b/Samples/WebExtension/package-lock.json deleted file mode 100644 index 07d4ee56..00000000 --- a/Samples/WebExtension/package-lock.json +++ /dev/null @@ -1,5051 +0,0 @@ -{ - "name": "dotnetjs", - "version": "1.0.2", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "dotnetjs", - "version": "1.0.2", - "devDependencies": { - "@types/vscode": "^1.60.0", - "ts-loader": "^9.2.6", - "typescript": "^4.5.2", - "vsce": "^2.3.0", - "webpack": "^5.64.4", - "webpack-cli": "^4.9.1" - }, - "engines": { - "vscode": "^1.60.0" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", - "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@types/eslint": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.0.tgz", - "integrity": "sha512-74hbvsnc+7TEDa1z5YLSe4/q8hGYB3USNvCuzHUJrjPV6hXaq8IXcngCrHkuvFt0+8rFz7xYXrHgNayIX0UZvQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", - "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==", - "dev": true - }, - "node_modules/@types/vscode": { - "version": "1.62.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.62.0.tgz", - "integrity": "sha512-iGlQJ1w5e3qPUryroO6v4lxg3ql1ztdTCwQW3xEwFawdyPLoeUSv48SYfMwc7kQA7h6ThUqflZIjgKAykeF9oA==", - "dev": true - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", - "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", - "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", - "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", - "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/azure-devops-node-api": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.1.0.tgz", - "integrity": "sha512-6/2YZuf+lJzJLrjXNYEA5RXAkMCb8j/4VcHD0qJQRsgG/KsRMYo0HgDh0by1FGHyZkQWY5LmQyJqCwRVUB3Y7Q==", - "dev": true, - "dependencies": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", - "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001280", - "electron-to-chromium": "^1.3.896", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001282", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz", - "integrity": "sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "dev": true, - "dependencies": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", - "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", - "dev": true, - "dependencies": { - "css-select": "^4.1.3", - "css-what": "^5.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dev": true, - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.3.901", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.901.tgz", - "integrity": "sha512-ToJdV2vzwT2jeAsw8zIggTFllJ4Kxvwghk39AhJEHHlIxor10wsFI3wo69p8nFc0s/ATWBqugPv/k3nW4Y9Mww==", - "dev": true - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", - "dev": true - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "node_modules/hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-worker": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", - "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/keytar": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.7.0.tgz", - "integrity": "sha512-YEY9HWqThQc5q5xbXbRwsZTh2PJ36OSYRjSv3NN2xf5s5dpLTjEZnC2YikR29OaVybf9nQ0dJ/80i40RS97t/A==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^3.0.0", - "prebuild-install": "^6.0.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", - "dev": true, - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it/node_modules/entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", - "dev": true - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "dev": true, - "dependencies": { - "semver": "^5.4.1" - } - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-semver": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", - "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=", - "dev": true, - "dependencies": { - "semver": "^5.1.0" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/prebuild-install": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", - "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", - "dev": true, - "dependencies": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "dev": true, - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "acorn": "^8.5.0" - }, - "peerDependenciesMeta": { - "acorn": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", - "dev": true, - "dependencies": { - "jest-worker": "^27.0.6", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-loader": { - "version": "9.2.6", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz", - "integrity": "sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-loader/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-loader/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ts-loader/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-loader/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-loader/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true, - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/typed-rest-client": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.6.tgz", - "integrity": "sha512-xcQpTEAJw2DP7GqVNECh4dD+riS+C1qndXLfBCJ3xk0kqprtGN491P5KlmrDbKdtuW8NEcP/5ChxiJI3S9WYTA==", - "dev": true, - "dependencies": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "node_modules/typescript": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", - "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "node_modules/underscore": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", - "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==", - "dev": true - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/vsce": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.3.0.tgz", - "integrity": "sha512-nmbczr1rC+lRikX1NYMoTFX6CqPlfk11f7LbRgdjpa6zkLNndlTtnpvOawj7NYkw5jmy+5bGHMGt4DIimZXZmg==", - "dev": true, - "dependencies": { - "azure-devops-node-api": "^11.0.1", - "chalk": "^2.4.2", - "cheerio": "^1.0.0-rc.9", - "commander": "^6.1.0", - "glob": "^7.0.6", - "hosted-git-info": "^4.0.2", - "keytar": "^7.7.0", - "leven": "^3.1.0", - "markdown-it": "^10.0.0", - "mime": "^1.3.4", - "minimatch": "^3.0.3", - "parse-semver": "^1.1.1", - "read": "^1.0.7", - "semver": "^5.1.0", - "tmp": "^0.2.1", - "typed-rest-client": "^1.8.4", - "url-join": "^4.0.1", - "xml2js": "^0.4.23", - "yauzl": "^2.3.1", - "yazl": "^2.2.2" - }, - "bin": { - "vsce": "vsce" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/watchpack": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz", - "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack": { - "version": "5.64.4", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.64.4.tgz", - "integrity": "sha512-LWhqfKjCLoYJLKJY8wk2C3h77i8VyHowG3qYNZiIqD6D0ZS40439S/KVuc/PY48jp2yQmy0mhMknq8cys4jFMw==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.0", - "webpack-sources": "^3.2.2" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", - "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.0", - "@webpack-cli/info": "^1.4.0", - "@webpack-cli/serve": "^1.6.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", - "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3" - } - } - }, - "dependencies": { - "@discoveryjs/json-ext": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", - "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", - "dev": true - }, - "@types/eslint": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.0.tgz", - "integrity": "sha512-74hbvsnc+7TEDa1z5YLSe4/q8hGYB3USNvCuzHUJrjPV6hXaq8IXcngCrHkuvFt0+8rFz7xYXrHgNayIX0UZvQ==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "@types/node": { - "version": "16.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", - "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==", - "dev": true - }, - "@types/vscode": { - "version": "1.62.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.62.0.tgz", - "integrity": "sha512-iGlQJ1w5e3qPUryroO6v4lxg3ql1ztdTCwQW3xEwFawdyPLoeUSv48SYfMwc7kQA7h6ThUqflZIjgKAykeF9oA==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", - "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", - "dev": true, - "requires": {} - }, - "@webpack-cli/info": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", - "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", - "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", - "dev": true, - "requires": {} - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "acorn": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", - "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "azure-devops-node-api": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.1.0.tgz", - "integrity": "sha512-6/2YZuf+lJzJLrjXNYEA5RXAkMCb8j/4VcHD0qJQRsgG/KsRMYo0HgDh0by1FGHyZkQWY5LmQyJqCwRVUB3Y7Q==", - "dev": true, - "requires": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", - "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001280", - "electron-to-chromium": "^1.3.896", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caniuse-lite": { - "version": "1.0.30001282", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz", - "integrity": "sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "dev": true, - "requires": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - } - }, - "cheerio-select": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", - "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "css-what": "^5.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.7.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - } - }, - "css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true - }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dev": true, - "requires": { - "mimic-response": "^2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true - }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - }, - "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "electron-to-chromium": { - "version": "1.3.901", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.901.tgz", - "integrity": "sha512-ToJdV2vzwT2jeAsw8zIggTFllJ4Kxvwghk39AhJEHHlIxor10wsFI3wo69p8nFc0s/ATWBqugPv/k3nW4Y9Mww==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "jest-worker": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", - "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "keytar": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.7.0.tgz", - "integrity": "sha512-YEY9HWqThQc5q5xbXbRwsZTh2PJ36OSYRjSv3NN2xf5s5dpLTjEZnC2YikR29OaVybf9nQ0dJ/80i40RS97t/A==", - "dev": true, - "requires": { - "node-addon-api": "^3.0.0", - "prebuild-install": "^6.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", - "dev": true, - "requires": { - "uc.micro": "^1.0.1" - } - }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "dependencies": { - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", - "dev": true - } - } - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "requires": { - "mime-db": "1.51.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "dev": true, - "requires": { - "semver": "^5.4.1" - } - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, - "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-semver": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", - "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=", - "dev": true, - "requires": { - "semver": "^5.1.0" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "prebuild-install": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", - "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", - "dev": true, - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true - }, - "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "dev": true, - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", - "dev": true, - "requires": { - "jest-worker": "^27.0.6", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "ts-loader": { - "version": "9.2.6", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz", - "integrity": "sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "typed-rest-client": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.6.tgz", - "integrity": "sha512-xcQpTEAJw2DP7GqVNECh4dD+riS+C1qndXLfBCJ3xk0kqprtGN491P5KlmrDbKdtuW8NEcP/5ChxiJI3S9WYTA==", - "dev": true, - "requires": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "typescript": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", - "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", - "dev": true - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "underscore": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", - "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "vsce": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.3.0.tgz", - "integrity": "sha512-nmbczr1rC+lRikX1NYMoTFX6CqPlfk11f7LbRgdjpa6zkLNndlTtnpvOawj7NYkw5jmy+5bGHMGt4DIimZXZmg==", - "dev": true, - "requires": { - "azure-devops-node-api": "^11.0.1", - "chalk": "^2.4.2", - "cheerio": "^1.0.0-rc.9", - "commander": "^6.1.0", - "glob": "^7.0.6", - "hosted-git-info": "^4.0.2", - "keytar": "^7.7.0", - "leven": "^3.1.0", - "markdown-it": "^10.0.0", - "mime": "^1.3.4", - "minimatch": "^3.0.3", - "parse-semver": "^1.1.1", - "read": "^1.0.7", - "semver": "^5.1.0", - "tmp": "^0.2.1", - "typed-rest-client": "^1.8.4", - "url-join": "^4.0.1", - "xml2js": "^0.4.23", - "yauzl": "^2.3.1", - "yazl": "^2.2.2" - } - }, - "watchpack": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz", - "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "webpack": { - "version": "5.64.4", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.64.4.tgz", - "integrity": "sha512-LWhqfKjCLoYJLKJY8wk2C3h77i8VyHowG3qYNZiIqD6D0ZS40439S/KVuc/PY48jp2yQmy0mhMknq8cys4jFMw==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.0", - "webpack-sources": "^3.2.2" - } - }, - "webpack-cli": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", - "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.0", - "@webpack-cli/info": "^1.4.0", - "@webpack-cli/serve": "^1.6.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", - "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3" - } - } - } -} diff --git a/Samples/WebExtension/package.json b/Samples/WebExtension/package.json deleted file mode 100644 index 676241c3..00000000 --- a/Samples/WebExtension/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "dotnetjs", - "version": "1.0.2", - "displayName": "Hello, DotNetJS!", - "description": "A test web extension built with DotNetJS.", - "categories": ["Other"], - "publisher": "Elringus", - "repository": "https://github.com/Elringus/DotNetJS", - "engines": { "vscode": "^1.60.0" }, - "main": "./dist/extension.js", - "browser": "./dist/extension.js", - "activationEvents": [ - "onCommand:dotnetjs.hello" - ], - "contributes": { - "commands": [ - { - "command": "dotnetjs.hello", - "title": "Hello, DotNetJS!" - } - ] - }, - "scripts": { - "build": "webpack --mode production", - "package": "vsce package" - }, - "devDependencies": { - "typescript": "^4.5.2", - "@types/vscode": "^1.60.0", - "vsce": "^2.3.0", - "webpack": "^5.64.4", - "webpack-cli": "^4.9.1", - "ts-loader": "^9.2.6" - } -} diff --git a/Samples/WebExtension/src/extension.ts b/Samples/WebExtension/src/extension.ts deleted file mode 100644 index b17dba61..00000000 --- a/Samples/WebExtension/src/extension.ts +++ /dev/null @@ -1,24 +0,0 @@ -import * as vscode from "vscode"; -import * as dotnet from "../../HelloWorld/Project/bin/dotnet"; - -// Providing implementation for 'GetHostName' function declared in 'HelloWorld' C# assembly. -dotnet.HelloWorld.getHostName = () => "VS Code"; - -export async function activate(context: vscode.ExtensionContext) { - // Booting the DotNet runtime and invoking entry point. - try { await dotnet.boot(); } - catch (e: any) { vscode.window.showErrorMessage(e.message); } - const command = vscode.commands.registerCommand("dotnetjs.hello", greet); - context.subscriptions.push(command); -} - -export async function deactivate() { - await dotnet.terminate(); -} - -function greet() { - // Invoking 'GetName()' C# method defined in 'HelloWorld' assembly. - const guestName = dotnet.HelloWorld.getName(); - const message = `Welcome, ${guestName}! Enjoy your VS Code extension space.`; - vscode.window.showInformationMessage(message); -} diff --git a/Samples/WebExtension/tsconfig.json b/Samples/WebExtension/tsconfig.json deleted file mode 100644 index 56841b88..00000000 --- a/Samples/WebExtension/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "target": "es6", - "module": "commonjs", - "strict": true - }, - "include": ["src/**/*.ts"] -} diff --git a/Samples/WebExtension/webpack.config.js b/Samples/WebExtension/webpack.config.js deleted file mode 100644 index d2e09233..00000000 --- a/Samples/WebExtension/webpack.config.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - target: "webworker", - entry: "./src/extension.ts", - resolve: { - extensions: [".ts", ".js"], - mainFields: ["browser", "module", "main"] - }, - output: { - filename: "extension.js", - library: { type: "commonjs" } - }, - module: { rules: [{ test: /\.ts/, loader: "ts-loader" }] }, - externals: { vscode: "commonjs vscode" }, - performance: { hints: false } -}; diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts new file mode 100644 index 00000000..7bc5aa4d --- /dev/null +++ b/docs/.vitepress/config.ts @@ -0,0 +1,56 @@ +import { defineConfig } from "vitepress"; +import imgit from "imgit/vite"; +import md from "./md"; + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: "Bootsharp", + titleTemplate: ":title • Bootsharp", + appearance: "dark", + cleanUrls: true, + lastUpdated: true, + markdown: md, + vite: { plugins: [imgit({ width: 688 })] }, + head: [ + ["link", { rel: "icon", href: "/favicon.svg" }], + ["link", { rel: "preload", href: "/fonts/inter.woff2", as: "font", type: "font/woff2", crossorigin: "" }], + ["link", { rel: "preload", href: "/fonts/jb.woff2", as: "font", type: "font/woff2", crossorigin: "" }], + ["meta", { name: "twitter:card", content: "summary_large_image" }] + ], + themeConfig: { + logo: { src: "/favicon.svg" }, + logoLink: "/", + socialLinks: [{ icon: "github", link: "https://github.com/elringus/bootsharp" }], + search: { provider: "local" }, + lastUpdated: { text: "Updated", formatOptions: { dateStyle: "medium" } }, + sidebarMenuLabel: "Menu", + darkModeSwitchLabel: "Appearance", + returnToTopLabel: "Return to top", + outline: { label: "On this page", level: "deep" }, + docFooter: { prev: "Previous page", next: "Next page" }, + nav: [ + { text: "Guide", link: "/guide/", activeMatch: "/guide/" }, + { + text: "v0.1.0", items: [ + { text: "Changes", link: "https://github.com/elringus/bootsharp/releases/latest" }, + { text: "Contribute", link: "https://github.com/elringus/bootsharp/labels/help%20wanted" } + ] + } + ], + editLink: { + pattern: "https://github.com/elringus/bootsharp/edit/main/docs/:path", + text: "Edit this page on GitHub" + }, + sidebar: { + "/guide/": [ + { + text: "Guide", + items: [ + { text: "Introduction", link: "/guide/" } + ] + } + ] + } + }, + sitemap: { hostname: "https://bootsharp.com" } +}); diff --git a/docs/.vitepress/md/index.ts b/docs/.vitepress/md/index.ts new file mode 100644 index 00000000..44e08732 --- /dev/null +++ b/docs/.vitepress/md/index.ts @@ -0,0 +1,11 @@ +import { MarkdownOptions, MarkdownRenderer } from "vitepress"; +import { AppendIconToExternalLinks } from "./md-link"; + +export default { + config: installPlugins, + attrs: { disable: true } // https://github.com/vuejs/vitepress/issues/2440 +} satisfies MarkdownOptions; + +function installPlugins(md: MarkdownRenderer) { + md.use(AppendIconToExternalLinks); +} diff --git a/docs/.vitepress/md/md-link.ts b/docs/.vitepress/md/md-link.ts new file mode 100644 index 00000000..55e53710 --- /dev/null +++ b/docs/.vitepress/md/md-link.ts @@ -0,0 +1,30 @@ +import type { MarkdownRenderer } from "vitepress"; +import type { RenderRule } from "markdown-it/lib/renderer"; + +export function AppendIconToExternalLinks(md: MarkdownRenderer) { + const renderToken: RenderRule = (tokens, idx, options, env, self) => self.renderToken(tokens, idx, options); + const defaultLinkOpenRenderer = md.renderer.rules.link_open || renderToken; + const defaultLinkCloseRenderer = md.renderer.rules.link_close || renderToken; + let externalLinkOpen = false; + + md.renderer.rules.link_open = (tokens, idx, options, env, self) => { + const token = tokens[idx]; + const href = token.attrGet("href"); + + if (href) { + token.attrJoin("class", "vp-link"); + if (/^((ht|f)tps?):\/\/?/.test(href)) + externalLinkOpen = true; + } + + return defaultLinkOpenRenderer(tokens, idx, options, env, self); + }; + + md.renderer.rules.link_close = (tokens, idx, options, env, self) => { + if (externalLinkOpen) { + externalLinkOpen = false; + return ` ↗${self.renderToken(tokens, idx, options)}`; + } + return defaultLinkCloseRenderer(tokens, idx, options, env, self); + }; +} diff --git a/docs/.vitepress/md/md-replacer.ts b/docs/.vitepress/md/md-replacer.ts new file mode 100644 index 00000000..6c242ce7 --- /dev/null +++ b/docs/.vitepress/md/md-replacer.ts @@ -0,0 +1,39 @@ +// Based on https://github.com/rlidwka/markdown-it-regexp. + +import { inherits } from "node:util"; +import { MarkdownEnv, MarkdownRenderer } from "vitepress"; + +let instanceId = 0; + +export function Replacer(regexp: RegExp, replace: (match: string[], env: MarkdownEnv) => string) { + let self: any = (md: any) => self.init(md); + self.__proto__ = Replacer.prototype; + self.regexp = new RegExp("^" + regexp.source, regexp.flags); + self.replace = replace; + self.id = `md-replacer-${instanceId}`; + instanceId++; + return self; +} + +inherits(Replacer, Function); + +Replacer.prototype.init = function (md: MarkdownRenderer) { + md.inline.ruler.push(this.id, this.parse.bind(this)); + md.renderer.rules[this.id] = this.render.bind(this); +}; + +Replacer.prototype.parse = function (state: any, silent: any) { + let match = this.regexp.exec(state.src.slice(state.pos)); + if (!match) return false; + + state.pos += match[0].length; + if (silent) return true; + + let token = state.push(this.id, "", 0); + token.meta = { match: match }; + return true; +}; + +Replacer.prototype.render = function (tokens: any, id: any, options: any, env: MarkdownEnv) { + return this.replace(tokens[id].meta.match, env); +}; diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts new file mode 100644 index 00000000..43b4b3c6 --- /dev/null +++ b/docs/.vitepress/theme/index.ts @@ -0,0 +1,10 @@ +import DefaultTheme from "vitepress/theme-without-fonts"; +import "./style.css"; + +// Have to import client assets manually due to vitepress +// bug: https://github.com/vuejs/vitepress/issues/3314 +import "imgit/styles"; +import "imgit/client"; + +// https://vitepress.dev/guide/extending-default-theme +export default { extends: { Layout: DefaultTheme.Layout } }; diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css new file mode 100644 index 00000000..baef97a6 --- /dev/null +++ b/docs/.vitepress/theme/style.css @@ -0,0 +1,188 @@ +/** https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css */ + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 100 900; + font-display: swap; + /* noinspection CssUnknownTarget */ + src: url(/fonts/inter.woff2) format("woff2"); +} + +@font-face { + font-family: "JetBrains"; + font-style: normal; + font-weight: 100 900; + font-display: swap; + /* noinspection CssUnknownTarget */ + src: url(/fonts/jb.woff2) format("woff2"); +} + +:root { + --vp-font-family-base: "Inter", sans-serif; + --vp-font-family-mono: "JetBrains", monospace; + font-optical-sizing: auto; + + /* Main highlight/link color (light mode). */ + /*--vp-c-brand-1: #d22c40;*/ + /* Link hover color (light mode). */ + /*--vp-c-brand-2: #be2033;*/ +} + +.dark { + /* Main highlight/link color (dark mode). */ + /*--vp-c-brand-1: #ee3248;*/ + /* Link hover color (dark mode). */ + /*--vp-c-brand-2: #f35d44;*/ +} + +.dark .dark-only, +.light-only { + display: flex !important; +} + +.dark .light-only, +.dark-only { + display: none !important; +} + +.attr { + display: block; + text-align: right; + font-size: 11px; + opacity: 0.65; + transition: opacity 0.25s; + font-family: "JetBrains", monospace; + user-select: none; +} + +.attr:hover { + opacity: 1; +} + +pre { + font-variant-ligatures: none; +} + +.vp-doc a { + text-underline-position: from-font; +} + +.external-link-icon { + margin-left: -1px; + margin-right: 2px; +} + +details summary { + font-weight: 500; + color: var(--vp-c-brand-1); + text-decoration: underline; + text-underline-offset: 2px; + transition: color 0.25s, opacity 0.25s; + text-underline-position: from-font; + cursor: pointer; +} + +details summary:hover { + color: var(--vp-c-brand-2); +} + +.vp-doc th, .vp-doc td, .vp-doc tr { + border: inherit !important; +} + +table { + --border: 1px solid var(--vp-c-divider); + width: fit-content; + border-radius: 8px; + border-spacing: 0; + border-collapse: separate !important; + border: var(--border) !important; + overflow: hidden; +} + +table th:not(:last-child), +table td:not(:last-child) { + border-right: var(--border) !important; +} + +table > thead > tr:not(:last-child) > th, +table > thead > tr:not(:last-child) > td, +table > tbody > tr:not(:last-child) > th, +table > tbody > tr:not(:last-child) > td, +table > tfoot > tr:not(:last-child) > th, +table > tfoot > tr:not(:last-child) > td, +table > tr:not(:last-child) > td, +table > tr:not(:last-child) > th, +table > thead:not(:last-child), +table > tbody:not(:last-child), +table > tfoot:not(:last-child) { + border-bottom: var(--border) !important; +} + +/* Stretch YouTube embeds with small thumbnails. */ +.imgit-youtube { + width: 100% !important; +} + +[data-imgit-container], +[data-imgit-container] img, +[data-imgit-container] video { + border-radius: 8px; +} + +/** + * Navbar blur effect + * -------------------------------------------------------------------------- */ + +/* remove default opaque bg from navbar */ +.content-body { + background: none !important; +} + +/* a hack for logo title to keep sidebar bg color */ +@media (min-width: 960px) { + .VPNavBar.has-sidebar div.title { + background: var(--vp-sidebar-bg-color) !important; + } +} + +/* a bit of tint to make navbar not as transparent */ +.VPNavBar { + background: rgba(255, 255, 255, 0.75) !important; +} + +.dark .VPNavBar { + background: rgba(30, 30, 32, 0.5) !important; +} + +.VPLocalNav { + background: rgba(255, 255, 255, 0.75) !important; +} + +.dark .VPLocalNav { + background: rgba(30, 30, 32, 0.5) !important; +} + +/* the blur effect */ +.VPNav::after { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + backdrop-filter: saturate(180%) blur(5px); + z-index: -1; +} + +.VPLocalNav::after { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + backdrop-filter: saturate(180%) blur(5px); + z-index: -1; +} diff --git a/docs/guide/index.md b/docs/guide/index.md new file mode 100644 index 00000000..554dda96 --- /dev/null +++ b/docs/guide/index.md @@ -0,0 +1,3 @@ +# Introduction + +WIP diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..875e89b8 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,75 @@ +--- +layout: home + +title: Use C# in web apps with comfort +titleTemplate: Bootsharp • :title + +hero: + name: Bootsharp + text: Use C# in web apps with comfort + tagline: Single-file ES module, auto-generated JavaScript bindings and type definitions. + actions: + - theme: brand + text: Get Started + link: /guide/ + - theme: alt + text: View on GitHub + link: https://github.com/elringus/bootsharp + image: + src: /favicon.svg + alt: Bootsharp +--- + + diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 00000000..0a5283a4 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,13 @@ +{ + "type": "module", + "scripts": { + "docs:dev": "vitepress dev", + "docs:build": "vitepress build", + "docs:preview": "vitepress preview" + }, + "devDependencies": { + "typescript": "^5.3.3", + "vitepress": "^1.0.0-rc.34", + "imgit": "^0.1.0" + } +} diff --git a/docs/public/favicon.svg b/docs/public/favicon.svg new file mode 100644 index 00000000..ef8647c6 --- /dev/null +++ b/docs/public/favicon.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/fonts/inter.woff2 b/docs/public/fonts/inter.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0189edcd9ee10d6e5650fae76c365e14bc64b2fb GIT binary patch literal 100384 zcmV)aK&roYPew8T0RR910f-;~6951J1Dp&10f(vp1ONa400000000000000000000 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 M6P@_;{G%HI6?{4cw*UYD literal 0 HcmV?d00001 diff --git a/docs/public/fonts/jb.woff2 b/docs/public/fonts/jb.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9ab33d31841a6603ef5a7d3507d092ba0f811c7a GIT binary patch literal 46868 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 z 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
nv38 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 Ra2bf@9ytu@LxvMk#$?o8MTDD+gPEe=9$^df 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≪6Iu>h(ML?5rWGJ$xK128ZT zTpp;XsWlhAk+~YgS!(`q{4qioHU;cl6IIW+5W&#QqoNXchRwSq&A*ak_ z{;c_P<^8P%NdY`20-*mv;WF7bYuj8gK@}CEB*$nhpkOJ43DD#YDIEh zzHe3rUciruA;R!kmsq}X8pa{T!Kbs{{{jN{0z-r0sKD^}w-diGu%|$L#SK^?+M4@6 zI}+h&{Jb!Hcp_Cf!=I#trT2@JX`DysA#MmL3P*=33Ba?N9oV{U{GaAdHB$i?n?9b& z?a{kmuUoqM_E{GBFNoI(v2i%<4P0pXzMYk_v9n+GW>7&<$^fqByH|+bTw&@>hh5c& zVNWw?a)C|DYgTLMTUrjSH6s5%C0ap6!%m#7uZ;FrQo&299}K}Y#q<{6p_BbsK*-EV zAyB+trCD#BxnR2xF|%54;!$<_^Hx_eNK^!;(%f&7wzg|vzU|M<>|tW^e;NI#{~P-c z%hl)Z5AaTTDkbw@eAA_j#=t3Z=X;m}E6UyTRT4!5S8 zPZcs4@V@opW$AWv^0xXd^PjDO+`C2V1rO*M7&NZGdW=Q~ejx{3J5IX0UJSzQVJT|L zYHC7)s6)T>{>x;nm7o3(I3+96H;Rr1T1<)-T(H-i_4(Ew^#^A9&7@ zoxrH7iS-d@%E!r`+_@LUy~N+7k>tfiCysiF>Ub2$c_9teJBH16lw{QHCCHoA;ko}} zrTv{bV?>^ySq{i~fAD;X__5JoHJxEfkC;zo86m@AF`v{}AK?^FE+{7luVLW#4`>wl zf7}Z|;~KC*5Fr#;cZaJN`@iX6)C$<(m*XA>M3_HFnNb5R9}Y-6oA24b_l{p9t93V& zy=UBhz>}&1uMDE-9MiG)MHNH<+zn?YV>`=@zl``EH!_{>c6XHsHP2hWZR=xgQTFTF=a8#Gt@QRRaaEgw-~U4b|(3@io&SG8&lQvcEC?KToNiuCR$0W+nT~65m@A zzCCKfuXvbt;#SlrFbQ&yPWzDd@(9r}70^Iu*K0y+yZ);iF6eipK7>un5psKH07iI! z?{lxlv<`9DmJ{gM3vA4O-E=Z2-i?-=TebA#d0h>3-Orh9q2T; zMZSg;`cl%3h{Pt%wK!l_XoKIufXj|3SgpvrUT$RM!NeSW3BGP9UYA(4IL@SOhgUDX zm)`eo{;wS42`Iy8p#&cJXmM(K`k@B8HAdhHP%lR;62s|k2vbJnQZ_*X>Xr_soo!7u zLYE=*z!NH;$g%#xilrP#X+=~7+9W8Dj~&SYh#jZsUS%ORTIyV^8qUzb7q)c=+c3-- z#2AvvQm2f$uZJ&kvME#LRhZY2`_@E%Wlb zfgBhOLS29%5h);1mqVs*;CGhiiOc3)E#m8d%t6~%jLj*MRHC%mn1%LwDV3Oxsq*0i zh3z{3LjNR&ohnoH)W(TcTDxn#UpigN(mcOy!_>c`ODrG#N1_v5Pmp4^*-bRc+*Uy) zB=;E8;l37Q*X?gl@hoq$PoL&~H(R<15vp_Xce6yPhIF`;tClJRXkA(v{=^}+DP#P3 zE7^s8$W*u%ryrI+AbZ@0tX2u(U}LHwfofl>reD6EzF@xG+8x_{O8mH zz;ERat)!=~&5E|(jj*FLVMZV)lNsCEf6GGE-X@N1+NCMObHgIPJMq6Mw zDq~+(X}QjH3z2y;*z+57rA+T-(BH(~I>LHgPKKzJ6!ZdLcvn4xg)FHruj-& zZkjRN6kR(ZbosPcd*;7?9d>LEV-C;Gxiy|g$yhRYV?5&G*+0N4x2a1&snN@xjnOy6 z8NlOSAM*-Q^EX_xe}ERv5tbw8U>^gf%?ovg9>#oxCQcr6CwzZAd$+Rz6EH%ODW5o& znVG%wW+47b%>z2(RA;9%{2z0Kl2=|HUT-oYEpka$Afa@dg}0`f5O|hviIby8lqzMU z%^o6lz(j1P5@BubPpaan@(O@szBFAVSGIvgQmYMDM1v+FX?!l`k3{)+bv9jtd zUKQ~D)sQ0^wBCa=DO07DnDk~{gMmLh%s#53X~edbpd|`|U1M!&q=sF!Yd~Xyw5Wa& zP~hDk94-_!{3&>Gg)LICf~k?Os>+%NzBCsot-~B@&MxML?acP&Ewo=vRk-F)Heu{a zRakBlm6-?wSM~+GJ!kn$+f6d?M)3MOA>e~(CA_A{`4xD6^tI6GiVe9`71Zqv=L0t% zskE`lKY5TXRiqrBx06&;NviN_I`^c!Jk@`WxJDjnfnVBoztjMGsID`>vjRb_oml#& zn{++wE>$6T9e%5CTA!NEYigk?lu>oSaN!Px+~NT?e&!RiHNVgjq220E>V_P@iKA%Y z(qj$2Y}ePXQt58`BJgI@N95>Y&?YlPu&M@w=o4#HnNY+gP8pT5u6kJ%!fy%xh=QZA8^B?TLE6i@kZXYY{`>yK*=^R z&q~A^f+*zyyb6GHN~CayCJk{m$Pxls3S#q8a(%I7&e zv)tPpKdep6u$Z0e&YK6H|DD<09O$TbUshdKyB-htK)^P|BUxzq>l=V`76a+BX;#|!Y>yB1 z`ap)=8|FiJa@r-lHR;rKI|`fTlRdSB8J#D>G@Wo1sm1*d6{DtV;O>tiU!p5ODsMtD zB*%><=&h-*+F*2KhObWo)dG11G(jOS5( zsOMYu8XLH`^ZF5|(?|a2*=A+bFRrkS?>jJX5u>^H@530#ZHnZG1w4hg=D+Zyek@~L zPLz>0K8Bc3H~djD41B4dooadE09b*5WXkV5l*S7dDtUyzTl%`ruYd67OX;PZxg7v} z5f0)Vi&wIVyYLk8!gn*Bii^USVB;g#**nzgkj7Y9F9qN8& zEv7TK9N&E}^J;}cFRP>kf-LvByEek_pq)=Q5G!_3Gde}IpD$F@&~r@hZeMRNisIk* zq6in?4g{Y~$edVx6BbfOZXNjE2&vgjY5n_%p7(@|4P59%D9{C-*UwoG9(_NX3vlc2 z$>dZhNI$BnF4X=w%p1d$)1BM<%)gHEAzd8D&-%>y@3^Cx%bA{?Il+-nNE5^2?x`813&GgqP!B0RB#-FC1|qyz>TjUSoRBGS8E%73vBTxc;2Pj z!J5$3QjO~3Hdj%yml6t!)h?Hj$eACrS?}b?QX~%z^f!Pc5jerwA)ZAWNFje;il{53 zMPkno8>6dc`Qa!z(3dAm75E?yp0Ll}9&?>zQd+V;`ZDk};4T<=M__KhCxi^sVG&Cg z8u?}@>msx9(RdIJPnBMVc3;Eh_`bQNSbPM7j(@xE?%Sd815*hlH8t`v9b`Ma(0k^M ztKhgpgrcygqj6gaSFeH8{p3r!3e!8kjYb{|-LF&WG?R(uD@a8UFZ%;ycZ`gJgvG?9 zoCH2*PXAr3HBtf>`D?|SS|bN{+4p?ttEMPZRQMq-*Mx+7r=Js2HTscQfT)_Sj)HA> zZo+AsynMxBp_44>n^|jq{s)Ig?vrO-Hzx)Co;&Ds6)$giu9Sn??bKmL{^DuO;+eee zOV%Pp>n~UFo<^wRE2S)-n;ovFu$DvhT5-NZPw(doh1(WbFF$8K?-M`n{rN^kp!LXF zw@~4m0MGlh?`8Dva)ieY5^q}H=TDkJCTVrjf>&-~+2h6JOiiz&EgkMhK^y(xhN+>0 zdB!MB5cfaMR;SC~dPo)0f47nwzwdcYHW)5Sx`z&W-eJjovM1A1-6UQgnf2c%2VkEM zc4ZidK8!#eKCaA+I|+yDd$>2{zze zu3)GHVm@Q>#5ZsiPF~9)?A{1^^ZL-M!cXd{3J3B;pe_htSzVA@z~?wzujdkL>?Tfq zl)<|31`4Qels4kPWrS`#$t*svmE-{>^y$SicliEbpwC-Dr^zSxAE7eP?z~B)47?CN zb9DRKQ8AsZ7PWkk2Q#??GKBOJDnUAYhTEDuzrr4mJ9hX7=`G;${KrQgPkEz2V{rzn z0=9dL6iR`|KQi;WJ=NvSM>e|ws`;XClcRxN`kW-^g)RChumoCnqYs$@3SA7D%9Fk` zE#iCoQZ-spF<6A-DnI#hs`~l!w@Rl)I+H(yd}dJFZcOM|9;f45buIGq&2+WL_Q0PY z_!7T%sNzrm&5uqFs&d%Zi@|2FDElnOe~jFUpMfU^IWg#K(UsRe3Cmw9T+fI%drdq^ zyaXSp7S}mP(XAAFE!=4j4)3Vh(Gb&ZpX4~QRA-CHee4*C2DxMNXkY~p8F{CAh=@Z_ zD9X56?S?Ea50LXcc96o?II;zCGVz=`^&9o6E<@mc`Q;%}wfqy8Jei7I!8F|#VS621 z{S>p6yhZ|SzRcj&H;xt0mk~VXH0~xiwH>VNr8z?7f8+i|^VDy5qVgFL_7^jq#c0%t z*p+dg2pgxLRcRk9vKTUsE38K2PFx+^m(@xxRyTZ zI;NxuUmai!0+DZ9Ifh?)gv#ouMcZ|>XRZ^}V1J=6n}q#$YQP@!O{Xqcr8Ifgf*AAE zFoRa-=|`v5k?9txFENbQwsI8{ZXFlbR-Di3_TWAr+4TcX{JP)#iHnb%0Bf(NK49Yg zH$vo1?c(W;^q~l zXgeNkf^(tV8lclGZrw+hdTc&p9b{Id%Uud&giKFcx`8f&Rthpoa1}anHr&Exk@k6^ z%){>zc%Sit+QmxWp^Dvud5sHIM?q2`qpl7^ZPhc?>aUlRo+wPBpeycl0YO|K26TT9U@1;kT1FD`Cq{-9>Fr zPJe&DfL_ap6uBfejvhmI^nwBm(^Us5ccF?;P1hl`vK%Cf;b}S;wZ&dzVf$74KQM)^ zc%82=ypx>G5HUi&(E|nlpx>CB7z56_70dFw=?{?3uVI{J*1lk%Gx)+#mQL$aaQw|b zD|5RuY-0FQG9~_k+Cezpds!eaqa`GpB@Npd7sI~pmn^h@J?CXbUj*xohE_; za+_qO+1m+IwL7DuChv|@vptO>4*gD;*%F_pv0a`^Qdur<=#z{~w@H2zi9zqq`n3n` z&tDqM4UIx@m~^fLs^G?%+mmgGrKN#zOnfv|+8z*O#-oEPh9- znW;6QwRy(2y`}|hu3a{JPh$|JrBH)J)|_uf*mJwcBv9=U*7nCkget#(-XVH^@B@&o zM`?}XtX_$KDqzmx+kU~mAKjhFiEw+Yl4tqtGaWmlaqa+;bjA8)hr-n^jm{nwu>6iB zA)a~u^w2MJ1x#XjQ|;RE{gQcWHQJ(GaT!Y{#dfmh_0INZHE?Jd9Yf56`dx91eu;Qp|#br+~+Swi>duj&f)qJUGWvr(SAP3 z7Kz2~G?;vZXk_!K1jg=s=L7e{nrvvW!1N_zY;r9vu?}NOoslTx`*O}YHyHvshmHjC zE7M87PO0Jfw!1Cc082JhZ@u0O@-?;|cQ(1$Dd7p_d{4ei3B940!jRiNjaOeN22C#p(*i|csGJFgAaG`|~9ls*tPG4bgO(FtBg614Q8 zghU9|@{=iBy=oOMV>BMl7`3i>2LC@~q8rzJ9JPO&lmC$xLsMG-2R1`u&6 zWby@bWLmkr5WnyF$q;mzLe4YsM3r^aT=t-OwV}3}eaz|lB%#RuJ!gw>CI=hxN7ry8R(sQTQqYeq zH-DaJuMBb6b!EqvtdWl#RAmjfIB=4@142C)sC6BPqie7uwA&N5cIbzk{qR;PXKt5O z!m&y!^S#+RTrGi>IWQ_1b|z+K8JAtU;`j!+<5yz7-R%&cJF7o5pd?33u!Ko>7m#b- z5yviJi6uuW>OP~nJr3Pm?Xu*mJo!*Z{HE7|#_hNhq;1AbQ|Xh#i5l`&SMhlPKcpHiTHNiH}YtMa#F_!|$yXRkJTYbc-y(&F0wZ&}Bfj3cv7>5?so6 zihhpib*6FN!Ach_-5z1mX?lZ8V78D55UB9&h*udMkqyQAH9-79TtvKR|Gt+;=oM$%GI47mOBW z&J|wrcTIjJNPdNR8t35(Gk({#r*`Sw`mV1ioY%f~>f zCr5U;7vTa`q^ox6#q7J+)gxI*v5RP-Z3AlbT?I-^MPVtaZQ3(_=TD$;!{>;3Jy)AB zKoCjqn?9Ejd-~4`-^j(eXNrT)bnvsmaXOmk!+D+*wPUXk(F97uFHoT&S+VpiWH7~m zf~(*A@bQ%;Yg}JW)A-+X{q>3cObO8QO#%R;;p zR~9AKo@ns)gqCzsfbG&IU+ySLbuOE#4G`c+LWl|Ig9prEGdWXF;6p`J<|{yL{g`#Q za_f(S4Q{$_e^l@h_xz)!6T^~oBaJIED=W_~|4aNxDxIFl%No5=JAKIt4WAD$sg{7| zFdWx6Jy%4PoDMLQhql+EL{G1EZRKYB_I+4XDi1b27{p744OpXa7`>IKI*0w8ur!5Su`B+nibY+e z4=R}v>TR2C`W;8>q-W;bt6lp`&5GAWi4T|2?VPUTA<&p#9g+0`ph@+cu1@uXkpy$T zhXNXZ z#Aa6#CO9X2W}dk5NwjQ+K7%@I3c`3i5G~Y%S~SFHNEfbH349ZoAW@k$d=+O{S+G6bjRb|7st$8Ea&nWsIm@NSx zq|C;i0Ahev_us#mNGLVwc}*`$>z1!O8qIPNc>SQSG-@ z7H1jdioO#r>{Ag`Xcw1w;P|-YRX;K6_*h@**e@wFCvXTDO8o#xiH}>2?erJWLF3UJ zqBMwCiL41yj}?p8XH-oMG*ZP@gw(B9s3ir)!%DBrSzrB2)u{3Fm+e2Q4}V5s-jM7| z^6oTxa_zClQK z3>zY6@ZWcW@Wz~fFN@SvJ;=|K$NG6nfLK2z;5;=(8UNRmT7lo0n=gbv=*m0JhSfiT zEIuMd1-~^8Kn&CH!4>0&<%ic2zc%*EgVH<%zINh2I6XNPosk{*Xw1OK+ zPrR!;Irf@cUztz>86I(*87ru_C`BIW1WJsFQ4z~p0B?4GlP;OqR23luSpr2wjrsLV zCOAS-v}(waA$C!Ml5TA1FA8E*lZVUNRXEd?N{JR6ks6KIUkr}2glq7ouB5X1EsUf& zhlu;JB~oT9kNc6-Z#=+MwBj*?_>Xt|Us$2Fa+DN;0c#G8{YP4f^nD1)TGvv9#y z23Z!~k9!a-Y4WU5)M>=%v?}#8qY~uP!HQ&$$6`d8mTa{>&Lp`~gkj5UUys=-0ytu< zRVYuHr6B%-siJGmK_3U2AIFgwQ$==2M)U&bdxh?PO>(jm{c66!K`h0cB~Dkj6J_2X zO8*DgKqtS3jvT|q9*H}ze4iU{xS3BDl@Y6|!H~0Pc~p0@BS{pW!jA9X;I+>_CuTV) zs=#mr9&Zo@kg`IQeEkAfe=Vb`L6qWexZ$E<#GZMAi*A2_%T&1k%8$5i0yhJ)JsxzWl0@x06by!uog~)pEU>PbhQbDTf z|LiH|Ox7_=O3<4hL6fU4rPU?<$>7a|~dQlj+bQMLbrb1X)O6eujZ(mj%MSS z+t~EoE@at3_xrG836eXOvHJ3R*|DygyulZ6)YDhf>f)7@-}V`%l}6+@p}|?b2-Wpr zY+K9jDf3CiG&H}06^$VkG^OF$M-nLTVeZ;Y@zl8_q86%O!HlHwwC_RFV>@7OSV_#R zAX2mwBbvfSCja!aY0@W$O}E~~>hT*WyzCab-*G;TfB2Cl@2()X-yoW`fU+OA5$t^w zK0Qj=H#4Z-VPP$s#=OB(ah!ZwJ^cucL&jdJn`<6T>JjqI}^dP*sF$W5o@$=ACKK zy93@FFIHtS<>(614X zN13^L2aC!L{9Y9!nFeowbNjZXORh#$MFn3j+sU@1Kvx6>1@*Y>*c?`_--(-FhrV?^ ztlhkmuQyguk#;%#zOmfh1D<;9Vcs7Nq=9ZO+&8*L2G$D_ur9?o}I6%_4KF`QcYOvj{bcM*}8i7W}yu_#J*3x-{C zDsAe9uwv!R`|c}dt=^61^%Yd-m_ta-K=foHLA@@g zGVIQx|VT(LH|{9gcq{U4PjApwPz!$4()_d1Q&*Od53&Q&uF9wJ`pG7qezJ zrItzBg!=tQGve&#tk_;br1`ZBA3BSdKA4A*HnANGZ*Df>V21W$3ooH8&?J|%1BN3A zWaZ%3ZA`#YyaatgG)Z6pxHgWEP<1adAPbkujmwET5DMp@0=BS`bx>V{nqq)BrDYO1 zxq;fACkMzWxDKxH5b#NeP(A^#gd^#M>NX^>y#%jp5VI^SN5b#(qRAP@JZ?(_f*w>{ zQnhq2Nz(QLA4$_tWN;k^$8|AmfiILt*e?+?98g-)@A5OrGq$p9$~1PE;Bi5y60(t^ zW{*ueQAxRNk(C?7s4ON9P_~l4yI${ zx;8>mP&H4crbg9}WGQofzZ+78nrg_Z*MNo%gRr&?t$uUrS?zKZ@!>lanMJfzTA3WQ?*>Fes%;*KqM-IT}9Q15T|#NIV6q51(q` zAkf0O*sH$gx&dGFNXrhiY;y`vfAn`=eYKp0y>6mf@}k98@W@#g@z%ylRLucd$LIH8 z34uqd?I9&+d_P5&G2`V_BpkwZ>QLCkOXb=rTzAqG9&Ov1<}FX*(XkKn=GzH29eX7U zD{RtM4JqA6Nbw-MkPs67T1B#-C=-rlqscNMzsmNwiG@IxGirc|cp4FCK$|uNh^n3J zsi`KRYPA8a-%k0sX%kPYx_Ep+gs{lzaU`~>;~Gi4ZCj%#tFW!ia~G+H0=omgmQDtFwnG@4dw<&%VT$ zi;KZcBM71hFo9^yL{>ehm>8yl94N$J7-82l_p|W{FIvN{bba{&+P*S|s`;0(qq-Wc zaRG_X9%a_ZPpAZfxpfKD31UUQVA{`}Nu?M`_*#3qLIOjqxyYv#y z?%f=!*YeJT*Yf<>FIin~l9io}>RPyxMovxv9kKsS+RE~P-HnPG7si=t>^wRL8iLAKyRmyi%u2a;RQE zle?!aK?wbz^+4&QMU&Red3{(9`eX^JQZ|0Sj|T@S;Xj*wcJC@q2bvTjXSgGFgw`BB@C-q5AbmZ(7ch9c2K-)=%b~KE25ITX-~y zw5J)jKK(MoI%=%kxQ99e&thPoHe7SlUs+q_P_KD=j_lTm99>4wEu>R7gg z9P6Med!}XM<~HZH$6n&xHa3e_ZO31DGQ&rl!CyvP%v*D|qh+;Z)RQl9NmnncHtZsQ zz?lr{+kvZZc!V{j2@0FG;<|^PK%F~{rNs_SJ9lHm1p~Q#_%O!KEkes{!(ETP%=zsc z7O&cduii%-KaKJ9uyal1?GDXhuCJ#rNB`fC!-eB2(nL3Ly!KiZ)V} zI+4~bbSBJ)P{yYs5{Yp3u={!FsxItqAE)(sk0Mk(BOCk&uz#jN^RWE^IRq}qstQgu zTUV{eIP(m0>(n6;-GJV(Ej@cTXV(v}vp8-NXmc*3Ub>s^_5?-_eU)~1jOWV7Uu5gD zetfm2wl|L&q}7ST>9uDTS$!|1Z9c5uvX&|bcC1)VQtw9Zi|$}`VjAJ&E~a^w!rJvK zskChBsw#RwMpflZ3|Yto3i9#T5<*y5Kq^{Jc`@X)>Bq6d&Lq4mjZv|KJ==GZMn+NO z-$-9OnHnF{0mX~YqvKi`ux2X)+laDl`5K~XA9@cT!_2C$sW;?8n&-g$rSquFQsVhGBzxlOZ38a^cs2- zi>s!f9W#EG|>Hcd|rMQZW%vT4=I;4P2)26fjfpfX>(fg>* z`4atv3+Ytf&kxmcY{y~8#+{^m{pmNT2j9Q@9Y&oKxcQdzF&4bZvmebPZ96!oK_u!@ zw|zT~IHDzqN*C3QuxUpX+n25<<{QN6m!HkMnE7T!Lm^VC&6 z**NhjJ^>XFE!oI| zT^iT)>Osrk`z)-k!O(KiC4ud_n2BoQwo1?TedypV<;$WXqQXmo1Xe6UW!y`z%Wvbg z+XfR~{4UpCe;L1Y#PihsLXKlht$$0DfN!RRQ&9t|t5AG`>Tf@1^MtP`nzf695jWH8 z$+Kzn-Bk9xwVZ~722r=U#rm7>VEv3@8r^U+bpoEf?y_s!;0R=&4}}^OuLh2tq0u3* zYsxSpjY+MY#Ns;^Q83~by5Bs2`p1l?>ch3jK@Hbd_ukLXPv3)Ev6-!}d`!dV&!t}P z)@)llmx7~v5)#|l@aEUVEzqRjj&7U}aTFF78iZUfY%8(2Bw5?1ARq4QIB;@$8m3mC;kVrN_t$v$vuTtX9+Xho^E{b??A69eh0W+9V#BUq+8!-I;W0XKq|y#6^>fFb#u>gozoi=Gw6{p+QR~ zUf++=C${0!Oc&}l?!!5QoAK(2op@|+8OYh3dg1wKu8QM0 zv^f4Ut~f^Fy8gYHxXFeFC-Uu#H@LF@m)!XNVjMG0ye7@A@89O?CnjMA+w4~$90f2A3kr2b>kl8{TB5& z`gd07YIBz_uKo*i=PYLXJFj#0;Hx7Vk&$CI%H?4I@MMNx`6QB- zg(|Bkst-l3B@ekEWCa-)7a6ZlA+dWolV5m~whvs&u$Mk#gah+ly@e<4e2QujB$yQd z+y0HuGE>heD=LbrBGm?YWz~a6iL&|YS9zmj2ZmjI6MyS@6Sgo|H|`0>ee^vR8oD=t zqWX|)GeRyBvI?5lkJkg+rai|8Z?xlr3$EqPcdo^jpyJ2zeE!zQl-LUXkcULgR_1;9 zGToZr$k~7Um~)IY^IyA`hsV54o6B$Kw%Z32j3uZtp+xGz#m|jL6fNSdTL<&WxWDjr zt0r7>$!H$vI~v&wyS{ptu`iCL%7o@#FRH2{%c6EF5vZz$tjM)@e_-G%1lWp-yXI|1 z-Pn*P?!SV+Jl>sYljgBzZJ4xBa2=EC*`M(2hh4dA)Dw(5eH(Uu8|s@Yc!XV1rIbR^wEt9kl?hgni$VLYhQBRyI1k(-7`7+j&W2}#3;xQAeg)c6}8Prl}x=6l7y_ONVVHD>@x}B@uL_K$|sFyd-H4>-u+hwUbcyn zX*+SM$}#Lr^VUp**d*1nRua3U4{TdS^_CKBEr5%S9x9-~m!hh&lsV&HWX{A-`C#bz z^lPmU$_`Olw2tjBe}MnyA+-5hcO=OnzU(X3Jo7DS+eO5;QZ{oZtpBAZ0?mwx@8*$P3u~!fYxkEkxEIJKJ-}z^A&p z8q2c&cUNe~!o^SS;4^8^pdNB$3+u+*%ldIE(R^8W^Zb}Kf_hiqOx>#;gr0+@2MD%l zf-II2TR4Z^`B^l&^ah%Z_JHKYDy~NO14t-%@^UbXH&8NtIgz3WdnPZY^@Ux2)}?aY z%m=-)F)oDnpvKn8bCx(6h2|#ldMAis}%VH=D8@=TYb6qY1vV zmYfrM;%r+=$?EpBCTU3=H~cOJbZ@}d&)&qy+n!;28iY5C z{E$X<%0AfbAp~sRT*T5n^*Qa>E=YCCSiYl#dq4P|ohb>$tJ65F6OY45#~#gb$G8Z^ zLr~FaT|XN{5da>^W%0UgEZkWGi5Y+>9B_cHG7ce(ZP7kTvR zQ@L%}B;K960@vq1xJsSt;#z6q_&H|ad0cmLbHW7;_~!AUT>11ae0e@xBfxogJ;z`J zOf8Ehxecgkk&D1W)%~bOrs<(1t9Svmwh3C|5GH`ioeTK-``ujr)L5GSxPWC#<}m)F zmngA)sH%rRfgdOB=bSs9WndaiHAvIkh9p|#WiDT6xK=SM7H-U7nB*QldiiPMjVcLg zGF7`5@zu9G8S&)1H2!e`OBc^(!pARBZ2Kt4&jRNV=9WVcjc{w1L-zo|Sf4*Y(SmW@ zKK-NG8lT`Fs>bJtBaYyM4?duE>(>7>)9Rm<+UFwS31;C&mNNPAk(4YQK(qQGQl%SM zH-82jH`b7y-;nA>@ABBP?fm$~D!g7F(V5Tj_!WC7NN++>{rIx7$niv2IQ2PZRZgW- zi+py>{+Ok!A_T)hti%c?KY1;?7N1Ourg@}G*Rp!nw`|#-A{6wISpG3D-nN{`x-|s+ zeq>F;vFyE0yb=r(b|S3%{4YFFv4l>Y+7Q-aY+JMh(-S~P{Z$X2pVveOp$G7aI4eKA zjTffWuz7bHudX44f;SMrjVx#K<5yF%Y%uLw6%gOHm?bm5VsoWJAQWQzl;?SFa}K*! zR^#{ikYn>0ch^05tCo-q1n^dGWBPM9QNHXXTDNR~UAci(v!<|NOF3E~genVs#MwIa zabAq9rbCAo_>=@Ym#jhd`zc%U8J|B}gr3+*MMadf(8;dT04=qh9hC|mV+Y?odmWXl zPo+)U#<*pxST=PcYd1&m`~6fec$>E$m`cT}61;vtQq4lXdVDl$^*Umj2ThiLa~2Bc z<>NCenfuP&^!ns!nip7X-rk&7XMI42!VG;WOc5VHaVI6~2GgfwL!|02m^pb8Kd#w> z>JOr+5|W!>+xM??+ij(s+`A27r-n6~%L#=1q>@E^@V8qjS#uWsk7z*h`;VCP`4`OH z>JkivVb@Ila?@4JJMlQ$HO$4cX&qn8n85gNmty-uWKqHR=O3VQ^FVsFtB;6&!n|oy zn7OK$U?_-OIhPk6x(9pP9)kV=l5Ar;E-nh8aF9gN_dIaj2<8v$N5=-)NZUT-%OAgD z{5SJ4)iBv%FA1lFweLT`$ZoB9`Sy31(zF}*J@_QkH&o;34Hz`?E^fNvVwzNa#pp-g zVQb7oR=$MexTxL`e%WT_M~^Tn-V=M>RMtg(_=6rK*ZvJ2g#*Ha8n&pK^f7CuS5sN7 z69@+JxlsARYb;-$L%c>pu3p3DC!a&A+JMkJ$U@EpnURqLew;0fSabhlh}|oZgFz%o z!8L7gC6s_hdevMuJ{lo1zat*Il+x)N5p(Ae497{>3QE9}sZ+`hp(;_T7Oo|>JAo1` z0LQ7N+4;z;>%}%w#3JQ<``&ZR^ajWZ`;nX^iP_^>Rl1gN<7|W#C$Vt@HCy9I+1ZHH z9`?NYH1Qvs;>!;pgpEWp~SZC?ZK}+h%Gum*Z$z=!!wf z(_@J15n{z2WFJV<&kN_KnIExud=%4>@C335`gIgZ+Dk>v%mFGbdv?RWV<}&ZpT=&* zM}hL6?PO9@Q}Yk^zdI!0^QT{oT^HB3e{Ou}IJma+GYwVoB0D=-dEQ;PLvEzU=*}d! zZX=bl(X!->1httaRa}CDf|J@#_52@+EZUB%1*w1IopigR8`bj`6Is6pC9fgD*7>-$ z`!jg3ZIBftKv;I>#rnyAmopu%?UaFwTl=>_$otpZ2*ry68P2r(OVtyBkR)(y9Mi(J zWn9Na3V2CxTg&cmR#ETtP86PV5_xS4sQhj$(H%8Nnzmmw(={zz%c|{cEM=}ih)k5^ zCr&`^c;bK>@{*W4fw>nH)A+o8gxhu@cfb%@->{i=_dLU{l@%x+5BT(q+K&rD0ZCSo z6oFs2`0lj___E+;`d{^TemL%QK79LiUVr}!wpN)4pBGt32wYO84LGDs8yk>?K=&zZ z-@JiA&&9Z+XEVCgt3$8OEg3Vgn)^SQ$J-mCNRj}@qNFB9#1UXtvusNd>vvQmshLm2 zsl8uMz(+tfcwzJxn29ma-hFQZ4B_FU5cd~UjSA)~Gy&E(Z3 z8F2&4BoV72?gr4(#k~Lcoh1wQlr?)cujR#1(;7WP)YE*}|?V7OI*~PMnGg$`seSY*n z7)_B-bq_{tBMUxR#XJX)K=TIh1hdg(NNt?L=ZnW9`@&>}gSgJVYl4gGs(7<^iUqbPzchinEvuyEY(XWH;Ztt4&Z7 zgOS+EqEDX4j31fv`Ev46WkL1wiF`H3Kn>&)^apWcYx(j0`M8RYKvoFlAictTm?Z2F zjoNjjRbd#%hRzpW%V{0MeEa2EQYd(WA*94ErjC7@DQ>MWhUOy}45BLn*KtuiKBRPl z#S>p+?)Xd=!s87R4hGSEe$ugBOnK|?eEoK2{!?^6;oMv_Mc~>7(M|JtchxL}B;h(X zuA~wSXA#s@B-chHb}{Y!=lG^p$3oJ)1Ofp(nuJrcigEAE1y444;b6vh*y|JN1OgJ# zEpvJ6i64+^9b#8f@rQB=>zO&&pOuGGS;E+x&!w{LY5scgKu+xP2{TtOBjv5f5j{F% ztbCu5_dU)xYa;}6vXN_pTtd+ast#3azv0P6UxDl)Hz$jb$HlhY-{zXCeiXZk%E@0* zY6#TqAacNutuWtp?C=8>iA6q!^+gwNvevl4H9dX5?krk`g|&i$Acsba0O1XoT|CSRMak$u8@#* z4MkHxa#3W9^yXFUUcaJNbVWwdbR?e)u0?FYOd^hq;`1W?3Ju8kLRqL5 zi5P~JM6o;wA=gH=B}A%}T_298VnlzMUwIbAOP(j1Ft9BdRjX#}!w<2wC`BNv0Xbcp zU~k`nqSqm}XJ^E&B`m-8CbpMBgF)9(cVLIw#&9lnDvcb>!;_<9Z3DeU1GK$zl`f8D zAqR8Nvo%aW&Cfy8RUFgU=M@t__kEFmkr4u1VS$j4JUUoujHHR{_))__bhU(%DbuMQ za30OBz5ow9**IenDKmiPH!{BY?9_oh_z#^RGCr?#aXIfYebZ^^~ z=4z5BKbb)^ZBp2_1G7h;#O=rI;qA4{iJ0KmOy2)$79Ve`Mr7r4Ow$}vRZ+w~4dQ<4 z2_%HbL_Tn-sgBa|j5~PqxrgYG58LK`#;q5>z_>{>DM{<(=Y})NXb1D@QzpLrJd|Vt z%LXDQfv`%nIdmE)@!bMu{<2@derX-J-IWeRVx02fu$u+woWaiOdNe>jW~;HC{c zIoYVG%=r>Yh3tF}MJXHG734JPNWNUgOAn0VC4k&cd^G(BZaV)1Cg1ZluH!>VuI0X) z?xN(UD=KI}zG9=wQtkNs+#AY8plCX>D=;mGtcD%PlPh@nFQa)GAg2Q#eE%aipZ^gv z?wf$)dO2vRjjmzu+)a(FQ@4IYaF$^UKhnOz0pXCaphMk4Lf!~Fwwb7!x({Y|z?BK- z*TEwkV#(z1@aqoSzuTrxoyw3QLzq8*{+~0LhK%M9qj;QJVw6CVYGr#J2`!jQw#fXS z<2nc}KrqjTHxVJ_I+QG)$>i+KY$_9Inu6xd#_##5hmH+MXudFt{`2{TBqP=KL6P(z z;k*DD!58O%(Q(HCNe>WIe^SrP1jxi86!7CZI7sNhJTyR(#Loe{pYGomM$zrs>yv8x z{kS-`i{j5A%jaeSJ5DB2AIQ}*YprABAW*y^f?D8L_vh}dO8`mr6Ug!G6D*X#c2GQF z!kSZ?`rpSfu3ak~7gS%Epzh$h8Jd$M%b7kYj*H|85%Tc!^+`JZ?A*+A{2et)+m)!U zj?s9~xjgpJa2oktgle(qy@z=8oq41cFS;wxd_i(_AGYJx%6(^k|L6O25t^5*Tn)Rn zr_x@Kfk5+z$nj*3M@T5Lj1W#OJ5j+O%EA+{_X1c+R*)sJ*WuQD0djQj-rtvG8A-UA z_eJuMm7@a!=NEKG*L84F@P)E}b$+SVNp=ATiC}IWM0FWoKYRs?KWa+IjT6Yr!6$9w zt^2Rx>C!z^#$2*;v(Y8?f-797Rz5w8T#r-RoYna)=H>nYS_E<+h~#E`Jh%4!mjWSl z9|&3CqM>DFWmqcvF$&y_sE4Yf|_FQND{8sTe}u!z>BO0 zaY|OP?fsRMuPQ?hc@LNlaccwBLecOj{7g5KRb-FCPx?QZ2DU$K7s#rPP_(_ zuDF@xm!u$j6r|ew`}z1xU|)FrD1rm7zmlTk5t(o1Kmia}Na$*aopUGf#;oxa;U}Po z|BA-phXi~cfBbP?c;SUVAs^etjG6?FKAASBbi&)TJ+AOlZ^U)@jxV9)^Uv6|q6W$9 zN6QYN=Hy{6TTIcUW%Rh_JQ|PtjuqqAQvU695@(O3>#KjK&b(cOdiNu*u$*O=-AehE z5^7d%LR`{~_J6&PhGh?->W{ZCkMaZMe23}T_10aRkDH2&wqy8<~WXex_eU3*Txu0hz zE~icZD>*)QE4NKw55R`$U$Ei2Cm8$E7+#&Uf<`^hGb|srO zMHtloEUsD>A?Ek7W9b|guB>9)l5bhfIXv><{X8{(865`QKzD6DZ!OwF+OqI8IF>iw zzKIp@KE=l~*Pu4;K~rxv^R{Hf7BmbW%va@qD4!L^>=l}U+wZR(qcN3~YWaMf8nON=qzki_XQ}(;hy`j3=IbuIn!amKH zGa>AQ+~0mT@aua$@ICFj&%WbVyWhSJuq5r@23ZIsap*na!Z}{b=8fgL;Zq6uWRjId ztX;L93d2iQ*tgH`%cyeg+HxRDZ!OhbRx@L>mzna5!bGLSny1_?z!8wZc~7cfw<0zeeL?uj;Lf&~->|Vbgv0W5x{> z-H)bA2fvSBJb!l|Fth)t|0CPkuVMW@kN0=#T-}3StE_pjV~cqF?jK2{Ar$f&4@Z^(Ea?(jB9r7`<-|xTw_jVdPb}SPnOkmfpUH|8cv~8PUFo+~c)YR1cf0oI1 zF%uTSqfeym6(^z^RYW!wqZT$Nr%eHo*)u8M8Y9@g6M;~ilCS3wtE|SXaR_#6j}qTS z<-AQKw{N0yV>SK`ohazu5@+X9*8b&r_AISH)giiOGnSr9&Jpd=(!1IH)jZt19FmLX zQMsm=^!Dw<;|k#pZSgwg?4B?Ww;)7f-W)17RA6r3Ox5OUd~G_A-?bUm*2S!Q_<45C zFG1)&d@b4#%t=%7^(>-gF|;~O$nI1?l6_PsylRw+sXtJ*Y$J&(mtdz3@_k0-_M_uggWdo!`o zkW>xQl|(k}M$T_YR@>%;n$;tgKg3_`| z=I=>Rziu9Vo92=%E9T+x3wUp143Af3%dRpuMjYBTu0!AE`P9=bCeB*MLqBdOA*<9> zR5EK2XiLUwkTqY8a2UAvthi<4+S(Yu7et7{amoX$(n zKF1F$_u$RWB^2U2Jq(}$cy-=3YQTrr)+TgpjS zZ)4G_a*h~u7DM_UPqRQV&)$7EpDx)=Am}Hudjp#*y_`5?Fee^=JjZlx%A$||#^2wY zjnMt1E7me+X&FZiI)@=A9ZTyv1|R(WUf!9p2}u@sLiOo-L?hNsoy_t*QFQOm4Q>@h zre@DZHdS~yVbEYs>~}oJbZgF%PaoxP@BWCT1<;h=Lmx8Ol`LOY!r)Q&Gqj7t4?irX z+R99^j%{Om3%T~0kGby*AGcg^1v7S=gnatmagIi7IOeLS7=1=--h28XW^IV$5BzcD ztn1dT%c-ZH%Ja`Z|33o@ZoTzZKK$^*|MR*cguu3KG)=?n^^!;=ux%SjlKv~lMbtWM zR;r40DuJZ<&@>g-wGU@0|7#wighv&mt9G(}!$vl3+{Ct>WhA8lIa!$~yZb*h9FFZE z6fc2r2)`z992*xEe=vyOqwcMF`4hbWwJH||Ry2+4%E-PKCA%{Sl7bLLKH<|`}XbVy8Z|FDxCvT z0feF;Y8%D5j*C#0TIx_5M<^(|mPxBx24*aU&^^eCz%>nQ6O^D2Nd`Nfz;+~LUBNXC zTt`CI)l5W5mT=58cG5!f>b2VilCEYVQL+S^wY5DsHqL=Kw?ZJP3T`@ym9mk%wbIkBi<3%&=0)-RR0-!|$CJ2{jHJr73M%q` z(Ug6E*GR=N9EE`2gJW4l(-yKKqstj5C~1LDSMewU!!U`N4jxshjf}XY3>%>+gmf9l zvWcWEBt=G-GHLyU4StWBNxeHRmg6Ex(teSZpT;#6k7LU^evi6eH0@9qNZ}YnBQel} zgaaC8B0?nT5D12T=4wY`pa%#Cbj(DQNW#J&3ZcsxdWjH_j>kv~m5|?uB&c0n1i~?i zMr+US*D&G{qG^{vAc&?2Y%@tTnnDYN2zWJYBS9pRK=lRi=_;;m5{*Vd3lI)?GS`=| z@c(puj*Vs6NQ$zT4!G~La;!AbXmaoQ9V0fwEv6^vn6C%%G97c|9?Q;(MKQs?`dHA=YKbUN>_?sV)j}ZK!yal_us09 z)~YUX)4j*Frwgynr{A_Biht_25~g3*vy%M|6hAgKyj zn%F!1f=qqSZ#A9Peg3`I^$(lt;0lF6IE>>s7-<7!FX50>TMLj;d)RNg;vpQ)&_sUX zwYx58K0k`%V422V$4L^ILhC?i-{ZZ6wV%%~WSvl0!*LwasT3gL4~39~sO8?v`y8L% z@AutW{nm__f;ix_60$}ptRC?E?jcT=E(&>daw(ee3jKO7<${yjlT>{8y(t2^!?YJi z^Xkk`n6)87Zk>Yt3XknrHJ&c#an6z1OuzL#wxvDfX9@l*$jEgp@_(v{=|8H(bJz~sVLNPx?Xdlyy{$u`y7lebm*vZs|4X8Ce@Lp^|GG&s zZZbluCXS>B(X#{K*oVjEu>E0eZ>IA%{=GjgmvItRltof_vI@xdi2rYC`QNgCCS8Bn zehzB<8L4iE?XVrT!*0l~p zhwUF9Q%U+Sd2fG*@$_#r%d-9<&~wPZr*GfBgu~&(Z{cA(Y=`Zz9kzdoHE!JaaK`^n z0t$qXGESN#{h#Q{|Cj6k?QP&%CZ=KHxPRnosSI$CggEFpOM3;2YWpII{T*fLKkk4E zBv}H-BoU91G@J~j{=Xan2{Lle`;9N+KQg|V`e%z&JWeW|>A@)ezysL3Rh{JZ+4%=ZnY=`Ynfp;VXE_OPZ0RHpys&NIdnQbCiWZQDxk8jEeF~ zVksGqPe&2X0h?a_w;&!#fMr@#B@E&g$dZI29O5a1s-%T=F#rDl4kK_}7g_P(Rb67$ z6;#wDa70Gs@eda?ab2uL4YBG+9|55YcOp0|3h@^zihlD3D-8Lsjen%^M{Ta{V&_Pb?Xin`yaOdtam2_ z;9#Xwq*5lX`;$87p`SzGV5SqK(*u-8!Aew8 z71L=k_-?Ma=RVpu^pdEm#I(g9Yc6zMTm+J$qA1dVeBn%!Rz*RU1uiZ^NGOVm(ZrYf_c6ISc;F!+Opmgt_gMjn{jm5sl?A<4$I2w0ba^=IX^WO8<(L#$+ zURr^PjPgeUKemPGXw*IOLe9B<6kS^8V#TA_zYKiTD)mZ=f?V4N@&6|*J`8;Rg~2B? zQA15-1<90g*unfa46r0zq7@}nS-G5eaz7emDVYe~Vf#(9Qc0Ao2J}1m1hUNvN-Lwd z;xG^Uk7hMBHT>|y4~GZhPlzvmUip9FnY;V19~sA|R?fe+x7mUA{gw0oTj#I+KXHKI z5!fWF%P{nY^t$R%E*N$yIii@FND7xjqbUjDV8mjGa9fVQ>2>ZKH-%>>Pv-82Z>70E zM$B;7>!XQ%{?y*uFS{dv`|ID`>lgmw{)CGei(pCFbiUwT&Ny!n`JOn5q=oB>3`lTn zl93cCtvSbBdKVAfeGMn|Y=W6ikv5&Z=N7PETZR9m&j12hhD1#{WvM2N`rBJPGkOqy zE0$T?MCM+NWDG;JCV`@D$19MA*K zCBOVOT{DFtXVLDQG2C+h0}ML815z?U%KUi@glmzERg=o@$@x!B;lU?wCEt!vQyB$W z-e2wbKlJS#mb3nsga;fFDVtUUZsYV*JFw`3zw!Otjd*>&Un5Of!i-l^5i#)i!eoWK znO-TsW3nVjRF_eca!~!*IhASb^7 zT@g4&f|80Flt2!70qu~k@86HmZ6cNB_}dQR&9~m<1o?Z;IBz~1(>A7Q5KlVzvwVa! z8PhN*uTFy3OI^RZx7W@8Ch&>l%Gr!~=v|I8r!ivq4NO`eB`+t4aGk^7?jOX$;V_*$ zcmAIOKYwloyG)?QOhri~%)Jp%&Ev!4^CDxBNW@5{Z8VRcaL9)ltEMJyA$dH6d_Jsr zlvvt8)is1=k+K~WRl^_fqsS7t4puTkGGStg%)d2{53k>gEWk>}i6#tWMMiZUl9r1k z%lLyq6vrTDILMv?`d)uM$5v#sblfMT({WsE0>J>8pKyNDL$s5X)TBf7IDHHwt{s3? zypHmU2n(oEx^PwmLGgeJ3Wh1K!l5LT;T@+2j z?++kL;vjw7GESc?2~x2dY7%B z+fp!{6tSd<5a9J|wCUcLwpsIW9D_iUE}YQ+NH#qMj^p5nARUkHM_;=b#WgW)6)P3X zP~&6;fsN@3{QeMLEz_>TOeKiNQ@B#55xG#k1Oi@ENnn{tqBU`BNkNt~?}F<}c!NQF znv9c#mI^Zw7_u}=WCf?1!;m@-{ zkz9;KjCjHTInzkpab^6$03KBW*TqaHh{e+gS;lp2Ttz1s2%yOV+lUc~Ca}*TJyF!J`?qz{N==aS~>&%kJQ~0@>q3 z_Ir>d2Pc)pP8c{p^&b`zlE;VQRRM6)X>1#WEO2cb91yCG;`fl{E9UdZE@%1b&5Zx( z4&Hry52ucJiS5-13Ua*&$Ib-YQ&FM`69<)0IEbcj5Sn48Wr(m%6459LTi_3d@Od>{ z+aMK*5HnqLZ;+r*!A?hs$5L2GIIe@L>b2je3}&2o(jc8EV$IYy`9f>S#{v=m zOAmV|zX_ae4AY^0kFz;@cqh!|A24P5iUR;2msBiCxXJOHJm4ty%=v<)t9GF2p5OZg zqKP#1jy#QEadKa?w!! z`r12;`+6(`d!NaV6$x^Kp2HvSAH>?UX~U>U`+(zUT0cO% zcq41)&ScxJO7yJ8bUNb_+Sf_3bo~1)*tnZu<30?y_(Xh_iB7+IchCzOxcn)(N*hkrO)Cqio|+ zO0+g~Zktc#x;ZSKy?|tHXZjv@B(1u3C(jYYJ#9E<_|>$ugP29DST_AfDjf;UqyMVW zZ$=2gCS@q7!Fts1*o*Ayr96J?rOa7fgKH(Q3DKrsKRUJyv3=$jEM8ZFw|-BKKjSEr zl7%dszKonBPp5qY54+YaLTb^McJ;k%o;9AO%eLWq{WxYE$JdNb#~(|}X1Q3Aootvh zgZ1loA?kLd$C*88)v7&Bf&!cN95doNTEt{xMax(?Z5~$3V>qK%|l_=LG)=BregDI+y-4}m?N`$ z>2y}FF2d40$nrr16vYm9hD?$y*|gDGmze$8$snpW_ zb2e6?c|G`Z+H&eiZIB~dF&Z36k7gm(&-j7~Gu9BdgSgQc_}Xys?N`%c&t%RU^(5=# z5~2Jo+*F)U+haJjQyq%t&1AvGJs4VjPCV-z3f-+t{cZu3kt9lXb51(5KS#B$hho;S zZqZDp&t65;kg?No46OmjUvLHh+(0A0Cmr1wW6xTqe)$DIt|>wGhsmnffdT!RAjNiJ zH|)i69SYby{Ubh_yol;_h;Tq7nYPJp)|)eq>44a^gl}gprOMFJRp~cP;rPQZ96j6`M{vZb+A(jOn)=FoOue(eA}5b`8)Ph zRD$Y~-(?5`k7`5Jvd@?^XANm@Q#uSdk+$s`p&KQv|6vNtS8l^lb+mdN={cwmjdE3z z@oJWTJ&sk&H`SAxA1^X&uqR~wiB<{gOP|*8A<%?Q2Vn82Rxaqfh1w4<5X5fGdyb)!nrwk6_MGNicnS+ zNB8?M;t5$0yOf-w4(iJ__;zRHSTr9MO>n`}wKf zw2S#WQZ#5@z!R7BW!1!Q_;_6fx+;@Q8AOsMI4(#sx=$yp%Lq3!(OH&7Wju{*IiM&6 z{W^Xn!vjyJ(^N(c6u$?>GD)Rv&~#^9t~&5{{Xow7d$* zpG|(ylZm_~qg2+!_l||;3zHS}?j2vpNKjcBAtN*{6UxcKr%AX793xIyWfaZl!%8G@ z0L2?3C*(s2fyXORxpEqp^gEgCU~b`L+Uk5jkfAcoz2KFM|SSs~Y@Z`YRC z+ZXcIeK#{@OAAiC;$F@=LS^Od2qjW;PP*|9>IFlr{_HKbd^43@rh@A8BH8xObF=^} z9U(r1{= zg(+uIwtNa7jJb&)D(Z90MK^FpmmGFP6U5zS^tMK<@;5oWFK`N7hH2Z z(KSo33!BrbSp$maea(9h-NFwmEAV)|9H`tv05w%no5pB%2*86SYn(zh)o_7qCgi9fa1LOYV4tn}@Vu*P6{3d8cv3CFk+ZeOEH-rCC(U z4Y_dC{fxfg2-2k$sM%+8>hWE9VANeqTwQ~waTiA1_cxAm=P+|sil#^Q;j(l3)AY`3 zd3fA1QZ|H}w&S?=9+pp<%CsF0_`?JghqAI7njU>Rcinz06Gtv*=F06@W-e!5`v51~ zpD_2^8EiKSxa|6Sxbe(R#CGn%$!W%ji_hZ2zg)}cH|OK}TQKa_M;J5wC~CGAA^M-e z;FEgtmm5a%@vqJFn0n19!Y zl+^^OH|$C}-Es;+Zvs25kl(i}!Mqn)^ZHB@mQMEI3ux8FAhvW1a3v~*+g;;j? zCv4kgkQ>UPx~!VnGbgg)jz{U;sWZN>x05g}d>BLwg`)@Fz~c{}L3YWPoO$vke6ccy zH$MwWa({)}gbY?9K`f@xYQW8mJT;EGeF?8kD}z)c23~$Yqb{k-2WNl46w6Dm;SY25 z4QJ3msX)!nr+Up0-oAY#U;nU?w686_FT8?d+vg%_I*C=^^4RF56fKY95jJUG8&1CB zF)qF87Lfx^0E2iWPRnyH=PyrQM7?bvvTMore6ij{^W@_ZHufPP zpVHD&#*Q8P4~C}xmoqg+6mq*T`l-sKH9bh`B+Iyy$L5Ts?wZIZAbTC4}2> z{H1qs`JE4Q=Fl?;N(o}o1j$&6P|H&pasN|Xc~^Pc z-l)Ga_>=(z(!1GS;u4Lek)+>$1g@RLTjwZx<(2T&j7hkS`_eJskZ=S-a){T|pw;Wj zHFrF~-PfK+_xds$)@`IFWur(Oc>DT|RHrg-v=J?*Xm>f5o4FQYrzzQ0L}kK4mL!s~ zC~{6~F1hgz9(?FQ?z!zcdbP|V8BgE{K{{GVQme<=SKrD*e|?CXN1Q^~uAw?_cF6x>g)dVP7shu`Zv!{t9bSkeeUGbzLL@ zv3L@@B2L_P0SU)8DJqXroUo7u#8M_%dHGyeG?GoOKkp^lnTY$)Yml5I1bH^XqcUDV;gKUVuJb+i?GB-MFB27Ir#K(m6OUHIYb> z*KrUxTyZY>9+PM^is{Mc+$(QjP{&+S$r!0v1VYUidfjb2_|Svgd&i9&*DjA_BBOp{ z#H)ylJWjh}6c7FNAx2$(8hIi{RouWzC6U9exbVu0>C^EDF1q%19=h)~`nS&|Qd5oP z3S1Y0b#fuGl2_jNg8C<2MDIEpaqH(Y4S#9_AKfyNd;azvp+2W` z=Fn5nfx3OK5!jf~*jIB&~;1-^G=6gKt2h#tv6Y;qww*6Z)Ko>{$Qm18W z@)N6hY4rIF9B>*}j~Pd(=TI&^w;QhO(%{4kx$^W5EPQ4pCl5Z4`^T-u4i=E*7o=U6 zf_~?7`5B#=|J+ChopBM5ezp?)xn%i%hlb_YBuvmdp2PJQ_F~s3H`4ENL14(v>>|V~_ufK!=ClBYV zcsp)-;C6b}b~o|+>yk&3imEaqfQpR30a;+D6I55#ko>8x#kR2QBuP6(+P0zo@eDod zI4Zsx!zm}7zzO}&V9d)?sg#4rLZV5(3mJ83Z&p2h5#4+Dq4()`vc2A5#@s!EYyq+A zINqR&Q?-WYZ@7TIM-JrOT`d{;&|f*dMTm4N1vpgfSk3a~8(6StEtLruRr|lG`UzZ| zw255UjKXt|Ls|7XbB{cU&)c5C?0d(P2o|6zGICxgTHbjPp~x(joHUq8J#S{~YMsIn zgUM;+hh&`O&I;T_HPIO#@x!^7v+#`-_=a3d%TrsBPNqmBBLP)4RqT#Cx8FFr(_d9N|$&9_jS4B*;l$8ucvJd#oH1mU>xPxAb|_po+%ibjq5aOyQT;f+C^ zX0YO|hZyz!k4X9Xq-&xC+MUG>uYO36Hn3;;2DWZ3#*QX&4)HTH<4GFz??HWUf~TJS ziV-&sqg&TpmM*kVr6?k=D-XUtmNN?@%v;)+roH_%){?BWz%tW#>Kv8XUO&RTC5>s? z+eZ^U#i~Ql1u#tmwN5wge&$t9Z5U2Veq7@51a*$SkjF;nvwX%RHtdWMEG*>edmp3h(Zx)hw+X#oC+>ax70zyLvUKfE z0)>OQ{L(YHcldC|&M!jGZpo;pUgDB2KGtk5reMf<4C>pCYi@ax_2mibH*d#He}5J+ zYbq-%1kF2l<+2L~aO?2le7dZHP{QC@ZGC!w+*-BklZ{A(sy% zw{dH-1T^l{9yL+PocEsM$LYI}winXplrChq>`1OW5li+G&=PE)_X!gwPDaVzMvMMu zaAJdea)S|OFPOugxI(`>1U_>Y8)kmb@+hbtFQIT4Rs6cf$8lX$UoKhFMkd^UE)$+? z#elm$on8^mgVeI3*+M07Pf8U0IDyDCmCb)H}5lN!74=6 zIL^AFKe>%s5(XM|=!Bk(F?HhJ3vaXec4QQZm*&9YX>)UW1at;^%sQ;s5B*n(^%ihs*BbHVQslr5Xgt4;}BT6E#eGn*mR z@!%Q`!8#2AXw;?i zFC9cnpYPyqp(Kz67?oSuv?oo6qt524^Cebo-p2cXxsFOxMHUj>J2WLA*+}`_IPcPi z7@`25?xS(r4g__Xq@tiC%UL;dB8!TnP&Su$-usvqr({z<+Y6P64F5%d5bm!(1lPf~ z?ftS2j%{PvwPNS--Rvk%(5ve}&c8sgapPLXJ#`n=X;3sj4O`Vib4;wPE}VN_eZ2XN z@k&s)c?WVOsFF0~WC;tt{fcF!01J8j?T_d-tO=rb==RWEg z0kV#0fUmhmFe`-El15}@;}$QZWYSbh*MU8C2D`d9K@v8y43^{8R=0@^Sw-1Pg8|t? zmd|9%H%~Kc{+l@QC<#L)H&@Hh#D0UNCo3w78e`M^1#I4aCGGkgOAeor?%0VIEnw@5 zU$7ww&Aav_UvpXf`3uaRJ&)vUm_Gar&h2tE&GPcuxPCVq7Z-zX3r$a{fn2wCjuK7xKlNRQFW-2LJ%+?d z=ikODee?Ky)LFbUeg!?RewABC-@?GzC8e(>0(U8t@Sov9wCht}RH_Y+}L}lNfN*m2~LP73s(6 z)Ch&1{fBdAi&C!ae+r+kuI7ld@8N@fUBPy6T$c{D+pjw5R6bi(MYpr==ELW^@%wqi zjGla9>wcVhVlEFK-IteF#lcs|dBe^jrD#|-bQ^Fr!@9;8e%wiXw-dB>XESrsqYVG* zYwnq_4#$j>s7|tC+N)gk;`g|9dhpGhncOvU5aX|W0~g;xvnH+sl1IgHTpY^;NgP@< zzy-&FmaUp_LURw#y*!Z{XP45Ub#v}Gz8T@52iq0&>fV9tI{A6{^{=^qemOmQcIWF$ zJ8{E?om@Pn2-7gANSN5E2-klw3mUZK%aO-1x?gKPT{@dhF8F`r1|&(sj8{;!+r@Nh z^>7@M(%nT=#!VccpxH5;GpHdi9M_4b7FL2*z?qj^0FsVlJGAI`IhXg58F^w)zS`^{ znw`pwZ(rc@6TV{f$IEc6IPsbkJEp(Ql}}E>%<00oALlUU#xwZhlIL(;UuJQVz%(6P z$3gXo{e+T&0YCFTew1et-B~$#7P>ERSefuYX#Y&Q{;>TKagSSD!>r*%s)&is^nc)U z26;i)Hpx^8YhorIuLmuiq-yOqOrN`r5xv_{w(C27m|c{i0&6moB$JHRkVwWebBSpX zPePU}p$Jd}7_m5MOCSNdl_F)N@jEVx5SWsJlyXSM;s`)B%bESswXFAB6qkDuBnbNQ z@T%a*8lE5!^^%j5hp^KenCU7qO)@cwlvR)@mx-nvBqvR@Y%`@rF(d)9w=Rk-;kpi% zX=WTE)65idOA->9zf;K+W;(N7b|94oOV}s^G}*;S)Q~V8G)=-MZQ_Tw9|r`v_3DtN z#*l)cOd-4NC6FhhMf~LC1aTc3;ql;&BryEh_Q6j1Y!pxd_)q21Gz-+ZWGp!#4_%gtB*y%>g$)QS|(iEdOj1h7E2yj>z)kZPFUQ$0EIE zE?cK>B2tk=^7xQk3)65Aem^;ygS%u3%ZE)zh!jDujw(!|wa?Z8Bv;x;DOvfQn9mVpgwMv4Z z=o+pWr+8N-ppjj-07aNs_PVI3+O_I>;I2&ev$!_~(x*y+z55C(E z3)X_T`+>{UwEHZKQ3hX zqFH?T$}`lceuU;HnC}NO#Cdl;&FKc1zI+;F)u%1V~3f93-eP*JpyZ)R0+ zj0Oq(ejnRry~j;c-$C+*DF_E~9Q&{*`yaA@ra<$s z{c+88ETmvIez}!*cj;uks66$mKQr3Aqh}jN!kM8rioW)?k8=gK#}kU z{iw=MHB2hLpo(U=*tobjAY>Fp%LI-T1xW~8$Nuf0BAH$!W0c#0E#-pjYsd(*LFCkO~S!A4CQ&Q1%4Pj^2?PStHRTY%l?23(wM^=0-l* zQibYqNT*D2T?`=zDzz|PQZm3ta?x}F-!$HP>8=U!melTXX6uIw1!>j`tk#`ePs+)^DkpZ zbv0V!0urA+%B+!}PzeNc>k_CF#HdJuFDnB?6gdN8RUMIzlCIbT-fXPwrJ zy=dFL0bA#M#r9n>B#$>ERA`wXYqfaEt$jFRZ(}h<%5+Z_KcREm&J>4>S_$cWkGCvL z_t2hgI-Vw6SV-g6E$MyQXeLdb#O23zqDk8p6y#{&7$AY|xX7~flVT#az0VK)a=X0$ zc1e~IwuM<6IkIgt6LpdWnyO>&n8i)QNAT9XUDRvSgOLxt$@i0A*?p*3S4>zK~Pb!B4TftSYz)RHI^ipYL8K0V~xhdVC))8 z)C7C)qKFhhrFSlH>*;0NynmcSQ$S3>0{i6SM|1Y>?96PL`Of?b;8C<)+{*7}NMqsL z*&Ozl*Lie_Mc?iX{QO6I@$M!2a#GI_PRT(*AU%gvzCcUSrm3}+aW7Bi;n_))%16YL z5)_3%BuuSpapOZTvd@Fln2S#IYu+M7)exS8<&;1Fu2Wvs(=-KL(~v7Z=2xem#@%l( zq^|GIoO|Wnyz%P2?AJGfV_B8{b@3bqlJ@?=J$hhjuRAtI)R=ZCuX*}|NC_SwvtGiU1(JW`;j zI?_$jxU>n?sKRZT%Ezxh&*W(<2vv8$aN1dsu`oN2;_O>)X204`xaDWR;obZ&&iKEZ z*rQVroIHhG1}9QQzg-WePyfN}bl4dBc7Xiy#iTuGoVNfkR>Mw*9LIM3w`cfahtjJi zOm^u4lCF!cX=nizT~+Y_i9#SzOT4BALobKdF6C2XGEmcV2L_GYkzND0r&EV2gzHqs zFR>A80Pq}%P<0GLL%L4+JB7rv^DLjY7%S3+VTYYe_g?+k;oyVl)ls2k-e>Mlsn|ALmHjiMWvhQ20xn@~{=6J6IfoTqZF{|<&saPkzLDDkR#`tP^Eh(tp?phW71D zNGS`4<~hr8qCFXT$gb1`!*m<5FFOzELT_CSIG|pd!ZPd`SOPErsiPl^dho1H`elof@o-1*rieZ`lZM-;jB^~loa>8qwBBV=~5pr(evON9>4> zq+kmS!$hwne03}rHBv=gT`dt^;MoOId53PJ&f(7c9%kI-KcQ==Kr(A@^c_|OARS6= zi%HJWsowuUdL6wV{mwgzPCGVWeKeWm@-~!)o#=nZ?d%QrNl|5v<01kP%nlteV@5fgcg5GX z@4#IdYLuA1a1O0NK+_R!k#x?c(;laB`~8pbk84h%XRtt9rnvF24W2|X4K&qa(c5n_ zvnj+LXZ@7@cBtaB7yiw{CFQZddFgzzQn1~=M=_+|Kzi+FLsZ=0X)rp$w04#(^eK+DEm{-gqgv80G$#~#qvPc1*ohKtf$z+jc zoKh)|8Sg+%Rr&mQ?>@u@e0`64^YdIGl!dgeL=avZhP|LYtM7hQIGNVjqjj{2(on|V=uat%Gwo?4qd2H9Q3s^*ooEo z%LJNkAlXE3`1Y*W9WfYiPqL)3Q4|D1V7E`x5kJOBfhbn@(-QyTRjq0 z4-hoknDNhBcy4e{4!V2-+n=)%5e!pW{5DT~`~a5OnL~em3#aZK;GN%J!&8sEN^f%y z#{Ay}`D~FD3$n0Rs>4DxyrQn8^eJD#^yrc;mqr*!fq7aQ?%Sah*Jq zANUP_zUD8aMTAH!v|)b;>45|-7$zJJp{Yv64v=$K)MM5~CH@Wsn_@a!`?^5cX5k8Ah*EnYZ*SU!oT z|NSg09EEU1BbQphr14L%+t}kc{q9MekZWPegFok{KRiaC6Yu1ri;g2)Y{d>k8>2b* z{;4>N-r$kTkK;f8yq+%87Jr1Qy>#JOT=Xf$61WO8i4m^iTPCbkRpMHmI*U|i_a~qG|at{kLke~1@ zkG;M>7yaMg=y~LH+z!LoxpO;z|MjC3T#v9~5Q#*v0!n3ES(TGgAW(^hHCh@!<(_-r z;KZxX=ITox=Hy!^(bQy66OGXR;nV!%-+Smr=@BRj*-lG`Rx5WLwdW3?6 zuofU3i=qeA)q5GM<{1J}HnVa9^w{-Kjy-5^7}C!D_dmk4r6pw8SZ`D}Da$5)LCwQi zGLuDrdzA3c$1vcAolz8z+|=jz{Px!Hm{s89w?5T&W|ni&=F2KWJJi zQLQB`{KFlDe|rjjZ@H1aMH_4R7c9MJKBc6K2&<^kIC?x>PDm4NKQNXQm!3vEDIK7A?IO- zg6OIOUXg6xrt9v<^2f`6hW($*x$Q;^TQyM?0h?%W^4}!?R>R@&RbTfeXfOBpP^BfI^0 z3`2I@nNIyjamZOeqho0%|GMJ_W-ci(_{U>8;nb7Zaqoi|xLqH@p=vsBw;MyZYhdB~ zACQUmW1piBV!+^?=sI8@_Be2V8oEYV^6q22KXEQ*Ft~wn#UK7s&SjTshhngv!;e3M!-sce;(s3I&6&-sj}Na} zb^J`mjOfb5@sIH47tPp2Iq0;r*{g#frPOi!&o1Yn&WpMImiw96oTcloXYj;Rcd(sV zprl0De#E{UKC&+#|N8-6o3WB&$>gB3F5tlKDjB7UL(cjG_x6A1_H$)qOap zoxU%hKk*0?mZk{?&2lb?O_lVDMy9Ee&Ig^%$=kz&_dQQj5yBw@$95>FCS!K&&AvUW z=+?OtXYD9XbEtUAbXY7iNAjpAVK6=-j<47wyrFIiJnunFSe4qiph^h_B0;ED%nC zOir-J@n>^z-w17Pf)g&fl7ku+aLY~iGP5~H$DK~#v8VpVPEm`32r*#iQ5>=FV5U8L zKQB#fq)=2DecDestY3f>G4?<8avr?>XSBTg3?IyIBi67Zr=5K;^PYZ`cjvVe2nW{m zZ)GR3%P`C`g6k~tf%*uugO{>5|m-o}JUiwV{bV&L}OX`1pBkKX-HT1yJ0rAtT^Lllz> zSUml6YWF;yz51$5{O9#dn3u;{Hj9_;zM9wGpNk#{pr+?AYx1YGv=wpkP0V}eF`oU$ zpP4kh5zP!>m?225;Ij|kWd8gnw1Bxf@um<0EnuJ&T3Pn_G#0NYQ7RNjFZ-M?Ccee& zS&Oh01AT)z&;&>qp_%BaLUP_mOrJ89RL(`y4Rk}nYMIUFlP1%W22IH_=hb_8>aH94 zWM&E@6ek>tky$dE&nCRi!j(mIGe}5C=70PqbHA8HHo26!)27hWlEbxAEc)n&(Vm$%-_kOp^A+pELWDcbPl8kzl8uBq9o}vnDX@y*HUYbvkXW z?X)kQ!JO%nSUh_sb3UCyYsyAZiY)!$U;OLVt9a+*g^O!m5eU>gyqnSYr zx1B}PK49+bMOcbjo}jJsES4jSwx=^RO@EK~7Fu*0x;-83c|3mmZ9Fq!8Z+lFV!_PC zcl^ zdtW7`1PQ6_O#XNpE3GIE9jmb$KjfZ2UB~^e%|S5&1cLz-yP3~E`H&g&)97XZO({>z zr2sV$z%C`3_wgq%bPVTTcsBjq#mt;Fhn4~;PAgLiashQ6{`G{%rk|+TaQ(ZOL7iDuWBvz)KY_5%W|MLv5e=?7PYGP>0hIj3R zKvxxnYhf>$OWTy0BtMzLikDtz$y2YXWSZgggX zst7z;BA0P+N`lW{d4Sj7c%NiRr796erWP@G+C&;xWKdO))=yvInOlCxv#(6S)l8~7 zb|w)HkX`mUvnRg6j49J-UfE1?=?rF1o5n`G-)7lBgs|aZxo9gD%($d0{Pd@q0#*F&<`foL@y=7T6 zG&G=T8jBV!`d%c*lwOg7-GL*n{s%`L*qzCb{E@qExCc>FhiVtd7c{o}(Ip&p%8B&q z5~pR(d%SSh)x7=o42pV`eJ_243r^dgRMS$D&CL+3p;Mpkq$fShEoYq0468E-{_Hw_ ze9S?}`ET>~tDmyNDaW(;p7Xfx$q9sG@%3*OxFw3RGgtiMR*cv0;EKCmMym~zZq+#b z>YF&E^Gwb=_a>T@5Tj50HCJDB1p3P9y!75QIt|)`nfH(7&es=!5@4?rf6Y}FjlpR8 zjF;b?O2S7uSfS|cwK;% zP0if<#xx%JqMe*87%;Fu4;(X)*Is^?t3GZayum1L>-)gCWHLFr@A?z2{N1?>s11^D z{+zq6y^1G4UP{Q+v5BzXNf+_6<3|$0L&4$WXYbFGHpNVme4*?UA^TmCG&6xvue1Of(uaDsrLf@_h_q$m`e)#dAf5Wz?kLl-!?Hrmq` zdMHjJ5ia{XtUcNb6-Br>`4pLS39GW`YzD$a6ERf0vLDU{7o-$~=TJztkhK+}Rn-Iy zwe0Aw2o%qukWG@$mrajX)h`^2VyJ>bawVC9#EjJv59>%fO?yiYR}B!at45bLg-nt{ z!CpNH(sYwhG>W0C<@J35P9aS$UBH&*`WvAb@puS3)l4d1i6B>Ln^*aFq^h24?z#vguMNqGp`ftkI(6w<&Hqw)2^DI?I zH7n+i(!;YY+>*0;94(t`8fdx(ibOgNPRYV^JcJNPMMX1AR9yw>;pDS;o{AO;#Y0! z3mi)6)=G{^g?M!}0aGvE3+ZAP(iE~5jx4`Bs;Uu=RS^j2IE8jH$-?S)N38XZg<`ct zLJGxn8@YVBe^f&O$HNmkiTYadP0K0P?8ZYA-sQOB1ME5COeW;Rbm){o*fv|z*nX3Q z&$w~pxbemtH;X;?_fhzOKzbIg3#zK%x-LR9&;+ZKN9J=y^iTv{tK?}Yxdb9HbXDMa zZe@E?th=3vf~pDJQh{R0#SDd!b{^Xin8Cm%?0QIq&`^X!(Q?r=9YvIPf*jXFGfXt; zVmlVuToE%`MObsmq;rTs5K~pkFPl>$vytPt7U@h5Eu0_`HYjG=NfjlLXnBBgN_jFl zi%_D9Xh6p)Wob|5(8EzehK6)Xq%%3xP=cz6K`EOgnR8bUa8i1Bo_(LrD9{G9C(G7ZeKpJsV5ub8-fvx+MS&mxn~B7$+Mq9(<3JL!@n5{+T1 zWjpmuwn#8uMJ#CGlybBuvuL3RVN*xC7U^^rB^akF8obXlae}mx5hXZB|<1Ds#XpW?^Pmpp_F|em9n|1=Q@Sg@w|1*mr%)@;vy6sRZ}(^!dE&ruJkHCO6n%|-Ky)`cv3-CznmXM zLEz##Hm+BhD6dsN>DcA(s;Z-DO1ZwagH%-1Rem&5R@zsdI4Y`MK3}dCl2Vi>m|i94 zkWe&Kt?XCpx@-KD#9HQ1imIck3P=~%b@1GBAOl6y%DZBKbRAsRLs2zURY7{?zeT8J zzu1lRj4f5dIu!F+(%C$oY7mZu!7AWNjZipLF_&|(D<;{Rt|2_PJbBi%vIDmCu@0T6X2{*0j&Av`_y=?W;%?>EJjnQmAOE zhEOUZn6kBq=Q`!QL95@JwcihS^$rqiyvauJR6fQo%5wttm-#z)$%5 zofngNs{S-c{c38?QVnR{A zY9=AQ@`ttZK~a=7&R5cN*Bj0eAyy9{tNum^1)+fFdI&|`gghy-{BVhNx7EvHOO!v} zl@$Wd^^g@4EGa#NqOG2&f8Fu2zl^)OeX6pqbJ^G$>C{lrPn9t>+7YqA2S=8&cwVUS$IHrT#_YI_vLWyO<}~ zu|Egxw;OX`dxUppXQ=5=i-xy)9^~ela0Xq(+>dVIxu5OH>3^9@eTUelXAtxGpBXl6 z7>_>sDE<5Q_l3{aB7D{sKx=(VzWn=FfAf&82WCBnDR8qZa9x4WbXe=X{o3*?{tlbs zN4a(xYa(cVv-WN9I^Upv<%Pg6`6g`e{IB~Pu|ZSa_1%X}>c6jR>zAI(^+nKJf1Atw z&U((-FCd>$}$1)erf# zX?ZsF?=~b4)>PoD!{R0%mur^9*Ez;l&rwtj>10^hoB>Q~JJn+1Vmt171CIPJ?OVtH zTFP(m{<6V^`}IBFvhw_j%6vz95>-zS4%uYV%@my=A=CKA(PaOdMZ;}7ob`GhwvDaa zE2^@ALn^BBbqoLN{*9_BoBU9!>#3Kbs9$;jl`oa4e52!Kk*00r!=Y@v&Ko;l2-N@8 zmrF`KG-^B4ky-FQci#OGH8lys0lge?ZMBdQ8~pI8U*oV+7MAP(sA%f{>g=)!{i|-g ze-%~TKp4gi_pcF*;I=R1;lF)?tB0xUP>Ukh&BiVXk_aqk+_l&6(hD;PR>cs~*FE1R zpM3JkHYIwt6jI9XW2H8*61|?^WjRZss<~vFzo5y2K)8mgcmV0z>rd*p!HMZNm3xzerJ{=n z*U}JEz%B1)y5E=j{g2-TxjtpGnT~JhG|zQFglTAq0bY66t1=JR{NKH=c~Abw{{Qmx zyJ{~_H&pDxGUhEWpa!d`uL^=|A=&a_mA-Z1Bc(*GY^8rM2PvQL^Rxy}3c`sRLQ*1D zZ<+gS_CoA>^J#}?_8ePY734a5|I=Qy~Ig&$?n=lhBfl+8E&+;5waa`M-$buMSy4#JGn z(76WTIoM9A>__!2T>V=Qd!uO@*=&|fCi6Xr=;rgo{m}Z8fX&rk(sNM)G3x8 z`7Y?&w=d(yjoYT$yt(rDtcp@5rCc2$Zfp2Hc#eZzvRC^L`1ttvY+Yj6!?8=19FpQ& z`^s&SkI&GdLzz2wF1cK8vrNDo$0;XF)OCN?$H&KKn`c`LZm>C#Qlcp3U@c`|Iq5Hs z`1ttv_n@$uOT>Dsj`mtA(*<`+KW#*L$I-@aR*%93Kip{mC)jz94TddEGQn$t+( z4^%!rK0ZGGl>|aj1fEqSol23-Tgb1?ndal;gsC7j2W{{wYfuw4t(^{N1K04!2{dD@+9F-JMz=3|IWB;PGw+? zN1MGZ@mC$Yxj~Gw|oiVr>zM# zZyqQ#$7@M0A3+=1@16b?12#;22U{hWlxo9i82U1og}cao6XcP!JDb0M?Gzt&yO{q+ zQ)syk++$$s=IT1vZgHZfl!#djQpep~Hq+5nu4rTPiB~3K^`d&=9jg91)K&M7bTZ?T z^Qhd65eOwxf`F~gSD#ta^zoUCmZO#&u2LfG|b7h zreKJLvzzSZuRf1isL`0bX5WBGx5Db{*WEb2Q!p9TA&}xu%AwCLdmh#BeOJQkU(_Yt zstG^aO)PY$Nv1PG@ZWi76boIkr%p9-cn8~XpU#L15i&gC1wavL(EBY0i{V6SJ@1nS zKgqA30U?@so0iB#wR|ro`0M_s8*<+}Vv6f*fE4m6d!GUppUy8ml)}6o-_6a( ztahJI+OXmgoGOJc*lnNQmo(-7$CMx)kiaPaHj0iru72Bc`RW^YWY?C^gu4Vyi4jB& zHJ;RY{7z6ygNszEO~7azW%`sxDVQP}j40{qN;s%T7fJ$DilS?0ruUDs$KbIAr7&pP zsoIhV`SIJ@+Uh#Es0w=l*kQir8$*k5$;-)$-TxB{Ah=1K=)=!G_YPo8fL0i_cv%~p zID@C>n1ebY5Eoyg;|UX5?I(Loj%U_C@9U$>Kq(nVMG|kHPz!@u4z{o{W;fwAlt9h9 zHk3sLDf!4k{v(h;rqm&eXmS9Ba?&3jd&e7~g~OB|oYRhKlJbuFzTd0Lzo$}Za(xmZ zpkTiu%tOueHE>W|(DS;U3d?iEP*BZWJ!g~rNTQq7UeZ2lW$g-@-|}LYgc- zW5f-xg@Q6$AHc)D_vs@Cia5&DH#HUB@+RFGO1WCr0n-_-`w2HX#$l)e^TZClY5_OQ)C!*>VKa_ylLNm znCWxYA6q85KK@|8_9E-&xYjpjt%{Jr>o-R9Z#Yo190%(iPh7l`S8e0qmOyP^4(G~| zNd;HI?_*E)&5F*=h0!Ybg&@T}A=%<1QKJ|0l1Lp zXw-U`p;J!$sLqK1*&1~8boV~UuUGefC*D_LgU$Ep_RDIsPN@HXcy~!)mPvCx$l8XEKzAP{Yp@1C@EzY3C(Y{s#`MtWD{=M=UDN-C#{%TFm z_x#_ zQU2Elvd;gt6*s)+BnPhen`!O*>3hE;(c9m5p1HsO_o9XFR@YMHTmEd9zrWzaF4liH zeY!#>iQQL4Oic?nbpKIoz}uk6?Ejk5HJ`}hdFMFr(!X;tqjqioneqD^<&FoDa{PM; zp6(e{QsoL{~rBsL`T3`4$R2@&+~sx<9Ncrfo6|f z8}EGrJyH9V$Y)A0r(JoEf`3~ev3^}-1usm4e8WSw`#RWv`S9P9T?OUkkznT7C(Nb< z?@Nj|T>sGuFOq|Q&5aEt*(A2P=fak87zMP#?;B_qx!ClNOSG8|KrGe;;r{# zUA4(d(Wi9UJHY@G zc2_c_bkToQQks={rSn4ha99WGk~^mfgW z#hC#x2Y}!8#k5{z5c=%p6~81rm^akNob%z^^)gIKs_oJsy?(;7f8C^7p~aDjU?J9w zr42k}t-a*`+9N~JjydqxjUR(bDNPsyyjlI}o7--ZYVs)>GX^UHuF2=gr;&Tbgxlud zH09b8+N!=3$8LEw!)+BF}E*!AifM7-}}( z+HbJ~Bm;)>UCNn!2&t1;n+1TAbGI@!EC%ea?u z`*N-T?&jR*%xFcQ@Wz-hoKMPXFm36@YSo@wQPVztiYUWhkRsJJtICTDHgVX^5_uR$ zZUYl42p~&d8-ASZU9u-feP%IeVKH3Qm2_Hyq)^|x#0Dx^8cJ6{*J!~rWS7E=7a;T| zkS*?IlMLBxF6!D9pT;uqJUlcFCk`Tum&u4H{B}K}0TifnriTTgLo%$$=nj4a#1$le zG9zY*HRD@YR}XCy-p{jR7tG{n*oiVW+BgkM|!oVHv=E}(so z%lO?4C;D%BMYmX z%-a#UkE$L^Kqw-Hpa&GCGbQdfusp@C!<1UFos=W1U!Y$J<;KpT0Dwv|4Vyr3*5k65 z{Xc99b_2L_zDJzPGdNq85hyDh>LX`78NPSKaVza1w`LiK9uc0olM>bh1BsG-l|sfY zn(>n#$BJh23(L4v<@~QaQ!Ayg%FZUscHHwzMp<`jDZWpk68Zh*Y4*zc^WFZ_m&30` zDMJXZrl3O9BAX%F@5QPQyW>s2b;w=h$=7WFl;JlfTj5n=O@;d#loK<5J<3=fAo|wd54W zrm@3Ynl3fM@!`L_Ubw4HZdoc&1tPPDPWuXk42H8bL6k&{p34TAy60 zbr?g?5e?Xar%>uEUk(~%ac4;VAyK@Q*4QQ7z{idf7BPhIga<~0>Qq#r^?1u6*4s-M zjt;&Q6$wdBby2>!A{+bQKL}R{r|w|>kNo5QG0{pcf6k?Fwx$r??J#nNKfGXHZjya) zvm8O@s$_=46`@wGm-9y%A$x|U7_`L$q(-Lz41;N227Ms0#7uFO$O_yQ{MRmlgl72_ zZ_)&V9LZ>ChfkjM3NQOL3%4G!<_Szx!(+NZDRd8=CjZnK_~=Uo-iKy^EjQqu#80^@`!465NfwjA5sGkQvA`*CGam1-&(2YtnF zq9ww2esIpc^SBsNqVk&QPLuO`UK8STtzKC!n8iDGS&lowL>v`x1_;+57=8BaPM=@S z(pOZd@Hn^_eLlgM_@Zuy{9q?UYYcf0cA^0 z6~c{q+Y!CFzw(S>3-BCs`J1NMO*NOnRDsB|F2hMxiG!Q$1e3TnGQ`_g?6UlJ#E5t+ zxN=Y`P;-SmQQQrj1)MXPyyAEga@Snxod>&OmQ6JuQ6hFePnfK-#BC32MrC<{l8$-H z2+jG$>ejM%s(djiF-@0N?#>r72Qdhoh)mDC0*Jk>0a1BJ)#nXeP7Byw78<4uJ#l=_ zhpu;y_kl0@&^qX;?VdvJujY*GI8B)Q)mWvg=Vak$D`-~16+L4Xl{*tZs!Tm0f*^c@ zCnJ=w%>?E1nZ)u0;-}QI{$TIoGWGqe6e&Z@%cDhoSgNzq%^1wvh5{&%MSUL3>sWfd z#ggtiCvYJVzHwXoCZButa8_x0TbG;fO48qL;|HvQdK4W7vgN%z45fR``_?l}s&>68 z;@w7fa=bnvi3Y=BoaxHnj+dsp^fYj2tGl%Arn#JyCg@LvEI86aF>he8V;Bvr`I{{f z<`!@u7rf1P6-)-cbYGwoP#O9pmum`2J&o|YJ`oR9*SuIg-+`c;2*nEwIhWjXjAy8u zrfbWH>p&C8ttT>Gr%RFB$1U{=+VBItI2YuX4|eIiuJnE3Xm@D{SXpf9=uxlpikI34~J|X9e zZ>P`CKd%RlPoNW_BuF~E50 zn%AGt6K+E2HI1<}b+z76&-LCdi^mIaCveGIfn)MyTD7?kMd-2JE^x101+V#hY5<$# z1QSl$47Itnt2*|4a?Sl2a0 z&QTZ3nf@cyG-&n%sdRLc@>sL-{U*YjBe_(nJn;Yi>Wx zw@8^mzmlr*sLQe9Lg~#t1$Ci{RSuqxWLrX|z(M_SI~zVVBal5H-BULJ`JWd_x=HEI z6R!yS6P-8xrx0{_e!Z2!i)Y6nPEl*a=YUwhwoEIYg8dX=3cS17SnK|fHj z)1adq!pxBki^MyirA`GfBs6dVIsy8MX>Rt#=Kd&ee$Ys5`iKyowgs=@k5>fBhYoT% zozLwpkZylnOk&heq;y?a;!s$Hnf@Fv#dyo>UkNn4xnv+kTfQ)+-@@2B32s$Kk|561$O^Q4jusix z@7t5)+267Yk=y4qlWKX13L@W()*QMRzMh=cT%9Cj$^MN#TJ*Uyk!Fab+tkjG*~bm> z$$HXxl&-Xz6=B+vh#e>IVolOxBBUd}IcQA*DLuM#RMUBvD$W0p8T@=)n34ZA6XXB)nN zNnSc^KJ$FDbY=w`4coI3A+=Vpow)SZ4Y(e0VX+8+{A9bt)mU+Ij&JU9i#JADxx|Ma z)SKVCq6E250jb}axD^%i78E7&?vsjtg*`rcq4J*#gU`01)|$`-3jn z31o9aWl$^Q2Mu0I%DK$8pL93YT;OZ z%>Pg}AR*{^B18u1a;O&DmY^<6M@@UkyQfNLsBN>?pY&NY8j=YbnRtQ0KOKX>d{Hbq zLPUI}n>@^-0WMUc3ren7KQ&SXuJOv_ z(+VoRB#M!&ja(m8ylh~xfn?bYhoEMU*N8gx={gHVyVipeTbcW>EARky7#hh69-#C- z)!`wl8t&xH#tGB%Rl!%Q1nIxSI8ipzPzWBv5lXfp&40JNbQ?*eq-}IbB(3`~At+k= zm&O*7;W^}cn6RyE$00vXKeA$AuU2{g0l*wH4x6P~=IY}Mw3D9J()pYpVCn%SRegI- zuhu>}|CNj5`I|n@;&a-(6UWrPyJZB;r?SEcUq`MqA6bT=L5C#8xI%$atz7B*9Phrlz8pu!9s zgrUjq!P;EnnPH|qK*mcLxz-UW|H_E~)Mo0|@TU@h0WwvI^HBd@!k^Q^n}k_mkKC8_ zyiD|cFp7-DuPie%(<)dcjVj6aTt19!t2o%(z=oSY?yZLM z6R*F4s^s=VE8!5Ge0l3Wi8l<>c=(GQ4TQY#s;H1hbk2-G;ZK(J_eD5pvj4IgTxHbq zQMoXo)W1dOjG0#bkPE)_3rVZ7osWYOv_Xy3@PskQHiW{#SzE>pVc_=9lHipLFiQ_2 zKMkg4YK|qP_$SFuk$P{!rq|~3XX|<#_DWNTX%9|`{(F^m`arD)Y^@d{o8(AnO)@o@ zd^!)D#ZcrZObIW{$$3^t>A$b9Tw~cu#fpQrFrDBEO(wyl$wwm`GWn}`V00g`eY(;qyMf>nB*hNQM zBbWD0jm?Y6m-?EOmAM79=@n#Yb&faig}1h3=Gf_i4DuDw6(wKIK$2u9kSDf4-gxfF z%-0L|IHGUcxoO!0nWVmPzi1*t>rvonE-xN%q>5GAuO|4wXDcd9gxaNJoVuY~z32ku z+NTzG%oSS*UsUdBOLJ<&vGmw((?3rv(>}Lfh~9?$m0tcpx^X|2mPHGF83E&)Kmq5K zDI1QRjUS#n;j)4JEB&~+et}9ZAqA$`1lrur%oj<1{Z?sf69sN)OP^vjNxZWvd?!GQ zdO)}KI{3qHRRC1nr{iPO*vPV4^n208Ic6C z*XV-k+H1O}I{ZiQ7u*XrX~(?wP!0S{adNw^NS75}iG@0L*t|LfgAJZ?dPst8U;PIC z#l_lk!yXHKJ5O%^ zYd8iy(-$zd1(~u&S`}>pzqC@llc&TI2!6a@wvw!?K2o6%&8Y2%E2A#W%O4M%4&Kbh zJ0UXf5g_vG>=$vvOrY5v)In|Zum$KXv5}{kbMJ>C{RU%K&Vdy>ZMpaK-CY{Gk2~A6 zzB_O}rC}Lt9`7?9OJ`eko)plv79a-BC%A>FeTqLx4wa(C{82#bVchGV96Miq9Z+_f)Ek}&mg&;nx2oBAcfA4Mhgj#_?K^C>k7+H|nzwH>3onOuwyzB^XvGxitmO-+uh`aXN2MIDCK0yl_yXDp4 ztstxFXYyBS8*jWo^eFwjU72g6WQWBM+6McHZaH7Q!&HEaFuiQxe4VOf>XeBcL>QnK zJiEAX%C56#vQda7cT7dZC56$a@Gss{>Xev~Sn$cS=;OFVL7 z#Nm&ZjbZqR1v>bbje5RB+Bk-bJfDV%fNjTy1jv#I;UiY)=!m`JN%DJiOU&>oMpP2C zd1;}=O5ecA!rri>H|XGqIRj}E=7qLVifY?Tvz{*-reO}FEbb*X0$=PcBm>3q)^od; zXgYcYkYw}d_QOOzq_yvnsRe6|bt{c5+!1A_Hd4fa$N|~Hi&PjYJxOLWo=&M$=*VQN z6c35f1jx!*?5uj3d*gIO0zGF{0?CDtvfO9OcMoO5VtC}+2ua^Qo)d*Pnjwr{2&*HA z%VC746Bq);W;XX6e1svxy>&H^ zL#p_JGKbPGB4w;RHx(s-3^c`F5Iuy-46Ff)|Nx z3vgiRPwl!!%K{!C8(qEM#BLL)x-YVHdP%RhP}6XP5G(at#E|ymGSjL5R_6SC4 ze1YfRt5vU~v+w7gh?GQqGFflRUR)dFd@BcAr$Zt$o8)f zkk&y9Y?s~a_{z8?Cxwz8M+r~m#J7}jj|a4g^72#`{$cR;lNh*XikF3w-yiRT<-AW} zE8BkWrOzt-jmSL}^O`oZtRmGnyfDqXrI=`i=bQ2H}xQq~nd1xI=x z%X0j+Wc>MhAzGrHw#*Ks^!lw50H$efBIFdf?&(sJMy>tJ@t0ZattxF&0Sr~tgb}0KRO*pSH*k* zLGl%j5Tgw#%{f5@0ZJ}%oPE0P2IBIYXve;rOD>r&uvLO@@Dk%oX0tH8B{DlUO-?VN ziKdhM!F_(biN}fMt6rD${BLLRms`hl0T5-Xe2oJ*!W);vB#pl_ab8{h{1V>@ zDOF`;aqrhtgT~RdWx#5tBD)piwa|-^SFT|4OfSp*HSS&Ac?Y&-AiP~`gI=e4r_dtL zB~q%A9QJ4%yUd3H{lVwVw;;c1ggFuibaQcV$bq}oW1Q$~wmvxdsQKo%g>kwJ8!V7kG?=s zBsH;U*-5Ln8y?mn+N#!;saf4MWSnf;3yV6FJXhM}5MfmmVL%RDI)rtVB93IJzaU*< zt3m`4B1NTYK=-_ za_fjNd42}zTF!X+0Abny)6(BGy5DM3tE~!-a1?4He&I!k60Bh7!F1DaLPJ{G1-i&) zB(kznI+}H+xOlVM6~swN4KdXxDd2$Bp@gs)FHh7GU?!#C1VW8Hq+CnuyPKY|2{iIg zy^NTt2q3s6U@d2OtTbz?FplnUvChS+bwLgKj7);{uu*_u8ftdL!VF` zNKW-VQGW0?0uH)3QC?R^N%I#aV{}O)Cj377A6jhv#9_!(WEEmHRyh=uOtZ=eKoBZK zXroU;3awf=He_o!2`he$H>q39;#b_@7CPFpy*0w221`2za{V#{I_^~2ieCY$*aahM zQz)?^E>h;vQZR?|p=zB{b?{Sc738wiI;yDT`uPNwU?>u$I&Ag!YAfl_b{TkF#Zg@Fn?MsZP5{IOadY^71zUDrU7fftKyZMWvQy z+`H`f^$w6?j=xJrK!mMP$(TT?s21c(ObSdC@^5>#?n5H9ycP6+wE1yUY&|EP&t-s4 z514^kC=jXx412$eocFiz%!{96-D)fH>5o|aPmbE+VnNa&1qD|0IY(-ZCoodsCd}ak zF`B(Xqw_<>s${tg#)H=Ic=UE`@*j2kW2jiwAfi;*aveUKz>+C(punJ&ZnxD{j2Z5 zDy9Gd-6rKM#kVn}q?>n7dQ}f%4BboV$J``S(|BXGGmbT5m^rOSF~8fOXskH>9s?n> zp-j=2EgeiI5(tKP)#UveR*#86tnSBWBTGxm&9cI{ixpr{%gib=wgW}<`7u3HIrtw9Z3uGFs3WvWWzkj(g zo^x!gJ2q^(*zL2QI$fSa_7s zU-mjLdW%E-sh#w^VBxyhjy~HWz&KV(km~Bgb3Sc3uF<7A-gEYN>J+-VWFR&9@lhdP z*lZIItYSoO@ib)3CpZiU?)=*yUO{DBI%796Orr2vi9nn6z5Oe+zr#t^EoYi&j)Q~; z4X^Yc%mWPCY==;UtjT!n@uPq6IWID^X((j%5u;7+W`99#JeqM;a<9BUV7*;r6S3=2 z$!YV)e7n1Jk_lv$%wo;Df(=jSwSpKdBVMxq)>HqqvDLI=UfbMC!}VgvC2^LM*HnVx zOiYl3^NTI1w+LVFb%?HgW_QZiNYl^xPuy{nGxh*5mj7i+&Cb&l#(=C}MDk=Tw5>m# z&G@rZ6)}%d_3$p-`p&XHvq}CBBiWQ}cjE4pH00vwj;wG}Thr@0x_&14O z5MSKk#|tWGOyYyZUtu1ML0tZHq3zx9z|m=OezbfzgmT!*Y)bn;blxqkrSE!Dk-8(s zo_R1qU?vXIa|TDk=W0HTI}=5<$Sp~5z>Xs<%Y0IvrE% zTZcnM#O|QEph!(5n>>*6O{z3R-9h=<>EXz5sjfYE{5zSF)Ep=RQqQOc%9JHMvT1D74Uz!~@ z$LG&>ss$FKwzstKRl*elVh-o!S^g`;$1T};juZU6C!VmSTrQ$*&w4p;%?S_AItPAB zR#|7`dus>obyrrJj{U~j9`^~(Ruf2WD}I`&{NCunkJly|%HI|pg(e{}uT73o zaO}(Zxq(h%2mnS0pjqh{-q5Q@`s=GxDl1!9!6z8Ah1-%)UAR~rK9^Td;8nnTaUQsi2-b7Q9cO#fsXWtnO<$l&ZvZQJhUf8mE zs_fEoDSk?HhiJWF%5zjARQIMpo;vZIb!bfED6?=1%`B9JE2tNS6IT$0LTFl^0a+4< zYp`cgp&I9A7I2cMF~EI1B?4W?IcBh5;P%6!f5P<|v6blcX_)E>&1@B1y}lduW3GQj z(GK%VbFF{Sw=1G9F9G0BXMv|&wr?*@?Dx$BlryC?G%=68o?Fpf42w7 zXo0JJ|ERJjzy?j$vQCZHCLOh|h$B|m{bUwX@6XsVtk^g_9G02mt-HMY>MkPp2Db+{v34W8X@C9k<}&LG(p&iPV# z$K#8Mnx|iE7VG)VdoPMjm>=h!f%1qc+x_}HSDzM3n|1KG*5XcD7&9G&nzCHbadRBe zn6kZCFE?KhAfZr&LOa64AI`(DcfY*tGX$G?G1qZWEz5 z3D{`a6k^H(x*Dq5Ox<`+c<{F$hfN_85n*#9jBAj zlPm#E5czDgQE^0|tY;F3SB&|ZF$xiO@PUZ9qq=lycFzZG&rX3GQZtKv0i!U;Yd z(dpH0_~|+Io;{egh%V&wCBjP_2>n%)I3d^y9+h;yG-z|`q0^i(Xu>Uwe_%s6FycWy zBDEaJ*E!Kki23#DaLQQE@sLE%^Oe@_?ItIy&XCD?>znQ9?3@8vmnBTs>k0d@``ndJ zyOPEEtM6iI)$l|ioI`g6HkG#^!~U`BZ{au+3{Zz| z?w4~ve~Y16nrbS8$?rqA`2^CcHmFh5o%b#fG&y&8LcA9!8hAHEE?Q{3rqx&HIWfzE zzmsipOg0L0cMH;Vf6omfz@=O|Hw2akToWPkL>o}X|IOe#{R_?onppA%c6L;0YXH&lg2VHVROfH5s_Z|j^fW`8|@Gp(X~Q9YcT4^ z{R%kTldiHP*N0>PP!b^Js}=OwR{xSf|31NPza2ehs|QP}Xfzxp#wvEBCLIkt6Poa7 z>W@&yb-t*?u^v}4Glzk}Co9S*bIY0A9`<3Yg8DT+&X~)S0y9WrR@b3CPG8ZRcx#^4 zAK}bRnIM6JMgxE$eOqq6U6K=O4H2xs?O$^BarI_A5jAeh++O`|10g}l|s z#eVey(#jdj^M59B#?4YZ%dnecV7l|ujM8hJQgnq5%gZsRto7aO zQkP{W-8%U0Y*%rpOI(VI&I5yY5T*9yb4~Wd?#~Sp$?6?=Otxy?yL=60%Qpg5#ve)) zRyNlpoDo0Vue!nD-~HbHwmXJZ%q6=BYE}L1lc^WSV{UqSrwB8%&2g(KF=Q5hOwFaaw z_k+I@29!UX`#`+&k)t@B-->SZ3O}{0E2un{`WE?UUxw%Bbl4vPeL6N#1YVZ|k*Z1* zmkQ=YYb$EoKn(S+yEcIYsSqXF5U@l}8m>M2IjJG7syfT1097O13j(JwEsCled^yxm z%)5+c@p=!rZuA3Z67_kXbx6MFs9_6XLi6^5b7|Boo=*BsS702SnZ|sdU~uF!p&+2B zLBf?OU|=L@4i-g0&75fjh>8k|XlW zR3Gqq$V7P;!MkSo*`sf{j*mdl6nlQcIIe>&OfcqvNevON4t?1cbWMdNkH1z~loWRi zy}q6za2a?BOcURDSt{*{%d|6n9j&U{4W67DCu^~~bG%V3ahy89tvjj~+b2b-9SRJ; zycMc6ekP1g$cU+=J;`+uS+7eg^ai^9?p)KtrKlA-5> z*9#DMxop=%@YZUXOh_W7bC!p;mrUhFIh_ZNO!#wK=6NvZoCH!Rg@zQwHdtq9I??VD zDGf;cA_V{`@n*En*Jt%^)=iu9bHIsAhCC+)vz`wf(Vp&K0v&Aky$O|FQub?XGY1DH zcwG<01#^d7_1_BHuxpKaAi?l6$N?y4zzj zbbjy6;6RbRWM_nSJtMQ6#ZQg)nDgkL<)DuU2sWw*RU3=WO_i|*t!r}9Zj}XYN*GFDo1T9h9S8eH5Ia_GK3l29gt@ z)#VJLKH;LG>;PTNFr&EW`pd@EkW=?LKi8R1Mya5-=y=42)0$8f84239^l#muiZEW@ zKd^Ky0iUyy-dyO2mkmHQLPBDKc%_2Vz5afl$an1xM5MaPG1DY_6>Mw5%no~;_@j#ZO`Qb0) zo<}0;&~D^FUGJzwm-MD0VV@>~3RB_2yNU@A2Zz-G zpX)%8A!X3T(2Bq40?!WjMN!+*UYO?n!%b7I#~?ZXvmMfs8R0L581fn6|>3+((ig$(`-h9|@%I zYbGfyaTaj1h1^P!qE3pCV&Z$-hre`2ZawovU-SBtgc7a{h&~J>5&zMf7hZO%BKfhb zFcj0}a7kEP_TrDt*^J-10g=b_q-9h`WM^MI&vu@%TBedA4CriY z7`Md4g(tv(Sgv-qZc!>rE-Y0v$WN#>s;>9!8=fOhn@jlJki1dLiURX@5tRArt9-bm zLj&-cD}1&CVwrM29SnDTg`L5?9@|&ho~buvfzhV`s!xJrf3ZJHWNN$^@FtydI|QRK zI509`Rbkt`(M zsm%(XVNz=RqU1+YgkUdIEk)E}2d;bj(=jNX4ku`m46dFcm9IF%h21FK@8<)@Zuw#7 z2lI4e9GV$fUF2!z$VJ9b(E)op+AWyuX=dEdQwGn^hv2e@Qw7yVJa0b6!< zlknuyPzF>~RQO!fVb=~6w7zG$IdDHSafpzG6s5~1F*S$mAc(fsDwJ4)6KHaO#p*FP z0euV_dH8Y1Xw@+?AKo6Zx!e(*rqwMjo}eZRlIbtEcHGY|;MkRaggakXRT;%^irRI& zN`SGoWFG_l9gZ>5oOXd0=M$w1+a9ndhK$A+wT#~SPE3VuN9}LtDE#-EHXj&$w{+}Y zU9+xOgu)EhytoJS64PFvZAkp?)e%YXGN9}r=u$2ZTeVX7ffS)Kv^Zp4CKQT>&Xm5V z_b8ID+w|MrNO$@JG?QHlY)eBF z;n-ta=)ef}_%%m*+k2)5fxh`(XuSHU(=fOG<)~bLu|Jgr&wZd<@Aov~qa*(&lip;TGb8 zlyv5o89g*!8lb>Y7NF!nzZC=kV>&GEA?24rw0}+YK6?$o(7!V}LqavP2PS$xQ-5r) zNsqLb-{}>CX*s#0Y`$67C(kyScAjm12>y(2&7&R~pjT`H`At-5hJykkwD?SM?{MX) zbARsW$e(pp-Fdh~HZn;;Q_sXOR}Y zgW{9);6kIAkyBvl`t?D_}W8YI**eppjv%jhgmX`uM7qs@1TS8W*xrw;dm*lwVJ>yHNk9UJrwy zQ@%5ahT4#&TxKKCMrZE>oCp8wRi9^@?}rY;0>;<-FF2guRMsYo2j(*x*aGfL!3G_N zv|#1ClteRa@CgAZ7u4`_FyDqXfSp_8AZ^1#P^g9VYM|URK|O4SeF%Ft91ysM5J4n= zRZ?eps-g$fO`0%rU4foya3oH%Y$85bWs~u`Fnh0(N1?yJT*W8TnlQ+7WjPLryullE z<3kmd_w6}87zLx#0K09>_ne|peZ32caH@aG7n|nVX~~)=s`Jj&kc+w2-4wvcMa!O{!SL^Fu`)w{Msusn+Cr(b3)Orn0o&>GKthVhJ5ud#U$`nH}RlYlf7Aaqj zS8-xy(P~KHc$G`e&XbT7e2NK*5pCy{5=(<#naBUBx7t64P0hhRs35i-@(Xg-qC~0< zQIxmdLcjH<%yhwz&BVATs`x}MJ1JklkW6(3kE0oj?+($piR!`9i~UL^NIXS)XaWJ& zl|!qh`nwf_tffS-H1`FtHrIbdvfSb}{$3)$f-rDYj>rI*k*~Mtn12+R4F-pj zamWW~QY|b?3~D#|k_%@M0F?hB8W{0} zfclE0r&e)zgkY^C$2Fbfx}ax>gkB|+jFq-y@->YYZ{$YE36X1&JSuiK_<+n_%1OEF%RpSko)2hm(l_6DL!p%n<{0nGKPY z)Un9Qq!NGOU#7wYS`!@pVcwwnLoTCsV`)E`zye@!o$aapkZq}-UIq>mF?Qw(5thmP zYLmFwE!O20ZpSf{`5`O(i)c;J!`O{-3$I5BxGC=|&~ zB%i^)YTC2rvOOZ58COSr+!lJ{x^J8R4*@~`zDYdK!7dfCl^8o7dmabu6zAgyZ{?Lw zRuBk9F-^5>QY6cXngt%N>)?5^B1qKLE9jo*loL2Bl|;wun;?qv4ua=6c%FwupePE8 zqO!4^YvnfBxSm8P8mg)wrHALZu&SMa^vdlNids$x?m9?RR0TZGMT*LQyDlgi0YU{QiymH;k7Gfx>hO|qRJcEIUoz5Y9)br^Rf93fJ%P@mcf~KGx zbiBN4B0Z;EKcS&&0@rbn2vk+8m@2BRTVU)>_6jr<*2nn5$H-e*}3g_ zAj-l@sU%k|-%E+@%GKqnsz9l<&vhlv>hjA$7NnGwYm}dBT`hZlIkrR!fu<@bN;$#1 z?Ra=77#g^)hv$`(w<;pS;?OQUxh!ajQpL2Le$_oghsQ4DnTyE7SEC3-B& zS|^afm)X#9U;Jzx3>!9#M<0EZ{{8!JUg6Wddv{i>SV5^&+H%4t)kLoM!Myg|6U@J1 zXHNb5ENbiO+0c05v z3QA?dx$dO8QqHQ$cqQTW8c|c8U2c3LzNQQ+lXkf&gWl@$SB1V7tCKpfI=|fZwP(0u zbsbkt++}5Qjw}nWRf&{Wm$`QTt=+y=b)a&bwa)|BE@D|8TEIlt)b;ko+VxwvPICSC z@5|T!+T$DRzBTu4z2^wls`J;EgDm?9Nx7c#y-Injo-g@T5hd2@Lr?xM<@2Ryn$^Ft z`kCMKz-&TMkXC_IIz`D-2}NQ=gT`9#(swUZ=Xo2r#)eK?RsOp5U;BKyRvpU! zcxwr?wf=imIZ`4$xo(+j_uqO#q^&-_&b8&L@M-110EqSWg;;u zyCxevrxM=#>&jeJj`yYOuT%aiQCrysk{c?+TUYe_cjbTinO^gol zT}MqKPC(bb^e%ljqGxTNp7n{EO*!7!*jO>$^fSBo!skm|c;SUKG&F3H)i_mwY-}d&=-HIxfk40)KR;ml_U+5KapN|>@VV@=%jnv*>lS#M zT(Tt?cK8|m=F+iT^OqawntX>p-}^d7DCpl&A0HndpRdL9JXBRB8jYf=DxT+0w0(Rw zxBQXclRyTW620x499I;@7e7Bxs;jFRGiJ;;I_EpR%hK~GI)d&y?!!qx9*SPofU@X$ z<}7TjICuK^`1ox7Or1KF;lqdf9r0fvgur!OLZJ}xc$`wH4Re65e z+S+`dpRJtl^zI5(qdF*f@%D?@W0xWH-{D|pCJy6|zdV#;KIh*ZA0MA>f>No(qD70g zsWxwJ-_dXEBje-a%&nZ zR)zoeJg<^SR3O%=&UY7m?Z2DYuj#+FLslX7$gtKs52OKrhh4}}C=_v}_y!B5 z|64nSB5;d2Qpq$$mr7z+ms~nUCR+p)wro$96P$W>kxZ(c_GCNBWRgswgeMeKbxr*W zt}G|T{hmLI0*73-+<%d1l-QT@^lU6S=~s>`3Z7%p*xbgv1q*S4F_tFt%wLgYVOxC8Oa~v1Pc1Yz)WNitGK*1wlD3Z+C*nqN)Zw};g zIi^jUw)urm_wL=-8xnAHqKBf$#Z&m(Kb~Rmg-^3!%6~YdXNY7v?~hPEK0ZEM8Dqwb zp}M+yYnK-Yp&%4x-6WN)GVxyfH?jKfR!!`MvMRahmyT^h`KuC~u1XU6mGh+s=xCuT z0)Ze3_F73qze)SV`mg^D>bJr6iM7uE(s3arLa1ngD1kr_RaupQ_3P^|Heu!?zEnR& zQC25+^;{RTrhz{FdQ+`=lu8!1H0jW-7u`Eofpl@bHT72%rE-3+a%JeDm9Bs$Q$cMs}Jfo<7%N;wJdhOe(|L$ zerxWpqO99jo7TQn&wM#~u1A25-Fh-&`(A`}om{Enlhd^;;c)mX0S7jgr^oX=Jk3B@ z8OH27l+#BH;FO*E@Y6l}aqM=rBs`B?$!6KIrF32Ed__^vDk5=}`CD~$HHNOE2=Nu+ zvg(-@qAWz$eZR{>$IukQhKi<$N`GwpnN!y4!`9XmdaRnxL;KL7V+cwXjto%UyEom3 zG!Rn2wY{}2DArtfLyHCLtH9dltnY7x;LC}YH~LLj@3XdL*kV!LCQh8lm@#Ac=%bIe zpz;Y*MV1GzI+H1{9KeWvL1rgyf&ty1A^71Cr<$$(M`+}IJQE4A| zPKi>{!mXHbX+{7eU?8MLrY#BK?(Flk>lo<1$8-O^D6Jw6fKn)s8GE zC=BS+4X0FK>EdRTK!n=bY786-r8RkYzOqvTG&i?V5|Yo}`YR1P46gjD03k^Ii(l;U zXKr26OuS&@hi<53RyNYTO9MH}A?ImWB@0ax1l6(tvK)t^Qx2mq zJP*tDP&AE@p`szl6)h~ObKvfS867R~#DtklXb}VgDnUa<6RRwm$_pS!mr@~5$$?-j ziYi@%5SYD3vE5(C;5_&@rvC8-O7Xt*zVuRh4qL|bgRZ5qseo1&0?S6a74fgCD3$w& z6y<+A4xZyyj%z5IQWiAQLzXNg3PM$ou2W9htZN8G0VF~Z*o7QL%f$$W%g?C%s;Q@< z2wb~FE?YvX2BBaOO~{HF=9Xbq9-r~!$8TQY^Q|B~gdQPAfvK-O&ZO5Ml&B>ZF#Vhi zK0ZEMH47FjVC>kjen)IoqNhkcox-wJR87Zovp80XKr}%>SJ4fFf?Xt^%cE*xykdcp ztz!lZG(}SKz_Tn$b^%WsNa0~yDIh^8s3V;`xl{(rRZw&ToE)}g5s1bK=t_AN-Epw3 zBB~U)LIW!e2!fi#k^(K(nO#phjD4EZyl}@jJfY&cHVC6UvE9IgMF<7lBKb@j+ffjj z4pt7URKg6$2?aGgyFf0L!gftmQ%4qaI93TWmZ;QE;94adJBLRQfy6GQkW`i1XXhwn zGT5$;qG{ljuuBCTSw%PiwyU7(Rc!yGpKySu@cu*Nuw76c7gLnIUDhYugy*1`Ayh?R zWizDmMTDXtJr6AqB_0csZCZh6hRPHEl0qO9M78r|(bv%!Tc`>J7soDx2idPdh zRTSajl!}z3jTtmCb(d@=g=>d!O9kS?PU6=npn_8xCPS56a`Nw8Vf-wOD37biB}OZ6@+vt74x{3 zMkpA>@QP%TN!)lfv7n0Q7D=_Iu+$KVh>4X=k+B?%P@Irb7R8xll7g!fPeh=QCe>EJ zNmLUJ>Il~&olawUDuHkaLvLW0eqAXh7qTp4Vbt{^V5&5&OjG=S_Rc%HifZk{&y+K# zmvjiBN;h-`I|5Qf!3u(ky({+KuX^?B^WurVZ=kV8T@O>7)=@6?ua^QxIKYaYMoHkL!ek`yH5y4fxx z5g`(ekg&iN%tVuAOv^-bZcm(Vn3=J$5^=1Up8g#cmMx*UJSbilvTR``;+U}%mR0*F zl8o%~pt{o&3sy3TX@aCk*ro{ToE;qcN&tF*LUipVy01mD9%28-y@6 zW-5tgf@!8msT!(Nsdsx;)V=>gkT47*eQ;IX zzy7+Yh(@7$WF#v^O+_`X*8Mr|jL~%M5Ta(uEWZEnHD=CUg`UxYBhI^;fgKZk{nWqs za%M69_Q!MK)njlk{gii}e~)H^uAy&74@+iF$9w3>9Mr<*xBq*AiQoK6%<^Ky!#GyX~=@aQ12R>Xc2*(m8zp?*Ewj%Mwz)Y`PA+l7m{g zSvGe%zC%x;cfQ51<6hwF3Db$1UM$@rx5o(jo;Z~DEiPjJzu`?HpLDNr=o6g?p88^q`3%JhB4d)3>ZC}zTNYw zT=)}Te*O)Al-Cf<%EoTfmkWnc-q zFX6fGYT%REgtFga$N}96$e$Bmzl_-n^YFDF$o0qdWndTh^63Y8^5a=lSs`4uNoMC` z7&&?bM|5t299zj}uRPD26Xy|5cqur180Q_)mhd0zXx?uiJ(|Y({KZFj`LlUMEDxzj z1ZSIm+@>lbz zu|lYN0^b3BIq$NwIs52B@}eP1Dyn(+&e0SET&z!2vtm_%qi_9^_pj*#<)1OA_ep%a zSfN#$Hn>!Ii$n$KLqG{U_axFK6E^Agdb%CPcef1Z;Ls|@-aLV~)+fN_ zV${jUk^E^Qr?hRu@#Bh6I~FqSzbDh@#P+c258l4vf1LUGQj(fR*UoJ@p=E%z>q}4z z3OKr%n+3BL^4w1=C^9lQv;QFsX_rCA9GQsX#h^F_?oOF1xzpyoBa@vkSDW2A*dZRdC^lLdBKSett{_zJ&JUR3{tRsC7?T$8fByUexhSY2@7d-GBCk<_hUS5La zIhk%fyYTw$7xT$4u$B(sm#R#9^lCxi*#3Cr7;jJYbHGt2a7<4>bC)Hk zR7^gsCwTKSLT*)LtRI&=_6_sL@AnmBQ( z2_23aO293#*jd74L&uOExYR9YeQX;dmDT9pPK^EcBV2!CN7nzb68Fe6IBC#p+;+n~ ze7CZU{J}?Y^<87(=WqFOWrWs8oxlU#T40|whUb4xU@I~Xb>qDZ5{l|Tl}*Ai3s-JG z?tJV~&hDb~)%dCCosQ?4e;rM8rIfSopFqspjl1suH|HJZ<@a9}p>;fodme3r^Rf$h z?#H#nogEor&LIU-HSqBrSWL%!3ED!*S-R{CCniwV&%cN6X~#A9Jj7*3XE1mA0_;x1_~)}7@m_QmkAJnZI~We*jV)ht=DlrwI=jVH&QMr?fkO5EM(1vOzjNDMxtlU znl&_U-i(T>2wU#JReVt|B)x3U5}$_7s3mE zx&b^VaR;bm<6Gp=UJZ6wfO(8`grpA1p-6%H_hrU2&AIW`*tIfQ|*6 z+N}wh$x5!BVUVAf$KbAcsMR%ub&W0uw4zJ4LS#{bkH4^qRaX!L0tJN(IAIJIUwkox zy98PH-P61r4TBWifhU=Sorr@wm;8&bq|+&#P*PFwHoHl@{mnvS`M zuGbF5?~Y+6RdSB%fj|3c=D#?ZnBgR2*l5~!PZ9ZT8A_YZ`176Q_Y5%Ww)dzkNn)gQ zbXOAwU2r*x?p@4u(Ix_Y-9P}g-rp%9swnWR!F(c=*a1p7VRyLad3pMT!3u6g$C*+ip_ z%&1xhD-|W4a?th68#(c~W=y|h0K;3i;)=_jLh5uPgHJmVpIyrI$FJm$=a=9ca1~eG z|1_r#J&@nt{}+!w`V~ps5Us{gAiDT79v?M`3(tRtX!~9a9XSjy&}P_GoG`p4i=V%e z%MU+_n{Rm+waah@jyMs&Lm^&OL|NP>Q9h4Pu04h;PraGBc5_a?_I7$WzU1Lk4&tPd z*RaMLqG{qA9zVVh!wx%&JOA-8#l8#zAwRNdZgzd?Ok(kbOuG}tGW>)NEPL&0t~lyQ zZoKj-$^#wgan#`iWFK8lyNr=T@|gSY3plgaVcdAt8#sC$%PAL(B0!3YqIFmfh%We; zM@}8U`4_)KtW9@@pLQ~SAhXxW95XPB6|Y~xn2zl@^^g;I^ZoCza@vud_=V@sKZ?=E zp2duC2yf-rJUQYBPCxWW?!Du2ihVvjnqwOsM~RrB(e2D@xMg$?Wf9r-Z5urrCtO_0FP}cdrDIN{-@t2`@9fEGryhv}80OZ?#z+zaG7cWW`TaXE z@7W7E<${YDb$D9_j=7sD>m*bpTAeV4F~>CFlUvT<_>reE@TiNJA3TPuuO3C7S0)j! zAy!$;f+-(x?fGXg@R%Vyy)c6@SB<5kYEV%V$5PY#!9c?d3JeQm|ita~_mPAmcyiSS~%b9qRIbkfHf#)ALvk>{v)< zL2D8T(0l=Wffy4$G^wnv=HC|{OWRBbzCa!-7RF}%%8h+`WEo^5on4Q^FXHZ3AK@mGu@r^{jR?Ui_>uDA~v zM)JRJan!hTIl`k+5w)o?4dT@$-2C)M9R1J_EOzE{-jJ?z@g#Zby)Wo@&qqAJED4b^ z?*89<9C6KC9Q*vQOiLMLG;7De^X}w-?|#HPk6%Yubpfy6e-X!@eJj7lcbrU2!p2JK zDEV#3A9*zD+za_m?YHQ&9%_aiUhmzU@@Jo4N!b-ZFbUm+) z`-In?zJsB?+agC}L`@A%b5i!}`#k^EBtCrZ0~S`OXincAedMlPyOt-Ocw+a@_>34a zVz-^7BuSX2xs~i60)apv*k2ekW(;3__0=A?O4yr7*yx6dq-K(zA0kp-iJ94!ej}O? zY>|x`@RHY|J1re=vOr(KM>k(Ull<{qdHwk;o%9~}-uMqz>YzA0I9y)j$}n>#zQ^LC z)$rLk=B^w?L3VS35;QxY8OimPO#Ap%7Of1!_>Wj{et&YBv?fDQF=Y=PA}pKo0aIoz z2K8mW`QS8YQ-#B65e=_p$-Ma_6ws^+)-PH?Ndi=di;S!cWNhp$mYUlbrVdh&=IvTx zlr3lK|2@m%6-iii4-c&V1b3_m+_|)Folm@E0h9ml70SXU;ZHtf)>Ws`szqCJkdQSu za#fVM-;8H@@jCe8Q|7H4MXRQ5$Wfqd_E*fFJAj<7!x=If)~;X47k7_jb(w`f!$no` zDyk|~A}IyguA+GH9~4!9qPPg^P{o~@ho-71vWgKdW6soXSQ)n< zxsW$rc$&;!HeQ#O-Vk5s+hb$eplTl6c9OUy<*FD82!I`CrtbBdF=nL{%rK~nLfsuB*TO1Nw_KYaZY2_Ug-I@5ny$iP4W4j`|k zpV-RTOq@6ifa>WJ`RSL-7^-ZYN`w?qb;rPxQnJKAE90acn;9;hXP2; zl1QNp?DfA;{P_e*{s42rcN87e3Ry}Ie5g(jR-%j{g~-Tsr1uT&Ay%(m&3*UXxBG>UKpS=P4eOU5>mglnQ`{vht!&76Y2&%+Nt%%Vk$8kO+b@Ewz62UblL z5u+pBPJfU?0v?D~vVP4hRxBw(_Bc@@G4#qgEL>KGp8!hbe3q_Aq|0zf$clmM5yLP|6u^=d6y3(C?LfITlWEUf#9SvtO5G^L z@P+blDWK!T82}PaGBdN0?G)R3ETlbG94NLyDjp_jC^%(MDPh46U!{-bKM=(-i9`}4 zQ!-%U&?FMkC@I52mC|X0Q;9e@(plgXrw=OyNn`?kg=I6I;I1)iIpwnJIsV%J;!@(Q zpY=JPKK~znp0^Ia437L3cpNrHO2L~2O0}2loB+0EZrk9|wvl87kHaD!k5iMV{k<6@ z8jE4sPHMM&V`1U&WaFS3IVXUoSR~^Hk|d!x6l_x`8Bce@Eh9lPnL>8^$@C}`E&qV? zPm6NPKkw$8TkpXi2vGj(+uU}|4ZQtpDTzpgl%vIE_++n~8&#=8$Q_3KXwC(U%G zKO|($g;$ZV{XtfL_B1zr9H-Jy>F;-eksy|+J$^EVp435hpxS_~ld^0ywkv`elBgZ^NFqfgGrzL&H>MU!ixjD5j^%_UUdA&wS# zz#>>apEZ_D(~y_UKD~*&@dh3wl1>M*ZIUz$Y+C}&OEAkzwkBcP5&@3~IV6##np9WC zh*g$SRGy;1Gzc_1kVATvGHu2ZV%Qj#Roez7kQ5}@#4?R^CO+H5GA%4c#o_Z{7cbzC z%daPO#TZ&2e{5|(!chZvAOo+*xs}nf`im?} zq@vYS)Fki(vk15yBC$l{YN1FH#KYx;jQ|H9)PtJ!D=Dr@;;8L-2)4vDQmDRcdUR~h zk{Qz}wS8oVyhshq5nZtNzGv7rmXSct$R*oV!bdlr%@=dR$W9NLIYE?oDdnkjdg3NS zZsp7qS}<=#F*OIA$LV7}=dss+!AKfdmVrAXgN)4dQW48^5eR}?kx1E)!a*n}3y)@F z0EXnn@6W{LP)K1TnFc9C0$D=^6vd=+>8}*&4!l8M`sJ^vxc%T*pQ5@1AW2E_dUBfP zpkQN}TYm>wc9Nv6;>*e==yj2_VkEVW47u=B{N*#5{P8>zvP@QPkbpbAqCRT531tQG zm8Z|oG%QR@K~mCjMU|0cNF@{KmP}TQwm3_t^7MP(6~W|ZRfIyp@ zgYxGd9@{d|4IR@212>_72gOW}(0#LCTUr zk1%ikdUBf=(rdsW7)z!xXW1$$0-30?jIJlQ>Ei>i{bD635{hkM=@y1fUCMAxQ*cWbm6cUkRVJmXpFqgPk}sa(gjEX| zeb$9sc=rojc7G+4KX{ARUU-gi-!B2bKkc<;Cz0@@O6jIr6VXu|uJk~MuA=zz@#cpq zdhBi%|HqBiyazp={Rf?%yPeAE=d-G+3aw=>v2hRaC$|42C{C1n`4RCoR*B_&kGjJ=ZFLXu@HJwf?~^DZePu3N~mgrdk8u}VrxO3|%7 z`vu)S*Ptn6I<$&yX9su&}u7mt22oiARwjpja`NL(itk5f_}C1Tnrii~9% zlvG40i5dI-a#TGYA?e8B$|pWy=2tJ$zmKqQpu_%t41P&a<9nW4*A3o={QD^Ywx?Ilv&oi7* zm|hdqi(#MZq5Ca z|M43Yrite9k&&a}_qs^;!(=>}d1T~d;c}#xNJXp4DJzE-y#_P?967qzh^? zPAZ{q^#T>ufkG8ae*KN4FP~$teT3sqJdF|mc%B;{zL&vAwj&WQX5nx1F@5bg>6V8$ zyx*~myy037ZY#0=w;x$=TR4LrGIQK`wAxOq>LCzdU!&*kW0r_$$;LX>1G?QOKRXQ9J^mJBm@&N>1I z9L~w79!z#1M2BNepkL2s)D$fu0XV%GWM^jKRW~dqQ}JhHlNIt|n@QHrm`5b12V-tN zhjw{+9Ci9wh9A|Ebw5v~w8kX+unT#2@4$|bj7 zO55xZ9ZtBJXZ~{?BfGjtm?nniCnqNpZ>_Hqwu(29MOMgd zQKJ~#s~wpt7#2t_FFDy6_#7JybyfVqOtN#c@Bk}6|A23nx)}51d%SSxjr{wz3pk{S zP4U`tEMU#7C8RRCaOTA)a6q+f^;W!g=66@w2iIGNr(Msn=e-*CZ+CvxYf zFKv+3L@kr*;#C+*3of4gJ0HIE0-sF&oeSEmXVHpP#C4-?dE1tvN5;@~=1u&9p)Wo} zlM9D2@%oWGfAyJsdgnR3a$X^Ak})bui*aOk!gD}JIQUG+(cq1lOf9p(o8-njA3?qT zMVef87;QArI(Fr{`%mZWBeGdmS1 zid9rCc91!6Fl|mfhW3}9Len1kq^8fLYF!0#eos0)@fe5v`x06l)DmC7ft5&L*>1F; zL~8vqN`Ft`?Q;wVj69NpAt%x4-rMPNULRa;12bu+zu2{-1h!=&xqLYD@^A*U+V@kE zZYN#AGml)$5y2%qb^Cc7bNmRd|L;4@URjOiap88_R8>@>ySs7oQ*ZO~t!I%RucV?X zUhkgMVyWBic-h$|$)w2v125yUtJ?E=(FDGoG9Q=Qy~SH26-(l6+M7d8>P-3XlUcO1 zIBnpzjn`-_o+7*b;hfyFB@3oaWcKPB+<`oXo_Z{ig;SWlx&}>i?C|_jmWQKG9)Py) z4}P7u5?szdRj+LmiKl3O$SGVk_GGj<|HmgYR^xX6`9QIZB(WqE_B)wF4=ljzkXgN8 zI$utikLq-8!zj4+{5$nyXe))OQ-7sAs-p$+IBvvHq6?=mYgKrM=l^#_j}fgRDreC5 z`3aMu-=^Pd-9;NwrT7;waC{2Gpv>38n7ugrC=Xn zS;(3PuRFoK*YD){_61ya<$rkj3eYWBHtA!gEM18i?7_%;ALp!=NuIy#UVfSWD{EeS zjdPE^h$|ktju|6wBp%l({-cbj)QYp7euKlByI3;yBi?@X6B5AcPyWe^kGJB&t1sl? zAs1qp@asEIGw#igiR&g#mxC;?M!@gI0xay>feafY4X?*RdC@O?_|WTgdvXk8pL!EN z@XebKaN~KmQjV8Urk_nxXW2Hg!-dBmXZiSl@zQ~)i3`4HBF&q-*^XK#KlTWiaX5$OEh*m7(`9#lCcD2xa7uof*I<>#Uym9Cto?7|&kwGSm94!qKb+>%V=B2cG^86DVFZpR(Xh zT>1Poj=l6}q*lFY%RKJ8@c|YaVE*_z_r1`UCvSe4X=Cn!+|~rw|G@PR%qN_*2|8S4 z<@j*;w6s^shVxfl1l(~}e)>2!KirKMZhVUAy{|%P)gF7+dt7wwi^PDOrg>!MWZ~H` zqpv#9yng(0CSEs8c>Za|4|jSd6aCgN}1wDRnzx5H{`;v)xHlUgPN-h@IoF@4AW1&1$VR7 zcodj_-_xv!foZ`4O`#9Hc;Ukj>uyoJB1LsV$F@K>d~|I2=k4p5X<)^|tX*T!rg<|Y zbt^tTx=uJ;%~2dF};h&3nKK6$uMm2awUCHPjTL zrAHev^%N6+S;&;u2Qm7L;fxO0R8E=7u@6pVm6}Cmc4@Zo!-7+e@6 z(%aAR)5p_;99ApZ>QGm`bI{&(B9yRaUNCxz#Dky?6Br=rvSUM6eVmnc11h z5=dr(s?tglNMzXAd1EZc z-Sd9{I6NV;gKqSAn6j!Uc$(0oa~|cZ))2MiKW9H|o2qb>9;e>Qi}#KuvT7+fT+IIL zS#EsveWEcP)8QdEJBVai$g)jkNeKy41zDs2wQuqH(7?l;_bS4+cK`1i=mqP+%%v24f6%kxs z4|+6)325FRA-@|d9ww$V<%)kl%a#2KShl*9%x0}A{qb2Yz5WsYC`)kYC9m?`-7Oi= zyDvYkN*i(cLYeqnDwbs<$ued#Mpb3)@lgn5X5i5jBuOG!Q%*(1!t2q9#?qr3-cT0) zjXrP0YbdWy&jPx=K2p&Lia(P~pN4INm5NhYQC(ZUN-#46ckTWgS(Zt~!&Fq)ZhdUk zm+z)eVA-90x!{Fg2xe#PP?(gLRC3y*-}3rsnf_f5V{)-dPHq;J@e~(~IG$&Y4|2ml zKIY-srL-;V$}e{fWbMR>^m%Im9=D5BDn(V?0LunhMssO|TxkNPCk~r=xn}v>;EV*HIQ3z&}nDTTAk1L<36S3WuI}y zak+f)@VU&PkghGWSn$;w{4%!~U(k;gsUqfVOV8turCY}w5^Lr&eZprfTN}ge^AT)! z1cx8emg)sRFm?Ju6qg%^D%TF|D#(gOqNuaHS;I%%8PF?t5_zK;UQ67iCSP`iIS11B=*}3+eq_>b#o%z^ zkZo*9LX|DTWu-*SO!}U28Rs0=1#|h2yzumkOkbVA7YNa;`{5kXA(NF;Coy$-1vs11 z|G0rPF_$rM(od`@t|9Bd0gN6!oDSY0^)ZbBC_hwMfCajwBH9xJW z#^GzuVf_v#*I3S1Kg=enC#k4RztcQUh$UNa|D<2IDEDKI8E_G^iUBo;qfQ;eqqm(; zkHS1|8+s7;f3bolE!z@`uVR^Y7|(wCIp=nB^VnALu%GZXQPHxYV=|Az)f>Kr`L6sq{TeNQ3i~((P$n{H9 z6s>3cto4*wGH$1WswmiIib%MEnppas5y;EOWgF@KgK1z(8m@Nj3AW5YGNQy5FQR&R zHIh?Hi!NsdfljUQuo=BIr5Oun2rorvtl`VXW_ix5?7<}&f?sZ`h=Tnc2g>_)E^7IRl7=+XONe9>i0 z{Q7&=CmjTRPEs{tbWc-`9()X~v}%6(`8T|+x*)Cmg*mIjNLGS~9psP!gXrEWgNo&| znDEU{gk?V=uSy~u#`G1?Z}0$`8mswfafIt0dxolK&*H|nX5-Jy*sk!g%?Q<2cRu;; zV^VKj!LVE3B{Q!Hs%=pj*BO2M0RA^1z}QD8@XXu_+H~s3Cs!Xy@sB@p;`k+)wuH+U z;D`gV$#<(HlQCv4UC;b#i=fAWkxUXpqfh&MI%jA^s;l^JQ3)lciq|3G_Xp_PI>^!$ z>xua?=+nf_>Y`$PSY3nS)NpR4Z&LRnOQi_3=+5CCy!pr~9NtWN9dQ!_2dg2tyZ65*6 zLiXfy&>?Lpp0}Lr&b?@#3p2i*z^}_H@CSqG{6Lb)`r>j1UHdxk+|-8Cdk*Bgn1?{^ zXt1725hy66-{GBEJ>y$`TT+6eId^)dtgx_<|Ni&C3>q{@D58cgd`K@zl_i5{X=&X? z?Ak5_S-H75iBVcojSeX85KXhZq^gQ2iELPlk;{mee&Ancwda2$58$8gFRLpdl%0pi z=>RK1q@;|nx#?hDR(38>}ijr?Xg*rrjpK{>OO01FSfa(h6$KO=q98^P1pNEh>wOi2{l{NR#XU zR?S-0Ri*zpt4TAQM5$O`MPjpKd;FOMJQ^0D$dHPZP+ntgveYTNNiK?QZPPGbk`)xm zqI_L3$<3BYW#%=(t;xho)=-fIe3>*2xWNdsuA~M~$;;0}#h|LRn5e$#BAU!5Ik;6B zQZd$-RI>T-hZ@KxFW^G54XR7lQ?uEMLVtD>0!{@ZR!VVY3Zwu{n)<*r>IR7%-~#&25HLimMxvby(2IHh__bzBE$VQA6bLLZG{W$|)*sdjp$u>n#vu4fkcs#@^ zDp<6t4C)eJTYw2<)19YeIO|cdOS+X1dq>;L$WXo z0}BZW2}Om9wZ&NZ0~o(xB7;{xN!NqMGS?2!G%tX;2d!(mckj;g&p%J^-o1D4QnwBr zIuMCO8sDk}Gl5}dF!=VT=vDnOmmEKmCB-Q`9r|+FYtPeS_N$!x(Kzh9Be~$=*EqI+ zD=y$wF#PAMefvxQF(;~{SL-g{>tZ57n0MlB?FEhMy{mN z=g@=s^8VqBeqbUQp#TZf%W)Uo!QmZpY1>+X$l=_5w-0A9#EPHC^Vqwy=sNN)Zfx=e z2OV=6YpN2YoNc)B->=Yn=|6b){fV%hE7f(KWM+GA`u9_ud61XI%Zu?hZO;u?j^?Iw zFXQ8RC8+)uT=n2HTzpg$RE!|xL(%q7app;0nG)R}Q!qQ7fcXz)B@8|iR@4a5H%RksXdt%Or$5gn7o6~qvmeII_#mFJ7f$B4*k+(DIC5=>nUU_Ve(5^=Bz>qi z*kl6Kqta68JSy=;AP<=A&^c@7+C^)>xe{@|>RcY1^;yZbuSn6g`JJu%L=lDxr*}+> z!!{Yp6KD9;S97t|Bg9vKH(1t4TRZe=EXD&W2R8QU>8N;g9Fx6uj+tKrI!8OnzhTt9 zAr!K)6_XAfjfxIu9~oG*)IV{3$Kjo|gSw`BLT#_=&?iPdIqtYePzJfaw^qXRV=&@B zs3EIa4C>OAA~UmYeTco z6{+RNj%}J!ZN90*-&Ipn!)`tiY48%a9rbbJqLviKkiji1cO2^4I2!t)U411}`svLR zFzp}%?mEi~Rw5PkJ>!*mDFzN~N@*qg4+^RiogBnMKD0?+=N;-_$YJ%Qi6<4t%Q5`6 z4j-CjJecNX)}(aJF=r}l3+P&SqehP{d_V4pUxu zG$)rTC$e>6ixLxRoRv_w=hI!YY6^;Eru%3({w$RU$?=l_vdCL%a=(MKR2APs@u7 z>5_g#D)mqynKCc;{rYn&V=pcD4?So-3ICLb^({%Lv~XZsbx3k#1+2Go_RH(#z)cJv zFZA__%QA#8;((bTwrYC2>(Ef`UCgOt0E6nF- z(IX2VlU9%r+$WS~vdmT;6Z}4}}G<+xZvva;6ejKJEJ+C-ZF=?JjYRPF4Z% zkcEvV#LQ;X=i@f8C2Bg81es^?Q5l<^N~f&37DM_zB&jim&`ZnU&CtJA*99><7G%*y z-J}%QP+4Uu3WmoEzlpiETFb4hq$TVHUXYL=p?H%e+O5N!I!yRBae zKRm3OnEW}cqZyZQEMnMqUL{Wy+!rpJR4Ui#veXV+?u47X|IXABq0^h|({BW8>i19h zB-j>UwYJ$)g$I=HB>mt$!IY^ikikuQIYe<=HsFpZa#f3wh*h`u>6` z9rj-YJGP4B#fn@iOB`E7Wy;0HBC#EhAZ$X{AJD0|KITZwNQ~Np1oXQ}9|QGNq}zv5 z_O6K{$eqyI27Es@7$n=hDb(<9!sKYzQJK{_2|J_r}3lyL6<6N$$d=Xym+bvC8i#2S3;t|y1gHaodjyAqgmY3&>{)E*~&#%6nNd+DRY7MbDxbD}B(s`xm3szJ!%4U|~!7f#MD zE*Z2LFOO+t6y}dwXj>VzC}F>H@84o1$0ppZRXXF^DlwtZd{*Q24|wnKC5tv$w6l0? z*oLoZd7lsi9rLu&T*)doI=X0X?`-b_r?!ec+{8e0?Hn)Y4ca9QRn?K@Bv06K=g!H< zNQpVK8we$Vk5(C;DKuQ)X?b-gxp3a8e$TD4u2IYfhL?9YDYnTc4-wt<}1(YmoUE=6|C_SOm>hH`fZTeVF3t<;*Y}pQ? zUr$NH?OydI8LuqIWvqSQK#>Op`bj{jzIdl4eQ*%iYhC^x0&cL%`}kZlJpW;$Mlbk> zt}lCaLv z(_1Q~nN`c3YK)H2gU+n+<0*UdM~0Nw`}f$U%H=r7->8i^X={*p+2Ay5x8*(W)~3Ks z`ugs*CAntRiFO=4#7Yi}s?dLSt9?g(5W?|e@>jNt2Wj`x+r9dimo_BPOd}?V6_&!8 zRJbI~U7@oD^9e{8uhpxhJ-(NhsbQ5QgB79UJP|)wJFCtDvR!-wRw%?dyVm8OkcSX=RCEO31 znB98(`}8sfo~!NHjjAE??nfde)qnT&Qo#16r^+Ju93LxQpK=Cga1);Rmz>R?RDHA* z+{ro&0g+>>+bFj-R{*z;2r-E7^v-uuHeK<<6-=9sd5n5AePZTr0d^2_33c1c>_ z7}BTfPSO=LR-aT~A)M6ju-qTMWiY4c#czo@&QOu()3PI;xA5It!i*as9yNJL<4wJ_ zz!M}G9Mep%TgM$3y%KN#it_Lb`T6idxzu3$uq37VT1RM-&8g_d@Z3Z??%6w)R{x<< zs+lSrqrF{ErRQeCWgi_x#hv-hVGDFLFV|GZQ^@dEKdvADQPDa45R0?VWJTG4n<9Nc zb}-lQ5`W0u@%W$gwfG)~=i~*4&qnmUKL*OK9JG~~L^PbePM}fw%;hOyD{S}RMKGDX zW8B13JbuI93khZ1w0DEJq;mhxQq;$cfk%N@=G0_}U3Hb`_*}&8;A}-n;9bo$8;`cM ze|wVi+Q9>@{eG;7vqcI>9&8HRH$cXWecVVz1SN$DWVVDZqiEa^H3?G6@9Se(&H}sV zu{C~NpCb|9499W_W-dLgQ&8k@D&$>k8io|u15iK4H1eW`GU?KUPc{UUM z6D6!0QFr&+s$%WtJD(bd#b||He|eotLEYt|v0D#@+hDqla)H?NJ{Jo9f``bipdDr} ztt4d)hgcZFXtXCC*4E)(Uil zV&~>oQm zsp88_O18Q%=?*qr5f{h_lq<@1#`|MHTE1ohByFy{FWvZ{e_TFWUc+aR@oJ|U5b+1)bRe9nX zPslO;lTXyWWL1PR$u)v-R#CP$||t zQ-2~wm}J+Kz9ks^!&4WV8KeQhgrQmr>BITX&UR9$oH=VW9$Y)0-(k@8;b!D^G=Mlm zdL(%1FZCGDw4e?z0}y$Lm7FC57o82URK^=`xRWiAOT4SZn^l&_tdzm*;SuRVLa7l|!lDX(?`bhSkmWJy zPzMLcTl~(*JI#pUCj3F+gu&AW4o~*<4Iv{TA$a)B%;#G9CGX=3DnqVDzr7?3GWdhJ z^k??{N2+f6KleqW>7;oIG)WAI4%aPMFpG>oS@cO1f>S@n3BEJEpP?PBR#v5W?B zG5^%-a*D~&>UDI59o4iAdH3o2>7at^`HzG^5w4E}WkZ(iL_B`j>>Grp(?u~5KT*f5 zF3bGRpnaK3zsJyI876g66R|Fa2phlHd}*`2hmv~_yq}@244KgGJ&YGQ4IybOSzMRg z$#Hk1M|i)aXp0YxlUw=W^x%s8( zm{Rc~o#5vBpN`njDjQC+O!t>_I4Av-Pf-i)YRMK_Z{m23$KyDhsF8(g_5yAJdWUxD z#t?pt@ zK_6vjYR1&Y<_a$wGOm4#zGDCAc+KtDO7)Y(Lh^g=BU#G_)v7P=)mlADPPfM-p$t1f z>)8`fQhT7@`ZIp6E99GG{Cr(}L`;CQprHR(evVO6BIK0u3eP`|Pm&fT3gu%9wZR=O z>0Ir*aouc@*ugR>CWh~LGTto>wig+0I>O@RCMwxB+ch+B7F%AEc%5#_W#`KMPWcnd z%eZ@7&a@l2`VRk16ysZxDw~^upmVj4Vw~dbNp=Fp30sjWT0H8?U5Nx@3SUnsIt@7~ zCTx0DK!O&6UTeRKbB*m9h_&*Hg*Trqh^SU)T#<-wljF%?nDyK0xSzWdTR$6HVjSCP z`BG4oBjO9El}_StrbfmfWi3l%A>lRuY*jeyoy`~NCd%aXPTMtaR!%&|Wn}C3GfCa- z6|@9pMgTs2?Ua9Qxbi9vB8P;~M2}tRKgQoADaf2TwL-Zy>P^uoW;_G`#tj)vjRs4b z+h59CR%%PY_udxIUR_^Ze|v83ru%%^TQF12)GR2&QQ&$WmLlwpp34}LigD02ToM{I zX@4%P=y*Qv>(FA&i=Y3l&lYJG!%6(^SUB3TxG6H$3?}|IDB@nU*{_$bFXn&6q7lAi zN#~DLHPx1wIYKkjKcSV#;76N47gux1UqxC*X1M9Fd1-NMq}e_nIp8aI#fqzH*9IyZ^K zbQmLoUZ2Zc4=2Uve)87}!%^Ze$Ef+J?*nsx^crh7C$-nMwK@}K$6|)!(XbQ^E{ADr zSN!LQU92Q8Mp^eJ31s?^Z_MYS^_2&YAvDcfEFMQfAxdM=mLh%V(x+pEryd?E`KX0X zCBXobvD8iTcUyaA*FVo2nx@>R?^6xuFq-K(in!`R(O#+tm}mocUe{Kkc6JD4!NGI= z(km>fxO29cm+k?z+)mrM1?K?R}nDJ~u72@=rh zn(_LJxGMI@4wa^_HD_;Wnm2TC*C)bNO1wU4aWyR_4Co!IrYAPbe<{kMt&S2-7RBXH zIA9Y>E_N@TyeKEaBM-*&?&ogOvEp(Xw<{lf{v+%jAuh^vG|agO*{H+Sz*~(cm=LVE zDdR_MvS03Cs1!hIje0S+ta5tZN>@`k>ld*-8X?r5{WM9zR@i9okvh>lERTBNNECND z zbi5X(sc3XMzUn98^U6w=9rJh@)Xa#u=(vFnQBC52JXZ= z60$fsu^gH30QaTF=vo)eCq1dXx{tOvu>*jo>S}#L(DT?T8^z%1~WD5J-WsLAZZM)4;j0o>ruRG8k}KBYs=MQ@s$b3z1#cH335Zi^&V z+v$~$aZjhY+J3LdP9E~!*k1R|`IEFIAy=fhP`MMUu4KgGo@Fo*=2+Gwz0?C(TliI% z@-fQIreU6K83i?_c$!F`Fe>&ciC68HvPa4A*Jz)t)uEiTqqLIe$=v%^Z$+Uprp;X= zV`O$aRbzX-&mXEgP~SZA#DTFDJi*^Bvp9bsbl}6t)-X>?E=>J8dNI6Ypw{(=kfN-h}OB z+K!|o{h7hql91i8w9xsH1@TBAMTx0*DCM-wShew5LUK`_04TI(0zF4WR^m=0Sfd-> z6d6CCl}~G_7GZsCk{g|T?R7>9D+!~lp~8)rH`j69?$Ghw633=B-oG~6iC43uew`eV z`z!(BliXJ_Fc0I^?U!ZLS}kCL`ffryuhic>Ud=lltFFC{y63ifj&e8ee$$k>&pdlo z8S~YAOZ9x&juJsolhXZ|vrjH*N>rg-(~BE-P_@kN2w8OfNA#{;|>Z~l_QW(>NzR9{_a z65fgiAvW5xj01}3=6Bs{D>I#gM#|3$d$SSS3z@v8e-0jmvRsDrm2@xaSL^qNi&{Gg z|EgA;MWB#jcKp=cE^*~Y9b$3I>g&i(P8G2T{G4s?L{Ej@#iSOz3dr;Ljrfg8EuqXT zWZ8<{n`Y74tHBY~4l4&QLEntCv$J%E-seJl?L-&-Ij*jG+er}VU&kQh#~oj52dpO^ zaOz|e3K&9CTwI)v;tWf;;# zRAFdw5h?jkGD~-jm*-uW$iXXjX1Whek8#x`lrs3JC=oNmY|flGPQu`cu4J|9T`eum zvWMCB;GW`pdZVvSj`i#oD7X?8n@*v;P;6_toLtZA-z!fOLvlbMPr5Ki`jY=_@xHDY z^Jp1dD2f-qz2Ga(Q+g}I*k=}x(-=~GjOCt=sI@Dj<0{6;HB+KErP_(c3$dd6VtKZT z3On<4mGf$+!1LgzDTW7^Z6qcpR8FJu4K8XtE1-xqvM>FU*P}Ry5hZ48ELzj1*Zv!} zY?2Kv4T81>tob2`^4_!98gX?WXo?=AM?-3rrEF=&8n%E7lY*K&m8}a@o@=VTFicDP zQOgq6ymCvDnhx6oiKl)x@6v|zAU*FP`Gui*(XiW_ZE{M|IBfd(^7q9@?D#>oNk}fZ z4GJPLSlWs)L-NX@7}8VR)~Ug!5?UHMQCta;eKLe&^2Q^f+NkrD_@F@1vgg_wGShH* z4KirP#eG>D>Q4EEWrAP3Z>gi^`g`-FbA!d4rKitoGdR^bU(4$-eoj*iLS}uf!R~j-+y*wE2@6*^{TrJ=yWaL4XCk|=$(TtJ&Z_cl z8!=K0D(!NiEHEx%OQVTTMwo_4a=*8J@;DU|GC)hhvlw#nloKRyxbuRvSdYEOE0GU9@_+e$_!B=;_ChorgyaUzx(5Cl6uM(pSXLwOC!Q#C8s(ER1SWB5I`S zY3J{w!xH2BBXd&G+bEvgOfg=bjgPrweSdzZuMy{ZJZzI%nba`Gq)U7=s>A0}Iwc?X zb6Dl8oSnc83-gz>4+>;alf&)ivERmA8b&4;?^Ci?B|u8$4iog!j9<0RInBQ{mJ=3N z=H=n{MJXgNI9XUp`4r_5e$Lmfao3iJ2pLM@^*s;UL=>B?sgIp^Pp(NU=glwE z+-^=>lN_OI)Tx(1nVYXL>qg{jtq zrbQ{CC3#oMJjMD$*32n#)>T)lq2%xM9w<=0NY9qOSqLy^##~;Uiz|@jx9E~B7!V2Q zIM6dYZtUW`q@9h4PY$ib+DJcbKZVL^O zFc5{>UlV3(knHomoveM6&BvF+TrL&`+SNAGn&rklHrmm;`d#QG{YNVj*O7v(JXOn< zX=)nQVecpA+SkV6S>@I-YB=&&2UuTfN9u4FT$VJq%yidtP25#^&Ke-h9~4Z&5jOj@ z(hA`j@;=sd-*Kl3jZiDiU&=ldI|WQ!rn3_1BdJCeJOWNcPBRloe}1e$oT0YPfaW8 zI0|ZO@Qxvs9pK8zd1P8l*mb8!v3DG;de`2AOUh}=F@}?6#JOy>NSQc^D^!&bhZnl(AfaN#N^OUEqOvBD1R zNM6YOa^Jt(_l5WAb-R)zwKxa)6dl4riV-O#K{vcAP$>9uY)Q&&i3kI&UjEQZ>a5{M z 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%0A<{F83$^<>(tW*j%w$Ogs(*j< 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 + + + net8.0 + browser-wasm + + + + + + + diff --git a/samples/minimal/cs/Program.cs b/samples/minimal/cs/Program.cs new file mode 100644 index 00000000..d68aafab --- /dev/null +++ b/samples/minimal/cs/Program.cs @@ -0,0 +1,19 @@ +using System; +using Bootsharp; + +public static partial class Program +{ + public static void Main () + { + OnMainInvoked($"Hello {GetFrontendName()}, .NET here!"); + } + + [JSEvent] // used in JS as `bootsharp.Global.onMainInvoked.subscribe` + public static partial void OnMainInvoked (string message); + + [JSFunction] // assigned in JS as `bootsharp.Global.getName = () => ...` + public static partial string GetFrontendName (); + + [JSInvokable] // invoked from JS as `bootsharp.Global.GetBackendName()` + public static string GetBackendName () => $".NET {Environment.Version}"; +} diff --git a/samples/minimal/index.html b/samples/minimal/index.html new file mode 100644 index 00000000..1b5b6e9a --- /dev/null +++ b/samples/minimal/index.html @@ -0,0 +1,22 @@ + + +

Loading...

+ + diff --git a/samples/minimal/main.mjs b/samples/minimal/main.mjs new file mode 100644 index 00000000..af6461cb --- /dev/null +++ b/samples/minimal/main.mjs @@ -0,0 +1,18 @@ +// Named exports are auto-generated on C# build. +import bootsharp, { Global } from "./cs/bin/bootsharp/bootsharp.mjs"; + +// Binding 'Program.GetFrontendName' endpoint invoked in C#. +Global.getFrontendName = () => + typeof Bun === "object" ? `Bun ${Bun.version}` : + typeof Deno === "object" ? `Deno ${Deno.version.deno}` : + typeof process === "object" ? `Node ${process.version}` : + "Unknown JavaScript Runtime"; + +// Subscribing to 'Program.OnMainInvoked' C# event. +Global.onMainInvoked.subscribe(console.log); + +// Initializing dotnet runtime and invoking entry point. +await bootsharp.boot(); + +// Invoking 'Program.GetBackendName' C# method. +console.log(`Hello ${Global.getBackendName()}!`); diff --git a/samples/react/README.md b/samples/react/README.md new file mode 100644 index 00000000..0516ee8d --- /dev/null +++ b/samples/react/README.md @@ -0,0 +1,10 @@ +Sample web application built with C# backend and [React](https://react.dev) frontend bundled with [Vite](https://vitejs.dev). Features generating JavaScript bindings for a standalone C# project and injecting them via [Microsoft.Extensions.DependencyInjection](https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection), multithreading, AOT-compiling, customizing various Bootsharp build options, side-loading binaries, mocking C# APIs in frontend unit tests, using events and type declarations. + +How to test: +- Run `npm run backend` to compile C# backend; +- Run `npm install` to install NPM dependencies; +- Run `npm run test` to run frontend unit tests; +- Run `npm run cover` to gather code coverage; +- Run `npm run dev` to run local dev server with hot reload; +- Run `npm run build` to build the app for production; +- Run `npm run preview` to run local server for the built app. diff --git a/samples/react/backend/Backend.Prime/Backend.Prime.csproj b/samples/react/backend/Backend.Prime/Backend.Prime.csproj new file mode 100644 index 00000000..db766c7d --- /dev/null +++ b/samples/react/backend/Backend.Prime/Backend.Prime.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + enable + enable + + + + + + + diff --git a/samples/react/backend/Backend.Prime/IPrimeUI.cs b/samples/react/backend/Backend.Prime/IPrimeUI.cs new file mode 100644 index 00000000..1e7b7661 --- /dev/null +++ b/samples/react/backend/Backend.Prime/IPrimeUI.cs @@ -0,0 +1,16 @@ +namespace Backend.Prime; + +// Contract of the prime computer user interface. +// The implementation goes to the frontend, +// so that backend is not coupled with the details. + +public interface IPrimeUI +{ + Options GetOptions (); + // Imported methods starting with "Notify" will automatically + // be converted to JavaScript events and renamed to "On...". + // This can be configured with "JSImport.EventPattern" and + // "JSImport.EventReplacement" attribute parameters. + void NotifyComputing (bool computing); + void NotifyComplete (long time); +} diff --git a/samples/react/backend/Backend.Prime/Options.cs b/samples/react/backend/Backend.Prime/Options.cs new file mode 100644 index 00000000..d720641a --- /dev/null +++ b/samples/react/backend/Backend.Prime/Options.cs @@ -0,0 +1,3 @@ +namespace Backend.Prime; + +public record Options(int Complexity, bool Multithreading); diff --git a/samples/react/backend/Backend.Prime/Prime.cs b/samples/react/backend/Backend.Prime/Prime.cs new file mode 100644 index 00000000..b8906e7e --- /dev/null +++ b/samples/react/backend/Backend.Prime/Prime.cs @@ -0,0 +1,77 @@ +using System.Diagnostics; + +namespace Backend.Prime; + +// Implementation of the computer service that compute prime numbers. +// Injected in the application entry point assembly (Backend.WASM). + +public class Prime(IPrimeUI ui) : IComputer +{ + private static readonly SemaphoreSlim semaphore = new(0); + private readonly Stopwatch watch = new(); + private CancellationTokenSource? cts; + + public void StartComputing () + { + cts?.Cancel(); + cts = new CancellationTokenSource(); + cts.Token.Register(() => ui.NotifyComputing(false)); + var options = ui.GetOptions(); + if (!options.Multithreading) ComputeLoop(options.Complexity, cts.Token); + else new Thread(() => ComputeLoop(options.Complexity, cts.Token)).Start(); + ObserveLoop(cts.Token); + ui.NotifyComputing(true); + } + + public void StopComputing () => cts?.Cancel(); + + public bool IsComputing () => !cts?.IsCancellationRequested ?? false; + + private async void ObserveLoop (CancellationToken token) + { + while (!token.IsCancellationRequested) + { + watch.Restart(); + try { await semaphore.WaitAsync(token); } + catch (OperationCanceledException) { } + finally + { + watch.Stop(); + ui.NotifyComplete(watch.ElapsedMilliseconds); + } + await Task.Delay(1); + } + } + + private static async void ComputeLoop (int complexity, CancellationToken token) + { + while (!token.IsCancellationRequested) + { + ComputePrime(complexity); + semaphore.Release(); + await Task.Delay(10); + } + } + + private static void ComputePrime (int n) + { + var count = 0; + var a = (long)2; + while (count < n) + { + var b = (long)2; + var prime = 1; + while (b * b <= a) + { + if (a % b == 0) + { + prime = 0; + break; + } + b++; + } + if (prime > 0) count++; + a++; + } + } +} diff --git a/samples/react/backend/Backend.WASM/Backend.WASM.csproj b/samples/react/backend/Backend.WASM/Backend.WASM.csproj new file mode 100644 index 00000000..79f6e089 --- /dev/null +++ b/samples/react/backend/Backend.WASM/Backend.WASM.csproj @@ -0,0 +1,32 @@ + + + + net8.0 + browser-wasm + + backend + + $(SolutionDir) + + false + + $(SolutionDir)../public/bin + + true + + true + + true + + + + + + + + + + + + + diff --git a/samples/react/backend/Backend.WASM/Program.cs b/samples/react/backend/Backend.WASM/Program.cs new file mode 100644 index 00000000..aa5b815e --- /dev/null +++ b/samples/react/backend/Backend.WASM/Program.cs @@ -0,0 +1,24 @@ +using Backend; +using Backend.Prime; +using Bootsharp; +using Bootsharp.Inject; +using Microsoft.Extensions.DependencyInjection; + +// Application entry point for browser-wasm build target. +// Notice, how neither domain, nor other C# backend assemblies +// are coupled with the JavaScript interop specifics +// and can be shared with other build targets (console, MAUI, etc). + +// Generate C# -> JavaScript interop handlers for specified contracts. +[assembly: JSExport(typeof(IComputer))] +// Generate JavaScript -> C# interop handlers for specified contracts. +[assembly: JSImport(typeof(IPrimeUI))] +// Group all generated JavaScript artifacts under 'Computer' namespace. +[assembly: JSNamespace("^.*$", "Computer")] + +// Perform dependency injection. +new ServiceCollection() + .AddSingleton() // use prime computer + .AddBootsharp() // inject generated interop handlers + .BuildServiceProvider() + .RunBootsharp(); // initialize interop services diff --git a/Samples/React/backend/Backend.sln b/samples/react/backend/Backend.sln similarity index 68% rename from Samples/React/backend/Backend.sln rename to samples/react/backend/Backend.sln index 45b8058b..233353af 100644 --- a/Samples/React/backend/Backend.sln +++ b/samples/react/backend/Backend.sln @@ -1,5 +1,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Backend", "Backend/Backend.csproj", "{F758E072-5DA6-499E-9F09-922D2367B201}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Backend", "Backend/Backend.csproj", "{D67BDA79-2E0C-4C27-913B-8ED98A7C6A73}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Backend.Prime", "Backend.Prime/Backend.Prime.csproj", "{F758E072-5DA6-499E-9F09-922D2367B201}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Backend.WASM", "Backend.WASM/Backend.WASM.csproj", "{44F39802-9F5D-4D7E-9F63-8BAD2E3155A2}" EndProject @@ -13,6 +15,10 @@ Global {44F39802-9F5D-4D7E-9F63-8BAD2E3155A2}.Debug|Any CPU.Build.0 = Debug|Any CPU {44F39802-9F5D-4D7E-9F63-8BAD2E3155A2}.Release|Any CPU.ActiveCfg = Release|Any CPU {44F39802-9F5D-4D7E-9F63-8BAD2E3155A2}.Release|Any CPU.Build.0 = Release|Any CPU + {D67BDA79-2E0C-4C27-913B-8ED98A7C6A73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D67BDA79-2E0C-4C27-913B-8ED98A7C6A73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D67BDA79-2E0C-4C27-913B-8ED98A7C6A73}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D67BDA79-2E0C-4C27-913B-8ED98A7C6A73}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/samples/react/backend/Backend/Backend.csproj b/samples/react/backend/Backend/Backend.csproj new file mode 100644 index 00000000..d36f76db --- /dev/null +++ b/samples/react/backend/Backend/Backend.csproj @@ -0,0 +1,7 @@ + + + + net8.0 + + + diff --git a/samples/react/backend/Backend/IComputer.cs b/samples/react/backend/Backend/IComputer.cs new file mode 100644 index 00000000..5c752500 --- /dev/null +++ b/samples/react/backend/Backend/IComputer.cs @@ -0,0 +1,12 @@ +namespace Backend; + +// In the domain assembly we outline the contract of a computer service. +// The specific implementation is in other assembly, so that +// domain is not coupled with the details. + +public interface IComputer +{ + void StartComputing (); + void StopComputing (); + bool IsComputing (); +} diff --git a/samples/react/backend/package.json b/samples/react/backend/package.json new file mode 100644 index 00000000..98e899c4 --- /dev/null +++ b/samples/react/backend/package.json @@ -0,0 +1,5 @@ +{ + "name": "backend", + "main": "Backend.WASM/bin/backend/backend.mjs", + "types": "Backend.WASM/bin/backend/types/backend.d.ts" +} diff --git a/Samples/React/public/index.html b/samples/react/index.html similarity index 58% rename from Samples/React/public/index.html rename to samples/react/index.html index aa3d24e6..6832ed15 100644 --- a/Samples/React/public/index.html +++ b/samples/react/index.html @@ -3,10 +3,11 @@ - + React Sample -
+
+ diff --git a/samples/react/package.json b/samples/react/package.json new file mode 100644 index 00000000..a2fc5e9d --- /dev/null +++ b/samples/react/package.json @@ -0,0 +1,47 @@ +{ + "type": "module", + "dependencies": { + "backend": "file:backend", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "typescript": "^5.3.3", + "@types/react": "^18.2.46", + "@types/react-dom": "^18.2.18", + "vite": "^5.0.10", + "@vitejs/plugin-react-swc": "^3.5.0", + "vitest": "^1.1.1", + "@vitest/coverage-v8": "^1.1.1", + "happy-dom": "^12.10.3", + "@testing-library/react": "^14.1.2", + "@testing-library/user-event": "^14.5.2", + "eslint": "^8.56.0", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0", + "@typescript-eslint/eslint-plugin": "^6.16.0", + "npm-check-updates": "^16.14.12" + }, + "scripts": { + "update": "ncu --interactive", + "backend": "dotnet publish backend", + "lint": "eslint src test", + "test": "vitest run", + "cover": "vitest run --coverage", + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "eslintConfig": { + "extends": [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:react/jsx-runtime", + "plugin:react-hooks/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { "react/display-name": "off" }, + "settings": { "react": { "version": "detect" } }, + "env": { "browser": true } + } +} diff --git a/samples/react/public/favicon.svg b/samples/react/public/favicon.svg new file mode 100644 index 00000000..ef8647c6 --- /dev/null +++ b/samples/react/public/favicon.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/react/src/computer.tsx b/samples/react/src/computer.tsx new file mode 100644 index 00000000..ff689f29 --- /dev/null +++ b/samples/react/src/computer.tsx @@ -0,0 +1,76 @@ +import { useEffect, useState, useCallback, ChangeEvent } from "react"; +import { Computer } from "backend"; + +type Props = { + options: Computer.Options; + resultLimit: number; +}; + +export default ({ options, resultLimit }: Props) => { + const [computing, setComputing] = useState(false); + const [complexity, setComplexity] = useState(options.complexity); + const [multithreading, setMultithreading] = useState(options.multithreading); + const [results, setResults] = useState(""); + + const toggleCompute = useCallback(() => { + if (Computer.isComputing()) Computer.stopComputing(); + else Computer.startComputing(); + }, []); + + const toggleMultithreading = useCallback(() => { + setMultithreading(!multithreading); + }, [multithreading]); + + const handleComplexityInputChange = useCallback((event: ChangeEvent) => { + setComplexity(Math.min(Math.max(event.target.valueAsNumber, 99), 99999)); + }, []); + + const logResult = useCallback((time: bigint) => { + setResults(i => { + if ((i.match(/\n/g)?.length ?? 0) > resultLimit) + i = i.substring(0, i.lastIndexOf("\n")); + const stamp = new Date().toLocaleTimeString([], { hour12: false }); + return `[${stamp}] Computed in ${time}ms.\n${i}`; + }); + }, [resultLimit]); + + useEffect(() => { + Computer.getOptions = () => ({ complexity, multithreading }); + if (Computer.isComputing()) Computer.startComputing(); + }, [complexity, multithreading]); + + useEffect(() => { + Computer.onComplete.subscribe(logResult); + return () => Computer.onComplete.unsubscribe(logResult); + }, [logResult]); + + useEffect(() => { + Computer.onComputing.subscribe(setComputing); + return () => Computer.onComputing.unsubscribe(setComputing); + }, []); + + return ( +
+
+ The Donut is animating on the UI thread, while a background thread computing. + When MULTITHREADING disabled, the computation will run on UI affecting animation. +
+
+ + +
+ +
+ {results} +
+
+ ); +}; diff --git a/Samples/React/src/donut.tsx b/samples/react/src/donut.tsx similarity index 66% rename from Samples/React/src/donut.tsx rename to samples/react/src/donut.tsx index eaf2e118..5841e229 100644 --- a/Samples/React/src/donut.tsx +++ b/samples/react/src/donut.tsx @@ -1,17 +1,17 @@ -import { useState, useEffect } from "react"; +import { useState, useEffect } from "react"; type Props = { fps: number; }; -export const Donut = (props: Props) => { +export default ({ fps }: Props) => { const [time, setTime] = useState(); useEffect(() => { - const delay = 1000 / props.fps; + const delay = 1000 / fps; const handle = setInterval(() => setTime(Date.now()), delay); return () => clearInterval(handle); - }, [props.fps]); + }, [fps]); return
; }; diff --git a/Samples/React/src/index.css b/samples/react/src/index.css similarity index 74% rename from Samples/React/src/index.css rename to samples/react/src/index.css index 1288675f..36e59db0 100644 --- a/Samples/React/src/index.css +++ b/samples/react/src/index.css @@ -16,18 +16,28 @@ html { height: 100px; } -#stress { +#computer { position: absolute; top: 10px; width: 300px; } -#stress button { +#controls { + margin-top: 10px; +} + +#controls input { + max-width: 60px; + margin-left: 7px; + margin-right: 15px; +} + +#computer button { margin-top: 10px; width: 100%; } -#iterations { +#results { margin-top: 10px; white-space: pre-wrap; opacity: 0.65; diff --git a/samples/react/src/main.tsx b/samples/react/src/main.tsx new file mode 100644 index 00000000..754d8bc4 --- /dev/null +++ b/samples/react/src/main.tsx @@ -0,0 +1,12 @@ +import backend from "backend"; +import react from "react-dom/client"; +import Computer from "./computer"; +import Donut from "./donut"; +import "./index.css"; + +await backend.boot({ root: "/bin" }); + +react.createRoot(document.getElementById("app")!).render(<> + + +); diff --git a/samples/react/test/computer.test.tsx b/samples/react/test/computer.test.tsx new file mode 100644 index 00000000..ff5d6e6a --- /dev/null +++ b/samples/react/test/computer.test.tsx @@ -0,0 +1,41 @@ +import { Computer as Backend } from "backend"; +import { beforeEach, test, expect, vi } from "vitest"; +import { render, act, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import Computer from "../src/computer"; + +beforeEach(() => { + Backend.startComputing = vi.fn(); + Backend.stopComputing = vi.fn(); + Backend.isComputing = vi.fn(() => false); +}); + +test("not computing initially", () => { + render(); + expect(Backend.startComputing).not.toHaveBeenCalled(); +}); + +test("get options returns values specified in props", async () => { + render(); + expect(Backend.getOptions()).toStrictEqual({ complexity: 666, multithreading: true }); +}); + +test("compute time is written to screen", async () => { + render(); + act(() => Backend.onComplete.broadcast(BigInt(13))); + expect(screen.getByText(/Computed in 13ms/)); +}); + +test("button click stops computing when running", async () => { + Backend.isComputing = () => true; + render(); + await userEvent.click(screen.getByRole("button")); + expect(Backend.stopComputing).toHaveBeenCalled(); +}); + +test("button click starts computing when not running", async () => { + Backend.isComputing = () => false; + render(); + await userEvent.click(screen.getByRole("button")); + expect(Backend.startComputing).toHaveBeenCalled(); +}); diff --git a/samples/react/test/setup.ts b/samples/react/test/setup.ts new file mode 100644 index 00000000..25fb77c2 --- /dev/null +++ b/samples/react/test/setup.ts @@ -0,0 +1,4 @@ +import { afterEach } from "vitest"; +import { cleanup } from "@testing-library/react"; + +afterEach(cleanup); diff --git a/samples/react/tsconfig.json b/samples/react/tsconfig.json new file mode 100644 index 00000000..b7359c37 --- /dev/null +++ b/samples/react/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "moduleResolution": "bundler", + "jsx": "react-jsx", + "strict": true + }, + "include": ["src"] +} diff --git a/samples/react/vite.config.ts b/samples/react/vite.config.ts new file mode 100644 index 00000000..6d281909 --- /dev/null +++ b/samples/react/vite.config.ts @@ -0,0 +1,25 @@ +/// + +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react-swc"; + +export default defineConfig({ + plugins: [react()], + test: { + environment: "happy-dom", + setupFiles: ["test/setup.ts"], + coverage: { include: ["src/**"] } + }, + server: { + headers: { + "Cross-Origin-Opener-Policy": "same-origin", + "Cross-Origin-Embedder-Policy": "require-corp" + } + }, + build: { + target: "chrome89", + // Ignore node-specific calls in .NET's JavaScript: + // https://github.com/dotnet/runtime/issues/91558. + rollupOptions: { external: ["process", "module"] } + } +}); diff --git a/samples/trimming/README.md b/samples/trimming/README.md new file mode 100644 index 00000000..4c981157 --- /dev/null +++ b/samples/trimming/README.md @@ -0,0 +1,11 @@ +Example on producing minimal possible build size by disabling binaries embedding and utilizing aggressive trimming. + +To test and measure build size: +- Run `dotnet publish cs`; +- Run `node main.mjs`. + +### Measurements (KB) + +| .NET | Raw | Brotli | +|-------|-------|--------| +| 8.0.1 | 2,317 | 744 | diff --git a/samples/trimming/cs/Program.cs b/samples/trimming/cs/Program.cs new file mode 100644 index 00000000..c7b6b5bf --- /dev/null +++ b/samples/trimming/cs/Program.cs @@ -0,0 +1,9 @@ +using Bootsharp; + +Log("Hello from .NET!"); + +public static partial class Program +{ + [JSFunction] + public static partial void Log (string message); +} diff --git a/samples/trimming/cs/Trimming.csproj b/samples/trimming/cs/Trimming.csproj new file mode 100644 index 00000000..b59bdd2d --- /dev/null +++ b/samples/trimming/cs/Trimming.csproj @@ -0,0 +1,22 @@ + + + + net8.0 + browser-wasm + + false + + true + + + + + + + + + + + + diff --git a/samples/trimming/main.mjs b/samples/trimming/main.mjs new file mode 100644 index 00000000..81b999ed --- /dev/null +++ b/samples/trimming/main.mjs @@ -0,0 +1,29 @@ +import bootsharp, { Global } from "./cs/bin/bootsharp/bootsharp.mjs"; +import zlib from "node:zlib"; +import util from "node:util"; +import fs from "node:fs/promises"; + +console.log(`Binary size: ${await measure("./cs/bin/bootsharp/bin")}KB`); +console.log(`Brotli size: ${await measure("./cs/bin/bootsharp/bro")}KB`); + +const resources = { ...bootsharp.resources }; +await Promise.all([ + fetchBro(resources.wasm), + ...resources.assemblies.map(fetchBro) +]); + +Global.log = console.log; +await bootsharp.boot({ root: "./bin", resources }); + +async function measure(dir) { + let size = 0; + for await (const entry of await fs.opendir(dir)) { + size += (await fs.stat(`${entry.path}/${entry.name}`)).size; + } + return Math.ceil(size / 1024); +} + +async function fetchBro(resource) { + const bro = await fs.readFile(`./cs/bin/bootsharp/bro/${resource.name}.br`); + resource.content = await util.promisify(zlib.brotliDecompress)(bro); +} diff --git a/Samples/WebExtension/LICENSE b/samples/vscode/LICENSE.md similarity index 100% rename from Samples/WebExtension/LICENSE rename to samples/vscode/LICENSE.md diff --git a/samples/vscode/README.md b/samples/vscode/README.md new file mode 100644 index 00000000..e245f7c9 --- /dev/null +++ b/samples/vscode/README.md @@ -0,0 +1,11 @@ +An example on using [Bootsharp](https://github.com/Elringus/Bootsharp)-compiled C# solution inside VS Code standalone (node) and [web](https://code.visualstudio.com/api/extension-guides/web-extensions) extensions. + +Install [Hello, Bootsharp!](https://marketplace.visualstudio.com/items?itemName=Elringus.bootsharp) extension in VS Code, open command palette (`Ctrl+Shift+P` on standalone or `F1` on web) and execute `Hello, Bootsharp!` command. If successful, a welcome notification will appear. + +![](https://i.gyazo.com/a3ec0ee51f14970a7eca24169d682274.png) + +To test the extension locally: + +- Run `npm run build` to build the sources; +- Run `npm run package` to bundle extension package; +- Drag-drop the produced `.vsix` file to the VS Code extension tab. diff --git a/samples/vscode/assets/package-icon.png b/samples/vscode/assets/package-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bc7bffdde4693373ebfb3d61ec83d8fd1226fc72 GIT binary patch literal 39237 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 "VS Code"; + try { await bootsharp.boot(); } + catch (e) { vscode.window.showErrorMessage(e.message); } + const command = vscode.commands.registerCommand("bootsharp.hello", greet); + context.subscriptions.push(command); +} + +export function deactivate() { + bootsharp.exit(); +} + +function greet() { + const message = `Welcome, ${Global.getBackendName()}! Enjoy your VS Code extension space.`; + vscode.window.showInformationMessage(message); +} diff --git a/src/cs/.scripts/cover.ps1 b/src/cs/.scripts/cover.ps1 new file mode 100644 index 00000000..20bd3cff --- /dev/null +++ b/src/cs/.scripts/cover.ps1 @@ -0,0 +1,8 @@ +try { + dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=opencover + reportgenerator "-reports:*/*.xml" "-targetdir:.cover" -reporttypes:HTML + serve .cover +} finally { + rm ./*/coverage.opencover.xml -force + rm ./.cover -r -force +} diff --git a/src/cs/.scripts/pack.ps1 b/src/cs/.scripts/pack.ps1 new file mode 100644 index 00000000..7e85c4da --- /dev/null +++ b/src/cs/.scripts/pack.ps1 @@ -0,0 +1,5 @@ +dotnet build Bootsharp.Generate -c Release +dotnet pack Bootsharp.Common -o .nuget -c Release +dotnet pack Bootsharp.Inject -o .nuget -c Release +dotnet pack Bootsharp -o .nuget -c Release +dotnet restore diff --git a/src/cs/Bootsharp.Common.Test/BindingTest.cs b/src/cs/Bootsharp.Common.Test/BindingTest.cs new file mode 100644 index 00000000..18e58625 --- /dev/null +++ b/src/cs/Bootsharp.Common.Test/BindingTest.cs @@ -0,0 +1,25 @@ +namespace Bootsharp.Common.Test; + +public class BindingTest +{ + [Fact] + public void Records () + { + // TODO: Remove once coverlet properly handles record coverage. + _ = new ExportBinding(default, default) with { Api = typeof(int) }; + _ = new ImportBinding(default) with { Implementation = "" }; + } + + [Fact] + public void RegistersExports () + { + Assert.Equal(typeof(IBackend), BindingRegistry.Exports[typeof(global::Backend.JSBackend)].Api); + Assert.IsType>(BindingRegistry.Exports[typeof(global::Backend.JSBackend)].Factory); + } + + [Fact] + public void RegistersImports () + { + Assert.IsType(BindingRegistry.Imports[typeof(IFrontend)].Implementation); + } +} diff --git a/DotNet/DotNetJS.Test/DotNetJS.Test.csproj b/src/cs/Bootsharp.Common.Test/Bootsharp.Common.Test.csproj similarity index 57% rename from DotNet/DotNetJS.Test/DotNetJS.Test.csproj rename to src/cs/Bootsharp.Common.Test/Bootsharp.Common.Test.csproj index 60770314..b2e08a10 100644 --- a/DotNet/DotNetJS.Test/DotNetJS.Test.csproj +++ b/src/cs/Bootsharp.Common.Test/Bootsharp.Common.Test.csproj @@ -1,29 +1,37 @@ - net6.0 + net8.0 + enable false - - - + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + + diff --git a/src/cs/Bootsharp.Common.Test/FunctionTest.cs b/src/cs/Bootsharp.Common.Test/FunctionTest.cs new file mode 100644 index 00000000..7a02f78a --- /dev/null +++ b/src/cs/Bootsharp.Common.Test/FunctionTest.cs @@ -0,0 +1,28 @@ +using static Bootsharp.Function; + +namespace Bootsharp.Common.Test; + +public class FunctionTest +{ + [Fact] + public void WhenEndpointNotFoundErrorIsThrown () + { + Assert.Contains("Endpoint 'foo' is not found.", + Assert.Throws(() => Get("foo")).Message); + } + + [Fact] + public void WhenFunctionTypeIsWrongErrorIsThrown () + { + Set("bar", null); + Assert.Contains("Endpoint 'bar' is not 'System.Action'.", + Assert.Throws(() => Get("bar")).Message); + } + + [Fact] + public void CanSetAndGetDelegate () + { + Set("echo", (int x, int y) => x + y); + Assert.Equal(15, Get>("echo")(6, 9)); + } +} diff --git a/src/cs/Bootsharp.Common.Test/MockResolver.cs b/src/cs/Bootsharp.Common.Test/MockResolver.cs new file mode 100644 index 00000000..7b9831e3 --- /dev/null +++ b/src/cs/Bootsharp.Common.Test/MockResolver.cs @@ -0,0 +1,9 @@ +using System.Text.Json; +using System.Text.Json.Serialization.Metadata; + +namespace Bootsharp.Common.Test; + +public class MockResolver : IJsonTypeInfoResolver +{ + public JsonTypeInfo GetTypeInfo (Type type, JsonSerializerOptions options) => null; +} diff --git a/src/cs/Bootsharp.Common.Test/Mocks.cs b/src/cs/Bootsharp.Common.Test/Mocks.cs new file mode 100644 index 00000000..5854212e --- /dev/null +++ b/src/cs/Bootsharp.Common.Test/Mocks.cs @@ -0,0 +1,6 @@ +namespace Bootsharp.Common.Test; + +public interface IBackend; +public interface IFrontend; +public class Backend : IBackend; +public class Frontend : IFrontend; diff --git a/DotNet/DotNetJS.Test/JSNamespaceTest.cs b/src/cs/Bootsharp.Common.Test/NamespaceTest.cs similarity index 74% rename from DotNet/DotNetJS.Test/JSNamespaceTest.cs rename to src/cs/Bootsharp.Common.Test/NamespaceTest.cs index c3967797..f44488b8 100644 --- a/DotNet/DotNetJS.Test/JSNamespaceTest.cs +++ b/src/cs/Bootsharp.Common.Test/NamespaceTest.cs @@ -1,13 +1,11 @@ -using System.Linq; -using System.Reflection; -using DotNetJS; -using Xunit; +using System.Reflection; +using Bootsharp; [assembly: JSNamespace("pattern", "replacement")] -namespace DotNetJS.Test; +namespace Bootsharp.Common.Test; -public class JSNamespaceTest +public class NamespaceTest { private readonly CustomAttributeData attribute = GetAttributeData(); @@ -31,9 +29,7 @@ public void ReplacementParameterIsTheSecondPositionalArgument () Assert.Equal("replacement", attribute.ConstructorArguments[1].Value); } - private static CustomAttributeData GetAttributeData () - { - return typeof(JSNamespaceTest).Assembly.CustomAttributes + private static CustomAttributeData GetAttributeData () => + typeof(NamespaceTest).Assembly.CustomAttributes .First(a => a.AttributeType == typeof(JSNamespaceAttribute)); - } } diff --git a/src/cs/Bootsharp.Common.Test/SerializerTest.cs b/src/cs/Bootsharp.Common.Test/SerializerTest.cs new file mode 100644 index 00000000..9f957e01 --- /dev/null +++ b/src/cs/Bootsharp.Common.Test/SerializerTest.cs @@ -0,0 +1,99 @@ +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Text.Json.Serialization.Metadata; +using static Bootsharp.Serializer; + +namespace Bootsharp.Common.Test; + +public enum MockEnum { Foo, Bar } +public record MockItem (string Id); +public record MockItemWithEnum (MockEnum? Enum); +public record MockRecord (IReadOnlyList Items); + +public class SerializerTest +{ + public SerializerTest () + { + Options = new JsonSerializerOptions(JsonSerializerDefaults.Web) { + TypeInfoResolver = new DefaultJsonTypeInfoResolver() + }; + } + + [Fact] + public void WhenInfoResolverNotAssignedThrowsError () + { + Options = new JsonSerializerOptions(JsonSerializerDefaults.Web) { + TypeInfoResolver = null + }; + Assert.Contains("Serializer info resolver is not assigned", + Assert.Throws(() => Serialize("")).Message); + } + + [Fact] + public void WhenTypeInfoNotAvailableThrowsError () + { + Options = new JsonSerializerOptions(JsonSerializerDefaults.Web) { + TypeInfoResolver = new MockResolver() + }; + Assert.Contains("Failed to resolve serializer info", + Assert.Throws(() => Serialize("")).Message); + } + + [Fact] + public void CanSerialize () + { + Assert.Equal("""{"items":[{"id":"foo"},{"id":"bar"}]}""", + Serialize(new MockRecord(new MockItem[] { new("foo"), new("bar") }))); + } + + [Fact] + public void SerializesNullAsNull () + { + Assert.Equal("null", Serialize(null)); + } + + [Fact] + public void CanDeserialize () + { + Assert.Equal(new MockItem[] { new("foo"), new("bar") }, + Deserialize("""{"items":[{"id":"foo"},{"id":"bar"}]}""").Items); + } + + [Fact] + public void DeserializesNullAndUndefinedAsDefault () + { + Assert.Null(Deserialize(null)); + Assert.Null(Deserialize("null")); + Assert.Null(Deserialize("undefined")); + Assert.Null(Deserialize(null)); + Assert.Null(Deserialize("null")); + Assert.Null(Deserialize("undefined")); + Assert.False(Deserialize(null)); + Assert.False(Deserialize("null")); + Assert.False(Deserialize("undefined")); + } + + [Fact] + public void WhenDeserializationFailsErrorIsThrown () + { + Assert.Throws(() => Deserialize("")); + } + + [Fact] + public void RespectsOptions () + { + Assert.Equal("{\"enum\":0}", Serialize(new MockItemWithEnum(MockEnum.Foo))); + Assert.Equal("{\"enum\":null}", Serialize(new MockItemWithEnum(null))); + Assert.Equal(MockEnum.Foo, Deserialize("{\"enum\":0}").Enum); + Assert.Null((Deserialize("{\"enum\":null}")).Enum); + Options = new JsonSerializerOptions(JsonSerializerDefaults.Web) { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + Converters = { new JsonStringEnumConverter() }, + TypeInfoResolver = new DefaultJsonTypeInfoResolver() + }; + Assert.Equal("{\"enum\":\"Foo\"}", Serialize(new MockItemWithEnum(MockEnum.Foo))); + Assert.Equal("{}", Serialize(new MockItemWithEnum(null))); + Assert.Equal(MockEnum.Foo, (Deserialize("{\"enum\":\"Foo\"}")).Enum); + Assert.Null((Deserialize("{}")).Enum); + } +} diff --git a/src/cs/Bootsharp.Common.Test/TypesTest.cs b/src/cs/Bootsharp.Common.Test/TypesTest.cs new file mode 100644 index 00000000..a1cdd533 --- /dev/null +++ b/src/cs/Bootsharp.Common.Test/TypesTest.cs @@ -0,0 +1,96 @@ +using System.Reflection; +using Bootsharp; +using Bootsharp.Common.Test; + +[assembly: JSExport( + typeof(IBackend), + NamePattern = "ExportNamePattern", + NameReplacement = "ExportNameReplacement", + InvokePattern = "ExportInvokePattern", + InvokeReplacement = "ExportInvokeReplacement" +)] + +[assembly: JSImport( + typeof(IFrontend), + NamePattern = "ImportNamePattern", + NameReplacement = "ImportNameReplacement", + InvokePattern = "ImportInvokePattern", + InvokeReplacement = "ImportInvokeReplacement", + EventPattern = "ImportEventPattern", + EventReplacement = "ImportEventReplacement" +)] + +namespace Bootsharp.Common.Test; + +public class TypesTest +{ + private readonly CustomAttributeData export = GetMockExportAttribute(); + private readonly CustomAttributeData import = GetMockImportAttribute(); + + [Fact] + public void Records () + { + // TODO: Remove once coverlet properly handles record coverage. + _ = new MockItem("") with { Id = "foo" }; + _ = new MockItemWithEnum(default) with { Enum = MockEnum.Bar }; + _ = new MockRecord(default) with { Items = new[] { new MockItem("") } }; + } + + [Fact] + public void TypesAreAssigned () + { + Assert.Equal(new[] { typeof(IBackend) }, new JSExportAttribute(typeof(IBackend)).Types); + Assert.Equal(new[] { typeof(IFrontend) }, new JSImportAttribute(typeof(IFrontend)).Types); + } + + [Fact] + public void NameAndInvokeParametersAreNullByDefault () + { + var attribute = new JSExportAttribute(typeof(IBackend)); + Assert.Null(attribute.NamePattern); + Assert.Null(attribute.NameReplacement); + Assert.Null(attribute.InvokePattern); + Assert.Null(attribute.InvokeReplacement); + } + + [Fact] + public void EventParametersAreNullByDefault () // (defaults are in generator) + { + var attribute = new JSImportAttribute(typeof(IBackend)); + Assert.Null(attribute.EventPattern); + Assert.Null(attribute.EventReplacement); + } + + [Fact] + public void ExportParametersEqualArguments () + { + Assert.Equal(new object[] { typeof(IBackend) }, + (export.ConstructorArguments[0].Value as IReadOnlyCollection).Select(a => a.Value)); + Assert.Equal("ExportNamePattern", GetNamedValue(export.NamedArguments, nameof(JSTypeAttribute.NamePattern))); + Assert.Equal("ExportNameReplacement", GetNamedValue(export.NamedArguments, nameof(JSTypeAttribute.NameReplacement))); + Assert.Equal("ExportInvokePattern", GetNamedValue(export.NamedArguments, nameof(JSTypeAttribute.InvokePattern))); + Assert.Equal("ExportInvokeReplacement", GetNamedValue(export.NamedArguments, nameof(JSTypeAttribute.InvokeReplacement))); + } + + [Fact] + public void ImportParametersEqualArguments () + { + Assert.Equal(new object[] { typeof(IFrontend) }, + (import.ConstructorArguments[0].Value as IReadOnlyCollection).Select(a => a.Value)); + Assert.Equal("ImportNamePattern", GetNamedValue(import.NamedArguments, nameof(JSTypeAttribute.NamePattern))); + Assert.Equal("ImportNameReplacement", GetNamedValue(import.NamedArguments, nameof(JSTypeAttribute.NameReplacement))); + Assert.Equal("ImportInvokePattern", GetNamedValue(import.NamedArguments, nameof(JSTypeAttribute.InvokePattern))); + Assert.Equal("ImportInvokeReplacement", GetNamedValue(import.NamedArguments, nameof(JSTypeAttribute.InvokeReplacement))); + Assert.Equal("ImportEventPattern", GetNamedValue(import.NamedArguments, nameof(JSImportAttribute.EventPattern))); + Assert.Equal("ImportEventReplacement", GetNamedValue(import.NamedArguments, nameof(JSImportAttribute.EventReplacement))); + } + + private static object GetNamedValue (IList args, string key) => + args.First(a => a.MemberName == key).TypedValue.Value; + private static CustomAttributeData GetMockExportAttribute () => + typeof(TypesTest).Assembly.CustomAttributes + .First(a => a.AttributeType == typeof(JSExportAttribute)); + private static CustomAttributeData GetMockImportAttribute () => + typeof(TypesTest).Assembly.CustomAttributes + .First(a => a.AttributeType == typeof(JSImportAttribute)); +} diff --git a/src/cs/Bootsharp.Common/Attributes/JSEventAttribute.cs b/src/cs/Bootsharp.Common/Attributes/JSEventAttribute.cs new file mode 100644 index 00000000..88cdca43 --- /dev/null +++ b/src/cs/Bootsharp.Common/Attributes/JSEventAttribute.cs @@ -0,0 +1,15 @@ +namespace Bootsharp; + +/// +/// Applied to a partial method to bind it with an event meant to be +/// broadcast (invoked) in C# and subscribed (listened) to in JavaScript. +/// +/// +/// +/// [JSEvent] +/// public static partial string OnSomethingHappened (string payload); +/// Namespace.onSomethingHappened.subscribe(payload => ...); +/// +/// +[AttributeUsage(AttributeTargets.Method)] +public sealed class JSEventAttribute : Attribute; diff --git a/src/cs/Bootsharp.Common/Attributes/JSExportAttribute.cs b/src/cs/Bootsharp.Common/Attributes/JSExportAttribute.cs new file mode 100644 index 00000000..de99320c --- /dev/null +++ b/src/cs/Bootsharp.Common/Attributes/JSExportAttribute.cs @@ -0,0 +1,29 @@ +namespace Bootsharp; + +/// +/// When applied to WASM entry point assembly, specified interfaces will +/// be automatically exported for consumption on JavaScript side. +/// +/// +/// Generated bindings have to be initialized with the handler implementation. +/// For example, given "IHandler" interface is exported, "JSHandler" class will be generated, +/// which has to be instantiated with an "IHandler" implementation instance. +/// +/// +/// Expose "IHandlerA" and "IHandlerB" C# APIs to JavaScript and wrap invocations in "Utils.Try()": +/// +/// [assembly: JSExport( +/// typeof(IHandlerA), +/// typeof(IHandlerB), +/// invokePattern = "(.+)", +/// invokeReplacement = "Utils.Try(() => $1)" +/// )] +/// +/// +[AttributeUsage(AttributeTargets.Assembly)] +public sealed class JSExportAttribute : JSTypeAttribute +{ + /// + public JSExportAttribute (params Type[] types) + : base(types) { } +} diff --git a/src/cs/Bootsharp.Common/Attributes/JSFunctionAttribute.cs b/src/cs/Bootsharp.Common/Attributes/JSFunctionAttribute.cs new file mode 100644 index 00000000..e34ecd73 --- /dev/null +++ b/src/cs/Bootsharp.Common/Attributes/JSFunctionAttribute.cs @@ -0,0 +1,17 @@ +namespace Bootsharp; + +/// +/// Applied to a partial method to bind it with a JavaScript function. +/// +/// +/// The implementation is expected to be assigned as "Namespace.method = function". +/// +/// +/// +/// [JSFunction] +/// public static partial string GetHostName (); +/// Namespace.getHostName = () => "Browser"; +/// +/// +[AttributeUsage(AttributeTargets.Method)] +public sealed class JSFunctionAttribute : Attribute; diff --git a/src/cs/Bootsharp.Common/Attributes/JSImportAttribute.cs b/src/cs/Bootsharp.Common/Attributes/JSImportAttribute.cs new file mode 100644 index 00000000..4921c96a --- /dev/null +++ b/src/cs/Bootsharp.Common/Attributes/JSImportAttribute.cs @@ -0,0 +1,39 @@ +namespace Bootsharp; + +/// +/// When applied to WASM entry point assembly, JavaScript bindings for the specified interfaces +/// will be automatically generated for consumption on C# side. +/// +/// +/// Generated bindings have to be implemented on JavaScript side. +/// For example, given "IFrontend" interface is imported, "JSFrontend" class will be generated, +/// which has to be implemented in JavaScript.
+/// When an interface method starts with "Notify", an event bindings will ge generated (instead of function); +/// JavaScript name of the event will start with "on" instead of "Notify". This behaviour can be configured +/// with and parameters. +///
+/// +/// Generate JavaScript APIs based on "IFrontendAPI" and "IOtherFrontendAPI" interfaces: +/// +/// [assembly: JSImport( +/// typeof(IFrontendAPI), +/// typeof(IOtherFrontendAPI) +/// )] +/// +/// +[AttributeUsage(AttributeTargets.Assembly)] +public sealed class JSImportAttribute : JSTypeAttribute +{ + /// + /// Regex pattern to match method names indicating an event binding should generated (instead of function). + /// + public string? EventPattern { get; init; } + /// + /// Replacement for the event pattern matches. + /// + public string? EventReplacement { get; init; } + + /// + public JSImportAttribute (params Type[] types) + : base(types) { } +} diff --git a/src/cs/Bootsharp.Common/Attributes/JSInvokableAttribute.cs b/src/cs/Bootsharp.Common/Attributes/JSInvokableAttribute.cs new file mode 100644 index 00000000..5471f96f --- /dev/null +++ b/src/cs/Bootsharp.Common/Attributes/JSInvokableAttribute.cs @@ -0,0 +1,14 @@ +namespace Bootsharp; + +/// +/// Applied to a static method to make it invokable in JavaScript. +/// +/// +/// +/// [JSInvokable] +/// public static string GetName () => "Sharp"; +/// console.log(Namespace.getName()); +/// +/// +[AttributeUsage(AttributeTargets.Method)] +public sealed class JSInvokableAttribute : Attribute; diff --git a/DotNet/DotNetJS/Attributes/JSNamespaceAttribute.cs b/src/cs/Bootsharp.Common/Attributes/JSNamespaceAttribute.cs similarity index 75% rename from DotNet/DotNetJS/Attributes/JSNamespaceAttribute.cs rename to src/cs/Bootsharp.Common/Attributes/JSNamespaceAttribute.cs index 3f983a73..79dc3f87 100644 --- a/DotNet/DotNetJS/Attributes/JSNamespaceAttribute.cs +++ b/src/cs/Bootsharp.Common/Attributes/JSNamespaceAttribute.cs @@ -1,11 +1,13 @@ -using System; - -namespace DotNetJS; +namespace Bootsharp; /// /// When applied to WASM entry point assembly, overrides namespace -/// generated for the JavaScript bindings and TypeScript declarations. +/// generated for JavaScript bindings and type definitions. /// +/// +/// Transform "Company.Product.Space" into "Space": +/// [assembly:JSNamespace(@"Company\.Product\.(\S+)", "$1")] +/// [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] public sealed class JSNamespaceAttribute : Attribute { diff --git a/src/cs/Bootsharp.Common/Attributes/JSTypeAttribute.cs b/src/cs/Bootsharp.Common/Attributes/JSTypeAttribute.cs new file mode 100644 index 00000000..eac6b16d --- /dev/null +++ b/src/cs/Bootsharp.Common/Attributes/JSTypeAttribute.cs @@ -0,0 +1,34 @@ +namespace Bootsharp; + +/// +/// The attribute for automatic JS bindings generation of specified types. +/// +public abstract class JSTypeAttribute : Attribute +{ + /// + /// The types to generated bindings for. + /// + public Type[] Types { get; } + /// + /// Regex pattern to match generated method names. + /// + public string? NamePattern { get; init; } + /// + /// Replacement for the pattern matches of the generated method names. + /// + public string? NameReplacement { get; init; } + /// + /// Regex pattern to match generated method invocations. + /// + public string? InvokePattern { get; init; } + /// + /// Replacement for the pattern matches of the generated method invocations. + /// + public string? InvokeReplacement { get; init; } + + /// The types to generated bindings for. + protected JSTypeAttribute (Type[] types) + { + Types = types; + } +} diff --git a/src/cs/Bootsharp.Common/Binding/BindingRegistry.cs b/src/cs/Bootsharp.Common/Binding/BindingRegistry.cs new file mode 100644 index 00000000..0757bf6d --- /dev/null +++ b/src/cs/Bootsharp.Common/Binding/BindingRegistry.cs @@ -0,0 +1,31 @@ +using System.Diagnostics.CodeAnalysis; + +namespace Bootsharp; + +/// +/// Stores registered JavaScript bindings. +/// +[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] +public static class BindingRegistry +{ + /// + /// Registered export bindings mapped by the binding implementation (auto-generated) type. + /// + public static IReadOnlyDictionary Exports => exports; + /// + /// Registered import bindings mapped by the imported API interface type. + /// + public static IReadOnlyDictionary Imports => imports; + + private static readonly Dictionary exports = new(); + private static readonly Dictionary imports = new(); + + /// + /// Maps implementation type to export binding; used internally by the auto-generated code. + /// + public static void Register (Type impl, ExportBinding binding) => exports[impl] = binding; + /// + /// Maps imported interface type to import binding; used internally by the auto-generated code. + /// + public static void Register (Type api, ImportBinding binding) => imports[api] = binding; +} diff --git a/src/cs/Bootsharp.Common/Binding/ExportBinding.cs b/src/cs/Bootsharp.Common/Binding/ExportBinding.cs new file mode 100644 index 00000000..fe893a34 --- /dev/null +++ b/src/cs/Bootsharp.Common/Binding/ExportBinding.cs @@ -0,0 +1,8 @@ +namespace Bootsharp; + +/// +/// Exported JavaScript binding. +/// +/// Type of the exported interface. +/// Binding's implementation factory function. +public record ExportBinding (Type Api, Func Factory); diff --git a/src/cs/Bootsharp.Common/Binding/ImportBinding.cs b/src/cs/Bootsharp.Common/Binding/ImportBinding.cs new file mode 100644 index 00000000..a72cc836 --- /dev/null +++ b/src/cs/Bootsharp.Common/Binding/ImportBinding.cs @@ -0,0 +1,7 @@ +namespace Bootsharp; + +/// +/// Imported JavaScript binding. +/// +/// Binding's implementation instance. +public record ImportBinding (object Implementation); diff --git a/src/cs/Bootsharp.Common/Bootsharp.Common.csproj b/src/cs/Bootsharp.Common/Bootsharp.Common.csproj new file mode 100644 index 00000000..b52f6d7a --- /dev/null +++ b/src/cs/Bootsharp.Common/Bootsharp.Common.csproj @@ -0,0 +1,20 @@ + + + + net8.0 + enable + enable + Bootsharp.Common + Bootsharp.Common + Platform-agnostic common Bootsharp APIs. + true + CS1591 + + + + + + + + diff --git a/src/cs/Bootsharp.Common/Error.cs b/src/cs/Bootsharp.Common/Error.cs new file mode 100644 index 00000000..59de3370 --- /dev/null +++ b/src/cs/Bootsharp.Common/Error.cs @@ -0,0 +1,6 @@ +namespace Bootsharp; + +/// +/// Exception thrown from Bootsharp internal behaviour. +/// +public sealed class Error (string message) : Exception(message); diff --git a/src/cs/Bootsharp.Common/Interop/Function.cs b/src/cs/Bootsharp.Common/Interop/Function.cs new file mode 100644 index 00000000..880b1c1c --- /dev/null +++ b/src/cs/Bootsharp.Common/Interop/Function.cs @@ -0,0 +1,40 @@ +namespace Bootsharp; + +/// +/// Provides access to JavaScript function delegates via endpoints. +/// +/// +/// Endpoint is composed of JavaScript object and function names joined with dot. +/// In case host object is composed, object chain is joined with dots as well. +/// +public static class Function +{ + private static readonly Dictionary functions = new(); + + /// + /// Maps function delegate to specified endpoint. + /// + /// + /// Performed at 'PrepareBootsharp' build step (not in source generator). + /// + public static void Set (string endpoint, Delegate func) + { + functions[endpoint] = func; + } + + /// + /// Returns function delegate of specified endpoint and type. + /// + /// + /// Used in sources generated for partial + /// and methods. + /// + public static T Get (string endpoint) where T : Delegate + { + if (!functions.TryGetValue(endpoint, out var func)) + throw new Error($"Endpoint '{endpoint}' is not found."); + if (func is not T specific) + throw new Error($"Endpoint '{endpoint}' is not '{typeof(T)}'."); + return specific; + } +} diff --git a/src/cs/Bootsharp.Common/Interop/Serializer.cs b/src/cs/Bootsharp.Common/Interop/Serializer.cs new file mode 100644 index 00000000..9914c13c --- /dev/null +++ b/src/cs/Bootsharp.Common/Interop/Serializer.cs @@ -0,0 +1,47 @@ +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Text.Json.Serialization.Metadata; + +namespace Bootsharp; + +/// +/// Handles serialization of the interop data that can't be passed to and from JavaScript as-is. +/// +public static class Serializer +{ + /// + /// Options for used under the hood. + /// + public static JsonSerializerOptions Options { get; set; } = new(JsonSerializerDefaults.Web) { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull + }; + + /// + /// Serializes specified object to JSON string. + /// + public static string Serialize (object? @object) + { + if (@object is null) return "null"; + return JsonSerializer.Serialize(@object, GetInfo(@object.GetType())); + } + + /// + /// Deserializes specified JSON string to the object of specified type. + /// + public static T? Deserialize (string? json) + { + if (json is null || + json.Equals("null", StringComparison.Ordinal) || + json.Equals("undefined", StringComparison.Ordinal)) return default; + var info = (JsonTypeInfo)GetInfo(typeof(T)); + return JsonSerializer.Deserialize(json, info); + } + + private static JsonTypeInfo GetInfo (Type type) + { + if (Options.TypeInfoResolver is null) + throw new Error("Serializer info resolver is not assigned."); + return Options.TypeInfoResolver.GetTypeInfo(type, Options) ?? + throw new Error($"Failed to resolve serializer info for '{type}'."); + } +} diff --git a/src/cs/Bootsharp.Generate.Test/Bootsharp.Generate.Test.csproj b/src/cs/Bootsharp.Generate.Test/Bootsharp.Generate.Test.csproj new file mode 100644 index 00000000..84453745 --- /dev/null +++ b/src/cs/Bootsharp.Generate.Test/Bootsharp.Generate.Test.csproj @@ -0,0 +1,41 @@ + + + + net8.0 + enable + false + + + + https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json; + + + + + + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + diff --git a/src/cs/Bootsharp.Generate.Test/Emitters/EventTest.cs b/src/cs/Bootsharp.Generate.Test/Emitters/EventTest.cs new file mode 100644 index 00000000..7bbd825d --- /dev/null +++ b/src/cs/Bootsharp.Generate.Test/Emitters/EventTest.cs @@ -0,0 +1,73 @@ +namespace Bootsharp.Generate.Test; + +public static class EventTest +{ + public static IEnumerable Data { get; } = new[] { + // Can generate event binding without namespace and arguments. + new object[] { + """ + partial class Foo + { + [JSEvent] + partial void OnBar (); + } + """, + """ + partial class Foo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () { } + + partial void OnBar () => Get("Global.onBar")(); + } + """ + }, + // Can generate event binding with namespace and arguments. + new object[] { + """ + namespace Space; + + public static partial class Foo + { + [JSEvent] + public static partial void OnBar (string a, int b); + } + """, + """ + namespace Space; + + public static partial class Foo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Space.Foo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () { } + + public static partial void OnBar (global::System.String a, global::System.Int32 b) => Get>("Space.onBar")(a, b); + } + """ + }, + // Can generate event binding with serialized parameters. + new object[] { + """ + public record Info(string Baz); + + public static partial class Foo + { + [JSEvent] + public static partial void OnInfo (Info info); + } + """, + """ + public static partial class Foo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () { } + + public static partial void OnInfo (global::Info info) => Get>("Global.onInfo")(Serialize(info)); + } + """ + } + }; +} diff --git a/src/cs/Bootsharp.Generate.Test/Emitters/ExportTest.cs b/src/cs/Bootsharp.Generate.Test/Emitters/ExportTest.cs new file mode 100644 index 00000000..a9792a97 --- /dev/null +++ b/src/cs/Bootsharp.Generate.Test/Emitters/ExportTest.cs @@ -0,0 +1,121 @@ +namespace Bootsharp.Generate.Test; + +public static class ExportTest +{ + public static IEnumerable Data { get; } = new[] { + // Can export various APIs. + new object[] { + """ + using System.Threading.Tasks; + + [assembly:JSExport(typeof(IFoo))] + + public readonly record struct Item(); + + public interface IFoo + { + void Foo (string? foo); + Task Bar (); + Item? Baz (); + Task Nya (); + string[] Far (int[] far); + } + """, + """ + namespace Foo; + + public class JSFoo + { + private static global::IFoo handler = null!; + + public JSFoo (global::IFoo handler) + { + JSFoo.handler = handler; + } + + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo.JSFoo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () + { + Bootsharp.BindingRegistry.Register(typeof(JSFoo), new ExportBinding(typeof(global::IFoo), handler => new JSFoo((global::IFoo)handler))); + } + + [JSInvokable] public static void Foo (global::System.String? foo) => handler.Foo(foo); + [JSInvokable] public static global::System.Threading.Tasks.Task Bar () => handler.Bar(); + [JSInvokable] public static global::Item? Baz () => handler.Baz(); + [JSInvokable] public static global::System.Threading.Tasks.Task Nya () => handler.Nya(); + [JSInvokable] public static global::System.String[] Far (global::System.Int32[] far) => handler.Far(far); + } + """ + }, + // Can override name and invoke. + new object[] { + """ + [assembly:JSExport(typeof(IFoo), NamePattern="Foo", NameReplacement="Bar", InvokePattern="(.+)", InvokeReplacement="$1/**/")] + + public interface IFoo + { + void Foo (string foo); + } + """, + """ + namespace Foo; + + public class JSFoo + { + private static global::IFoo handler = null!; + + public JSFoo (global::IFoo handler) + { + JSFoo.handler = handler; + } + + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo.JSFoo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () + { + Bootsharp.BindingRegistry.Register(typeof(JSFoo), new ExportBinding(typeof(global::IFoo), handler => new JSFoo((global::IFoo)handler))); + } + + [JSInvokable] public static void Bar (global::System.String foo) => handler.Foo(foo)/**/; + } + """ + }, + // Can override namespace. + new object[] { + """ + [assembly:JSNamespace("Foo", "Bar")] + [assembly:JSExport(typeof(A.B.C.IFoo))] + + namespace A.B.C; + + public interface IFoo + { + void Foo (); + } + """, + """ + namespace Foo; + + public class JSFoo + { + private static global::A.B.C.IFoo handler = null!; + + public JSFoo (global::A.B.C.IFoo handler) + { + JSFoo.handler = handler; + } + + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo.JSFoo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () + { + Bootsharp.BindingRegistry.Register(typeof(JSFoo), new ExportBinding(typeof(global::A.B.C.IFoo), handler => new JSFoo((global::A.B.C.IFoo)handler))); + } + + [JSInvokable] public static void Foo () => handler.Foo(); + } + """ + } + }; +} diff --git a/src/cs/Bootsharp.Generate.Test/Emitters/FunctionTest.cs b/src/cs/Bootsharp.Generate.Test/Emitters/FunctionTest.cs new file mode 100644 index 00000000..0cfe513b --- /dev/null +++ b/src/cs/Bootsharp.Generate.Test/Emitters/FunctionTest.cs @@ -0,0 +1,229 @@ +namespace Bootsharp.Generate.Test; + +public static class FunctionTest +{ + public static IEnumerable Data { get; } = new[] { + // Can generate void binding under root namespace. + new object[] { + """ + partial class Foo + { + [JSFunction] + partial void Bar (); + } + """, + """ + partial class Foo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () { } + + partial void Bar () => Get("Global.bar")(); + } + """ + }, + // Can generate void task binding under file-scoped namespace. + new object[] { + """ + using System.Threading.Tasks; + + namespace File.Scoped; + + public static partial class Foo + { + [JSFunction] + private static partial Task BarAsync (string a, int b); + } + """, + """ + using System.Threading.Tasks; + + namespace File.Scoped; + + public static partial class Foo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "File.Scoped.Foo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () { } + + private static partial global::System.Threading.Tasks.Task BarAsync (global::System.String a, global::System.Int32 b) => Get>("File.Scoped.barAsync")(a, b); + } + """ + }, + // Can generate value task binding. + new object[] { + """ + using System.Threading.Tasks; + + namespace File.Scoped; + + public static partial class Foo + { + [JSFunction] + private static partial Task BarAsync (); + } + """, + """ + using System.Threading.Tasks; + + namespace File.Scoped; + + public static partial class Foo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "File.Scoped.Foo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () { } + + private static partial global::System.Threading.Tasks.Task BarAsync () => Get>>("File.Scoped.barAsync")(); + } + """ + }, + // Can generate under classic namespace. + new object[] { + """ + using System; + using System.Threading.Tasks; + + namespace Classic + { + partial class Foo + { + [JSFunction] + public partial DateTime GetTime (DateTime time); + [JSFunction] + public partial Task GetTimeAsync (DateTime time); + } + } + """, + """ + using System; + using System.Threading.Tasks; + + namespace Classic + { + partial class Foo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Classic.Foo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () { } + + public partial global::System.DateTime GetTime (global::System.DateTime time) => Get>("Classic.getTime")(time); + public partial global::System.Threading.Tasks.Task GetTimeAsync (global::System.DateTime time) => Get>>("Classic.getTimeAsync")(time); + } + } + """ + }, + // Can override namespace. + new object[] { + """ + [assembly:JSNamespace(@"A\.B\.(\S+)", "$1")] + + namespace A.B.C; + + public partial class Foo + { + [JSFunction] + public static partial void OnFun (bool val); + } + """, + """ + namespace A.B.C; + + public partial class Foo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "A.B.C.Foo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () { } + + public static partial void OnFun (global::System.Boolean val) => Get>("C.onFun")(val); + } + """ + }, + // Can generate void binding with serialized parameters. + new object[] { + """ + using System.Threading.Tasks; + + public record Info(string Baz); + + partial class Foo + { + [JSFunction] + public partial Info Bar (Info info1, Info info2); + [JSFunction] + public partial Task BarAsync (Info info); + [JSFunction] + public partial Task BazAsync (); + } + """, + """ + using System.Threading.Tasks; + + partial class Foo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () { } + + public partial global::Info Bar (global::Info info1, global::Info info2) => Deserialize(Get>("Global.bar")(Serialize(info1), Serialize(info2))); + public async partial global::System.Threading.Tasks.Task BarAsync (global::Info info) => Deserialize(await Get>>("Global.barAsync")(Serialize(info))); + public async partial global::System.Threading.Tasks.Task BazAsync () => Deserialize(await Get>>("Global.bazAsync")()); + } + """ + }, + // Doesn't serialize types that can be transferred as-is. + new object[] { + """ + using System; + using System.Threading.Tasks; + + partial class Foo + { + [JSFunction] + public partial Task Bar (bool a1, byte a2, char a3, short a4, long a5, int a6, float a7, double a8, nint a9, DateTime a10, DateTimeOffset a11, string a12, byte[] a13, int[] a14, double[] a15, string[] a16); + [JSFunction] + public partial Task Baz (bool? a1, byte? a2, char? a3, short? a4, long? a5, int? a6, float? a7, double? a8, nint? a9, DateTime? a10, DateTimeOffset? a11, string? a12, byte?[] a13, int?[] a14, double?[] a15, string?[] a16); + } + """, + """ + using System; + using System.Threading.Tasks; + + partial class Foo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () { } + + public partial global::System.Threading.Tasks.Task Bar (global::System.Boolean a1, global::System.Byte a2, global::System.Char a3, global::System.Int16 a4, global::System.Int64 a5, global::System.Int32 a6, global::System.Single a7, global::System.Double a8, global::System.IntPtr a9, global::System.DateTime a10, global::System.DateTimeOffset a11, global::System.String a12, global::System.Byte[] a13, global::System.Int32[] a14, global::System.Double[] a15, global::System.String[] a16) => Get>>("Global.bar")(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + public partial global::System.Threading.Tasks.Task Baz (global::System.Boolean? a1, global::System.Byte? a2, global::System.Char? a3, global::System.Int16? a4, global::System.Int64? a5, global::System.Int32? a6, global::System.Single? a7, global::System.Double? a8, global::System.IntPtr? a9, global::System.DateTime? a10, global::System.DateTimeOffset? a11, global::System.String? a12, global::System.Byte?[] a13, global::System.Int32?[] a14, global::System.Double?[] a15, global::System.String?[] a16) => Get>>("Global.baz")(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + } + """ + }, + // Special corner case when UsingDirectiveSyntax.Name is null. + new object[] { + """ + using x = (System.String, System.Boolean); + + partial class Foo + { + [JSFunction] + partial void Bar (); + } + """, + """ + using x = (System.String, System.Boolean); + + partial class Foo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () { } + + partial void Bar () => Get("Global.bar")(); + } + """ + } + }; +} diff --git a/src/cs/Bootsharp.Generate.Test/Emitters/ImportTest.cs b/src/cs/Bootsharp.Generate.Test/Emitters/ImportTest.cs new file mode 100644 index 00000000..f71931fa --- /dev/null +++ b/src/cs/Bootsharp.Generate.Test/Emitters/ImportTest.cs @@ -0,0 +1,258 @@ +namespace Bootsharp.Generate.Test; + +public static class ImportTest +{ + public static IEnumerable Data { get; } = new[] { + // Can import various APIs; also, when event parameters are set to null, event is not detected. + new object[] { + """ + using System.Threading.Tasks; + + [assembly:JSImport(typeof(IFoo), EventPattern=null, EventReplacement=null)] + + public interface IFoo + { + void NotifyFoo (string foo); + bool Bar (); + Task Nya (); + Task Far (); + } + """, + """ + namespace Foo; + + public class JSFoo : global::IFoo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo.JSFoo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () + { + Bootsharp.BindingRegistry.Register(typeof(global::IFoo), new ImportBinding(new JSFoo())); + } + + [JSFunction] public static void NotifyFoo (global::System.String foo) => Get>("Foo.notifyFoo")(foo); + [JSFunction] public static global::System.Boolean Bar () => Get>("Foo.bar")(); + [JSFunction] public static global::System.Threading.Tasks.Task Nya () => Get>("Foo.nya")(); + [JSFunction] public static global::System.Threading.Tasks.Task Far () => Get>>("Foo.far")(); + + void global::IFoo.NotifyFoo (global::System.String foo) => NotifyFoo(foo); + global::System.Boolean global::IFoo.Bar () => Bar(); + global::System.Threading.Tasks.Task global::IFoo.Nya () => Nya(); + global::System.Threading.Tasks.Task global::IFoo.Far () => Far(); + } + """ + }, + // Detects and overrides event methods with defaults. + new object[] { + """ + [assembly:JSImport(typeof(IFoo))] + + public interface IFoo + { + void NotifyFoo (string foo); + } + """, + """ + namespace Foo; + + public class JSFoo : global::IFoo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo.JSFoo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () + { + Bootsharp.BindingRegistry.Register(typeof(global::IFoo), new ImportBinding(new JSFoo())); + } + + [JSEvent] public static void OnFoo (global::System.String foo) => Get>("Foo.onFoo")(foo); + + void global::IFoo.NotifyFoo (global::System.String foo) => OnFoo(foo); + } + """ + }, + // Can detect but not override event methods. + new object[] { + """ + [assembly:JSImport(typeof(IFoo), EventPattern=@"(^Notify)(\S+)", EventReplacement=null)] + + public interface IFoo + { + void NotifyFoo (string foo); + } + """, + """ + namespace Foo; + + public class JSFoo : global::IFoo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo.JSFoo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () + { + Bootsharp.BindingRegistry.Register(typeof(global::IFoo), new ImportBinding(new JSFoo())); + } + + [JSEvent] public static void NotifyFoo (global::System.String foo) => Get>("Foo.notifyFoo")(foo); + + void global::IFoo.NotifyFoo (global::System.String foo) => NotifyFoo(foo); + } + """ + }, + // Can detect and override event methods. + new object[] { + """ + [assembly:JSImport(typeof(IFoo), EventPattern=@"(^Fire)(\S+)", EventReplacement="Handle$2")] + + public interface IFoo + { + void FireFoo (string foo); + } + """, + """ + namespace Foo; + + public class JSFoo : global::IFoo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo.JSFoo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () + { + Bootsharp.BindingRegistry.Register(typeof(global::IFoo), new ImportBinding(new JSFoo())); + } + + [JSEvent] public static void HandleFoo (global::System.String foo) => Get>("Foo.handleFoo")(foo); + + void global::IFoo.FireFoo (global::System.String foo) => HandleFoo(foo); + } + """ + }, + // Can override name and invoke. + new object[] { + """ + [assembly:JSImport(typeof(IFoo), NamePattern="Nya(.+)", NameReplacement="Nah$1", InvokePattern="(.+)", InvokeReplacement="$1/**/")] + + public interface IFoo + { + void NyaFoo (string foo); + bool Bar (); + } + """, + """ + namespace Foo; + + public class JSFoo : global::IFoo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo.JSFoo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () + { + Bootsharp.BindingRegistry.Register(typeof(global::IFoo), new ImportBinding(new JSFoo())); + } + + [JSFunction] public static void NahFoo (global::System.String foo) => Get>("Foo.nahFoo")(foo)/**/; + [JSFunction] public static global::System.Boolean Bar () => Get>("Foo.bar")()/**/; + + void global::IFoo.NyaFoo (global::System.String foo) => NahFoo(foo); + global::System.Boolean global::IFoo.Bar () => Bar(); + } + """ + }, + // When name and invoke don't have associated replacement parameter assigned, nothing is changed. + new object[] { + """ + [assembly:JSImport(typeof(IFoo), NamePattern="Foo", InvokePattern="(.+)")] + + public interface IFoo + { + void Foo (); + } + """, + """ + namespace Foo; + + public class JSFoo : global::IFoo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo.JSFoo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () + { + Bootsharp.BindingRegistry.Register(typeof(global::IFoo), new ImportBinding(new JSFoo())); + } + + [JSFunction] public static void Foo () => Get("Foo.foo")(); + + void global::IFoo.Foo () => Foo(); + } + """ + }, + // Can override namespace. + new object[] { + """ + [assembly:JSNamespace("Foo", "Bar")] + [assembly:JSImport(typeof(A.B.C.IFoo))] + + namespace A.B.C; + + public interface IFoo + { + void F (); + } + """, + """ + namespace Foo; + + public class JSFoo : global::A.B.C.IFoo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo.JSFoo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () + { + Bootsharp.BindingRegistry.Register(typeof(global::A.B.C.IFoo), new ImportBinding(new JSFoo())); + } + + [JSFunction] public static void F () => Get("Bar.f")(); + + void global::A.B.C.IFoo.F () => F(); + } + """ + }, + // Can import with serialized parameters. + new object[] { + """ + using System.Threading.Tasks; + + [assembly:JSImport(typeof(IFoo))] + + public record Info(string Baz); + + public interface IFoo + { + void NotifyFoo (Info info1, Info info2); + Info Bar (); + Task Far (Info info); + } + """, + """ + namespace Foo; + + public class JSFoo : global::IFoo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo.JSFoo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () + { + Bootsharp.BindingRegistry.Register(typeof(global::IFoo), new ImportBinding(new JSFoo())); + } + + [JSEvent] public static void OnFoo (global::Info info1, global::Info info2) => Get>("Foo.onFoo")(Serialize(info1), Serialize(info2)); + [JSFunction] public static global::Info Bar () => Deserialize(Get>("Foo.bar")()); + [JSFunction] public static async global::System.Threading.Tasks.Task Far (global::Info info) => Deserialize(await Get>>("Foo.far")(Serialize(info))); + + void global::IFoo.NotifyFoo (global::Info info1, global::Info info2) => OnFoo(info1, info2); + global::Info global::IFoo.Bar () => Bar(); + global::System.Threading.Tasks.Task global::IFoo.Far (global::Info info) => Far(info); + } + """ + } + }; +} diff --git a/src/cs/Bootsharp.Generate.Test/Emitters/InvokableTest.cs b/src/cs/Bootsharp.Generate.Test/Emitters/InvokableTest.cs new file mode 100644 index 00000000..88307717 --- /dev/null +++ b/src/cs/Bootsharp.Generate.Test/Emitters/InvokableTest.cs @@ -0,0 +1,47 @@ +namespace Bootsharp.Generate.Test; + +public static class InvokableTest +{ + public static IEnumerable Data { get; } = new[] { + // Generates dynamic dependencies registration. + new object[] { + """ + partial class Foo + { + [JSInvokable] + public static void Bar () { } + } + """, + """ + partial class Foo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Foo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () { } + } + """ + }, + // Generates dynamic dependencies registration under namespace. + new object[] { + """ + namespace Space; + + partial class Foo + { + [JSInvokable] + public static void Bar () { } + } + """, + """ + namespace Space; + + partial class Foo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Space.Foo", "GeneratorTest")] + internal static void RegisterDynamicDependencies () { } + } + """ + } + }; +} diff --git a/src/cs/Bootsharp.Generate.Test/GeneratorTest.cs b/src/cs/Bootsharp.Generate.Test/GeneratorTest.cs new file mode 100644 index 00000000..a5f92706 --- /dev/null +++ b/src/cs/Bootsharp.Generate.Test/GeneratorTest.cs @@ -0,0 +1,161 @@ +using System.Text; +using Microsoft.CodeAnalysis.Testing; +using Microsoft.CodeAnalysis.Text; + +namespace Bootsharp.Generate.Test; + +public class GeneratorTest +{ + private static readonly List<(string file, string content)> sourceCache = new(); + private readonly Verifier verifier = new(); + + [Fact] + public async Task WhenSourceIsEmptyNothingIsGenerated () + { + await Verify(""); + } + + [Fact] + public async Task NothingIsGeneratedWhenNoAttributes () + { + await Verify("partial class Foo { }"); + } + + [Fact] + public async Task WhenAttributeIsFromOtherNamespaceItsIgnored () + { + await Verify( + """ + [assembly:JSNamespace(@"Foo", "Bar")] + public class JSNamespaceAttribute : System.Attribute { public JSNamespaceAttribute (string _, string __) { } } + """); + } + + [Fact] + public async Task DoesntEmitDuplicateRegistrations () + { + verifier.TestBehaviors = TestBehaviors.SkipGeneratedSourcesCheck; + await Verify( + """ + partial class FunctionAfterInvokable + { + [JSInvokable] static void Bar () { } + [JSFunction] partial void Baz (); + } + partial class EventAfterInvokable + { + [JSInvokable] static void Bar () { } + [JSEvent] partial void Baz (); + } + partial class EventAfterFunction + { + [JSFunction] partial void Bar (); + [JSEvent] partial void Baz (); + } + """); + } + + [Fact] + public async Task DoesntAnalyzeGeneratedFiles () + { + // otherwise it'd pick files we generate in prepare build task + verifier.TestState.Sources.Add(("foo.g.cs", + """ + public static partial class Foo + { + [JSInvokable] public static void Bar () { } + [JSFunction] public static void Baz () { } + [JSEvent] public static void Nya () { } + } + """)); + await Verify(""); + } + + [Theory, MemberData(nameof(InvokableTest.Data), MemberType = typeof(InvokableTest))] + public Task PartialInvokableAreImplemented (string source, string expected) + => Verify(source, ("FooInvokable.g.cs", expected)); + + [Theory, MemberData(nameof(FunctionTest.Data), MemberType = typeof(FunctionTest))] + public Task PartialFunctionsAreImplemented (string source, string expected) + => Verify(source, ("FooFunctions.g.cs", expected)); + + [Theory, MemberData(nameof(EventTest.Data), MemberType = typeof(EventTest))] + public Task PartialEventsAreImplemented (string source, string expected) + => Verify(source, ("FooEvents.g.cs", expected)); + + [Theory, MemberData(nameof(ExportTest.Data), MemberType = typeof(ExportTest))] + public Task ExportTypesAreGenerated (string source, string expected) + => Verify(source, ("IFooExport.g.cs", expected)); + + [Theory, MemberData(nameof(ImportTest.Data), MemberType = typeof(ImportTest))] + public Task ImportTypesAreGenerated (string source, string expected) + => Verify(source, ("IFooImport.g.cs", expected)); + + private async Task Verify (string source, params (string file, string content)[] expected) + { + IncludeBootsharpSources(verifier.TestState.Sources); + verifier.TestCode = source; + for (int i = 0; i < expected.Length; i++) + { + IncludeCommonExpected(ref expected[i].content); + verifier.TestState.GeneratedSources.Add((typeof(SourceGenerator), expected[i].file, + SourceText.From(expected[i].content, Encoding.UTF8))); + } + await verifier.RunAsync(); + } + + private static void IncludeBootsharpSources (SourceFileList sources) + { + if (sourceCache.Count > 0) + { + foreach (var source in sourceCache) + sources.Add(source); + return; + } + var root = $"{Environment.CurrentDirectory}/../../../../Bootsharp.Common"; + foreach (var path in Directory.EnumerateFiles($"{root}/Attributes", "*.cs")) + sourceCache.Add((Path.GetFileName(path), File.ReadAllText(path))); + foreach (var path in Directory.EnumerateFiles($"{root}/Binding", "*.cs")) + sourceCache.Add((Path.GetFileName(path), File.ReadAllText(path))); + foreach (var path in Directory.EnumerateFiles($"{root}/Interop", "*.cs")) + sourceCache.Add((Path.GetFileName(path), File.ReadAllText(path))); + sourceCache.Add(("Error.cs", File.ReadAllText($"{root}/Error.cs"))); + sourceCache.Add(("DependencyInjection.cs", + """ + namespace Microsoft.Extensions.DependencyInjection; + public interface IServiceCollection + { + void AddSingleton(Type t, Func f); + void AddSingleton(Type t, object i); + } + public static class Extensions + { + public static object GetRequiredService(this IServiceProvider p, Type t) => default; + } + """)); + sourceCache.Add(("GlobalUsings.cs", + """ + global using System; + global using System.Collections.Generic; + global using System.IO; + global using System.Linq; + global using System.Threading.Tasks; + global using Bootsharp; + """)); + IncludeBootsharpSources(sources); + } + + private void IncludeCommonExpected (ref string expected) => expected = + $""" + #nullable enable + #pragma warning disable + using Bootsharp; + using static Bootsharp.Function; + using static Bootsharp.Serializer; + using System.Diagnostics.CodeAnalysis; + using System.Runtime.CompilerServices; + {expected} + #pragma warning restore + #nullable restore + """; +} diff --git a/src/cs/Bootsharp.Generate.Test/Verifier.cs b/src/cs/Bootsharp.Generate.Test/Verifier.cs new file mode 100644 index 00000000..0fcf9356 --- /dev/null +++ b/src/cs/Bootsharp.Generate.Test/Verifier.cs @@ -0,0 +1,16 @@ +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Testing; +using Microsoft.CodeAnalysis.Testing; + +namespace Bootsharp.Generate.Test; + +public sealed class Verifier : CSharpSourceGeneratorTest + where T : IIncrementalGenerator, new() +{ + protected override string DefaultTestProjectName { get; } = "GeneratorTest"; + + public Verifier () => ReferenceAssemblies = ReferenceAssemblies.Net.Net80; + + protected override bool IsCompilerDiagnosticIncluded (Diagnostic diagnostic, CompilerDiagnostics _) => + diagnostic.Severity == DiagnosticSeverity.Error; +} diff --git a/DotNet/Generator/Generator.csproj b/src/cs/Bootsharp.Generate/Bootsharp.Generate.csproj similarity index 50% rename from DotNet/Generator/Generator.csproj rename to src/cs/Bootsharp.Generate/Bootsharp.Generate.csproj index 9145fd5d..da86ad92 100644 --- a/DotNet/Generator/Generator.csproj +++ b/src/cs/Bootsharp.Generate/Bootsharp.Generate.csproj @@ -2,11 +2,14 @@ netstandard2.0 - 8 + preview + enable + true + false - + diff --git a/src/cs/Bootsharp.Generate/Common.cs b/src/cs/Bootsharp.Generate/Common.cs new file mode 100644 index 00000000..9e2b2bb4 --- /dev/null +++ b/src/cs/Bootsharp.Generate/Common.cs @@ -0,0 +1,143 @@ +global using static Bootsharp.Generate.Common; +using System.Collections.Immutable; +using System.Text.RegularExpressions; +using Microsoft.CodeAnalysis; + +namespace Bootsharp.Generate; + +internal static class Common +{ + public const string InvokableAttribute = "JSInvokable"; + public const string FunctionAttribute = "JSFunction"; + public const string EventAttribute = "JSEvent"; + public const string ExportAttribute = "JSExport"; + public const string ImportAttribute = "JSImport"; + public const string NamespaceAttribute = "JSNamespace"; + + public const string NamePatternArg = "NamePattern"; + public const string NameReplacementArg = "NameReplacement"; + public const string InvokePatternArg = "InvokePattern"; + public const string InvokeReplacementArg = "InvokeReplacement"; + public const string EventPatternArg = "EventPattern"; + public const string EventPatternReplacementArg = "EventReplacement"; + public const string DefaultEventPattern = @"(^Notify)(\S+)"; + public const string DefaultEventReplacement = "On$2"; + + public static string EmitCommon (string source) + => $""" + #nullable enable + #pragma warning disable + using Bootsharp; + using static Bootsharp.Function; + using static Bootsharp.Serializer; + using System.Diagnostics.CodeAnalysis; + using System.Runtime.CompilerServices; + {source} + #pragma warning restore + #nullable restore + """; + + public static string BuildBindingType (ITypeSymbol type) + { + return $"JS{type.Name.Substring(1)}"; + } + + public static string BuildBindingNamespace (ITypeSymbol type) + { + return type.Name.Substring(1); + } + + public static string BuildSyntax (ITypeSymbol type) + { + if (type.SpecialType == SpecialType.System_Void) return "void"; + if (type is IArrayTypeSymbol arrayType) return $"{BuildSyntax(arrayType.ElementType)}[]"; + var nullable = type.NullableAnnotation == NullableAnnotation.Annotated ? "?" : ""; + if (IsGeneric(type, out var args)) return BuildGeneric(type, args) + nullable; + return $"global::{ResolveTypeName(type)}{nullable}"; + + static string BuildGeneric (ITypeSymbol type, ImmutableArray args) + { + if (type.OriginalDefinition.SpecialType == SpecialType.System_Nullable_T) return BuildSyntax(args[0]); + return $"global::{ResolveTypeName(type)}<{string.Join(", ", args.Select(BuildSyntax))}>"; + } + + static string ResolveTypeName (ITypeSymbol type) + { + if (type.ContainingNamespace.IsGlobalNamespace) return type.Name; + return string.Join(".", type.ContainingNamespace.ConstituentNamespaces) + "." + type.Name; + } + } + + public static bool IsGeneric (ITypeSymbol type, out ImmutableArray args) + { + args = type is INamedTypeSymbol { IsGenericType: true } named ? named.TypeArguments : default; + return args != default; + } + + public static string ConvertNamespace (string space, IAssemblySymbol assembly) + { + foreach (var attribute in assembly.GetAttributes().Where(IsNamespaceAttribute)) + space = Convert(space, attribute); + return space; + + static string Convert (string space, AttributeData attribute) + { + var pattern = (string)attribute.ConstructorArguments[0].Value; + var replacement = (string)attribute.ConstructorArguments[1].Value; + return Regex.Replace(space, pattern, replacement); + } + } + + public static string ConvertMethodName (string name, AttributeData attribute) + { + if (IsEvent(name, attribute)) return ConvertEventName(name, attribute); + var pattern = attribute.NamedArguments.FirstOrDefault(a => a.Key == NamePatternArg).Value.Value as string; + var replacement = attribute.NamedArguments.FirstOrDefault(a => a.Key == NameReplacementArg).Value.Value as string; + if (string.IsNullOrEmpty(pattern) || string.IsNullOrEmpty(replacement)) return name; + return Regex.Replace(name, pattern, replacement); + } + + public static bool IsEvent (string name, AttributeData attribute) + { + var pattern = default(string); + if (!attribute.NamedArguments.Any(a => a.Key == EventPatternArg)) pattern = DefaultEventPattern; + else pattern = attribute.NamedArguments.First(a => a.Key == EventPatternArg).Value.Value as string; + return !string.IsNullOrEmpty(pattern) && Regex.IsMatch(name, pattern); + } + + public static string ConvertEventName (string name, AttributeData attribute) + { + var pattern = default(string); + if (!attribute.NamedArguments.Any(a => a.Key == EventPatternArg)) pattern = DefaultEventPattern; + else pattern = attribute.NamedArguments.First(a => a.Key == EventPatternArg).Value.Value as string; + + var replacement = default(string); + if (!attribute.NamedArguments.Any(a => a.Key == EventPatternReplacementArg)) replacement = DefaultEventReplacement; + else replacement = attribute.NamedArguments.First(a => a.Key == EventPatternReplacementArg).Value.Value as string; + + if (string.IsNullOrEmpty(replacement)) return name; + return Regex.Replace(name, pattern, replacement); + } + + public static string ConvertMethodInvocation (string body, AttributeData attribute) + { + var pattern = attribute.NamedArguments.FirstOrDefault(a => a.Key == InvokePatternArg).Value.Value as string; + var replacement = attribute.NamedArguments.FirstOrDefault(a => a.Key == InvokeReplacementArg).Value.Value as string; + if (string.IsNullOrEmpty(pattern) || string.IsNullOrEmpty(replacement)) return body; + return Regex.Replace(body, pattern, replacement); + } + + public static bool IsExportAttribute (AttributeData attribute) => IsJSAttribute(attribute, ExportAttribute); + public static bool IsImportAttribute (AttributeData attribute) => IsJSAttribute(attribute, ImportAttribute); + public static bool IsNamespaceAttribute (AttributeData attribute) => IsJSAttribute(attribute, NamespaceAttribute); + + public static bool IsJSAttribute (AttributeData attribute, string name) => + attribute.AttributeClass!.ContainingNamespace.Name == "Bootsharp" && + attribute.AttributeClass.Name.StartsWith(name, StringComparison.Ordinal); + + public static string ToFirstLower (string value) + { + if (value.Length == 1) char.ToLowerInvariant(value[0]); + return char.ToLowerInvariant(value[0]) + value.Substring(1); + } +} diff --git a/src/cs/Bootsharp.Generate/Emitters/BindingEmitter.cs b/src/cs/Bootsharp.Generate/Emitters/BindingEmitter.cs new file mode 100644 index 00000000..98f22ca2 --- /dev/null +++ b/src/cs/Bootsharp.Generate/Emitters/BindingEmitter.cs @@ -0,0 +1,102 @@ +using Microsoft.CodeAnalysis; + +namespace Bootsharp.Generate; + +internal class BindingEmitter (IMethodSymbol method, string space, string name) +{ + private bool @void, wait, shouldSerializeReturnType; + private ITypeSymbol returnType, taskResult; + + public void Emit (out string signature, out string body) + { + @void = method.ReturnsVoid; + returnType = method.ReturnType; + IsTaskWithResult(method.ReturnType, out taskResult); + shouldSerializeReturnType = ShouldSerialize(returnType); + wait = taskResult != null && shouldSerializeReturnType; + signature = EmitSignature(); + body = EmitBody(); + } + + private string EmitSignature () + { + var args = method.Parameters.Select(p => $"{BuildSyntax(p.Type)} {p.Name}"); + var sig = $"{BuildSyntax(method.ReturnType)} {name} ({string.Join(", ", args)})"; + if (wait) return sig = "async " + sig; + return sig; + } + + private string EmitBody () + { + var endpoint = $"{space}.{ToFirstLower(name)}"; + var delegateType = GetDelegateType(); + var args = GetArgs(); + var body = $"""Get<{delegateType}>("{endpoint}")({args})"""; + if (!shouldSerializeReturnType) return body; + var serialized = BuildSyntax(taskResult ?? returnType); + return $"Deserialize<{serialized}>({(wait ? "await " : "")}{body})"; + } + + private string GetDelegateType () + { + if (@void && method.Parameters.Length == 0) return "global::System.Action"; + var basename = @void ? "global::System.Action" : "global::System.Func"; + var args = method.Parameters.Select(GetDelegateArgType); + if (!@void) args = args.Append(GetDelegateReturnType()); + return $"{basename}<{string.Join(", ", args)}>"; + } + + private string GetDelegateArgType (IParameterSymbol param) => + ShouldSerialize(param.Type) ? "global::System.String" : BuildSyntax(param.Type); + + private string GetDelegateReturnType () => shouldSerializeReturnType + ? (taskResult != null ? "global::System.Threading.Tasks.Task" : "global::System.String") + : BuildSyntax(returnType); + + private string GetArgs () + { + if (method.Parameters.Length == 0) return ""; + var ids = method.Parameters.Select(GetArg); + return string.Join(", ", ids); + } + + private string GetArg (IParameterSymbol param) + { + return ShouldSerialize(param.Type) ? $"Serialize({param.Name})" : param.Name; + } + + // https://learn.microsoft.com/en-us/aspnet/core/blazor/javascript-interoperability/import-export-interop + private static bool ShouldSerialize (ITypeSymbol type) + { + if (IsTaskWithResult(type, out var taskResult)) type = taskResult; + var array = type is IArrayTypeSymbol; + if (array) type = ((IArrayTypeSymbol)type).ElementType; + if (IsNullable(type, out var nullable)) type = nullable.TypeArguments.FirstOrDefault(); + if (array) return taskResult != null || !IsArrayTransferable(type); + return !IsStandaloneTransferable(type); + + static bool IsNullable (ITypeSymbol type, out INamedTypeSymbol nullable) + { + nullable = type as INamedTypeSymbol; + return $"{type.ContainingNamespace}.{type.MetadataName}" == typeof(Nullable<>).FullName; + } + + static bool IsStandaloneTransferable (ITypeSymbol type) => + Is(type) || Is(type) || Is(type) || Is(type) || Is(type) || + Is(type) || Is(type) || Is(type) || Is(type) || Is(type) || + Is(type) || Is(type) || Is(type) || Is(type) || + type.SpecialType == SpecialType.System_Void; + + static bool IsArrayTransferable (ITypeSymbol type) => + Is(type) || Is(type) || Is(type) || Is(type); + + static bool Is (ITypeSymbol type) => + $"{type.ContainingNamespace}.{type.MetadataName}" == typeof(T).FullName; + } + + private static bool IsTaskWithResult (ITypeSymbol type, out ITypeSymbol result) + { + return (result = $"{type.ContainingNamespace}.{type.MetadataName}" == typeof(Task<>).FullName + ? ((INamedTypeSymbol)type).TypeArguments[0] : null) != null; + } +} diff --git a/src/cs/Bootsharp.Generate/Emitters/ExportType.cs b/src/cs/Bootsharp.Generate/Emitters/ExportType.cs new file mode 100644 index 00000000..8b2daadd --- /dev/null +++ b/src/cs/Bootsharp.Generate/Emitters/ExportType.cs @@ -0,0 +1,65 @@ +using Microsoft.CodeAnalysis; + +namespace Bootsharp.Generate; + +internal sealed class ExportType (Compilation compilation, ITypeSymbol type, AttributeData attribute) +{ + public string Name { get; } = type.Name; + + public static IEnumerable Resolve (Compilation compilation) => + compilation.Assembly.GetAttributes().FirstOrDefault(IsExportAttribute) is { } attribute + ? attribute.ConstructorArguments[0].Values + .Select(v => v.Value).OfType() + .Where(t => t.TypeKind == TypeKind.Interface) + .Select(t => new ExportType(compilation, t, attribute)) + : Array.Empty(); + + public string EmitSource () + { + var specType = BuildSyntax(type); + var implType = BuildBindingType(type); + var space = BuildBindingNamespace(type); + return EmitCommon + ($$""" + namespace {{space}}; + + public class {{implType}} + { + private static {{specType}} handler = null!; + + public {{implType}} ({{specType}} handler) + { + {{implType}}.handler = handler; + } + + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "{{space}}.{{implType}}", "{{compilation.Assembly.Name}}")] + internal static void RegisterDynamicDependencies () + { + Bootsharp.BindingRegistry.Register(typeof({{implType}}), new ExportBinding(typeof({{specType}}), handler => new {{implType}}(({{specType}})handler))); + } + + {{string.Join("\n ", type.GetMembers().OfType().Select(EmitMethod))}} + } + """); + + string EmitMethod (IMethodSymbol method) + { + return $"[{InvokableAttribute}] public static {EmitSignature()} => {EmitBody()};"; + + string EmitSignature () + { + var methodName = ConvertMethodName(method.Name, attribute); + var args = method.Parameters.Select(p => $"{BuildSyntax(p.Type)} {p.Name}"); + return $"{BuildSyntax(method.ReturnType)} {methodName} ({string.Join(", ", args)})"; + } + + string EmitBody () + { + var args = method.Parameters.Select(p => p.Name); + var body = $"handler.{method.Name}({string.Join(", ", args)})"; + return ConvertMethodInvocation(body, attribute); + } + } + } +} diff --git a/src/cs/Bootsharp.Generate/Emitters/ImportType.cs b/src/cs/Bootsharp.Generate/Emitters/ImportType.cs new file mode 100644 index 00000000..9edfd7f2 --- /dev/null +++ b/src/cs/Bootsharp.Generate/Emitters/ImportType.cs @@ -0,0 +1,63 @@ +using Microsoft.CodeAnalysis; + +namespace Bootsharp.Generate; + +internal sealed class ImportType (Compilation compilation, ITypeSymbol type, AttributeData attribute) +{ + public string Name { get; } = type.Name; + + private string specType; + + public static IEnumerable Resolve (Compilation compilation) => + compilation.Assembly.GetAttributes().FirstOrDefault(IsImportAttribute) is { } attribute + ? attribute.ConstructorArguments[0].Values + .Select(v => v.Value).OfType() + .Where(t => t.TypeKind == TypeKind.Interface) + .Select(t => new ImportType(compilation, t, attribute)) + : Array.Empty(); + + public string EmitSource () + { + specType = BuildSyntax(type); + var implType = BuildBindingType(type); + var methods = type.GetMembers().OfType().ToArray(); + var space = BuildBindingNamespace(type); + return EmitCommon + ($$""" + namespace {{space}}; + + public class {{implType}} : {{specType}} + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "{{space}}.{{implType}}", "{{compilation.Assembly.Name}}")] + internal static void RegisterDynamicDependencies () + { + Bootsharp.BindingRegistry.Register(typeof({{specType}}), new ImportBinding(new {{implType}}())); + } + + {{string.Join("\n ", methods.Select(EmitBinding))}} + + {{string.Join("\n ", methods.Select(EmitSpec))}} + } + """); + } + + private string EmitBinding (IMethodSymbol method) + { + var @event = IsEvent(method.Name, attribute); + var space = ConvertNamespace(BuildBindingNamespace(method.ContainingType), compilation.Assembly); + var name = ConvertMethodName(method.Name, attribute); + new BindingEmitter(method, space, name).Emit(out var sig, out var body); + var attr = @event ? $"[{EventAttribute}]" : $"[{FunctionAttribute}]"; + return $"{attr} public static {sig} => {ConvertMethodInvocation(body, attribute)};"; + } + + private string EmitSpec (IMethodSymbol method) + { + var args = method.Parameters.Select(p => $"{BuildSyntax(p.Type)} {p.Name}"); + var sig = $"{BuildSyntax(method.ReturnType)} {specType}.{method.Name} ({string.Join(", ", args)})"; + var methodName = ConvertMethodName(method.Name, attribute); + var @params = method.Parameters.Select(p => p.Name); + return $"{sig} => {methodName}({string.Join(", ", @params)});"; + } +} diff --git a/src/cs/Bootsharp.Generate/Emitters/PartialClass.cs b/src/cs/Bootsharp.Generate/Emitters/PartialClass.cs new file mode 100644 index 00000000..3c07a1cb --- /dev/null +++ b/src/cs/Bootsharp.Generate/Emitters/PartialClass.cs @@ -0,0 +1,72 @@ +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Syntax; + +namespace Bootsharp.Generate; + +internal sealed class PartialClass ( + Compilation compilation, + ClassDeclarationSyntax syntax, + IReadOnlyList methods, + bool emitDependenciesRegistration +) +{ + public string Name { get; } = syntax.Identifier.ToString(); + + public string EmitSource () => EmitCommon( + EmitUsings() + + WrapNamespace( + EmitHeader() + + EmitDynamicDependenciesRegistration() + + EmitMethods() + + EmitFooter() + ) + ); + + private string EmitUsings () + { + var imports = syntax.SyntaxTree.GetRoot().DescendantNodesAndSelf() + .OfType().Where(u => u.Name?.ToString() != "Bootsharp"); + var result = string.Join("\n", imports); + return string.IsNullOrEmpty(result) ? "" : result + "\n\n"; + } + + private string EmitHeader () => $"{syntax.Modifiers} class {syntax.Identifier}\n{{"; + + private string EmitDynamicDependenciesRegistration () + { + if (!emitDependenciesRegistration) return ""; + var space = syntax.Parent is BaseNamespaceDeclarationSyntax decl ? $"{decl.Name}." : ""; + var fullClassName = space + syntax.Identifier; + var assemblyName = compilation.Assembly.Name; + return $$""" + + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "{{fullClassName}}", "{{assemblyName}}")] + internal static void RegisterDynamicDependencies () { } + """; + } + + private string EmitMethods () + { + if (methods.Count == 0) return ""; + var sources = methods.Select(m => " " + m.EmitSource(compilation)); + return "\n\n" + string.Join("\n", sources); + } + + private string EmitFooter () => "\n}"; + + private string WrapNamespace (string source) + { + if (syntax.Parent is NamespaceDeclarationSyntax space) + return $$""" + namespace {{space.Name}} + { + {{string.Join("\n", source.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None) + .Select((s, i) => i > 0 && s.Length > 0 ? " " + s : s))}} + } + """; + if (syntax.Parent is FileScopedNamespaceDeclarationSyntax fileSpace) + return $"namespace {fileSpace.Name};\n\n{source}"; + return source; + } +} diff --git a/src/cs/Bootsharp.Generate/Emitters/PartialMethod.cs b/src/cs/Bootsharp.Generate/Emitters/PartialMethod.cs new file mode 100644 index 00000000..8a88cabd --- /dev/null +++ b/src/cs/Bootsharp.Generate/Emitters/PartialMethod.cs @@ -0,0 +1,23 @@ +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; + +namespace Bootsharp.Generate; + +internal sealed class PartialMethod (MethodDeclarationSyntax syntax) +{ + public string EmitSource (Compilation compilation) + { + var symbol = compilation.GetSemanticModel(syntax.SyntaxTree).GetDeclaredSymbol(syntax)!; + var space = GetNamespace(symbol, compilation); + new BindingEmitter(symbol, space, symbol.Name).Emit(out var sig, out var body); + return $"{syntax.Modifiers} {sig} => {body};".Replace("partial async", "async partial"); + } + + private string GetNamespace (IMethodSymbol symbol, Compilation compilation) + { + var space = symbol.ContainingNamespace.IsGlobalNamespace ? "Global" + : string.Join(".", symbol.ContainingNamespace.ConstituentNamespaces); + return ConvertNamespace(space, symbol.ContainingAssembly); + } +} diff --git a/src/cs/Bootsharp.Generate/SourceGenerator.cs b/src/cs/Bootsharp.Generate/SourceGenerator.cs new file mode 100644 index 00000000..ef7d3a65 --- /dev/null +++ b/src/cs/Bootsharp.Generate/SourceGenerator.cs @@ -0,0 +1,45 @@ +using Microsoft.CodeAnalysis; + +namespace Bootsharp.Generate; + +[Generator(LanguageNames.CSharp)] +public sealed class SourceGenerator : IIncrementalGenerator +{ + public void Initialize (IncrementalGeneratorInitializationContext context) => context + .RegisterSourceOutput(context.CompilationProvider, Compile); + + private static void Compile (SourceProductionContext context, Compilation compilation) + { + CompileGlobal(context, compilation); + CompilePartial(context, compilation); + } + + private static void CompileGlobal (SourceProductionContext context, Compilation compilation) + { + foreach (var type in ExportType.Resolve(compilation)) + context.AddSource($"{type.Name}Export.g", type.EmitSource()); + foreach (var type in ImportType.Resolve(compilation)) + context.AddSource($"{type.Name}Import.g", type.EmitSource()); + } + + private static void CompilePartial (SourceProductionContext context, Compilation compilation) + { + var receiver = VisitNodes(compilation); + foreach (var @class in receiver.InvokableClasses) + context.AddSource($"{@class.Name}Invokable.g", @class.EmitSource()); + foreach (var @class in receiver.FunctionClasses) + context.AddSource($"{@class.Name}Functions.g", @class.EmitSource()); + foreach (var @class in receiver.EventClasses) + context.AddSource($"{@class.Name}Events.g", @class.EmitSource()); + } + + private static SyntaxReceiver VisitNodes (Compilation compilation) + { + var receiver = new SyntaxReceiver(); + foreach (var tree in compilation.SyntaxTrees) + if (!tree.FilePath.EndsWith(".g.cs")) + foreach (var node in tree.GetRoot().DescendantNodesAndSelf()) + receiver.VisitNode(node, compilation); + return receiver; + } +} diff --git a/src/cs/Bootsharp.Generate/SyntaxReceiver.cs b/src/cs/Bootsharp.Generate/SyntaxReceiver.cs new file mode 100644 index 00000000..2b78a009 --- /dev/null +++ b/src/cs/Bootsharp.Generate/SyntaxReceiver.cs @@ -0,0 +1,42 @@ +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Syntax; + +namespace Bootsharp.Generate; + +internal sealed class SyntaxReceiver +{ + public List InvokableClasses { get; } = new(); + public List FunctionClasses { get; } = new(); + public List EventClasses { get; } = new(); + + public void VisitNode (SyntaxNode node, Compilation compilation) + { + if (node is ClassDeclarationSyntax classSyntax) + VisitClass(classSyntax, compilation); + } + + private void VisitClass (ClassDeclarationSyntax syntax, Compilation compilation) + { + var invokable = GetMethodsWithAttribute(syntax, InvokableAttribute); + if (invokable.Count > 0) InvokableClasses.Add(new(compilation, syntax, Array.Empty(), true)); + var functions = GetMethodsWithAttribute(syntax, FunctionAttribute); + if (functions.Count > 0) FunctionClasses.Add(new(compilation, syntax, functions, invokable.Count == 0)); + var events = GetMethodsWithAttribute(syntax, EventAttribute); + if (events.Count > 0) EventClasses.Add(new(compilation, syntax, events, invokable.Count + functions.Count == 0)); + } + + private List GetMethodsWithAttribute (ClassDeclarationSyntax syntax, string attribute) + { + return syntax.Members + .OfType() + .Where(s => HasAttribute(s, attribute)) + .Select(m => new PartialMethod(m)).ToList(); + } + + private bool HasAttribute (MethodDeclarationSyntax syntax, string attributeName) + { + return syntax.AttributeLists + .SelectMany(l => l.Attributes) + .Any(a => a.ToString().Contains(attributeName)); + } +} diff --git a/DotNet/Generator.Test/Generator.Test.csproj b/src/cs/Bootsharp.Inject.Test/Bootsharp.Inject.Test.csproj similarity index 62% rename from DotNet/Generator.Test/Generator.Test.csproj rename to src/cs/Bootsharp.Inject.Test/Bootsharp.Inject.Test.csproj index 2a6b7c8c..a9a99718 100644 --- a/DotNet/Generator.Test/Generator.Test.csproj +++ b/src/cs/Bootsharp.Inject.Test/Bootsharp.Inject.Test.csproj @@ -1,31 +1,36 @@ - net6.0 + net8.0 + enable false + true - - - - - + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/cs/Bootsharp.Inject.Test/ExtensionsTest.cs b/src/cs/Bootsharp.Inject.Test/ExtensionsTest.cs new file mode 100644 index 00000000..4fee53df --- /dev/null +++ b/src/cs/Bootsharp.Inject.Test/ExtensionsTest.cs @@ -0,0 +1,43 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace Bootsharp.Inject.Test; + +public class TypesTest +{ + [Fact] + public void CanInjectGeneratedTypes () + { + AddAutogenerated(); + var provider = new ServiceCollection() + .AddBootsharp() + .BuildServiceProvider(); + Assert.IsType(provider.GetRequiredService()); + } + + [Fact] + public void CanInitializeGeneratedTypes () + { + AddAutogenerated(); + new ServiceCollection() + .AddSingleton() + .AddBootsharp() + .BuildServiceProvider() + .RunBootsharp(); + Assert.IsType(JSBackend.Handler); + } + + [Fact] + public void WhenMissingRequiredDependencyErrorIsThrown () + { + AddAutogenerated(); + Assert.Contains("Failed to run Bootsharp: 'Bootsharp.Inject.Test.IBackend' dependency is not registered.", + Assert.Throws(() => new ServiceCollection().AddBootsharp().BuildServiceProvider().RunBootsharp()).Message); + } + + // emulates auto-generated code behaviour on module initialization + private static void AddAutogenerated () + { + BindingRegistry.Register(typeof(JSBackend), new ExportBinding(typeof(IBackend), h => new JSBackend((IBackend)h))); + BindingRegistry.Register(typeof(IFrontend), new ImportBinding(new JSFrontend())); + } +} diff --git a/src/cs/Bootsharp.Inject.Test/Mocks.cs b/src/cs/Bootsharp.Inject.Test/Mocks.cs new file mode 100644 index 00000000..940e712e --- /dev/null +++ b/src/cs/Bootsharp.Inject.Test/Mocks.cs @@ -0,0 +1,17 @@ +namespace Bootsharp.Inject.Test; + +public interface IBackend; +public interface IFrontend; +public class Backend : IBackend; +public class Frontend : IFrontend; +public class JSFrontend : IFrontend; + +public class JSBackend +{ + public static IBackend Handler; + + public JSBackend (IBackend handler) + { + Handler = handler; + } +} diff --git a/src/cs/Bootsharp.Inject/Bootsharp.Inject.csproj b/src/cs/Bootsharp.Inject/Bootsharp.Inject.csproj new file mode 100644 index 00000000..8af681c1 --- /dev/null +++ b/src/cs/Bootsharp.Inject/Bootsharp.Inject.csproj @@ -0,0 +1,19 @@ + + + + net8.0 + enable + enable + Bootsharp.Inject + Bootsharp.Inject + Dependency injection extensions for Bootsharp. + true + CS1591 + + + + + + + + diff --git a/src/cs/Bootsharp.Inject/Extensions.cs b/src/cs/Bootsharp.Inject/Extensions.cs new file mode 100644 index 00000000..ae0c607c --- /dev/null +++ b/src/cs/Bootsharp.Inject/Extensions.cs @@ -0,0 +1,35 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace Bootsharp.Inject; + +/// +/// Extension methods for dependency injection. +/// +public static class Extensions +{ + /// + /// Registers JavaScript bindings generated by Bootsharp. + /// + public static IServiceCollection AddBootsharp (this IServiceCollection services) + { + foreach (var (impl, binding) in BindingRegistry.Exports) + services.AddSingleton(impl, provider => { + var handler = provider.GetService(binding.Api); + if (handler is null) throw new Error($"Failed to run Bootsharp: '{binding.Api}' dependency is not registered."); + return binding.Factory(provider.GetRequiredService(binding.Api)); + }); + foreach (var (api, binding) in BindingRegistry.Imports) + services.AddSingleton(api, binding.Implementation); + return services; + } + + /// + /// Initializes exported JavaScript bindings generated by Bootsharp. + /// + public static IServiceProvider RunBootsharp (this IServiceProvider provider) + { + foreach (var (impl, _) in BindingRegistry.Exports) + provider.GetRequiredService(impl); + return provider; + } +} diff --git a/src/cs/Bootsharp.Publish.Test/Bootsharp.Publish.Test.csproj b/src/cs/Bootsharp.Publish.Test/Bootsharp.Publish.Test.csproj new file mode 100644 index 00000000..56251ff4 --- /dev/null +++ b/src/cs/Bootsharp.Publish.Test/Bootsharp.Publish.Test.csproj @@ -0,0 +1,38 @@ + + + + net8.0 + enable + false + + + + + + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + diff --git a/src/cs/Bootsharp.Publish.Test/Build/BindingTest.cs b/src/cs/Bootsharp.Publish.Test/Build/BindingTest.cs new file mode 100644 index 00000000..9f8b36df --- /dev/null +++ b/src/cs/Bootsharp.Publish.Test/Build/BindingTest.cs @@ -0,0 +1,310 @@ +namespace Bootsharp.Publish.Test; + +public class BindingTest : BuildTest +{ + protected override string TestedContent => GeneratedBindings; + + [Fact] + public void WhenNoBindingsNothingIsGenerated () + { + Execute(); + Assert.Empty(TestedContent); + } + + [Fact] + public void InteropFunctionsImported () + { + AddAssembly(With("Foo", "[JSInvokable] public static void Bar () { }")); + Execute(); + Contains( + """ + import { exports } from "./exports"; + import { Event } from "./event"; + function getExports () { if (exports == null) throw Error("Boot the runtime before invoking C# APIs."); return exports; } + function serialize(obj) { return JSON.stringify(obj); } + function deserialize(json) { const result = JSON.parse(json); if (result === null) return undefined; return result; } + """); + } + + [Fact] + public void BindingForInvokableMethodIsGenerated () + { + AddAssembly(With("Foo.Bar", "[JSInvokable] public static void Nya () { }")); + Execute(); + Contains( + """ + export const Foo = { + Bar: { + nya: () => getExports().Foo_Bar_MockClass.Nya() + } + }; + """); + } + + [Fact] + public void BindingForFunctionMethodIsGenerated () + { + AddAssembly(With("Foo.Bar", "[JSFunction] public static void Fun () { }")); + Execute(); + Contains( + """ + export const Foo = { + Bar: { + get fun() { return this.funHandler; }, + set fun(handler) { this.funHandler = handler; this.funSerializedHandler = () => this.funHandler(); }, + get funSerialized() { if (typeof this.funHandler !== "function") throw Error("Failed to invoke 'Foo.Bar.fun' from C#. Make sure to assign function in JavaScript."); return this.funSerializedHandler; } + } + }; + """); + } + + [Fact] + public void BindingForEventMethodIsGenerated () + { + AddAssembly( + With("[JSEvent] public static void OnFoo () { }"), + With("[JSEvent] public static void OnBar (string a) { }"), + With("[JSEvent] public static void OnBaz (int a, bool b) { }")); + Execute(); + Contains( + """ + export const Global = { + onFoo: new Event(), + onFooSerialized: () => Global.onFoo.broadcast(), + onBar: new Event(), + onBarSerialized: (a) => Global.onBar.broadcast(a), + onBaz: new Event(), + onBazSerialized: (a, b) => Global.onBaz.broadcast(a, b) + }; + """); + } + + [Fact] + public void LibraryExportsNamespaceObject () + { + AddAssembly(With("Foo", "[JSInvokable] public static void Bar () { }")); + Execute(); + Contains( + """ + export const Foo = { + bar: () => getExports().Foo_MockClass.Bar() + }; + """); + } + + [Fact] + public void WhenSpaceContainDotsObjectCreatedForEachPart () + { + AddAssembly(With("Foo.Bar.Nya", "[JSInvokable] public static void Bar () { }")); + Execute(); + Contains( + """ + export const Foo = { + Bar: { + Nya: { + bar: () => getExports().Foo_Bar_Nya_MockClass.Bar() + } + } + }; + """); + } + + [Fact] + public void WhenMultipleSpacesEachGetItsOwnObject () + { + AddAssembly( + With("Foo", "[JSInvokable] public static void Foo () { }"), + With("Bar.Nya", "[JSFunction] public static void Fun () { }")); + Execute(); + Contains( + """ + export const Bar = { + Nya: { + get fun() { return this.funHandler; }, + set fun(handler) { this.funHandler = handler; this.funSerializedHandler = () => this.funHandler(); }, + get funSerialized() { if (typeof this.funHandler !== "function") throw Error("Failed to invoke 'Bar.Nya.fun' from C#. Make sure to assign function in JavaScript."); return this.funSerializedHandler; } + } + }; + export const Foo = { + foo: () => getExports().Foo_MockClass.Foo() + }; + """); + } + + [Fact] + public void WhenMultipleAssembliesWithEqualSpaceObjectDeclaredOnlyOnce () + { + AddAssembly(With("Foo", "[JSInvokable] public static void Bar () { }")); + AddAssembly(With("Foo", "[JSFunction] public static void Fun () { }")); + Execute(); + Assert.Single(Matches("export const Foo")); + Contains("bar: () => getExports().Foo_MockClass.Bar()"); + Contains( + """ + get fun() { return this.funHandler; }, + set fun(handler) { this.funHandler = handler; this.funSerializedHandler = () => this.funHandler(); }, + get funSerialized() { if (typeof this.funHandler !== "function") throw Error("Failed to invoke 'Foo.fun' from C#. Make sure to assign function in JavaScript."); return this.funSerializedHandler; } + """); + } + + [Fact] + public void DifferentSpacesWithSameRootAssignedUnderSameObject () + { + AddAssembly( + With("Nya.Foo", "[JSInvokable] public static void Foo () { }"), + With("Nya.Bar", "[JSFunction] public static void Fun () { }")); + Execute(); + Contains( + """ + export const Nya = { + Bar: { + get fun() { return this.funHandler; }, + set fun(handler) { this.funHandler = handler; this.funSerializedHandler = () => this.funHandler(); }, + get funSerialized() { if (typeof this.funHandler !== "function") throw Error("Failed to invoke 'Nya.Bar.fun' from C#. Make sure to assign function in JavaScript."); return this.funSerializedHandler; } + }, + Foo: { + foo: () => getExports().Nya_Foo_MockClass.Foo() + } + }; + """); + } + + [Fact] + public void BindingsFromMultipleSpacesAssignedToRespectiveObjects () + { + AddAssembly(With("Foo", "[JSInvokable] public static int Foo () => 0;")); + AddAssembly(With("Bar.Nya", "[JSFunction] public static void Fun () { }")); + Execute(); + Contains( + """ + export const Bar = { + Nya: { + get fun() { return this.funHandler; }, + set fun(handler) { this.funHandler = handler; this.funSerializedHandler = () => this.funHandler(); }, + get funSerialized() { if (typeof this.funHandler !== "function") throw Error("Failed to invoke 'Bar.Nya.fun' from C#. Make sure to assign function in JavaScript."); return this.funSerializedHandler; } + } + }; + export const Foo = { + foo: () => getExports().Foo_MockClass.Foo() + }; + """); + } + + [Fact] + public void WhenNoSpaceBindingsAreAssignedToGlobalObject () + { + AddAssembly( + With("[JSInvokable] public static Task Nya () => Task.FromResult(0);"), + With("[JSFunction] public static void Fun () { }")); + Execute(); + Contains( + """ + export const Global = { + nya: () => getExports().MockClass.Nya(), + get fun() { return this.funHandler; }, + set fun(handler) { this.funHandler = handler; this.funSerializedHandler = () => this.funHandler(); }, + get funSerialized() { if (typeof this.funHandler !== "function") throw Error("Failed to invoke 'Global.fun' from C#. Make sure to assign function in JavaScript."); return this.funSerializedHandler; } + }; + """); + } + + [Fact] + public void NamespaceAttributeOverrideObjectNames () + { + AddAssembly( + With("""[assembly:JSNamespace(@"Foo\.Bar\.(\S+)", "$1")]""", false), + With("Foo.Bar.Nya", "[JSInvokable] public static Task GetNya () => Task.CompletedTask;"), + With("Foo.Bar.Fun", "[JSFunction] public static void OnFun () { }")); + Execute(); + Contains( + """ + export const Fun = { + get onFun() { return this.onFunHandler; }, + set onFun(handler) { this.onFunHandler = handler; this.onFunSerializedHandler = () => this.onFunHandler(); }, + get onFunSerialized() { if (typeof this.onFunHandler !== "function") throw Error("Failed to invoke 'Fun.onFun' from C#. Make sure to assign function in JavaScript."); return this.onFunSerializedHandler; } + }; + export const Nya = { + getNya: () => getExports().Foo_Bar_Nya_MockClass.GetNya() + }; + """); + } + + [Fact] + public void VariablesConflictingWithJSTypesAreRenamed () + { + AddAssembly(With("[JSInvokable] public static void Fun (string function) { }")); + Execute(); + Contains( + """ + export const Global = { + fun: (fn) => getExports().MockClass.Fun(fn) + }; + """); + } + + [Fact] + public void SerializesCustomType () + { + AddAssembly( + With("public record Info;", false), + With("[JSInvokable] public static Info Foo (Info i) => default;"), + With("[JSFunction] public static Info? Bar (Info? i) => default;"), + With("[JSEvent] public static void Baz (Info?[] i) { }"), + With("[JSEvent] public static void Yaz (int a, Info i) { }")); + Execute(); + Contains( + """ + export const Global = { + foo: (i) => deserialize(getExports().MockClass.Foo(serialize(i))), + get bar() { return this.barHandler; }, + set bar(handler) { this.barHandler = handler; this.barSerializedHandler = (i) => serialize(this.barHandler(deserialize(i))); }, + get barSerialized() { if (typeof this.barHandler !== "function") throw Error("Failed to invoke 'Global.bar' from C#. Make sure to assign function in JavaScript."); return this.barSerializedHandler; }, + baz: new Event(), + bazSerialized: (i) => Global.baz.broadcast(deserialize(i)), + yaz: new Event(), + yazSerialized: (a, i) => Global.yaz.broadcast(a, deserialize(i)) + }; + """); + } + + [Fact] + public void AwaitsWhenSerializingInAsyncFunctions () + { + AddAssembly( + With("public record Info;", false), + With("[JSInvokable] public static Task Foo (Info i) => default;"), + With("[JSFunction] public static Task Bar (Info? i) => default;"), + With("[JSInvokable] public static Task> Baz () => default;"), + With("[JSFunction] public static Task> Yaz () => default;")); + Execute(); + Contains( + """ + export const Global = { + foo: async (i) => deserialize(await getExports().MockClass.Foo(serialize(i))), + get bar() { return this.barHandler; }, + set bar(handler) { this.barHandler = handler; this.barSerializedHandler = async (i) => serialize(await this.barHandler(deserialize(i))); }, + get barSerialized() { if (typeof this.barHandler !== "function") throw Error("Failed to invoke 'Global.bar' from C#. Make sure to assign function in JavaScript."); return this.barSerializedHandler; }, + baz: async () => deserialize(await getExports().MockClass.Baz()), + get yaz() { return this.yazHandler; }, + set yaz(handler) { this.yazHandler = handler; this.yazSerializedHandler = async () => serialize(await this.yazHandler()); }, + get yazSerialized() { if (typeof this.yazHandler !== "function") throw Error("Failed to invoke 'Global.yaz' from C#. Make sure to assign function in JavaScript."); return this.yazSerializedHandler; } + }; + """); + } + + [Fact] + public void ExportedEnumsAreDeclaredInJS () + { + AddAssembly( + With("n", "public enum Foo { A, B }"), + With("n", "[JSInvokable] public static Foo GetFoo () => default;")); + Execute(); + Contains( + """ + export const n = { + getFoo: () => deserialize(getExports().n_MockClass.GetFoo()), + Foo: { "0": "A", "1": "B", "A": 0, "B": 1 } + }; + """); + } +} diff --git a/src/cs/Bootsharp.Publish.Test/Build/BuildTest.cs b/src/cs/Bootsharp.Publish.Test/Build/BuildTest.cs new file mode 100644 index 00000000..994cd3d4 --- /dev/null +++ b/src/cs/Bootsharp.Publish.Test/Build/BuildTest.cs @@ -0,0 +1,44 @@ +namespace Bootsharp.Publish.Test; + +public class BuildTest : TaskTest +{ + protected BuildBootsharp Task { get; } + protected byte[] MockWasmBinary { get; } = "MockWasmContent"u8.ToArray(); + protected string MockDotNetContent { get; } = "MockDotNetContent"; + protected string MockRuntimeContent { get; } = "MockRuntimeContent"; + protected string MockNativeContent { get; } = "MockNativeContent"; + protected string GeneratedBindings => ReadProjectFile("bindings.g.js"); + protected string GeneratedDeclarations => ReadProjectFile("bindings.g.d.ts"); + protected string GeneratedResources => ReadProjectFile("resources.g.js"); + protected string GeneratedDotNetModule => ReadProjectFile("dotnet.g.js"); + protected string GeneratedRuntimeModule => ReadProjectFile("dotnet.runtime.g.js"); + protected string GeneratedNativeModule => ReadProjectFile("dotnet.native.g.js"); + + public BuildTest () + { + Task = CreateTask(); + Project.WriteFile("dotnet.js", MockDotNetContent); + Project.WriteFile("dotnet.runtime.js", MockRuntimeContent); + Project.WriteFile("dotnet.native.js", MockNativeContent); + Project.WriteFile("dotnet.runtime.g.js", "MockRuntimeGeneratedContent"); + Project.WriteFile("dotnet.native.g.js", "MockNativeGeneratedContent"); + Project.WriteFile("dotnet.native.wasm", MockWasmBinary); + } + + public override void Execute () + { + if (LastAddedAssemblyName is not null) + Task.EntryAssemblyName = LastAddedAssemblyName; + Task.Execute(); + } + + private BuildBootsharp CreateTask () => new() { + BuildDirectory = Project.Root, + InspectedDirectory = Project.Root, + EntryAssemblyName = "System.Runtime.dll", + BuildEngine = Engine, + TrimmingEnabled = false, + EmbedBinaries = false, + Threading = false + }; +} diff --git a/DotNet/Packer.Test/DeclarationTest.cs b/src/cs/Bootsharp.Publish.Test/Build/DeclarationTest.cs similarity index 74% rename from DotNet/Packer.Test/DeclarationTest.cs rename to src/cs/Bootsharp.Publish.Test/Build/DeclarationTest.cs index e662eaf2..22a6b491 100644 --- a/DotNet/Packer.Test/DeclarationTest.cs +++ b/src/cs/Bootsharp.Publish.Test/Build/DeclarationTest.cs @@ -1,98 +1,21 @@ -using System; -using System.IO; -using System.Linq; -using Xunit; +namespace Bootsharp.Publish.Test; -namespace Packer.Test; - -public class DeclarationTest : ContentTest +public class DeclarationTest : BuildTest { - protected override string TestedContent => Data.GeneratedDeclaration; - - [Fact] - public void ContainsRequiredLibraryDeclarations () - { - File.WriteAllText(Path.Combine(Data.JSDir, "event.d.ts"), "event"); - File.WriteAllText(Path.Combine(Data.JSDir, "interop.d.ts"), "interop"); - File.WriteAllText(Path.Combine(Data.JSDir, "boot.d.ts"), "boot"); - Task.Execute(); - Contains("event"); - Contains("interop"); - Contains("boot"); - } - - [Fact] - public void DoesntContainOtherLibraryDeclarations () - { - File.WriteAllText(Path.Combine(Data.JSDir, "other.d.ts"), "other"); - Task.Execute(); - Assert.DoesNotContain("other", Data.GeneratedDeclaration); - } - - [Fact] - public void RemovesUnwantedDeclarations () - { - File.WriteAllText(Path.Combine(Data.JSDir, "boot.d.ts"), - "export declare function initializeInterop(): void;\n" + - "export declare function initializeMono(assemblies: Assembly[]): void;\n" + - "export declare function callEntryPoint(assemblyName: string): Promise;" - ); - Task.Execute(); - Assert.DoesNotContain("initializeInterop", Data.GeneratedDeclaration); - Assert.DoesNotContain("initializeMono", Data.GeneratedDeclaration); - Assert.DoesNotContain("callEntryPoint", Data.GeneratedDeclaration); - } - - [Fact] - public void ResolvesImportForRequiredLibraryDeclarations () - { - File.WriteAllText(Path.Combine(Data.JSDir, "dep.d.ts"), "dep"); - File.WriteAllText(Path.Combine(Data.JSDir, "boot.d.ts"), "import from \"./dep\";\nboot"); - Task.Execute(); - Assert.DoesNotContain("import", TestedContent); - Contains("dep"); - Contains("boot"); - } - - [Fact] - public void WhenImportResolveFailsExceptionIsThrown () - { - File.WriteAllText(Path.Combine(Data.JSDir, "boot.d.ts"), "import from \"./dep\";\nboot"); - Assert.Throws(() => Task.Execute()); - } + protected override string TestedContent => GeneratedDeclarations; [Fact] - public void WhenEmbeddedOverridesBootSignature () + public void ImportsEventType () { - File.WriteAllText(Path.Combine(Data.JSDir, "boot.d.ts"), "boot(bootData: BootData): Promise"); - Task.EmbedBinaries = true; - Task.Execute(); - Contains("boot(): Promise"); - } - - [Fact] - public void WhenSideLoadDoesntOverrideBootSignature () - { - File.WriteAllText(Path.Combine(Data.JSDir, "boot.d.ts"), "boot(bootData: BootData): Promise"); - Task.EmbedBinaries = false; - Task.Execute(); - Contains("boot(bootData: BootData): Promise"); - } - - [Fact] - public void WhenSideLoadHasBootUrisDeclarations () - { - Task.EmbedBinaries = false; - Task.Execute(); - Contains("export interface BootUris"); - Contains("export declare function getBootUris"); + Execute(); + Contains("""import type { Event } from "./event";"""); } [Fact] public void DeclaresNamespace () { AddAssembly(With("Foo", "[JSInvokable] public static void Bar () { }")); - Task.Execute(); + Execute(); Contains("export namespace Foo {"); } @@ -100,7 +23,7 @@ public void DeclaresNamespace () public void DotsInSpaceArePreserved () { AddAssembly(With("Foo.Bar.Nya", "[JSInvokable] public static void Bar () { }")); - Task.Execute(); + Execute(); Contains("export namespace Foo.Bar.Nya {"); } @@ -108,7 +31,7 @@ public void DotsInSpaceArePreserved () public void FunctionDeclarationIsExportedForInvokableMethod () { AddAssembly(With("Foo", "[JSInvokable] public static void Foo () { }")); - Task.Execute(); + Execute(); Contains("export namespace Foo {\n export function foo(): void;\n}"); } @@ -116,24 +39,26 @@ public void FunctionDeclarationIsExportedForInvokableMethod () public void AssignableVariableIsExportedForFunctionCallback () { AddAssembly(With("Foo", "[JSFunction] public static void OnFoo () { }")); - Task.Execute(); + Execute(); Contains("export namespace Foo {\n export let onFoo: () => void;\n}"); } [Fact] - public void EventPropertyIsExportedForEventMethod () + public void EventPropertiesAreExportedForEventMethods () { - AddAssembly(With("Foo", "[JSEvent] public static void OnFoo () { }")); - Task.Execute(); - Contains("export namespace Foo {\n export const onFoo: Event<[]>;\n}"); - } - - [Fact] - public void GenericEventIsExportedForEventMethodWithArguments () - { - AddAssembly(With("Foo", "[JSEvent] public static void OnFoo (string bar, int nya) { }")); - Task.Execute(); - Contains("export namespace Foo {\n export const onFoo: Event<[string, number]>;\n}"); + AddAssembly( + With("Foo", "[JSEvent] public static void OnFoo () { }"), + With("Foo", "[JSEvent] public static void OnBar (string baz) { }"), + With("Foo", "[JSEvent] public static void OnFar (int yaz, bool? nya) { }")); + Execute(); + Contains( + """ + export namespace Foo { + export const onFoo: Event<[]>; + export const onBar: Event<[baz: string]>; + export const onFar: Event<[yaz: number, nya: boolean | undefined]>; + } + """); } [Fact] @@ -142,7 +67,7 @@ public void MembersFromSameSpaceAreDeclaredUnderSameSpace () AddAssembly( With("Foo", "public class Foo { }"), With("Foo", "[JSInvokable] public static Foo GetFoo () => default;")); - Task.Execute(); + Execute(); Contains("export namespace Foo {\n export interface Foo {\n }\n}"); Contains("export namespace Foo {\n export function getFoo(): Foo.Foo;\n}"); } @@ -153,7 +78,7 @@ public void MembersFromDifferentSpacesAreDeclaredUnderRespectiveSpaces () AddAssembly( With("Foo", "public class Foo { }", false), With("Bar", "[JSInvokable] public static Foo.Foo GetFoo () => default;")); - Task.Execute(); + Execute(); Contains("export namespace Foo {\n export interface Foo {\n }\n}"); Contains("export namespace Bar {\n export function getFoo(): Foo.Foo;\n}"); } @@ -164,7 +89,7 @@ public void MultipleSpacesAreDeclaredFromNewLine () AddAssembly( With("a", "[JSInvokable] public static void Foo () { }"), With("b", "[JSInvokable] public static void Bar () { }")); - Task.Execute(); + Execute(); Contains("\nexport namespace b"); } @@ -174,30 +99,30 @@ public void DifferentSpacesWithSameRootAreDeclaredIndividually () AddAssembly( With("Nya.Bar", "[JSInvokable] public static void Fun () { }"), With("Nya.Foo", "[JSInvokable] public static void Foo () { }")); - Task.Execute(); + Execute(); Contains("export namespace Nya.Bar {\n export function fun(): void;\n}"); Contains("export namespace Nya.Foo {\n export function foo(): void;\n}"); } [Fact] - public void WhenNoSpaceTypesAreDeclaredUnderBindingsSpace () + public void WhenNoSpaceTypesAreDeclaredUnderGlobalSpace () { AddAssembly( With("public class Foo { }", false), With("[JSFunction] public static void OnFoo (Foo foo) { }")); - Task.Execute(); - Contains("export namespace Bindings {\n export interface Foo {\n }\n}"); - Contains("export namespace Bindings {\n export let onFoo: (foo: Bindings.Foo) => void;\n}"); + Execute(); + Contains("export namespace Global {\n export interface Foo {\n }\n}"); + Contains("export namespace Global {\n export let onFoo: (foo: Global.Foo) => void;\n}"); } [Fact] public void NamespaceAttributeOverrideSpaceNames () { AddAssembly( - With(@"[assembly:JSNamespace(@""Foo\.Bar\.(\S+)"", ""$1"")]", false), + With("""[assembly:JSNamespace(@"Foo\.Bar\.(\S+)", "$1")]""", false), With("Foo.Bar.Nya", "public class Nya { }", false), With("Foo.Bar.Fun", "[JSFunction] public static void OnFun (Nya.Nya nya) { }")); - Task.Execute(); + Execute(); Contains("export namespace Nya {\n export interface Nya {\n }\n}"); Contains("export namespace Fun {\n export let onFun: (nya: Nya.Nya) => void;\n}"); } @@ -205,21 +130,29 @@ public void NamespaceAttributeOverrideSpaceNames () [Fact] public void NumericsTranslatedToNumber () { - var nums = new[] { "byte", "sbyte", "ushort", "uint", "ulong", "short", "int", "long", "decimal", "double", "float" }; + var nums = new[] { "byte", "sbyte", "ushort", "uint", "ulong", "short", "int", "decimal", "double", "float" }; var csArgs = string.Join(", ", nums.Select(n => $"{n} v{Array.IndexOf(nums, n)}")); var tsArgs = string.Join(", ", nums.Select(n => $"v{Array.IndexOf(nums, n)}: number")); AddAssembly(With($"[JSInvokable] public static void Num ({csArgs}) {{ }}")); - Task.Execute(); + Execute(); Contains($"num({tsArgs})"); } + [Fact] + public void Int64TranslatedToBigInt () + { + AddAssembly(With("[JSInvokable] public static void Foo (long bar) {}")); + Execute(); + Contains("foo(bar: bigint): void"); + } + [Fact] public void TaskTranslatedToPromise () { AddAssembly( With("[JSInvokable] public static Task AsyBool () => default;"), - With("[JSInvokable] public static ValueTask AsyVoid () => default;")); - Task.Execute(); + With("[JSInvokable] public static Task AsyVoid () => default;")); + Execute(); Contains("asyBool(): Promise"); Contains("asyVoid(): Promise"); } @@ -228,7 +161,7 @@ public void TaskTranslatedToPromise () public void CharAndStringTranslatedToString () { AddAssembly(With("[JSInvokable] public static void Cha (char c, string s) {}")); - Task.Execute(); + Execute(); Contains("cha(c: string, s: string): void"); } @@ -236,7 +169,7 @@ public void CharAndStringTranslatedToString () public void BoolTranslatedToBoolean () { AddAssembly(With("[JSInvokable] public static void Boo (bool b) {}")); - Task.Execute(); + Execute(); Contains("boo(b: boolean): void"); } @@ -244,7 +177,7 @@ public void BoolTranslatedToBoolean () public void DateTimeTranslatedToDate () { AddAssembly(With("[JSInvokable] public static void Doo (DateTime time) {}")); - Task.Execute(); + Execute(); Contains("doo(time: Date): void"); } @@ -252,7 +185,7 @@ public void DateTimeTranslatedToDate () public void ListAndArrayTranslatedToArray () { AddAssembly(With("[JSInvokable] public static List Goo (DateTime[] d) => default;")); - Task.Execute(); + Execute(); Contains("goo(d: Array): Array"); } @@ -260,7 +193,7 @@ public void ListAndArrayTranslatedToArray () public void JaggedArrayAndListOfListsTranslatedToArrayOfArrays () { AddAssembly(With("[JSInvokable] public static List> Goo (DateTime[][] d) => default;")); - Task.Execute(); + Execute(); Contains("goo(d: Array>): Array>"); } @@ -273,15 +206,17 @@ public void IntArraysTranslatedToRelatedTypes () With("[JSInvokable] public static void Uint16 (ushort[] foo) {}"), With("[JSInvokable] public static void Int16 (short[] foo) {}"), With("[JSInvokable] public static void Uint32 (uint[] foo) {}"), - With("[JSInvokable] public static void Int32 (int[] foo) {}") + With("[JSInvokable] public static void Int32 (int[] foo) {}"), + With("[JSInvokable] public static void BigInt64 (long[] foo) {}") ); - Task.Execute(); + Execute(); Contains("uint8(foo: Uint8Array): void"); Contains("int8(foo: Int8Array): void"); Contains("uint16(foo: Uint16Array): void"); Contains("int16(foo: Int16Array): void"); Contains("uint32(foo: Uint32Array): void"); Contains("int32(foo: Int32Array): void"); + Contains("bigInt64(foo: BigInt64Array): void"); } [Fact] @@ -290,7 +225,7 @@ public void DefinitionIsGeneratedForObjectType () AddAssembly( With("n", "public class Foo { public string S { get; set; } public int I { get; set; } }"), With("n", "[JSInvokable] public static Foo Method (Foo t) => default;")); - Task.Execute(); + Execute(); Matches(@"export interface Foo {\s*s: string;\s*i: number;\s*}"); Contains("method(t: n.Foo): n.Foo"); } @@ -303,7 +238,7 @@ public void DefinitionIsGeneratedForInterfaceAndImplementation () With("n", "public class Base { }"), With("n", "public class Derived : Base, Interface { public Interface Foo { get; } public void Bar (Interface b) {} }"), With("n", "[JSInvokable] public static Derived Method (Interface b) => default;")); - Task.Execute(); + Execute(); Matches(@"export interface Interface {\s*foo: n.Interface;\s*}"); Matches(@"export interface Base {\s*}"); Matches(@"export interface Derived extends n.Base, n.Interface {\s*foo: n.Interface;\s*}"); @@ -317,7 +252,7 @@ public void DefinitionIsGeneratedForTypeWithListProperty () With("n", "public interface Item { }"), With("n", "public class Container { public List Items { get; } }"), With("n", "[JSInvokable] public static Container Combine (List items) => default;")); - Task.Execute(); + Execute(); Matches(@"export interface Item {\s*}"); Matches(@"export interface Container {\s*items: Array;\s*}"); Contains("combine(items: Array): n.Container"); @@ -330,7 +265,7 @@ public void DefinitionIsGeneratedForTypeWithJaggedArrayProperty () With("n", "public interface Item { }"), With("n", "public class Container { public Item[][] Items { get; } }"), With("n", "[JSInvokable] public static Container Get () => default;")); - Task.Execute(); + Execute(); Matches(@"export interface Item {\s*}"); Matches(@"export interface Container {\s*items: Array>;\s*}"); Contains("get(): n.Container"); @@ -343,7 +278,7 @@ public void DefinitionIsGeneratedForTypeWithReadOnlyListProperty () With("n", "public interface Item { }"), With("n", "public class Container { public IReadOnlyList Items { get; } }"), With("n", "[JSInvokable] public static Container Combine (IReadOnlyList items) => default;")); - Task.Execute(); + Execute(); Matches(@"export interface Item {\s*}"); Matches(@"export interface Container {\s*items: Array;\s*}"); Contains("combine(items: Array): n.Container"); @@ -356,7 +291,7 @@ public void DefinitionIsGeneratedForTypeWithDictionaryProperty () With("n", "public interface Item { }"), With("n", "public class Container { public Dictionary Items { get; } }"), With("n", "[JSInvokable] public static Container Combine (Dictionary items) => default;")); - Task.Execute(); + Execute(); Matches(@"export interface Item {\s*}"); Matches(@"export interface Container {\s*items: Map;\s*}"); Contains("combine(items: Map): n.Container"); @@ -369,7 +304,7 @@ public void DefinitionIsGeneratedForTypeWithReadOnlyDictionaryProperty () With("n", "public interface Item { }"), With("n", "public class Container { public IReadOnlyDictionary Items { get; } }"), With("n", "[JSInvokable] public static Container Combine (IReadOnlyDictionary items) => default;")); - Task.Execute(); + Execute(); Matches(@"export interface Item {\s*}"); Matches(@"export interface Container {\s*items: Map;\s*}"); Contains("combine(items: Map): n.Container"); @@ -381,7 +316,7 @@ public void DefinitionIsGeneratedForGenericClass () AddAssembly( With("n", "public class GenericClass { public T Value { get; set; } }"), With("n", "[JSInvokable] public static void Method (GenericClass p) { }")); - Task.Execute(); + Execute(); Matches(@"export interface GenericClass {\s*value: T;\s*}"); Contains("method(p: n.GenericClass): void"); } @@ -392,7 +327,7 @@ public void DefinitionIsGeneratedForGenericInterface () AddAssembly( With("n", "public interface GenericInterface { public T Value { get; set; } }"), With("n", "[JSInvokable] public static GenericInterface Method () => default;")); - Task.Execute(); + Execute(); Matches(@"export interface GenericInterface {\s*value: T;\s*}"); Contains("method(): n.GenericInterface"); } @@ -404,7 +339,7 @@ public void DefinitionIsGeneratedForNestedGenericTypes () With("Foo", "public class GenericClass { public T Value { get; set; } }", false), With("Bar", "public interface GenericInterface { public T Value { get; set; } }", false), With("n", "[JSInvokable] public static void Method (Foo.GenericClass> p) { }")); - Task.Execute(); + Execute(); Matches(@"export namespace Foo {\s*export interface GenericClass {\s*value: T;\s*}\s*}"); Matches(@"export namespace Bar {\s*export interface GenericInterface {\s*value: T;\s*}\s*}"); Contains("method(p: Foo.GenericClass>): void"); @@ -416,7 +351,7 @@ public void DefinitionIsGeneratedForGenericClassWithMultipleTypeArguments () AddAssembly( With("n", "public class GenericClass { public T1 Key { get; set; } public T2 Value { get; set; } }"), With("n", "[JSInvokable] public static void Method (GenericClass p) { }")); - Task.Execute(); + Execute(); Matches(@"export interface GenericClass {\s*key: T1;\s*value: T2;\s*}"); Contains("method(p: n.GenericClass): void"); } @@ -434,7 +369,7 @@ public void CanCrawlCustomTypes () With("n", "public class Bar : Foo { public ReadonlyRecordStruct Rrs { get; } public RecordClass Rc { get; } }"), With("n", "public class Baz { public List Bars { get; } public Enum E { get; } }"), With("n", "[JSInvokable] public static Baz GetBaz () => default;")); - Task.Execute(); + Execute(); Matches(@"export interface Struct {\s*a: number;\s*}"); Matches(@"export interface ReadonlyStruct {\s*a: number;\s*}"); Matches(@"export interface ReadonlyRecordStruct {\s*a: number;\s*}"); @@ -449,7 +384,7 @@ public void CanCrawlCustomTypes () public void OtherTypesAreTranslatedToAny () { AddAssembly(With("[JSInvokable] public static DBNull Method (IEnumerable t) => default;")); - Task.Execute(); + Execute(); Contains("method(t: any): any"); } @@ -459,7 +394,7 @@ public void StaticPropertiesAreNotIncluded () AddAssembly( With("public class Foo { public static string Soo { get; } }"), With("[JSInvokable] public static Foo Bar () => default;")); - Task.Execute(); + Execute(); Matches(@"export interface Foo {\s*}"); } @@ -469,20 +404,20 @@ public void ExpressionPropertiesAreNotIncluded () AddAssembly( With("public class Foo { public bool Boo => true; }"), With("[JSInvokable] public static Foo Bar () => default;")); - Task.Execute(); + Execute(); Matches(@"export interface Foo {\s*}"); } [Fact] - public void NullableMethodArgumentsHaveOptionalModificator () + public void NullableMethodArgumentsUnionWithUndefined () { AddAssembly( With("[JSInvokable] public static void Foo (string? bar) { }"), With("[JSFunction] public static void Fun (int? nya) { }") ); - Task.Execute(); - Contains("export function foo(bar?: string): void;"); - Contains("export let fun: (nya?: number) => void;"); + Execute(); + Contains("export function foo(bar: string | undefined): void;"); + Contains("export let fun: (nya: number | undefined) => void;"); } [Fact] @@ -493,7 +428,7 @@ public void NullableMethodReturnTypesUnionWithNull () With("[JSInvokable] public static Task Bar () => default;"), With("[JSFunction] public static ValueTask?> Nya () => default;") ); - Task.Execute(); + Execute(); Contains("export function foo(): string | null;"); Contains("export function bar(): Promise;"); Contains("export let nya: () => Promise | null>;"); @@ -506,11 +441,11 @@ public void NullableCollectionElementTypesUnionWithNull () With("public class Foo { }"), With("[JSFunction] public static List? Fun (int?[]? bar, Foo[]?[]? nya, Foo?[]?[]? far) => default;") ); - Task.Execute(); - Contains("export let fun: (bar?: Array," + - " nya?: Array | null>," + - " far?: Array | null>) =>" + - " Array | null;"); + Execute(); + Contains("export let fun: (bar: Array | undefined," + + " nya: Array | null> | undefined," + + " far: Array | null> | undefined) =>" + + " Array | null;"); } [Fact] @@ -521,9 +456,9 @@ public void NullableCollectionElementTypesOfCustomTypeUnionWithNull () With("public record Foo (List?>?>? Bar, IFoo?[]?[]? Nya) : IFoo;"), With("[JSFunction] public static IFoo Fun (Foo foo) => default;") ); - Task.Execute(); - Contains(@"bar?: Array | null> | null>;"); - Contains(@"nya?: Array | null> | null>;"); + Execute(); + Contains(@"bar?: Array | null> | null>;"); + Contains(@"nya?: Array | null> | null>;"); } [Fact] @@ -533,7 +468,7 @@ public void NullablePropertiesHaveOptionalModificator () With("n", "public class Foo { public bool? Bool { get; } }"), With("n", "public class Bar { public Foo? Foo { get; } }"), With("n", "[JSInvokable] public static Foo FooBar (Bar bar) => default;")); - Task.Execute(); + Execute(); Matches(@"export interface Foo {\s*bool\?: boolean;\s*}"); Matches(@"export interface Bar {\s*foo\?: n.Foo;\s*}"); } @@ -545,19 +480,11 @@ public void NullableEnumsAreCrawled () With("n", "public enum Foo { A, B }"), With("n", "public class Bar { public Foo? Foo { get; } }"), With("n", "[JSInvokable] public static Bar GetBar () => default;")); - Task.Execute(); + Execute(); Matches(@"export enum Foo {\s*A,\s*B\s*}"); Matches(@"export interface Bar {\s*foo\?: n.Foo;\s*}"); } - [Fact] - public void NullableEventTypesUnionWithUndefined () - { - AddAssembly(With("[JSEvent] public static void OnFoo (string? bar) { }")); - Task.Execute(); - Contains("export const onFoo: Event<[string | undefined]>;"); - } - [Fact] public void WhenTypeReferencedMultipleTimesItsDeclaredOnlyOnce () { @@ -568,7 +495,7 @@ public void WhenTypeReferencedMultipleTimesItsDeclaredOnlyOnce () With("[JSInvokable] public static Bar TakeFooGiveBar (Foo f) => default;"), With("[JSInvokable] public static Foo TakeBarGiveFoo (Bar b) => default;"), With("[JSInvokable] public static Far TakeAllGiveFar (Foo f, Bar b, Far ff) => default;")); - Task.Execute(); + Execute(); Assert.Single(Matches("export interface Foo")); Assert.Single(Matches("export interface Bar")); Assert.Single(Matches("export interface Far")); diff --git a/src/cs/Bootsharp.Publish.Test/Build/InspectionTest.cs b/src/cs/Bootsharp.Publish.Test/Build/InspectionTest.cs new file mode 100644 index 00000000..e87e0afc --- /dev/null +++ b/src/cs/Bootsharp.Publish.Test/Build/InspectionTest.cs @@ -0,0 +1,35 @@ +namespace Bootsharp.Publish.Test; + +public class InspectionTest : BuildTest +{ + [Fact] + public void Records () + { + // TODO: Remove once coverlet properly handles record coverage. + _ = new Assembly("", default) with { Name = "foo" }; + _ = new MockAssembly("", default) with { Name = "foo" }; + _ = new AssemblyResource("", "") with { Name = "foo" }; + _ = new MockSource("", "", false) with { Namespace = "foo" }; + _ = new Argument { Name = "", Type = default, Nullable = false, TypeSyntax = "", ShouldSerialize = false } with { Name = "foo" }; + _ = new Method { Name = "", Arguments = default, Assembly = "", Type = default, DeclaringName = "", ReturnsNullable = true, ReturnsVoid = true, ReturnType = default, ReturnTypeSyntax = "", JSArguments = default, JSSpace = "", ReturnsTaskLike = true, JSReturnTypeSyntax = "", ShouldSerializeReturnType = true } with { Name = "foo" }; + } + + [Fact] + public void AllAssembliesAreInspected () + { + AddAssembly("Foo.dll"); + Execute(); + Assert.Contains(Engine.Messages, w => w.Contains("Foo.dll")); + Assert.Contains(Engine.Messages, w => w.Contains("Bootsharp.Common.dll")); + Assert.Contains(Engine.Messages, w => w.Contains("System.Runtime.dll")); + Assert.Contains(Engine.Messages, w => w.Contains("System.Private.CoreLib.dll")); + } + + [Fact] + public void WhenAssemblyInspectionFailsWarningIsLogged () + { + File.WriteAllText(Path.Combine(Project.Root, "foo.dll"), "corrupted"); + Execute(); + Assert.Contains(Engine.Warnings, w => w.Contains("Failed to inspect 'foo.dll' assembly")); + } +} diff --git a/src/cs/Bootsharp.Publish.Test/Build/PatcherTest.cs b/src/cs/Bootsharp.Publish.Test/Build/PatcherTest.cs new file mode 100644 index 00000000..c2251846 --- /dev/null +++ b/src/cs/Bootsharp.Publish.Test/Build/PatcherTest.cs @@ -0,0 +1,57 @@ +namespace Bootsharp.Publish.Test; + +public class PatcherTest : BuildTest +{ + [Fact] + public void WhenEmbedEnabledModulesAreCopied () + { + Task.EmbedBinaries = true; + Execute(); + Assert.Equal(MockDotNetContent, GeneratedDotNetModule); + Assert.Equal(MockRuntimeContent, GeneratedRuntimeModule); + Assert.Equal(MockNativeContent, GeneratedNativeModule); + } + + [Fact] + public void WhenEmbedDisabledModuleExportFalseFlag () + { + Task.EmbedBinaries = false; + Execute(); + Assert.Equal("export const embedded = false;\nexport const mt = false;", GeneratedDotNetModule); + Assert.Equal("export const embedded = false;\nexport const mt = false;", GeneratedRuntimeModule); + Assert.Equal("export const embedded = false;\nexport const mt = false;", GeneratedNativeModule); + } + + [Fact] + public void WhenTreadingEnabledFlagIsSet () + { + Task.EmbedBinaries = false; + Task.Threading = true; + Execute(); + Assert.Equal("export const embedded = false;\nexport const mt = true;", GeneratedDotNetModule); + Assert.Equal("export const embedded = false;\nexport const mt = true;", GeneratedRuntimeModule); + Assert.Equal("export const embedded = false;\nexport const mt = true;", GeneratedNativeModule); + } + + [Fact] + public void WhenTrimmingDisabledPreservesSourceMapReferences () + { + Task.TrimmingEnabled = false; + Project.WriteFile("dotnet.js", "//# sourceMappingURL=dotnet.js.map\n"); + Project.WriteFile("dotnet.runtime.js", "//# sourceMappingURL=dotnet.runtime.js.map\n"); + Execute(); + Assert.Contains("//# sourceMappingURL=dotnet.js.map\n", File.ReadAllText(Path.Combine(Project.Root, "dotnet.js"))); + Assert.Contains("//# sourceMappingURL=dotnet.runtime.js.map\n", File.ReadAllText(Path.Combine(Project.Root, "dotnet.runtime.js"))); + } + + [Fact] + public void WhenTrimmingEnabledStripsSourceMapReference () + { + Task.TrimmingEnabled = true; + Project.WriteFile("dotnet.js", "//# sourceMappingURL=dotnet.js.map\n"); + Project.WriteFile("dotnet.runtime.js", "//# sourceMappingURL=dotnet.runtime.js.map\n"); + Execute(); + Assert.DoesNotContain("//# sourceMappingURL=dotnet.js.map\n", File.ReadAllText(Path.Combine(Project.Root, "dotnet.js"))); + Assert.DoesNotContain("//# sourceMappingURL=dotnet.runtime.js.map\n", File.ReadAllText(Path.Combine(Project.Root, "dotnet.runtime.js"))); + } +} diff --git a/src/cs/Bootsharp.Publish.Test/Build/ResourceTest.cs b/src/cs/Bootsharp.Publish.Test/Build/ResourceTest.cs new file mode 100644 index 00000000..7c6ed5c9 --- /dev/null +++ b/src/cs/Bootsharp.Publish.Test/Build/ResourceTest.cs @@ -0,0 +1,40 @@ +namespace Bootsharp.Publish.Test; + +public class ResourceTest : BuildTest +{ + protected override string TestedContent => GeneratedResources; + + [Fact] + public void EntryAssemblyNameIsWritten () + { + AddAssembly("Foo.dll"); + Execute(); + Contains("entryAssemblyName: \"Foo.dll\""); + } + + [Fact] + public void BinariesEmbeddedWhenEnabled () + { + AddAssembly("Foo.dll"); + Task.EmbedBinaries = true; + Execute(); + Contains($$"""wasm: { name: "dotnet.native.wasm", content: "{{Convert.ToBase64String(MockWasmBinary)}}" },"""); + Contains("{ name: \"Foo.wasm\", content: \""); + Contains("{ name: \"Bootsharp.Common.wasm\", content: \""); + Contains("{ name: \"System.Runtime.wasm\", content: \""); + Contains("{ name: \"System.Private.CoreLib.wasm\", content: \""); + } + + [Fact] + public void BinariesNotEmbeddedWhenDisabled () + { + AddAssembly("Foo.dll"); + Task.EmbedBinaries = false; + Execute(); + Contains("""wasm: { name: "dotnet.native.wasm", content: undefined },"""); + Contains("""{ name: "Foo.wasm", content: undefined"""); + Contains("""{ name: "Bootsharp.Common.wasm", content: undefined"""); + Contains("""{ name: "System.Runtime.wasm", content: undefined"""); + Contains("""{ name: "System.Private.CoreLib.wasm", content: undefined"""); + } +} diff --git a/src/cs/Bootsharp.Publish.Test/Mock/MockAssembly.cs b/src/cs/Bootsharp.Publish.Test/Mock/MockAssembly.cs new file mode 100644 index 00000000..09b61ae4 --- /dev/null +++ b/src/cs/Bootsharp.Publish.Test/Mock/MockAssembly.cs @@ -0,0 +1,3 @@ +namespace Bootsharp.Publish.Test; + +public record MockAssembly (string Name, MockSource[] Sources); diff --git a/DotNet/Packer.Test/Mock/MockCompiler.cs b/src/cs/Bootsharp.Publish.Test/Mock/MockCompiler.cs similarity index 86% rename from DotNet/Packer.Test/Mock/MockCompiler.cs rename to src/cs/Bootsharp.Publish.Test/Mock/MockCompiler.cs index 4fa88cb1..6b7508ac 100644 --- a/DotNet/Packer.Test/Mock/MockCompiler.cs +++ b/src/cs/Bootsharp.Publish.Test/Mock/MockCompiler.cs @@ -1,11 +1,7 @@ -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; -using Xunit; -namespace Packer.Test; +namespace Bootsharp.Publish.Test; public class MockCompiler { @@ -13,8 +9,7 @@ public class MockCompiler "System", "System.Collections.Generic", "System.Threading.Tasks", - "DotNetJS", - "Microsoft.JSInterop" + "Bootsharp" }; public void Compile (IEnumerable sources, string assemblyPath) @@ -31,8 +26,7 @@ private static string BuildSource (MockSource source) var text = source.WrapInClass ? $"public partial class MockClass {{ {source.Code} }}" : source.Code; - return source.Namespace is null - ? text + return source.Namespace is null ? text : $"namespace {source.Namespace} {{ {text} }}"; } diff --git a/src/cs/Bootsharp.Publish.Test/Mock/MockProject.cs b/src/cs/Bootsharp.Publish.Test/Mock/MockProject.cs new file mode 100644 index 00000000..a40c09ff --- /dev/null +++ b/src/cs/Bootsharp.Publish.Test/Mock/MockProject.cs @@ -0,0 +1,60 @@ +using Microsoft.CodeAnalysis; + +namespace Bootsharp.Publish.Test; + +public sealed class MockProject : IDisposable +{ + public string Root { get; } + + private readonly MockCompiler compiler = new(); + + public MockProject () + { + Root = CreateUniqueRootDirectory(); + CreateBuildResources(); + } + + public void Dispose () => Directory.Delete(Root, true); + + public void AddAssembly (MockAssembly assembly) + { + var assemblyPath = Path.Combine(Root, assembly.Name); + compiler.Compile(assembly.Sources, assemblyPath); + } + + public void WriteFile (string name, ReadOnlySpan content) + { + var filePath = Path.Combine(Root, name); + File.WriteAllBytes(filePath, content.ToArray()); + } + + public void WriteFile (string name, string content) + { + var filePath = Path.Combine(Root, name); + File.WriteAllText(filePath, content); + } + + private static string CreateUniqueRootDirectory () + { + var testAssembly = System.Reflection.Assembly.GetExecutingAssembly().Location; + var assemblyDir = Path.Combine(Path.GetDirectoryName(testAssembly)); + return Directory.CreateDirectory(Path.Combine(assemblyDir, $"temp{Guid.NewGuid():N}")).FullName; + } + + private void CreateBuildResources () + { + foreach (var path in GetReferencePaths()) + File.Copy(path, Path.Combine(Root, Path.GetFileName(path)), true); + } + + private static string[] GetReferencePaths () + { + var coreDir = Path.GetDirectoryName(typeof(object).Assembly.Location); + return new[] { + MetadataReference.CreateFromFile(Path.Combine(coreDir, "System.Runtime.dll")).FilePath, + MetadataReference.CreateFromFile(typeof(object).Assembly.Location).FilePath, + MetadataReference.CreateFromFile(typeof(JSFunctionAttribute).Assembly.Location).FilePath, + MetadataReference.CreateFromFile(typeof(JSInvokableAttribute).Assembly.Location).FilePath + }; + } +} diff --git a/src/cs/Bootsharp.Publish.Test/Mock/MockSource.cs b/src/cs/Bootsharp.Publish.Test/Mock/MockSource.cs new file mode 100644 index 00000000..ce63c96d --- /dev/null +++ b/src/cs/Bootsharp.Publish.Test/Mock/MockSource.cs @@ -0,0 +1,3 @@ +namespace Bootsharp.Publish.Test; + +public record MockSource (string Namespace, string Code, bool WrapInClass); diff --git a/DotNet/Packer.Test/Packer.Test.csproj b/src/cs/Bootsharp.Publish.Test/Packer.Test.csproj similarity index 100% rename from DotNet/Packer.Test/Packer.Test.csproj rename to src/cs/Bootsharp.Publish.Test/Packer.Test.csproj diff --git a/src/cs/Bootsharp.Publish.Test/Prepare/ExportTest.cs b/src/cs/Bootsharp.Publish.Test/Prepare/ExportTest.cs new file mode 100644 index 00000000..6a074244 --- /dev/null +++ b/src/cs/Bootsharp.Publish.Test/Prepare/ExportTest.cs @@ -0,0 +1,186 @@ +namespace Bootsharp.Publish.Test; + +public class ExportTest : PrepareTest +{ + protected override string TestedContent => GeneratedExports; + + [Fact] + public void WhenNothingInspectedNothingIsGenerated () + { + Execute(); + Assert.Empty(TestedContent); + } + + [Fact] + public void WhenNoInvokablesNothingIsGenerated () + { + AddAssembly(With("[JSFunction] public static void Foo () {}")); + Execute(); + Assert.Empty(TestedContent); + } + + [Fact] + public void ExportsInvokableWithoutSpace () + { + AddAssembly(With( + """ + public class Foo + { + [JSInvokable] public static void Bar () {} + } + """, false)); + Execute(); + Contains( + """ + using System.Runtime.InteropServices.JavaScript; + using static Bootsharp.Serializer; + + namespace Bootsharp.Exports; + + public partial class Foo + { + [System.Runtime.InteropServices.JavaScript.JSExport] internal static void Bar () => global::Foo.Bar(); + } + """); + } + + [Fact] + public void ExportsInvokableFromMultipleSpaces () + { + AddAssembly(With( + """ + namespace Foo.Bar + { + public class Baz + { + [JSInvokable] public static void Nya () {} + } + } + namespace Foo + { + public class Baz + { + [JSInvokable] public static void Nya () {} + } + } + public class Baz + { + [JSInvokable] public static void Nya () {} + } + """, false)); + Execute(); + Contains( + """ + using System.Runtime.InteropServices.JavaScript; + using static Bootsharp.Serializer; + + namespace Bootsharp.Exports; + + public partial class Baz + { + [System.Runtime.InteropServices.JavaScript.JSExport] internal static void Nya () => global::Baz.Nya(); + } + public partial class Foo_Baz + { + [System.Runtime.InteropServices.JavaScript.JSExport] internal static void Nya () => global::Foo.Baz.Nya(); + } + public partial class Foo_Bar_Baz + { + [System.Runtime.InteropServices.JavaScript.JSExport] internal static void Nya () => global::Foo.Bar.Baz.Nya(); + } + """); + } + + [Fact] + public void ExportsMultipleInvokable () + { + AddAssembly(With( + """ + namespace Space; + + public record Info(string Foo); + + public class Foo + { + [JSInvokable] public static void Void () {} + [JSInvokable] public static Info WithArgs (Info a, int[] b) => default; + [JSInvokable] public static Task Async () => default; + [JSInvokable] public static Task AsyncWithArgs (Info? i) => default; + } + """, false)); + Execute(); + Contains( + """ + using System.Runtime.InteropServices.JavaScript; + using static Bootsharp.Serializer; + + namespace Bootsharp.Exports; + + public partial class Space_Foo + { + [System.Runtime.InteropServices.JavaScript.JSExport] internal static void Void () => global::Space.Foo.Void(); + [System.Runtime.InteropServices.JavaScript.JSExport] internal static global::System.String WithArgs (global::System.String a, global::System.Int32[] b) => Serialize(global::Space.Foo.WithArgs(Deserialize(a), b)); + [System.Runtime.InteropServices.JavaScript.JSExport] internal static global::System.Threading.Tasks.Task Async () => global::Space.Foo.Async(); + [System.Runtime.InteropServices.JavaScript.JSExport] internal static async global::System.Threading.Tasks.Task AsyncWithArgs (global::System.String? i) => Serialize(await global::Space.Foo.AsyncWithArgs(Deserialize(i))); + } + """); + } + + [Fact] + public void DoesntSerializeTypesThatShouldNotBeSerialized () + { + AddAssembly(With( + """ + public class Foo + { + [JSInvokable] public static Task Bar (bool a1, byte a2, char a3, short a4, long a5, int a6, float a7, double a8, nint a9, DateTime a10, DateTimeOffset a11, string a12, byte[] a13, int[] a14, double[] a15, string[] a16) => default; + [JSInvokable] public static Task Baz (bool? a1, byte? a2, char? a3, short? a4, long? a5, int? a6, float? a7, double? a8, nint? a9, DateTime? a10, DateTimeOffset? a11, string? a12, byte?[] a13, int?[] a14, double?[] a15, string?[] a16) => default; + } + """, false)); + Execute(); + Contains( + """ + using System.Runtime.InteropServices.JavaScript; + using static Bootsharp.Serializer; + + namespace Bootsharp.Exports; + + public partial class Foo + { + [System.Runtime.InteropServices.JavaScript.JSExport] internal static global::System.Threading.Tasks.Task Bar (global::System.Boolean a1, global::System.Byte a2, global::System.Char a3, global::System.Int16 a4, [JSMarshalAs] global::System.Int64 a5, global::System.Int32 a6, global::System.Single a7, global::System.Double a8, global::System.IntPtr a9, [JSMarshalAs] global::System.DateTime a10, [JSMarshalAs] global::System.DateTimeOffset a11, global::System.String a12, global::System.Byte[] a13, global::System.Int32[] a14, global::System.Double[] a15, global::System.String[] a16) => global::Foo.Bar(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + [System.Runtime.InteropServices.JavaScript.JSExport] [return: JSMarshalAs>] internal static global::System.Threading.Tasks.Task Baz (global::System.Boolean? a1, global::System.Byte? a2, global::System.Char? a3, global::System.Int16? a4, [JSMarshalAs] global::System.Int64? a5, global::System.Int32? a6, global::System.Single? a7, global::System.Double? a8, global::System.IntPtr? a9, [JSMarshalAs] global::System.DateTime? a10, [JSMarshalAs] global::System.DateTimeOffset? a11, global::System.String? a12, global::System.Byte?[] a13, global::System.Int32?[] a14, global::System.Double?[] a15, global::System.String?[] a16) => global::Foo.Baz(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); + } + """); + } + + [Fact] + public void SerializeTypesThatShouldBeSerialized () + { + AddAssembly(With( + """ + namespace Space; + + public record Info; + + public class Foo + { + [JSInvokable] public static Task A () => default; + [JSInvokable] public static Task B () => default; + } + """, false)); + Execute(); + Contains( + """ + using System.Runtime.InteropServices.JavaScript; + using static Bootsharp.Serializer; + + namespace Bootsharp.Exports; + + public partial class Space_Foo + { + [System.Runtime.InteropServices.JavaScript.JSExport] internal static async global::System.Threading.Tasks.Task A () => Serialize(await global::Space.Foo.A()); + [System.Runtime.InteropServices.JavaScript.JSExport] internal static async global::System.Threading.Tasks.Task B () => Serialize(await global::Space.Foo.B()); + } + """); + } +} diff --git a/src/cs/Bootsharp.Publish.Test/Prepare/ImportTest.cs b/src/cs/Bootsharp.Publish.Test/Prepare/ImportTest.cs new file mode 100644 index 00000000..37d38803 --- /dev/null +++ b/src/cs/Bootsharp.Publish.Test/Prepare/ImportTest.cs @@ -0,0 +1,213 @@ +namespace Bootsharp.Publish.Test; + +public class ImportTest : PrepareTest +{ + protected override string TestedContent => GeneratedImports; + + [Fact] + public void WhenNothingInspectedNothingIsGenerated () + { + Execute(); + Assert.Empty(TestedContent); + } + + [Fact] + public void WhenNoFunctionsOrEventsNothingIsGenerated () + { + AddAssembly(With("[JSInvokable] public static void Foo () {}")); + Execute(); + Assert.Empty(TestedContent); + } + + [Fact] + public void ImportsWithoutSpace () + { + AddAssembly("asm.dll", With( + """ + public class Foo + { + [JSFunction] public static void Bar () {} + [JSEvent] public static void Baz () {} + } + """, false)); + Execute(); + Contains( + """ + using System.Diagnostics.CodeAnalysis; + using System.Runtime.CompilerServices; + using System.Runtime.InteropServices.JavaScript; + + namespace Bootsharp.Imports; + + public partial class Foo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Bootsharp.Imports.Foo", "asm")] + internal static void RegisterDynamicDependencies () + { + Function.Set("Global.bar", Bar); + Function.Set("Global.baz", Baz); + } + [System.Runtime.InteropServices.JavaScript.JSImport("Global.barSerialized", "Bootsharp")] internal static partial void Bar (); + [System.Runtime.InteropServices.JavaScript.JSImport("Global.bazSerialized", "Bootsharp")] internal static partial void Baz (); + } + """); + } + + [Fact] + public void ImportsFromMultipleSpaces () + { + AddAssembly("asm.dll", With( + """ + namespace Foo.Bar + { + public class Baz + { + [JSFunction] public static void Nya () {} + [JSEvent] public static void Far () {} + } + } + namespace Foo + { + public class Baz + { + [JSFunction] public static void Nya () {} + [JSEvent] public static void Far () {} + } + } + public class Baz + { + [JSFunction] public static void Nya () {} + [JSEvent] public static void Far () {} + } + """, false)); + Execute(); + Contains( + """ + using System.Diagnostics.CodeAnalysis; + using System.Runtime.CompilerServices; + using System.Runtime.InteropServices.JavaScript; + + namespace Bootsharp.Imports; + + public partial class Baz + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Bootsharp.Imports.Baz", "asm")] + internal static void RegisterDynamicDependencies () + { + Function.Set("Global.nya", Nya); + Function.Set("Global.far", Far); + } + [System.Runtime.InteropServices.JavaScript.JSImport("Global.nyaSerialized", "Bootsharp")] internal static partial void Nya (); + [System.Runtime.InteropServices.JavaScript.JSImport("Global.farSerialized", "Bootsharp")] internal static partial void Far (); + } + public partial class Foo_Baz + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Bootsharp.Imports.Foo_Baz", "asm")] + internal static void RegisterDynamicDependencies () + { + Function.Set("Foo.nya", Nya); + Function.Set("Foo.far", Far); + } + [System.Runtime.InteropServices.JavaScript.JSImport("Foo.nyaSerialized", "Bootsharp")] internal static partial void Nya (); + [System.Runtime.InteropServices.JavaScript.JSImport("Foo.farSerialized", "Bootsharp")] internal static partial void Far (); + } + public partial class Foo_Bar_Baz + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Bootsharp.Imports.Foo_Bar_Baz", "asm")] + internal static void RegisterDynamicDependencies () + { + Function.Set("Foo.Bar.nya", Nya); + Function.Set("Foo.Bar.far", Far); + } + [System.Runtime.InteropServices.JavaScript.JSImport("Foo.Bar.nyaSerialized", "Bootsharp")] internal static partial void Nya (); + [System.Runtime.InteropServices.JavaScript.JSImport("Foo.Bar.farSerialized", "Bootsharp")] internal static partial void Far (); + } + """); + } + + [Fact] + public void ImportsFunctionsAndEvents () + { + AddAssembly("asm.dll", With( + """ + namespace Space; + + public record Info(string Foo); + + public class Foo + { + [JSFunction] public static Info Bar (string a, int[] b) => default; + [JSFunction] public static Task Baz () => default; + [JSFunction] public static Task Nya (Info a) => default; + [JSEvent] public static void OnBar (Info? a, bool? b) {} + } + """, false)); + Execute(); + Contains( + """ + using System.Diagnostics.CodeAnalysis; + using System.Runtime.CompilerServices; + using System.Runtime.InteropServices.JavaScript; + + namespace Bootsharp.Imports; + + public partial class Space_Foo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Bootsharp.Imports.Space_Foo", "asm")] + internal static void RegisterDynamicDependencies () + { + Function.Set("Space.bar", Bar); + Function.Set("Space.baz", Baz); + Function.Set("Space.nya", Nya); + Function.Set("Space.onBar", OnBar); + } + [System.Runtime.InteropServices.JavaScript.JSImport("Space.barSerialized", "Bootsharp")] internal static partial global::System.String Bar (global::System.String a, global::System.Int32[] b); + [System.Runtime.InteropServices.JavaScript.JSImport("Space.bazSerialized", "Bootsharp")] internal static partial global::System.Threading.Tasks.Task Baz (); + [System.Runtime.InteropServices.JavaScript.JSImport("Space.nyaSerialized", "Bootsharp")] internal static partial global::System.Threading.Tasks.Task Nya (global::System.String a); + [System.Runtime.InteropServices.JavaScript.JSImport("Space.onBarSerialized", "Bootsharp")] internal static partial void OnBar (global::System.String? a, global::System.Boolean? b); + } + """); + } + + [Fact] + public void DoesntSerializeTypesThatShouldNotBeSerialized () + { + AddAssembly("asm.dll", With( + """ + namespace Space; + + public class Foo + { + [JSFunction] public static Task Bar (bool a1, byte a2, char a3, short a4, long a5, int a6, float a7, double a8, nint a9, DateTime a10, DateTimeOffset a11, string a12, byte[] a13, int[] a14, double[] a15, string[] a16) => default; + [JSFunction] public static Task Baz (bool? a1, byte? a2, char? a3, short? a4, long? a5, int? a6, float? a7, double? a8, nint? a9, DateTime? a10, DateTimeOffset? a11, string? a12, byte?[] a13, int?[] a14, double?[] a15, string?[] a16) => default; + } + """, false)); + Execute(); + Contains( + """ + using System.Diagnostics.CodeAnalysis; + using System.Runtime.CompilerServices; + using System.Runtime.InteropServices.JavaScript; + + namespace Bootsharp.Imports; + + public partial class Space_Foo + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Bootsharp.Imports.Space_Foo", "asm")] + internal static void RegisterDynamicDependencies () + { + Function.Set("Space.bar", Bar); + Function.Set("Space.baz", Baz); + } + [System.Runtime.InteropServices.JavaScript.JSImport("Space.barSerialized", "Bootsharp")] internal static partial global::System.Threading.Tasks.Task Bar (global::System.Boolean a1, global::System.Byte a2, global::System.Char a3, global::System.Int16 a4, [JSMarshalAs] global::System.Int64 a5, global::System.Int32 a6, global::System.Single a7, global::System.Double a8, global::System.IntPtr a9, [JSMarshalAs] global::System.DateTime a10, [JSMarshalAs] global::System.DateTimeOffset a11, global::System.String a12, global::System.Byte[] a13, global::System.Int32[] a14, global::System.Double[] a15, global::System.String[] a16); + [System.Runtime.InteropServices.JavaScript.JSImport("Space.bazSerialized", "Bootsharp")] [return: JSMarshalAs>] internal static partial global::System.Threading.Tasks.Task Baz (global::System.Boolean? a1, global::System.Byte? a2, global::System.Char? a3, global::System.Int16? a4, [JSMarshalAs] global::System.Int64? a5, global::System.Int32? a6, global::System.Single? a7, global::System.Double? a8, global::System.IntPtr? a9, [JSMarshalAs] global::System.DateTime? a10, [JSMarshalAs] global::System.DateTimeOffset? a11, global::System.String? a12, global::System.Byte?[] a13, global::System.Int32?[] a14, global::System.Double?[] a15, global::System.String?[] a16); + } + """); + } +} diff --git a/src/cs/Bootsharp.Publish.Test/Prepare/PrepareTest.cs b/src/cs/Bootsharp.Publish.Test/Prepare/PrepareTest.cs new file mode 100644 index 00000000..e26c05f8 --- /dev/null +++ b/src/cs/Bootsharp.Publish.Test/Prepare/PrepareTest.cs @@ -0,0 +1,23 @@ +namespace Bootsharp.Publish.Test; + +public class PrepareTest : TaskTest +{ + protected string GeneratedExports => ReadProjectFile(exportPath); + protected string GeneratedImports => ReadProjectFile(importPath); + protected string GeneratedSerializer => ReadProjectFile(serializerPath); + + private string exportPath => $"{Project.Root}/InteropExports.g.cs"; + private string importPath => $"{Project.Root}/InteropImports.g.cs"; + private string serializerPath => $"{Project.Root}/SerializerContext.g.cs"; + + public override void Execute () => CreateTask().Execute(); + + private PrepareBootsharp CreateTask () => new() { + InspectedDirectory = Project.Root, + EntryAssemblyName = LastAddedAssemblyName ?? "System.Runtime.dll", + ExportsFilePath = exportPath, + ImportsFilePath = importPath, + SerializerFilePath = serializerPath, + BuildEngine = Engine + }; +} diff --git a/src/cs/Bootsharp.Publish.Test/Prepare/SerializerTest.cs b/src/cs/Bootsharp.Publish.Test/Prepare/SerializerTest.cs new file mode 100644 index 00000000..0662bd64 --- /dev/null +++ b/src/cs/Bootsharp.Publish.Test/Prepare/SerializerTest.cs @@ -0,0 +1,121 @@ +namespace Bootsharp.Publish.Test; + +public class SerializerTest : PrepareTest +{ + protected override string TestedContent => GeneratedSerializer; + + [Fact] + public void WhenNothingInspectedIsEmpty () + { + Execute(); + Assert.Empty(TestedContent); + } + + [Fact] + public void WhenNoSerializableTypesIsEmpty () + { + AddAssembly( + With("[JSInvokable] public static bool? Foo (string a, int b, char c, DateTime d, DateTimeOffset e) => default;"), + With("[JSInvokable] public static byte[] Bar (int[] a, double[] b, string[] c) => default;") + ); + Execute(); + Assert.Empty(TestedContent); + } + + [Fact] + public void AssignsTypeInfoResolver () + { + AddAssembly( + With("n", "public record Info;", false), + With("n", "[JSInvokable] public static void Foo (Info i) {}")); + Execute(); + Contains( + """ + [System.Runtime.CompilerServices.ModuleInitializer] + internal static void InjectTypeInfoResolver () + { + Serializer.Options.TypeInfoResolverChain.Add(SerializerContext.Default); + } + """); + } + + [Fact] // .NET's generator indexes types by short names (w/o namespace) and fails on duplicates. + public void AddsOnlyTopLevelTypesAndCrawledDuplicates () + { + AddAssembly( + With("y", "public struct Struct { public double A { get; set; } }", false), + With("n", "public struct Struct { public y.Struct S { get; set; } }", false), + With("n", "public readonly struct ReadonlyStruct { public double A { get; init; } }", false), + With("n", "public readonly record struct ReadonlyRecordStruct(double A);", false), + With("n", "public record class RecordClass(double A);", false), + With("n", "public enum Enum { A, B }", false), + With("n", "public class Foo { public Struct S { get; } public ReadonlyStruct Rs { get; } }", false), + With("n", "public class Bar : Foo { public ReadonlyRecordStruct Rrs { get; } public RecordClass Rc { get; } }"), + With("n", "public class Baz { public List Bars { get; } public Enum E { get; } }", false), + With("n", "[JSInvokable] public static Baz? GetBaz () => default;")); + Execute(); + Assert.Equal(2, Matches("JsonSerializable").Count); + Contains("[JsonSerializable(typeof(global::n.Baz)"); + Contains("[JsonSerializable(typeof(global::y.Struct)"); + } + + [Fact] + public void AddsProxiesForListInterface () + { + AddAssembly(With("[JSInvokable] public static void Foo (IList a) {}")); + Execute(); + Contains("[JsonSerializable(typeof(global::System.Collections.Generic.IList)"); + Contains("[JsonSerializable(typeof(global::System.Collections.Generic.List)"); + Contains("[JsonSerializable(typeof(global::System.String[])"); + } + + [Fact] + public void AddsProxiesForReadOnlyListInterface () + { + AddAssembly(With("[JSInvokable] public static void Foo (IReadOnlyList a) {}")); + Execute(); + Contains("[JsonSerializable(typeof(global::System.Collections.Generic.IReadOnlyList)"); + Contains("[JsonSerializable(typeof(global::System.Collections.Generic.List)"); + Contains("[JsonSerializable(typeof(global::System.String[])"); + } + + [Fact] + public void AddsProxiesForDictInterface () + { + AddAssembly(With("[JSInvokable] public static void Foo (IDictionary a) {}")); + Execute(); + Contains("[JsonSerializable(typeof(global::System.Collections.Generic.IDictionary)"); + Contains("[JsonSerializable(typeof(global::System.Collections.Generic.Dictionary)"); + } + + [Fact] + public void AddsProxiesForReadOnlyDictInterface () + { + AddAssembly(With("[JSInvokable] public static void Foo (IReadOnlyDictionary a) {}")); + Execute(); + Contains("[JsonSerializable(typeof(global::System.Collections.Generic.IReadOnlyDictionary)"); + Contains("[JsonSerializable(typeof(global::System.Collections.Generic.Dictionary)"); + } + + [Fact] + public void DoesntAddProxiesForTaskWithoutResult () + { + AddAssembly(With("[JSInvokable] public static Task Foo (Task bar) => default;")); + Execute(); + Assert.Empty(TestedContent); + } + + [Fact] + public void AddsProxiesForTaskWithResult () + { + AddAssembly( + With("public record Info;", false), + With("[JSInvokable] public static Task Foo () => default;"), + With("[JSInvokable] public static Task> Bar () => default;")); + Execute(); + Contains("[JsonSerializable(typeof((global::Info, byte))"); + Contains("[JsonSerializable(typeof((global::System.Collections.Generic.IReadOnlyList, byte))"); + Contains("[JsonSerializable(typeof(global::System.Collections.Generic.List)"); + Contains("[JsonSerializable(typeof(global::System.Boolean[])"); + } +} diff --git a/src/cs/Bootsharp.Publish.Test/TaskTest.cs b/src/cs/Bootsharp.Publish.Test/TaskTest.cs new file mode 100644 index 00000000..90ac582e --- /dev/null +++ b/src/cs/Bootsharp.Publish.Test/TaskTest.cs @@ -0,0 +1,54 @@ +using System.Text.RegularExpressions; +using Microsoft.Build.Utilities.ProjectCreation; + +namespace Bootsharp.Publish.Test; + +public abstract class TaskTest : IDisposable +{ + protected MockProject Project { get; } = new(); + protected BuildEngine Engine { get; } = BuildEngine.Create(); + protected string LastAddedAssemblyName { get; private set; } + protected virtual string TestedContent { get; } = ""; + + public virtual void Dispose () => Project.Dispose(); + + public abstract void Execute (); + + protected void AddAssembly (string assemblyName, params MockSource[] sources) + { + LastAddedAssemblyName = assemblyName; + Project.AddAssembly(new(assemblyName, sources)); + } + + protected void AddAssembly (params MockSource[] sources) + { + AddAssembly($"MockAssembly{Guid.NewGuid():N}.dll", sources); + } + + protected MockSource With (string @namespace, string code, bool wrapInClass = true) + { + return new(@namespace, code, wrapInClass); + } + + protected MockSource With (string code, bool wrapInClass = true) + { + return With(null, code, wrapInClass); + } + + protected void Contains (string content) + { + Assert.Contains(content, TestedContent); + } + + protected MatchCollection Matches (string pattern) + { + Assert.Matches(pattern, TestedContent); + return Regex.Matches(TestedContent, pattern); + } + + protected string ReadProjectFile (string fileName) + { + var filePath = Path.Combine(Project.Root, fileName); + return File.Exists(filePath) ? File.ReadAllText(filePath) : null; + } +} diff --git a/src/cs/Bootsharp.Publish/AssemblyInspector/Argument.cs b/src/cs/Bootsharp.Publish/AssemblyInspector/Argument.cs new file mode 100644 index 00000000..98c55f31 --- /dev/null +++ b/src/cs/Bootsharp.Publish/AssemblyInspector/Argument.cs @@ -0,0 +1,12 @@ +namespace Bootsharp.Publish; + +internal record Argument +{ + public required string Name { get; init; } + public required Type Type { get; init; } + public required string TypeSyntax { get; init; } + public required bool Nullable { get; init; } + public required bool ShouldSerialize { get; init; } + + public override string ToString () => $"{Name}: {TypeSyntax}"; +} diff --git a/src/cs/Bootsharp.Publish/AssemblyInspector/Assembly.cs b/src/cs/Bootsharp.Publish/AssemblyInspector/Assembly.cs new file mode 100644 index 00000000..64163b50 --- /dev/null +++ b/src/cs/Bootsharp.Publish/AssemblyInspector/Assembly.cs @@ -0,0 +1,3 @@ +namespace Bootsharp.Publish; + +internal record Assembly (string Name, byte[] Bytes); diff --git a/DotNet/Packer/AssemblyInspector/AssemblyInspector.cs b/src/cs/Bootsharp.Publish/AssemblyInspector/AssemblyInspector.cs similarity index 72% rename from DotNet/Packer/AssemblyInspector/AssemblyInspector.cs rename to src/cs/Bootsharp.Publish/AssemblyInspector/AssemblyInspector.cs index f83bf97a..b24cd6da 100644 --- a/DotNet/Packer/AssemblyInspector/AssemblyInspector.cs +++ b/src/cs/Bootsharp.Publish/AssemblyInspector/AssemblyInspector.cs @@ -1,16 +1,10 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; +using System.Reflection; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; -using static Packer.TextUtilities; -using static Packer.TypeUtilities; -namespace Packer; +namespace Bootsharp.Publish; -internal class AssemblyInspector : IDisposable +internal sealed class AssemblyInspector (NamespaceBuilder spaceBuilder) : IDisposable { public List Assemblies { get; } = new(); public List Methods { get; } = new(); @@ -22,14 +16,7 @@ internal class AssemblyInspector : IDisposable private readonly List warnings = new(); private readonly List contexts = new(); - private readonly NamespaceBuilder spaceBuilder; - private readonly TypeConverter typeConverter; - - public AssemblyInspector (NamespaceBuilder spaceBuilder) - { - this.spaceBuilder = spaceBuilder; - typeConverter = new TypeConverter(spaceBuilder); - } + private readonly TypeConverter typeConverter = new(spaceBuilder); public void InspectInDirectory (string directory) { @@ -43,7 +30,7 @@ public void InspectInDirectory (string directory) public void Report (TaskLoggingHelper logger) { - logger.LogMessage(MessageImportance.Normal, "DotNetJS assembly inspection result:"); + logger.LogMessage(MessageImportance.Normal, "Bootsharp assembly inspection result:"); logger.LogMessage(MessageImportance.Normal, JoinLines($"Discovered {Assemblies.Count} assemblies:", JoinLines(Assemblies.Select(a => a.Name)))); logger.LogMessage(MessageImportance.Normal, JoinLines($"Discovered {Methods.Count} JS methods:", @@ -100,20 +87,36 @@ private void InspectMethodWithAttribute (MethodInfo method, string attributeName } private Method CreateMethod (MethodInfo info, MethodType type) => new() { - Name = info.Name, + Type = type, Assembly = info.DeclaringType!.Assembly.GetName().Name!, - Namespace = spaceBuilder.Build(info.DeclaringType), + DeclaringName = info.DeclaringType.FullName!, + Name = info.Name, Arguments = info.GetParameters().Select(CreateArgument).ToArray(), - ReturnType = typeConverter.ToTypeScript(info.ReturnType, GetNullability(info.ReturnParameter)), - ReturnNullable = IsNullable(info), - Async = IsAwaitable(info.ReturnType), - Type = type + ReturnType = info.ReturnType, + ReturnTypeSyntax = BuildSyntax(info.ReturnType, info.ReturnParameter), + ReturnsVoid = IsVoid(info.ReturnType), + ReturnsNullable = IsNullable(info), + ReturnsTaskLike = IsTaskLike(info.ReturnType), + ShouldSerializeReturnType = ShouldSerialize(info.ReturnType), + JSSpace = spaceBuilder.Build(info.DeclaringType), + JSArguments = info.GetParameters().Select(CreateJSArgument).ToArray(), + JSReturnTypeSyntax = typeConverter.ToTypeScript(info.ReturnType, GetNullability(info.ReturnParameter)) }; private Argument CreateArgument (ParameterInfo info) => new() { + Name = info.Name!, + Type = info.ParameterType, + TypeSyntax = BuildSyntax(info.ParameterType, info), + Nullable = IsNullable(info), + ShouldSerialize = ShouldSerialize(info.ParameterType) + }; + + private Argument CreateJSArgument (ParameterInfo info) => new() { Name = info.Name == "function" ? "fn" : info.Name!, - Type = typeConverter.ToTypeScript(info.ParameterType, GetNullability(info)), - Nullable = IsNullable(info) + Type = info.ParameterType, + TypeSyntax = typeConverter.ToTypeScript(info.ParameterType, GetNullability(info)), + Nullable = IsNullable(info), + ShouldSerialize = ShouldSerialize(info.ParameterType) }; private static IEnumerable GetStaticMethods (System.Reflection.Assembly assembly) diff --git a/src/cs/Bootsharp.Publish/AssemblyInspector/Method.cs b/src/cs/Bootsharp.Publish/AssemblyInspector/Method.cs new file mode 100644 index 00000000..49d44e40 --- /dev/null +++ b/src/cs/Bootsharp.Publish/AssemblyInspector/Method.cs @@ -0,0 +1,25 @@ +namespace Bootsharp.Publish; + +internal record Method +{ + public required MethodType Type { get; init; } + public required string Assembly { get; init; } + public required string DeclaringName { get; init; } + public required string Name { get; init; } + public required IReadOnlyList Arguments { get; init; } + public required Type ReturnType { get; init; } + public required string ReturnTypeSyntax { get; init; } + public required bool ReturnsVoid { get; init; } + public required bool ReturnsNullable { get; init; } + public required bool ReturnsTaskLike { get; init; } + public required bool ShouldSerializeReturnType { get; init; } + public required string JSSpace { get; init; } + public required IReadOnlyList JSArguments { get; init; } + public required string JSReturnTypeSyntax { get; init; } + + public override string ToString () + { + var args = string.Join(", ", Arguments.Select(a => a.ToString())); + return $"[{Type}] {Assembly}.{DeclaringName}.{Name} ({args}) => {ReturnTypeSyntax}"; + } +} diff --git a/DotNet/Packer/AssemblyInspector/MethodType.cs b/src/cs/Bootsharp.Publish/AssemblyInspector/MethodType.cs similarity index 68% rename from DotNet/Packer/AssemblyInspector/MethodType.cs rename to src/cs/Bootsharp.Publish/AssemblyInspector/MethodType.cs index 85477055..11ea5cbf 100644 --- a/DotNet/Packer/AssemblyInspector/MethodType.cs +++ b/src/cs/Bootsharp.Publish/AssemblyInspector/MethodType.cs @@ -1,4 +1,4 @@ -namespace Packer; +namespace Bootsharp.Publish; internal enum MethodType { diff --git a/src/cs/Bootsharp.Publish/BindingGenerator/Binding.cs b/src/cs/Bootsharp.Publish/BindingGenerator/Binding.cs new file mode 100644 index 00000000..b3455e3c --- /dev/null +++ b/src/cs/Bootsharp.Publish/BindingGenerator/Binding.cs @@ -0,0 +1,3 @@ +namespace Bootsharp.Publish; + +internal record Binding (Method? Method, Type? Enum, string Namespace); diff --git a/src/cs/Bootsharp.Publish/BindingGenerator/BindingGenerator.cs b/src/cs/Bootsharp.Publish/BindingGenerator/BindingGenerator.cs new file mode 100644 index 00000000..2d7717da --- /dev/null +++ b/src/cs/Bootsharp.Publish/BindingGenerator/BindingGenerator.cs @@ -0,0 +1,138 @@ +using System.Text; + +namespace Bootsharp.Publish; + +internal sealed class BindingGenerator (NamespaceBuilder spaceBuilder) +{ + private readonly StringBuilder builder = new(); + + private Binding binding => bindings[index]; + private Binding? prevBinding => index == 0 ? null : bindings[index - 1]; + private Binding? nextBinding => index == bindings.Length - 1 ? null : bindings[index + 1]; + + private Binding[] bindings = null!; + private int index, level; + + public string Generate (AssemblyInspector inspector) + { + bindings = inspector.Methods + .Select(m => new Binding(m, null, m.JSSpace)) + .Concat(inspector.Types.Where(t => t.IsEnum) + .Select(t => new Binding(null, t, spaceBuilder.Build(t)))) + .OrderBy(m => m.Namespace).ToArray(); + if (bindings.Length == 0) return ""; + EmitImports(); + for (index = 0; index < bindings.Length; index++) + EmitBinding(); + return builder.ToString(); + } + + private void EmitImports () + { + builder.Append("import { exports } from \"./exports\";\n"); + builder.Append("import { Event } from \"./event\";\n"); + builder.Append("function getExports () { if (exports == null) throw Error(\"Boot the runtime before invoking C# APIs.\"); return exports; }\n"); + builder.Append("function serialize(obj) { return JSON.stringify(obj); }\n"); + builder.Append("function deserialize(json) { const result = JSON.parse(json); if (result === null) return undefined; return result; }\n"); + } + + private void EmitBinding () + { + if (ShouldOpenNamespace()) OpenNamespace(); + if (binding.Method != null) EmitMethod(binding.Method); + else EmitEnum(binding.Enum!); + if (ShouldCloseNamespace()) CloseNamespace(); + } + + private bool ShouldOpenNamespace () + { + if (prevBinding is null) return true; + return prevBinding.Namespace != binding.Namespace; + } + + private void OpenNamespace () + { + level = binding.Namespace.Count(c => c == '.'); + var prevParts = prevBinding?.Namespace.Split('.') ?? Array.Empty(); + var parts = binding.Namespace.Split('.'); + for (var i = 0; i < parts.Length; i++) + if (prevParts.ElementAtOrDefault(i) == parts[i]) continue; + else if (i == 0) builder.Append($"\nexport const {parts[i]} = {{"); + else builder.Append($"{Comma()}\n{Pad(i)}{parts[i]}: {{"); + } + + private bool ShouldCloseNamespace () + { + if (nextBinding is null) return true; + return nextBinding.Namespace != binding.Namespace; + } + + private void CloseNamespace () + { + var target = nextBinding is null ? 0 : nextBinding.Namespace.Count(c => c == '.'); + for (; level >= target; level--) + if (level == 0) builder.Append("\n};"); + else builder.Append($"\n{Pad(level)}}}"); + } + + private void EmitMethod (Method method) + { + if (method.Type == MethodType.Invokable) EmitInvokable(method); + else if (method.Type == MethodType.Function) EmitFunction(method); + else EmitEvent(method); + } + + private void EmitInvokable (Method method) + { + var wait = ShouldWait(method); + var endpoint = $"getExports().{method.DeclaringName.Replace('.', '_')}.{method.Name}"; + var funcArgs = string.Join(", ", method.JSArguments.Select(a => a.Name)); + var invArgs = string.Join(", ", method.JSArguments.Select(arg => + arg.ShouldSerialize ? $"serialize({arg.Name})" : arg.Name + )); + var body = $"{(wait ? "await " : "")}{endpoint}({invArgs})"; + if (method.ShouldSerializeReturnType) body = $"deserialize({body})"; + var func = $"{(wait ? "async " : "")}({funcArgs}) => {body}"; + builder.Append($"{Comma()}\n{Pad(level + 1)}{ToFirstLower(method.Name)}: {func}"); + } + + private void EmitFunction (Method method) + { + var wait = ShouldWait(method); + var name = ToFirstLower(method.Name); + var funcArgs = string.Join(", ", method.JSArguments.Select(a => a.Name)); + var invArgs = string.Join(", ", method.JSArguments.Select(arg => + arg.ShouldSerialize ? $"deserialize({arg.Name})" : arg.Name + )); + var body = $"{(wait ? "await " : "")}this.{name}Handler({invArgs})"; + if (method.ShouldSerializeReturnType) body = $"serialize({body})"; + var set = $"this.{name}Handler = handler; this.{name}SerializedHandler = {(wait ? "async " : "")}({funcArgs}) => {body};"; + var error = $"throw Error(\"Failed to invoke '{binding.Namespace}.{name}' from C#. Make sure to assign function in JavaScript.\")"; + var serde = $"if (typeof this.{name}Handler !== \"function\") {error}; return this.{name}SerializedHandler;"; + builder.Append($"{Comma()}\n{Pad(level + 1)}get {name}() {{ return this.{name}Handler; }}"); + builder.Append($"{Comma()}\n{Pad(level + 1)}set {name}(handler) {{ {set} }}"); + builder.Append($"{Comma()}\n{Pad(level + 1)}get {name}Serialized() {{ {serde} }}"); + } + + private void EmitEvent (Method method) + { + var name = ToFirstLower(method.Name); + builder.Append($"{Comma()}\n{Pad(level + 1)}{name}: new Event()"); + var funcArgs = string.Join(", ", method.JSArguments.Select(a => a.Name)); + var invArgs = string.Join(", ", method.JSArguments.Select(arg => arg.ShouldSerialize ? $"deserialize({arg.Name})" : arg.Name)); + builder.Append($"{Comma()}\n{Pad(level + 1)}{name}Serialized: ({funcArgs}) => {method.JSSpace}.{name}.broadcast({invArgs})"); + } + + private void EmitEnum (Type @enum) + { + var values = Enum.GetNames(@enum); + var fields = string.Join(", ", + values.Select((v, i) => $"\"{i}\": \"{v}\"") + .Concat(values.Select((v, i) => $"\"{v}\": {i}"))); + builder.Append($"{Comma()}\n{Pad(level + 1)}{@enum.Name}: {{ {fields} }}"); + } + + private string Pad (int level) => new(' ', level * 4); + private string Comma () => builder[^1] == '{' ? "" : ","; + private bool ShouldWait (Method method) => (method.JSArguments.Any(a => a.ShouldSerialize) || method.ShouldSerializeReturnType) && method.ReturnsTaskLike; +} diff --git a/src/cs/Bootsharp.Publish/Bootsharp.Publish.csproj b/src/cs/Bootsharp.Publish/Bootsharp.Publish.csproj new file mode 100644 index 00000000..5bda3151 --- /dev/null +++ b/src/cs/Bootsharp.Publish/Bootsharp.Publish.csproj @@ -0,0 +1,17 @@ + + + + net8.0 + enable + enable + false + + + + + + + + + + diff --git a/src/cs/Bootsharp.Publish/BuildBootsharp.cs b/src/cs/Bootsharp.Publish/BuildBootsharp.cs new file mode 100644 index 00000000..c0ee09d9 --- /dev/null +++ b/src/cs/Bootsharp.Publish/BuildBootsharp.cs @@ -0,0 +1,66 @@ +using Microsoft.Build.Framework; + +namespace Bootsharp.Publish; + +public sealed class BuildBootsharp : Microsoft.Build.Utilities.Task +{ + [Required] public required string BuildDirectory { get; set; } + [Required] public required string InspectedDirectory { get; set; } + [Required] public required string EntryAssemblyName { get; set; } + [Required] public required bool TrimmingEnabled { get; set; } + [Required] public required bool EmbedBinaries { get; set; } + [Required] public required bool Threading { get; set; } + + public override bool Execute () + { + var spaceBuilder = CreateNamespaceBuilder(); + using var inspector = InspectAssemblies(spaceBuilder); + GenerateBindings(inspector, spaceBuilder); + GenerateDeclarations(inspector, spaceBuilder); + GenerateResources(inspector); + PatchModules(); + return true; + } + + private NamespaceBuilder CreateNamespaceBuilder () + { + var builder = new NamespaceBuilder(); + builder.CollectConverters(InspectedDirectory, EntryAssemblyName); + return builder; + } + + private AssemblyInspector InspectAssemblies (NamespaceBuilder spaceBuilder) + { + var inspector = new AssemblyInspector(spaceBuilder); + inspector.InspectInDirectory(InspectedDirectory); + inspector.Report(Log); + return inspector; + } + + private void GenerateBindings (AssemblyInspector inspector, NamespaceBuilder spaceBuilder) + { + var generator = new BindingGenerator(spaceBuilder); + var content = generator.Generate(inspector); + File.WriteAllText(Path.Combine(BuildDirectory, "bindings.g.js"), content); + } + + private void GenerateDeclarations (AssemblyInspector inspector, NamespaceBuilder spaceBuilder) + { + var generator = new DeclarationGenerator(spaceBuilder); + var content = generator.Generate(inspector); + File.WriteAllText(Path.Combine(BuildDirectory, "bindings.g.d.ts"), content); + } + + private void GenerateResources (AssemblyInspector inspector) + { + var generator = new ResourceGenerator(EntryAssemblyName, BuildDirectory, EmbedBinaries); + var content = generator.Generate(inspector); + File.WriteAllText(Path.Combine(BuildDirectory, "resources.g.js"), content); + } + + private void PatchModules () + { + var patcher = new ModulePatcher(BuildDirectory, Threading, EmbedBinaries, TrimmingEnabled); + patcher.Patch(); + } +} diff --git a/src/cs/Bootsharp.Publish/DeclarationGenerator/DeclarationGenerator.cs b/src/cs/Bootsharp.Publish/DeclarationGenerator/DeclarationGenerator.cs new file mode 100644 index 00000000..e6c073c3 --- /dev/null +++ b/src/cs/Bootsharp.Publish/DeclarationGenerator/DeclarationGenerator.cs @@ -0,0 +1,13 @@ +namespace Bootsharp.Publish; + +internal sealed class DeclarationGenerator (NamespaceBuilder spaceBuilder) +{ + private readonly MethodDeclarationGenerator methodsGenerator = new(); + private readonly TypeDeclarationGenerator typesGenerator = new(spaceBuilder); + + public string Generate (AssemblyInspector inspector) => JoinLines(0, + """import type { Event } from "./event";""", + typesGenerator.Generate(inspector.Types), + methodsGenerator.Generate(inspector.Methods) + ) + "\n"; +} diff --git a/DotNet/Packer/DeclarationGenerator/MethodDeclarationGenerator.cs b/src/cs/Bootsharp.Publish/DeclarationGenerator/MethodDeclarationGenerator.cs similarity index 63% rename from DotNet/Packer/DeclarationGenerator/MethodDeclarationGenerator.cs rename to src/cs/Bootsharp.Publish/DeclarationGenerator/MethodDeclarationGenerator.cs index 371db2fa..566b0fbc 100644 --- a/DotNet/Packer/DeclarationGenerator/MethodDeclarationGenerator.cs +++ b/src/cs/Bootsharp.Publish/DeclarationGenerator/MethodDeclarationGenerator.cs @@ -1,11 +1,8 @@ -using System.Collections.Generic; -using System.Linq; -using System.Text; -using static Packer.TextUtilities; +using System.Text; -namespace Packer; +namespace Bootsharp.Publish; -internal class MethodDeclarationGenerator +internal sealed class MethodDeclarationGenerator { private readonly StringBuilder builder = new(); @@ -18,7 +15,7 @@ internal class MethodDeclarationGenerator public string Generate (IEnumerable sourceMethods) { - methods = sourceMethods.OrderBy(m => m.Namespace).ToArray(); + methods = sourceMethods.OrderBy(m => m.JSSpace).ToArray(); for (index = 0; index < methods.Length; index++) DeclareMethod(); return builder.ToString(); @@ -36,18 +33,18 @@ private void DeclareMethod () private bool ShouldOpenNamespace () { if (prevMethod is null) return true; - return prevMethod.Namespace != method.Namespace; + return prevMethod.JSSpace != method.JSSpace; } private void OpenNamespace () { - builder.Append($"\nexport namespace {method.Namespace} {{"); + builder.Append($"\nexport namespace {method.JSSpace} {{"); } private bool ShouldCloseNamespace () { if (nextMethod is null) return true; - return nextMethod.Namespace != method.Namespace; + return nextMethod.JSSpace != method.JSSpace; } private void CloseNamespace () @@ -58,36 +55,34 @@ private void CloseNamespace () private void DeclareInvokable () { builder.Append($"\n export function {ToFirstLower(method.Name)}("); - builder.AppendJoin(", ", method.Arguments.Select(BuildArgumentDeclaration)); + builder.AppendJoin(", ", method.JSArguments.Select(BuildArgumentDeclaration)); builder.Append($"): {BuildReturnDeclaration(method)};"); } private void DeclareFunction () { builder.Append($"\n export let {ToFirstLower(method.Name)}: ("); - builder.AppendJoin(", ", method.Arguments.Select(BuildArgumentDeclaration)); + builder.AppendJoin(", ", method.JSArguments.Select(BuildArgumentDeclaration)); builder.Append($") => {BuildReturnDeclaration(method)};"); } private void DeclareEvent () { builder.Append($"\n export const {ToFirstLower(method.Name)}: Event<["); - builder.AppendJoin(", ", method.Arguments.Select(BuildType)); + builder.AppendJoin(", ", method.JSArguments.Select(BuildArgumentDeclaration)); builder.Append("]>;"); - - string BuildType (Argument arg) => arg.Type + (arg.Nullable ? " | undefined" : ""); } private string BuildArgumentDeclaration (Argument arg) { - return $"{arg.Name + (arg.Nullable ? "?" : "")}: {arg.Type}"; + return $"{arg.Name}: {arg.TypeSyntax}{(arg.Nullable ? " | undefined" : "")}"; } private string BuildReturnDeclaration (Method method) { - if (!method.ReturnNullable) return method.ReturnType; - if (!method.Async) return $"{method.ReturnType} | null"; - var insertIndex = method.ReturnType.Length - 1; - return method.ReturnType.Insert(insertIndex, " | null"); + if (!method.ReturnsNullable) return method.JSReturnTypeSyntax; + if (!method.ReturnsTaskLike) return $"{method.JSReturnTypeSyntax} | null"; + var insertIndex = method.JSReturnTypeSyntax.Length - 1; + return method.JSReturnTypeSyntax.Insert(insertIndex, " | null"); } } diff --git a/DotNet/Packer/DeclarationGenerator/TypeConverter.cs b/src/cs/Bootsharp.Publish/DeclarationGenerator/TypeConverter.cs similarity index 89% rename from DotNet/Packer/DeclarationGenerator/TypeConverter.cs rename to src/cs/Bootsharp.Publish/DeclarationGenerator/TypeConverter.cs index bb50dfbe..25b1a19d 100644 --- a/DotNet/Packer/DeclarationGenerator/TypeConverter.cs +++ b/src/cs/Bootsharp.Publish/DeclarationGenerator/TypeConverter.cs @@ -1,24 +1,14 @@ -using System; -using System.Collections.Generic; -using System.Linq; using System.Reflection; -using static Packer.TypeUtilities; -namespace Packer; +namespace Bootsharp.Publish; -internal class TypeConverter +internal sealed class TypeConverter (NamespaceBuilder spaceBuilder) { public IReadOnlyCollection CrawledTypes => crawler.Crawled; private readonly TypeCrawler crawler = new(); - private readonly NamespaceBuilder spaceBuilder; private NullabilityInfo? nullability; - public TypeConverter (NamespaceBuilder spaceBuilder) - { - this.spaceBuilder = spaceBuilder; - } - public string ToTypeScript (Type type) => ToTypeScript(type, null); public string ToTypeScript (Type type, NullabilityInfo? nullability) @@ -35,7 +25,7 @@ private string Convert (Type type) if (IsNullable(type)) return ConvertNullable(type); if (IsList(type)) return ConvertList(type); if (IsDictionary(type)) return ConvertDictionary(type); - if (IsAwaitable(type)) return ConvertAwaitable(type); + if (IsTaskLike(type)) return ConvertAwaitable(type); if (type.IsGenericType && CrawledTypes.Contains(type)) return ConvertGeneric(type); return ConvertFinal(type); } @@ -56,6 +46,7 @@ private string ConvertList (Type type) TypeCode.Int16 => "Int16Array", TypeCode.UInt32 => "Uint32Array", TypeCode.Int32 => "Int32Array", + TypeCode.Int64 => "BigInt64Array", _ => $"Array<{Convert(elementType)}>" }; } @@ -78,7 +69,7 @@ private string ConvertGeneric (Type type) { EnterNullability(type); var args = string.Join(", ", type.GenericTypeArguments.Select(Convert)); - return $"{spaceBuilder.Build(type)}.{GetGenericNameWithoutArgs(type)}<{args}>"; + return $"{spaceBuilder.Build(type)}.{GetGenericNameWithoutArgs(type.Name)}<{args}>"; } private string ConvertFinal (Type type) @@ -87,8 +78,9 @@ private string ConvertFinal (Type type) if (CrawledTypes.Contains(type)) return $"{spaceBuilder.Build(type)}.{type.Name}"; return Type.GetTypeCode(type) switch { TypeCode.Byte or TypeCode.SByte or TypeCode.UInt16 or TypeCode.UInt32 or - TypeCode.UInt64 or TypeCode.Int16 or TypeCode.Int32 or TypeCode.Int64 or + TypeCode.UInt64 or TypeCode.Int16 or TypeCode.Int32 or TypeCode.Decimal or TypeCode.Double or TypeCode.Single => "number", + TypeCode.Int64 => "bigint", TypeCode.Char or TypeCode.String => "string", TypeCode.Boolean => "boolean", TypeCode.DateTime => "Date", diff --git a/DotNet/Packer/DeclarationGenerator/TypeCrawler.cs b/src/cs/Bootsharp.Publish/DeclarationGenerator/TypeCrawler.cs similarity index 89% rename from DotNet/Packer/DeclarationGenerator/TypeCrawler.cs rename to src/cs/Bootsharp.Publish/DeclarationGenerator/TypeCrawler.cs index ee091be1..ab17a94b 100644 --- a/DotNet/Packer/DeclarationGenerator/TypeCrawler.cs +++ b/src/cs/Bootsharp.Publish/DeclarationGenerator/TypeCrawler.cs @@ -1,11 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using static Packer.TypeUtilities; +namespace Bootsharp.Publish; -namespace Packer; - -internal class TypeCrawler +internal sealed class TypeCrawler { public IReadOnlyCollection Crawled => crawled; diff --git a/DotNet/Packer/DeclarationGenerator/TypeDeclarationGenerator.cs b/src/cs/Bootsharp.Publish/DeclarationGenerator/TypeDeclarationGenerator.cs similarity index 87% rename from DotNet/Packer/DeclarationGenerator/TypeDeclarationGenerator.cs rename to src/cs/Bootsharp.Publish/DeclarationGenerator/TypeDeclarationGenerator.cs index d782d6a1..a222d5ae 100644 --- a/DotNet/Packer/DeclarationGenerator/TypeDeclarationGenerator.cs +++ b/src/cs/Bootsharp.Publish/DeclarationGenerator/TypeDeclarationGenerator.cs @@ -1,18 +1,12 @@ -using System; -using System.Collections.Generic; -using System.Linq; using System.Reflection; using System.Text; -using static Packer.TypeUtilities; -using static Packer.TextUtilities; -namespace Packer; +namespace Bootsharp.Publish; -internal class TypeDeclarationGenerator +internal sealed class TypeDeclarationGenerator (NamespaceBuilder spaceBuilder) { private readonly StringBuilder builder = new(); - private readonly NamespaceBuilder spaceBuilder; - private readonly TypeConverter converter; + private readonly TypeConverter converter = new(spaceBuilder); private Type type => GetTypeAt(index); private Type? prevType => index == 0 ? null : GetTypeAt(index - 1); @@ -21,12 +15,6 @@ internal class TypeDeclarationGenerator private Type[] types = null!; private int index; - public TypeDeclarationGenerator (NamespaceBuilder spaceBuilder) - { - this.spaceBuilder = spaceBuilder; - converter = new TypeConverter(spaceBuilder); - } - public string Generate (IEnumerable sourceTypes) { types = sourceTypes.OrderBy(GetNamespace).ToArray(); @@ -143,6 +131,6 @@ private string BuildTypeName (Type type) { if (!type.IsGenericType) return type.Name; var args = string.Join(", ", type.GetGenericArguments().Select(a => a.Name)); - return $"{GetGenericNameWithoutArgs(type)}<{args}>"; + return $"{GetGenericNameWithoutArgs(type.Name)}<{args}>"; } } diff --git a/src/cs/Bootsharp.Publish/ModulePatchers/InternalPatcher.cs b/src/cs/Bootsharp.Publish/ModulePatchers/InternalPatcher.cs new file mode 100644 index 00000000..9adc8dfa --- /dev/null +++ b/src/cs/Bootsharp.Publish/ModulePatchers/InternalPatcher.cs @@ -0,0 +1,36 @@ +using System.Diagnostics.CodeAnalysis; +using System.Text; + +namespace Bootsharp.Publish; + +[ExcludeFromCodeCoverage(Justification = "How to merge coverage from multiple OS?")] +internal sealed class InternalPatcher (string dotnet, string runtime, string native) +{ + private readonly string url = Environment.OSVersion.Platform == PlatformID.Win32NT + ? "\"file://dotnet.native.wasm\"" + : "\"file:///dotnet.native.wasm\""; + + public void Patch () + { + // Remove unnecessary environment-specific calls in .NET's internals, + // that are offending bundlers and breaking usage in restricted environments, + // such as VS Code web extensions. (https://github.com/dotnet/runtime/issues/91558) + + File.WriteAllText(dotnet, File.ReadAllText(dotnet, Encoding.UTF8) + .Replace("import.meta.url", url) + .Replace("import(", "import(/*@vite-ignore*//*webpackIgnore:true*/"), Encoding.UTF8); + + File.WriteAllText(runtime, File.ReadAllText(runtime, Encoding.UTF8) + .Replace("pt('WebAssembly resource does not have the expected content type \"application/wasm\", so falling back to slower ArrayBuffer instantiation.')", "true") + .Replace("import(", "import(/*@vite-ignore*//*webpackIgnore:true*/"), Encoding.UTF8); + + File.WriteAllText(native, File.ReadAllText(native, Encoding.UTF8) + .Replace("var _scriptDir = import.meta.url", "var _scriptDir = \"file:/\"") + .Replace("require('url').fileURLToPath(new URL('./', import.meta.url))", "\"./\"") + .Replace("require(\"url\").fileURLToPath(new URL(\"./\",import.meta.url))", "\"./\"") // when aggressive trimming enabled + .Replace("new URL('dotnet.native.wasm', import.meta.url).href", "\"file:/\"") + .Replace("new URL(\"dotnet.native.wasm\",import.meta.url).href", "\"file:/\"") // when aggressive trimming enabled + .Replace("import.meta.url", url) + .Replace("import(", "import(/*@vite-ignore*//*webpackIgnore:true*/"), Encoding.UTF8); + } +} diff --git a/src/cs/Bootsharp.Publish/ModulePatchers/ModulePatcher.cs b/src/cs/Bootsharp.Publish/ModulePatchers/ModulePatcher.cs new file mode 100644 index 00000000..5075cd6e --- /dev/null +++ b/src/cs/Bootsharp.Publish/ModulePatchers/ModulePatcher.cs @@ -0,0 +1,60 @@ +using System.Text; + +namespace Bootsharp.Publish; + +internal sealed class ModulePatcher (string buildDir, bool thread, bool embed, bool trim) +{ + private readonly string dotnet = Path.Combine(buildDir, "dotnet.js"); + private readonly string runtime = Path.Combine(buildDir, "dotnet.runtime.js"); + private readonly string native = Path.Combine(buildDir, "dotnet.native.js"); + private readonly string dotnetGen = Path.Combine(buildDir, "dotnet.g.js"); + private readonly string runtimeGen = Path.Combine(buildDir, "dotnet.runtime.g.js"); + private readonly string nativeGen = Path.Combine(buildDir, "dotnet.native.g.js"); + + public void Patch () + { + if (thread) PatchThreading(); + if (embed) new InternalPatcher(dotnet, runtime, native).Patch(); + if (trim) RemoveMaps(); + CopyInternals(); + } + + private void PatchThreading () + { + // Overprotective browser-only assert breaks unit testing: + // https://github.com/dotnet/runtime/issues/92853. + + File.WriteAllText(dotnet, File.ReadAllText(dotnet, Encoding.UTF8) + .Replace("&&Te(!1,\"This build of dotnet is multi-threaded, it doesn't support shell environments like V8 or NodeJS. See also https://aka.ms/dotnet-wasm-features\")", ""), Encoding.UTF8); + } + + private void RemoveMaps () + { + // Microsoft bundles .NET JavaScript sources pre-minified/uglified with source maps. + // When trimming enabled, we are not shipping the source maps, hence stripping the references here. + // TODO: Raise an issue asking them to add an option to not uglify the sources. + + File.WriteAllText(dotnet, File.ReadAllText(dotnet, Encoding.UTF8) + .Replace("//# sourceMappingURL=dotnet.js.map\n", ""), Encoding.UTF8); + File.WriteAllText(runtime, File.ReadAllText(runtime, Encoding.UTF8) + .Replace("//# sourceMappingURL=dotnet.runtime.js.map\n", ""), Encoding.UTF8); + } + + private void CopyInternals () + { + if (embed) + { + File.WriteAllText(dotnetGen, File.ReadAllText(dotnet, Encoding.UTF8), Encoding.UTF8); + File.WriteAllText(runtimeGen, File.ReadAllText(runtime, Encoding.UTF8), Encoding.UTF8); + File.WriteAllText(nativeGen, File.ReadAllText(native, Encoding.UTF8), Encoding.UTF8); + } + else + { + var mt = thread.ToString().ToLowerInvariant(); + var content = $"export const embedded = false;\nexport const mt = {mt};"; + File.WriteAllText(dotnetGen, content, Encoding.UTF8); + File.WriteAllText(runtimeGen, content, Encoding.UTF8); + File.WriteAllText(nativeGen, content, Encoding.UTF8); + } + } +} diff --git a/src/cs/Bootsharp.Publish/NamespaceBuilder/NamespaceBuilder.cs b/src/cs/Bootsharp.Publish/NamespaceBuilder/NamespaceBuilder.cs new file mode 100644 index 00000000..df5c8157 --- /dev/null +++ b/src/cs/Bootsharp.Publish/NamespaceBuilder/NamespaceBuilder.cs @@ -0,0 +1,32 @@ +using System.Reflection; + +namespace Bootsharp.Publish; + +internal sealed class NamespaceBuilder +{ + private const string defaultSpace = "Global"; + private const string attributeName = "JSNamespaceAttribute"; + private readonly List converters = new(); + + public void CollectConverters (string outDir, string entryAssembly) + { + using var context = CreateLoadContext(outDir); + var assemblyPath = Path.Combine(outDir, entryAssembly); + var assembly = context.LoadFromAssemblyPath(assemblyPath); + foreach (var attribute in CollectAttributes(assembly)) + converters.Add(new NamespaceConverter(attribute)); + } + + public string Build (Type type) + { + var space = type.Namespace ?? defaultSpace; + foreach (var converter in converters) + space = converter.Convert(space); + return space; + } + + private IEnumerable CollectAttributes (System.Reflection.Assembly assembly) + { + return assembly.CustomAttributes.Where(a => a.AttributeType.Name == attributeName); + } +} diff --git a/src/cs/Bootsharp.Publish/NamespaceBuilder/NamespaceConverter.cs b/src/cs/Bootsharp.Publish/NamespaceBuilder/NamespaceConverter.cs new file mode 100644 index 00000000..01dd664a --- /dev/null +++ b/src/cs/Bootsharp.Publish/NamespaceBuilder/NamespaceConverter.cs @@ -0,0 +1,12 @@ +using System.Reflection; +using System.Text.RegularExpressions; + +namespace Bootsharp.Publish; + +internal sealed class NamespaceConverter (CustomAttributeData attribute) +{ + private readonly string pattern = (string)attribute.ConstructorArguments[0].Value!; + private readonly string replacement = (string)attribute.ConstructorArguments[1].Value!; + + public string Convert (string space) => Regex.Replace(space, pattern, replacement); +} diff --git a/DotNet/Packer/Packer.csproj b/src/cs/Bootsharp.Publish/Packer.csproj similarity index 100% rename from DotNet/Packer/Packer.csproj rename to src/cs/Bootsharp.Publish/Packer.csproj diff --git a/src/cs/Bootsharp.Publish/PrepareBootsharp.cs b/src/cs/Bootsharp.Publish/PrepareBootsharp.cs new file mode 100644 index 00000000..4861de76 --- /dev/null +++ b/src/cs/Bootsharp.Publish/PrepareBootsharp.cs @@ -0,0 +1,61 @@ +using Microsoft.Build.Framework; + +namespace Bootsharp.Publish; + +public sealed class PrepareBootsharp : Microsoft.Build.Utilities.Task +{ + [Required] public required string InspectedDirectory { get; set; } + [Required] public required string EntryAssemblyName { get; set; } + [Required] public required string ExportsFilePath { get; set; } + [Required] public required string ImportsFilePath { get; set; } + [Required] public required string SerializerFilePath { get; set; } + + public override bool Execute () + { + var spaceBuilder = CreateNamespaceBuilder(); + using var inspector = InspectAssemblies(spaceBuilder); + GenerateExports(inspector); + GenerateImports(inspector); + GenerateSerializer(inspector); + return true; + } + + private NamespaceBuilder CreateNamespaceBuilder () + { + var builder = new NamespaceBuilder(); + builder.CollectConverters(InspectedDirectory, EntryAssemblyName); + return builder; + } + + private AssemblyInspector InspectAssemblies (NamespaceBuilder spaceBuilder) + { + var inspector = new AssemblyInspector(spaceBuilder); + inspector.InspectInDirectory(InspectedDirectory); + inspector.Report(Log); + return inspector; + } + + private void GenerateExports (AssemblyInspector inspector) + { + var generator = new ExportGenerator(); + var content = generator.Generate(inspector); + Directory.CreateDirectory(Path.GetDirectoryName(ExportsFilePath)!); + File.WriteAllText(ExportsFilePath, content); + } + + private void GenerateImports (AssemblyInspector inspector) + { + var generator = new ImportGenerator(EntryAssemblyName); + var content = generator.Generate(inspector); + Directory.CreateDirectory(Path.GetDirectoryName(ImportsFilePath)!); + File.WriteAllText(ImportsFilePath, content); + } + + private void GenerateSerializer (AssemblyInspector inspector) + { + var generator = new SerializerGenerator(); + var content = generator.Generate(inspector); + Directory.CreateDirectory(Path.GetDirectoryName(SerializerFilePath)!); + File.WriteAllText(SerializerFilePath, content); + } +} diff --git a/src/cs/Bootsharp.Publish/PrepareGenerators/ExportGenerator.cs b/src/cs/Bootsharp.Publish/PrepareGenerators/ExportGenerator.cs new file mode 100644 index 00000000..93b580aa --- /dev/null +++ b/src/cs/Bootsharp.Publish/PrepareGenerators/ExportGenerator.cs @@ -0,0 +1,78 @@ +namespace Bootsharp.Publish; + +internal sealed class ExportGenerator +{ + public string Generate (AssemblyInspector inspector) + { + var bySpace = inspector.Methods + .Where(m => m.Type == MethodType.Invokable) + .GroupBy(i => i.DeclaringName).ToArray(); + return bySpace.Length == 0 ? "" : + $""" + #nullable enable + #pragma warning disable + + using System.Runtime.InteropServices.JavaScript; + using static Bootsharp.Serializer; + + namespace Bootsharp.Exports; + + {JoinLines(bySpace.Select(g => GenerateSpace(g.Key, g)), 0)} + + #pragma warning restore + #nullable restore + """; + } + + private string GenerateSpace (string space, IEnumerable invokable) => + $$""" + public partial class {{space.Replace('.', '_')}} + { + {{JoinLines(invokable.Select(GenerateExport))}} + } + """; + + private string GenerateExport (Method inv) + { + const string attr = "[System.Runtime.InteropServices.JavaScript.JSExport]"; + var date = MarshalAmbiguous(inv.ReturnTypeSyntax, true); + var wait = inv.ReturnsTaskLike && inv.ShouldSerializeReturnType; + return $"{attr} {date}internal static {GenerateSignature(inv, wait)} => {GenerateBody(inv, wait)};"; + } + + private string GenerateSignature (Method inv, bool wait) + { + var args = string.Join(", ", inv.Arguments.Select(GenerateSignatureArg)); + var @return = inv.ReturnsVoid ? "void" : (inv.ShouldSerializeReturnType + ? $"global::System.String{(inv.ReturnsNullable ? "?" : "")}" + : inv.ReturnTypeSyntax); + if (inv.ShouldSerializeReturnType && inv.ReturnsTaskLike) + @return = $"global::System.Threading.Tasks.Task<{@return}>"; + var signature = $"{@return} {inv.Name} ({args})"; + if (wait) signature = $"async {signature}"; + return signature; + } + + private string GenerateBody (Method inv, bool wait) + { + var args = string.Join(", ", inv.Arguments.Select(GenerateBodyArg)); + var body = $"global::{inv.DeclaringName}.{inv.Name}({args})"; + if (wait) body = $"await {body}"; + if (inv.ShouldSerializeReturnType) body = $"Serialize({body})"; + return body; + } + + private string GenerateSignatureArg (Argument arg) + { + var type = arg.ShouldSerialize + ? $"global::System.String{(arg.Nullable ? "?" : "")}" + : arg.TypeSyntax; + return $"{MarshalAmbiguous(arg.TypeSyntax, false)}{type} {arg.Name}"; + } + + private string GenerateBodyArg (Argument arg) + { + if (!arg.ShouldSerialize) return arg.Name; + return $"Deserialize<{arg.TypeSyntax}>({arg.Name})"; + } +} diff --git a/src/cs/Bootsharp.Publish/PrepareGenerators/ImportGenerator.cs b/src/cs/Bootsharp.Publish/PrepareGenerators/ImportGenerator.cs new file mode 100644 index 00000000..37419a40 --- /dev/null +++ b/src/cs/Bootsharp.Publish/PrepareGenerators/ImportGenerator.cs @@ -0,0 +1,78 @@ +namespace Bootsharp.Publish; + +internal sealed class ImportGenerator (string entryAssembly) +{ + public string Generate (AssemblyInspector inspector) + { + var bySpace = inspector.Methods + .Where(m => m.Type != MethodType.Invokable) + .GroupBy(i => i.DeclaringName).ToArray(); + return bySpace.Length == 0 ? "" : + $""" + #nullable enable + #pragma warning disable + + using System.Diagnostics.CodeAnalysis; + using System.Runtime.CompilerServices; + using System.Runtime.InteropServices.JavaScript; + + namespace Bootsharp.Imports; + + {JoinLines(bySpace.Select(g => GenerateSpace(g.Key, g.ToArray())), 0)} + + #pragma warning restore + #nullable restore + """; + } + + private string GenerateSpace (string space, IReadOnlyList methods) + { + var name = space.Replace('.', '_'); + var asm = entryAssembly[..^4]; + return + $$""" + public partial class {{name}} + { + [ModuleInitializer] + [DynamicDependency(DynamicallyAccessedMemberTypes.All, "Bootsharp.Imports.{{name}}", "{{asm}}")] + internal static void RegisterDynamicDependencies () + { + {{JoinLines(methods.Select(GenerateFunctionAssign), 2)}} + } + {{JoinLines(methods.Select(GenerateImport))}} + } + """; + } + + private string GenerateFunctionAssign (Method method) + { + return $"""Function.Set("{BuildEndpoint(method, false)}", {method.Name});"""; + } + + private string GenerateImport (Method method) + { + var args = string.Join(", ", method.Arguments.Select(GenerateArg)); + var @return = method.ReturnsVoid ? "void" : (method.ShouldSerializeReturnType + ? $"global::System.String{(method.ReturnsNullable ? "?" : "")}" + : method.ReturnTypeSyntax); + if (method.ShouldSerializeReturnType && method.ReturnsTaskLike) + @return = $"global::System.Threading.Tasks.Task<{@return}>"; + var attr = $"""[System.Runtime.InteropServices.JavaScript.JSImport("{BuildEndpoint(method, true)}", "Bootsharp")]"""; + var date = MarshalAmbiguous(method.ReturnTypeSyntax, true); + return $"{attr} {date}internal static partial {@return} {method.Name} ({args});"; + } + + private string GenerateArg (Argument arg) + { + var type = arg.ShouldSerialize + ? $"global::System.String{(arg.Nullable ? "?" : "")}" + : arg.TypeSyntax; + return $"{MarshalAmbiguous(arg.TypeSyntax, false)}{type} {arg.Name}"; + } + + private string BuildEndpoint (Method method, bool import) + { + var name = char.ToLowerInvariant(method.Name[0]) + method.Name[1..]; + return $"{method.JSSpace}.{name}{(import ? "Serialized" : "")}"; + } +} diff --git a/src/cs/Bootsharp.Publish/PrepareGenerators/SerializerGenerator.cs b/src/cs/Bootsharp.Publish/PrepareGenerators/SerializerGenerator.cs new file mode 100644 index 00000000..0d7cc805 --- /dev/null +++ b/src/cs/Bootsharp.Publish/PrepareGenerators/SerializerGenerator.cs @@ -0,0 +1,97 @@ +namespace Bootsharp.Publish; + +internal sealed class SerializerGenerator +{ + private readonly HashSet attributes = new(); + + public string Generate (AssemblyInspector inspector) + { + inspector.Methods.ForEach(CollectAttributes); + CollectDuplicates(inspector); + if (attributes.Count == 0) return ""; + return + $$""" + using System.Text.Json; + using System.Text.Json.Serialization; + + namespace Bootsharp; + + {{JoinLines(attributes, 0)}} + internal partial class SerializerContext : JsonSerializerContext + { + [System.Runtime.CompilerServices.ModuleInitializer] + internal static void InjectTypeInfoResolver () + { + Serializer.Options.TypeInfoResolverChain.Add(SerializerContext.Default); + } + } + """; + } + + private void CollectAttributes (Method method) + { + if (method.ShouldSerializeReturnType) + CollectAttributes(method.ReturnTypeSyntax, method.ReturnType); + foreach (var arg in method.Arguments) + if (arg.ShouldSerialize) + CollectAttributes(arg.TypeSyntax, arg.Type); + } + + private void CollectAttributes (string syntax, Type type) + { + if (IsTaskWithResult(type, out var result)) + // Task<> produces trim warnings, so hacking with a proxy tuple. + // Passing just the result may conflict with a type inferred by + // .NET's generator from other types (it throws on duplicates). + syntax = $"({BuildSyntax(result)}, byte)"; + AddProxies(type); + attributes.Add(BuildAttribute(syntax)); + } + + private void CollectDuplicates (AssemblyInspector inspector) + { + var names = new HashSet(); + foreach (var type in inspector.Types.DistinctBy(t => t.FullName)) + if (names.Contains(type.Name)) + CollectAttributes(BuildSyntax(type), type); + else names.Add(type.Name); + } + + private static string BuildAttribute (string syntax) + { + syntax = syntax.Replace("?", ""); + var hint = $"X{syntax.GetHashCode():X}"; + return $"[JsonSerializable(typeof({syntax}), TypeInfoPropertyName = \"{hint}\")]"; + } + + private void AddProxies (Type type) + { + if (IsTaskWithResult(type, out var result)) type = result; + if (IsListInterface(type)) AddListProxies(type); + if (IsDictInterface(type)) AddDictProxies(type); + } + + private void AddListProxies (Type list) + { + var element = BuildSyntax(list.GenericTypeArguments[0]); + attributes.Add(BuildAttribute($"{element}[]")); + attributes.Add(BuildAttribute($"global::System.Collections.Generic.List<{element}>")); + } + + private void AddDictProxies (Type dict) + { + var key = BuildSyntax(dict.GenericTypeArguments[0]); + var value = BuildSyntax(dict.GenericTypeArguments[1]); + attributes.Add(BuildAttribute($"global::System.Collections.Generic.Dictionary<{key}, {value}>")); + } + + private static bool IsListInterface (Type type) => + type.IsInterface && type.IsGenericType && + (type.GetGenericTypeDefinition().FullName == typeof(IList<>).FullName || + type.GetGenericTypeDefinition().FullName == typeof(IReadOnlyList<>).FullName); + + private static bool IsDictInterface (Type type) => + type.IsInterface && type.IsGenericType && + (type.GetGenericTypeDefinition().FullName == typeof(IDictionary<,>).FullName || + type.GetGenericTypeDefinition().FullName == typeof(IReadOnlyDictionary<,>).FullName); +} diff --git a/src/cs/Bootsharp.Publish/ResourceGenerator/AssemblyResource.cs b/src/cs/Bootsharp.Publish/ResourceGenerator/AssemblyResource.cs new file mode 100644 index 00000000..a83a1122 --- /dev/null +++ b/src/cs/Bootsharp.Publish/ResourceGenerator/AssemblyResource.cs @@ -0,0 +1,3 @@ +namespace Bootsharp.Publish; + +public record AssemblyResource (string Name, string Content); diff --git a/src/cs/Bootsharp.Publish/ResourceGenerator/ResourceGenerator.cs b/src/cs/Bootsharp.Publish/ResourceGenerator/ResourceGenerator.cs new file mode 100644 index 00000000..be77fcfd --- /dev/null +++ b/src/cs/Bootsharp.Publish/ResourceGenerator/ResourceGenerator.cs @@ -0,0 +1,25 @@ +namespace Bootsharp.Publish; + +internal sealed class ResourceGenerator (string entryName, string buildDir, bool embed) +{ + public string Generate (AssemblyInspector inspector) => new ResourcesTemplate( + GenerateWasm(), + inspector.Assemblies.Select(GenerateAssembly), + entryName + ).Build(); + + private string GenerateWasm () + { + if (!embed) return "undefined"; + var path = Path.Combine(buildDir, "dotnet.native.wasm"); + var bytes = File.ReadAllBytes(path); + return ToBase64(bytes); + } + + private AssemblyResource GenerateAssembly (Assembly assembly) => new( + assembly.Name[..^3] + "wasm", + embed ? ToBase64(assembly.Bytes) : "undefined" + ); + + private string ToBase64 (byte[] bytes) => $"\"{Convert.ToBase64String(bytes)}\""; +} diff --git a/src/cs/Bootsharp.Publish/ResourceGenerator/ResourcesTemplate.cs b/src/cs/Bootsharp.Publish/ResourceGenerator/ResourcesTemplate.cs new file mode 100644 index 00000000..eb208ba7 --- /dev/null +++ b/src/cs/Bootsharp.Publish/ResourceGenerator/ResourcesTemplate.cs @@ -0,0 +1,21 @@ +namespace Bootsharp.Publish; + +internal sealed class ResourcesTemplate ( + string wasm, + IEnumerable assemblies, + string entryAssemblyName) +{ + public string Build () => + $$""" + export default { + wasm: {{BuildBin("dotnet.native.wasm", wasm)}}, + assemblies: [ + {{JoinLines(assemblies.Select(a => BuildBin(a.Name, a.Content)), 2, ",\n")}} + ], + entryAssemblyName: "{{entryAssemblyName}}" + }; + """; + + private string BuildBin (string name, string content) => + $$"""{ name: "{{name}}", content: {{content}} }"""; +} diff --git a/DotNet/Packer/Utilities/TextUtilities.cs b/src/cs/Bootsharp.Publish/Utilities/TextUtilities.cs similarity index 50% rename from DotNet/Packer/Utilities/TextUtilities.cs rename to src/cs/Bootsharp.Publish/Utilities/TextUtilities.cs index d2324123..fba0cf7a 100644 --- a/DotNet/Packer/Utilities/TextUtilities.cs +++ b/src/cs/Bootsharp.Publish/Utilities/TextUtilities.cs @@ -1,29 +1,18 @@ -using System.Collections.Generic; -using System.IO; -using System.Linq; +global using static Bootsharp.Publish.TextUtilities; using System.Text.RegularExpressions; -namespace Packer; +namespace Bootsharp.Publish; internal static class TextUtilities { - public static IEnumerable SplitLines (string input) + public static string JoinLines (IEnumerable values, int indent = 1, string separator = "\n") { - using var reader = new StringReader(input); - while (reader.ReadLine() is { } line) - yield return line; - } - - public static string JoinLines (IEnumerable values, int indent = 1, bool indentFirst = false) - { - var separator = "\n" + new string(' ', indent * 4); - var result = RemoveEmptyLines(string.Join(separator, values.Where(v => v is not null))); - return indentFirst ? separator + result : result; + if (indent > 0) separator += new string(' ', indent * 4); + return RemoveEmptyLines(string.Join(separator, values.Where(v => v is not null))); } public static string JoinLines (params string?[] values) => JoinLines(values, 1); public static string JoinLines (int indent, params string?[] values) => JoinLines(values, indent); - public static string JoinLines (int indent, bool indentFirst, params string?[] values) => JoinLines(values, indent, indentFirst); public static string ToFirstLower (string value) { diff --git a/src/cs/Bootsharp.Publish/Utilities/TypeUtilities.cs b/src/cs/Bootsharp.Publish/Utilities/TypeUtilities.cs new file mode 100644 index 00000000..6269cf19 --- /dev/null +++ b/src/cs/Bootsharp.Publish/Utilities/TypeUtilities.cs @@ -0,0 +1,195 @@ +global using static Bootsharp.Publish.TypeUtilities; +using System.Collections.Frozen; +using System.Diagnostics.CodeAnalysis; +using System.Reflection; +using System.Runtime.InteropServices; + +namespace Bootsharp.Publish; + +internal static class TypeUtilities +{ + private static readonly FrozenSet native = new[] { + typeof(string).FullName!, typeof(bool).FullName!, typeof(byte).FullName!, + typeof(char).FullName!, typeof(short).FullName!, typeof(long).FullName!, + typeof(int).FullName!, typeof(float).FullName!, typeof(double).FullName!, + typeof(nint).FullName!, typeof(Task).FullName!, typeof(DateTime).FullName!, + typeof(DateTimeOffset).FullName!, typeof(Exception).FullName! + }.ToFrozenSet(); + + private static readonly FrozenSet arrayNative = new[] { + typeof(byte).FullName!, typeof(int).FullName!, + typeof(double).FullName!, typeof(string).FullName! + }.ToFrozenSet(); + + public static bool IsTaskLike (Type type) + { + return type.GetMethod(nameof(Task.GetAwaiter)) != null; + } + + public static bool IsTaskWithResult (Type type, [NotNullWhen(true)] out Type? result) + { + return (result = IsTaskLike(type) && type.GenericTypeArguments.Length == 1 + ? type.GenericTypeArguments[0] : null) != null; + } + + public static string MarshalAmbiguous (string typeSyntax, bool @return) + { + var promise = typeSyntax.StartsWith("global::System.Threading.Tasks.Task<"); + if (promise) typeSyntax = typeSyntax[36..]; + var result = + typeSyntax.StartsWith("global::System.DateTime") ? "JSType.Date" : + typeSyntax.StartsWith("global::System.Int64") ? "JSType.BigInt" : ""; + if (result == "") return ""; + if (promise) result = $"JSType.Promise<{result}>"; + result = $"JSMarshalAs<{result}>"; + if (@return) result = $"return: {result}"; + return $"[{result}] "; + } + + public static bool IsVoid (Type type) + { + return type.FullName == "System.Void"; + } + + public static bool IsList (Type type) + { + return type.IsArray || IsGenericList(type) || type.GetInterfaces().Any(IsGenericList); + + bool IsGenericList (Type type) => + type.IsGenericType && + (type.GetGenericTypeDefinition().FullName == typeof(IList<>).FullName || + type.GetGenericTypeDefinition().FullName == typeof(IReadOnlyList<>).FullName); + } + + public static bool IsDictionary (Type type) + { + return IsDict(type) || type.GetInterfaces().Any(IsDict); + + bool IsDict (Type type) => + type.IsGenericType && + (type.GetGenericTypeDefinition().FullName == typeof(IDictionary<,>).FullName || + type.GetGenericTypeDefinition().FullName == typeof(IReadOnlyDictionary<,>).FullName); + } + + public static Type GetListElementType (Type arrayType) + { + return arrayType.IsArray + ? arrayType.GetElementType()! + : arrayType.GenericTypeArguments[0]; + } + + public static NullabilityInfo GetNullability (PropertyInfo property) + { + return new NullabilityInfoContext().Create(property); + } + + public static NullabilityInfo GetNullability (ParameterInfo parameter) + { + return new NullabilityInfoContext().Create(parameter); + } + + public static bool IsNullable (PropertyInfo property) + { + if (IsNullable(property.PropertyType)) return true; + return GetNullability(property).ReadState == NullabilityState.Nullable; + } + + public static bool IsNullable (ParameterInfo parameter) + { + if (IsNullable(parameter.ParameterType)) return true; + return GetNullability(parameter).ReadState == NullabilityState.Nullable; + } + + public static bool IsNullable (MethodInfo method) + { + if (IsNullable(method.ReturnParameter)) return true; + if (!IsTaskLike(method.ReturnType)) return false; + return GetNullability(method.ReturnParameter).GenericTypeArguments + .FirstOrDefault()?.ReadState == NullabilityState.Nullable; + } + + public static bool IsNullable (Type type) + { + return type.IsGenericType && + type.Name.Contains("Nullable`") && + type.GenericTypeArguments.Length == 1; + } + + public static Type GetNullableUnderlyingType (Type type) + { + return type.GenericTypeArguments[0]; + } + + public static bool IsAutoProperty (PropertyInfo property) + { + var backingFieldName = $"<{property.Name}>k__BackingField"; + var backingField = property.DeclaringType!.GetField(backingFieldName, BindingFlags.NonPublic | BindingFlags.Instance); + return backingField != null; + } + + public static MetadataLoadContext CreateLoadContext (string directory) + { + var assemblyPaths = Directory.GetFiles(RuntimeEnvironment.GetRuntimeDirectory(), "*.dll").ToList(); + foreach (var path in Directory.GetFiles(directory, "*.dll")) + if (assemblyPaths.All(p => Path.GetFileName(p) != Path.GetFileName(path))) + assemblyPaths.Add(path); + var resolver = new PathAssemblyResolver(assemblyPaths); + return new MetadataLoadContext(resolver); + } + + public static bool ShouldIgnoreAssembly (string assemblyPath) + { + var assemblyName = Path.GetFileName(assemblyPath); + return assemblyName.StartsWith("System.") || + assemblyName.StartsWith("Microsoft.") || + assemblyName.StartsWith("netstandard") || + assemblyName.StartsWith("mscorlib"); + } + + public static string GetGenericNameWithoutArgs (string typeName) + { + var delimiterIndex = typeName.IndexOf('`'); + return typeName[..delimiterIndex]; + } + + // https://learn.microsoft.com/en-us/aspnet/core/blazor/javascript-interoperability/import-export-interop + public static bool ShouldSerialize (Type type) + { + if (IsVoid(type)) return false; + if (IsTaskWithResult(type, out var result)) + // TODO: Remove IsList (eg, serialization of Task) when https://github.com/dotnet/runtime/issues/81348 is resolved. + return IsList(result) || ShouldSerialize(result); + var array = type.IsArray; + if (array) type = type.GetElementType()!; + if (IsNullable(type)) type = GetNullableUnderlyingType(type); + if (array) return !arrayNative.Contains(type.FullName!); + return !native.Contains(type.FullName!); + } + + public static string BuildSyntax (Type type) => BuildSyntax(type, null, false); + + public static string BuildSyntax (Type type, ParameterInfo info) => BuildSyntax(type, GetNullability(info)); + + private static string BuildSyntax (Type type, NullabilityInfo? nul, bool forceNil = false) + { + var nil = (forceNil || nul?.ReadState == NullabilityState.Nullable) ? "?" : ""; + if (IsVoid(type)) return "void"; + if (type.IsArray) return $"{BuildSyntax(GetListElementType(type), nul?.ElementType)}[]{nil}"; + if (type.IsGenericType) return BuildGeneric(type, type.GenericTypeArguments); + return $"global::{ResolveTypeName(type)}{nil}"; + + string BuildGeneric (Type type, Type[] args) + { + if (IsNullable(type)) return BuildSyntax(args[0], nul, true); + var name = GetGenericNameWithoutArgs(ResolveTypeName(type)); + var typeArgs = string.Join(", ", args.Select((a, i) => BuildSyntax(a, nul?.GenericTypeArguments[i]))); + return $"global::{name}<{typeArgs}>"; + } + + static string ResolveTypeName (Type type) + { + if (type.Namespace is null) return type.Name; + return $"{type.Namespace}.{type.Name}"; + } + } +} diff --git a/src/cs/Bootsharp.sln b/src/cs/Bootsharp.sln new file mode 100644 index 00000000..f9ed4695 --- /dev/null +++ b/src/cs/Bootsharp.sln @@ -0,0 +1,63 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bootsharp", "Bootsharp/Bootsharp.csproj", "{8D23B7D8-3E5D-420D-80FF-6A437B03D303}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bootsharp.Common", "Bootsharp.Common/Bootsharp.Common.csproj", "{8F9E732C-8ABF-4293-BDFA-4B3A31669A04}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bootsharp.Common.Test", "Bootsharp.Common.Test/Bootsharp.Common.Test.csproj", "{AEE52DF2-26C4-479B-B62D-14B58903BCE7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bootsharp.Generate", "Bootsharp.Generate/Bootsharp.Generate.csproj", "{F395C565-EAFD-4F89-A7DD-4CA12761A86B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bootsharp.Generate.Test", "Bootsharp.Generate.Test/Bootsharp.Generate.Test.csproj", "{B17E4577-6391-4669-9B12-083CA18ADF33}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bootsharp.Publish", "Bootsharp.Publish/Bootsharp.Publish.csproj", "{4CB73FC6-D64D-470A-8490-7604A292B973}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bootsharp.Publish.Test", "Bootsharp.Publish.Test/Bootsharp.Publish.Test.csproj", "{62571679-675C-4E85-AB3F-5C243920EE6B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bootsharp.Inject", "Bootsharp.Inject/Bootsharp.Inject.csproj", "{062D88B5-22C4-4F54-9F68-2B943D93F898}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bootsharp.Inject.Test", "Bootsharp.Inject.Test/Bootsharp.Inject.Test.csproj", "{7D073BB0-79E8-4123-8B92-1FDD764C656E}" +EndProject +Global + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8D23B7D8-3E5D-420D-80FF-6A437B03D303}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8D23B7D8-3E5D-420D-80FF-6A437B03D303}.Release|Any CPU.Build.0 = Release|Any CPU + {8D23B7D8-3E5D-420D-80FF-6A437B03D303}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8D23B7D8-3E5D-420D-80FF-6A437B03D303}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F395C565-EAFD-4F89-A7DD-4CA12761A86B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F395C565-EAFD-4F89-A7DD-4CA12761A86B}.Release|Any CPU.Build.0 = Release|Any CPU + {F395C565-EAFD-4F89-A7DD-4CA12761A86B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F395C565-EAFD-4F89-A7DD-4CA12761A86B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4CB73FC6-D64D-470A-8490-7604A292B973}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4CB73FC6-D64D-470A-8490-7604A292B973}.Release|Any CPU.Build.0 = Release|Any CPU + {4CB73FC6-D64D-470A-8490-7604A292B973}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4CB73FC6-D64D-470A-8490-7604A292B973}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AEE52DF2-26C4-479B-B62D-14B58903BCE7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AEE52DF2-26C4-479B-B62D-14B58903BCE7}.Release|Any CPU.Build.0 = Release|Any CPU + {AEE52DF2-26C4-479B-B62D-14B58903BCE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AEE52DF2-26C4-479B-B62D-14B58903BCE7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B17E4577-6391-4669-9B12-083CA18ADF33}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B17E4577-6391-4669-9B12-083CA18ADF33}.Release|Any CPU.Build.0 = Release|Any CPU + {B17E4577-6391-4669-9B12-083CA18ADF33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B17E4577-6391-4669-9B12-083CA18ADF33}.Debug|Any CPU.Build.0 = Debug|Any CPU + {62571679-675C-4E85-AB3F-5C243920EE6B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {62571679-675C-4E85-AB3F-5C243920EE6B}.Release|Any CPU.Build.0 = Release|Any CPU + {62571679-675C-4E85-AB3F-5C243920EE6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {62571679-675C-4E85-AB3F-5C243920EE6B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8F9E732C-8ABF-4293-BDFA-4B3A31669A04}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8F9E732C-8ABF-4293-BDFA-4B3A31669A04}.Release|Any CPU.Build.0 = Release|Any CPU + {8F9E732C-8ABF-4293-BDFA-4B3A31669A04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8F9E732C-8ABF-4293-BDFA-4B3A31669A04}.Debug|Any CPU.Build.0 = Debug|Any CPU + {062D88B5-22C4-4F54-9F68-2B943D93F898}.Release|Any CPU.ActiveCfg = Release|Any CPU + {062D88B5-22C4-4F54-9F68-2B943D93F898}.Release|Any CPU.Build.0 = Release|Any CPU + {062D88B5-22C4-4F54-9F68-2B943D93F898}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {062D88B5-22C4-4F54-9F68-2B943D93F898}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D073BB0-79E8-4123-8B92-1FDD764C656E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D073BB0-79E8-4123-8B92-1FDD764C656E}.Release|Any CPU.Build.0 = Release|Any CPU + {7D073BB0-79E8-4123-8B92-1FDD764C656E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D073BB0-79E8-4123-8B92-1FDD764C656E}.Debug|Any CPU.Build.0 = Debug|Any CPU + EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Release|Any CPU = Release|Any CPU + Debug|Any CPU = Debug|Any CPU + EndGlobalSection +EndGlobal diff --git a/src/cs/Bootsharp/Bootsharp.csproj b/src/cs/Bootsharp/Bootsharp.csproj new file mode 100644 index 00000000..27daffb0 --- /dev/null +++ b/src/cs/Bootsharp/Bootsharp.csproj @@ -0,0 +1,38 @@ + + + + net8.0 + enable + enable + Bootsharp + Bootsharp + Compile C# solution into single-file ES module with auto-generated JavaScript bindings and type definitions. + NU5100 + + + + + + + + + <_Parameter1>browser + + + + + + + + + + + + + + + diff --git a/src/cs/Bootsharp/Build/Bootsharp.props b/src/cs/Bootsharp/Build/Bootsharp.props new file mode 100644 index 00000000..cffa9856 --- /dev/null +++ b/src/cs/Bootsharp/Build/Bootsharp.props @@ -0,0 +1,40 @@ + + + + + Exe + Release + true + wasm + browser + true + true + true + false + + + bootsharp + + true + + false + + + + + + + + + + + + + + + + <_Parameter1>browser + + + + diff --git a/src/cs/Bootsharp/Build/Bootsharp.targets b/src/cs/Bootsharp/Build/Bootsharp.targets new file mode 100644 index 00000000..a7a32d85 --- /dev/null +++ b/src/cs/Bootsharp/Build/Bootsharp.targets @@ -0,0 +1,172 @@ + + + + $(MSBuildThisFileDirectory)../ + $(BootsharpRoot)/js + $(BootsharpRoot)/tasks/Bootsharp.Publish.dll + $(IntermediateOutputPath)bootsharp + $(BootsharpIntermediateDirectory)/InteropExports.g.cs + $(BootsharpIntermediateDirectory)/InteropImports.g.cs + $(BootsharpIntermediateDirectory)/SerializerContext.g.cs + $(AssemblyName).dll + + + + + + + + true + full + true + <_AggressiveAttributeTrimming>true + false + false + false + false + false + false + <_EnableConsumingManagedCodeFromNativeHosting>false + false + false + false + true + true + false + false + false + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(WasmAppDir)/$(WasmRuntimeAssetsLocation) + $(BaseOutputPath.Replace('\', '/')) + $(BootSharpBaseOutputPath)$(BootsharpName) + $(BootsharpPublishDirectory)/types + $(BootsharpPublishDirectory)/bin + $(BootsharpPublishDirectory) + npx rollup bootsharp.js -o $(BootsharpName).mjs -f es -g process,module --output.inlineDynamicImports + true + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cs/Bootsharp/Build/PackageTemplate.json b/src/cs/Bootsharp/Build/PackageTemplate.json new file mode 100644 index 00000000..7e8afb6c --- /dev/null +++ b/src/cs/Bootsharp/Build/PackageTemplate.json @@ -0,0 +1,6 @@ +{ + "name": "%MODULE_NAME%", + "type": "module", + "main": "%MODULE_DIR%/%MODULE_NAME%.mjs", + "types": "%TYPES_DIR%/%MODULE_NAME%.d.ts" +} diff --git a/src/cs/Directory.Build.props b/src/cs/Directory.Build.props new file mode 100644 index 00000000..fa523f7c --- /dev/null +++ b/src/cs/Directory.Build.props @@ -0,0 +1,20 @@ + + + 0.1.0 + Elringus + javascript typescript ts js wasm node deno bun interop codegen + https://bootsharp.com + https://github.com/elringus/bootsharp.git + git + logo.png + https://raw.githubusercontent.com/elringus/bootsharp/main/docs/public/favicon.svg + MIT + false + README.md + + + + + + + diff --git a/Samples/HelloWorld/Project/nuget.config b/src/cs/nuget.config similarity index 67% rename from Samples/HelloWorld/Project/nuget.config rename to src/cs/nuget.config index 5dfe81fa..89eaef49 100644 --- a/Samples/HelloWorld/Project/nuget.config +++ b/src/cs/nuget.config @@ -1,6 +1,6 @@ - + diff --git a/src/js/package.json b/src/js/package.json new file mode 100644 index 00000000..bd6cbc0b --- /dev/null +++ b/src/js/package.json @@ -0,0 +1,16 @@ +{ + "scripts": { + "compile": "sh scripts/compile-test.sh", + "test": "vitest run --silent --pool=vmThreads", + "cover": "npm test -- --coverage.enabled --coverage.100 --coverage.include=**/sideload/*.mjs --coverage.exclude=**/dotnet.* --coverage.allowExternal", + "serve": "serve coverage", + "build": "sh scripts/build.sh" + }, + "devDependencies": { + "typescript": "^5.3.3", + "vitest": "^1.1.1", + "@vitest/coverage-v8": "^1.1.1", + "@types/node": "^20.10.6", + "ws": "^8.16.0" + } +} diff --git a/src/js/scripts/build.sh b/src/js/scripts/build.sh new file mode 100644 index 00000000..b524c364 --- /dev/null +++ b/src/js/scripts/build.sh @@ -0,0 +1,4 @@ +rm -rf dist +tsc --outDir dist --declaration +cp src/dotnet.g.d.ts dist/dotnet.g.d.ts +rm dist/*.g.js diff --git a/src/js/scripts/compile-test.sh b/src/js/scripts/compile-test.sh new file mode 100644 index 00000000..2ef778d9 --- /dev/null +++ b/src/js/scripts/compile-test.sh @@ -0,0 +1,3 @@ +cd test/cs +dotnet publish -p:BootsharpName=embedded -p:BootsharpEmbedBinaries=true +dotnet publish -p:BootsharpName=sideload -p:BootsharpEmbedBinaries=false diff --git a/src/js/src/bindings.g.ts b/src/js/src/bindings.g.ts new file mode 100644 index 00000000..d0483422 --- /dev/null +++ b/src/js/src/bindings.g.ts @@ -0,0 +1,2 @@ +// Autogenerated and resolved when building C# solution. +export default {}; diff --git a/src/js/src/boot.ts b/src/js/src/boot.ts new file mode 100644 index 00000000..1d9405e8 --- /dev/null +++ b/src/js/src/boot.ts @@ -0,0 +1,69 @@ +import { RuntimeConfig, RuntimeAPI, getMain, ModuleAPI } from "./modules"; +import { BootResources, resources } from "./resources"; +import { buildConfig } from "./config"; +import { bindImports } from "./imports"; +import { bindExports } from "./exports"; + +/** Lifecycle status of the runtime module. */ +export enum BootStatus { + /** Ready to boot. */ + Standby, + /** Async boot process is in progress. */ + Booting, + /** Booted and ready for interop. */ + Booted +} + +/** Boot process configuration. */ +export type BootOptions = { + /** Path to directory where boot resources are hosted (eg, /bin). */ + readonly root?: string; + /** Resources required to boot .NET runtime. */ + readonly resources?: BootResources; + /** .NET runtime configuration. */ + readonly config?: RuntimeConfig; + /** Creates .NET runtime instance. */ + readonly create?: (config: RuntimeConfig) => Promise; + /** Binds imported C# APIs. */ + readonly import?: (runtime: RuntimeAPI) => Promise; + /** Starts .NET runtime. */ + readonly run?: (runtime: RuntimeAPI) => Promise; + /** Binds exported C# APIs. */ + readonly export?: (runtime: RuntimeAPI) => Promise; +} + +let status = BootStatus.Standby; +let main: ModuleAPI | undefined; + +/** Returns current runtime module lifecycle state. */ +export function getStatus(): BootStatus { + return status; +} + +/** Initializes .NET runtime and binds C# APIs. + * @param options Specify to configure the boot process. + * @return Promise that resolves into .NET runtime instance. */ +export async function boot(options?: BootOptions): Promise { + if (status === BootStatus.Booted) throw Error("Failed to boot .NET runtime: already booted."); + if (status === BootStatus.Booting) throw Error("Failed to boot .NET runtime: already booting."); + status = BootStatus.Booting; + main = await getMain(options?.root); + const config = options?.config ?? await buildConfig(options?.resources ?? resources, options?.root); + const runtime = await options?.create?.(config) || await main.dotnet.withConfig(config).create(); + // TODO: Remove once https://github.com/dotnet/runtime/issues/92713 fix is merged. + (<{ runtimeKeepalivePush: () => void }>runtime.Module).runtimeKeepalivePush(); + await options?.import?.(runtime) || bindImports(runtime); + await options?.run?.(runtime) || await runtime.runMain(config.mainAssemblyName!, []); + await options?.export?.(runtime) || await bindExports(runtime, config.mainAssemblyName!); + status = BootStatus.Booted; + return runtime; +} + +/** Terminates .NET runtime and removes WASM module from memory. + * @param code Exit code; will use 0 (normal exit) by default. + * @param reason Exit reason description (optional). */ +export async function exit(code?: number, reason?: string): Promise { + if (status !== BootStatus.Booted) throw Error("Failed to exit .NET runtime: not booted."); + main!.exit(code ?? 0, reason); + status = BootStatus.Standby; +} diff --git a/src/js/src/bootsharp.ts b/src/js/src/bootsharp.ts new file mode 100644 index 00000000..feaa4e02 --- /dev/null +++ b/src/js/src/bootsharp.ts @@ -0,0 +1,17 @@ +import { boot, exit, getStatus, BootStatus } from "./boot"; +import { getMain, getNative, getRuntime } from "./modules"; +import { resources } from "./resources"; + +export default { + boot, + exit, + getStatus, + BootStatus, + resources, + dotnet: { getMain, getNative, getRuntime } +}; + +export * from "./event"; +export * from "./bindings.g"; +export type { BootOptions } from "./boot"; +export type { BootResources, BinaryResource } from "./resources"; diff --git a/src/js/src/config.ts b/src/js/src/config.ts new file mode 100644 index 00000000..024d11ba --- /dev/null +++ b/src/js/src/config.ts @@ -0,0 +1,39 @@ +import { RuntimeConfig, AssetEntry, AssetBehaviors, getRuntime, getNative, getMain } from "./modules"; +import { BinaryResource, BootResources } from "./resources"; +import { decodeBase64 } from "./decoder"; + +export async function buildConfig(resources: BootResources, root?: string): Promise { + const embed = root == null; + const main = embed ? await getMain() : undefined; + const native = embed ? await getNative() : undefined; + const runtime = embed ? await getRuntime() : undefined; + const mt = !embed && (await import("./dotnet.g")).mt; + return { + mainAssemblyName: resources.entryAssemblyName, + assets: [ + buildAsset({ name: "dotnet.js" }, "js-module-dotnet", main, false), + buildAsset({ name: "dotnet.native.js" }, "js-module-native", native, false), + buildAsset({ name: "dotnet.runtime.js" }, "js-module-runtime", runtime, false), + buildAsset({ name: "dotnet.native.worker.js" }, "js-module-threads", undefined, true), + buildAsset(resources.wasm, "dotnetwasm", undefined, false), + ...resources.assemblies.map(a => buildAsset(a, "assembly")) + ] + }; + + function buildAsset(res: BinaryResource, behavior: AssetBehaviors, + module?: unknown, optional?: boolean): AssetEntry { + const url = `${root}/${res.name}`; + return { + // Due to dotnet bug resolvedUrl is not transferred to worker before the runtime + // is initialized, hence we're assigning URL to the name for the JS and WASM modules + // (assemblies are not affected). This is only relevant for multithreading mode. + // TODO: Revise after dotnet fix https://github.com/dotnet/runtime/issues/93133. + name: (!mt || res.content || behavior === "assembly") ? res.name : url, + resolvedUrl: (res.content || !root) ? undefined : url, + buffer: typeof res.content === "string" ? decodeBase64(res.content) : res.content, + moduleExports: module, + isOptional: optional, + behavior + }; + } +} diff --git a/src/js/src/decoder.ts b/src/js/src/decoder.ts new file mode 100644 index 00000000..09111f18 --- /dev/null +++ b/src/js/src/decoder.ts @@ -0,0 +1,35 @@ +const lookup = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 62, 0, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 63, 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]); + +export function decodeBase64(source: string): Uint8Array { + if (typeof window === "object") return Uint8Array.from(window.atob(source), c => c.charCodeAt(0)); + if (typeof Buffer === "function") return Buffer.from(source, "base64"); + + const sourceLength = source.length; + const paddingLength = (source[sourceLength - 2] === "=" ? 2 : (source[sourceLength - 1] === "=" ? 1 : 0)); + const baseLength = (sourceLength - paddingLength) & 0xfffffffc; + + let tmp; + let i = 0; + let byteIndex = 0; + const buffer = []; + + for (; i < baseLength; i += 4) { + tmp = (lookup[source.charCodeAt(i)] << 18) | (lookup[source.charCodeAt(i + 1)] << 12) | (lookup[source.charCodeAt(i + 2)] << 6) | (lookup[source.charCodeAt(i + 3)]); + buffer[byteIndex++] = (tmp >> 16) & 0xFF; + buffer[byteIndex++] = (tmp >> 8) & 0xFF; + buffer[byteIndex++] = (tmp) & 0xFF; + } + + if (paddingLength === 1) { + tmp = (lookup[source.charCodeAt(i)] << 10) | (lookup[source.charCodeAt(i + 1)] << 4) | (lookup[source.charCodeAt(i + 2)] >> 2); + buffer[byteIndex++] = (tmp >> 8) & 0xFF; + buffer[byteIndex++] = tmp & 0xFF; + } + + if (paddingLength === 2) { + tmp = (lookup[source.charCodeAt(i)] << 2) | (lookup[source.charCodeAt(i + 1)] >> 4); + buffer[byteIndex++] = tmp & 0xFF; + } + + return new Uint8Array(buffer); +} diff --git a/src/js/src/dotnet.g.d.ts b/src/js/src/dotnet.g.d.ts new file mode 100644 index 00000000..29771c9d --- /dev/null +++ b/src/js/src/dotnet.g.d.ts @@ -0,0 +1,471 @@ +// Resolved when building C# solution. +export const embedded = false; +export const mt = false; + +// Types: https://github.com/dotnet/runtime/blob/main/src/mono/wasm/runtime/dotnet.d.ts + +declare interface NativePointer { + __brandNativePointer: "NativePointer"; +} +declare interface VoidPtr extends NativePointer { + __brand: "VoidPtr"; +} +declare interface CharPtr extends NativePointer { + __brand: "CharPtr"; +} +declare interface Int32Ptr extends NativePointer { + __brand: "Int32Ptr"; +} +declare interface EmscriptenModule { + /** @deprecated Please use growableHeapI8() instead.*/ + HEAP8: Int8Array; + /** @deprecated Please use growableHeapI16() instead.*/ + HEAP16: Int16Array; + /** @deprecated Please use growableHeapI32() instead. */ + HEAP32: Int32Array; + /** @deprecated Please use growableHeapI64() instead. */ + HEAP64: BigInt64Array; + /** @deprecated Please use growableHeapU8() instead. */ + HEAPU8: Uint8Array; + /** @deprecated Please use growableHeapU16() instead. */ + HEAPU16: Uint16Array; + /** @deprecated Please use growableHeapU32() instead */ + HEAPU32: Uint32Array; + /** @deprecated Please use growableHeapF32() instead */ + HEAPF32: Float32Array; + /** @deprecated Please use growableHeapF64() instead. */ + HEAPF64: Float64Array; + _malloc(size: number): VoidPtr; + _free(ptr: VoidPtr): void; + out(message: string): void; + err(message: string): void; + ccall(ident: string, returnType?: string | null, argTypes?: string[], args?: any[], opts?: any): T; + cwrap(ident: string, returnType: string, argTypes?: string[], opts?: any): T; + cwrap(ident: string, ...args: any[]): T; + setValue(ptr: VoidPtr, value: number, type: string, noSafe?: number | boolean): void; + setValue(ptr: Int32Ptr, value: number, type: string, noSafe?: number | boolean): void; + getValue(ptr: number, type: string, noSafe?: number | boolean): number; + UTF8ToString(ptr: CharPtr, maxBytesToRead?: number): string; + UTF8ArrayToString(u8Array: Uint8Array, idx?: number, maxBytesToRead?: number): string; + stringToUTF8Array(str: string, heap: Uint8Array, outIdx: number, maxBytesToWrite: number): void; + FS_createPath(parent: string, path: string, canRead?: boolean, canWrite?: boolean): string; + FS_createDataFile(parent: string, name: string, data: TypedArray, canRead: boolean, canWrite: boolean, canOwn?: boolean): string; + addFunction(fn: Function, signature: string): number; + stackSave(): VoidPtr; + stackRestore(stack: VoidPtr): void; + stackAlloc(size: number): VoidPtr; + instantiateWasm?: InstantiateWasmCallBack; + preInit?: (() => any)[] | (() => any); + preRun?: (() => any)[] | (() => any); + onRuntimeInitialized?: () => any; + postRun?: (() => any)[] | (() => any); + onAbort?: { + (error: any): void; + }; + onExit?: { + (code: number): void; + }; +} +type InstantiateWasmSuccessCallback = (instance: WebAssembly.Instance, module: WebAssembly.Module | undefined) => void; +type InstantiateWasmCallBack = (imports: WebAssembly.Imports, successCallback: InstantiateWasmSuccessCallback) => any; +declare type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array; + +interface DotnetHostBuilder { + withConfig(config: MonoConfig): DotnetHostBuilder; + withConfigSrc(configSrc: string): DotnetHostBuilder; + withApplicationArguments(...args: string[]): DotnetHostBuilder; + withEnvironmentVariable(name: string, value: string): DotnetHostBuilder; + withEnvironmentVariables(variables: { + [i: string]: string; + }): DotnetHostBuilder; + withVirtualWorkingDirectory(vfsPath: string): DotnetHostBuilder; + withDiagnosticTracing(enabled: boolean): DotnetHostBuilder; + withDebugging(level: number): DotnetHostBuilder; + withMainAssembly(mainAssemblyName: string): DotnetHostBuilder; + withApplicationArgumentsFromQuery(): DotnetHostBuilder; + withApplicationEnvironment(applicationEnvironment?: string): DotnetHostBuilder; + withApplicationCulture(applicationCulture?: string): DotnetHostBuilder; + /** + * Overrides the built-in boot resource loading mechanism so that boot resources can be fetched + * from a custom source, such as an external CDN. + */ + withResourceLoader(loadBootResource?: LoadBootResourceCallback): DotnetHostBuilder; + create(): Promise; + run(): Promise; +} +type MonoConfig = { + /** + * Additional search locations for assets. + */ + remoteSources?: string[]; + /** + * It will not fail the startup is .pdb files can't be downloaded + */ + ignorePdbLoadErrors?: boolean; + /** + * We are throttling parallel downloads in order to avoid net::ERR_INSUFFICIENT_RESOURCES on chrome. The default value is 16. + */ + maxParallelDownloads?: number; + /** + * We are making up to 2 more delayed attempts to download same asset. Default true. + */ + enableDownloadRetry?: boolean; + /** + * Name of the assembly with main entrypoint + */ + mainAssemblyName?: string; + /** + * Configures the runtime's globalization mode + */ + globalizationMode?: GlobalizationMode; + /** + * debugLevel > 0 enables debugging and sets the debug log level to debugLevel + * debugLevel == 0 disables debugging and enables interpreter optimizations + * debugLevel < 0 enables debugging and disables debug logging. + */ + debugLevel?: number; + /** + * Gets a value that determines whether to enable caching of the 'resources' inside a CacheStorage instance within the browser. + */ + cacheBootResources?: boolean; + /** + * Delay of the purge of the cached resources in milliseconds. Default is 10000 (10 seconds). + */ + cachedResourcesPurgeDelay?: number; + /** + * Configures use of the `integrity` directive for fetching assets + */ + disableIntegrityCheck?: boolean; + /** + * Configures use of the `no-cache` directive for fetching assets + */ + disableNoCacheFetch?: boolean; + /** + * Enables diagnostic log messages during startup + */ + diagnosticTracing?: boolean; + /** + * Dictionary-style Object containing environment variables + */ + environmentVariables?: { + [i: string]: string; + }; + /** + * initial number of workers to add to the emscripten pthread pool + */ + pthreadPoolSize?: number; + /** + * If true, the snapshot of runtime's memory will be stored in the browser and used for faster startup next time. Default is false. + */ + startupMemoryCache?: boolean; + /** + * application environment + */ + applicationEnvironment?: string; + /** + * Gets the application culture. This is a name specified in the BCP 47 format. See https://tools.ietf.org/html/bcp47 + */ + applicationCulture?: string; + /** + * definition of assets to load along with the runtime. + */ + resources?: ResourceGroups; + /** + * appsettings files to load to VFS + */ + appsettings?: string[]; + /** + * config extensions declared in MSBuild items @(WasmBootConfigExtension) + */ + extensions?: { + [name: string]: any; + }; +}; +export type ResourceExtensions = { + [extensionName: string]: ResourceList; +}; +export interface ResourceGroups { + hash?: string; + assembly?: ResourceList; + lazyAssembly?: ResourceList; + pdb?: ResourceList; + jsModuleWorker?: ResourceList; + jsModuleNative: ResourceList; + jsModuleRuntime: ResourceList; + wasmSymbols?: ResourceList; + wasmNative: ResourceList; + icu?: ResourceList; + satelliteResources?: { + [cultureName: string]: ResourceList; + }; + modulesAfterConfigLoaded?: ResourceList; + modulesAfterRuntimeReady?: ResourceList; + extensions?: ResourceExtensions; + vfs?: { + [virtualPath: string]: ResourceList; + }; +} +/** + * A "key" is name of the file, a "value" is optional hash for integrity check. + */ +export type ResourceList = { + [name: string]: string | null | ""; +}; +/** + * Overrides the built-in boot resource loading mechanism so that boot resources can be fetched + * from a custom source, such as an external CDN. + * @param type The type of the resource to be loaded. + * @param name The name of the resource to be loaded. + * @param defaultUri The URI from which the framework would fetch the resource by default. The URI may be relative or absolute. + * @param integrity The integrity string representing the expected content in the response. + * @param behavior The detailed behavior/type of the resource to be loaded. + * @returns A URI string or a Response promise to override the loading process, or null/undefined to allow the default loading behavior. + * When returned string is not qualified with `./` or absolute URL, it will be resolved against the application base URI. + */ +type LoadBootResourceCallback = (type: WebAssemblyBootResourceType, name: string, defaultUri: string, integrity: string, behavior: AssetBehaviors) => string | Promise | null | undefined; +export interface LoadingResource { + name: string; + url: string; + response: Promise; +} +interface AssetEntry { + /** + * the name of the asset, including extension. + */ + name: string; + /** + * determines how the asset will be handled once loaded + */ + behavior: AssetBehaviors; + /** + * this should be absolute url to the asset + */ + resolvedUrl?: string; + /** + * the integrity hash of the asset (if any) + */ + hash?: string | null | ""; + /** + * If specified, overrides the path of the asset in the virtual filesystem and similar data structures once downloaded. + */ + virtualPath?: string; + /** + * Culture code + */ + culture?: string; + /** + * If true, an attempt will be made to load the asset from each location in MonoConfig.remoteSources. + */ + loadRemote?: boolean; + /** + * If true, the runtime startup would not fail if the asset download was not successful. + */ + isOptional?: boolean; + /** + * If provided, runtime doesn't have to fetch the data. + * Runtime would set the buffer to null after instantiation to free the memory. + */ + buffer?: ArrayBuffer | Promise; + /** + * If provided, runtime doesn't have to import it's JavaScript modules. + * This will not work for multi-threaded runtime. + */ + moduleExports?: any | Promise; + /** + * It's metadata + fetch-like Promise + * If provided, the runtime doesn't have to initiate the download. It would just await the response. + */ + pendingDownload?: LoadingResource; +} +type SingleAssetBehaviors = +/** + * The binary of the dotnet runtime. + */ + "dotnetwasm" + /** + * The javascript module for loader. + */ + | "js-module-dotnet" + /** + * The javascript module for threads. + */ + | "js-module-threads" + /** + * The javascript module for runtime. + */ + | "js-module-runtime" + /** + * The javascript module for emscripten. + */ + | "js-module-native" + /** + * Typically blazor.boot.json + */ + | "manifest"; +type AssetBehaviors = SingleAssetBehaviors | + /** + * Load asset as a managed resource assembly. + */ + "resource" + /** + * Load asset as a managed assembly. + */ + | "assembly" + /** + * Load asset as a managed debugging information. + */ + | "pdb" + /** + * Store asset into the native heap. + */ + | "heap" + /** + * Load asset as an ICU data archive. + */ + | "icu" + /** + * Load asset into the virtual filesystem (for fopen, File.Open, etc). + */ + | "vfs" + /** + * The javascript module that came from nuget package . + */ + | "js-module-library-initializer" + /** + * The javascript module for threads. + */ + | "symbols"; +declare const enum GlobalizationMode { + /** + * Load sharded ICU data. + */ + Sharded = "sharded", + /** + * Load all ICU data. + */ + All = "all", + /** + * Operate in invariant globalization mode. + */ + Invariant = "invariant", + /** + * Use user defined icu file. + */ + Custom = "custom", + /** + * Operate in hybrid globalization mode with small ICU files, using native platform functions. + */ + Hybrid = "hybrid" +} +type DotnetModuleConfig = { + disableDotnet6Compatibility?: boolean; + config?: MonoConfig; + configSrc?: string; + onConfigLoaded?: (config: MonoConfig) => void | Promise; + onDotnetReady?: () => void | Promise; + onDownloadResourceProgress?: (resourcesLoaded: number, totalResources: number) => void; + imports?: any; + exports?: string[]; +} & Partial; +type APIType = { + runMain: (mainAssemblyName: string, args: string[]) => Promise; + runMainAndExit: (mainAssemblyName: string, args: string[]) => Promise; + setEnvironmentVariable: (name: string, value: string) => void; + getAssemblyExports(assemblyName: string): Promise; + setModuleImports(moduleName: string, moduleImports: any): void; + getConfig: () => MonoConfig; + invokeLibraryInitializers: (functionName: string, args: any[]) => Promise; + setHeapB32: (offset: NativePointer, value: number | boolean) => void; + setHeapU8: (offset: NativePointer, value: number) => void; + setHeapU16: (offset: NativePointer, value: number) => void; + setHeapU32: (offset: NativePointer, value: NativePointer | number) => void; + setHeapI8: (offset: NativePointer, value: number) => void; + setHeapI16: (offset: NativePointer, value: number) => void; + setHeapI32: (offset: NativePointer, value: number) => void; + setHeapI52: (offset: NativePointer, value: number) => void; + setHeapU52: (offset: NativePointer, value: number) => void; + setHeapI64Big: (offset: NativePointer, value: bigint) => void; + setHeapF32: (offset: NativePointer, value: number) => void; + setHeapF64: (offset: NativePointer, value: number) => void; + getHeapB32: (offset: NativePointer) => boolean; + getHeapU8: (offset: NativePointer) => number; + getHeapU16: (offset: NativePointer) => number; + getHeapU32: (offset: NativePointer) => number; + getHeapI8: (offset: NativePointer) => number; + getHeapI16: (offset: NativePointer) => number; + getHeapI32: (offset: NativePointer) => number; + getHeapI52: (offset: NativePointer) => number; + getHeapU52: (offset: NativePointer) => number; + getHeapI64Big: (offset: NativePointer) => bigint; + getHeapF32: (offset: NativePointer) => number; + getHeapF64: (offset: NativePointer) => number; + localHeapViewI8: () => Int8Array; + localHeapViewI16: () => Int16Array; + localHeapViewI32: () => Int32Array; + localHeapViewI64Big: () => BigInt64Array; + localHeapViewU8: () => Uint8Array; + localHeapViewU16: () => Uint16Array; + localHeapViewU32: () => Uint32Array; + localHeapViewF32: () => Float32Array; + localHeapViewF64: () => Float64Array; +}; +type RuntimeAPI = { + /** + * @deprecated Please use API object instead. See also MONOType in dotnet-legacy.d.ts + */ + MONO: any; + /** + * @deprecated Please use API object instead. See also BINDINGType in dotnet-legacy.d.ts + */ + BINDING: any; + INTERNAL: any; + Module: EmscriptenModule; + runtimeId: number; + runtimeBuildInfo: { + productVersion: string; + gitHash: string; + buildConfiguration: string; + }; +} & APIType; +type ModuleAPI = { + dotnet: DotnetHostBuilder; + exit: (code: number, reason?: any) => void; +}; +type CreateDotnetRuntimeType = (moduleFactory: DotnetModuleConfig | ((api: RuntimeAPI) => DotnetModuleConfig)) => Promise; +type WebAssemblyBootResourceType = "assembly" | "pdb" | "dotnetjs" | "dotnetwasm" | "globalization" | "manifest" | "configuration"; + +interface IDisposable { + dispose(): void; + get isDisposed(): boolean; +} +interface IMemoryView extends IDisposable { + /** + * copies elements from provided source to the wasm memory. + * target has to have the elements of the same type as the underlying C# array. + * same as TypedArray.set() + */ + set(source: TypedArray, targetOffset?: number): void; + /** + * copies elements from wasm memory to provided target. + * target has to have the elements of the same type as the underlying C# array. + */ + copyTo(target: TypedArray, sourceOffset?: number): void; + /** + * same as TypedArray.slice() + */ + slice(start?: number, end?: number): TypedArray; + get length(): number; + get byteLength(): number; +} + +declare function mono_exit(exit_code: number, reason?: any): void; + +declare const dotnet: DotnetHostBuilder; +declare const exit: typeof mono_exit; + +declare global { + function getDotnetRuntime(runtimeId: number): RuntimeAPI | undefined; +} +declare const createDotnetRuntime: CreateDotnetRuntimeType; + +export { AssetBehaviors, AssetEntry, CreateDotnetRuntimeType, DotnetHostBuilder, DotnetModuleConfig, EmscriptenModule, GlobalizationMode, IMemoryView, ModuleAPI, MonoConfig, RuntimeAPI, createDotnetRuntime as default, dotnet, exit }; diff --git a/src/js/src/dotnet.native.g.d.ts b/src/js/src/dotnet.native.g.d.ts new file mode 100644 index 00000000..47633c9b --- /dev/null +++ b/src/js/src/dotnet.native.g.d.ts @@ -0,0 +1,2 @@ +// Resolved when building C# solution. +export const embedded = false; diff --git a/src/js/src/dotnet.runtime.g.d.ts b/src/js/src/dotnet.runtime.g.d.ts new file mode 100644 index 00000000..47633c9b --- /dev/null +++ b/src/js/src/dotnet.runtime.g.d.ts @@ -0,0 +1,2 @@ +// Resolved when building C# solution. +export const embedded = false; diff --git a/src/js/src/event.ts b/src/js/src/event.ts new file mode 100644 index 00000000..04825819 --- /dev/null +++ b/src/js/src/event.ts @@ -0,0 +1,95 @@ +/** Allows broadcasting events. */ +export interface EventBroadcaster { + /** Notifies attached handlers with specified payload. + * @param args The payload of the notification. */ + broadcast: (...args: [...T]) => void; +} + +/** Allows attaching event handlers. */ +export interface EventSubscriber { + /** Attaches specified handler for events emitted by this event instance. + * @param handler The handler to attach. */ + subscribe: (handler: (...args: [...T]) => void) => string; + /** Detaches specified handler from events emitted by this event instance. + * @param handler The handler to detach. */ + unsubscribe: (handler: (...args: [...T]) => void) => void; + /** In case event was broadcast at least once, returns last payload; undefined otherwise. */ + readonly last?: [...T]; +} + +/** Optional configuration of an event instance. */ +export type EventOptions = { + /** Custom warnings handler; by default console.warn is used. */ + warn?: (message: string) => void +}; + +/** Allows attaching handlers and broadcasting events. */ +export class Event implements EventBroadcaster, EventSubscriber { + private readonly handlers = new Map void>(); + private readonly warn: (message: string) => void; + private lastArgs?: [...T]; + + /** Creates new event instance. */ + constructor(options?: EventOptions) { + this.warn = options?.warn ?? console.warn; + } + + /** Notifies attached handlers with specified payload. + * @param args The payload of the notification. */ + public broadcast(...args: [...T]) { + this.lastArgs = args; + for (const handler of this.handlers.values()) + handler(...this.lastArgs); + } + + /** Attaches specified handler for events emitted by this event instance. + * @param handler The handler to attach. */ + public subscribe(handler: (...args: [...T]) => void): string { + const id = this.getOrDefineId(handler); + this.subscribeById(id, handler); + return id; + } + + /** Detaches specified handler from events emitted by this event instance. + * @param handler The handler to detach. */ + public unsubscribe(handler: (...args: [...T]) => void) { + if (handler == null) return; + const id = this.getOrDefineId(handler); + this.unsubscribeById(id); + } + + /** Attaches handler with specified identifier for events emitted by this event instance. + * @param id Identifier of the handler. + * @param handler The handler to attach. */ + public subscribeById(id: string, handler: (...args: [...T]) => void): void { + if (this.handlers.has(id)) + this.warn(`Failed to subscribe event handler with ID '${id}': handler is already subscribed.`); + else this.handlers.set(id, handler); + } + + /** Detaches handler with specified identifier from events emitted by this event instance. + * @param id Identifier of the handler. */ + public unsubscribeById(id: string) { + if (this.handlers.has(id)) + this.handlers.delete(id); + else this.warn(`Failed to unsubscribe event handler with ID '${id}': handler is not subscribed.`); + } + + /** In case event was broadcast at least once, returns last payload; undefined otherwise. */ + public get last() { + return this.lastArgs; + } + + private getOrDefineId(handler: (...args: [...T]) => void): string { + const prop = "bootsharpEventHandlerId"; + if (handler.hasOwnProperty(prop)) + return (handler as unknown as { [index: string]: string })[prop]; + const id = crypto.randomUUID(); + Object.defineProperty(handler, prop, { + value: id, + enumerable: false, + writable: false + }); + return id; + } +} diff --git a/src/js/src/exports.ts b/src/js/src/exports.ts new file mode 100644 index 00000000..c9ab1d72 --- /dev/null +++ b/src/js/src/exports.ts @@ -0,0 +1,8 @@ +import type { RuntimeAPI } from "./modules"; + +export let exports: unknown; + +export async function bindExports(runtime: RuntimeAPI, assembly: string) { + const asm = await runtime.getAssemblyExports(assembly); + exports = asm["Bootsharp"]?.["Exports"]; +} diff --git a/src/js/src/imports.ts b/src/js/src/imports.ts new file mode 100644 index 00000000..25426be7 --- /dev/null +++ b/src/js/src/imports.ts @@ -0,0 +1,6 @@ +import * as bindings from "./bindings.g"; +import type { RuntimeAPI } from "./modules"; + +export function bindImports(runtime: RuntimeAPI) { + runtime.setModuleImports("Bootsharp", bindings); +} diff --git a/src/js/src/modules.ts b/src/js/src/modules.ts new file mode 100644 index 00000000..dfee8411 --- /dev/null +++ b/src/js/src/modules.ts @@ -0,0 +1,22 @@ +import type { ModuleAPI, MonoConfig, AssetEntry } from "./dotnet.g.d.ts"; + +export type * from "./dotnet.g.d.ts"; +export type RuntimeConfig = MonoConfig & { assets?: AssetEntry[] }; + +/** Fetches main dotnet module (dotnet.js). */ +export async function getMain(root?: string): Promise { + if (root == null) return await import("./dotnet.g"); + return await import(/*@vite-ignore*//*webpackIgnore:true*/`${root}/dotnet.js`); +} + +/** Fetches dotnet native module (dotnet.native.js). */ +export async function getNative(root?: string): Promise { + if (root == null) return await import("./dotnet.native.g"); + return await import(/*@vite-ignore*//*webpackIgnore:true*/`${root}/dotnet.native.js`); +} + +/** Fetches dotnet runtime module (dotnet.runtime.js). */ +export async function getRuntime(root?: string): Promise { + if (root == null) return await import("./dotnet.runtime.g"); + return await import(/*@vite-ignore*//*webpackIgnore:true*/`${root}/dotnet.runtime.js`); +} diff --git a/src/js/src/resources.g.ts b/src/js/src/resources.g.ts new file mode 100644 index 00000000..b3cf9a4b --- /dev/null +++ b/src/js/src/resources.g.ts @@ -0,0 +1,4 @@ +import { BootResources } from "./resources"; + +// Autogenerated and resolved when building C# solution. +export default {} as BootResources; diff --git a/src/js/src/resources.ts b/src/js/src/resources.ts new file mode 100644 index 00000000..3229c5f9 --- /dev/null +++ b/src/js/src/resources.ts @@ -0,0 +1,22 @@ +import generated from "./resources.g"; + +/** Resources required to boot .NET runtime. */ +export type BootResources = { + /** Compiled .NET WASM runtime module. */ + readonly wasm: BinaryResource; + /** Compiled .NET assemblies. */ + readonly assemblies: BinaryResource[]; + /** Name of the entry (main) assembly, with .dll extension. */ + readonly entryAssemblyName: string; +} + +/** Boot resource with binary content. */ +export type BinaryResource = { + /** Name of the binary file, including extension. */ + readonly name: string; + /** Binary or base64-encoded content of the file; undefined when embedding disabled. */ + readonly content?: Uint8Array | string; +} + +/** Resources required to boot .NET runtime. */ +export const resources: BootResources = generated; diff --git a/src/js/test/cs.mjs b/src/js/test/cs.mjs new file mode 100644 index 00000000..e080a401 --- /dev/null +++ b/src/js/test/cs.mjs @@ -0,0 +1,74 @@ +import emb, { Test as EmbTest } from "./cs/Test/bin/embedded/bootsharp.mjs"; +import sid, { Test as SidTest } from "./cs/Test/bin/sideload/bootsharp.mjs"; +import assert from "node:assert"; +import { resolve, parse, basename } from "node:path"; +import { readdirSync, readFileSync, existsSync } from "node:fs"; +import { pathToFileURL } from "node:url"; + +export const embedded = emb; +export const sideload = sid; +export const EmbeddedTest = EmbTest; +export const SideloadTest = SidTest; +export const root = pathToFileURL("./test/cs/Test/bin/sideload/bin").toString(); + +export * from "./cs/Test/bin/sideload/bootsharp.mjs"; + +assertPathExists("test/cs/Test/bin/embedded/bootsharp.mjs"); +assertPathExists("test/cs/Test/bin/sideload/bootsharp.mjs"); + +export const bins = { + wasm: loadWasmBinary(), + assemblies: loadAssemblies(), + entryAssemblyName: "Test.dll" +}; + +export async function bootEmbedded() { + EmbeddedTest.onMainInvoked = () => {}; + await embedded.boot({}); +} + +export async function bootSideload() { + SideloadTest.onMainInvoked = () => {}; + await sideload.boot({ root }); +} + +export function getDeclarations() { + const file = resolve("test/cs/Test/bin/embedded/types/bindings.g.d.ts"); + assertPathExists(file); + return readFileSync(file).toString(); +} + +function loadWasmBinary() { + const file = resolve("test/cs/Test/bin/sideload/bin/dotnet.native.wasm"); + assertPathExists(file); + return readFileSync(file); +} + +function loadAssemblies() { + let assemblies = []; + for (const assemblyPath of findAssemblies()) + assemblies.push(loadAssembly(assemblyPath)); + return assemblies; +} + +function findAssemblies() { + let assemblyPaths = []; + const dirPath = resolve("test/cs/Test/bin/sideload/bin"); + assertPathExists(dirPath); + for (const fileName of readdirSync(dirPath)) + if (!fileName.endsWith("dotnet.native.wasm") && fileName.endsWith(".wasm")) + assemblyPaths.push(`${dirPath}/${fileName}`); + return assemblyPaths; +} + +function loadAssembly(assemblyPath) { + return { + name: parse(assemblyPath).base, + content: readFileSync(assemblyPath) + }; +} + +function assertPathExists(pathToCheck) { + const name = basename(pathToCheck); + assert(existsSync(pathToCheck), `Missing test project artifact: '${name}'. Run 'scripts/compile-test.sh'.`); +} diff --git a/src/js/test/cs/Test.Types/Registry.cs b/src/js/test/cs/Test.Types/Registry.cs new file mode 100644 index 00000000..a179924f --- /dev/null +++ b/src/js/test/cs/Test.Types/Registry.cs @@ -0,0 +1,46 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Bootsharp; + +namespace Test.Types; + +public partial class Registry +{ + public List Wheeled { get; set; } + public List Tracked { get; set; } + + [JSInvokable] + public static Registry EchoRegistry (Registry registry) => registry; + + [JSInvokable] + public static float CountTotalSpeed () + { + var registry = GetRegistry(); + return registry.Tracked.Sum(t => t.MaxSpeed) + + registry.Wheeled.Sum(t => t.MaxSpeed); + } + + [JSInvokable] + public static async Task> ConcatRegistriesAsync (IReadOnlyList registries) + { + await Task.Delay(10); + return registries.Concat(GetRegistries()).ToArray(); + } + + [JSInvokable] + public static async Task> MapRegistriesAsync (IReadOnlyDictionary map) + { + await Task.Delay(10); + return map.Concat(GetRegistryMap()).ToDictionary(kv => kv.Key, kv => kv.Value); + } + + [JSFunction] + public static partial Registry GetRegistry (); + + [JSFunction] + public static partial IReadOnlyList GetRegistries (); + + [JSFunction] + public static partial IReadOnlyDictionary GetRegistryMap (); +} diff --git a/src/js/test/cs/Test.Types/Test.Types.csproj b/src/js/test/cs/Test.Types/Test.Types.csproj new file mode 100644 index 00000000..3f2f63dc --- /dev/null +++ b/src/js/test/cs/Test.Types/Test.Types.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + true + bin/codegen + + + + + + + diff --git a/JavaScript/test/csharp/Test.Types/TrackType.cs b/src/js/test/cs/Test.Types/TrackType.cs similarity index 100% rename from JavaScript/test/csharp/Test.Types/TrackType.cs rename to src/js/test/cs/Test.Types/TrackType.cs diff --git a/JavaScript/test/csharp/Test.Types/Tracked.cs b/src/js/test/cs/Test.Types/Tracked.cs similarity index 100% rename from JavaScript/test/csharp/Test.Types/Tracked.cs rename to src/js/test/cs/Test.Types/Tracked.cs diff --git a/JavaScript/test/csharp/Test.Types/Vehicle.cs b/src/js/test/cs/Test.Types/Vehicle.cs similarity index 100% rename from JavaScript/test/csharp/Test.Types/Vehicle.cs rename to src/js/test/cs/Test.Types/Vehicle.cs diff --git a/JavaScript/test/csharp/Test.Types/Wheeled.cs b/src/js/test/cs/Test.Types/Wheeled.cs similarity index 100% rename from JavaScript/test/csharp/Test.Types/Wheeled.cs rename to src/js/test/cs/Test.Types/Wheeled.cs diff --git a/src/js/test/cs/Test.sln b/src/js/test/cs/Test.sln new file mode 100644 index 00000000..d351cef7 --- /dev/null +++ b/src/js/test/cs/Test.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test", "Test/Test.csproj", "{B6CC139C-70A6-4B48-8344-5AC58253C803}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test.Types", "Test.Types/Test.Types.csproj", "{B66B3A46-37FA-4B13-8783-4FAA096DDD0A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B6CC139C-70A6-4B48-8344-5AC58253C803}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B6CC139C-70A6-4B48-8344-5AC58253C803}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B6CC139C-70A6-4B48-8344-5AC58253C803}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B6CC139C-70A6-4B48-8344-5AC58253C803}.Release|Any CPU.Build.0 = Release|Any CPU + {B66B3A46-37FA-4B13-8783-4FAA096DDD0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B66B3A46-37FA-4B13-8783-4FAA096DDD0A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B66B3A46-37FA-4B13-8783-4FAA096DDD0A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B66B3A46-37FA-4B13-8783-4FAA096DDD0A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/src/js/test/cs/Test/Event.cs b/src/js/test/cs/Test/Event.cs new file mode 100644 index 00000000..c85e71d5 --- /dev/null +++ b/src/js/test/cs/Test/Event.cs @@ -0,0 +1,19 @@ +using Bootsharp; +using Test.Types; + +namespace Test; + +public static partial class Event +{ + [JSInvokable] + public static void BroadcastEvent (string value) => OnEvent(value); + + [JSInvokable] + public static void BroadcastEventMultiple (byte num, Vehicle? vehicle, TrackType type) => OnEventMultiple(num, vehicle, type); + + [JSEvent] + public static partial string OnEvent (string value); + + [JSEvent] + public static partial string OnEventMultiple (byte num, Vehicle? vehicle, TrackType type); +} diff --git a/src/js/test/cs/Test/Functions.cs b/src/js/test/cs/Test/Functions.cs new file mode 100644 index 00000000..4c8892e4 --- /dev/null +++ b/src/js/test/cs/Test/Functions.cs @@ -0,0 +1,29 @@ +using System.Threading.Tasks; +using Bootsharp; + +namespace Test; + +public static partial class Functions +{ + [JSInvokable] + public static string EchoString () => GetString(); + + [JSFunction] + public static partial string GetString (); + + [JSInvokable] + public static async Task EchoStringAsync () + { + await Task.Delay(1); + return await GetStringAsync(); + } + + [JSFunction] + public static partial Task GetStringAsync (); + + [JSInvokable] + public static byte[] EchoBytes () => GetBytes(); + + [JSFunction] + public static partial byte[] GetBytes (); +} diff --git a/src/js/test/cs/Test/Invokable.cs b/src/js/test/cs/Test/Invokable.cs new file mode 100644 index 00000000..8a0b3e2e --- /dev/null +++ b/src/js/test/cs/Test/Invokable.cs @@ -0,0 +1,31 @@ +using System; +using System.Text; +using System.Threading.Tasks; +using Bootsharp; + +namespace Test; + +public static partial class Invokable +{ + [JSInvokable] + public static void InvokeVoid () { } + + [JSInvokable] + public static string JoinStrings (string a, string b) => a + b; + + [JSInvokable] + public static double SumDoubles (double a, double b) => a + b; + + [JSInvokable] + public static DateTime AddDays (DateTime date, int days) => date.AddDays(days); + + [JSInvokable] + public static async Task JoinStringsAsync (string a, string b) + { + await Task.Delay(1).ConfigureAwait(false); + return a + b; + } + + [JSInvokable] + public static string BytesToString (byte[] bytes) => Encoding.UTF8.GetString(bytes); +} diff --git a/src/js/test/cs/Test/Platform.cs b/src/js/test/cs/Test/Platform.cs new file mode 100644 index 00000000..b5612ca0 --- /dev/null +++ b/src/js/test/cs/Test/Platform.cs @@ -0,0 +1,40 @@ +using System; +using System.Net.WebSockets; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Bootsharp; + +namespace Test; + +public static partial class Platform +{ + [JSInvokable] + public static string GetGuid () => Guid.NewGuid().ToString(); + + [JSInvokable] + public static string? CatchException () + { + try { ThrowJS(); } + catch (Exception e) { return e.Message; } + return null; + } + + [JSInvokable] + public static void ThrowCS (string message) => throw new Exception(message); + + [JSFunction] + public static partial void ThrowJS (); + + [JSInvokable] + public static async Task EchoWebSocket (string uri, string message, int timeout) + { + using var cts = new CancellationTokenSource(timeout); + using var ws = new ClientWebSocket(); + await ws.ConnectAsync(new Uri(uri), cts.Token); + var buffer = Encoding.UTF8.GetBytes(message); + await ws.SendAsync(new ArraySegment(buffer), WebSocketMessageType.Text, true, cts.Token); + await ws.ReceiveAsync(new ArraySegment(buffer), cts.Token); + return Encoding.UTF8.GetString(buffer); + } +} diff --git a/src/js/test/cs/Test/Program.cs b/src/js/test/cs/Test/Program.cs new file mode 100644 index 00000000..0fe877af --- /dev/null +++ b/src/js/test/cs/Test/Program.cs @@ -0,0 +1,11 @@ +using Bootsharp; + +namespace Test; + +public static partial class Program +{ + public static void Main () => OnMainInvoked(); + + [JSFunction] + public static partial void OnMainInvoked (); +} diff --git a/src/js/test/cs/Test/Test.csproj b/src/js/test/cs/Test/Test.csproj new file mode 100644 index 00000000..7e222cd6 --- /dev/null +++ b/src/js/test/cs/Test/Test.csproj @@ -0,0 +1,20 @@ + + + + net8.0 + enable + browser-wasm + true + bin/codegen + false + npx rollup bootsharp.js -d ./ -f es -g process,module --output.preserveModules --entryFileNames [name].mjs + true + true + + + + + + + + diff --git a/Samples/React/backend/nuget.config b/src/js/test/cs/nuget.config similarity index 65% rename from Samples/React/backend/nuget.config rename to src/js/test/cs/nuget.config index 5dfe81fa..696be85f 100644 --- a/Samples/React/backend/nuget.config +++ b/src/js/test/cs/nuget.config @@ -1,6 +1,6 @@ - + diff --git a/src/js/test/spec/boot.spec.mjs b/src/js/test/spec/boot.spec.mjs new file mode 100644 index 00000000..1c70d00e --- /dev/null +++ b/src/js/test/spec/boot.spec.mjs @@ -0,0 +1,176 @@ +import { describe, expect, it, vi } from "vitest"; +import { resolve } from "node:path"; + +async function setup() { + // dotnet merges with the host node process, so it's not possible + // to exit w/o killing the test process (which is bound to test file); + // this is a workaround to simulate clean environment in each test + vi.resetModules(); + const cs = await import("../cs.mjs"); + cs.SideloadTest.onMainInvoked = vi.fn(); + return { ...cs, bootsharp: cs.sideload, Test: cs.SideloadTest }; +} + +describe("boot", () => { + it("uses embedded modules when root is not specified", async () => { + const { bootsharp } = await setup(); + expect((await bootsharp.dotnet.getMain()).embedded).toStrictEqual(false); + expect((await bootsharp.dotnet.getNative()).embedded).toStrictEqual(false); + expect((await bootsharp.dotnet.getRuntime()).embedded).toStrictEqual(false); + }); + it("uses sideload modules when root is specified", async () => { + const { bootsharp, root } = await setup(); + expect((await bootsharp.dotnet.getMain(root)).embedded).toBeUndefined(); + expect((await bootsharp.dotnet.getNative(root)).embedded).toBeUndefined(); + expect((await bootsharp.dotnet.getRuntime(root)).embedded).toBeUndefined(); + }); + it("defines module exports when root is not specified", async () => { + const { bootsharp } = await setup(); + const module = await import("../cs/Test/bin/sideload/config"); + const config = await module.buildConfig(bootsharp.resources); + expect(config.assets[0].moduleExports).toBeDefined(); + expect(config.assets[1].moduleExports).toBeDefined(); + expect(config.assets[2].moduleExports).toBeDefined(); + }); + it("overrides name to url in multithreading mode", async () => { + const { bootsharp, root } = await setup(); + vi.doMock("../cs/Test/bin/sideload/dotnet.g", () => ({ mt: true })); + const module = await import("../cs/Test/bin/sideload/config"); + const config = await module.buildConfig(bootsharp.resources, root); + expect(config.assets[0].name.endsWith("/bin/dotnet.js")).toBeTruthy(); + expect(config.assets[1].name.endsWith("/bin/dotnet.native.js")).toBeTruthy(); + expect(config.assets[2].name.endsWith("/bin/dotnet.runtime.js")).toBeTruthy(); + vi.doUnmock("../cs/Test/bin/sideload/dotnet.g"); + }); + it("can boot in embedded mode", async () => { + vi.resetModules(); + const cs = await import("../cs.mjs"); + cs.EmbeddedTest.onMainInvoked = vi.fn(); + await cs.embedded.boot({}); + expect(cs.EmbeddedTest.onMainInvoked).toHaveBeenCalledOnce(); + }); + it("can boot while streaming bins from root", async () => { + const { bootsharp, root, Test } = await setup(); + await bootsharp.boot({ root }); + expect(Test.onMainInvoked).toHaveBeenCalledOnce(); + }); + it("can boot with bins content pre-assigned", async () => { + const { bootsharp, Test, root, bins } = await setup(); + const resources = { ...bootsharp.resources }; + resources.wasm.content = bins.wasm; + for (const asm of resources.assemblies) + asm.content = bins.assemblies.find(a => a.name === asm.name).content; + await bootsharp.boot({ resources, root }); + expect(Test.onMainInvoked).toHaveBeenCalledOnce(); + }); + it("can boot with base64 content", async () => { + const { bootsharp, Test, root, bins } = await setup(); + const resources = { ...bootsharp.resources }; + resources.wasm.content = bins.wasm.toString("base64"); + for (const asm of resources.assemblies) + asm.content = bins.assemblies.find(a => a.name === asm.name).content.toString("base64"); + await bootsharp.boot({ resources, root }); + expect(Test.onMainInvoked).toHaveBeenCalledOnce(); + }); + it("can boot with base64 content w/o native encoder available", async () => { + const { bootsharp, Test, root, bins } = await setup(); + global.Buffer = undefined; + const resources = { ...bootsharp.resources }; + resources.wasm.content = bins.wasm.toString("base64"); + for (const asm of resources.assemblies) + asm.content = bins.assemblies.find(a => a.name === asm.name).content.toString("base64"); + await bootsharp.boot({ resources, root }); + expect(Test.onMainInvoked).toHaveBeenCalledOnce(); + }); + it("attempts to use atob when window is defined in global", async () => { + const { bootsharp, root, bins } = await setup(); + // noinspection JSValidateTypes + global.window = { atob: vi.fn() }; + const resources = { ...bootsharp.resources }; + resources.wasm.content = bins.wasm.toString("base64"); + for (const asm of resources.assemblies) + asm.content = bins.assemblies.find(a => a.name === asm.name).content.toString("base64"); + try { await bootsharp.boot({ resources, root }); } + catch {} + expect(global.window.atob).toHaveBeenCalledOnce(); + }); + it("throws when boot invoked while booted", async () => { + const { bootsharp, root } = await setup(); + await bootsharp.boot({ root }); + await expect(bootsharp.boot).rejects.toThrow(/already booted/); + }); + it("throws when boot invoked while booting", async () => { + const { bootsharp, root } = await setup(); + const boot = bootsharp.boot({ root }); + await expect(bootsharp.boot).rejects.toThrow(/already booting/); + await boot; + }); + it("throws when exit invoked while not booted", async () => { + const { bootsharp } = await setup(); + await expect(bootsharp.exit).rejects.toThrow(/not booted/); + }); + it("can exit when booted", async () => { + const { bootsharp, root } = await setup(); + await bootsharp.boot({ root }); + await bootsharp.exit(); + expect(bootsharp.getStatus()).toStrictEqual(0); + }); + it("respects boot customs", async () => { + const { bootsharp, bins } = await setup(); + const customs = { + config: { + mainAssemblyName: bins.entryAssemblyName, + assets: [ + { + name: resolve("test/cs/Test/bin/sideload/bin/dotnet.js"), + behavior: "js-module-dotnet" + }, + { + name: resolve("test/cs/Test/bin/sideload/bin/dotnet.runtime.js"), + behavior: "js-module-runtime" + }, + { + name: resolve("test/cs/Test/bin/sideload/bin/dotnet.native.js"), + behavior: "js-module-native" + }, + { + name: "dotnet.native.wasm", + buffer: bins.wasm, + behavior: "dotnetwasm" + }, + ...bins.assemblies.map(a => ({ name: a.name, buffer: a.content, behavior: "assembly" })) + ] + }, + create: vi.fn(async () => (await import("../cs/Test/bin/sideload/bin/dotnet.js")).dotnet.withConfig(customs.config).create()), + import: vi.fn(), + run: vi.fn(), + export: vi.fn() + }; + await bootsharp.boot(customs); + expect(customs.create).toHaveBeenCalledWith(customs.config); + expect(customs.import).toHaveBeenCalledOnce(); + expect(customs.run).toHaveBeenCalledOnce(); + expect(customs.export).toHaveBeenCalledOnce(); + }); +}); + +describe("boot status", () => { + it("is standby by default", async () => { + const { bootsharp } = await setup(); + expect(bootsharp.getStatus()).toStrictEqual(bootsharp.BootStatus.Standby); + }); + it("transitions to booting and then to booted", async () => { + const { bootsharp, root } = await setup(); + const promise = bootsharp.boot({ root }); + expect(bootsharp.getStatus()).toStrictEqual(bootsharp.BootStatus.Booting); + await promise; + expect(bootsharp.getStatus()).toStrictEqual(bootsharp.BootStatus.Booted); + }); + it("transitions to standby on exit", async () => { + const { bootsharp, root } = await setup(); + await bootsharp.boot({ root }); + expect(bootsharp.getStatus()).toStrictEqual(bootsharp.BootStatus.Booted); + await bootsharp.exit(); + expect(bootsharp.getStatus()).toStrictEqual(bootsharp.BootStatus.Standby); + }); +}); diff --git a/JavaScript/test/event.js b/src/js/test/spec/event.spec.mjs similarity index 65% rename from JavaScript/test/event.js rename to src/js/test/spec/event.spec.mjs index 07449c7a..d70e7c95 100644 --- a/JavaScript/test/event.js +++ b/src/js/test/spec/event.spec.mjs @@ -1,24 +1,24 @@ -const assert = require("assert"); -const { Event } = require("../dist/dotnet"); +import { describe, expect, it } from "vitest"; +import { Event } from "../cs.mjs"; describe("event", () => { it("can broadcast without subscribers", () => { - assert.doesNotThrow(() => new Event().broadcast()); + new Event().broadcast(); }); it("doesn't mind unsubscribing null handler", () => { - assert.doesNotThrow(() => new Event().unsubscribe(null)); + new Event().unsubscribe(null); }); it("warns when unsubscribing handler which is not subscribed", () => { let warning; - new Event(msg => warning = msg).unsubscribe(it); - assert(warning.includes("handler is not subscribed")); + new Event({ warn: msg => warning = msg }).unsubscribe(it); + expect(warning).include("handler is not subscribed"); }); it("warns when subscribing handler which is already subscribed", () => { let warning; - const event = new Event(msg => warning = msg); + const event = new Event({ warn: msg => warning = msg }); event.subscribe(it); event.subscribe(it); - assert(warning.includes("handler is already subscribed")); + expect(warning).include("handler is already subscribed"); }); it("invokes subscribed handlers in order", () => { let result = ""; @@ -26,7 +26,7 @@ describe("event", () => { event.subscribe(() => result = "foo"); event.subscribe(() => result = "bar"); event.broadcast(); - assert.deepStrictEqual(result, "bar"); + expect(result).toStrictEqual("bar"); }); it("doesn't invoke un-subscribed handler", () => { let result = false; @@ -36,52 +36,52 @@ describe("event", () => { event.broadcast(true); event.unsubscribe(handler); event.broadcast(false); - assert.deepStrictEqual(result, true); + expect(result).toStrictEqual(true); }); it("delivers broadcast argument to the handlers", () => { let result = ""; const event = new Event(); event.subscribe(v => result = v); event.broadcast("foo"); - assert.deepStrictEqual(result, "foo"); + expect(result).toStrictEqual("foo"); }); - it("doesnt add same handlers multiple times", () => { - let result = 0; - const event = new Event(null); - const incrementer = () => result++; - for (let i = 0; i < 10; i++) - event.subscribe(incrementer); - event.broadcast(); - assert.deepStrictEqual(result, 1); - }); - it("can broadcast multiple args", () => { + it("can broadcast multiple arguments", () => { let resultA, resultB; const event = new Event(); event.subscribe(function (a, b) { resultA = a; resultB = b; }); - event.broadcast(["foo", "bar"], "nya"); - assert.deepStrictEqual(resultA, ["foo", "bar"]); - assert.deepStrictEqual(resultB, "nya"); + event.broadcast(["foo", "bar", undefined, null], "nya"); + expect(resultA).toStrictEqual(["foo", "bar", undefined, null]); + expect(resultB).toStrictEqual("nya"); + }); + it("doesnt add same handlers multiple times", () => { + let result = 0; + const event = new Event({ warn: () => {} }); + const incrementer = () => result++; + for (let i = 0; i < 10; i++) + event.subscribe(incrementer); + event.broadcast(); + expect(result).toStrictEqual(1); }); it("can un/subscribe by id", () => { let result = 0; - const event = new Event(null); + const event = new Event(); const incrementer = () => result++; for (let i = 0; i < 10; i++) event.subscribeById(i.toString(), incrementer); event.unsubscribeById("0"); event.broadcast(); - assert.deepStrictEqual(result, 9); + expect(result).toStrictEqual(9); }); it("returns undefined last args until no broadcasts performed", () => { - assert.deepStrictEqual(new Event().getLast(), undefined); + expect(new Event().last).toBeUndefined(); }); it("returns args of the last broadcasts", () => { const event = new Event(); event.broadcast("foo"); - event.broadcast("bar", "nya"); - assert.deepStrictEqual(event.getLast(), ["bar", "nya"]); + event.broadcast("bar"); + expect(event.last).toStrictEqual(["bar"]); }); }); diff --git a/src/js/test/spec/export.spec.mjs b/src/js/test/spec/export.spec.mjs new file mode 100644 index 00000000..8ab8e1ad --- /dev/null +++ b/src/js/test/spec/export.spec.mjs @@ -0,0 +1,18 @@ +import { describe, it, expect } from "vitest"; +import { embedded, getDeclarations } from "../cs.mjs"; + +describe("export", () => { + it("exports bootsharp api", () => { + expect(embedded.boot).toBeTypeOf("function"); + expect(embedded.exit).toBeTypeOf("function"); + expect(embedded.resources).toBeTypeOf("object"); + }); + it("exports dotnet modules", () => { + expect(embedded.dotnet.getMain).toBeTypeOf("function"); + expect(embedded.dotnet.getNative).toBeTypeOf("function"); + expect(embedded.dotnet.getRuntime).toBeTypeOf("function"); + }); + it("exports type declarations", () => { + expect(getDeclarations()).toBeTruthy(); + }); +}); diff --git a/src/js/test/spec/interop.spec.mjs b/src/js/test/spec/interop.spec.mjs new file mode 100644 index 00000000..85ba269a --- /dev/null +++ b/src/js/test/spec/interop.spec.mjs @@ -0,0 +1,157 @@ +import { describe, it, beforeAll, expect } from "vitest"; +import { bootSideload, Test } from "../cs.mjs"; + +const TrackType = Test.Types.TrackType; + +describe("while bootsharp is not booted", () => { + it("throws when attempting to invoke C# APIs", () => { + expect(Test.invokeVoid).throw(/Boot the runtime before invoking C# APIs/); + }); +}); + +describe("while bootsharp is booted", () => { + beforeAll(bootSideload); + it("throws when invoking un-assigned JS function from C#", () => { + const error = /Failed to invoke '.+' from C#. Make sure to assign function in JavaScript/; + Test.onMainInvoked = undefined; + expect(Test.getBytes).toBeUndefined(); + expect(Test.getString).toBeUndefined(); + expect(Test.getStringAsync).toBeUndefined(); + expect(Test.throwJS).toBeUndefined(); + expect(Test.onMainInvoked).toBeUndefined(); + expect(Test.Types.getRegistry).toBeUndefined(); + expect(Test.Types.getRegistries).toBeUndefined(); + expect(Test.Types.getRegistryMap).toBeUndefined(); + expect(() => Test.getStringSerialized()).throw(error); + expect(() => Test.getStringAsyncSerialized()).throw(error); + expect(() => Test.getBytesSerialized()).throw(error); + expect(() => Test.throwJSSerialized()).throw(error); + expect(() => Test.onMainInvokedSerialized()).throw(error); + expect(() => Test.Types.getRegistrySerialized()).throw(error); + expect(() => Test.Types.getRegistriesSerialized()).throw(error); + expect(() => Test.Types.getRegistryMapSerialized()).throw(error); + }); + it("can invoke C# method", async () => { + expect(Test.joinStrings("foo", "bar")).toStrictEqual("foobar"); + }); + it("can invoke async C# method", async () => { + expect(await Test.joinStringsAsync("foo", "bar")).toStrictEqual("foobar"); + }); + it("can transfer strings", () => { + Test.getString = () => "foo"; + expect(Test.echoString()).toStrictEqual("foo"); + }); + it("can transfer decimals", () => { + expect(Test.sumDoubles(-1, 2.75)).toStrictEqual(1.75); + }); + it("can transfer dates", () => { + const date = new Date(1977, 3, 2); + const expected = new Date(1977, 3, 9); + const actual = new Date(Test.addDays(date, 7)); + expect(actual).toStrictEqual(expected); + }); + it("can transfer byte array", () => { + Test.getBytes = () => new Uint8Array([ + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x27, 0x73, 0x20, 0x73, 0x68, 0x69, 0x6e, 0x79, + 0x2c, 0x20, 0x43, 0x61, 0x70, 0x74, 0x61, 0x69, 0x6e, + 0x2e, 0x20, 0x4e, 0x6f, 0x74, 0x20, 0x74, 0x6f, 0x20, + 0x66, 0x72, 0x65, 0x74, 0x2e + ]); + const echo = Test.echoBytes(); + expect(Test.bytesToString(echo)).toStrictEqual("Everything's shiny, Captain. Not to fret."); + }); + it("can transfer structs", () => { + const expected = { + wheeled: [ + { id: "car", wheelCount: 4, maxSpeed: 100.0 }, + { id: "bicycle", wheelCount: 2, maxSpeed: 30.5 } + ], + tracked: [ + { id: "tank", trackType: TrackType.Chain, maxSpeed: 20.005 }, + { id: "tractor", trackType: TrackType.Rubber, maxSpeed: 15.9 } + ] + }; + const actual = Test.Types.echoRegistry(expected); + expect(actual).toStrictEqual(expected); + }); + it("can transfer lists as arrays", async () => { + Test.Types.getRegistries = () => [{ wheeled: [{ id: "foo", maxSpeed: 1, wheelCount: 0 }] }]; + const result = await Test.Types.concatRegistriesAsync([ + { wheeled: [{ id: "bar", maxSpeed: 1, wheelCount: 9 }] }, + { tracked: [{ id: "baz", maxSpeed: 5, trackType: TrackType.Rubber }] } + ]); + expect(result).toStrictEqual([ + { wheeled: [{ id: "bar", maxSpeed: 1, wheelCount: 9 }] }, + { tracked: [{ id: "baz", maxSpeed: 5, trackType: TrackType.Rubber }] }, + { wheeled: [{ id: "foo", maxSpeed: 1, wheelCount: 0 }] } + ]); + }); + it("can transfer dictionaries as maps", async () => { + // ES6 Map doesn't natively support JSON serialization, so using plain objects. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map + Test.Types.getRegistryMap = () => ({ + foo: { wheeled: [{ id: "foo", maxSpeed: 1, wheelCount: 0 }] }, + bar: { wheeled: [{ id: "bar", maxSpeed: 15, wheelCount: 5 }] } + }); + const result = await Test.Types.mapRegistriesAsync({ + baz: { tracked: [{ id: "baz", maxSpeed: 5, trackType: TrackType.Rubber }] } + }); + expect(result).toStrictEqual({ + baz: { tracked: [{ id: "baz", maxSpeed: 5, trackType: TrackType.Rubber }] }, + foo: { wheeled: [{ id: "foo", maxSpeed: 1, wheelCount: 0 }] }, + bar: { wheeled: [{ id: "bar", maxSpeed: 15, wheelCount: 5 }] } + }); + }); + it("can invoke assigned JS functions in C#", () => { + Test.Types.getRegistry = () => ({ wheeled: [{ maxSpeed: 1 }], tracked: [{ maxSpeed: 2 }] }); + expect(Test.Types.countTotalSpeed()).toStrictEqual(3); + }); + it("can subscribe to events", () => { + let eventArg1, multipleArg1, multipleArg2, multipleArg3; + Test.onEvent.subscribe(v => eventArg1 = v); + Test.onEventMultiple.subscribe((a1, a2, a3) => { + multipleArg1 = a1; + multipleArg2 = a2; + multipleArg3 = a3; + }); + Test.broadcastEvent("foo"); + Test.broadcastEventMultiple(1, { id: "foo", maxSpeed: 50 }, TrackType.Rubber); + expect(multipleArg1).toStrictEqual(1); + expect(multipleArg2).toStrictEqual({ id: "foo", maxSpeed: 50 }); + expect(multipleArg3).toStrictEqual(TrackType.Rubber); + Test.broadcastEventMultiple(255, undefined, TrackType.Chain); + expect(multipleArg1).toStrictEqual(255); + expect(multipleArg2).toBeUndefined(); + expect(multipleArg3).toStrictEqual(TrackType.Chain); + }); + it("can un-subscribe from events", () => { + let result = ""; + const assigner = v => result = v; + Test.onEvent.subscribe(assigner); + Test.broadcastEvent("foo"); + Test.onEvent.unsubscribe(assigner); + Test.broadcastEvent("bar"); + expect(result).toStrictEqual("foo"); + }); + it("can catch js exception", () => { + Test.throwJS = function () { throw new Error("foo"); }; + expect(Test.catchException().split("\n")[0]).toStrictEqual("Error: foo"); + }); + it("can catch dotnet exceptions", () => { + expect(() => Test.throwCS("bar")).throw("bar"); + }); + it("can invoke async method with async js callback", async () => { + Test.getStringAsync = async () => { + await new Promise(res => setTimeout(res, 100)); + return "foo"; + }; + expect(await Test.echoStringAsync()).toStrictEqual("foo"); + }); + it("maps enums by both indexes and strings", () => { + expect(TrackType[0]).toStrictEqual("Rubber"); + expect(TrackType[1]).toStrictEqual("Chain"); + expect(TrackType[TrackType.Rubber]).toStrictEqual("Rubber"); + expect(TrackType[TrackType.Chain]).toStrictEqual("Chain"); + }); +}); diff --git a/src/js/test/spec/platform.spec.mjs b/src/js/test/spec/platform.spec.mjs new file mode 100644 index 00000000..219f2fc3 --- /dev/null +++ b/src/js/test/spec/platform.spec.mjs @@ -0,0 +1,23 @@ +import { describe, it, beforeAll, expect } from "vitest"; +import { bootSideload, Test } from "../cs.mjs"; +import { WebSocket, WebSocketServer } from "ws"; + +describe("platform", () => { + beforeAll(bootSideload); + it("can provide unique guid", () => { + const guid1 = Test.getGuid(); + const guid2 = Test.getGuid(); + expect(guid1.length).toStrictEqual(36); + expect(guid2.length).toStrictEqual(36); + expect(guid1).not.toStrictEqual(guid2); + }); + it("can communicate via websocket", async () => { + // .NET requires ws package when running on node: + // https://github.com/dotnet/runtime/blob/main/src/mono/wasm/features.md#websocket + global.WebSocket = WebSocket; + const wss = new WebSocketServer({ port: 8877 }); + wss.on("connection", socket => socket.on("message", socket.send)); + expect(await Test.echoWebSocket("ws://localhost:8877", "foo", 3000)).toStrictEqual("foo"); + wss.close(); + }); +}); diff --git a/src/js/tsconfig.json b/src/js/tsconfig.json new file mode 100644 index 00000000..32015a40 --- /dev/null +++ b/src/js/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "moduleResolution": "node", + "strict": true + }, + "include": ["src"] +}

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 diff --git a/JavaScript/package-lock.json b/JavaScript/package-lock.json deleted file mode 100644 index 4ab552da..00000000 --- a/JavaScript/package-lock.json +++ /dev/null @@ -1,6194 +0,0 @@ -{ - "name": "dotnet-runtime", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "dotnet-runtime", - "devDependencies": { - "@types/emscripten": "^1.39.6", - "js-base64": "^3.7.3", - "mocha": "^10.1.0", - "nyc": "^15.1.0", - "ts-loader": "^9.4.1", - "typescript": "^4.9.3", - "webpack": "^5.75.0", - "webpack-cli": "^5.0.0", - "ws": "^8.11.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.2", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@types/emscripten": { - "version": "1.39.6", - "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.6.tgz", - "integrity": "sha512-H90aoynNhhkQP6DRweEjJp5vfUVdIj7tdPLsu7pq89vODD/lcugKfZOsfgwpvM6XUewEp2N5dCg1Uf3Qe55Dcg==", - "dev": true - }, - "node_modules/@types/eslint": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", - "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.0.0.tgz", - "integrity": "sha512-war4OU8NGjBqU3DP3bx6ciODXIh7dSXcpQq+P4K2Tqyd8L5OjZ7COx9QXx/QdCIwL2qoX09Wr4Cwf7uS4qdEng==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.0.tgz", - "integrity": "sha512-NNxDgbo4VOkNhOlTgY0Elhz3vKpOJq4/PKeKg7r8cmYM+GQA9vDofLYyup8jS6EpUvhNmR30cHTCEIyvXpskwA==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.0.tgz", - "integrity": "sha512-Rumq5mHvGXamnOh3O8yLk1sjx8dB30qF1OeR6VC00DIR6SLJ4bwwUGKC4pE7qBFoQyyh0H9sAg3fikYgAqVR0w==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, - "dependencies": { - "default-require-extensions": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, - "dependencies": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001434", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", - "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-require-extensions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", - "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", - "dev": true, - "dependencies": { - "strip-bom": "^4.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, - "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "dev": true, - "dependencies": { - "append-transform": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", - "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", - "dev": true, - "dependencies": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.3", - "istanbul-lib-coverage": "^3.2.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/js-base64": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.3.tgz", - "integrity": "sha512-PAr6Xg2jvd7MCR6Ld9Jg3BmTcjYsHEBx1VlwEwULb/qowPf5VD9kEMagj23Gm7JRnSvE/Da/57nChZjnvL8v6A==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", - "dev": true, - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "dev": true, - "dependencies": { - "process-on-spawn": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dev": true, - "dependencies": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "bin": { - "nyc": "bin/nyc.js" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/nyc/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/nyc/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nyc/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/nyc/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "dev": true, - "dependencies": { - "fromentries": "^1.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", - "dev": true, - "dependencies": { - "es6-error": "^4.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, - "dependencies": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-loader": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", - "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-loader/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.0.tgz", - "integrity": "sha512-AACDTo20yG+xn6HPW5xjbn2Be4KUzQPebWXsDMHwPPyKh9OnTOJgZN2Nc+g/FZKV3ObRTYsGvibAvc+5jAUrVA==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.0.0", - "@webpack-cli/info": "^2.0.0", - "@webpack-cli/serve": "^2.0.0", - "colorette": "^2.0.14", - "commander": "^9.4.1", - "cross-spawn": "^7.0.3", - "envinfo": "^7.7.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", - "dev": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "dev": true - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", - "dev": true - }, - "@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", - "dev": true, - "requires": { - "@babel/types": "^7.20.2", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", - "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", - "dev": true - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@types/emscripten": { - "version": "1.39.6", - "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.6.tgz", - "integrity": "sha512-H90aoynNhhkQP6DRweEjJp5vfUVdIj7tdPLsu7pq89vODD/lcugKfZOsfgwpvM6XUewEp2N5dCg1Uf3Qe55Dcg==", - "dev": true - }, - "@types/eslint": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", - "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.0.0.tgz", - "integrity": "sha512-war4OU8NGjBqU3DP3bx6ciODXIh7dSXcpQq+P4K2Tqyd8L5OjZ7COx9QXx/QdCIwL2qoX09Wr4Cwf7uS4qdEng==", - "dev": true, - "requires": {} - }, - "@webpack-cli/info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.0.tgz", - "integrity": "sha512-NNxDgbo4VOkNhOlTgY0Elhz3vKpOJq4/PKeKg7r8cmYM+GQA9vDofLYyup8jS6EpUvhNmR30cHTCEIyvXpskwA==", - "dev": true, - "requires": {} - }, - "@webpack-cli/serve": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.0.tgz", - "integrity": "sha512-Rumq5mHvGXamnOh3O8yLk1sjx8dB30qF1OeR6VC00DIR6SLJ4bwwUGKC4pE7qBFoQyyh0H9sAg3fikYgAqVR0w==", - "dev": true, - "requires": {} - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "requires": {} - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, - "requires": { - "default-require-extensions": "^3.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, - "requires": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001434", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", - "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "default-require-extensions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", - "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", - "dev": true, - "requires": { - "strip-bom": "^4.0.0" - } - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - } - }, - "fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, - "requires": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "dev": true, - "requires": { - "append-transform": "^2.0.0" - } - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-processinfo": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", - "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.3", - "istanbul-lib-coverage": "^3.2.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^8.3.2" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "js-base64": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.3.tgz", - "integrity": "sha512-PAr6Xg2jvd7MCR6Ld9Jg3BmTcjYsHEBx1VlwEwULb/qowPf5VD9kEMagj23Gm7JRnSvE/Da/57nChZjnvL8v6A==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", - "dev": true, - "requires": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "dev": true, - "requires": { - "process-on-spawn": "^1.0.0" - } - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dev": true, - "requires": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "dependencies": { - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "dev": true, - "requires": { - "fromentries": "^1.2.0" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "requires": { - "resolve": "^1.20.0" - } - }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, - "requires": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } - }, - "terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "ts-loader": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", - "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "dependencies": { - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - } - }, - "webpack-cli": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.0.tgz", - "integrity": "sha512-AACDTo20yG+xn6HPW5xjbn2Be4KUzQPebWXsDMHwPPyKh9OnTOJgZN2Nc+g/FZKV3ObRTYsGvibAvc+5jAUrVA==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.0.0", - "@webpack-cli/info": "^2.0.0", - "@webpack-cli/serve": "^2.0.0", - "colorette": "^2.0.14", - "commander": "^9.4.1", - "cross-spawn": "^7.0.3", - "envinfo": "^7.7.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^5.7.3" - }, - "dependencies": { - "commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", - "dev": true - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "dev": true - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, - "requires": {} - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - } - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/JavaScript/package.json b/JavaScript/package.json deleted file mode 100644 index 2e6397f7..00000000 --- a/JavaScript/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "dotnet-runtime", - "private": true, - "scripts": { - "build": "webpack --mode production", - "test": "mocha --exclude **/bench.js", - "cover": "nyc -x **/native -x **/bin -x **/dotnet-js-interop.ts npm run test", - "bench": "mocha test/bench.js --timeout 0" - }, - "devDependencies": { - "typescript": "^4.9.3", - "@types/emscripten": "^1.39.6", - "js-base64": "^3.7.3", - "webpack": "^5.75.0", - "webpack-cli": "^5.0.0", - "ts-loader": "^9.4.1", - "mocha": "^10.1.0", - "nyc": "^15.1.0", - "ws": "^8.11.0" - } -} diff --git a/JavaScript/scripts/compile-runtime.sh b/JavaScript/scripts/compile-runtime.sh deleted file mode 100644 index ef4bb0f7..00000000 --- a/JavaScript/scripts/compile-runtime.sh +++ /dev/null @@ -1,17 +0,0 @@ -cd .. -printf "Removing previous installation...\n" -rm -rf native/runtime -mkdir -p native/runtime -printf "Downloading the runtime sources...\n" -# The fork modifies emscripten compilation flags to support UMD. -curl -L https://github.com/Elringus/DotNetUMD/archive/release/6.0.tar.gz | tar xz -C native/runtime --strip-components=1 -printf "Compiling native modules. Initial run will take a while...\n" -source native/emsdk/emsdk_env.sh -native/runtime/build.sh mono+libs -os Browser -c Release -cp -f native/runtime/artifacts/bin/native/net6.0-Browser-Release-wasm/dotnet.js native/dotnet.js -cp -f native/runtime/artifacts/bin/native/net6.0-Browser-Release-wasm/dotnet.wasm native/dotnet.wasm -# Strip environment-specific statements from the autogenerated js wrapper. -sed -i "s/require([^)]*./{}/g" native/dotnet.js -sed -i "s/performance.now()/0/g" native/dotnet.js -sed -i "s/console.debug(\"mono_wasm_runtime_ready.\+)/{}/g" native/dotnet.js -read -r -p "Press Enter key to exit..." diff --git a/JavaScript/scripts/compile-test.sh b/JavaScript/scripts/compile-test.sh deleted file mode 100644 index 16087da7..00000000 --- a/JavaScript/scripts/compile-test.sh +++ /dev/null @@ -1,5 +0,0 @@ -# dotnet workload install wasm-tools --source https://api.nuget.org/v3/index.json -dotnet build-server shutdown -dotnet build ../../DotNet/DotNetJS.sln -dotnet publish ../test/csharp/Test.sln #-v:Normal -fl -flp:logfile=Build.log;verbosity=diagnostic -read -r -p "Press Enter key to exit..." diff --git a/JavaScript/scripts/install-emsdk.sh b/JavaScript/scripts/install-emsdk.sh deleted file mode 100644 index f2b4dd8e..00000000 --- a/JavaScript/scripts/install-emsdk.sh +++ /dev/null @@ -1,9 +0,0 @@ -cd .. -rm -rf native/emsdk -mkdir -p native/emsdk -# Version: https://github.com/dotnet/runtime/blob/release/6.0/src/mono/wasm/emscripten-version.txt. -curl -L https://github.com/emscripten-core/emsdk/archive/2.0.23.tar.gz | tar xz -C native/emsdk --strip-components=1 -native/emsdk/emsdk update -native/emsdk/emsdk install 2.0.23 -native/emsdk/emsdk activate 2.0.23 -read -r -p "Press Enter key to exit..." diff --git a/JavaScript/src/boot.ts b/JavaScript/src/boot.ts deleted file mode 100644 index 7fcf5a03..00000000 --- a/JavaScript/src/boot.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { initializeWasm, destroyWasm } from "./wasm"; -import { initializeInterop } from "./interop"; -import { Assembly, initializeMono, callEntryPoint } from "./mono"; -import { Base64 } from "js-base64"; - -export interface BootData { - wasm: Uint8Array | string; - assemblies: Assembly[]; - entryAssemblyName: string; -} - -export enum BootStatus { - Standby = "Standby", - Booting = "Booting", - Terminating = "Terminating", - Booted = "Booted" -} - -let bootStatus: BootStatus = BootStatus.Standby; - -export function getBootStatus(): BootStatus { - return bootStatus; -} - -export async function boot(bootData: BootData): Promise { - validateBootData(bootData); - transitionBootStatus(BootStatus.Standby, BootStatus.Booting); - await initializeWasm(getWasmBinary(bootData.wasm)); - initializeMono(bootData.assemblies); - initializeInterop(); - await callEntryPoint(bootData.entryAssemblyName); - transitionBootStatus(BootStatus.Booting, BootStatus.Booted); -} - -export function terminate(): Promise { - transitionBootStatus(BootStatus.Booted, BootStatus.Terminating); - destroyWasm(); - transitionBootStatus(BootStatus.Terminating, BootStatus.Standby); - return Promise.resolve(); -} - -function transitionBootStatus(from: BootStatus, to: BootStatus): void { - if (from !== bootStatus) - throw Error(`Invalid boot status. Expected: ${from}. Actual: ${bootStatus}.`); - bootStatus = to; -} - -function getWasmBinary(wasm: Uint8Array | string) { - return typeof wasm === "string" ? Base64.toUint8Array(wasm) : wasm; -} - -function validateBootData(data: BootData): void { - if (data == null) - throw Error("Boot data is missing."); - if (data.wasm == null || data.wasm.length == 0) - throw Error("Wasm binary is missing."); - for (const assembly of data.assemblies) - if (assembly.data == null || assembly.data.length == 0) - throw Error(`${assembly.name} assembly data is invalid.`); -} diff --git a/JavaScript/src/crypto.ts b/JavaScript/src/crypto.ts deleted file mode 100644 index 9d10865c..00000000 --- a/JavaScript/src/crypto.ts +++ /dev/null @@ -1,20 +0,0 @@ -export function injectCrypto(): void { - if (typeof crypto !== "undefined") return; - globalThis.crypto = { - getRandomValues: getRandomValues, - randomUUID: randomUUID - } as any; -} - -function getRandomValues(buffer: Uint8Array): Uint8Array { - for (let i = 0; i < buffer.length; i++) - buffer[i] = (Math.random() * 256) | 0; - return buffer; -} - -function randomUUID() { - return ( - [1e7] as any + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, - c => (c ^ getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16) - ); -} diff --git a/JavaScript/src/dotnet-js-interop.ts b/JavaScript/src/dotnet-js-interop.ts deleted file mode 100644 index 87198d9f..00000000 --- a/JavaScript/src/dotnet-js-interop.ts +++ /dev/null @@ -1,616 +0,0 @@ -// Source: https://github.com/dotnet/aspnetcore/blob/main/src/JSInterop/Microsoft.JSInterop.JS/src/src/Microsoft.JSInterop.ts -// Why: Microsoft is not planning to support any environment, except browser: https://github.com/dotnet/aspnetcore/issues/38208 -// Changes: -// 1. Replaced `window` with `global` (webpack resolves to the correct global). -// 2. Removed `import` statement at line #70 (causing warnings when repacking, eg in WebExtension sample). -// 3. Removed `Blob` case in createJSStreamReference (Blob is from DOM lib). -// 4. Throw on DotNetStream::arrayBuffer (Response is from DOM lib). - -export namespace DotNet { - (global as any).DotNet = DotNet; // Ensure reachable from anywhere - - export type JsonReviver = ((key: any, value: any) => any); - const jsonRevivers: JsonReviver[] = []; - - const byteArraysToBeRevived = new Map(); - const pendingDotNetToJSStreams = new Map(); - - const jsObjectIdKey = "__jsObjectId"; - const dotNetObjectRefKey = "__dotNetObject"; - const byteArrayRefKey = "__byte[]"; - const dotNetStreamRefKey = "__dotNetStream"; - const jsStreamReferenceLengthKey = "__jsStreamReferenceLength"; - - class JSObject { - _cachedFunctions: Map; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - constructor(private _jsObject: any) { - this._cachedFunctions = new Map(); - } - - public findFunction(identifier: string) { - const cachedFunction = this._cachedFunctions.get(identifier); - - if (cachedFunction) { - return cachedFunction; - } - - let result: any = this._jsObject; - let lastSegmentValue: any; - - identifier.split(".").forEach(segment => { - if (segment in result) { - lastSegmentValue = result; - result = result[segment]; - } else { - throw new Error(`Could not find '${identifier}' ('${segment}' was undefined).`); - } - }); - - if (result instanceof Function) { - result = result.bind(lastSegmentValue); - this._cachedFunctions.set(identifier, result); - return result; - } - - throw new Error(`The value '${identifier}' is not a function.`); - } - - public getWrappedObject() { - return this._jsObject; - } - } - - const pendingAsyncCalls: { [id: number]: PendingAsyncCall } = {}; - const windowJSObjectId = 0; - const cachedJSObjectsById: { [id: number]: JSObject } = { - [windowJSObjectId]: new JSObject(global) - }; - - // cachedJSObjectsById[windowJSObjectId]._cachedFunctions.set("import", (url: any) => { - // - // // In most cases developers will want to resolve dynamic imports relative to the base HREF. - // // However since we're the one calling the import keyword, they would be resolved relative to - // // this framework bundle URL. Fix this by providing an absolute URL. - // if (typeof url === "string" && url.startsWith("./")) { - // url = document.baseURI + url.substr(2); - // } - // - // return import(/* webpackIgnore: true */ url); - // }); - - let nextAsyncCallId = 1; // Start at 1 because zero signals "no response needed" - let nextJsObjectId = 1; // Start at 1 because zero is reserved for "window" - - let dotNetDispatcher: DotNetCallDispatcher | null = null; - - /** - * Sets the specified .NET call dispatcher as the current instance so that it will be used - * for future invocations. - * - * @param dispatcher An object that can dispatch calls from JavaScript to a .NET runtime. - */ - export function attachDispatcher(dispatcher: DotNetCallDispatcher) { - dotNetDispatcher = dispatcher; - } - - /** - * Adds a JSON reviver callback that will be used when parsing arguments received from .NET. - * @param reviver The reviver to add. - */ - export function attachReviver(reviver: JsonReviver) { - jsonRevivers.push(reviver); - } - - /** - * Invokes the specified .NET public method synchronously. Not all hosting scenarios support - * synchronous invocation, so if possible use invokeMethodAsync instead. - * - * @param assemblyName The short name (without key/version or .dll extension) of the .NET assembly containing the method. - * @param methodIdentifier The identifier of the method to invoke. The method must have a [JSInvokable] attribute specifying this identifier. - * @param args Arguments to pass to the method, each of which must be JSON-serializable. - * @returns The result of the operation. - */ - export function invokeMethod(assemblyName: string, methodIdentifier: string, ...args: any[]): T { - return invokePossibleInstanceMethod(assemblyName, methodIdentifier, null, args); - } - - /** - * Invokes the specified .NET public method asynchronously. - * - * @param assemblyName The short name (without key/version or .dll extension) of the .NET assembly containing the method. - * @param methodIdentifier The identifier of the method to invoke. The method must have a [JSInvokable] attribute specifying this identifier. - * @param args Arguments to pass to the method, each of which must be JSON-serializable. - * @returns A promise representing the result of the operation. - */ - export function invokeMethodAsync(assemblyName: string, methodIdentifier: string, ...args: any[]): Promise { - return invokePossibleInstanceMethodAsync(assemblyName, methodIdentifier, null, args); - } - - /** - * Creates a JavaScript object reference that can be passed to .NET via interop calls. - * - * @param jsObject The JavaScript Object used to create the JavaScript object reference. - * @returns The JavaScript object reference (this will be the same instance as the given object). - * @throws Error if the given value is not an Object. - */ - export function createJSObjectReference(jsObject: any): any { - if (jsObject && typeof jsObject === "object") { - cachedJSObjectsById[nextJsObjectId] = new JSObject(jsObject); - - const result = { - [jsObjectIdKey]: nextJsObjectId - }; - - nextJsObjectId++; - - return result; - } - - throw new Error(`Cannot create a JSObjectReference from the value '${jsObject}'.`); - } - - /** - * Creates a JavaScript data reference that can be passed to .NET via interop calls. - * - * @param streamReference The ArrayBufferView or Blob used to create the JavaScript stream reference. - * @returns The JavaScript data reference (this will be the same instance as the given object). - * @throws Error if the given value is not an Object or doesn't have a valid byteLength. - */ - export function createJSStreamReference(streamReference: ArrayBuffer | ArrayBufferView | any): any { - let length = -1; - - // If we're given a raw Array Buffer, we interpret it as a `Uint8Array` as - // ArrayBuffers' aren't directly readable. - if (streamReference instanceof ArrayBuffer) { - streamReference = new Uint8Array(streamReference); - } - - if (streamReference.buffer instanceof ArrayBuffer) { - if (streamReference.byteLength === undefined) { - throw new Error(`Cannot create a JSStreamReference from the value '${streamReference}' as it doesn't have a byteLength.`); - } - length = streamReference.byteLength; - } else { - throw new Error("Supplied value is not a typed array."); - } - - const result: any = { - [jsStreamReferenceLengthKey]: length - }; - - try { - const jsObjectReference = createJSObjectReference(streamReference); - result[jsObjectIdKey] = jsObjectReference[jsObjectIdKey]; - } - catch (error) { - throw new Error(`Cannot create a JSStreamReference from the value '${streamReference}'.`); - } - - return result; - } - - /** - * Disposes the given JavaScript object reference. - * - * @param jsObjectReference The JavaScript Object reference. - */ - export function disposeJSObjectReference(jsObjectReference: any): void { - const id = jsObjectReference && jsObjectReference[jsObjectIdKey]; - - if (typeof id === "number") { - disposeJSObjectReferenceById(id); - } - } - - /** - * Parses the given JSON string using revivers to restore args passed from .NET to JS. - * - * @param json The JSON stirng to parse. - */ - function parseJsonWithRevivers(json: string): any { - return json ? JSON.parse(json, (key, initialValue) => { - // Invoke each reviver in order, passing the output from the previous reviver, - // so that each one gets a chance to transform the value - - return jsonRevivers.reduce( - (latestValue, reviver) => reviver(key, latestValue), - initialValue - ); - }) : null; - } - - function invokePossibleInstanceMethod(assemblyName: string | null, methodIdentifier: string, dotNetObjectId: number | null, args: any[] | null): T { - const dispatcher = getRequiredDispatcher(); - if (dispatcher.invokeDotNetFromJS) { - const argsJson = stringifyArgs(args); - const resultJson = dispatcher.invokeDotNetFromJS(assemblyName, methodIdentifier, dotNetObjectId, argsJson); - return resultJson ? parseJsonWithRevivers(resultJson) : null; - } - - throw new Error("The current dispatcher does not support synchronous calls from JS to .NET. Use invokeMethodAsync instead."); - } - - function invokePossibleInstanceMethodAsync(assemblyName: string | null, methodIdentifier: string, dotNetObjectId: number | null, args: any[] | null): Promise { - if (assemblyName && dotNetObjectId) { - throw new Error(`For instance method calls, assemblyName should be null. Received '${assemblyName}'.`); - } - - const asyncCallId = nextAsyncCallId++; - const resultPromise = new Promise((resolve, reject) => { - pendingAsyncCalls[asyncCallId] = { resolve, reject }; - }); - - try { - const argsJson = stringifyArgs(args); - getRequiredDispatcher().beginInvokeDotNetFromJS(asyncCallId, assemblyName, methodIdentifier, dotNetObjectId, argsJson); - } - catch (ex) { - // Synchronous failure - completePendingCall(asyncCallId, false, ex); - } - - return resultPromise; - } - - function getRequiredDispatcher(): DotNetCallDispatcher { - if (dotNetDispatcher !== null) { - return dotNetDispatcher; - } - - throw new Error("No .NET call dispatcher has been set."); - } - - function completePendingCall(asyncCallId: number, success: boolean, resultOrError: any) { - if (!pendingAsyncCalls.hasOwnProperty(asyncCallId)) { - throw new Error(`There is no pending async call with ID ${asyncCallId}.`); - } - - const asyncCall = pendingAsyncCalls[asyncCallId]; - delete pendingAsyncCalls[asyncCallId]; - if (success) { - asyncCall.resolve(resultOrError); - } else { - asyncCall.reject(resultOrError); - } - } - - interface PendingAsyncCall { - resolve: (value?: T | PromiseLike) => void; - reject: (reason?: any) => void; - } - - /** - * Represents the type of result expected from a JS interop call. - */ - // eslint-disable-next-line no-shadow - export enum JSCallResultType { - Default = 0, - JSObjectReference = 1, - JSStreamReference = 2, - JSVoidResult = 3, - } - - /** - * Represents the ability to dispatch calls from JavaScript to a .NET runtime. - */ - export interface DotNetCallDispatcher { - /** - * Optional. If implemented, invoked by the runtime to perform a synchronous call to a .NET method. - * - * @param assemblyName The short name (without key/version or .dll extension) of the .NET assembly holding the method to invoke. The value may be null when invoking instance methods. - * @param methodIdentifier The identifier of the method to invoke. The method must have a [JSInvokable] attribute specifying this identifier. - * @param dotNetObjectId If given, the call will be to an instance method on the specified DotNetObject. Pass null or undefined to call static methods. - * @param argsJson JSON representation of arguments to pass to the method. - * @returns JSON representation of the result of the invocation. - */ - invokeDotNetFromJS?(assemblyName: string | null, methodIdentifier: string, dotNetObjectId: number | null, argsJson: string): string | null; - - /** - * Invoked by the runtime to begin an asynchronous call to a .NET method. - * - * @param callId A value identifying the asynchronous operation. This value should be passed back in a later call from .NET to JS. - * @param assemblyName The short name (without key/version or .dll extension) of the .NET assembly holding the method to invoke. The value may be null when invoking instance methods. - * @param methodIdentifier The identifier of the method to invoke. The method must have a [JSInvokable] attribute specifying this identifier. - * @param dotNetObjectId If given, the call will be to an instance method on the specified DotNetObject. Pass null to call static methods. - * @param argsJson JSON representation of arguments to pass to the method. - */ - beginInvokeDotNetFromJS(callId: number, assemblyName: string | null, methodIdentifier: string, dotNetObjectId: number | null, argsJson: string): void; - - /** - * Invoked by the runtime to complete an asynchronous JavaScript function call started from .NET - * - * @param callId A value identifying the asynchronous operation. - * @param succeded Whether the operation succeeded or not. - * @param resultOrError The serialized result or the serialized error from the async operation. - */ - endInvokeJSFromDotNet(callId: number, succeeded: boolean, resultOrError: any): void; - - /** - * Invoked by the runtime to transfer a byte array from JS to .NET. - * @param id The identifier for the byte array used during revival. - * @param data The byte array being transferred for eventual revival. - */ - sendByteArray(id: number, data: Uint8Array): void; - } - - /** - * Receives incoming calls from .NET and dispatches them to JavaScript. - */ - export const jsCallDispatcher = { - /** - * Finds the JavaScript function matching the specified identifier. - * - * @param identifier Identifies the globally-reachable function to be returned. - * @param targetInstanceId The instance ID of the target JS object. - * @returns A Function instance. - */ - findJSFunction, // Note that this is used by the JS interop code inside Mono WebAssembly itself - - /** - * Disposes the JavaScript object reference with the specified object ID. - * - * @param id The ID of the JavaScript object reference. - */ - disposeJSObjectReferenceById, - - /** - * Invokes the specified synchronous JavaScript function. - * - * @param identifier Identifies the globally-reachable function to invoke. - * @param argsJson JSON representation of arguments to be passed to the function. - * @param resultType The type of result expected from the JS interop call. - * @param targetInstanceId The instance ID of the target JS object. - * @returns JSON representation of the invocation result. - */ - invokeJSFromDotNet: (identifier: string, argsJson: string, resultType: JSCallResultType, targetInstanceId: number) => { - const returnValue = findJSFunction(identifier, targetInstanceId).apply(null, parseJsonWithRevivers(argsJson)); - const result = createJSCallResult(returnValue, resultType); - - return result === null || result === undefined - ? null - : stringifyArgs(result); - }, - - /** - * Invokes the specified synchronous or asynchronous JavaScript function. - * - * @param asyncHandle A value identifying the asynchronous operation. This value will be passed back in a later call to endInvokeJSFromDotNet. - * @param identifier Identifies the globally-reachable function to invoke. - * @param argsJson JSON representation of arguments to be passed to the function. - * @param resultType The type of result expected from the JS interop call. - * @param targetInstanceId The ID of the target JS object instance. - */ - beginInvokeJSFromDotNet: (asyncHandle: number, identifier: string, argsJson: string, resultType: JSCallResultType, targetInstanceId: number): void => { - // Coerce synchronous functions into async ones, plus treat - // synchronous exceptions the same as async ones - const promise = new Promise(resolve => { - const synchronousResultOrPromise = findJSFunction(identifier, targetInstanceId).apply(null, parseJsonWithRevivers(argsJson)); - resolve(synchronousResultOrPromise); - }); - - // We only listen for a result if the caller wants to be notified about it - if (asyncHandle) { - // On completion, dispatch result back to .NET - // Not using "await" because it codegens a lot of boilerplate - promise.then( - result => getRequiredDispatcher().endInvokeJSFromDotNet(asyncHandle, true, stringifyArgs([ - asyncHandle, - true, - createJSCallResult(result, resultType) - ])), - error => getRequiredDispatcher().endInvokeJSFromDotNet(asyncHandle, false, JSON.stringify([ - asyncHandle, - false, - formatError(error) - ])) - ); - } - }, - - /** - * Receives notification that an async call from JS to .NET has completed. - * @param asyncCallId The identifier supplied in an earlier call to beginInvokeDotNetFromJS. - * @param success A flag to indicate whether the operation completed successfully. - * @param resultJsonOrExceptionMessage Either the operation result as JSON, or an error message. - */ - endInvokeDotNetFromJS: (asyncCallId: string, success: boolean, resultJsonOrExceptionMessage: string): void => { - const resultOrError = success - ? parseJsonWithRevivers(resultJsonOrExceptionMessage) - : new Error(resultJsonOrExceptionMessage); - completePendingCall(parseInt(asyncCallId, 10), success, resultOrError); - }, - - /** - * Receives notification that a byte array is being transferred from .NET to JS. - * @param id The identifier for the byte array used during revival. - * @param data The byte array being transferred for eventual revival. - */ - receiveByteArray: (id: number, data: Uint8Array): void => { - byteArraysToBeRevived.set(id, data); - }, - - /** - * Supplies a stream of data being sent from .NET. - * - * @param streamId The identifier previously passed to JSRuntime's BeginTransmittingStream in .NET code - * @param stream The stream data. - */ - supplyDotNetStream: (streamId: number, stream: ReadableStream) => { - if (pendingDotNetToJSStreams.has(streamId)) { - // The receiver is already waiting, so we can resolve the promise now and stop tracking this - const pendingStream = pendingDotNetToJSStreams.get(streamId)!; - pendingDotNetToJSStreams.delete(streamId); - pendingStream.resolve!(stream); - } else { - // The receiver hasn't started waiting yet, so track a pre-completed entry it can attach to later - const pendingStream = new PendingStream(); - pendingStream.resolve!(stream); - pendingDotNetToJSStreams.set(streamId, pendingStream); - } - } - }; - - function formatError(error: Error | string): string { - if (error instanceof Error) { - return `${error.message}\n${error.stack}`; - } - - return error ? error.toString() : "null"; - } - - function findJSFunction(identifier: string, targetInstanceId: number): Function { - const targetInstance = cachedJSObjectsById[targetInstanceId]; - - if (targetInstance) { - return targetInstance.findFunction(identifier); - } - - throw new Error(`JS object instance with ID ${targetInstanceId} does not exist (has it been disposed?).`); - } - - function disposeJSObjectReferenceById(id: number) { - delete cachedJSObjectsById[id]; - } - - export class DotNetObject { - // eslint-disable-next-line no-empty-function - constructor(private _id: number) { - } - - public invokeMethod(methodIdentifier: string, ...args: any[]): T { - return invokePossibleInstanceMethod(null, methodIdentifier, this._id, args); - } - - public invokeMethodAsync(methodIdentifier: string, ...args: any[]): Promise { - return invokePossibleInstanceMethodAsync(null, methodIdentifier, this._id, args); - } - - public dispose() { - const promise = invokePossibleInstanceMethodAsync(null, "__Dispose", this._id, null); - promise.catch(error => console.error(error)); - } - - public serializeAsArg() { - return { __dotNetObject: this._id }; - } - } - - attachReviver(function reviveReference(key: any, value: any) { - if (value && typeof value === "object") { - if (value.hasOwnProperty(dotNetObjectRefKey)) { - return new DotNetObject(value[dotNetObjectRefKey]); - } else if (value.hasOwnProperty(jsObjectIdKey)) { - const id = value[jsObjectIdKey]; - const jsObject = cachedJSObjectsById[id]; - - if (jsObject) { - return jsObject.getWrappedObject(); - } - - throw new Error(`JS object instance with Id '${id}' does not exist. It may have been disposed.`); - } else if (value.hasOwnProperty(byteArrayRefKey)) { - const index = value[byteArrayRefKey]; - const byteArray = byteArraysToBeRevived.get(index); - if (byteArray === undefined) { - throw new Error(`Byte array index '${index}' does not exist.`); - } - byteArraysToBeRevived.delete(index); - - return byteArray; - } else if (value.hasOwnProperty(dotNetStreamRefKey)) { - return new DotNetStream(value[dotNetStreamRefKey]); - } - } - - // Unrecognized - let another reviver handle it - return value; - }); - - class DotNetStream { - private _streamPromise: Promise; - - constructor(streamId: number) { - // This constructor runs when we're JSON-deserializing some value from the .NET side. - // At this point we might already have started receiving the stream, or maybe it will come later. - // We have to handle both possible orderings, but we can count on it coming eventually because - // it's not something the developer gets to control, and it would be an error if it doesn't. - if (pendingDotNetToJSStreams.has(streamId)) { - // We've already started receiving the stream, so no longer need to track it as pending - this._streamPromise = pendingDotNetToJSStreams.get(streamId)!.streamPromise!; - pendingDotNetToJSStreams.delete(streamId); - } else { - // We haven't started receiving it yet, so add an entry to track it as pending - const pendingStream = new PendingStream(); - pendingDotNetToJSStreams.set(streamId, pendingStream); - this._streamPromise = pendingStream.streamPromise; - } - } - - /** - * Supplies a readable stream of data being sent from .NET. - */ - stream(): Promise { - return this._streamPromise; - } - - /** - * Supplies a array buffer of data being sent from .NET. - * Note there is a JavaScript limit on the size of the ArrayBuffer equal to approximately 2GB. - */ - async arrayBuffer(): Promise { - throw Error("Streaming from .NET is not supported."); - // return new Response(await this.stream()).arrayBuffer(); - } - } - - class PendingStream { - streamPromise: Promise; - - resolve?: (value: ReadableStream) => void; - - reject?: (reason: any) => void; - - constructor() { - this.streamPromise = new Promise((resolve, reject) => { - this.resolve = resolve; - this.reject = reject; - }); - } - } - - function createJSCallResult(returnValue: any, resultType: JSCallResultType) { - switch (resultType) { - case JSCallResultType.Default: - return returnValue; - case JSCallResultType.JSObjectReference: - return createJSObjectReference(returnValue); - case JSCallResultType.JSStreamReference: - return createJSStreamReference(returnValue); - case JSCallResultType.JSVoidResult: - return null; - default: - throw new Error(`Invalid JS call result type '${resultType}'.`); - } - } - - let nextByteArrayIndex = 0; - function stringifyArgs(args: any[] | null) { - nextByteArrayIndex = 0; - return JSON.stringify(args, argReplacer); - } - - function argReplacer(key: string, value: any) { - if (value instanceof DotNetObject) { - return value.serializeAsArg(); - } else if (value instanceof Uint8Array) { - dotNetDispatcher!.sendByteArray(nextByteArrayIndex, value); - const jsonValue = { [byteArrayRefKey]: nextByteArrayIndex }; - nextByteArrayIndex++; - return jsonValue; - } - - return value; - } -} diff --git a/JavaScript/src/dotnet.ts b/JavaScript/src/dotnet.ts deleted file mode 100644 index fae540fc..00000000 --- a/JavaScript/src/dotnet.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { boot, getBootStatus, terminate, BootStatus, BootData } from "./boot"; -import { invoke, invokeAsync, createObjectReference, disposeObjectReference, createStreamReference } from "./interop"; -import { injectCrypto } from "./crypto"; -import { Assembly } from "./mono"; -import { Event } from "./event"; - -export const dotnet = { - Event: Event, - BootStatus: BootStatus, - getBootStatus: getBootStatus, - boot: boot, - terminate: terminate, - invoke: invoke, - invokeAsync: invokeAsync, - createObjectReference: createObjectReference, - disposeObjectReference: disposeObjectReference, - createStreamReference: createStreamReference -}; - -export { - BootStatus, - BootData, - Assembly -}; - -export { - boot, - getBootStatus, - terminate, - invoke, - invokeAsync, - createObjectReference, - disposeObjectReference, - createStreamReference -}; - -// https://github.com/Elringus/DotNetJS/issues/17 -injectCrypto(); diff --git a/JavaScript/src/event.ts b/JavaScript/src/event.ts deleted file mode 100644 index 26a8fe52..00000000 --- a/JavaScript/src/event.ts +++ /dev/null @@ -1,66 +0,0 @@ -export class Event implements EventBroadcaster, EventSubscriber { - private readonly handlers = new Map void>(); - private readonly warn: ((message: string) => void) | null; - private lastArgs: T | undefined; - - constructor(warn?: ((message: string) => void) | null) { - this.warn = warn === undefined ? console.warn : warn; - } - - public broadcast(...args: [...T]) { - this.lastArgs = args; - for (const handler of this.handlers.values()) - handler(...args); - } - - public subscribe(handler: (...args: [...T]) => void): string { - const id = this.getOrDefineId(handler); - this.subscribeById(id, handler); - return id; - } - - public unsubscribe(handler: (...args: [...T]) => void) { - if (handler == null) return; - const id = this.getOrDefineId(handler); - this.unsubscribeById(id); - } - - public subscribeById(id: string, handler: (...args: [...T]) => void): void { - if (this.handlers.has(id)) - this.warn?.(`Failed to subscribe event handler with ID '${id}': handler is already subscribed.`); - else this.handlers.set(id, handler); - } - - public unsubscribeById(id: string) { - if (this.handlers.has(id)) - this.handlers.delete(id); - else this.warn?.(`Failed to unsubscribe event handler with ID '${id}': handler is not subscribed.`); - } - - public getLast() { - return this.lastArgs; - } - - private getOrDefineId(handler: (...args: [...T]) => void) { - const idProperty = "dotnetEventHandlerId"; - if (handler.hasOwnProperty(idProperty)) - return handler[idProperty]; - const id = crypto.randomUUID(); - Object.defineProperty(handler, idProperty, { - value: id, - enumerable: false, - writable: false - }); - return id; - } -} - -export interface EventBroadcaster { - broadcast: (...args: [...T]) => void; -} - -export interface EventSubscriber { - subscribe: (handler: (...args: [...T]) => void) => string; - unsubscribe: (handler: (...args: [...T]) => void) => void; - getLast: () => T | undefined; -} diff --git a/JavaScript/src/heap-lock.ts b/JavaScript/src/heap-lock.ts deleted file mode 100644 index cbdc7cc5..00000000 --- a/JavaScript/src/heap-lock.ts +++ /dev/null @@ -1,29 +0,0 @@ -interface HeapLock { - release(); -} - -export let currentHeapLock: ManagedHeapLock | null = null; - -export function assertHeapNotLocked() { - if (currentHeapLock) - throw Error("Heap is currently locked."); -} - -class ManagedHeapLock implements HeapLock { - stringCache = new Map(); - - private postReleaseActions?: Function[]; - - release() { - if (currentHeapLock !== this) - throw Error("Trying to release a lock which isn't current."); - - currentHeapLock = null; - - while (this.postReleaseActions?.length) { - const nextQueuedAction = this.postReleaseActions.shift()!; - nextQueuedAction(); - assertHeapNotLocked(); - } - } -} diff --git a/JavaScript/src/interop.ts b/JavaScript/src/interop.ts deleted file mode 100644 index db675ea4..00000000 --- a/JavaScript/src/interop.ts +++ /dev/null @@ -1,182 +0,0 @@ -// Based on https://github.com/dotnet/aspnetcore/blob/release/6.0/src/Components/Web.JS/src/Platform/Mono/MonoPlatform.ts - -import { DotNet } from "./dotnet-js-interop"; -import { assertHeapNotLocked, currentHeapLock } from "./heap-lock"; -import { wasm } from "./wasm"; -import { getBootStatus, BootStatus } from "./boot"; - -const uint64HighOrderShift = Math.pow(2, 32); - -let invokeDotNet; -let beginInvokeDotNet; -let endInvokeJS; -let notifyByteArrayAvailable; -let transferredArray: Uint8Array | null = null; - -export function initializeInterop(): void { - bindMethods(); - DotNet.attachDispatcher(createDispatcher()); - assignBlazorGlobals(); -} - -export const invoke: (assembly: string, method: string, ...args: any[]) => T = whenBooted(DotNet.invokeMethod); -export const invokeAsync: (assembly: string, method: string, ...args: any[]) => Promise = whenBooted(DotNet.invokeMethodAsync); -export const createObjectReference: (object: any) => any = whenBooted(DotNet.createJSObjectReference); -export const disposeObjectReference: (objectReference: any) => void = whenBooted(DotNet.disposeJSObjectReference); -export const createStreamReference: (buffer: Uint8Array | any) => any = whenBooted(DotNet.createJSStreamReference); - -function whenBooted(fn: T): T { - return function (...args) { - const status = getBootStatus(); - if (status !== BootStatus.Booted) - throw Error(`Can't interop until .NET runtime is booted. Current status: ${status}.`); - return fn(...args); - }; -} - -function bindMethods(): void { - invokeDotNet = bindStaticMethod("Microsoft.AspNetCore.Components.WebAssembly", - "Microsoft.AspNetCore.Components.WebAssembly.Services.DefaultWebAssemblyJSRuntime", "InvokeDotNet"); - beginInvokeDotNet = bindStaticMethod("Microsoft.AspNetCore.Components.WebAssembly", - "Microsoft.AspNetCore.Components.WebAssembly.Services.DefaultWebAssemblyJSRuntime", "BeginInvokeDotNet"); - endInvokeJS = bindStaticMethod("Microsoft.AspNetCore.Components.WebAssembly", - "Microsoft.AspNetCore.Components.WebAssembly.Services.DefaultWebAssemblyJSRuntime", "EndInvokeJS"); - notifyByteArrayAvailable = bindStaticMethod("Microsoft.AspNetCore.Components.WebAssembly", - "Microsoft.AspNetCore.Components.WebAssembly.Services.DefaultWebAssemblyJSRuntime", "NotifyByteArrayAvailable"); -} - -function createDispatcher(): DotNet.DotNetCallDispatcher { - return { - invokeDotNetFromJS: invokeDotNetFromJS, - beginInvokeDotNetFromJS: beginInvokeDotNetFromJS, - endInvokeJSFromDotNet: endInvokeJSFromDotNet, - sendByteArray: sendByteArray - }; -} - -function assignBlazorGlobals(): void { - // "Blazor" global is required by mono wasm runtime. - // https://github.com/dotnet/runtime/blob/release/6.0/src/mono/wasm/runtime/dotnet_support.js#L15 - globalThis.Blazor = { - _internal: { - invokeJSFromDotNet: invokeJSFromDotNet, - endInvokeDotNetFromJS: endInvokeDotNetFromJS, - receiveByteArray: receiveByteArray, - retrieveByteArray: retrieveByteArray, - // https://github.com/dotnet/aspnetcore/blob/release/6.0/src/Components/Web.JS/src/GlobalExports.ts#L79 - getJSDataStreamChunk: (data, pos, size) => new Uint8Array(data.buffer, data.byteOffset + pos, size) - } - }; -} - -function bindStaticMethod(assembly: string, typeName: string, method: string) { - const fqn = `[${assembly}] ${typeName}:${method}`; - return wasm.BINDING.bind_static_method(fqn); -} - -function invokeJSFromDotNet(callInfo, arg0, arg1, arg2): any { - const functionId = readHeapObject(callInfo, 0)!; - const resultType = readHeapInt32(callInfo, 4); - const callArgs = readHeapObject(callInfo, 8); - const targetId = readHeapUint64(callInfo, 20); - - if (callArgs == null) { - const func = DotNet.jsCallDispatcher.findJSFunction(functionId, targetId); - return func.call(null, arg0, arg1, arg2); - } - - const callHandle = readHeapUint64(callInfo, 12); - if (callHandle !== 0) { - DotNet.jsCallDispatcher.beginInvokeJSFromDotNet(callHandle, functionId, callArgs, resultType, targetId); - return 0; - } else { - const resultJson = DotNet.jsCallDispatcher.invokeJSFromDotNet(functionId, callArgs, resultType, targetId)!; - return resultJson === null ? 0 : wasm.BINDING.js_string_to_mono_string(resultJson); - } -} - -function invokeDotNetFromJS(assemblyName, methodIdentifier, dotNetObjectId, argsJson): string { - assertHeapNotLocked(); - const assemblyNameOrNull = assemblyName ? assemblyName : null; - const objectIdOrNull = dotNetObjectId ? dotNetObjectId.toString() : null; - return invokeDotNet(assemblyNameOrNull, methodIdentifier, objectIdOrNull, argsJson) as string; -} - -function beginInvokeDotNetFromJS(callId, assemblyName, methodIdentifier, dotNetObjectId, argsJson) { - assertHeapNotLocked(); - const assemblyNameOrObjectId: string = dotNetObjectId ? dotNetObjectId.toString() : assemblyName; - beginInvokeDotNet(callId.toString(), assemblyNameOrObjectId, methodIdentifier, argsJson); -} - -function endInvokeDotNetFromJS(callId, success, resultJsonOrErrorMessage): void { - const callIdString = wasm.BINDING.conv_string(callId)!; - const successBool = (success as any as number) !== 0; - const resultJsonOrErrorMessageString = wasm.BINDING.conv_string(resultJsonOrErrorMessage)!; - DotNet.jsCallDispatcher.endInvokeDotNetFromJS(callIdString, successBool, resultJsonOrErrorMessageString); -} - -function endInvokeJSFromDotNet(asyncHandle, succeeded, serializedArgs): void { - endInvokeJS(serializedArgs); -} - -function receiveByteArray(id, data): void { - const idLong = id as any as number; - const dataByteArray = toUint8Array(data); - DotNet.jsCallDispatcher.receiveByteArray(idLong, dataByteArray); -} - -function retrieveByteArray() { - return wasm.BINDING.js_typed_array_to_array(transferredArray); -} - -function sendByteArray(id: number, data: Uint8Array): void { - transferredArray = data; - notifyByteArrayAvailable(id); -} - -function toUint8Array(array): Uint8Array { - const dataPtr = getArrayDataPointer(array); - const length = getValueI32(dataPtr); - const uint8Array = new Uint8Array(length); - uint8Array.set(wasm.HEAPU8.subarray(dataPtr + 4, dataPtr + 4 + length)); - return uint8Array; -} - -function readHeapObject(baseAddress, fieldOffset) { - const fieldValue = getValueI32((baseAddress as any as number) + (fieldOffset || 0)) as any; - return fieldValue === 0 ? null : decodeString(fieldValue); -} - -function decodeString(fieldValue) { - let decodedString: string | null | undefined; - if (currentHeapLock) { - decodedString = currentHeapLock.stringCache.get(fieldValue); - if (decodedString === undefined) { - decodedString = wasm.BINDING.conv_string(fieldValue); - currentHeapLock.stringCache.set(fieldValue, decodedString as any); - } - } else decodedString = wasm.BINDING.conv_string(fieldValue); - return decodedString; -} - -function getValueI32(ptr: number) { - return wasm.HEAP32[ptr >> 2]; -} - -function getValueU64(ptr: number) { - const heapU32Index = ptr >> 2; - const highPart = wasm.HEAPU32[heapU32Index + 1]; - return (highPart * uint64HighOrderShift) + wasm.HEAPU32[heapU32Index]; -} - -function readHeapInt32(baseAddress, fieldOffset): number { - return getValueI32((baseAddress as any as number) + fieldOffset); -} - -function readHeapUint64(baseAddress, fieldOffset): number { - return getValueU64((baseAddress as any as number) + fieldOffset); -} - -function getArrayDataPointer(array): number { - return array + 12; -} diff --git a/JavaScript/src/mono.ts b/JavaScript/src/mono.ts deleted file mode 100644 index 202ab567..00000000 --- a/JavaScript/src/mono.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { wasm } from "./wasm"; -import { Base64 } from "js-base64"; - -export interface Assembly { - name: string; - data: Uint8Array | string; -} - -export function initializeMono(assemblies: Assembly[]): void { - assemblies.forEach(loadAssembly); - wasm.ccall("mono_wasm_load_runtime", null, ["string", "number"], ["", 0]); - wasm.MONO.mono_wasm_runtime_ready(); - wasm.MONO.mono_wasm_setenv("TZ", "UTC"); - wasm.MONO.mono_wasm_setenv("DOTNET_SYSTEM_GLOBALIZATION_INVARIANT", "1"); -} - -export async function callEntryPoint(assemblyName: string): Promise { - await wasm.BINDING.call_assembly_entry_point(assemblyName, [[]], "m"); -} - -function loadAssembly(assembly: Assembly): void { - const dataLength = assembly.data.length; - const heapAddress = wasm._malloc(dataLength); - const heapMemory = new Uint8Array(wasm.HEAPU8.buffer, heapAddress, dataLength); - const data = typeof assembly.data === "string" ? Base64.toUint8Array(assembly.data) : assembly.data; - heapMemory.set(data); - wasm.ccall("mono_wasm_add_assembly", null, ["string", "number", "number"], [assembly.name, heapAddress, dataLength]); -} diff --git a/JavaScript/src/wasm.ts b/JavaScript/src/wasm.ts deleted file mode 100644 index b4f83fe1..00000000 --- a/JavaScript/src/wasm.ts +++ /dev/null @@ -1,27 +0,0 @@ -export let wasm: DotNetModule; - -export interface DotNetModule extends EmscriptenModule { - MONO: any, - BINDING: any, - ccall(ident: string, - returnType: Emscripten.JSType | null, - argTypes: Emscripten.JSType[], - args: Emscripten.TypeCompatibleWithC[], - opts?: Emscripten.CCallOpts): any; -} - -export function initializeWasm(wasmBinary: Uint8Array): Promise { - return new Promise(resolve => { - // "Module" global is expected in the emscripten's autogenerated js wrapper. - globalThis.Module = wasm = { - wasmBinary: wasmBinary, - onRuntimeInitialized: resolve - } as any; - require("../native/dotnet.js")(wasm); - }); -} - -export function destroyWasm(): void { - // https://github.com/Elringus/DotNetJS/issues/22 - // EM.ccall("emscripten_force_exit", null, ["number"], [0]); -} diff --git a/JavaScript/test/bench.js b/JavaScript/test/bench.js deleted file mode 100644 index 301874e2..00000000 --- a/JavaScript/test/bench.js +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require("assert"); -const dotnet = require("../dist/dotnet"); -const bootData = require("./csharp").getBootData(); - -describe("benchmark", () => { - after(dotnet.terminate); - it("boot", () => dotnet.boot(bootData)); - it("compute", () => dotnet.invoke("Test.Main", "ComputePrime", 52000)); - it("interop", () => { - const cycles = 23000; - const instance = dotnet.invoke("Test.Main", "CreateInstance"); - for (let i = 0; i <= cycles; i++) - instance.invokeMethod("SetVar", i.toString()); - const performed = instance.invokeMethod("GetVar"); - assert.deepStrictEqual(performed, cycles.toString()); - instance.dispose(); - }); -}); diff --git a/JavaScript/test/boot.js b/JavaScript/test/boot.js deleted file mode 100644 index 581b8638..00000000 --- a/JavaScript/test/boot.js +++ /dev/null @@ -1,65 +0,0 @@ -const assert = require("assert"); -const { boot, terminate, getBootStatus, BootStatus, invoke } = require("../dist/dotnet"); -const { bootTest, getBootData } = require("./csharp"); -const { Base64 } = require("js-base64"); - -describe("boot", () => { - it("is in standby by default", () => { - assert.deepStrictEqual(getBootStatus(), BootStatus.Standby); - }); - it("throws when no boot data provided", async () => { - await assert.rejects(boot, /Boot data is missing./); - }); - it("throws when wasm binary is not provided", async () => { - const data = { assemblies: [], entryAssemblyName: "" }; - await assert.rejects(boot(data), /Wasm binary is missing./); - }); - it("throws when assembly data is not assigned", async () => { - const assembly = { name: "Foo.dll" }; - const data = { wasm: new Uint8Array(1), assemblies: [assembly], entryAssemblyName: "Foo.dll" }; - await assert.rejects(boot(data), /Foo.dll assembly data is invalid./); - }); - it("throws when assembly data length is zero", async () => { - const assembly = { name: "Foo.dll", data: new Uint8Array(0) }; - const data = { wasm: new Uint8Array(1), assemblies: [assembly], entryAssemblyName: "Foo.dll" }; - await assert.rejects(boot(data), /Foo.dll assembly data is invalid./); - }); - it("throws when attempting to boot while already booted", async () => { - await bootTest(); - await assert.rejects(bootTest, /Invalid boot status. Expected: Standby. Actual: Booted./); - terminate(); - }); - it("throws when attempting to boot while booting", async () => { - const promise = bootTest(); - await assert.rejects(bootTest, /Invalid boot status. Expected: Standby. Actual: Booting./); - await promise; - terminate(); - }); - it("throws when attempting to terminate while not booted", () => { - assert.throws(terminate, /Invalid boot status. Expected: Booted. Actual: Standby./); - }); - it("boots when in standby", async () => { - await bootTest(); - assert.deepStrictEqual(getBootStatus(), BootStatus.Booted); - terminate(); - }); - it("invokes entry point on boot", async () => { - await bootTest(); - assert(invoke("Test.Main", "IsMainInvoked")); - terminate(); - }); - it("terminates when booted", async () => { - await bootTest(); - terminate(); - assert.deepStrictEqual(getBootStatus(), BootStatus.Standby); - }); - it("can boot with base64 binaries", async () => { - const data = getBootData(); - data.wasm = Base64.fromUint8Array(data.wasm); - for (let i = 0; i < data.assemblies.length; i++) - data.assemblies[i].data = Base64.fromUint8Array(data.assemblies[i].data); - await boot(data); - assert.deepStrictEqual(getBootStatus(), BootStatus.Booted); - terminate(); - }); -}); diff --git a/JavaScript/test/csharp.js b/JavaScript/test/csharp.js deleted file mode 100644 index 8b3b9dc1..00000000 --- a/JavaScript/test/csharp.js +++ /dev/null @@ -1,71 +0,0 @@ -const path = require("path"); -const fs = require("fs"); -const assert = require("assert"); -const dotnet = require("../dist/dotnet"); - -assertPathExists("test/csharp/Test.Main/bin/dotnet.js"); -exports.packed = require("./csharp/Test.Main/bin/dotnet"); -exports.bootTest = bootTest; -exports.getBootData = getBootData; -exports.getGeneratedTypes = getGeneratedTypes; -exports.getGeneratedMap = getGeneratedMap; - -async function bootTest() { - const bootData = getBootData(); - await dotnet.boot(bootData); -} - -function getBootData() { - return { - wasm: loadWasmBinary(), - assemblies: loadAssemblies(), - entryAssemblyName: "Test.Main.dll" - }; -} - -function getGeneratedTypes() { - const file = path.resolve("test/csharp/Test.Main/bin/dotnet.d.ts"); - assertPathExists(file); - return fs.readFileSync(file).toString(); -} - -function getGeneratedMap() { - const file = path.resolve("test/csharp/Test.Main/bin/dotnet.js.map"); - assertPathExists(file); - return fs.readFileSync(file).toString(); -} - -function loadWasmBinary() { - const file = path.resolve("native/dotnet.wasm"); - assertPathExists(file); - return fs.readFileSync(file); -} - -function loadAssemblies() { - let assemblies = []; - for (const assemblyPath of findAssemblies()) - assemblies.push(loadAssembly(assemblyPath)); - return assemblies; -} - -function findAssemblies() { - let assemblyPaths = []; - const dirPath = path.resolve("test/csharp/Test.Main/bin/Release/net6.0/publish/wwwroot/_framework"); - assertPathExists(dirPath); - for (const fileName of fs.readdirSync(dirPath)) - if (fileName.endsWith(".dll")) - assemblyPaths.push(`${dirPath}/${fileName}`); - return assemblyPaths; -} - -function loadAssembly(assemblyPath) { - return { - name: path.parse(assemblyPath).base, - data: fs.readFileSync(assemblyPath) - }; -} - -function assertPathExists(pathToCheck) { - const name = path.basename(pathToCheck); - assert(fs.existsSync(pathToCheck), `Missing test project artifact: '${name}'. Run 'scripts/compile-test.sh'.`); -} diff --git a/JavaScript/test/csharp/Test.Main/Event.cs b/JavaScript/test/csharp/Test.Main/Event.cs deleted file mode 100644 index a0d762e3..00000000 --- a/JavaScript/test/csharp/Test.Main/Event.cs +++ /dev/null @@ -1,13 +0,0 @@ -using DotNetJS; -using Microsoft.JSInterop; - -namespace Test.Main; - -public static partial class Event -{ - [JSInvokable] - public static void BroadcastEvent (string value) => OnEventBroadcast(value); - - [JSEvent] - public static partial string OnEventBroadcast (string value); -} diff --git a/JavaScript/test/csharp/Test.Main/Function.cs b/JavaScript/test/csharp/Test.Main/Function.cs deleted file mode 100644 index b5c2b6df..00000000 --- a/JavaScript/test/csharp/Test.Main/Function.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Threading.Tasks; -using DotNetJS; -using Microsoft.JSInterop; - -namespace Test.Main; - -public static partial class Function -{ - [JSInvokable] - public static string TestEchoFunction (string value) => EchoFunction(value); - - [JSFunction] - public static partial string EchoFunction (string value); - - [JSInvokable] - public static Task TestAsyncEchoFunction (string value) => AsyncEchoFunction(value); - - [JSFunction] - public static partial Task AsyncEchoFunction (string value); - - [JSInvokable] - public static string[] TestArrayArgFunction (string[] values) => ArrayArgFunction(values); - - [JSFunction] - public static partial string[] ArrayArgFunction (string[] values); -} diff --git a/JavaScript/test/csharp/Test.Main/Instance.cs b/JavaScript/test/csharp/Test.Main/Instance.cs deleted file mode 100644 index 7c734712..00000000 --- a/JavaScript/test/csharp/Test.Main/Instance.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Threading.Tasks; -using DotNetJS; -using Microsoft.JSInterop; - -namespace Test.Main; - -public class Instance -{ - private string var; - - [JSInvokable] - public static DotNetObjectReference CreateInstance () - { - return DotNetObjectReference.Create(new Instance()); - } - - [JSInvokable] - public static IJSObjectReference GetAndReturnJSObject () - { - return JS.Invoke("getObject"); - } - - [JSInvokable] - public static async Task InvokeOnJSObjectAsync (IJSObjectReference obj, string function, params object[] args) - { - await obj.InvokeVoidAsync(function, args); - } - - [JSInvokable] - public void SetVar (string value) => var = value; - - [JSInvokable] - public string GetVar () => var; - - [JSInvokable] - public string SetFromOther (DotNetObjectReference objRef) => var = objRef.Value.var; -} diff --git a/JavaScript/test/csharp/Test.Main/Invokable.cs b/JavaScript/test/csharp/Test.Main/Invokable.cs deleted file mode 100644 index 8cd63911..00000000 --- a/JavaScript/test/csharp/Test.Main/Invokable.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Text; -using System.Threading.Tasks; -using DotNetJS; -using Microsoft.JSInterop; - -namespace Test.Main; - -public static class Invokable -{ - [JSInvokable] - public static void InvokeVoid () { } - - [JSInvokable("EchoAlias")] - public static string Echo (string message) => message; - - [JSInvokable] - public static string JoinStrings (string a, string b) => a + b; - - [JSInvokable] - public static double SumDoubles (double a, double b) => a + b; - - [JSInvokable] - public static DateTime AddDays (DateTime date, int days) => date.AddDays(days); - - [JSInvokable] - public static void InvokeJS (string funcName) => JS.Invoke(funcName); - - [JSInvokable] - public static void InvokeJSWithArray (string funcName, string[] array) => JS.Invoke(funcName, new object[] { array }); - - [JSInvokable] - public static Task InvokeAsyncJS (string funcName) => JS.InvokeAsync(funcName).AsTask(); - - [JSInvokable] - public static string[] ForEachJS (string[] items, string funcName) - { - for (int i = 0; i < items.Length; i++) - items[i] = JS.Invoke(funcName, items[i]); - return items; - } - - [JSInvokable] - public static async Task JoinStringsAsync (string a, string b) - { - await Task.Yield(); - return a + b; - } - - [JSInvokable] - public static string ReceiveBytes (byte[] bytes) => Encoding.UTF8.GetString(bytes); - - [JSInvokable] - public static string SendBytes () - { - var bytes = new byte[] { - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x27, 0x73, 0x20, 0x73, 0x68, 0x69, 0x6e, 0x79, 0x2c, - 0x20, 0x43, 0x61, 0x70, 0x74, 0x61, 0x69, 0x6e, 0x2e, 0x20, 0x4e, - 0x6f, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x72, 0x65, 0x74, 0x2e - }; - return JS.Invoke("receiveBytes", bytes); - } -} diff --git a/JavaScript/test/csharp/Test.Main/Platform.cs b/JavaScript/test/csharp/Test.Main/Platform.cs deleted file mode 100644 index 6982393f..00000000 --- a/JavaScript/test/csharp/Test.Main/Platform.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using System.Net.WebSockets; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using DotNetJS; -using Microsoft.JSInterop; - -namespace Test.Main; - -public static class Platform -{ - [JSInvokable] - public static string GetGuid () => Guid.NewGuid().ToString(); - - [JSInvokable] - public static string CatchException () - { - try { JS.Invoke("throw"); } - catch (JSException e) { return e.Message; } - return null; - } - - [JSInvokable] - public static string Throw (string message) => throw new Exception(message); - - [JSInvokable] - public static async Task EchoViaWebSocket (string uri, string message, int timeout) - { - using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(timeout)); - using var client = new ClientWebSocket(); - await client.ConnectAsync(new Uri(uri), cts.Token); - var buffer = Encoding.UTF8.GetBytes(message); - await client.SendAsync(new ArraySegment(buffer), WebSocketMessageType.Text, true, cts.Token); - await client.ReceiveAsync(new ArraySegment(buffer), cts.Token); - return Encoding.UTF8.GetString(buffer); - } - - [JSInvokable] - public static long ComputePrime (int n) - { - int count = 0; - long a = 2; - while (count < n) - { - long b = 2; - int prime = 1; - while (b * b <= a) - { - if (a % b == 0) - { - prime = 0; - break; - } - b++; - } - if (prime > 0) count++; - a++; - } - return --a; - } -} diff --git a/JavaScript/test/csharp/Test.Main/Program.cs b/JavaScript/test/csharp/Test.Main/Program.cs deleted file mode 100644 index 9e4ae30f..00000000 --- a/JavaScript/test/csharp/Test.Main/Program.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Text.Json.Serialization; -using DotNetJS; -using Microsoft.JSInterop; -using Test.Types; - -namespace Test.Main; - -public static class Program -{ - private static bool mainInvoked; - - static Program () - { - JS.Runtime.ConfigureJson(options => - options.Converters.Add(new JsonStringEnumConverter()) - ); - } - - public static void Main () - { - mainInvoked = true; - ForceLoadTypesAssembly(); - } - - [JSInvokable] - public static bool IsMainInvoked () => mainInvoked; - - // https://github.com/Elringus/DotNetJS/issues/23 - private static void ForceLoadTypesAssembly () => Console.Write(typeof(Registry)); -} diff --git a/JavaScript/test/csharp/Test.Main/Stream.cs b/JavaScript/test/csharp/Test.Main/Stream.cs deleted file mode 100644 index dba344ee..00000000 --- a/JavaScript/test/csharp/Test.Main/Stream.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.IO; -using System.Threading.Tasks; -using Microsoft.JSInterop; - -namespace Test.Main; - -public static class Stream -{ - [JSInvokable] - public static async Task StreamFromJSAsync (IJSStreamReference streamRef) - { - await using var stream = await streamRef.OpenReadStreamAsync(); - await using var memoryStream = new MemoryStream(); - await stream.CopyToAsync(memoryStream); - var buffer = memoryStream.ToArray(); - for (var i = 0; i < buffer.Length; i++) - if (buffer[i] != i % 256) - throw new Exception($"Failure at index {i}."); - if (buffer.Length != 100_000) - throw new Exception($"Got a stream of length {buffer.Length}, expected a length of 100,000."); - } - - [JSInvokable] - public static DotNetStreamReference StreamFromDotNet () - { - var data = new byte[100000]; - for (var i = 0; i < data.Length; i++) - data[i] = (byte)(i % 256); - return new DotNetStreamReference(new MemoryStream(data)); - } -} diff --git a/JavaScript/test/csharp/Test.Main/Test.Main.csproj b/JavaScript/test/csharp/Test.Main/Test.Main.csproj deleted file mode 100644 index e7dcc4fe..00000000 --- a/JavaScript/test/csharp/Test.Main/Test.Main.csproj +++ /dev/null @@ -1,26 +0,0 @@ - - - - net6.0 - false - true - bin/codegen - ../../../../DotNet - - - - - - - - - - - - - ../../../DotNet/Packer/bin/Release/net6.0/publish/Packer.dll - ../../../dist - ../../../native/dotnet.wasm - - - diff --git a/JavaScript/test/csharp/Test.Types/Registry.cs b/JavaScript/test/csharp/Test.Types/Registry.cs deleted file mode 100644 index b81ec600..00000000 --- a/JavaScript/test/csharp/Test.Types/Registry.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using DotNetJS; -using Microsoft.JSInterop; - -namespace Test.Types; - -public partial class Registry -{ - public List Wheeled { get; set; } - public List Tracked { get; set; } - - [JSInvokable] - public static Registry EchoRegistry (Registry registry) => registry; - - [JSInvokable] - public static float CountTotalSpeed () - { - var registry = GetRegistry(); - return registry.Tracked.Sum(t => t.MaxSpeed) + - registry.Wheeled.Sum(t => t.MaxSpeed); - } - - [JSFunction] - public static partial Registry GetRegistry (); -} diff --git a/JavaScript/test/csharp/Test.Types/Test.Types.csproj b/JavaScript/test/csharp/Test.Types/Test.Types.csproj deleted file mode 100644 index 34c8db96..00000000 --- a/JavaScript/test/csharp/Test.Types/Test.Types.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - net6.0 - ../../../../DotNet - - - - - - - - diff --git a/JavaScript/test/csharp/Test.sln b/JavaScript/test/csharp/Test.sln deleted file mode 100644 index d04c3f28..00000000 --- a/JavaScript/test/csharp/Test.sln +++ /dev/null @@ -1,16 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test.Main", "Test.Main\Test.Main.csproj", "{CF7041CE-BEE3-4259-B3A4-C471182CEB6B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test.Types", "Test.Types\Test.Types.csproj", "{923B912D-47C5-44B3-AE2A-A3CD87CC6BFE}" -EndProject -Global - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {CF7041CE-BEE3-4259-B3A4-C471182CEB6B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CF7041CE-BEE3-4259-B3A4-C471182CEB6B}.Release|Any CPU.Build.0 = Release|Any CPU - {923B912D-47C5-44B3-AE2A-A3CD87CC6BFE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {923B912D-47C5-44B3-AE2A-A3CD87CC6BFE}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Release|Any CPU = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/JavaScript/test/export.js b/JavaScript/test/export.js deleted file mode 100644 index a22866cc..00000000 --- a/JavaScript/test/export.js +++ /dev/null @@ -1,48 +0,0 @@ -const assert = require("assert"); -const dotnet = require("../dist/dotnet"); - -describe("export", () => { - describe("runtime default", () => { - it("is defined after import", () => { - assert(dotnet.BootStatus); - assert(dotnet.getBootStatus); - assert(dotnet.boot); - assert(dotnet.terminate); - assert(dotnet.invoke); - assert(dotnet.invokeAsync); - assert(dotnet.createObjectReference); - assert(dotnet.disposeObjectReference); - assert(dotnet.createStreamReference); - }); - }); - describe("crypto", () => { - it("is defined after import", () => { - const crypto = globalThis.crypto; - assert(crypto.getRandomValues); - }); - }); - // Below globals are required for emscripten and blazor internals. - describe("blazor internal", () => { - it("is defined after import", () => { - const blazor = globalThis.Blazor._internal; - assert(blazor.invokeJSFromDotNet); - assert(blazor.endInvokeDotNetFromJS); - assert(blazor.receiveByteArray); - assert(blazor.retrieveByteArray); - assert(blazor.getJSDataStreamChunk); - }); - }); - describe("emscripten module", () => { - it("is defined after import", () => { - const em = globalThis.Module; - assert(em.wasmBinary); - }); - }); - describe("dotnet interop", () => { - it("is defined after import", () => { - const dotnet = globalThis.DotNet; - assert(dotnet.attachDispatcher); - assert(dotnet.invokeMethodAsync); - }); - }); -}); diff --git a/JavaScript/test/interop.js b/JavaScript/test/interop.js deleted file mode 100644 index b6fbb865..00000000 --- a/JavaScript/test/interop.js +++ /dev/null @@ -1,142 +0,0 @@ -const assert = require("assert"); -const dotnet = require("../dist/dotnet"); -const { bootTest } = require("./csharp"); - -const invoke = (name, ...args) => dotnet.invoke("Test.Main", name, ...args); -const invokeAsync = (name, ...args) => dotnet.invokeAsync("Test.Main", name, ...args); - -describe("interop when not booted", () => { - it("throws when attempting to use", () => { - const error = "Can't interop until .NET runtime is booted."; - assert.throws(() => invoke("Foo"), error); - assert.throws(() => invokeAsync("Foo"), error); - assert.throws(() => dotnet.createObjectReference({}), error); - assert.throws(() => dotnet.disposeObjectReference({}), error); - assert.throws(() => dotnet.createStreamReference({}), error); - }); -}); - -describe("interop", () => { - before(bootTest); - after(dotnet.terminate); - it("throws when assembly is not found", () => { - assert.throws(() => dotnet.invoke("Foo", "JoinStrings"), /.*no loaded assembly.*'Foo'/); - }); - it("throws when method is not found", () => { - assert.throws(() => invoke("Bar"), /.*does not contain.*"Bar"/); - }); - it("can send and receive string", () => { - assert.deepStrictEqual(invoke("JoinStrings", "foo", "bar"), "foobar"); - }); - it("can send and receive number", () => { - assert.deepStrictEqual(invoke("SumDoubles", -1, 2.75), 1.75); - }); - it("can send and receive date", () => { - const date = new Date(1977, 3, 2); - const expected = new Date(1977, 3, 9); - const actual = new Date(invoke("AddDays", date, 7)); - assert.deepStrictEqual(actual, expected); - }); - it("can send and receive custom data type", () => { - const expected = { - wheeled: [ - { id: "car", wheelCount: 4, maxSpeed: 100.0 }, - { id: "bicycle", wheelCount: 2, maxSpeed: 30.5 } - ], - tracked: [ - { id: "tank", trackType: "Chain", maxSpeed: 20.005 }, - { id: "tractor", trackType: "Rubber", maxSpeed: 15.9 } - ] - }; - const actual = dotnet.invoke("Test.Types", "EchoRegistry", expected); - assert.deepStrictEqual(actual, expected); - }); - it("can invoke js function from dotnet", () => { - let invoked = false; - global.invokeFromDotNet = () => invoked = true; - invoke("InvokeJS", "invokeFromDotNet"); - assert(invoked); - }); - it("can invoke js function with array arg from dotnet", () => { - let result; - global.invokeFromDotNetWithArray = array => result = array; - invoke("InvokeJSWithArray", "invokeFromDotNetWithArray", ["foo", "bar"]); - assert.deepStrictEqual(result, ["foo", "bar"]); - }); - it("can invoke async js function from dotnet", async () => { - let invoked = false; - global.asyncInvokeFromDotNet = () => new Promise(r => setTimeout(r, 1)).then(() => invoked = true); - await invokeAsync("InvokeAsyncJS", "asyncInvokeFromDotNet"); - assert(invoked); - }); - it("can process array with a js callback", () => { - const array = ["a", "b", "c"]; - const expected = ["aa", "bb", "cc"]; - global.repeat = item => item + item; - const actual = invoke("ForEachJS", array, "repeat"); - assert.deepStrictEqual(actual, expected); - }); - it("can interop with async methods", async () => { - assert.deepStrictEqual(await invokeAsync("JoinStringsAsync", "a", "b"), "ab"); - }); - it("can find method by alias", () => { - assert.deepStrictEqual(invoke("EchoAlias", "foo"), "foo"); - }); - it("can interop with dotnet instance", () => { - const instance = invoke("CreateInstance"); - assert.doesNotThrow(() => instance.invokeMethod("SetVar", "foo")); - assert.deepStrictEqual(instance.invokeMethod("GetVar"), "foo"); - assert.doesNotThrow(() => instance.dispose()); - }); - it("can send dotnet instance back", () => { - const instance1 = invoke("CreateInstance"); - const instance2 = invoke("CreateInstance"); - instance1.invokeMethod("SetVar", "bar"); - instance2.invokeMethod("SetFromOther", instance1); - assert.deepStrictEqual(instance2.invokeMethod("GetVar"), "bar"); - instance1.dispose(); - instance2.dispose(); - }); - it("can return and receive js object", () => { - const expected = dotnet.createObjectReference({ foo: "bar" }); - global.getObject = () => expected; - const actual = invoke("GetAndReturnJSObject"); - assert.deepStrictEqual(actual, expected); - }); - it("can interop with js object", async () => { - const obj = { - setField(value) { this.field = value; } - }; - const ref = dotnet.createObjectReference(obj); - await invokeAsync("InvokeOnJSObjectAsync", ref, "setField", ["nya"]); - assert.deepStrictEqual(obj.field, "nya"); - assert.doesNotThrow(() => dotnet.disposeObjectReference(ref)); - }); - it("can send and receive raw bytes", () => { - global.receiveBytes = bytes => new TextDecoder().decode(bytes); - const bytes = new Uint8Array([0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x27, 0x73, 0x20, 0x73, 0x68, 0x69, 0x6e, 0x79, 0x2c, - 0x20, 0x43, 0x61, 0x70, 0x74, 0x61, 0x69, 0x6e, 0x2e, 0x20, 0x4e, - 0x6f, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x72, 0x65, 0x74, 0x2e]); - const expected = "Everything's shiny, Captain. Not to fret."; - assert.deepStrictEqual(invoke("ReceiveBytes", bytes), expected); - assert.deepStrictEqual(invoke("SendBytes"), expected); - }); - it("can catch js exceptions", () => { - global.throw = function () { throw new Error("foo"); }; - assert.deepStrictEqual(invoke("CatchException").split("\n")[0], "foo"); - }); - it("can catch dotnet exceptions", () => { - assert.throws(() => invoke("Throw", "bar"), /Error: System.Exception: bar/); - }); - it("can stream from js", async () => { - const array = new Uint8Array(100000).map((_, index) => index % 256); - const stream = dotnet.createStreamReference(array); - await assert.doesNotReject(() => invokeAsync("StreamFromJSAsync", stream)); - }); - it("can't stream from dotnet", async () => { - // https://github.com/Elringus/DotNetJS/issues/19 - const stream = invoke("StreamFromDotNet"); - await assert.rejects(stream.arrayBuffer(), /Streaming from .NET is not supported./); - }); -}); diff --git a/JavaScript/test/packed.js b/JavaScript/test/packed.js deleted file mode 100644 index b30126a7..00000000 --- a/JavaScript/test/packed.js +++ /dev/null @@ -1,66 +0,0 @@ -const assert = require("assert"); -const { packed, getGeneratedTypes, getGeneratedMap } = require("./csharp"); - -describe("packed library", () => { - after(packed.terminate); - it("can boot without specifying boot data", async () => { - await assert.doesNotReject(packed.boot); - assert.deepStrictEqual(packed.getBootStatus(), packed.BootStatus.Booted); - }); - it("re-exports dotnet members", async () => { - assert(packed.BootStatus instanceof Object); - assert(packed.getBootStatus instanceof Function); - assert(packed.terminate instanceof Function); - assert(packed.invoke instanceof Function); - assert(packed.invokeAsync instanceof Function); - assert(packed.createObjectReference instanceof Function); - assert(packed.disposeObjectReference instanceof Function); - assert(packed.createStreamReference instanceof Function); - }); - it("exports C# methods grouped under assembly object", async () => { - assert.deepStrictEqual(packed.Test.Main.joinStrings("a", "b"), "ab"); - assert.deepStrictEqual(await packed.Test.Main.joinStringsAsync("c", "d"), "cd"); - }); - it("when function is not implemented error is thrown", async () => { - assert.throws(() => packed.Test.Main.testEchoFunction(""), /.*JSException/); - await assert.rejects(() => packed.Test.Main.testAsyncEchoFunction(""), /.*JSException/); - assert.throws(() => packed.Test.Types.countTotalSpeed(), /.*JSException/); - }); - it("can implement functions declared in C#", async () => { - packed.Test.Main.echoFunction = value => value; - packed.Test.Main.asyncEchoFunction = async value => value; - packed.Test.Types.getRegistry = () => ({ wheeled: [{ maxSpeed: 1 }], tracked: [{ maxSpeed: 2 }] }); - assert.deepStrictEqual(packed.Test.Main.testEchoFunction("a"), "a"); - assert.deepStrictEqual(await packed.Test.Main.testAsyncEchoFunction("b"), "b"); - assert.deepStrictEqual(packed.Test.Types.countTotalSpeed(), 3); - }); - it("array args handled correctly", async () => { - packed.Test.Main.arrayArgFunction = values => values; - assert.deepStrictEqual(packed.Test.Main.testArrayArgFunction(["a", "b"]), ["a", "b"]); - }); - it("can subscribe to events declared in C#", async () => { - let result = ""; - packed.Test.Main.onEventBroadcast.subscribe(v => result = v); - packed.Test.Main.broadcastEvent("foo"); - assert.deepStrictEqual(result, "foo"); - }); - it("can un-subscribe from events declared in C#", async () => { - let result = ""; - const assigner = v => result = v; - packed.Test.Main.onEventBroadcast.subscribe(assigner); - packed.Test.Main.broadcastEvent("foo"); - packed.Test.Main.onEventBroadcast.unsubscribe(assigner); - packed.Test.Main.broadcastEvent("bar"); - assert.deepStrictEqual(result, "foo"); - }); - it("still can interop via strings", async () => { - assert.deepStrictEqual(packed.invoke("Test.Main", "JoinStrings", "a", "b"), "ab"); - assert.deepStrictEqual(await packed.invokeAsync("Test.Main", "JoinStringsAsync", "a", "b"), "ab"); - }); - it("generates type definitions", () => { - assert(getGeneratedTypes()); - }); - it("generates source map", () => { - assert(getGeneratedMap()); - }); -}); diff --git a/JavaScript/test/platform.js b/JavaScript/test/platform.js deleted file mode 100644 index 49e90c9b..00000000 --- a/JavaScript/test/platform.js +++ /dev/null @@ -1,26 +0,0 @@ -const assert = require("assert"); -const dotnet = require("../dist/dotnet"); -const { bootTest } = require("./csharp"); - -const invoke = (name, ...args) => dotnet.invoke("Test.Main", name, ...args); -const invokeAsync = (name, ...args) => dotnet.invokeAsync("Test.Main", name, ...args); - -describe("platform", () => { - before(bootTest); - after(dotnet.terminate); - it("can provide guid", () => { - const guid1 = invoke("GetGuid"); - const guid2 = invoke("GetGuid"); - assert.deepStrictEqual(guid1.length, 36); - assert.deepStrictEqual(guid2.length, 36); - assert.notDeepEqual(guid1, guid2); - }); - it("can connect via websocket", async () => { - global.WebSocket = require("ws"); - const wss = new WebSocket.Server({ port: 8080 }); - wss.on("connection", socket => socket.on("message", data => socket.send(data))); - const echo = await invokeAsync("EchoViaWebSocket", "ws://localhost:8080", "foo", 1); - assert.deepStrictEqual(echo, "foo"); - wss.close(); - }); -}); diff --git a/JavaScript/tsconfig.json b/JavaScript/tsconfig.json deleted file mode 100644 index 5f06abe0..00000000 --- a/JavaScript/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "ES2020", - "moduleResolution": "Node", - "strict": true, - "noImplicitAny": false, - "sourceMap": true, - "declaration": true, - "declarationDir": "./dist" - }, - "include": ["src/**/*.ts"] -} diff --git a/JavaScript/webpack.config.js b/JavaScript/webpack.config.js deleted file mode 100644 index 86f66b9d..00000000 --- a/JavaScript/webpack.config.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = () => ({ - resolve: { extensions: [".ts"] }, - module: { rules: [{ test: /\.ts/, loader: "ts-loader" }] }, - entry: "./src/dotnet.ts", - output: { - filename: "dotnet.js", - library: { type: "umd", name: "dotnet", export: "dotnet" }, - globalObject: "this", - clean: true - }, - devtool: "source-map" -}); diff --git a/LICENSE b/LICENSE.md similarity index 100% rename from LICENSE rename to LICENSE.md diff --git a/README.md b/README.md index 88f1ad4a..2af0588d 100644 --- a/README.md +++ b/README.md @@ -1,437 +1,21 @@ -> [!IMPORTANT] -> The solution is undergoing a major rewrite for .NET 8 via https://github.com/Elringus/DotNetJS/pull/123 and is being renamed to **Bootsharp**. Feedback is welcome in the PR comments. - -# DotNetJS - -[![NuGet](https://img.shields.io/nuget/v/DotNetJS)](https://www.nuget.org/packages/DotNetJS) -[![CodeFactor](https://codefactor.io/repository/github/elringus/dotnetjs/badge/main)](https://codefactor.io/repository/github/elringus/dotnetjs/overview/main) -[![codecov](https://codecov.io/gh/Elringus/DotNetJS/branch/main/graph/badge.svg?token=AAhei51ETt)](https://codecov.io/gh/Elringus/DotNetJS) -[![CodeQL](https://github.com/Elringus/DotNetJS/actions/workflows/codeql.yml/badge.svg)](https://github.com/Elringus/DotNetJS/actions/workflows/codeql.yml) - -The solution provides user-friendly workflow for consuming .NET C# programs and libraries in any JavaScript environment, be it web browsers, Node.js or custom restricted spaces, like [web extensions](https://code.visualstudio.com/api/extension-guides/web-extensions) for VS Code, where neither node modules nor browser APIs are available. - -![](https://raw.githubusercontent.com/Elringus/CDN/main/dotnetjs-2.png) - -The solution is based on two main components: - -- [DotNet](https://github.com/Elringus/DotNetJS/tree/main/DotNet). Provides JavaScript interoperability layer in C# and packs project output into single-file JavaScript library via MSBuild task. Produced library contains dotnet runtime initialized with the project assemblies and ready to be used as interoperability layer for the packaged C# project. Can optionally emit type definitions to bootstrap TypeScript development. -- [JavaScript](https://github.com/Elringus/DotNetJS/tree/main/JavaScript). Consumes compiled C# assemblies and .NET runtime WebAssembly module to provide C# interoperability layer in JavaScript. The library is environment-agnostic — it doesn't depend on platform-specific APIs, like browser DOM or node modules and can be imported as CommonJS or ECMAScript module or consumed via script tag in browsers. - -For example, below is all you need to get fully-typed interop layer between a language server written in C# and VS Code extension that runs in node and web browsers: - -```csharp -[assembly: JSExport(new[] { - typeof(ICompletionHandler), - typeof(IHoverHandler), - // ... other C# API to expose to JS -})] - -[assembly: JSImport(new[] { - typeof(IDiagnosticPublisher), - // ... other JS API to expose to C# -})] - -public static class Program -{ - public static void Main () => new ServiceCollection() - .AddSingleton() - .AddSingleton() - // ... other application services - .AddJS() // injects auto-generated JS services specified above - .BuildServiceProvider(); -} -``` - -— notice, that all the bindings are specified via just two attributes applied to entry assembly; domain layer is not polluted with JS-specific behaviour, data types or attributes. ([full sample](https://github.com/Naninovel/Language/blob/main/backend/Naninovel.Language.Bindings/Language.cs)) - -## Important Considerations - -### Interoperability - -.NET and JavaScript are completely different runtime environments; don't expect native-like communication with arbitrary data types. While it's possible to transfer primitives (number, boolean, string, array) as-is, more complex types have to be marshalled with JSON. - -If you're looking to bring existing .NET library to JS, you'd most likely have to implement an interop layer with JSON-serializable data structures. Instances, events, delegates, dynamic types and other runtime-specific features can't be used/passed directly to JS. - -### Breaking Changes - -.NET's WASM support is constantly evolving and this project is in early development stage as well. Expect major breaking changes until the first stable release: https://github.com/Elringus/DotNetJS/milestone/1. When (or if) this happen depends on the community interest in the project. Assistance with issues labeled "help wanted" is most appreciated. - -### .NET Support - -We are using custom .NET 6 branch due to compatibility issues in the stock runtime. Even if you specify .NET 7 or newer in project manifest, the code will still run on .NET 6 when built for WASM. We have plans to migrate to stock .NET runtime once the issues are resolved (https://github.com/Elringus/DotNetJS/issues/20). - -## Quick Start - -In C# project configuration file specify `Microsoft.NET.Sdk.BlazorWebAssembly` SDK and import `DotNetJS` NuGet package: - -```xml - - - - - net6.0 - - - - - - - -``` - -To associate a JavaScript function with a C# method use `JSFunction` attribute. To expose a C# method to JavaScript, use `JSInvokable` attribute: - -```csharp -using System; -using DotNetJS; -using Microsoft.JSInterop; - -namespace HelloWorld; - -public partial class Program -{ - // Entry point is invoked by the JavaScript runtime on boot. - public static void Main () - { - // Invoking 'dotnet.HelloWorld.GetHostName()' JavaScript function. - var hostName = GetHostName(); - // Writing to JavaScript host console. - Console.WriteLine($"Hello {hostName}, DotNet here!"); - } - - [JSFunction] // The interoperability code is auto-generated. - public static partial string GetHostName (); - - [JSInvokable] // The method is invoked from JavaScript. - public static string GetName () => "DotNet"; -} -``` - -Publish the project with `dotnet publish`. A single-file `dotnet.js` library will be produced under the "bin" directory. Consume the library depending on the environment: - -### Browser - -```html - - - - -``` - -### Node.js - -```js -// Import as CommonJS module. -const dotnet = require("dotnet"); -// ... or as ECMAScript module in node v17 or later. -import dotnet from "dotnet.js"; - -// Providing implementation for 'GetHostName' function declared in 'HelloWorld' C# assembly. -dotnet.HelloWorld.getHostName = () => "Node.js"; - -(async function () { - // Booting the DotNet runtime and invoking entry point. - await dotnet.boot(); - // Invoking 'GetName()' C# method defined in 'HelloWorld' assembly. - const guestName = dotnet.HelloWorld.getName(); - console.log(`Welcome, ${guestName}! Enjoy your module space.`); -})(); -``` - -## Example Projects - -Find the following sample projects in this repository: - -- [Hello World](https://github.com/Elringus/DotNetJS/tree/main/Samples/HelloWorld) — Consume the produced library as a global import in browser, CommonJS or ES module in node. -- [Web Extension](https://github.com/Elringus/DotNetJS/tree/main/Samples/WebExtension) — Consume the library in VS Code web extension, which works in both web and standalone versions of the IDE. -- [React](https://github.com/Elringus/DotNetJS/tree/main/Samples/React) — A sample React app, which uses dotnet as backend. Features binaries side-loading and mocking dotnet APIs in unit tests. -- [Runtime Tests](https://github.com/Elringus/DotNetJS/tree/main/JavaScript/test) — Integration tests featuring various usage scenarios: async method invocations, interop with instances, sending raw byte arrays, streaming, etc. - -A real-life usage of the solution can be found in https://github.com/Naninovel/Language. The project is an implementation of language server protocol that is used in VS Code extension: https://github.com/Naninovel/VSCode. - -## Events - -To make a C# method act as event broadcaster for JavaScript consumers, annotate it with `[JSEvent]` attribute: - -```csharp -[JSEvent] -public static partial string OnSomethingHappened (string payload); -``` - -— and consume it from JavaScript as follows: - -```js -dotnet.MyApp.onSomethingHappened.subscribe(handleSomething); -dotnet.MyApp.onSomethingHappened.unsubscribe(handleSomething); - -function handleSomething(payload) { - -} -``` - -When the method in invoked in C#, subscribed JavaScript handlers will be notified. - -In TypeScript the event will have typed generic declaration corresponding to the event arguments. - -### React Event Hooks - -Below are some utility hooks, which you can use in React to bootstrap usage of the events: - -```ts -import { DependencyList, useEffect, useState } from "react"; -import { EventSubscriber } from "backend"; - -export function useEvent( - event: EventSubscriber, handler: (...args: [...T]) => void, - deps?: DependencyList | undefined, destructor?: () => void) { - useEffect(() => { - event.subscribe(handler); - return () => { - event.unsubscribe(handler); - destructor?.(); - }; - }, deps); -} - -export function useEventState( - event: EventSubscriber, - defaultState?: T[0]): T[0] | undefined { - const last = event.getLast(); - const initialState = last === undefined ? defaultState : last[0]; - const [state, setState] = useState(initialState); - useEvent(event, setState, []); - return state; -} -``` - -The `useEventState` hook will take care of both subscribing and unsubscribing from the dotnet event when component unmounts and using last event args as the default state to catch up in case the component missed a broadcast before being mounted. - -```tsx -const MyComponent = () => { - const myData = useEventState(Backend.onDataChanged); - return <>{myData}; -}; -``` - -## Auto-generating Bindings by Interfaces - -Instead of writing a binding for each method, make DotNetJS generate them automatically with `[JSImport]` and `[JSExport]` assembly attributes. - -For example, let's say we have a JS frontend, which needs to be notified when a data is mutated on our C# backend, so it can render the updated state; additionally, our frontend may have a setting (eg, stored in browser cache) to temporary mute notifications, which needs to be retrieved by the backend. Create the following interface in C# to describe the expected frontend APIs: - -```csharp -interface IFrontend -{ - void NotifyDataChanged (Data data); - bool IsMuted (); -} -``` - -Now add the interface type to the JS import list: - -```csharp -[assembly: JSImport(new[] { typeof(IFrontend) })] -``` - -DotNetJS will generate the following C# implementation: - -```csharp -public class JSFrontend : IFrontend -{ - [JSFunction] public static void NotifyDataChanged (Data data) => JS.Invoke("dotnet.Frontend.notifyDataChanged.broadcast", new object[] { data }); - [JSFunction] public static bool IsMuted () => JS.Invoke("dotnet.Frontend.isMuted"); - - void IFrontend.NotifyDataChanged (Data data) => NotifyDataChanged(data); - bool IFrontend.IsMuted () => IsMuted(); - -} -``` - -— which you can use in C# to interop with the frontend and following TypeScript spec to be implemented on the frontend: - -```ts -export namespace Frontend { - export const notifyDataChanged: Event<[Data]>; - export let isMuted: () => boolean; -} -``` - -Now let's say we want to provide an API for frontend to request mutation of the data: - -```csharp -interface IBackend -{ - void AddData (Data data); -} -``` - -Export the interface to JS: - -```csharp -[assembly: JSExport(new[] { typeof(IBackend) })] -``` - -Get the following implementation auto-generated: - -```csharp -public class JSBackend -{ - private static IBackend handler = null!; - - public JSBackend (IBackend handler) - { - JSBackend.handler = handler; - } - - [JSInvokable] public static void AddData (Data data) => handler.AddData(data); -} -``` - -— which will as well produce following spec to be consumed on JS side: - -```ts -export namespace Backend { - export function addData(data: Data): void; -} -``` - -Find example on using the attributes in the [React sample](https://github.com/Elringus/DotNetJS/blob/main/Samples/React). - -### Overriding Bindings - -Both export and import attributes have additional parameters allowing to override generated binding methods names and invocation bodies. - -Let's say we want to rename methods starting with `Notify...` to `On...` on the JS side to make it more clear that we are notifying on C# side and consuming events on JS: - -```csharp -[assembly: JSImport(new[] { - ... -}, namePattern: "Notify(.+)", nameReplacement: "On$1")] -``` - -Or maybe we want to wrap the exported bindings with some kind of error-catching mechanism: - -```csharp -[assembly: JSExport(new[] { - ... -}, invokePattern: "(.+)", invokeReplacement: "Try(() => $1)")] -``` - -## Sideloading Binaries - -By default, DotNetJS build task will embed project's DLLs and .NET WASM runtime to the generated JS library. While convenient and even required in some cases (eg, for VS Code web extensions), this also adds about 30% of extra size due to binary->base64 conversion of the embedded files. - -To disable the embedding, set `EmbedBinaries` build property to false: - -```xml - - - net6.0 - false - -``` - -The `dotnet.wasm` and solution's assemblies will be emitted in the build output directory. You will then have to provide them when booting: - -```js -const bootData = { - wasm: Uint8Array, - assemblies: [{ name: "Foo.dll", data: Uint8Array }], - entryAssemblyName: "Foo.dll" -}; -await dotnet.boot(bootData); -``` - -— this way the binary files can be streamed directly from server to optimize traffic and initial load time. - -Use `getBootUris()` function to get identifiers of all the resources required for boot. Below is an example on fetching the boot data; it assumes both wasm and assemblies are stored under `/bin` directory on the remote server: - -```js -async function fetchBootData() { - const uris = getBootUris(); - return { - wasm: await fetchBinary(uris.wasm), - assemblies: await Promise.all(uris.assemblies.map(fetchAssembly)), - entryAssemblyName: uris.entryAssembly - }; - - async function fetchBinary(name: string) { - const uri = `${process.env.PUBLIC_URL}/bin/${name}`; - return new Uint8Array(await (await fetch(uri)).arrayBuffer()); - } - - async function fetchAssembly(name: string) { - return { name, data: await fetchBinary(name) }; - } -} -``` - -Find sideloading example in the [React sample](https://github.com/Elringus/DotNetJS/blob/main/Samples/React/src/boot.ts). Also, take a look at the [build script](https://github.com/Elringus/DotNetJS/blob/main/Samples/React/scripts/build-backend.sh), which automatically deploys the binaries to the react public directory after building the backend. - -## Namespace Pattern - -By default, all the generated JavaScript binding objects and TypeScript declarations are grouped under corresponding C# namespaces. - -To override the generated namespaces, apply `JSNamespace` attribute to the entry assembly of the C# program. The attribute expects `pattern` and `replacement` arguments, which are provided to [Regex.Replace](https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex.replace?view=net-6.0#system-text-regularexpressions-regex-replace(system-string-system-string-system-string)) when building the generated namespace name. - -For example, to transform `Company.Product.Space` into `Space` namespace, use the following pattern: - -```csharp -[assembly:JSNamespace(@"Company\.Product\.(\S+)", "$1")] -``` - -## JSON Serializer Options - -To override default JSON serializer options used for marshalling the interop data, use `JS.Runtime.ConfigureJson` method before the program entry point is invoked. For example, below will add `JsonStringEnumConverter` converter to allow serializing enums via strings: - -```csharp -static class Program -{ - static Program () // Static constructor is invoked before 'Main' - { - JS.Runtime.ConfigureJson(options => - options.Converters.Add(new JsonStringEnumConverter()) - options.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull - ); - } - - public static void Main () { } -} -``` - -## Compiling Runtime - -To compile and test the runtime run the following in order under [JavaScript](https://github.com/Elringus/DotNetJS/tree/main/JavaScript) folder: - -``` -scripts/install-emsdk.sh -scripts/compile-runtime.sh -npm build -scripts/compile-test.sh -npm test -``` - -## FAQ - -### .NET 7 already provides JS interop. Why this project is still viable? - -Indeed, .NET now has a built-in JS interop API that's no longer coupled to Blazor components and doesn't use browser-specific APIs: https://devblogs.microsoft.com/dotnet/use-net-7-from-any-javascript-app-in-net-7. - -Consider DotNetJS an extension to the existing interop layer providing usability and QoL features, such as automatic JavaScript bindings generation based on C# interfaces, TypeScript definitions for the generated bindings and data types, event system, binaries embedding, etc. - -### I'm getting "An instance of analyzer Generator.SourceGenerator cannot be created" warning - -You are probably using an older .NET SDK. Please download the latest version. +