diff --git a/Cargo.lock b/Cargo.lock index 0e6b2dd11..b10c07b30 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1691,6 +1691,15 @@ dependencies = [ "slab", ] +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -2538,6 +2547,7 @@ dependencies = [ "swc_ecma_transforms", "swc_ecma_utils 0.123.0", "swc_ecma_visit 0.95.1", + "swc_emotion", "swc_error_reporters 0.16.1", "swc_node_comments", "thiserror", @@ -5462,6 +5472,30 @@ dependencies = [ "tracing", ] +[[package]] +name = "swc_emotion" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1a13c3241b2812f15e751687924b0458b55ca7c3576a752b939e954cb4b0ba" +dependencies = [ + "base64 0.13.1", + "byteorder", + "fxhash", + "once_cell", + "radix_fmt", + "regex", + "serde", + "sourcemap", + "swc_atoms 0.5.9", + "swc_common 0.32.1", + "swc_ecma_ast 0.109.1", + "swc_ecma_codegen 0.145.2", + "swc_ecma_utils 0.123.0", + "swc_ecma_visit 0.95.1", + "swc_trace_macro", + "tracing", +] + [[package]] name = "swc_eq_ignore_macros" version = "0.1.2" diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index af172dcae..b82864404 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -72,6 +72,7 @@ puffin_egui = { version = "0.22.0", optional = true } lazy_static = "1.4.0" convert_case = "0.6.0" path-clean = "1.0.1" +swc_emotion = "0.51.0" [features] profile = ["dep:eframe", "dep:puffin", "dep:puffin_egui"] diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index 1c432b5a8..032e143d9 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -11,9 +11,9 @@ pub use { serde_xml_rs, serde_yaml, svgr_rs, swc_atoms, swc_common, swc_css_ast, swc_css_codegen, swc_css_compat, swc_css_minifier, swc_css_modules, swc_css_parser, swc_css_prefixer, swc_css_visit, swc_ecma_ast, swc_ecma_codegen, swc_ecma_minifier, swc_ecma_parser, - swc_ecma_preset_env, swc_ecma_transforms, swc_ecma_utils, swc_ecma_visit, swc_error_reporters, - swc_node_comments, thiserror, tokio, tokio_tungstenite, toml, tracing, tracing_subscriber, - tungstenite, twox_hash, + swc_ecma_preset_env, swc_ecma_transforms, swc_ecma_utils, swc_ecma_visit, swc_emotion, + swc_error_reporters, swc_node_comments, thiserror, tokio, tokio_tungstenite, toml, tracing, + tracing_subscriber, tungstenite, twox_hash, }; #[macro_export] diff --git a/crates/mako/src/config.rs b/crates/mako/src/config.rs index 3cde38e5e..d6843fec8 100644 --- a/crates/mako/src/config.rs +++ b/crates/mako/src/config.rs @@ -292,6 +292,7 @@ pub struct Config { pub _minifish: Option, #[serde(rename = "optimizePackageImports")] pub optimize_package_imports: bool, + pub emotion: bool, } pub(crate) fn hash_config(c: &Config) -> u64 { @@ -350,7 +351,8 @@ const DEFAULT_CONFIG: &str = r#" "nodePolyfill": true, "ignores": [], "_minifish": null, - "optimizePackageImports": false + "optimizePackageImports": false, + "emotion": false, } "#; diff --git a/crates/mako/src/transformers/transform_react.rs b/crates/mako/src/transformers/transform_react.rs index 65bc3c732..39e548b82 100644 --- a/crates/mako/src/transformers/transform_react.rs +++ b/crates/mako/src/transformers/transform_react.rs @@ -1,3 +1,4 @@ +use std::path::Path; use std::sync::Arc; use mako_core::swc_common::comments::NoopComments; @@ -5,7 +6,8 @@ use mako_core::swc_common::sync::Lrc; use mako_core::swc_common::{chain, Mark, SourceMap}; use mako_core::swc_ecma_ast::Module; use mako_core::swc_ecma_transforms::react::{react, Options, RefreshOptions, Runtime}; -use mako_core::swc_ecma_visit::{VisitMut, VisitMutWith}; +use mako_core::swc_ecma_visit::{Fold, VisitMut, VisitMutWith}; +use mako_core::swc_emotion::{emotion, EmotionOptions}; use crate::ast::build_js_ast; use crate::build::Task; @@ -42,27 +44,46 @@ pub fn mako_react( }; } - let visit = react( - cm, - Some(NoopComments), - Options { - import_source: Some("react".to_string()), - pragma: Some("React.createElement".into()), - pragma_frag: Some("React.Fragment".into()), - // support react 17 + only - runtime: Some(Runtime::Automatic), - development: Some(is_dev), - // to avoid throw error for svg namespace element - throw_if_namespace: Some(false), - refresh: if use_refresh { - Some(RefreshOptions::default()) - } else { - None + let (import_source, pragma) = if context.config.emotion { + ("@emotion/react", "jsx") + } else { + ("react", "React.createElement") + }; + + let emotion = if context.config.emotion { + Box::new(Emotion { + mode: context.config.mode.clone(), + cm: cm.clone(), + path: task.path.clone(), + }) + } else { + noop() + }; + + let visit = chain!( + emotion, + react( + cm, + Some(NoopComments), + Options { + import_source: Some(import_source.to_string()), + pragma: Some(pragma.into()), + pragma_frag: Some("React.Fragment".into()), + // support react 17 + only + runtime: Some(Runtime::Automatic), + development: Some(is_dev), + // to avoid throw error for svg namespace element + throw_if_namespace: Some(false), + refresh: if use_refresh { + Some(RefreshOptions::default()) + } else { + None + }, + ..Default::default() }, - ..Default::default() - }, - *top_level_mark, - *unresolved_mark, + *top_level_mark, + *unresolved_mark, + ) ); if use_refresh { Box::new(if task.is_entry { @@ -83,6 +104,36 @@ pub fn mako_react( } } +struct Emotion { + cm: Lrc, + path: String, + mode: Mode, +} + +impl VisitMut for Emotion { + fn visit_mut_module(&mut self, module: &mut Module) { + let is_dev = matches!(self.mode, Mode::Development); + let pos = self.cm.lookup_char_pos(module.span.lo); + let hash = pos.file.src_hash as u32; + let mut folder = emotion( + EmotionOptions { + enabled: Some(true), + sourcemap: Some(true), + auto_label: Some(is_dev), + import_map: None, + ..Default::default() + }, + Path::new(&self.path), + hash, + self.cm.clone(), + NoopComments, + ); + module.body = folder.fold_module(module.clone()).body; + + module.visit_mut_children_with(self); + } +} + impl VisitMut for PrefixCode { fn visit_mut_module(&mut self, module: &mut Module) { let post_code_snippet_module = diff --git a/examples/with-emotion/index.tsx b/examples/with-emotion/index.tsx new file mode 100644 index 000000000..873f8edb9 --- /dev/null +++ b/examples/with-emotion/index.tsx @@ -0,0 +1,40 @@ +import { css } from '@emotion/react'; +import styled from '@emotion/styled'; +import ReactDOM from 'react-dom/client'; +import React from 'react'; + +const style = css` + color: hotpink; +`; + +const DivContainer = styled.div({ + background: 'red', +}); + +const SpanContainer = styled('span')({ + background: 'yellow', +}); + +const Child = styled.div` + color: red; +`; + +const Parent = styled.div` + ${Child} { + color: green; + } +`; + +const App = () => { + return [ +
Hello emotion
, + red div, + yellow span, + + Green because I am inside a Parent + , + Red because I am not inside a Parent, + ]; +}; + +ReactDOM.createRoot(document.getElementById('root')!).render(); diff --git a/examples/with-emotion/mako.config.json b/examples/with-emotion/mako.config.json new file mode 100644 index 000000000..5b5937ae9 --- /dev/null +++ b/examples/with-emotion/mako.config.json @@ -0,0 +1,3 @@ +{ + "emotion": true +} diff --git a/examples/with-emotion/package.json b/examples/with-emotion/package.json new file mode 100644 index 000000000..fe1d776eb --- /dev/null +++ b/examples/with-emotion/package.json @@ -0,0 +1,8 @@ +{ + "dependencies": { + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "react": "18.2.0", + "react-dom": "18.2.0" + } +} diff --git a/examples/with-emotion/public/index.html b/examples/with-emotion/public/index.html new file mode 100644 index 000000000..89ae4adf7 --- /dev/null +++ b/examples/with-emotion/public/index.html @@ -0,0 +1,12 @@ + + + + + + + +
+ + + + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d4653b6fa..a217b4a70 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -225,6 +225,21 @@ importers: specifier: ^0.14.0 version: 0.14.0 + examples/with-emotion: + dependencies: + '@emotion/react': + specifier: ^11.11.1 + version: 11.11.1(react@18.2.0) + '@emotion/styled': + specifier: ^11.11.0 + version: 11.11.0(@emotion/react@11.11.1)(react@18.2.0) + react: + specifier: 18.2.0 + version: 18.2.0 + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + examples/with-less: dependencies: react: @@ -563,7 +578,7 @@ packages: '@ant-design/pro-form': 2.12.1(antd@5.8.4)(rc-field-form@1.36.2)(react-dom@18.2.0)(react@18.2.0) '@ant-design/pro-skeleton': 2.1.3(antd@5.8.4)(react-dom@18.2.0)(react@18.2.0) '@ant-design/pro-utils': 2.10.0(antd@5.8.4)(react-dom@18.2.0)(react@18.2.0) - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.11 antd: 5.8.4(react-dom@18.2.0)(react@18.2.0) rc-resize-observer: 0.2.6(react-dom@18.2.0)(react@18.2.0) rc-util: 5.30.0(react-dom@18.2.0)(react@18.2.0) @@ -1076,7 +1091,7 @@ packages: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.4 /@babel/helper-builder-binary-assignment-operator-visitor@7.22.3: resolution: {integrity: sha512-ahEoxgqNoYXm0k22TvOke48i1PkavGu0qGCmcq9ugi6gnmvKNaMjKBSrZTnWUi1CFEeNAUiVba0Wtzm03aSkJg==} @@ -1170,13 +1185,13 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.21.9 - '@babel/types': 7.21.5 + '@babel/types': 7.22.4 /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.4 /@babel/helper-member-expression-to-functions@7.22.3: resolution: {integrity: sha512-Gl7sK04b/2WOb6OPVeNy9eFKeD3L6++CzL3ykPOWqTn08xgYYK0wz4TUh2feIImDXxcVW3/9WQ1NMKY66/jfZA==} @@ -1266,7 +1281,7 @@ packages: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.4 /@babel/helper-string-parser@7.21.5: resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==} @@ -1317,7 +1332,7 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.4 /@babel/parser@7.22.4: resolution: {integrity: sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==} @@ -2423,7 +2438,7 @@ packages: dependencies: '@babel/code-frame': 7.21.4 '@babel/parser': 7.21.9 - '@babel/types': 7.21.5 + '@babel/types': 7.22.4 /@babel/traverse@7.22.4(supports-color@5.5.0): resolution: {integrity: sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==} @@ -2592,9 +2607,39 @@ packages: engines: {node: '>=10.0.0'} dev: true + /@emotion/babel-plugin@11.11.0: + resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} + dependencies: + '@babel/helper-module-imports': 7.21.4 + '@babel/runtime': 7.22.11 + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/serialize': 1.1.2 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + dev: false + + /@emotion/cache@11.11.0: + resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} + dependencies: + '@emotion/memoize': 0.8.1 + '@emotion/sheet': 1.2.2 + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + stylis: 4.2.0 + dev: false + /@emotion/hash@0.8.0: resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} + /@emotion/hash@0.9.1: + resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} + dev: false + /@emotion/is-prop-valid@1.2.1: resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==} dependencies: @@ -2603,6 +2648,60 @@ packages: /@emotion/memoize@0.8.1: resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + /@emotion/react@11.11.1(react@18.2.0): + resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.11 + '@emotion/babel-plugin': 11.11.0 + '@emotion/cache': 11.11.0 + '@emotion/serialize': 1.1.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + dev: false + + /@emotion/serialize@1.1.2: + resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==} + dependencies: + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/unitless': 0.8.1 + '@emotion/utils': 1.2.1 + csstype: 3.1.2 + dev: false + + /@emotion/sheet@1.2.2: + resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} + dev: false + + /@emotion/styled@11.11.0(@emotion/react@11.11.1)(react@18.2.0): + resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.11 + '@emotion/babel-plugin': 11.11.0 + '@emotion/is-prop-valid': 1.2.1 + '@emotion/react': 11.11.1(react@18.2.0) + '@emotion/serialize': 1.1.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + react: 18.2.0 + dev: false + /@emotion/stylis@0.8.5: resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==} @@ -2611,7 +2710,22 @@ packages: /@emotion/unitless@0.8.1: resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} - dev: true + + /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): + resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} + peerDependencies: + react: '>=16.8.0' + dependencies: + react: 18.2.0 + dev: false + + /@emotion/utils@1.2.1: + resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} + dev: false + + /@emotion/weak-memoize@0.3.1: + resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} + dev: false /@esbuild-kit/cjs-loader@2.4.2: resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==} @@ -3195,6 +3309,7 @@ packages: engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] requiresBuild: true dev: false optional: true @@ -3780,7 +3895,6 @@ packages: /@types/parse-json@4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} - dev: true /@types/prop-types@15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} @@ -5280,6 +5394,15 @@ packages: '@types/babel__traverse': 7.20.0 dev: true + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.22.11 + cosmiconfig: 7.1.0 + resolve: 1.22.2 + dev: false + /babel-plugin-polyfill-corejs2@0.4.3(@babel/core@7.22.1): resolution: {integrity: sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==} peerDependencies: @@ -5591,7 +5714,6 @@ packages: /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - dev: true /camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} @@ -5866,7 +5988,6 @@ packages: /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: true /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -5937,7 +6058,6 @@ packages: parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 - dev: true /create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} @@ -6538,7 +6658,6 @@ packages: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 - dev: true /error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} @@ -6701,7 +6820,6 @@ packages: /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: true /eslint-plugin-jest@27.2.1(@typescript-eslint/eslint-plugin@5.48.1)(eslint@8.41.0)(typescript@5.0.4): resolution: {integrity: sha512-l067Uxx7ZT8cO9NJuf+eJHvt6bqJyz2Z29wykyEdz/OtmcELQl2MQGQLX8J94O1cSJWAwUSEvCjwjA7KEK3Hmg==} @@ -7103,6 +7221,10 @@ packages: transitivePeerDependencies: - supports-color + /find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: false + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -7794,7 +7916,6 @@ packages: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true /import-html-entry@1.14.6: resolution: {integrity: sha512-5MQkbwIr8n/bXOoE05M5/Nm0lnHO46vnb3D6svSvtVwpDqwhd/X14zjLcU31QWZ6gL8rUXNzj6vKHx4yOUL6gQ==} @@ -7908,7 +8029,6 @@ packages: /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true /is-arrow-function@2.0.3: resolution: {integrity: sha512-iDStzcT1FJMzx+TjCOK//uDugSe/Mif/8a+T0htydQ3qkJGvSweTZpVYz4hpJH0baloSPiAFQdA8WslAgJphvQ==} @@ -7953,7 +8073,6 @@ packages: resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} dependencies: has: 1.0.3 - dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -8344,7 +8463,6 @@ packages: /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -8546,7 +8664,6 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true /loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} @@ -9308,7 +9425,6 @@ packages: engines: {node: '>=6'} dependencies: callsites: 3.1.0 - dev: true /parse-asn1@5.1.6: resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} @@ -9327,7 +9443,6 @@ packages: error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true /parse-node-version@1.0.1: resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} @@ -9368,7 +9483,6 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true /path-scurry@1.9.2: resolution: {integrity: sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==} @@ -9393,7 +9507,6 @@ packages: /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - dev: true /path2d-polyfill@2.0.1: resolution: {integrity: sha512-ad/3bsalbbWhmBo0D6FZ4RNMwsLsPpL6gnvhuSaU5Vm7b06Kr5ubSltQQ0T7YKsiJQO+g22zJ4dJKNTXIyOXtA==} @@ -11493,7 +11606,6 @@ packages: /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - dev: true /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} @@ -11515,7 +11627,6 @@ packages: is-core-module: 2.12.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true /resolve@2.0.0-next.4: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} @@ -11849,6 +11960,11 @@ packages: source-map: 0.6.1 dev: true + /source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: false + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -12246,7 +12362,6 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true /svg-parser@2.0.4: resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} @@ -13160,7 +13275,6 @@ packages: /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - dev: true /yaml@2.3.1: resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==}