Skip to content

Commit 00357e3

Browse files
authored
build: replace deprecated axe dependency (#21534)
The `axe-webdriverjs` package was deprecated in favor of `@axe-core/webdriverjs`. These changes switch to the new package, fix the new failures that were picked up and clean up some repetitive code.
1 parent bd88e64 commit 00357e3

File tree

12 files changed

+153
-104
lines changed

12 files changed

+153
-104
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
"@angular/platform-browser-dynamic": "^11.1.0-next.2",
8181
"@angular/platform-server": "^11.1.0-next.2",
8282
"@angular/router": "^11.1.0-next.2",
83+
"@axe-core/webdriverjs": "^4.1.0",
8384
"@bazel/bazelisk": "^1.4.0",
8485
"@bazel/buildifier": "^3.5.0",
8586
"@bazel/ibazel": "^0.14.0",
@@ -111,7 +112,6 @@
111112
"@types/stylelint": "^9.10.1",
112113
"@types/yaml": "^1.9.7",
113114
"autoprefixer": "^6.7.6",
114-
"axe-webdriverjs": "^1.1.1",
115115
"browser-sync": "^2.26.7",
116116
"chalk": "^4.1.0",
117117
"codelyzer": "^6.0.0-next.2",
Lines changed: 4 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,9 @@
11
<button (click)="showLinks = !showLinks">Toggle Navigation Links</button>
22

3-
<mat-nav-list *ngIf="showLinks">
4-
<a mat-list-item [routerLink]="['block-scroll-strategy']">Block scroll strategy</a>
5-
<a mat-list-item [routerLink]="['button']">Button</a>
6-
<a mat-list-item [routerLink]="['button-toggle']">Button Toggle</a>
7-
<a mat-list-item [routerLink]="['checkbox']">Checkbox</a>
8-
<a mat-list-item [routerLink]="['component-harness']">Component Harness</a>
9-
<a mat-list-item [routerLink]="['dialog']">Dialog</a>
10-
<a mat-list-item [routerLink]="['expansion']">Expansion</a>
11-
<a mat-list-item [routerLink]="['grid-list']">Grid list</a>
12-
<a mat-list-item [routerLink]="['icon']">Icon</a>
13-
<a mat-list-item [routerLink]="['input']">Input</a>
14-
<a mat-list-item [routerLink]="['list']">List</a>
15-
<a mat-list-item [routerLink]="['menu']">Menu</a>
16-
<a mat-list-item [routerLink]="['progress-bar']">Progress bar</a>
17-
<a mat-list-item [routerLink]="['progress-spinner']">Progress Spinner</a>
18-
<a mat-list-item [routerLink]="['radio']">Radios</a>
19-
<a mat-list-item [routerLink]="['sidenav']">Sidenav</a>
20-
<a mat-list-item [routerLink]="['slide-toggle']">Slide Toggle</a>
21-
<a mat-list-item [routerLink]="['stepper']">Stepper</a>
22-
<a mat-list-item [routerLink]="['tabs']">Tabs</a>
23-
<a mat-list-item [routerLink]="['cards']">Cards</a>
24-
<a mat-list-item [routerLink]="['toolbar']">Toolbar</a>
25-
<a mat-list-item [routerLink]="['virtual-scroll']">Virtual Scroll</a>
26-
<a mat-list-item [routerLink]="['mdc-button']">MDC Button</a>
27-
<a mat-list-item [routerLink]="['mdc-card']">MDC Card</a>
28-
<a mat-list-item [routerLink]="['mdc-checkbox']">MDC Checkbox</a>
29-
<a mat-list-item [routerLink]="['mdc-chips']">MDC Chips</a>
30-
<a mat-list-item [routerLink]="['mdc-dialog']">MDC Dialog</a>
31-
<a mat-list-item [routerLink]="['mdc-input']">MDC Input</a>
32-
<a mat-list-item [routerLink]="['mdc-menu']">MDC Menu</a>
33-
<a mat-list-item [routerLink]="['mdc-radio']">MDC Radio</a>
34-
<a mat-list-item [routerLink]="['mdc-slide-toggle']">MDC Slide Toggle</a>
35-
<a mat-list-item [routerLink]="['mdc-table']">MDC Table</a>
36-
<a mat-list-item [routerLink]="['mdc-tabs']">MDC Tabs</a>
37-
<a mat-list-item [routerLink]="['mdc-progress-bar']">MDC Progress bar</a>
38-
<a mat-list-item [routerLink]="['mdc-progress-spinner']">MDC Progress spinner</a>
39-
</mat-nav-list>
40-
413
<main>
4+
<mat-nav-list *ngIf="showLinks">
5+
<a mat-list-item *ngFor="let link of navLinks" [routerLink]="[link.path]">{{link.title}}</a>
6+
</mat-nav-list>
7+
428
<ng-content></ng-content>
439
</main>

src/e2e-app/e2e-app/e2e-app-layout.ts

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,43 @@ export class Home {
1111
encapsulation: ViewEncapsulation.None,
1212
})
1313
export class E2eAppLayout {
14-
showLinks: boolean = false;
14+
showLinks = false;
15+
16+
navLinks = [
17+
{path: 'block-scroll-strategy', title: 'Block scroll strategy'},
18+
{path: 'button', title: 'Button'},
19+
{path: 'button-toggle', title: 'Button Toggle'},
20+
{path: 'checkbox', title: 'Checkbox'},
21+
{path: 'component-harness', title: 'Component Harness'},
22+
{path: 'dialog', title: 'Dialog'},
23+
{path: 'expansion', title: 'Expansion'},
24+
{path: 'grid-list', title: 'Grid list'},
25+
{path: 'icon', title: 'Icon'},
26+
{path: 'input', title: 'Input'},
27+
{path: 'list', title: 'List'},
28+
{path: 'menu', title: 'Menu'},
29+
{path: 'progress-bar', title: 'Progress bar'},
30+
{path: 'progress-spinner', title: 'Progress Spinner'},
31+
{path: 'radio', title: 'Radios'},
32+
{path: 'sidenav', title: 'Sidenav'},
33+
{path: 'slide-toggle', title: 'Slide Toggle'},
34+
{path: 'stepper', title: 'Stepper'},
35+
{path: 'tabs', title: 'Tabs'},
36+
{path: 'cards', title: 'Cards'},
37+
{path: 'toolbar', title: 'Toolbar'},
38+
{path: 'virtual-scroll', title: 'Virtual Scroll'},
39+
{path: 'mdc-button', title: 'MDC Button'},
40+
{path: 'mdc-card', title: 'MDC Card'},
41+
{path: 'mdc-checkbox', title: 'MDC Checkbox'},
42+
{path: 'mdc-chips', title: 'MDC Chips'},
43+
{path: 'mdc-dialog', title: 'MDC Dialog'},
44+
{path: 'mdc-input', title: 'MDC Input'},
45+
{path: 'mdc-menu', title: 'MDC Menu'},
46+
{path: 'mdc-radio', title: 'MDC Radio'},
47+
{path: 'mdc-slide-toggle', title: 'MDC Slide Toggle'},
48+
{path: 'mdc-table', title: 'MDC Table'},
49+
{path: 'mdc-tabs', title: 'MDC Tabs'},
50+
{path: 'mdc-progress-bar', title: 'MDC Progress bar'},
51+
{path: 'mdc-progress-spinner', title: 'MDC Progress spinner'}
52+
];
1553
}
Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,17 @@
1-
<mat-progress-bar mode="determinate" [value]="determinateValue"></mat-progress-bar>
2-
<mat-progress-bar mode="buffer" [value]="bufferValue"></mat-progress-bar>
3-
<mat-progress-bar mode="query"></mat-progress-bar>
4-
<mat-progress-bar mode="indeterminate"></mat-progress-bar>
1+
<mat-progress-bar
2+
aria-label="Determinate progress bar"
3+
mode="determinate"
4+
[value]="determinateValue"></mat-progress-bar>
5+
6+
<mat-progress-bar
7+
aria-label="Buffer progress bar"
8+
mode="buffer"
9+
[value]="bufferValue"></mat-progress-bar>
10+
11+
<mat-progress-bar
12+
aria-label="Query progress bar"
13+
mode="query"></mat-progress-bar>
14+
15+
<mat-progress-bar
16+
aria-label="Determinate progress bar"
17+
mode="indeterminate"></mat-progress-bar>
Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1-
<mat-progress-spinner [value]="value" [strokeWidth]="strokeWidth"></mat-progress-spinner>
2-
<mat-progress-spinner mode="indeterminate" [diameter]="diameter"></mat-progress-spinner>
3-
<mat-spinner></mat-spinner>
1+
<mat-progress-spinner
2+
aria-label="Determinate progress spinner"
3+
[value]="value"
4+
[strokeWidth]="strokeWidth"></mat-progress-spinner>
5+
6+
<mat-progress-spinner
7+
aria-label="Indeterminate progress spinner"
8+
mode="indeterminate"
9+
[diameter]="diameter"></mat-progress-spinner>
10+
11+
<mat-spinner aria-label="Shorthand indeterminate progress spinner"></mat-spinner>
Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,17 @@
1-
<mat-progress-bar mode="determinate" [value]="determinateValue"></mat-progress-bar>
2-
<mat-progress-bar mode="buffer" [value]="bufferValue"></mat-progress-bar>
3-
<mat-progress-bar mode="query"></mat-progress-bar>
4-
<mat-progress-bar mode="indeterminate"></mat-progress-bar>
1+
<mat-progress-bar
2+
aria-label="Determinate progress bar"
3+
mode="determinate"
4+
[value]="determinateValue"></mat-progress-bar>
5+
6+
<mat-progress-bar
7+
aria-label="Buffer progress bar"
8+
mode="buffer"
9+
[value]="bufferValue"></mat-progress-bar>
10+
11+
<mat-progress-bar
12+
aria-label="Query progress bar"
13+
mode="query"></mat-progress-bar>
14+
15+
<mat-progress-bar
16+
aria-label="Determinate progress bar"
17+
mode="indeterminate"></mat-progress-bar>
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1-
<mat-progress-spinner [value]="57"></mat-progress-spinner>
2-
<mat-progress-spinner mode="indeterminate"></mat-progress-spinner>
3-
<mat-spinner></mat-spinner>
1+
<mat-progress-spinner
2+
aria-label="Determinate progress spinner"
3+
[value]="57"></mat-progress-spinner>
4+
5+
<mat-progress-spinner
6+
aria-label="Indeterminate progress spinner"
7+
mode="indeterminate"></mat-progress-spinner>
8+
9+
<mat-spinner aria-label="Shorthand indeterminate progress spinner"></mat-spinner>

src/e2e-app/protractor.conf.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@ exports.config = {
1818

1919
// Disable color contrast checks since the final colors will vary based on the theme.
2020
{id: 'color-contrast', enabled: false},
21+
22+
// Don't require all content to be inside landmarks since some tests depend on the
23+
// page layout and moving this around can break them.
24+
{id: 'region', enabled: false},
25+
26+
// Don't require at least one `<h1>` since we don't have any content.
27+
{id: 'page-has-heading-one', enabled: false}
2128
]
2229
}
2330
],

src/e2e-app/test_suite.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ def e2e_test_suite(name, data = [], tags = ["e2e"], deps = []):
66
configuration = "//src/e2e-app:protractor.conf.js",
77
data = [
88
"//tools/axe-protractor",
9-
"@npm//axe-webdriverjs",
9+
"@npm//@axe-core/webdriverjs",
1010
] + data,
1111
on_prepare = "//src/e2e-app:start-devserver.js",
1212
server = "//src/e2e-app:devserver",

src/e2e-app/virtual-scroll/virtual-scroll-e2e.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<section class="demo-virtual-scroll-uniform-size">
22
<h3>Uniform size</h3>
3-
<cdk-virtual-scroll-viewport class="demo-viewport" autosize>
3+
<cdk-virtual-scroll-viewport class="demo-viewport" autosize tabindex="0">
44
<div *cdkVirtualFor="let size of uniformItems; let i = index; let odd = odd" class="demo-item"
55
[style.height.px]="size" [class.demo-odd]="odd" [attr.data-index]="i">
66
Uniform Item #{{i}} - ({{size}}px)
@@ -10,7 +10,7 @@ <h3>Uniform size</h3>
1010

1111
<section class="demo-virtual-scroll-variable-size">
1212
<h3>Random size</h3>
13-
<cdk-virtual-scroll-viewport class="demo-viewport" autosize>
13+
<cdk-virtual-scroll-viewport class="demo-viewport" autosize tabindex="0">
1414
<div *cdkVirtualFor="let size of variableItems; let i = index; let odd = odd" class="demo-item"
1515
[style.height.px]="size" [class.demo-odd]="odd" [attr.data-index]="i">
1616
Variable Item #{{i}} - ({{size}}px)

tools/axe-protractor/index.js

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* Protractor Plugin to run axe-core accessibility audits after Angular bootstrapped.
55
*/
66

7-
const AxeBuilder = require('axe-webdriverjs');
7+
const AxeBuilder = require('@axe-core/webdriverjs');
88
const {buildMessage} = require('./build-message');
99

1010
/* List of pages which were already checked by axe-core and shouldn't run again */
@@ -13,10 +13,19 @@ const checkedPages = [];
1313
/**
1414
* Protractor plugin hook which always runs when Angular successfully bootstrapped.
1515
*/
16-
async function onPageStable() {
17-
await AxeBuilder(browser.driver)
18-
.configure(this.config || {})
19-
.analyze(results => handleResults(this, results));
16+
function onPageStable() {
17+
return new Promise((resolve, reject) => {
18+
new AxeBuilder(browser.driver)
19+
.configure(this.config || {})
20+
.analyze((err, results) => {
21+
if (err) {
22+
reject(err);
23+
} else {
24+
handleResults(this, results);
25+
resolve(results);
26+
}
27+
});
28+
});
2029
}
2130

2231
/**
@@ -26,22 +35,15 @@ async function onPageStable() {
2635
* @param {!axe.AxeResults} results
2736
*/
2837
function handleResults(context, results) {
29-
3038
if (checkedPages.indexOf(results.url) === -1) {
31-
3239
checkedPages.push(results.url);
3340

3441
results.violations.forEach(violation => {
35-
3642
let specName = `${violation.help} (${results.url})`;
3743
let message = '\n' + buildMessage(violation);
38-
3944
context.addFailure(message, {specName});
40-
4145
});
42-
4346
}
44-
4547
}
4648

4749
exports.name = 'protractor-axe';

yarn.lock

Lines changed: 31 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,14 @@
201201
call-me-maybe "^1.0.1"
202202
js-yaml "^3.13.1"
203203

204+
"@axe-core/webdriverjs@^4.1.0":
205+
version "4.1.0"
206+
resolved "https://registry.yarnpkg.com/@axe-core/webdriverjs/-/webdriverjs-4.1.0.tgz#ce22d795e33d02a4e2b3ad59d698f0b111e4e72a"
207+
integrity sha512-I6YFiR3XzdCd+Id3LdsliEw04l9M2lFl0EIiPAweoW2E5AlQ5Jk+a4q4GLYWpdQE6RWSs0DvmS8JfF+u0R823w==
208+
dependencies:
209+
axe-core "^4.1.1"
210+
babel-runtime "^6.26.0"
211+
204212
"@babel/code-frame@^7.0.0":
205213
version "7.0.0"
206214
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
@@ -2756,18 +2764,10 @@ aws4@^1.8.0:
27562764
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428"
27572765
integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==
27582766

2759-
axe-core@^2.6.1:
2760-
version "2.6.1"
2761-
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-2.6.1.tgz#28772c4f76966d373acda35b9a409299dc00d1b5"
2762-
integrity sha512-QFfI3d+x/v92HJWGBaNfgrxdfon9/xXzd04YYfm5w5NJQOLex8qkJCctOt7+ky6e1l9zcQ5E7jsvbnTgQzyfTw==
2763-
2764-
axe-webdriverjs@^1.1.1:
2765-
version "1.3.0"
2766-
resolved "https://registry.yarnpkg.com/axe-webdriverjs/-/axe-webdriverjs-1.3.0.tgz#3fbef17de7fe19972dc2deb3419a574d712c3912"
2767-
integrity sha512-DGjz5DqQ+btGCj49cFSF+ZK9UWcYCwXiYqIlfBDBbPAen2u/plEUsHBiQODpkhTpbFdnUgCwxf6cwaP8Ku6hCw==
2768-
dependencies:
2769-
axe-core "^2.6.1"
2770-
selenium-webdriver ">= 2.53.1"
2767+
axe-core@^4.1.1:
2768+
version "4.1.1"
2769+
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.1.1.tgz#70a7855888e287f7add66002211a423937063eaf"
2770+
integrity sha512-5Kgy8Cz6LPC9DJcNb3yjAXTu3XihQgEdnIg50c//zOC/MyLP0Clg+Y8Sh9ZjjnvBrDZU4DgXS9C3T9r4/scGZQ==
27712771

27722772
axios@0.19.0:
27732773
version "0.19.0"
@@ -2784,6 +2784,14 @@ axobject-query@2.0.2:
27842784
dependencies:
27852785
ast-types-flow "0.0.7"
27862786

2787+
babel-runtime@^6.26.0:
2788+
version "6.26.0"
2789+
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
2790+
integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
2791+
dependencies:
2792+
core-js "^2.4.0"
2793+
regenerator-runtime "^0.11.0"
2794+
27872795
bach@^1.0.0:
27882796
version "1.2.0"
27892797
resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880"
@@ -4211,6 +4219,11 @@ copy-props@^2.0.1:
42114219
each-props "^1.3.0"
42124220
is-plain-object "^2.0.1"
42134221

4222+
core-js@^2.4.0:
4223+
version "2.6.12"
4224+
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
4225+
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
4226+
42144227
core-js@^2.6.9:
42154228
version "2.6.10"
42164229
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f"
@@ -8812,23 +8825,6 @@ meow@^8.0.0:
88128825
type-fest "^0.18.0"
88138826
yargs-parser "^20.2.3"
88148827

8815-
meow@^8.0.0:
8816-
version "8.0.0"
8817-
resolved "https://registry.yarnpkg.com/meow/-/meow-8.0.0.tgz#1aa10ee61046719e334ffdc038bb5069250ec99a"
8818-
integrity sha512-nbsTRz2fwniJBFgUkcdISq8y/q9n9VbiHYbfwklFh5V4V2uAcxtKQkDc0yCLPM/kP0d+inZBewn3zJqewHE7kg==
8819-
dependencies:
8820-
"@types/minimist" "^1.2.0"
8821-
camelcase-keys "^6.2.2"
8822-
decamelize-keys "^1.1.0"
8823-
hard-rejection "^2.1.0"
8824-
minimist-options "4.1.0"
8825-
normalize-package-data "^3.0.0"
8826-
read-pkg-up "^7.0.1"
8827-
redent "^3.0.0"
8828-
trim-newlines "^3.0.0"
8829-
type-fest "^0.18.0"
8830-
yargs-parser "^20.2.3"
8831-
88328828
merge-descriptors@1.0.1:
88338829
version "1.0.1"
88348830
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
@@ -10761,6 +10757,11 @@ regenerate@^1.2.1:
1076110757
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
1076210758
integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
1076310759

10760+
regenerator-runtime@^0.11.0:
10761+
version "0.11.1"
10762+
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
10763+
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
10764+
1076410765
regex-not@^1.0.0, regex-not@^1.0.2:
1076510766
version "1.0.2"
1076610767
resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
@@ -11347,7 +11348,7 @@ selenium-webdriver@3.5.0:
1134711348
tmp "0.0.30"
1134811349
xml2js "^0.4.17"
1134911350

11350-
selenium-webdriver@3.6.0, "selenium-webdriver@>= 2.53.1", selenium-webdriver@^3.0.1, selenium-webdriver@^3.6.0:
11351+
selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1, selenium-webdriver@^3.6.0:
1135111352
version "3.6.0"
1135211353
resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc"
1135311354
integrity sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==
@@ -12804,11 +12805,6 @@ type-fest@^0.18.0:
1280412805
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
1280512806
integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==
1280612807

12807-
type-fest@^0.18.0:
12808-
version "0.18.1"
12809-
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
12810-
integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==
12811-
1281212808
type-fest@^0.6.0:
1281312809
version "0.6.0"
1281412810
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"

0 commit comments

Comments
 (0)