diff --git a/.stylelintignore b/.stylelintignore
index 3aed1aaf090..24e0c5166d8 100644
--- a/.stylelintignore
+++ b/.stylelintignore
@@ -1,3 +1,11 @@
-components/**/*-generated.css
-tokens/*
-components/site/*
+*-generated.css
+
+tokens/**/*.css
+node_modules/**/*.css
+
+plugins/*/expected/*
+plugins/*/fixtures/*
+dist/*
+
+components/*/dist/*
+components/*/node_modules/*
diff --git a/README.md b/README.md
index 6b0ab19f5fc..a7705ca8ab7 100644
--- a/README.md
+++ b/README.md
@@ -345,7 +345,9 @@ This project includes several small scripts to help with common tasks.
- **Note** that you must run `yarn build` before running `yarn compare` to ensure that the latest build is being compared.
- `yarn refresh:env`: This copies values for the project's `.env` file (an asset never committed to the repo as it contains login secrets) by using the `.env.example` file as a template. This script is useful when you need to update the `.env` file with new values from the `.env.example` file or when you checkout or clean the repo and need to restore the `.env` file.
- `yarn refresh:directory`: This will remove any deprecated package folders that are no longer in use. The goal is to make migrating to a new project architecture easier for the most number of users.
-- `yarn lint:components`: Provides helpful updates and warnings for a component's package.json file. This helps keep all components in alignment.
+- `yarn lint`: Provides helpful updates and warnings for a component's package.json file. This helps keep all components in alignment.
+ - Use `yarn lint --fix` to automatically fix any issues that are found.
+ - To run on a single component, use `yarn linter accordion` (where `accordion` is the name of the component or components you want to lint).
### CLI
@@ -355,7 +357,6 @@ The following tasks are available:
- `yarn build` - Performs a build of all components
- `yarn dev` - Performs a component build, runs storybook, and serves the documentation on the default port (3000), then starts watching components and website files
- `yarn clean` - Cleans all output files for the project and all components
-- `yarn watch` - Assuming a build has already been performed, re-starts starts watching components and website files. Presumes a browser is already open to your locally served docs
---
diff --git a/components/accordion/project.json b/components/accordion/project.json
index 313d25ce10d..7265466f2d5 100644
--- a/components/accordion/project.json
+++ b/components/accordion/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/actionbar/project.json b/components/actionbar/project.json
index 833ebca9581..6f53d30b2f9 100644
--- a/components/actionbar/project.json
+++ b/components/actionbar/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/actionbutton/project.json b/components/actionbutton/project.json
index 0e642b0d002..973247a564d 100644
--- a/components/actionbutton/project.json
+++ b/components/actionbutton/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/actiongroup/project.json b/components/actiongroup/project.json
index fefde14808b..148620c6f06 100644
--- a/components/actiongroup/project.json
+++ b/components/actiongroup/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/alertbanner/project.json b/components/alertbanner/project.json
index 0505a3e467d..c4ba96c28c3 100644
--- a/components/alertbanner/project.json
+++ b/components/alertbanner/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/alertdialog/project.json b/components/alertdialog/project.json
index 0c54791e313..557e23db8d6 100644
--- a/components/alertdialog/project.json
+++ b/components/alertdialog/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/asset/project.json b/components/asset/project.json
index 8db0f6b5fb2..a2dceddfb07 100644
--- a/components/asset/project.json
+++ b/components/asset/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/assetcard/project.json b/components/assetcard/project.json
index 9afb29407a1..e1a912c5009 100644
--- a/components/assetcard/project.json
+++ b/components/assetcard/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/assetlist/project.json b/components/assetlist/project.json
index 3567ad906f1..33f923ada67 100644
--- a/components/assetlist/project.json
+++ b/components/assetlist/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/avatar/project.json b/components/avatar/project.json
index 842b242a33d..c179b90e0f9 100644
--- a/components/avatar/project.json
+++ b/components/avatar/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/badge/project.json b/components/badge/project.json
index cc9844135e1..0f195e6fea0 100644
--- a/components/badge/project.json
+++ b/components/badge/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/breadcrumb/project.json b/components/breadcrumb/project.json
index a0854eeac1b..517a29e7d8f 100644
--- a/components/breadcrumb/project.json
+++ b/components/breadcrumb/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/button/project.json b/components/button/project.json
index edfd831ad5a..e291f407a3d 100644
--- a/components/button/project.json
+++ b/components/button/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/buttongroup/project.json b/components/buttongroup/project.json
index 793184392a3..1a0ae1a2129 100644
--- a/components/buttongroup/project.json
+++ b/components/buttongroup/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/calendar/project.json b/components/calendar/project.json
index dfc97ec5ae3..a8e93d00a82 100644
--- a/components/calendar/project.json
+++ b/components/calendar/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/card/project.json b/components/card/project.json
index 06c0f9ab5f1..642a041f861 100644
--- a/components/card/project.json
+++ b/components/card/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/checkbox/project.json b/components/checkbox/project.json
index 882077b8f10..8f52f614989 100644
--- a/components/checkbox/project.json
+++ b/components/checkbox/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/clearbutton/project.json b/components/clearbutton/project.json
index 591c3dc51a2..f78d9b51101 100644
--- a/components/clearbutton/project.json
+++ b/components/clearbutton/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/closebutton/project.json b/components/closebutton/project.json
index 1feb88eb408..711eaa12696 100644
--- a/components/closebutton/project.json
+++ b/components/closebutton/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/coachindicator/project.json b/components/coachindicator/project.json
index 78d914a6f87..4aa8f4b79e0 100644
--- a/components/coachindicator/project.json
+++ b/components/coachindicator/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/coachmark/project.json b/components/coachmark/project.json
index ebe3f64a301..7ee9999ba58 100644
--- a/components/coachmark/project.json
+++ b/components/coachmark/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/colorarea/project.json b/components/colorarea/project.json
index 04f50d57de0..f274767cf38 100644
--- a/components/colorarea/project.json
+++ b/components/colorarea/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/colorhandle/project.json b/components/colorhandle/project.json
index 84acf7b9a0e..479e3abbba2 100644
--- a/components/colorhandle/project.json
+++ b/components/colorhandle/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/colorloupe/project.json b/components/colorloupe/project.json
index 4e8e21a7189..4d84755d38d 100644
--- a/components/colorloupe/project.json
+++ b/components/colorloupe/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/colorslider/project.json b/components/colorslider/project.json
index 1d1cb7cc73f..c549928a573 100644
--- a/components/colorslider/project.json
+++ b/components/colorslider/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/colorwheel/project.json b/components/colorwheel/project.json
index c9eadd6b7aa..79a4c5b858b 100644
--- a/components/colorwheel/project.json
+++ b/components/colorwheel/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/combobox/project.json b/components/combobox/project.json
index 1652196ca74..2478d8ba62b 100644
--- a/components/combobox/project.json
+++ b/components/combobox/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/commons/project.json b/components/commons/project.json
index fc99eadba95..e5af9a0bf66 100644
--- a/components/commons/project.json
+++ b/components/commons/project.json
@@ -12,6 +12,8 @@
"compare": {
"executor": "nx:noop"
},
+ "lint": {},
+
"test": {
"executor": "nx:noop"
}
diff --git a/components/contextualhelp/project.json b/components/contextualhelp/project.json
index 950608158ee..76975ff88e3 100644
--- a/components/contextualhelp/project.json
+++ b/components/contextualhelp/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/cyclebutton/project.json b/components/cyclebutton/project.json
index b6f5748e832..70cf37d5923 100644
--- a/components/cyclebutton/project.json
+++ b/components/cyclebutton/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/datepicker/project.json b/components/datepicker/project.json
index b867831d405..a9ce1dac579 100644
--- a/components/datepicker/project.json
+++ b/components/datepicker/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/dial/project.json b/components/dial/project.json
index fc091a7728b..986835603e3 100644
--- a/components/dial/project.json
+++ b/components/dial/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/dialog/project.json b/components/dialog/project.json
index 111e2a95a08..71814b62fa7 100644
--- a/components/dialog/project.json
+++ b/components/dialog/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/divider/project.json b/components/divider/project.json
index 52546bcfbc9..c28d36ce5d1 100644
--- a/components/divider/project.json
+++ b/components/divider/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/dropindicator/project.json b/components/dropindicator/project.json
index 4dd17ffc36b..5481122a57f 100644
--- a/components/dropindicator/project.json
+++ b/components/dropindicator/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/dropzone/project.json b/components/dropzone/project.json
index 9f7ee274e07..9d06ae1fae7 100644
--- a/components/dropzone/project.json
+++ b/components/dropzone/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/fieldgroup/project.json b/components/fieldgroup/project.json
index 8df0eaea484..cfaa3ec9920 100644
--- a/components/fieldgroup/project.json
+++ b/components/fieldgroup/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/fieldlabel/project.json b/components/fieldlabel/project.json
index 245a567e722..7e16a4db9b7 100644
--- a/components/fieldlabel/project.json
+++ b/components/fieldlabel/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/floatingactionbutton/project.json b/components/floatingactionbutton/project.json
index 503597b18d6..477dae43a85 100644
--- a/components/floatingactionbutton/project.json
+++ b/components/floatingactionbutton/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/helptext/project.json b/components/helptext/project.json
index 940287b7e07..6fba10e2a7d 100644
--- a/components/helptext/project.json
+++ b/components/helptext/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/icon/project.json b/components/icon/project.json
index ef1ef3754db..733ab7a944f 100644
--- a/components/icon/project.json
+++ b/components/icon/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/illustratedmessage/project.json b/components/illustratedmessage/project.json
index e545e3ddb09..ab465c9427f 100644
--- a/components/illustratedmessage/project.json
+++ b/components/illustratedmessage/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/infieldbutton/project.json b/components/infieldbutton/project.json
index 22384347a86..d3b6c8294ad 100644
--- a/components/infieldbutton/project.json
+++ b/components/infieldbutton/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/inlinealert/project.json b/components/inlinealert/project.json
index 0425c86dd5c..cb5569246dd 100644
--- a/components/inlinealert/project.json
+++ b/components/inlinealert/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/link/project.json b/components/link/project.json
index 7f99838f5f3..32976ac48e3 100644
--- a/components/link/project.json
+++ b/components/link/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/logicbutton/project.json b/components/logicbutton/project.json
index fe876aba46d..9a676ad3101 100644
--- a/components/logicbutton/project.json
+++ b/components/logicbutton/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/menu/project.json b/components/menu/project.json
index 1f235fedebb..3f5fc9298ec 100644
--- a/components/menu/project.json
+++ b/components/menu/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/miller/project.json b/components/miller/project.json
index 7f80ed4c238..4eb9150b825 100644
--- a/components/miller/project.json
+++ b/components/miller/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/modal/project.json b/components/modal/project.json
index adb08bb232a..090c3b9dd3e 100644
--- a/components/modal/project.json
+++ b/components/modal/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/opacitycheckerboard/project.json b/components/opacitycheckerboard/project.json
index d2c01325e11..d1c25f2823e 100644
--- a/components/opacitycheckerboard/project.json
+++ b/components/opacitycheckerboard/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/overlay/project.json b/components/overlay/project.json
index 13dea438a98..7e7e650de76 100644
--- a/components/overlay/project.json
+++ b/components/overlay/project.json
@@ -12,6 +12,8 @@
"compare": {
"executor": "nx:noop"
},
+ "lint": {},
+
"test": {
"executor": "nx:noop"
}
diff --git a/components/page/project.json b/components/page/project.json
index 373d157f69a..d2391f78797 100644
--- a/components/page/project.json
+++ b/components/page/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/pagination/project.json b/components/pagination/project.json
index 52572e8c24c..e7ecb21773b 100644
--- a/components/pagination/project.json
+++ b/components/pagination/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/picker/project.json b/components/picker/project.json
index c9f142db1a9..46a6297ba1c 100644
--- a/components/picker/project.json
+++ b/components/picker/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/pickerbutton/project.json b/components/pickerbutton/project.json
index f1fe9eae1bf..afbbf4f4c32 100644
--- a/components/pickerbutton/project.json
+++ b/components/pickerbutton/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/popover/project.json b/components/popover/project.json
index bd0777e01ff..98803bab0e8 100644
--- a/components/popover/project.json
+++ b/components/popover/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/progressbar/project.json b/components/progressbar/project.json
index 592298cd908..dfda81337df 100644
--- a/components/progressbar/project.json
+++ b/components/progressbar/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/progresscircle/project.json b/components/progresscircle/project.json
index 9f3ca5ba620..9cad0f66cab 100644
--- a/components/progresscircle/project.json
+++ b/components/progresscircle/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/quickaction/project.json b/components/quickaction/project.json
index 2e3bf0c17da..75f129cc426 100644
--- a/components/quickaction/project.json
+++ b/components/quickaction/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/radio/project.json b/components/radio/project.json
index 18457708df3..2963b14716d 100644
--- a/components/radio/project.json
+++ b/components/radio/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/rating/project.json b/components/rating/project.json
index d3008bd16b0..c54ef153dbb 100644
--- a/components/rating/project.json
+++ b/components/rating/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/search/project.json b/components/search/project.json
index a4a2085302a..60ec1ad7ae4 100644
--- a/components/search/project.json
+++ b/components/search/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/searchwithin/project.json b/components/searchwithin/project.json
index 8378b2606a7..af0452bfb5d 100644
--- a/components/searchwithin/project.json
+++ b/components/searchwithin/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/sidenav/project.json b/components/sidenav/project.json
index b854a5ca003..2094743207c 100644
--- a/components/sidenav/project.json
+++ b/components/sidenav/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/site/project.json b/components/site/project.json
index 8db23bbef48..65745320a6e 100644
--- a/components/site/project.json
+++ b/components/site/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/slider/project.json b/components/slider/project.json
index 624d3503b3a..fc10876f3a7 100644
--- a/components/slider/project.json
+++ b/components/slider/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/splitbutton/project.json b/components/splitbutton/project.json
index d3aafd35ee4..2bf9a392890 100644
--- a/components/splitbutton/project.json
+++ b/components/splitbutton/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/splitview/project.json b/components/splitview/project.json
index 40f715f5bb0..53bd05a41d9 100644
--- a/components/splitview/project.json
+++ b/components/splitview/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/statuslight/project.json b/components/statuslight/project.json
index eb8950e8340..dcd5056fe10 100644
--- a/components/statuslight/project.json
+++ b/components/statuslight/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/steplist/project.json b/components/steplist/project.json
index 3128553f361..5e668372df9 100644
--- a/components/steplist/project.json
+++ b/components/steplist/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/stepper/project.json b/components/stepper/project.json
index 3b45e09418d..c53a30ee0fd 100644
--- a/components/stepper/project.json
+++ b/components/stepper/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/swatch/project.json b/components/swatch/project.json
index bf652851d68..213bb1057a4 100644
--- a/components/swatch/project.json
+++ b/components/swatch/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/swatchgroup/project.json b/components/swatchgroup/project.json
index 144b8b5d4c2..6c2d34af5b8 100644
--- a/components/swatchgroup/project.json
+++ b/components/swatchgroup/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/switch/project.json b/components/switch/project.json
index f681ad5429b..9f10cbb49d0 100644
--- a/components/switch/project.json
+++ b/components/switch/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/table/project.json b/components/table/project.json
index 3f9dd702706..b5fb1ed43f1 100644
--- a/components/table/project.json
+++ b/components/table/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/tabs/project.json b/components/tabs/project.json
index fa84e94f797..a0e04cf5473 100644
--- a/components/tabs/project.json
+++ b/components/tabs/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/tag/project.json b/components/tag/project.json
index 1266b916dc6..16bee8c64de 100644
--- a/components/tag/project.json
+++ b/components/tag/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/taggroup/project.json b/components/taggroup/project.json
index 6e57f81472a..a9b275cc211 100644
--- a/components/taggroup/project.json
+++ b/components/taggroup/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/textfield/project.json b/components/textfield/project.json
index d5bb0bf0d9d..b9b564030fc 100644
--- a/components/textfield/project.json
+++ b/components/textfield/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/thumbnail/project.json b/components/thumbnail/project.json
index 479bab2f16d..b82705fa71d 100644
--- a/components/thumbnail/project.json
+++ b/components/thumbnail/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/toast/project.json b/components/toast/project.json
index 88b6f1963dd..e17c5e38775 100644
--- a/components/toast/project.json
+++ b/components/toast/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/tooltip/project.json b/components/tooltip/project.json
index 899580b03fc..d3fbc87b6a1 100644
--- a/components/tooltip/project.json
+++ b/components/tooltip/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/tray/project.json b/components/tray/project.json
index 6f61adb83c5..0605d6b8c05 100644
--- a/components/tray/project.json
+++ b/components/tray/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/treeview/project.json b/components/treeview/project.json
index c8d5bc46482..634c6194a7d 100644
--- a/components/treeview/project.json
+++ b/components/treeview/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/typography/project.json b/components/typography/project.json
index 4da54dc0a8c..267b87e3b11 100644
--- a/components/typography/project.json
+++ b/components/typography/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/underlay/project.json b/components/underlay/project.json
index c40f010eb09..793a3796426 100644
--- a/components/underlay/project.json
+++ b/components/underlay/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/components/well/project.json b/components/well/project.json
index 9ec2a08beea..4fcb8385688 100644
--- a/components/well/project.json
+++ b/components/well/project.json
@@ -6,6 +6,8 @@
"build": {},
"clean": {},
"compare": {},
+ "lint": {},
+
"test": {
"defaultConfiguration": "scope"
}
diff --git a/nx.json b/nx.json
index ec207b37193..579754c5c30 100644
--- a/nx.json
+++ b/nx.json
@@ -90,6 +90,13 @@
]
}
},
+ "lint": {
+ "inputs": ["core", { "externalDependencies": ["stylelint"] }],
+ "executor": "nx:run-commands",
+ "options": {
+ "commands": ["stylelint {projectRoot}/*.css {projectRoot}/themes/*.css"]
+ }
+ },
"test": {
"cache": true,
"dependsOn": [{ "target": "test", "projects": "storybook" }],
diff --git a/package.json b/package.json
index 7a2f18a478f..78aaab1aa14 100644
--- a/package.json
+++ b/package.json
@@ -31,6 +31,8 @@
"predev": "nx run-many --projects ui-icons,tokens --target build",
"dev": "NODE_ENV=development BROWSERSYNC_OPEN=true gulp dev",
"preinstall": "command -v nvm >/dev/null 2>&1 && nvm use || exit 0",
+ "lint": "yarn linter tag:component",
+ "linter": "nx run-many --target build --projects",
"new": "nx run @spectrum-css/generator:new",
"precommit": "lint-staged",
"prepare": "husky install && run-p refresh:directory refresh:env && yarn refresh:config",
@@ -89,7 +91,11 @@
"rimraf": "^5.0.5",
"semver": "^7.5.1",
"stylelint": "^15.11.0",
+ "stylelint-config-clean-order": "^5.2.0",
"stylelint-config-standard": "^34.0.0",
+ "stylelint-header": "^1.0.0",
+ "stylelint-high-performance-animation": "^1.9.0",
+ "stylelint-selector-bem-pattern": "^3.0.1",
"stylelint-use-logical": "^2.1.0",
"tar": "^6.2.0",
"through2": "^3.0.1",
diff --git a/plugins/stylelint-no-missing-parenthesis/README.md b/plugins/stylelint-no-missing-parenthesis/README.md
index 02917ec4880..22d0782c5df 100644
--- a/plugins/stylelint-no-missing-parenthesis/README.md
+++ b/plugins/stylelint-no-missing-parenthesis/README.md
@@ -21,10 +21,8 @@ For e.g:
## Installation
-```
-npm install stylelint-no-missing-parenthesis
-
-yarn add stylelint-no-missing-parenthesis
+```sh
+yarn add -D stylelint-no-missing-parenthesis
```
## How to use
diff --git a/plugins/stylelint-no-missing-parenthesis/fixtures/missing-parenthesis.css b/plugins/stylelint-no-missing-parenthesis/fixtures/missing-parenthesis.css
new file mode 100644
index 00000000000..03ef0ad47a6
--- /dev/null
+++ b/plugins/stylelint-no-missing-parenthesis/fixtures/missing-parenthesis.css
@@ -0,0 +1,3 @@
+.spectrum {
+ width: calc(100px - 10px;
+}
diff --git a/plugins/stylelint-no-missing-parenthesis/fixtures/passing.css b/plugins/stylelint-no-missing-parenthesis/fixtures/passing.css
new file mode 100644
index 00000000000..47acf0ae2d6
--- /dev/null
+++ b/plugins/stylelint-no-missing-parenthesis/fixtures/passing.css
@@ -0,0 +1,3 @@
+.spectrum {
+ width: calc(100px - 10px);
+}
diff --git a/plugins/stylelint-no-missing-parenthesis/index.js b/plugins/stylelint-no-missing-parenthesis/index.js
index 4a98bad0d3a..f24d9fe0e83 100644
--- a/plugins/stylelint-no-missing-parenthesis/index.js
+++ b/plugins/stylelint-no-missing-parenthesis/index.js
@@ -1,24 +1,42 @@
+/*!
+ * Copyright 2023 Adobe. All rights reserved.
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License. You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
+ * OF ANY KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+
const stylelint = require("stylelint");
-const ruleName = "custom-rule/no-missing-parenthesis";
+const ruleName = "spectrum-tools/no-missing-parenthesis";
+const messages = stylelint.utils.ruleMessages(ruleName, {
+ expected: (value) => `Missing or extra parentheses in "${value}"`,
+});
+
+/** @type {import('stylelint').Plugin} */
+const plugin = stylelint.createPlugin(ruleName, (enabled) => {
+ return (root, result) => {
+ if (!enabled) return;
-const plugin = stylelint.createPlugin(ruleName, (enabled, options) => {
- return (root, result) => {
- root.walkDecls((decl) => {
- const value = decl.value;
- if (value.includes("calc")) {
- const openParenCount = (value.match(/\(/g) || []).length;
- const closeParenCount = (value.match(/\)/g) || []).length;
- if (openParenCount !== closeParenCount) {
- const message = `Missing or extra parentheses in "${value}"`;
- const node = decl.raws.value
- ? decl.raws.value.raw.indexOf("calc")
- : decl.toString().indexOf("calc");
- stylelint.utils.report({ message, node: decl, result, ruleName });
- }
- }
- });
- };
+ root.walkDecls((decl) => {
+ if ((decl.value.match(/\(/g) || []).length !== (decl.value.match(/\)/g) || []).length) {
+ stylelint.utils.report({
+ message: messages.expected,
+ messageArgs: [decl.value],
+ node: decl,
+ result,
+ ruleName,
+ });
+ }
+ });
+ };
});
+exports.ruleName = ruleName;
+exports.messages = messages;
+
module.exports = plugin;
diff --git a/plugins/stylelint-no-missing-parenthesis/package.json b/plugins/stylelint-no-missing-parenthesis/package.json
index 0a6f2e14999..8622e137d4b 100644
--- a/plugins/stylelint-no-missing-parenthesis/package.json
+++ b/plugins/stylelint-no-missing-parenthesis/package.json
@@ -1,19 +1,23 @@
{
- "private": true,
- "name": "stylelint-no-missing-parenthesis",
+ "name": "@spectrum-tools/stylelint-no-missing-parenthesis",
"version": "1.1.0",
"license": "Apache-2.0",
"author": "Adobe",
"main": "index.js",
- "scripts": {
- "prepublishOnly": "yarn test",
- "test": "ava"
- },
"peerDependencies": {
- "stylelint": ">=15"
+ "stylelint": "^14.0.0 || ^15.0.0"
},
"devDependencies": {
- "ava": "^3.9.0",
- "stylelint": "^15.10.2"
- }
+ "ava": "^5.3.1",
+ "c8": "^8.0.1",
+ "stylelint": "^15.11.0"
+ },
+ "keywords": [
+ "css",
+ "fix",
+ "lint",
+ "report",
+ "stylelint-plugin",
+ "syntax"
+ ]
}
diff --git a/plugins/stylelint-no-missing-parenthesis/project.json b/plugins/stylelint-no-missing-parenthesis/project.json
new file mode 100644
index 00000000000..4304f1df4ad
--- /dev/null
+++ b/plugins/stylelint-no-missing-parenthesis/project.json
@@ -0,0 +1,14 @@
+{
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
+ "tags": ["tooling", "stylelint"],
+ "name": "stylelint-no-missing-parenthesis",
+ "targets": {
+ "lint": {
+ "defaultConfiguration": "plugins"
+ },
+ "coverage": {},
+ "test": {
+ "defaultConfiguration": "plugins"
+ }
+ }
+}
diff --git a/plugins/stylelint-no-missing-parenthesis/test.js b/plugins/stylelint-no-missing-parenthesis/test.js
index 5e90f70ac9e..cad75223765 100644
--- a/plugins/stylelint-no-missing-parenthesis/test.js
+++ b/plugins/stylelint-no-missing-parenthesis/test.js
@@ -1,27 +1,42 @@
+const fs = require("fs");
+const { join } = require("path");
+
const test = require("ava");
const stylelint = require("stylelint");
+
const plugin = require("./index");
+const { ruleName, messages } = require("./index");
+
+async function compare(_, fixtureFilePath) {
+ const code = readFile(`./fixtures/${fixtureFilePath}`);
+ return stylelint.lint({
+ code,
+ config: {
+ plugins: [plugin],
+ rules: {
+ [ruleName]: true,
+ },
+ },
+ });
+}
+
+function readFile(filename) {
+ return fs.readFileSync(join(__dirname, filename), "utf8");
+}
test("should throw an error for missing or extra parentheses in calc values", async (t) => {
- const code = `
- .spectrum {
- width: calc(100px - 10px;
- }
- `;
-
- const { results } = await stylelint.lint({
- code,
- config: {
- plugins: [plugin],
- rules: {
- "custom-rule/no-missing-parenthesis": true,
- },
- },
- });
-
- const warnings = results[0].warnings;
-
- t.is(warnings.length, 1);
- t.is(warnings[0].rule, "CssSyntaxError");
- t.is(warnings[0].text, "Unclosed bracket (CssSyntaxError)");
+ const { results } = await compare(t, "missing-parenthesis.css");
+
+ const warnings = results[0].warnings;
+
+ t.is(warnings.length, 1);
+ t.is(warnings[0].rule, ruleName);
+ t.is(warnings[0].text, messages.expected("calc(100px - 10px"));
+});
+
+test(`should not throw an error for parenthesis usage`, async (t) => {
+ const { results } = await compare(t, "passing.css");
+
+ const warnings = results[0].warnings;
+ t.is(warnings.length, 0);
});
diff --git a/plugins/stylelint-no-missing-var/README.md b/plugins/stylelint-no-missing-var/README.md
index 7db0f7cd71c..de922d97716 100644
--- a/plugins/stylelint-no-missing-var/README.md
+++ b/plugins/stylelint-no-missing-var/README.md
@@ -8,10 +8,8 @@ This stylelint plugin will validate against all custom properties in css and lin
## Installation
-```
-npm install stylelint-no-missing-var
-
-yarn install stylelint-no-missing-var
+```sh
+yarn add -D stylelint-no-missing-var
```
## How to use
diff --git a/plugins/stylelint-no-missing-var/fixtures/missing-var.css b/plugins/stylelint-no-missing-var/fixtures/missing-var.css
new file mode 100644
index 00000000000..547f47e333d
--- /dev/null
+++ b/plugins/stylelint-no-missing-var/fixtures/missing-var.css
@@ -0,0 +1,4 @@
+.spectrum-Button {
+ background-color: (--spectrum-well-background-color);
+ border-color: var(--spectrum-well-border-color);
+}
diff --git a/plugins/stylelint-no-missing-var/fixtures/passing.css b/plugins/stylelint-no-missing-var/fixtures/passing.css
new file mode 100644
index 00000000000..b5b62bf2b25
--- /dev/null
+++ b/plugins/stylelint-no-missing-var/fixtures/passing.css
@@ -0,0 +1,4 @@
+.spectrum-Button {
+ background-color: var(--spectrum-well-background-color);
+ border-color: var(--spectrum-well-border-color);
+}
diff --git a/plugins/stylelint-no-missing-var/index.js b/plugins/stylelint-no-missing-var/index.js
index 0493a81fde3..632ad562f12 100644
--- a/plugins/stylelint-no-missing-var/index.js
+++ b/plugins/stylelint-no-missing-var/index.js
@@ -1,20 +1,45 @@
+/*!
+ * Copyright 2023 Adobe. All rights reserved.
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License. You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
+ * OF ANY KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+
const stylelint = require("stylelint");
-const ruleName = "custom-rule/no-missing-var";
+const ruleName = "spectrum-tools/no-missing-var";
+const messages = {
+ expected: (property) => `Missing 'var' before custom property "${property}"`,
+};
+
+const plugin = stylelint.createPlugin(ruleName, (enabled, _options, context) => {
+ return (root, result) => {
+ if (!enabled) return;
-const plugin = stylelint.createPlugin(ruleName, (enabled, options) => {
- return (root, result) => {
- root.walkDecls((decl) => {
- const value = decl.value.replace(/\s/g, ""); // Remove whitespace
- const regex = /(? {
+ const value = decl.value.replace(/\s/g, ""); // Remove whitespace
+ const regex = /(?=15"
+ "stylelint": "^14.0.0 || ^15.0.0"
},
"devDependencies": {
- "ava": "^3.9.0",
- "stylelint": "^15.10.2"
- }
+ "ava": "^5.3.1",
+ "c8": "^8.0.1",
+ "stylelint": "^15.11.0"
+ },
+ "keywords": [
+ "css",
+ "fix",
+ "lint",
+ "properties",
+ "report",
+ "stylelint-plugin"
+ ]
}
diff --git a/plugins/stylelint-no-missing-var/project.json b/plugins/stylelint-no-missing-var/project.json
new file mode 100644
index 00000000000..c0f20707ec0
--- /dev/null
+++ b/plugins/stylelint-no-missing-var/project.json
@@ -0,0 +1,14 @@
+{
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
+ "tags": ["tooling", "stylelint"],
+ "name": "stylelint-no-missing-var",
+ "targets": {
+ "lint": {
+ "defaultConfiguration": "plugins"
+ },
+ "coverage": {},
+ "test": {
+ "defaultConfiguration": "plugins"
+ }
+ }
+}
diff --git a/plugins/stylelint-no-missing-var/test.js b/plugins/stylelint-no-missing-var/test.js
index d05546b69b2..e82f6fbd66f 100644
--- a/plugins/stylelint-no-missing-var/test.js
+++ b/plugins/stylelint-no-missing-var/test.js
@@ -1,56 +1,42 @@
+const fs = require("fs");
+const { join } = require("path");
+
const test = require("ava");
const stylelint = require("stylelint");
-const plugin = require("./index");
-const ruleName = "custom-rule/no-missing-var";
+const plugin = require("./index");
+const { ruleName, messages } = require("./index");
+
+async function compare(_, fixtureFilePath) {
+ const code = readFile(`./fixtures/${fixtureFilePath}`);
+ return stylelint.lint({
+ code,
+ config: {
+ plugins: [plugin],
+ rules: {
+ [ruleName]: true,
+ },
+ },
+ });
+}
+
+function readFile(filename) {
+ return fs.readFileSync(join(__dirname, filename), "utf8");
+}
test(`should throw an error for missing "var" before custom properties`, async (t) => {
- const code = `
- .spectrum-Button {
- background-color: (--spectrum-well-background-color);
- border-color: var(--spectrum-well-border-color);
- }
- `;
-
- const { results } = await stylelint.lint({
- code,
- config: {
- plugins: [plugin],
- rules: {
- [ruleName]: true,
- },
- },
- });
-
- const warnings = results[0].warnings;
-
- t.is(warnings.length, 1);
- t.is(warnings[0].rule, ruleName);
- t.is(
- warnings[0].text,
- `Missing 'var' before custom property "--spectrum-well-background-color"`
- );
+ const { results } = await compare(t, "missing-var.css");
+
+ const warnings = results[0].warnings;
+
+ t.is(warnings.length, 1);
+ t.is(warnings[0].rule, ruleName);
+ t.is(warnings[0].text, messages.expected("--spectrum-well-background-color"));
});
test(`should not throw an error for "var" usage`, async (t) => {
- const code = `
- .spectrum-Button {
- background-color: var(--spectrum-well-background-color);
- border-color: var(--spectrum-well-border-color);
- }
- `;
-
- const { results } = await stylelint.lint({
- code,
- config: {
- plugins: [plugin],
- rules: {
- [ruleName]: true,
- },
- },
- });
-
- const warnings = results[0].warnings;
-
- t.is(warnings.length, 0);
+ const { results } = await compare(t, "passing.css");
+
+ const warnings = results[0].warnings;
+ t.is(warnings.length, 0);
});
diff --git a/plugins/stylelint-no-unknown-custom-properties/CHANGELOG.md b/plugins/stylelint-no-unknown-custom-properties/CHANGELOG.md
new file mode 100644
index 00000000000..a7296b61700
--- /dev/null
+++ b/plugins/stylelint-no-unknown-custom-properties/CHANGELOG.md
@@ -0,0 +1,46 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+
+
+## 1.2.1
+
+🗓 2021-09-29 • 📝 [Commits](https://github.com/adobe/spectrum-css/compare/postcss-dropunusedvars@1.2.1-alpha.0...postcss-dropunusedvars@1.2.1)
+
+**Note:** Version bump only for package postcss-dropunusedvars
+
+
+
+## 1.2.1-alpha.0
+
+🗓 2021-04-27 • 📝 [Commits](https://github.com/adobe/spectrum-css/compare/postcss-dropunusedvars@1.2.0...postcss-dropunusedvars@1.2.1-alpha.0)
+
+**Note:** Version bump only for package postcss-dropunusedvars
+
+
+
+# 1.2.0
+
+🗓 2021-03-10 • 📝 [Commits](https://github.com/adobe/spectrum-css/compare/postcss-dropunusedvars@1.1.0...postcss-dropunusedvars@1.2.0)
+
+### ✨ Features
+
+- drop unused vars, even if other vars once referred to them ([772851e](https://github.com/adobe/spectrum-css/commit/772851e))
+
+### 🐛 Bug fixes
+
+- correct PostCSS plugin names ([81ad868](https://github.com/adobe/spectrum-css/commit/81ad868))
+- correctly catch usage of fallback vars ([3bccaf5](https://github.com/adobe/spectrum-css/commit/3bccaf5))
+- don't remove vars that are ref'd by dead vars but used in props ([4030d40](https://github.com/adobe/spectrum-css/commit/4030d40))
+
+
+
+# 1.1.0
+
+🗓 2020-12-04
+
+### ✨ Features
+
+- add postcss-dropunusedvars ([85426eb](https://github.com/adobe/spectrum-css/commit/85426eb))
diff --git a/plugins/stylelint-no-unknown-custom-properties/README.md b/plugins/stylelint-no-unknown-custom-properties/README.md
new file mode 100644
index 00000000000..9b37bec8ff6
--- /dev/null
+++ b/plugins/stylelint-no-unknown-custom-properties/README.md
@@ -0,0 +1,31 @@
+# stylelint-no-unknown-custom-properties
+
+> Report on any unused variable definitions
+
+## Installation
+
+```sh
+yarn add -D @spectrum-tools/stylelint-no-unknown-custom-properties
+```
+
+## Usage
+
+Assuming you have some variables defined and rule(s) that use them:
+
+```css
+:root {
+ --prefix-component-background-color: blue;
+ --prefix-component-width: 10px;
+ --prefix-component-height: 10px;
+ --prefix-component-size: 10px;
+}
+
+.component {
+ background-color: var(--prefix-component-background-color);
+
+ width: var(--prefix-component-width);
+ height: var(--prefix-component-height);
+}
+```
+
+The variables that are not used in any rule will be reported to the console.
diff --git a/plugins/stylelint-no-unknown-custom-properties/fixtures/passing.css b/plugins/stylelint-no-unknown-custom-properties/fixtures/passing.css
new file mode 100644
index 00000000000..03c304f030c
--- /dev/null
+++ b/plugins/stylelint-no-unknown-custom-properties/fixtures/passing.css
@@ -0,0 +1,12 @@
+:root {
+ --prefix-component-background-color: blue;
+ --prefix-component-width: 10px;
+ --prefix-component-height: 10px;
+}
+
+.component {
+ background-color: var(--prefix-component-background-color);
+
+ width: var(--prefix-component-width);
+ height: var(--prefix-component-height);
+}
diff --git a/plugins/stylelint-no-unknown-custom-properties/fixtures/unknown-prop.css b/plugins/stylelint-no-unknown-custom-properties/fixtures/unknown-prop.css
new file mode 100644
index 00000000000..7904a07c85d
--- /dev/null
+++ b/plugins/stylelint-no-unknown-custom-properties/fixtures/unknown-prop.css
@@ -0,0 +1,8 @@
+.component {
+ --prefix-component-background-color: blue;
+
+ background-color: var(--prefix-component-background-color);
+
+ width: var(--prefix-component-width);
+ height: var(--prefix-component-height);
+}
diff --git a/plugins/stylelint-no-unknown-custom-properties/index.js b/plugins/stylelint-no-unknown-custom-properties/index.js
new file mode 100644
index 00000000000..ac520e14c40
--- /dev/null
+++ b/plugins/stylelint-no-unknown-custom-properties/index.js
@@ -0,0 +1,148 @@
+/*!
+ * Copyright 2023 Adobe. All rights reserved.
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License. You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
+ * OF ANY KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+
+const path = require("path");
+const fs = require("fs");
+
+const stylelint = require("stylelint");
+
+const ruleName = "spectrum-tools/no-unknown-custom-properties";
+const messages = stylelint.utils.ruleMessages(ruleName, {
+ expected: (prop) => `Custom property '${prop}' not defined`,
+});
+
+const postcss = require("postcss");
+const valueParser = require("postcss-value-parser");
+
+/** @type {import('stylelint').Plugin} */
+const plugin = stylelint.createPlugin(ruleName, (enabled, { ignore = [], checkDependencies = false } = {}) => {
+ return (root, result) => {
+ const validOptions = stylelint.utils.validateOptions(
+ result,
+ ruleName,
+ {
+ actual: enabled,
+ possible: [Boolean, null],
+ },
+ {
+ actual: ignore,
+ possible: [String, RegExp],
+ },
+ {
+ actual: checkDependencies,
+ possible: [Boolean],
+ },
+ );
+
+ if (!validOptions) return;
+
+ /** @type {Set} */
+ const localDefinitions = new Set();
+ const sharedDefinitions = new Set();
+
+ root.walkDecls(/^--/, ({ prop }) => {
+ localDefinitions.add(prop);
+ });
+
+ const sourceFile = root.source.input.file;
+ const parts = sourceFile ? sourceFile.split(path.sep) : [];
+ const rootIdx = parts.indexOf("components");
+ const componentRoot = parts.slice(0, rootIdx + 2).join(path.sep);
+
+ function fetchResolutions(depName) {
+ const req = require.resolve(depName, { paths: [componentRoot] });
+ if (!fs.existsSync(req)) return;
+
+ const content = fs.readFileSync(req, "utf8");
+ if (!content) return;
+
+ postcss.parse(content).walkDecls(/^--/, ({ prop }) => {
+ sharedDefinitions.add(prop);
+ });
+ }
+
+ if (checkDependencies && rootIdx > -1) {
+ const pkg = require(path.join(componentRoot, "package.json"));
+
+ if (!pkg) return;
+
+ const allDependencies = new Set([
+ ...(Object.keys(pkg.peerDependencies ?? {}) ?? []),
+ ...(Object.keys(pkg.devDependencies ?? {}) ?? []),
+ ...(Object.keys(pkg.dependencies ?? {}) ?? []),
+ ]);
+
+ if (allDependencies.size === 0) return;
+
+ allDependencies.forEach((dep) => {
+ if (!dep.startsWith("@spectrum-css")) return;
+
+ if (dep.endsWith("vars")) {
+ ["spectrum-global.css", "components/index.css"].forEach((d) => {
+ try {
+ fetchResolutions(`${dep}/dist/${d}`);
+ } catch (e) {
+ /* allow quiet failure for peer dependencies */
+ }
+ });
+ } else {
+ try {
+ fetchResolutions(dep);
+ } catch (e) {
+ /* allow quiet failure for peer dependencies */
+ }
+ }
+ });
+ }
+
+ if (fs.existsSync(path.join(componentRoot, "themes/spectrum.css"))) {
+ const content = fs.readFileSync(path.join(componentRoot, "themes/spectrum.css"), "utf8");
+ const peerRoot = postcss.parse(content);
+ peerRoot.walkDecls(/^--/, ({ prop }) => {
+ sharedDefinitions.add(prop);
+ });
+ }
+
+ /* Collect variable use information */
+ root.walkDecls((decl) => {
+ // Parse value and get a list of variables used
+ const parsed = valueParser(decl.value);
+ parsed.walk((node) => {
+ if (node.type !== "function" || node.value !== "var") {
+ return;
+ }
+ const [firstNode, secondNode] = node.nodes;
+
+ if (!firstNode) return;
+ if (ignore.some((regex) => regex.test(firstNode.value))) return;
+ if (localDefinitions.has(firstNode.value)) return;
+ if (sharedDefinitions.has(firstNode.value)) return;
+
+ // Second node (div) indicates fallback exists in all cases
+ if (secondNode && secondNode.type === "div") return;
+
+ return stylelint.utils.report({
+ message: messages.expected,
+ messageArgs: [firstNode.value],
+ node: decl,
+ result,
+ ruleName,
+ });
+ });
+ });
+ };
+});
+
+module.exports.ruleName = ruleName;
+module.exports.messages = messages;
+
+module.exports = plugin;
diff --git a/plugins/stylelint-no-unknown-custom-properties/package.json b/plugins/stylelint-no-unknown-custom-properties/package.json
new file mode 100644
index 00000000000..5cd78f6a312
--- /dev/null
+++ b/plugins/stylelint-no-unknown-custom-properties/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "@spectrum-tools/stylelint-no-unknown-custom-properties",
+ "version": "1.2.1",
+ "description": "Report on any unknown custom property definitions",
+ "license": "Apache-2.0",
+ "author": "Adobe",
+ "main": "index.js",
+ "dependencies": {
+ "postcss": "^8.4.32",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "peerDependencies": {
+ "stylelint": "^14.0.0 || ^15.0.0"
+ },
+ "devDependencies": {
+ "ava": "^5.3.1",
+ "c8": "^8.0.1",
+ "stylelint": "^15.11.0"
+ },
+ "keywords": [
+ "css",
+ "lint",
+ "properties",
+ "report",
+ "stylelint-plugin"
+ ]
+}
diff --git a/plugins/stylelint-no-unknown-custom-properties/project.json b/plugins/stylelint-no-unknown-custom-properties/project.json
new file mode 100644
index 00000000000..94458c0ea8d
--- /dev/null
+++ b/plugins/stylelint-no-unknown-custom-properties/project.json
@@ -0,0 +1,14 @@
+{
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
+ "tags": ["tooling", "stylelint"],
+ "name": "stylelint-no-unknown-custom-properties",
+ "targets": {
+ "lint": {
+ "defaultConfiguration": "plugins"
+ },
+ "coverage": {},
+ "test": {
+ "defaultConfiguration": "plugins"
+ }
+ }
+}
diff --git a/plugins/stylelint-no-unknown-custom-properties/test.js b/plugins/stylelint-no-unknown-custom-properties/test.js
new file mode 100644
index 00000000000..bc4d386a20c
--- /dev/null
+++ b/plugins/stylelint-no-unknown-custom-properties/test.js
@@ -0,0 +1,42 @@
+const fs = require("fs");
+const { join } = require("path");
+
+const test = require("ava");
+const stylelint = require("stylelint");
+
+const plugin = require("./index");
+const { ruleName, messages } = require("./index");
+
+async function compare(t, fixtureFilePath) {
+ const code = readFile(`./fixtures/${fixtureFilePath}`);
+ return stylelint.lint({
+ code,
+ config: {
+ plugins: [plugin],
+ rules: {
+ [ruleName]: true,
+ },
+ },
+ });
+}
+
+function readFile(filename) {
+ return fs.readFileSync(join(__dirname, filename), "utf8");
+}
+
+test("should throw an error for unknown custom properties", async (t) => {
+ const { results } = await compare(t, "unknown-prop.css");
+
+ const warnings = results[0].warnings;
+
+ t.is(warnings.length, 1);
+ t.is(warnings[0].rule, ruleName);
+ t.is(warnings[0].text, messages.expected("--prefix-component-size"));
+});
+
+test(`should not throw an error for unknown custom properties`, async (t) => {
+ const { results } = await compare(t, "passing.css");
+
+ const warnings = results[0].warnings;
+ t.is(warnings.length, 0);
+});
diff --git a/plugins/stylelint-no-unused-custom-properties/CHANGELOG.md b/plugins/stylelint-no-unused-custom-properties/CHANGELOG.md
new file mode 100644
index 00000000000..a7296b61700
--- /dev/null
+++ b/plugins/stylelint-no-unused-custom-properties/CHANGELOG.md
@@ -0,0 +1,46 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+
+
+## 1.2.1
+
+🗓 2021-09-29 • 📝 [Commits](https://github.com/adobe/spectrum-css/compare/postcss-dropunusedvars@1.2.1-alpha.0...postcss-dropunusedvars@1.2.1)
+
+**Note:** Version bump only for package postcss-dropunusedvars
+
+
+
+## 1.2.1-alpha.0
+
+🗓 2021-04-27 • 📝 [Commits](https://github.com/adobe/spectrum-css/compare/postcss-dropunusedvars@1.2.0...postcss-dropunusedvars@1.2.1-alpha.0)
+
+**Note:** Version bump only for package postcss-dropunusedvars
+
+
+
+# 1.2.0
+
+🗓 2021-03-10 • 📝 [Commits](https://github.com/adobe/spectrum-css/compare/postcss-dropunusedvars@1.1.0...postcss-dropunusedvars@1.2.0)
+
+### ✨ Features
+
+- drop unused vars, even if other vars once referred to them ([772851e](https://github.com/adobe/spectrum-css/commit/772851e))
+
+### 🐛 Bug fixes
+
+- correct PostCSS plugin names ([81ad868](https://github.com/adobe/spectrum-css/commit/81ad868))
+- correctly catch usage of fallback vars ([3bccaf5](https://github.com/adobe/spectrum-css/commit/3bccaf5))
+- don't remove vars that are ref'd by dead vars but used in props ([4030d40](https://github.com/adobe/spectrum-css/commit/4030d40))
+
+
+
+# 1.1.0
+
+🗓 2020-12-04
+
+### ✨ Features
+
+- add postcss-dropunusedvars ([85426eb](https://github.com/adobe/spectrum-css/commit/85426eb))
diff --git a/plugins/stylelint-no-unused-custom-properties/README.md b/plugins/stylelint-no-unused-custom-properties/README.md
new file mode 100644
index 00000000000..53641602eed
--- /dev/null
+++ b/plugins/stylelint-no-unused-custom-properties/README.md
@@ -0,0 +1,52 @@
+# postcss-dropunusedvars
+
+> Remove unused variable definitions
+
+## Installation
+
+```sh
+yarn add -D postcss-dropunusedvars
+```
+
+## Usage
+
+Via the command line:
+
+```sh
+postcss -u postcss-dropunusedvars -o dist/index.css src/index.css
+```
+
+Assuming you have some variables defined and rule(s) that use them:
+
+```css
+:root {
+ --prefix-component-background-color: blue;
+ --prefix-component-width: 10px;
+ --prefix-component-height: 10px;
+ --prefix-component-size: 10px;
+}
+
+.component {
+ background-color: var(--prefix-component-background-color);
+
+ width: var(--prefix-component-width);
+ height: var(--prefix-component-height);
+}
+```
+
+The variables that are not used in any rule will be removed from the output:
+
+```css
+:root {
+ --prefix-component-background-color: blue;
+ --prefix-component-width: 10px;
+ --prefix-component-height: 10px;
+}
+
+.component {
+ background-color: var(--prefix-component-background-color);
+
+ width: var(--prefix-component-width);
+ height: var(--prefix-component-height);
+}
+```
diff --git a/plugins/stylelint-no-unused-custom-properties/expected/unused.css b/plugins/stylelint-no-unused-custom-properties/expected/unused.css
new file mode 100644
index 00000000000..617ffa2a973
--- /dev/null
+++ b/plugins/stylelint-no-unused-custom-properties/expected/unused.css
@@ -0,0 +1,15 @@
+:root {
+ --prefix-component-background-color: blue;
+ --prefix-component-border-color: blue;
+ --prefix-component-width: 10px;
+ --prefix-component-height: 10px;
+}
+
+.component {
+ background-color: var(--prefix-component-background-color);
+
+ border-color: var(--other-color, var(--prefix-component-border-color));
+
+ width: var(--prefix-component-width);
+ height: var(--prefix-component-height);
+}
diff --git a/plugins/stylelint-no-unused-custom-properties/expected/varRefs.css b/plugins/stylelint-no-unused-custom-properties/expected/varRefs.css
new file mode 100644
index 00000000000..51ed9b62054
--- /dev/null
+++ b/plugins/stylelint-no-unused-custom-properties/expected/varRefs.css
@@ -0,0 +1,19 @@
+:root {
+ --gray: gray;
+ --blue: blue;
+ --orange: orange;
+ --default: var(--gray);
+ --focus: var(--blue);
+}
+
+.component {
+ background-color: var(--default);
+}
+
+.component:focus {
+ background-color: var(--focus);
+}
+
+.component:active {
+ background-color: var(--orange);
+}
diff --git a/plugins/stylelint-no-unused-custom-properties/fixtures/unused.css b/plugins/stylelint-no-unused-custom-properties/fixtures/unused.css
new file mode 100644
index 00000000000..8a7078cd440
--- /dev/null
+++ b/plugins/stylelint-no-unused-custom-properties/fixtures/unused.css
@@ -0,0 +1,16 @@
+:root {
+ --prefix-component-background-color: blue;
+ --prefix-component-border-color: blue;
+ --prefix-component-width: 10px;
+ --prefix-component-height: 10px;
+ --prefix-component-size: 10px;
+}
+
+.component {
+ background-color: var(--prefix-component-background-color);
+
+ border-color: var(--other-color, var(--prefix-component-border-color));
+
+ width: var(--prefix-component-width);
+ height: var(--prefix-component-height);
+}
diff --git a/plugins/stylelint-no-unused-custom-properties/fixtures/varRefs.css b/plugins/stylelint-no-unused-custom-properties/fixtures/varRefs.css
new file mode 100644
index 00000000000..9f234a5a831
--- /dev/null
+++ b/plugins/stylelint-no-unused-custom-properties/fixtures/varRefs.css
@@ -0,0 +1,22 @@
+:root {
+ --gray: gray;
+ --blue: blue;
+ --green: green;
+ --orange: orange;
+ --default: var(--gray);
+ --focus: var(--blue);
+ --selected: var(--green);
+ --active: var(--orange);
+}
+
+.component {
+ background-color: var(--default);
+}
+
+.component:focus {
+ background-color: var(--focus);
+}
+
+.component:active {
+ background-color: var(--orange);
+}
diff --git a/plugins/stylelint-no-unused-custom-properties/index.js b/plugins/stylelint-no-unused-custom-properties/index.js
new file mode 100644
index 00000000000..8ccab0f0ce0
--- /dev/null
+++ b/plugins/stylelint-no-unused-custom-properties/index.js
@@ -0,0 +1,165 @@
+/*!
+ * Copyright 2023 Adobe. All rights reserved.
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License. You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
+ * OF ANY KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+
+const stylelint = require("stylelint");
+
+const ruleName = "spectrum-tools/no-unused-custom-properties";
+const messages = stylelint.utils.ruleMessages(ruleName, {
+ expected: (prop) => `Unused custom property ${prop} defined`,
+});
+
+const valueParser = require("postcss-value-parser");
+
+/** @type {import('stylelint').Rule>>} */
+const plugin = stylelint.createPlugin(ruleName, (enabled, { allowList = [], ignoreList = [] } = {}, context) => {
+ return (root, result) => {
+ if (!enabled) return;
+
+ const validOptions = stylelint.utils.validateOptions(
+ result,
+ ruleName,
+ {
+ actual: ignoreList,
+ possible: [String, RegExp],
+ },
+ {
+ actual: allowList,
+ possible: [String, RegExp],
+ },
+ );
+
+ if (!validOptions) return;
+
+ const usedAnywhere = new Set();
+ const usedInProps = new Set();
+ const relationships = new Map();
+
+ function trackRelationships(decl) {
+ const usedInDecl = new Set();
+
+ // Parse value and get a list of variables used
+ const parsed = valueParser(decl.value);
+ parsed.walk((node) => {
+ if (node.type !== "function" || node.value !== "var" || !node.nodes.length) {
+ return;
+ }
+
+ const varName = node.nodes[0].value;
+
+ usedInDecl.add(varName);
+ usedAnywhere.add(varName);
+
+ if (decl.prop.startsWith("--")) {
+ usedInProps.add(varName);
+ }
+ });
+
+ // Store every variable referenced by this var
+ if (decl.prop.startsWith("--") && usedInDecl.size > 0) {
+ for (let varName of usedInDecl) {
+ const previous = relationships.has(varName) ? relationships.get(varName) : [];
+ relationships.set(varName, [...new Set([...previous, decl.prop])]);
+ }
+ }
+ }
+
+ /* Collect a set of all allowed passthroughs */
+ const allowedPassthroughs = new Set();
+ root.walkComments((comment) => {
+ if (!/^\s*@passthroughs?\s*(\s+start)?/g.test(comment.text)) return;
+
+ // Look for a start or end indicator
+ const start = /^\s*@passthroughs?\s+start/.test(comment.text);
+ const end = /^\s*@passthroughs?\s+end/.test(comment.text);
+
+ let nextLine = comment.next();
+
+ // If there is neither a start, nor end identifier, capture the next line
+ if (!start && !end && nextLine && nextLine.type === "declaration" && nextLine.prop.startsWith("--")) {
+ allowedPassthroughs.add(nextLine.prop);
+ trackRelationships(nextLine);
+ }
+
+ if (!start || end) return;
+
+ // If this comment is a start indicator, capture the declarations after it until the end indicator
+ while (nextLine) {
+ if (nextLine.type === "decl" && nextLine.prop.startsWith("--")) {
+ allowedPassthroughs.add(nextLine.prop);
+ trackRelationships(nextLine);
+ } else if (nextLine.type === "comment" && /^\s*@passthroughs?\s*(\s+end)?$/.test(nextLine.text)) {
+ break;
+ }
+
+ nextLine = nextLine.next();
+ }
+ });
+
+ /* Collect variable use information */
+ root.walkDecls((decl) => trackRelationships(decl));
+
+ root.walkDecls(/^--/, (decl) => {
+ // Check if this variable is unused
+ if (
+ !usedAnywhere.has(decl.prop) &&
+ !(ignoreList.length ? ignoreList.some((regex) => regex.test(decl.prop)) : true) &&
+ (allowList.length ? allowList.some((regex) => regex.test(decl.prop)) : true) &&
+ !allowedPassthroughs.has(decl.prop)
+ ) {
+ if (context.fix) {
+ decl.remove();
+ } else {
+ stylelint.utils.report({
+ message: messages.expected,
+ messageArgs: [decl.prop],
+ node: decl,
+ result,
+ ruleName,
+ });
+ }
+
+ return;
+ }
+
+ if (usedInProps.has(decl.prop)) return;
+
+ // Drop a variable if everything that references it has been removed
+ if (!relationships.has(decl.prop)) return;
+ const relatives = relationships.get(decl.prop);
+
+ // Check if everything that references this variable has been removed
+ const keep = relatives.reduce((keep, relatedVar) => {
+ if (usedAnywhere.has(relatedVar) || allowedPassthroughs.has(relatedVar)) return true;
+ return keep;
+ }, false);
+
+ if (keep) return;
+
+ if (context.fix) {
+ decl.remove();
+ } else {
+ stylelint.utils.report({
+ message: messages.expected,
+ messageArgs: [decl.prop],
+ node: decl,
+ result,
+ ruleName,
+ });
+ }
+ });
+ };
+});
+
+module.exports.ruleName = ruleName;
+module.exports.messages = messages;
+
+module.exports = plugin;
diff --git a/plugins/stylelint-no-unused-custom-properties/package.json b/plugins/stylelint-no-unused-custom-properties/package.json
new file mode 100644
index 00000000000..14af6ffda56
--- /dev/null
+++ b/plugins/stylelint-no-unused-custom-properties/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "@spectrum-tools/stylelint-no-unused-custom-properties",
+ "version": "1.2.1",
+ "description": "Report on any unused custom property definitions",
+ "license": "Apache-2.0",
+ "author": "Adobe",
+ "main": "index.js",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "peerDependencies": {
+ "stylelint": "^14.0.0 || ^15.0.0"
+ },
+ "devDependencies": {
+ "ava": "^5.3.1",
+ "c8": "^8.0.1",
+ "stylelint": "^15.11.0"
+ },
+ "keywords": [
+ "css",
+ "lint",
+ "properties",
+ "report",
+ "stylelint-plugin"
+ ]
+}
diff --git a/plugins/stylelint-no-unused-custom-properties/project.json b/plugins/stylelint-no-unused-custom-properties/project.json
new file mode 100644
index 00000000000..764ecf083ab
--- /dev/null
+++ b/plugins/stylelint-no-unused-custom-properties/project.json
@@ -0,0 +1,14 @@
+{
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
+ "tags": ["tooling", "stylelint"],
+ "name": "stylelint-no-unused-custom-properties",
+ "targets": {
+ "lint": {
+ "defaultConfiguration": "plugins"
+ },
+ "coverage": {},
+ "test": {
+ "defaultConfiguration": "plugins"
+ }
+ }
+}
diff --git a/plugins/stylelint-no-unused-custom-properties/test.js b/plugins/stylelint-no-unused-custom-properties/test.js
new file mode 100644
index 00000000000..2b6e0603b8a
--- /dev/null
+++ b/plugins/stylelint-no-unused-custom-properties/test.js
@@ -0,0 +1,32 @@
+const fs = require("fs");
+const { join } = require("path");
+
+const test = require("ava");
+const postcss = require("postcss");
+
+const plugin = require("./index.js");
+
+function compare(t, fixtureFilePath, expectedFilePath, options = {}) {
+ return postcss([plugin(options)])
+ .process(readFile(`./fixtures/${fixtureFilePath}`), {
+ from: fixtureFilePath,
+ })
+ .then((result) => {
+ const expected = result.css;
+ const actual = readFile(`./expected/${expectedFilePath}`);
+ t.is(expected, actual);
+ t.is(result.warnings().length, 0);
+ });
+}
+
+function readFile(filename) {
+ return fs.readFileSync(join(__dirname, filename), "utf8");
+}
+
+test("drop unused vars", (t) => {
+ return compare(t, "unused.css", "unused.css");
+});
+
+test("drop unused vars, even if referenced by other vars", (t) => {
+ return compare(t, "varRefs.css", "varRefs.css");
+});
diff --git a/plugins/stylelint-suit-naming-pattern/CHANGELOG.md b/plugins/stylelint-suit-naming-pattern/CHANGELOG.md
deleted file mode 100644
index 474f2bf551e..00000000000
--- a/plugins/stylelint-suit-naming-pattern/CHANGELOG.md
+++ /dev/null
@@ -1,58 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-
-#1.1.0
-🗓
-2023-06-01
-
-### ✨ Features
-
-\*add stylelint ([#1787](https://github.com/adobe/spectrum-css/issues/1787))([a450904](https://github.com/adobe/spectrum-css/commit/a450904))
-
-# 1.0.5
-
-Added postcss-selector-parser to parse the css
-
-# 1.0.4
-
-Updated regex to include the below pattern
-
-```css
-.spectrum-ToolTip--size100 {
-}
-.spectrum-Switch-input[disabled] {
-}
-.spectrum:lang(ar) {
-}
-.spectrum-UIIcon-ChevronDown75 {
-}
-```
-
-# 1.0.3
-
-Updated regex to include the below pattern
-
-```css
-.spectrum--express {
-}
-```
-
-# 1.0.2
-
-Updated regex to include the below patterns
-
-```css
-.spectrum-ComponentName.is-selected {
-}
-.spectrum-ComponentName.is-selected.spectrum-ComponentName--emphasized {
-}
-.spectrum-ComponentName.spectrum-ComponentName--descendentName.is-selected {
-}
-.spectrum-ComponentName.is-selected.spectrum-ComponentName--emphasized {
-}
-.spectrum-ComponentName.spectrum-ComponentName--descendentName.is-selected {
-}
-```
diff --git a/plugins/stylelint-suit-naming-pattern/README.md b/plugins/stylelint-suit-naming-pattern/README.md
deleted file mode 100644
index a02685eafd7..00000000000
--- a/plugins/stylelint-suit-naming-pattern/README.md
+++ /dev/null
@@ -1,77 +0,0 @@
-# stylelint-suit-naming-pattern
-
-> Validates classnames on SUIT naming pattern
-
-(SUIT Docs)[https://github.com/suitcss/suit/blob/master/doc/naming-conventions.md]
-
-## Description
-
-Let's say you have a classname `.spectrum-Well-Component{}`. This will show a lint error because it expects the classname to follow SUIT naming convention like`.spectrum-Well-component{}`
-
-Valid classnames:
-
-```css
-.spectrum {
-}
-.spectrum-Component {
-}
-.spectrum-Component-newName {
-}
-.spectrum-Component--state {
-}
-.is-focused {
-}
-.spectrum-ComponentName.spectrum-ComponentX {
-}
-.spectrum-ComponentName-descendant1.spectrum-ComponentX-descendant2 {
-}
-.u-camelCase {
-}
-```
-
-Invalid classnames:
-
-```css
-.spectrum-Component-NewName {
-}
-.spectrum-Component--SizeXS {
-}
-```
-
-## Installation
-
-```
-npm install stylelint-suit-naming-pattern
-
-yarn add stylelint-suit-naming-pattern
-
-```
-
-## How to use
-
-In your stylelintrc.json add stylelint-suit-naming-pattern to your plugins array and to your rules array like this:
-
-```js
-plugins: ['stylelint-suit-naming-pattern'],
-rules: {
- "custom-rule/suit-naming-pattern": true,
-}
-```
-
-## Usage
-
-Wrong: Throws an error here
-
-```css
-.spectrum-Well-Component {
- background-color: var(--prefix-component-background-color);
-}
-```
-
-Correct:
-
-```css
-.spectrum-Well-component {
- background-color: var(--prefix-component-background-color);
-}
-```
diff --git a/plugins/stylelint-suit-naming-pattern/index.js b/plugins/stylelint-suit-naming-pattern/index.js
deleted file mode 100644
index 65f8dc695d5..00000000000
--- a/plugins/stylelint-suit-naming-pattern/index.js
+++ /dev/null
@@ -1,50 +0,0 @@
-const stylelint = require("stylelint");
-const parser = require("postcss-selector-parser");
-const ruleName = "custom-rule/suit-naming-pattern";
-
-const messages = stylelint.utils.ruleMessages(ruleName, {
- wrongCapitalization: (className) =>
- `Component Class name "${className}" should follow the SUIT-style naming conventions with the ".spectrum" prefix.`,
- wrongUtilityClassName: (className) =>
- `Utility Class name "${className}" should follow the SUIT-style naming conventions with the ".u-camelCase" prefix.`,
-});
-const utilityClassPattern = /^u-[a-z]+[a-zA-Z0-9]+/;
-
-const suitClassPattern =
- /^spectrum(--(?:express|light|lightest|dark|darkest|medium|large))?((-[A-Z][a-zA-Z0-9]+)([-]{1,2}((\S*\d+\S*)[a-zA-Z0-9]+|[a-z][a-zA-Z0-9-]+]*(?!\d)))?(\s|,\s)?)?$/;
-
-module.exports = stylelint.createPlugin(ruleName, () => {
- return (root, result) => {
- root.walkRules(async (rule) => {
- await parser((selectors) => {
- selectors.walkClasses((selectorNode) => {
- const selector = selectorNode.value;
- if (
- selector.startsWith("spectrum") &&
- !suitClassPattern.test(selector)
- ) {
- stylelint.utils.report({
- message: messages.wrongCapitalization(selector),
- node: rule,
- result,
- ruleName,
- });
- } else if (
- selector.startsWith("u-") &&
- !utilityClassPattern.test(selector)
- ) {
- stylelint.utils.report({
- message: messages.wrongUtilityClassName(selector),
- node: rule,
- result,
- ruleName,
- });
- }
- });
- }).process(rule.selector);
- });
- };
-});
-
-module.exports.ruleName = ruleName;
-module.exports.messages = messages;
diff --git a/plugins/stylelint-suit-naming-pattern/package.json b/plugins/stylelint-suit-naming-pattern/package.json
deleted file mode 100644
index ed79ae7b3d2..00000000000
--- a/plugins/stylelint-suit-naming-pattern/package.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "private": true,
- "name": "stylelint-suit-naming-pattern",
- "version": "1.1.0",
- "license": "Apache-2.0",
- "main": "index.js",
- "scripts": {
- "prepublishOnly": "yarn test",
- "test": "ava"
- },
- "peerDependencies": {
- "stylelint": ">=15"
- },
- "devDependencies": {
- "ava": "^3.9.0",
- "postcss-selector-parser": "^6.0.2",
- "stylelint": "^15.10.2"
- }
-}
diff --git a/plugins/stylelint-suit-naming-pattern/test.js b/plugins/stylelint-suit-naming-pattern/test.js
deleted file mode 100644
index 837efb1626e..00000000000
--- a/plugins/stylelint-suit-naming-pattern/test.js
+++ /dev/null
@@ -1,63 +0,0 @@
-const test = require("ava");
-const stylelint = require("stylelint");
-const rule = require("./index");
-
-const { ruleName, messages } = rule;
-
-async function runRule(code) {
- const result = await stylelint.lint({
- code,
- config: {
- plugins: [rule],
- rules: {
- [ruleName]: true,
- },
- },
- });
-
- return result;
-}
-
-test(`should pass valid class names`, async (t) => {
- const validCode = `
- .spectrum {}
- .spectrum-Component {}
- .spectrum-Component-newName {}
- .spectrum-Component--sizeXS {}
- .spectrum-ComponentName--descendant1 {}
- .spectrum-ComponentX-descendant2 {}
- .spectrum--lightest {}
- .spectrum-ToolTip--size100 {}
- .spectrum-Switch-input {}
- .spectrum-UIIcon-ChevronDown75 {}
- .spectrum--express {}
- .spectrum-Tooltip--top-left {}
- `;
-
- const result = await runRule(validCode);
- t.is(result.results[0].warnings.length, 0);
-});
-
-test(`should fail invalid class names`, async (t) => {
- const invalidCode = `
- .spectrum-UIIcon-United {}
- .spectrum-underlay-Under-lay {}
- .spectrum-underlay-under-lay {}
- .spectrum-detail--serif {}
- .spectrum-Heading--Heavy {}
- .spectrum-underlay-underlay {}
- .spectrum-Underlay--Underlay {}
- .spectrum-Underlay-Abc {}
- .spectrum-Underlay--Abc {}
- .spectrum-underlay--abc {}
- .spectrum-anderlay--Abc {}
- .spectrum-anderlay--abc {}
- .spectrum-Underlay--Abc {}
- .spectrum-code {}
- .spectrum-code--Abc {}
- `;
-
- const result = await runRule(invalidCode);
-
- t.is(result.results[0].warnings.length, 15);
-});
diff --git a/stylelint.config.js b/stylelint.config.js
index 447d507322d..099e0f4bc41 100644
--- a/stylelint.config.js
+++ b/stylelint.config.js
@@ -1,97 +1,169 @@
+const { join } = require("path");
+
module.exports = {
- allowEmptyInput: true,
- cache: true,
- defaultSeverity: "warning",
- extends: ["stylelint-config-standard"],
- plugins: [
- "stylelint-use-logical",
- "stylelint-no-missing-parenthesis",
- "stylelint-no-missing-var",
- "stylelint-suit-naming-pattern"
+ allowEmptyInput: true,
+ cache: true,
+ defaultSeverity: "warning",
+ extends: ["stylelint-config-standard", "stylelint-config-clean-order"],
+ plugins: [
+ "stylelint-header",
+ "stylelint-selector-bem-pattern",
+ "stylelint-use-logical",
+ "@spectrum-tools/stylelint-no-missing-parenthesis",
+ "@spectrum-tools/stylelint-no-missing-var",
+ "@spectrum-tools/stylelint-no-unused-custom-properties",
+ "@spectrum-tools/stylelint-no-unknown-custom-properties",
+ "stylelint-high-performance-animation",
+ ],
+ rules: {
+ "at-rule-empty-line-before": [
+ "always",
+ {
+ except: ["blockless-after-blockless", "first-nested"],
+ ignore: ["after-comment", "first-nested"],
+ ignoreAtRules: ["extend"],
+ },
],
- rules: {
- "at-rule-empty-line-before": [
- "always",
- {
- except: ["blockless-after-blockless", "first-nested"],
- ignore: ["after-comment", "first-nested"],
- ignoreAtRules: ["extend"],
- },
- ],
- "at-rule-no-unknown": [
- true,
- {
- ignoreAtRules: ["extend", "container", "each", "include", "mixin"],
- },
- ],
- "rule-empty-line-before": [
- "always",
- {
- except: ["first-nested"],
- ignore: ["after-comment"],
- },
- ],
- "selector-attribute-quotes": null,
- "block-no-empty": null,
- /* Could probably dig into this further, might be useful */
- "no-descending-specificity": null,
- /* Not useful at the moment */
- "no-duplicate-selectors": null,
- "selector-class-pattern": null,
- "declaration-empty-line-before": null,
- "comment-empty-line-before": [
- "always",
- {
- except: ["first-nested"],
- ignore: ["after-comment", "stylelint-commands"],
- ignoreComments: [/^passthroughs?/],
- },
- ],
- "declaration-block-no-redundant-longhand-properties": null,
- "custom-property-empty-line-before": null,
- "value-no-vendor-prefix": [
- true,
- {
- disableFix: true,
- severity: "warning",
- },
- ],
- "max-nesting-depth": [3, { severity: "warning" }],
- "custom-property-pattern": [/^(spectrum|mod|highcontrast|system)/, {}],
- "alpha-value-notation": "percentage",
- "function-no-unknown": [
- true,
- {
- severity: "warning",
- },
+ "at-rule-no-unknown": [
+ true,
+ {
+ ignoreAtRules: ["extend", "container", "each", "include", "mixin"],
+ },
+ ],
+ "rule-empty-line-before": [
+ "always",
+ {
+ except: ["first-nested"],
+ ignore: ["after-comment"],
+ },
+ ],
+ "selector-attribute-quotes": null,
+ "block-no-empty": null,
+ /* Could probably dig into this further, might be useful */
+ "no-descending-specificity": null,
+ /* Not useful at the moment */
+ "no-duplicate-selectors": null,
+ "selector-class-pattern": null,
+ "declaration-empty-line-before": null,
+ "comment-empty-line-before": [
+ "always",
+ {
+ except: ["first-nested"],
+ ignore: ["after-comment", "stylelint-commands"],
+ ignoreComments: [/^passthroughs?/],
+ },
+ ],
+ "declaration-block-no-redundant-longhand-properties": null,
+ "custom-property-empty-line-before": null,
+ "value-no-vendor-prefix": [
+ true,
+ {
+ disableFix: true,
+ severity: "warning",
+ },
+ ],
+ "max-nesting-depth": [3, { severity: "warning" }],
+ "custom-property-pattern": [/^(spectrum|mod|highcontrast|system)/, {}],
+ "alpha-value-notation": "percentage",
+ "function-no-unknown": [
+ true,
+ {
+ severity: "warning",
+ },
+ ],
+ /* @todo: would like to use "modern" eventually */
+ "color-function-notation": null,
+ "import-notation": null,
+ "property-no-unknown": [
+ true,
+ {
+ checkPrefixed: true,
+ },
+ ],
+ "declaration-block-no-duplicate-custom-properties": true,
+ "declaration-property-value-no-unknown": [
+ true,
+ {
+ ignoreProperties: {
+ transform: ["/^logical/"],
+ },
+ },
+ ],
+ "value-keyword-case": [
+ "lower",
+ {
+ camelCaseSvgKeywords: true,
+ },
+ ],
+ "selector-not-notation": "complex",
+ "header/header": [
+ join(__dirname, "COPYRIGHT"),
+ {
+ nonMatchingTolerance: 0.8,
+ },
+ {
+ fix: true,
+ },
+ ],
+ "csstools/use-logical": true,
+ /** Performance */
+ // "plugin/no-low-performance-animation-properties": [true, { severity: "warning" }],
+ "plugin/selector-bem-pattern": [
+ {
+ preset: "suit",
+ presetOptions: { namespace: "spectrum" },
+ utilitySelectors: /^\.(is|u)-[A-z0-9]+$/,
+ componentName: /^[A-Z][A-z0-9]+$/,
+ },
+ {
+ severity: "warning",
+ },
+ ],
+ /** Local/custom plugins */
+ "spectrum-tools/no-missing-parenthesis": true,
+ "spectrum-tools/no-missing-var": true,
+ /** @note this enables reporting of unused variables in a file */
+ "spectrum-tools/no-unused-custom-properties": [
+ true,
+ {
+ ignore: [/^--mod-/, /^--highcontrast-/, /^--system-/],
+ disableFix: true,
+ severity: "warning",
+ },
+ ],
+ "spectrum-tools/no-unknown-custom-properties": [
+ true,
+ {
+ /** @note this is a list of custom properties that are allowed to be unknown */
+ ignore: [
+ /^--mod-/,
+ /^--highcontrast-/,
+ /^--system-/,
+ /^--spectrum-(global|alias|component)-/,
+ /^--spectrum-animation-/,
],
- /* @todo: would like to use "modern" eventually */
+ checkDependencies: true,
+ disableFix: true,
+ severity: "warning",
+ },
+ ],
+ },
+ overrides: [
+ {
+ files: ["components/*/themes/*.css", "tokens/**/*.css"],
+ rules: {
+ "spectrum-tools/no-unused-custom-properties": null,
+ "spectrum-tools/no-unknown-custom-properties": null,
+ },
+ },
+ {
+ files: ["site/**/*.css", "storybook/assets/*.css"],
+ rules: {
+ "custom-property-pattern": null,
+ "spectrum-tools/no-unused-custom-properties": null,
+ "spectrum-tools/no-unknown-custom-properties": null,
"color-function-notation": null,
- "import-notation": null,
- "property-no-unknown": [
- true,
- {
- checkPrefixed: true,
- },
- ],
- "declaration-block-no-duplicate-custom-properties": true,
- "declaration-property-value-no-unknown": [
- true,
- {
- ignoreProperties: {
- transform: ["/^logical/"],
- },
- },
- ],
- "value-keyword-case": [
- "lower",
- {
- camelCaseSvgKeywords: true,
- },
- ],
- "selector-not-notation": "complex",
- "csstools/use-logical": true,
- /** Local/custom plugins */
- "custom-rule/no-missing-parenthesis": true,
+ },
},
+ ],
};
diff --git a/yarn.lock b/yarn.lock
index 8b7e453b483..ae6cc726889 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1120,6 +1120,11 @@
"@babel/helper-validator-identifier" "^7.22.20"
to-fast-properties "^2.0.0"
+"@bcoe/v8-coverage@^0.2.3":
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
+ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+
"@chromaui/addon-visual-tests@^0.0.124":
version "0.0.124"
resolved "https://registry.yarnpkg.com/@chromaui/addon-visual-tests/-/addon-visual-tests-0.0.124.tgz#140d0a22c4943a9213b4685837aa85720b111f1a"
@@ -1322,21 +1327,41 @@
resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz#1e0d581dbf4518cb3e939c3b863cb7180c8cedad"
integrity sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==
+"@csstools/css-parser-algorithms@^2.4.0":
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.5.0.tgz#0c03cd5418a9f404a05ff2ffcb1b69d04e8ec532"
+ integrity sha512-abypo6m9re3clXA00eu5syw+oaPHbJTPapu9C4pzNsJ4hdZDzushT50Zhu+iIYXgEe1CxnRMn7ngsbV+MLrlpQ==
+
"@csstools/css-tokenizer@^2.2.0":
version "2.2.1"
resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz#9dc431c9a5f61087af626e41ac2a79cce7bb253d"
integrity sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==
+"@csstools/css-tokenizer@^2.2.2":
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz#b099d543ea57b64f495915a095ead583866c50c6"
+ integrity sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==
+
"@csstools/media-query-list-parser@^2.1.4":
version "2.1.5"
resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz#94bc8b3c3fd7112a40b7bf0b483e91eba0654a0f"
integrity sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==
+"@csstools/media-query-list-parser@^2.1.6":
+ version "2.1.7"
+ resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.7.tgz#a4836e3dbd693081a30b32ce9c2a781e1be16788"
+ integrity sha512-lHPKJDkPUECsyAvD60joYfDmp8UERYxHGkFfyLJFTVK/ERJe0sVlIFLXU5XFxdjNDTerp5L4KeaKG+Z5S94qxQ==
+
"@csstools/selector-specificity@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz#798622546b63847e82389e473fd67f2707d82247"
integrity sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==
+"@csstools/selector-specificity@^3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.1.tgz#d84597fbc0f897240c12fc0a31e492b036c70e40"
+ integrity sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==
+
"@discoveryjs/json-ext@^0.5.3":
version "0.5.7"
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
@@ -1462,6 +1487,13 @@
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d"
integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==
+"@eslint-community/eslint-utils@^4.2.0":
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
+ integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
+ dependencies:
+ eslint-visitor-keys "^3.3.0"
+
"@etchteam/storybook-addon-status@^4.2.4":
version "4.2.4"
resolved "https://registry.yarnpkg.com/@etchteam/storybook-addon-status/-/storybook-addon-status-4.2.4.tgz#607e0fe230f5befae8b6e6b9c566eb07c296def8"
@@ -1560,7 +1592,7 @@
js-yaml "^3.13.1"
resolve-from "^5.0.0"
-"@istanbuljs/schema@^0.1.2":
+"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3":
version "0.1.3"
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
@@ -1663,7 +1695,7 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
-"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9":
+"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9":
version "0.3.20"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f"
integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==
@@ -3915,7 +3947,7 @@
"@types/through" "*"
rxjs "^7.2.0"
-"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
version "2.0.6"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7"
integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==
@@ -4107,6 +4139,11 @@
resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.6.tgz#eb26db6780c513de59bee0b869ef289ad3068711"
integrity sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA==
+"@types/semver@^7.3.12":
+ version "7.5.6"
+ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339"
+ integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==
+
"@types/semver@^7.3.4":
version "7.5.5"
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.5.tgz#deed5ab7019756c9c90ea86139106b0346223f35"
@@ -4178,6 +4215,54 @@
dependencies:
"@types/yargs-parser" "*"
+"@typescript-eslint/scope-manager@5.62.0":
+ version "5.62.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c"
+ integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==
+ dependencies:
+ "@typescript-eslint/types" "5.62.0"
+ "@typescript-eslint/visitor-keys" "5.62.0"
+
+"@typescript-eslint/types@5.62.0":
+ version "5.62.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f"
+ integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==
+
+"@typescript-eslint/typescript-estree@5.62.0":
+ version "5.62.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b"
+ integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==
+ dependencies:
+ "@typescript-eslint/types" "5.62.0"
+ "@typescript-eslint/visitor-keys" "5.62.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@^5.10.0":
+ version "5.62.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86"
+ integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@types/json-schema" "^7.0.9"
+ "@types/semver" "^7.3.12"
+ "@typescript-eslint/scope-manager" "5.62.0"
+ "@typescript-eslint/types" "5.62.0"
+ "@typescript-eslint/typescript-estree" "5.62.0"
+ eslint-scope "^5.1.1"
+ semver "^7.3.7"
+
+"@typescript-eslint/visitor-keys@5.62.0":
+ version "5.62.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e"
+ integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==
+ dependencies:
+ "@typescript-eslint/types" "5.62.0"
+ eslint-visitor-keys "^3.3.0"
+
"@urql/core@>=4.1.0", "@urql/core@^4.2.0":
version "4.2.2"
resolved "https://registry.yarnpkg.com/@urql/core/-/core-4.2.2.tgz#c2b009373cb9084bbfa8ebc0177c854a76235b84"
@@ -4433,6 +4518,11 @@ acorn-walk@^8.0.0, acorn-walk@^8.1.1:
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f"
integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==
+acorn-walk@^8.2.0:
+ version "8.3.1"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43"
+ integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==
+
acorn@^3.1.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
@@ -4497,6 +4587,14 @@ aggregate-error@^3.0.0:
clean-stack "^2.0.0"
indent-string "^4.0.0"
+aggregate-error@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-4.0.1.tgz#25091fe1573b9e0be892aeda15c7c66a545f758e"
+ integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==
+ dependencies:
+ clean-stack "^4.0.0"
+ indent-string "^5.0.0"
+
ajv-formats@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
@@ -4650,7 +4748,7 @@ ansi-styles@^5.0.0:
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-ansi-styles@^6.0.0, ansi-styles@^6.1.0:
+ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
@@ -4927,6 +5025,11 @@ arrify@^2.0.1:
resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
+arrify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-3.0.0.tgz#ccdefb8eaf2a1d2ab0da1ca2ce53118759fd46bc"
+ integrity sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==
+
asap@^2.0.3, asap@~2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
@@ -5110,6 +5213,55 @@ ava@^3.9.0:
write-file-atomic "^3.0.3"
yargs "^16.2.0"
+ava@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/ava/-/ava-5.3.1.tgz#335737dd963b7941b90214836cea2e8de1f4d5f4"
+ integrity sha512-Scv9a4gMOXB6+ni4toLuhAm9KYWEjsgBglJl+kMGI5+IVDt120CCDZyB5HNU9DjmLI2t4I0GbnxGLmmRfGTJGg==
+ dependencies:
+ acorn "^8.8.2"
+ acorn-walk "^8.2.0"
+ ansi-styles "^6.2.1"
+ arrgv "^1.0.2"
+ arrify "^3.0.0"
+ callsites "^4.0.0"
+ cbor "^8.1.0"
+ chalk "^5.2.0"
+ chokidar "^3.5.3"
+ chunkd "^2.0.1"
+ ci-info "^3.8.0"
+ ci-parallel-vars "^1.0.1"
+ clean-yaml-object "^0.1.0"
+ cli-truncate "^3.1.0"
+ code-excerpt "^4.0.0"
+ common-path-prefix "^3.0.0"
+ concordance "^5.0.4"
+ currently-unhandled "^0.4.1"
+ debug "^4.3.4"
+ emittery "^1.0.1"
+ figures "^5.0.0"
+ globby "^13.1.4"
+ ignore-by-default "^2.1.0"
+ indent-string "^5.0.0"
+ is-error "^2.2.2"
+ is-plain-object "^5.0.0"
+ is-promise "^4.0.0"
+ matcher "^5.0.0"
+ mem "^9.0.2"
+ ms "^2.1.3"
+ p-event "^5.0.1"
+ p-map "^5.5.0"
+ picomatch "^2.3.1"
+ pkg-conf "^4.0.0"
+ plur "^5.1.0"
+ pretty-ms "^8.0.0"
+ resolve-cwd "^3.0.0"
+ stack-utils "^2.0.6"
+ strip-ansi "^7.0.1"
+ supertap "^3.0.1"
+ temp-dir "^3.0.0"
+ write-file-atomic "^5.0.1"
+ yargs "^17.7.2"
+
available-typed-arrays@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
@@ -5596,6 +5748,24 @@ bytes@3.1.2:
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+c8@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/c8/-/c8-8.0.1.tgz#bafd60be680e66c5530ee69f621e45b1364af9fd"
+ integrity sha512-EINpopxZNH1mETuI0DzRA4MZpAUH+IFiRhnmFD3vFr3vdrgxqi3VfE3KL0AIL+zDq8rC9bZqwM/VDmmoe04y7w==
+ dependencies:
+ "@bcoe/v8-coverage" "^0.2.3"
+ "@istanbuljs/schema" "^0.1.3"
+ find-up "^5.0.0"
+ foreground-child "^2.0.0"
+ istanbul-lib-coverage "^3.2.0"
+ istanbul-lib-report "^3.0.1"
+ istanbul-reports "^3.1.6"
+ rimraf "^3.0.2"
+ test-exclude "^6.0.0"
+ v8-to-istanbul "^9.0.0"
+ yargs "^17.7.2"
+ yargs-parser "^21.1.1"
+
cacache@^16.1.0:
version "16.1.3"
resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e"
@@ -5698,6 +5868,11 @@ callsites@^3.0.0, callsites@^3.1.0:
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+callsites@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-4.1.0.tgz#de72b98612eed4e1e2564c952498677faa9d86c2"
+ integrity sha512-aBMbD1Xxay75ViYezwT40aQONfr+pSXTHwNKvIXhXD6+LY3F1dLIcceoC5OZKBVHbXcysz1hL9D2w0JJIMXpUw==
+
camel-case@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
@@ -5779,6 +5954,13 @@ case-sensitive-paths-webpack-plugin@^2.4.0:
resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4"
integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==
+cbor@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5"
+ integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==
+ dependencies:
+ nofilter "^3.1.0"
+
center-align@^0.1.1:
version "0.1.3"
resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
@@ -5803,7 +5985,7 @@ chalk@4.1.2, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.
ansi-styles "^4.1.0"
supports-color "^7.1.0"
-chalk@5.3.0, chalk@^5.0.0, chalk@^5.0.1, chalk@^5.3.0:
+chalk@5.3.0, chalk@^5.0.0, chalk@^5.0.1, chalk@^5.2.0, chalk@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385"
integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==
@@ -5999,7 +6181,7 @@ ci-info@^2.0.0:
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
-ci-info@^3.2.0, ci-info@^3.6.1:
+ci-info@^3.2.0, ci-info@^3.6.1, ci-info@^3.8.0:
version "3.9.0"
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4"
integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
@@ -6038,6 +6220,13 @@ clean-stack@^2.0.0:
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+clean-stack@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-4.2.0.tgz#c464e4cde4ac789f4e0735c5d75beb49d7b30b31"
+ integrity sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==
+ dependencies:
+ escape-string-regexp "5.0.0"
+
clean-yaml-object@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68"
@@ -6216,6 +6405,13 @@ code-excerpt@^3.0.0:
dependencies:
convert-to-spaces "^1.0.1"
+code-excerpt@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/code-excerpt/-/code-excerpt-4.0.0.tgz#2de7d46e98514385cb01f7b3b741320115f4c95e"
+ integrity sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==
+ dependencies:
+ convert-to-spaces "^2.0.1"
+
code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
@@ -6422,7 +6618,7 @@ concat-with-sourcemaps@^1.0.0:
dependencies:
source-map "^0.6.1"
-concordance@^5.0.1:
+concordance@^5.0.1, concordance@^5.0.4:
version "5.0.4"
resolved "https://registry.yarnpkg.com/concordance/-/concordance-5.0.4.tgz#9896073261adced72f88d60e4d56f8efc4bbbbd2"
integrity sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==
@@ -6725,6 +6921,11 @@ convert-to-spaces@^1.0.1:
resolved "https://registry.yarnpkg.com/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz#7e3e48bbe6d997b1417ddca2868204b4d3d85715"
integrity sha512-cj09EBuObp9gZNQCzc7hByQyrs6jVGE+o9kSJmeUoj+GiPiJvi5LYqEH/Hmme4+MTLHM+Ejtq+FChpjjEnsPdQ==
+convert-to-spaces@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz#61a6c98f8aa626c16b296b862a91412a33bceb6b"
+ integrity sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==
+
cookie-signature@1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
@@ -6835,6 +7036,16 @@ cosmiconfig@^8.0.0, cosmiconfig@^8.2.0:
parse-json "^5.2.0"
path-type "^4.0.0"
+cosmiconfig@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d"
+ integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==
+ dependencies:
+ env-paths "^2.2.1"
+ import-fresh "^3.3.0"
+ js-yaml "^4.1.0"
+ parse-json "^5.2.0"
+
create-require@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
@@ -7608,6 +7819,11 @@ emittery@^0.8.0:
resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860"
integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==
+emittery@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/emittery/-/emittery-1.0.1.tgz#e0cf36e2d7eef94dbd025969f642d57ae50a56cd"
+ integrity sha512-2ID6FdrMD9KDLldGesP6317G78K7km/kMcwItRtVFva7I/cSEOIaLpewaUb+YLXVwdAp3Ctfxh/V5zIl1sj7dQ==
+
emoji-regex@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
@@ -7704,7 +7920,7 @@ entities@~2.1.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5"
integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==
-env-paths@^2.2.0:
+env-paths@^2.2.0, env-paths@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
@@ -7910,6 +8126,11 @@ escape-html@~1.0.3:
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
+escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8"
+ integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==
+
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
@@ -7925,12 +8146,14 @@ escape-string-regexp@^4.0.0:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
-escape-string-regexp@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8"
- integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==
+eslint-plugin-jest@^27.2.2:
+ version "27.6.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.6.1.tgz#5e43b07f3ca48d72e4b4fa243531e5153d9ca1dc"
+ integrity sha512-WEYkyVXD9NlmFBKvrkmzrC+C9yZoz5pAml2hO19PlS3spJtoiwj4p2u8spd/7zx5IvRsZsCmsoImaAvBB9X93Q==
+ dependencies:
+ "@typescript-eslint/utils" "^5.10.0"
-eslint-scope@5.1.1:
+eslint-scope@5.1.1, eslint-scope@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
@@ -7938,6 +8161,11 @@ eslint-scope@5.1.1:
esrecurse "^4.3.0"
estraverse "^4.1.1"
+eslint-visitor-keys@^3.3.0:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
+ integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
+
esprima@^4.0.0, esprima@~4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
@@ -8288,6 +8516,13 @@ file-entry-cache@^7.0.0:
dependencies:
flat-cache "^3.1.1"
+file-entry-cache@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f"
+ integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==
+ dependencies:
+ flat-cache "^4.0.0"
+
file-loader@6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d"
@@ -8447,7 +8682,7 @@ find-up@^4.0.0, find-up@^4.1.0:
locate-path "^5.0.0"
path-exists "^4.0.0"
-find-up@^6.3.0:
+find-up@^6.0.0, find-up@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790"
integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==
@@ -8526,6 +8761,15 @@ flat-cache@^3.1.1:
keyv "^4.5.3"
rimraf "^3.0.2"
+flat-cache@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.0.tgz#d12437636f83bb8a12b8f300c36fd1614e1c7224"
+ integrity sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==
+ dependencies:
+ flatted "^3.2.9"
+ keyv "^4.5.4"
+ rimraf "^5.0.5"
+
flat@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
@@ -8578,6 +8822,14 @@ for-own@^1.0.0:
dependencies:
for-in "^1.0.1"
+foreground-child@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53"
+ integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==
+ dependencies:
+ cross-spawn "^7.0.0"
+ signal-exit "^3.0.2"
+
foreground-child@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
@@ -9153,7 +9405,7 @@ globby@^10.0.1:
merge2 "^1.2.3"
slash "^3.0.0"
-globby@^13.0.0, globby@^13.1.1:
+globby@^13.0.0, globby@^13.1.1, globby@^13.1.4:
version "13.2.2"
resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592"
integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==
@@ -9595,6 +9847,11 @@ html-entities@^2.1.0:
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061"
integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==
+html-escaper@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+ integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
html-minifier-terser@^6.0.2:
version "6.1.0"
resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab"
@@ -9771,7 +10028,7 @@ ieee754@^1.1.13, ieee754@^1.2.1:
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-ignore-by-default@^2.0.0:
+ignore-by-default@^2.0.0, ignore-by-default@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-2.1.0.tgz#c0e0de1a99b6065bdc93315a6f728867981464db"
integrity sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==
@@ -9795,6 +10052,11 @@ ignore@^5.0.4, ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
+ignore@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78"
+ integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==
+
immutable@^3:
version "3.8.2"
resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3"
@@ -10012,7 +10274,7 @@ ipaddr.js@1.9.1:
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
-irregular-plurals@^3.2.0:
+irregular-plurals@^3.2.0, irregular-plurals@^3.3.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.5.0.tgz#0835e6639aa8425bdc8b0d33d0dc4e89d9c01d2b"
integrity sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==
@@ -10580,7 +10842,7 @@ isobject@^3.0.0, isobject@^3.0.1:
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
-istanbul-lib-coverage@^3.2.0:
+istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756"
integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==
@@ -10596,6 +10858,23 @@ istanbul-lib-instrument@^5.0.4:
istanbul-lib-coverage "^3.2.0"
semver "^6.3.0"
+istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d"
+ integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==
+ dependencies:
+ istanbul-lib-coverage "^3.0.0"
+ make-dir "^4.0.0"
+ supports-color "^7.1.0"
+
+istanbul-reports@^3.1.6:
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a"
+ integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==
+ dependencies:
+ html-escaper "^2.0.0"
+ istanbul-lib-report "^3.0.0"
+
istextorbinary@^3.0.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-3.3.0.tgz#06b1c57d948da11461bd237c00ce09e9902964f2"
@@ -10753,7 +11032,7 @@ js-yaml@4.1.0, js-yaml@^4.1.0:
dependencies:
argparse "^2.0.1"
-js-yaml@^3.10.0, js-yaml@^3.13.1, js-yaml@^3.14.0, js-yaml@^3.4.3:
+js-yaml@^3.10.0, js-yaml@^3.13.1, js-yaml@^3.14.0, js-yaml@^3.14.1, js-yaml@^3.4.3:
version "3.14.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
@@ -10907,7 +11186,7 @@ keyv@^3.0.0:
dependencies:
json-buffer "3.0.0"
-keyv@^4.5.3:
+keyv@^4.5.3, keyv@^4.5.4:
version "4.5.4"
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
@@ -11280,6 +11559,11 @@ load-json-file@^5.2.0:
strip-bom "^3.0.0"
type-fest "^0.3.0"
+load-json-file@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-7.0.1.tgz#a3c9fde6beffb6bedb5acf104fad6bb1604e1b00"
+ integrity sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==
+
loader-runner@^4.2.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
@@ -11451,7 +11735,7 @@ lodash.upperfirst@^4.3.1:
resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce"
integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==
-lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4:
+lodash@>=4.17.21, lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -11571,6 +11855,13 @@ make-dir@^2.0.0, make-dir@^2.1.0:
pify "^4.0.1"
semver "^5.6.0"
+make-dir@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e"
+ integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==
+ dependencies:
+ semver "^7.5.3"
+
make-error@^1.1.1:
version "1.3.6"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
@@ -11717,6 +12008,13 @@ matcher@^3.0.0:
dependencies:
escape-string-regexp "^4.0.0"
+matcher@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/matcher/-/matcher-5.0.0.tgz#cd82f1c7ae7ee472a9eeaf8ec7cac45e0fe0da62"
+ integrity sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==
+ dependencies:
+ escape-string-regexp "^5.0.0"
+
mathml-tag-names@^2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3"
@@ -11779,6 +12077,14 @@ mem@^8.0.0:
map-age-cleaner "^0.1.3"
mimic-fn "^3.1.0"
+mem@^9.0.2:
+ version "9.0.2"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-9.0.2.tgz#bbc2d40be045afe30749681e8f5d554cee0c0354"
+ integrity sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==
+ dependencies:
+ map-age-cleaner "^0.1.3"
+ mimic-fn "^4.0.0"
+
memfs@^3.4.1, memfs@^3.4.12:
version "3.6.0"
resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6"
@@ -11816,6 +12122,11 @@ meow@^10.1.5:
type-fest "^1.2.2"
yargs-parser "^20.2.9"
+meow@^13.0.0:
+ version "13.1.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-13.1.0.tgz#62995b0e8c3951739fe6e0a4becdd4d0df23eb37"
+ integrity sha512-o5R/R3Tzxq0PJ3v3qcQJtSvSE9nKOLSAaDuuoMzDVuGTwHdccMWcYomh9Xolng2tjT6O/Y83d+0coVGof6tqmA==
+
meow@^8.0.0, meow@^8.1.2:
version "8.1.2"
resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897"
@@ -12193,7 +12504,7 @@ nan@^2.12.1:
resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554"
integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==
-nanoid@^3.3.6:
+nanoid@^3.3.6, nanoid@^3.3.7:
version "3.3.7"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
@@ -12335,6 +12646,11 @@ node-releases@^2.0.13:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d"
integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==
+nofilter@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66"
+ integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==
+
nopt@1.0.10:
version "1.0.10"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
@@ -12998,6 +13314,13 @@ p-event@^4.2.0:
dependencies:
p-timeout "^3.1.0"
+p-event@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/p-event/-/p-event-5.0.1.tgz#614624ec02ae7f4f13d09a721c90586184af5b0c"
+ integrity sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==
+ dependencies:
+ p-timeout "^5.0.2"
+
p-finally@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
@@ -13085,6 +13408,13 @@ p-map@^3.0.0:
dependencies:
aggregate-error "^3.0.0"
+p-map@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-5.5.0.tgz#054ca8ca778dfa4cf3f8db6638ccb5b937266715"
+ integrity sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==
+ dependencies:
+ aggregate-error "^4.0.0"
+
p-pipe@3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e"
@@ -13110,6 +13440,11 @@ p-timeout@^3.1.0, p-timeout@^3.2.0:
dependencies:
p-finally "^1.0.0"
+p-timeout@^5.0.2:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-5.1.0.tgz#b3c691cf4415138ce2d9cfe071dba11f0fee085b"
+ integrity sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==
+
p-try@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
@@ -13272,6 +13607,11 @@ parse-ms@^2.1.0:
resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d"
integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==
+parse-ms@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-3.0.0.tgz#3ea24a934913345fcc3656deda72df921da3a70e"
+ integrity sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==
+
parse-node-version@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
@@ -13541,6 +13881,14 @@ pkg-conf@^3.1.0:
find-up "^3.0.0"
load-json-file "^5.2.0"
+pkg-conf@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-4.0.0.tgz#63ace00cbacfa94c2226aee133800802d3e3b80c"
+ integrity sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==
+ dependencies:
+ find-up "^6.0.0"
+ load-json-file "^7.0.0"
+
pkg-dir@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
@@ -13611,6 +13959,13 @@ plur@^4.0.0:
dependencies:
irregular-plurals "^3.2.0"
+plur@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/plur/-/plur-5.1.0.tgz#bff58c9f557b9061d60d8ebf93959cf4b08594ae"
+ integrity sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==
+ dependencies:
+ irregular-plurals "^3.3.0"
+
pluralize@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1"
@@ -13648,6 +14003,14 @@ posix-character-classes@^0.1.0:
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==
+postcss-bem-linter@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-bem-linter/-/postcss-bem-linter-4.0.1.tgz#aca52d792a711ca2976530241532d798879c4e3b"
+ integrity sha512-jTG3uMo6n2YyxLBPLsRN+5R9djNJZ3mirAugvnYbZaZOwPmLb/MaQ2uql0fSdVYegjZBmX8tW5B0mfZigiXZ9Q==
+ dependencies:
+ minimatch "^3.1.2"
+ postcss-resolve-nested-selector "^0.1.1"
+
postcss-calc@^6.0.0:
version "6.0.2"
resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-6.0.2.tgz#4d9a43e27dbbf27d095fecb021ac6896e2318337"
@@ -13893,6 +14256,11 @@ postcss-safe-parser@^6.0.0:
resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1"
integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==
+postcss-safe-parser@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz#6273d4e5149e286db5a45bc6cf6eafcad464014a"
+ integrity sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==
+
postcss-selector-parser@^2.2.2:
version "2.2.3"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
@@ -14023,6 +14391,15 @@ postcss@^8.4.21, postcss@^8.4.28:
picocolors "^1.0.0"
source-map-js "^1.0.2"
+postcss@^8.4.24, postcss@^8.4.32:
+ version "8.4.33"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742"
+ integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==
+ dependencies:
+ nanoid "^3.3.7"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
prepend-http@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
@@ -14105,6 +14482,13 @@ pretty-ms@^7.0.1:
dependencies:
parse-ms "^2.1.0"
+pretty-ms@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-8.0.0.tgz#a35563b2a02df01e595538f86d7de54ca23194a3"
+ integrity sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==
+ dependencies:
+ parse-ms "^3.0.0"
+
prismjs@1.25.0:
version "1.25.0"
resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.25.0.tgz#6f822df1bdad965734b310b315a23315cf999756"
@@ -15999,7 +16383,7 @@ stack-trace@0.0.10:
resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==
-stack-utils@^2.0.3:
+stack-utils@^2.0.3, stack-utils@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f"
integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==
@@ -16090,6 +16474,11 @@ string-argv@0.3.2:
resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6"
integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==
+string-similarity@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-4.0.4.tgz#42d01ab0b34660ea8a018da8f56a3309bb8b2a5b"
+ integrity sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==
+
"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
@@ -16186,7 +16575,7 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1:
dependencies:
ansi-regex "^2.0.0"
-strip-ansi@^7.0.1:
+strip-ansi@^7.0.1, strip-ansi@^7.1.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
@@ -16292,6 +16681,13 @@ style-search@^0.1.0:
resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==
+stylelint-config-clean-order@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-clean-order/-/stylelint-config-clean-order-5.2.0.tgz#4462256111740d1e777515bf24d3b9805ed05e12"
+ integrity sha512-eAB9ftPa8txPFY2oh4NIE3DFkNzqVEBIALUZhSXP0+6CISPjZPBoOV24shjC9DgOKr7rNPY52DAXBXIBI//Mhg==
+ dependencies:
+ stylelint-order "^6.0.2"
+
stylelint-config-recommended@^13.0.0:
version "13.0.0"
resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz#c48a358cc46b629ea01f22db60b351f703e00597"
@@ -16304,12 +16700,89 @@ stylelint-config-standard@^34.0.0:
dependencies:
stylelint-config-recommended "^13.0.0"
+stylelint-header@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-header/-/stylelint-header-1.0.0.tgz#a58f8e1995a822d8b3b1d1ceaddaf0884ece6895"
+ integrity sha512-1LB2SNSjaTj4doUDKbH65ic6OkfKCWML1eL6ANYeREDvq12mA7M8SIx7dAlpufEFYyzJEqBkN7A8+r/oOHAyvA==
+ dependencies:
+ string-similarity "^4.0.4"
+
+stylelint-high-performance-animation@^1.9.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/stylelint-high-performance-animation/-/stylelint-high-performance-animation-1.10.0.tgz#2c0b67320fc6d978ee9b532d6feffc708e86979d"
+ integrity sha512-YzNI+E6taN8pwgaM0INazRg4tw23VA17KNMKUVdOeohpnpSyJLBnLVT9NkRcaCFLodK/67smS5VZK+Qe4Ohrvw==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+stylelint-order@^6.0.2:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/stylelint-order/-/stylelint-order-6.0.4.tgz#3e80d876c61a98d2640de181433686f24284748b"
+ integrity sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==
+ dependencies:
+ postcss "^8.4.32"
+ postcss-sorting "^8.0.2"
+
+stylelint-selector-bem-pattern@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/stylelint-selector-bem-pattern/-/stylelint-selector-bem-pattern-3.0.1.tgz#e4ddf27bacb705cac8c76b9610674ff6514d80cb"
+ integrity sha512-eh0tyyVyS62IOVzyi5oN0BKLJTHnolMWIqzpe0n3Wk26HxZegp/PiVKSUpK7vzVIAdAROemhypfMaH/xZorZrg==
+ dependencies:
+ eslint-plugin-jest "^27.2.2"
+ lodash ">=4.17.21"
+ postcss "^8.4.24"
+ postcss-bem-linter "^4.0.1"
+ stylelint ">=15.9.0"
+
stylelint-use-logical@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/stylelint-use-logical/-/stylelint-use-logical-2.1.0.tgz#4d2e58418d1a5d459beb3d51552491fab1ed22ec"
integrity sha512-DN1boOPI6IMYTlu2KeQpH5hDEiCODHhd+AtXU0InO37wkWAuELiPwuv59HrTg2m9PYmqGTTO/QWdMBafYVPfew==
-stylelint@^15.10.2, stylelint@^15.11.0:
+stylelint@>=15.9.0:
+ version "16.1.0"
+ resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-16.1.0.tgz#d289c36b0dd344a65c55897d636b3b8b213dc908"
+ integrity sha512-Sh1rRV0lN1qxz/QsuuooLWsIZ/ona7NKw/fRZd6y6PyXYdD2W0EAzJ8yJcwSx4Iw/muz0CF09VZ+z4EiTAcKmg==
+ dependencies:
+ "@csstools/css-parser-algorithms" "^2.4.0"
+ "@csstools/css-tokenizer" "^2.2.2"
+ "@csstools/media-query-list-parser" "^2.1.6"
+ "@csstools/selector-specificity" "^3.0.1"
+ balanced-match "^2.0.0"
+ colord "^2.9.3"
+ cosmiconfig "^9.0.0"
+ css-functions-list "^3.2.1"
+ css-tree "^2.3.1"
+ debug "^4.3.4"
+ fast-glob "^3.3.2"
+ fastest-levenshtein "^1.0.16"
+ file-entry-cache "^8.0.0"
+ global-modules "^2.0.0"
+ globby "^11.1.0"
+ globjoin "^0.1.4"
+ html-tags "^3.3.1"
+ ignore "^5.3.0"
+ imurmurhash "^0.1.4"
+ is-plain-object "^5.0.0"
+ known-css-properties "^0.29.0"
+ mathml-tag-names "^2.1.3"
+ meow "^13.0.0"
+ micromatch "^4.0.5"
+ normalize-path "^3.0.0"
+ picocolors "^1.0.0"
+ postcss "^8.4.32"
+ postcss-resolve-nested-selector "^0.1.1"
+ postcss-safe-parser "^7.0.0"
+ postcss-selector-parser "^6.0.13"
+ postcss-value-parser "^4.2.0"
+ resolve-from "^5.0.0"
+ string-width "^4.2.3"
+ strip-ansi "^7.1.0"
+ supports-hyperlinks "^3.0.0"
+ svg-tags "^1.0.0"
+ table "^6.8.1"
+ write-file-atomic "^5.0.1"
+
+stylelint@^15.11.0:
version "15.11.0"
resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.11.0.tgz#3ff8466f5f5c47362bc7c8c9d382741c58bc3292"
integrity sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==
@@ -16366,6 +16839,16 @@ supertap@^2.0.0:
serialize-error "^7.0.1"
strip-ansi "^6.0.0"
+supertap@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/supertap/-/supertap-3.0.1.tgz#aa89e4522104402c6e8fe470a7d2db6dc4037c6a"
+ integrity sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==
+ dependencies:
+ indent-string "^5.0.0"
+ js-yaml "^3.14.1"
+ serialize-error "^7.0.1"
+ strip-ansi "^7.0.1"
+
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@@ -16559,6 +17042,11 @@ temp-dir@^2.0.0:
resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e"
integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==
+temp-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-3.0.0.tgz#7f147b42ee41234cc6ba3138cd8e8aa2302acffa"
+ integrity sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==
+
temp@^0.8.4:
version "0.8.4"
resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2"
@@ -16879,7 +17367,7 @@ tsconfig-paths@^4.1.2:
minimist "^1.2.6"
strip-bom "^3.0.0"
-tslib@^1.13.0:
+tslib@^1.13.0, tslib@^1.8.1:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
@@ -16889,6 +17377,13 @@ tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
+tsutils@^3.21.0:
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
+ integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
+ dependencies:
+ tslib "^1.8.1"
+
tuf-js@^1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43"
@@ -17464,6 +17959,15 @@ v8-compile-cache@2.3.0:
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
+v8-to-istanbul@^9.0.0:
+ version "9.2.0"
+ resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad"
+ integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==
+ dependencies:
+ "@jridgewell/trace-mapping" "^0.3.12"
+ "@types/istanbul-lib-coverage" "^2.0.1"
+ convert-source-map "^2.0.0"
+
v8flags@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656"