Icu 16546 upgrade ember for admin UI (#2793)

* v4.12.2...v5.12.0

* chore: 🤖 yarn.lock changes

* chore: 🤖 ember init blueprint changes

* chore: 🤖 yarn.lock file changes

* style: 💄 run linter and formatter

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16546
This commit is contained in:
Lisbet Alvarez authored and GitHub committed 2025-04-25 14:39:59 -07:00
1 parent 93a57f26ee
commit 620f822504
24 files changed
+186 -146

No files matched your search

+3 -3
View File
@@ -12,8 +12,8 @@ insert_final_newline = true
indent_style = space
indent_size = 2
[*.{diff,md}]
trim_trailing_whitespace = false
[*.hbs]
insert_final_newline = false
[*.{diff,md}]
trim_trailing_whitespace = false
-8
View File
@@ -1,12 +1,4 @@
{
/**
Ember CLI sends analytics information by default. The data is completely
anonymous, but there are times when you might want to disable this behavior.
Setting `disableAnalytics` to true will prevent any data from being sent.
*/
"disableAnalytics": false,
/**
Setting `isTypeScriptProject` to true will force the blueprint generators to generate TypeScript
rather than JavaScript by default, when a TypeScript version of a given blueprint is available.
+1 -12
View File
@@ -1,25 +1,14 @@
# unconventional js
/blueprints/*/files/
/vendor/
# compiled output
/declarations/
/dist/
/tmp/
# dependencies
/bower_components/
/node_modules/
# misc
/coverage/
!.*
.*/
.eslintcache
# ember-try
/.node_modules.ember-try/
/bower.json.ember-try
/npm-shrinkwrap.json.ember-try
/package.json.ember-try
/package-lock.json.ember-try
/yarn.lock.ember-try
+6 -4
View File
@@ -11,17 +11,19 @@ module.exports = {
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
// This is specific babel-config. If grows consider creating a babel config file
requireConfigFile: false,
babelOptions: {
plugins: [
['@babel/plugin-proposal-decorators', { decoratorsBeforeExport: true }],
],
},
// end of babel-config
},
plugins: ['ember'],
extends: ['eslint:recommended', 'plugin:ember/recommended', 'prettier'],
extends: [
'eslint:recommended',
'plugin:ember/recommended',
'plugin:prettier/recommended',
],
env: {
browser: true,
},
@@ -57,7 +59,7 @@ module.exports = {
extends: ['plugin:n/recommended'],
},
{
// Test files:
// test files
files: ['tests/**/*-test.{js,ts}'],
extends: ['plugin:qunit/recommended'],
rules: {
+25
View File
@@ -0,0 +1,25 @@
# compiled output
/dist/
/declarations/
# dependencies
/node_modules/
# misc
/.env*
/.pnp*
/.eslintcache
/coverage/
/npm-debug.log*
/testem.log
/yarn-error.log
# ember-try
/.node_modules.ember-try/
/npm-shrinkwrap.json.ember-try
/package.json.ember-try
/package-lock.json.ember-try
/yarn.lock.ember-try
# broccoli-debug
/DEBUG/
+1 -13
View File
@@ -1,25 +1,13 @@
# unconventional js
/blueprints/*/files/
/vendor/
# compiled output
/dist/
/tmp/
# dependencies
/bower_components/
/node_modules/
# misc
/coverage/
!.*
.eslintcache
.lint-todo/
.*/
# ember-try
/.node_modules.ember-try/
/bower.json.ember-try
/npm-shrinkwrap.json.ember-try
/package.json.ember-try
/package-lock.json.ember-try
/yarn.lock.ember-try
+2
View File
@@ -3,6 +3,8 @@
* SPDX-License-Identifier: BUSL-1.1
*/
'use strict';
module.exports = {
singleQuote: true,
printWidth: 80,
+1 -1
View File
@@ -1,3 +1,3 @@
{
"ignore_dirs": ["tmp", "dist"]
"ignore_dirs": ["dist"]
}
+8 -8
View File
@@ -54,9 +54,9 @@ List of available project commands. `yarn run <command-name>`
## Running / Development
* `ember serve`
* Visit your app at [http://localhost:4200](http://localhost:4200).
* Visit your tests at [http://localhost:4200/tests](http://localhost:4200/tests).
- `ember serve`
- Visit your app at [http://localhost:4200](http://localhost:4200).
- Visit your tests at [http://localhost:4200/tests](http://localhost:4200/tests).
### Building for Production
@@ -102,8 +102,8 @@ Specify what it takes to deploy your app.
## Further Reading / Useful Links
* [ember.js](https://emberjs.com/)
* [ember-cli](https://cli.emberjs.com/release/)
* Development Browser Extensions
* [ember inspector for chrome](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi)
* [ember inspector for firefox](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/)
- [ember.js](https://emberjs.com/)
- [ember-cli](https://cli.emberjs.com/release/)
- Development Browser Extensions
- [ember inspector for chrome](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi)
- [ember inspector for firefox](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/)
+7 -10
View File
@@ -1,24 +1,21 @@
<!doctype html>
<!--
Copyright (c) HashiCorp, Inc.
SPDX-License-Identifier: BUSL-1.1
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta charset="utf-8">
<title>Admin</title>
<meta
name="description"
content="Simple and secure remote access with HashiCorp Boundary."
/>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#f24c53" />
<meta name="description" content="Simple and secure remote access with HashiCorp Boundary.">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#f24c53">
{{content-for "head"}}
<link integrity="" rel="stylesheet" href="{{rootURL}}assets/vendor.css" />
<link integrity="" rel="stylesheet" href="{{rootURL}}assets/admin.css" />
<link integrity="" rel="stylesheet" href="{{rootURL}}assets/vendor.css">
<link integrity="" rel="stylesheet" href="{{rootURL}}assets/admin.css">
<link rel="icon" type="image/svg+xml" href="{{rootURL}}core/logo-app.svg" />
@@ -18,7 +18,7 @@ export default class ScopesScopeWorkersWorkerCreateTagsRoute extends Route {
async willTransition(transition) {
// eslint-disable-next-line ember/no-controller-access-in-routes
const controller = this.controllerFor(this.routeName);
if (controller.get('apiTags').length) {
if (controller.apiTags.length) {
transition.abort();
try {
await this.confirm.confirm(this.intl.t('questions.abandon-confirm'), {
+6 -2
View File
@@ -3,13 +3,17 @@
"packages": [
{
"name": "ember-cli",
"version": "4.12.2",
"version": "5.12.0",
"blueprints": [
{
"name": "app",
"outputRepo": "https://github.com/ember-cli/ember-new-output",
"codemodsSource": "ember-app-codemods-manifest@1",
"isBaseBlueprint": true
"isBaseBlueprint": true,
"options": [
"--no-welcome",
"--yarn"
]
}
]
}
+2 -1
View File
@@ -2,5 +2,6 @@
"application-template-wrapper": false,
"default-async-observers": true,
"jquery-integration": false,
"template-only-glimmer-components": true
"template-only-glimmer-components": true,
"no-implicit-route-model": true
}
+26 -24
View File
@@ -16,8 +16,8 @@
"build:oss": "EDITION=oss ember build --environment=production",
"build:enterprise": "EDITION=enterprise ember build --environment=production",
"build:hcp": "EDITION=hcp ember build --environment=production",
"lint": "concurrently \"npm:lint:*(!fix)\" --names \"lint:\"",
"lint:fix": "concurrently \"npm:lint:*:fix\" --names \"fix:\"",
"lint": "concurrently \"yarn:lint:*(!fix)\" --names \"lint:\"",
"lint:fix": "concurrently \"yarn:lint:*:fix\" --names \"fix:\"",
"lint:hbs": "ember-template-lint .",
"lint:hbs:fix": "ember-template-lint . --fix",
"lint:js": "eslint .",
@@ -42,32 +42,33 @@
},
"devDependencies": {
"@babel/core": "^7.26.10",
"@babel/eslint-parser": "^7.21.3",
"@babel/plugin-proposal-decorators": "^7.21.0",
"@ember/optional-features": "^2.0.0",
"@babel/eslint-parser": "^7.25.1",
"@babel/plugin-proposal-decorators": "^7.24.7",
"@ember/optional-features": "^2.1.0",
"@ember/render-modifiers": "^2.0.4",
"@ember/string": "^3.0.1",
"@ember/test-helpers": "^4.0.5",
"@ember/string": "^4.0.0",
"@ember/test-helpers": "^3.3.1",
"@embroider/macros": "^1.16.9",
"@faker-js/faker": "^8.0.2",
"@glimmer/component": "^1.1.2",
"@glimmer/tracking": "^1.1.2",
"@hashicorp/ember-asciinema-player": "https://github.com/hashicorp/ember-asciinema-player.git#e047a096039cff70234c232efe75dcad74c6358a",
"@warp-drive/build-config": "^0.0.2",
"babel-loader": "^9.2.1",
"broccoli-asset-rev": "^3.0.0",
"concurrently": "^9.1.0",
"core": "workspace:*",
"doctoc": "^2.2.0",
"ember-a11y-testing": "^7.0.0",
"ember-auto-import": "^2.10.0",
"ember-cli": "^5.12.0",
"ember-cli": "~5.12.0",
"ember-cli-app-version": "^7.0.0",
"ember-cli-babel": "^8.2.0",
"ember-cli-clean-css": "^3.0.0",
"ember-cli-code-coverage": "^1.0.3",
"ember-cli-content-security-policy": "^2.0.3",
"ember-cli-dependency-checker": "^3.3.2",
"ember-cli-flash": "^4.0.0",
"ember-cli-htmlbars": "^6.2.0",
"ember-cli-htmlbars": "^6.3.0",
"ember-cli-inject-live-reload": "^2.1.0",
"ember-cli-sass": "^11.0.1",
"ember-cli-sri": "^2.1.1",
@@ -76,31 +77,32 @@
"ember-exam": "^8.0.0",
"ember-inline-svg": "^1.0.1",
"ember-load-initializers": "^2.1.2",
"ember-modifier": "^4.1.0",
"ember-page-title": "^7.0.0",
"ember-modifier": "^4.2.0",
"ember-page-title": "^8.2.3",
"ember-qunit": "^8.1.0",
"ember-resolver": "^10.0.0",
"ember-source": "~4.12.0",
"ember-template-lint": "^5.7.2",
"ember-resolver": "^12.0.1",
"ember-source": "~5.12.0",
"ember-template-lint": "^6.0.0",
"ember-template-lint-plugin-prettier": "^5.0.0",
"eslint": "^8.54.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-ember": "^11.11.1",
"eslint-plugin-n": "^16.3.1",
"eslint-plugin-qunit": "^8.0.1",
"eslint": "^8.57.1",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-ember": "^12.2.1",
"eslint-plugin-n": "^16.6.2",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-qunit": "^8.1.2",
"js-bexpr": "hashicorp/js-bexpr#9b4a4b54d85eba67fdfc0990133d1518d890b1e1",
"loader.js": "^4.7.0",
"postcss": "^8.4.31",
"prettier": "^3.0.0",
"prettier": "^3.3.3",
"qunit": "^2.22.0",
"qunit-dom": "^3.2.1",
"rose": "workspace:*",
"sinon": "^19.0.2",
"stylelint": "^15.10.1",
"stylelint": "^15.11.0",
"stylelint-config-prettier-scss": "^0.0.1",
"stylelint-config-standard-scss": "^11.0.0",
"tracked-built-ins": "^3.1.1",
"webpack": "^5.94.0"
"tracked-built-ins": "^3.3.0",
"webpack": "^5.95.0"
},
"engines": {
"node": "20.* || 22.*"
+1 -1
View File
@@ -13,7 +13,7 @@ import {
authenticateSession,
} from 'ember-simple-auth/test-support';
// This file exists to provide wrappers around ember-qunit's / ember-mocha's
// This file exists to provide wrappers around ember-qunit's
// test setup functions. This way, you can easily extend the setup that is
// needed per test type.
+15 -11
View File
@@ -1,26 +1,29 @@
<!doctype html>
<!--
Copyright (c) HashiCorp, Inc.
SPDX-License-Identifier: BUSL-1.1
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta charset="utf-8">
<title>Admin Tests</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
{{content-for "head"}} {{content-for "test-head"}}
{{content-for "head"}}
{{content-for "test-head"}}
<link rel="stylesheet" href="{{rootURL}}assets/vendor.css" />
<link rel="stylesheet" href="{{rootURL}}assets/admin.css" />
<link rel="stylesheet" href="{{rootURL}}assets/test-support.css" />
<link rel="stylesheet" href="{{rootURL}}assets/vendor.css">
<link rel="stylesheet" href="{{rootURL}}assets/admin.css">
<link rel="stylesheet" href="{{rootURL}}assets/test-support.css">
{{content-for "head-footer"}} {{content-for "test-head-footer"}}
{{content-for "head-footer"}}
{{content-for "test-head-footer"}}
</head>
<body>
{{content-for "body"}} {{content-for "test-body"}}
{{content-for "body"}}
{{content-for "test-body"}}
<div id="qunit"></div>
<div id="qunit-fixture">
@@ -35,6 +38,7 @@
<script src="{{rootURL}}assets/admin.js"></script>
<script src="{{rootURL}}assets/tests.js"></script>
{{content-for "body-footer"}} {{content-for "test-body-footer"}}
{{content-for "body-footer"}}
{{content-for "test-body-footer"}}
</body>
</html>
@@ -17,10 +17,10 @@ module(
this.set('value', 'Skeleton Message');
await render(hbs`
<Form::Field::JsonSecret::Skeleton>
{{this.value}}
</Form::Field::JsonSecret::Skeleton>
`);
<Form::Field::JsonSecret::Skeleton>
{{this.value}}
</Form::Field::JsonSecret::Skeleton>
`);
assert.dom('.secret-editor-skeleton-wrapper').isVisible();
assert.dom('.secret-editor-skeleton-message').hasText('Skeleton Message');
});
@@ -18,15 +18,15 @@ module(
this.set('egressWorker', 'Egress Worker');
await render(hbs`
<OrderedSeriesDiagram::Group @title='Private Network' @color='highlight'>
<OrderedSeriesDiagram::Item @icon='user'>
{{this.client}}
</OrderedSeriesDiagram::Item>
<OrderedSeriesDiagram::Item @icon='settings'>
{{this.egressWorker}}
</OrderedSeriesDiagram::Item>
</OrderedSeriesDiagram::Group>
`);
<OrderedSeriesDiagram::Group @title='Private Network' @color='highlight'>
<OrderedSeriesDiagram::Item @icon='user'>
{{this.client}}
</OrderedSeriesDiagram::Item>
<OrderedSeriesDiagram::Item @icon='settings'>
{{this.egressWorker}}
</OrderedSeriesDiagram::Item>
</OrderedSeriesDiagram::Group>
`);
assert
.dom('.ordered-series-diagram-group-content')
@@ -18,11 +18,11 @@ module(
this.set('egressWorker', 'Egress Worker');
await render(hbs`
<OrderedSeriesDiagram as |D|>
<D.Item @icon='user'>{{this.client}}</D.Item>
<D.Item @icon='settings'>{{this.egressWorker}}</D.Item>
</OrderedSeriesDiagram>
`);
<OrderedSeriesDiagram as |D|>
<D.Item @icon='user'>{{this.client}}</D.Item>
<D.Item @icon='settings'>{{this.egressWorker}}</D.Item>
</OrderedSeriesDiagram>
`);
assert.dom('[data-test-icon="user"]').isVisible();
assert.dom('.ordered-series-diagram-item-title').hasText('Client');
@@ -17,10 +17,10 @@ module(
this.set('client', 'Client');
await render(hbs`
<OrderedSeriesDiagram::Item @icon='user'>
{{this.client}}
</OrderedSeriesDiagram::Item>
`);
<OrderedSeriesDiagram::Item @icon='user'>
{{this.client}}
</OrderedSeriesDiagram::Item>
`);
assert.dom('[data-test-icon="user"]').isVisible();
assert.dom('.ordered-series-diagram-item-title').hasText('Client');
@@ -19,8 +19,8 @@ module(
this.set('model', { id: 'w_123' });
await render(hbs`
<Workers::Worker::Header @model={{this.model}} />
`);
<Workers::Worker::Header @model={{this.model}} />
`);
assert.dom(this.element).includesText('w_123');
});
@@ -32,7 +32,9 @@ module('Unit | Instance Initializer | feature-edition', function (hooks) {
});
hooks.afterEach(function () {
// eslint-disable-next-line ember/no-runloop
run(this.instance, 'destroy');
// eslint-disable-next-line ember/no-runloop
run(this.application, 'destroy');
});
+1 -1
View File
@@ -1,6 +1,6 @@
# compiled output
/dist/
/tmp/
/declarations/
# dependencies
/node_modules/
+54 -22
View File
@@ -5563,6 +5563,13 @@ __metadata:
languageName: node
linkType: hard
"@ember/string@npm:^4.0.0":
version: 4.0.1
resolution: "@ember/string@npm:4.0.1"
checksum: 10c0/c30f4596d2ea0e64d5e37fd218dc823f35d72329b0cf7645eb86ffb1e55ca257bb3b84924ac11672c8b2d445ba4c8783bb754907921927156e5f6ab9a2731e9c
languageName: node
linkType: hard
"@ember/test-helpers@npm:^3.3.1":
version: 3.3.1
resolution: "@ember/test-helpers@npm:3.3.1"
@@ -8458,33 +8465,34 @@ __metadata:
resolution: "admin@workspace:ui/admin"
dependencies:
"@babel/core": "npm:^7.26.10"
"@babel/eslint-parser": "npm:^7.21.3"
"@babel/plugin-proposal-decorators": "npm:^7.21.0"
"@babel/eslint-parser": "npm:^7.25.1"
"@babel/plugin-proposal-decorators": "npm:^7.24.7"
"@babel/runtime": "npm:7.12.18"
"@ember/optional-features": "npm:^2.0.0"
"@ember/optional-features": "npm:^2.1.0"
"@ember/render-modifiers": "npm:^2.0.4"
"@ember/string": "npm:^3.0.1"
"@ember/test-helpers": "npm:^4.0.5"
"@ember/string": "npm:^4.0.0"
"@ember/test-helpers": "npm:^3.3.1"
"@embroider/macros": "npm:^1.16.9"
"@faker-js/faker": "npm:^8.0.2"
"@glimmer/component": "npm:^1.1.2"
"@glimmer/tracking": "npm:^1.1.2"
"@hashicorp/ember-asciinema-player": "https://github.com/hashicorp/ember-asciinema-player.git#e047a096039cff70234c232efe75dcad74c6358a"
"@warp-drive/build-config": "npm:^0.0.2"
babel-loader: "npm:^9.2.1"
broccoli-asset-rev: "npm:^3.0.0"
concurrently: "npm:^9.1.0"
core: "workspace:*"
doctoc: "npm:^2.2.0"
ember-a11y-testing: "npm:^7.0.0"
ember-auto-import: "npm:^2.10.0"
ember-cli: "npm:^5.12.0"
ember-cli: "npm:~5.12.0"
ember-cli-app-version: "npm:^7.0.0"
ember-cli-babel: "npm:^8.2.0"
ember-cli-clean-css: "npm:^3.0.0"
ember-cli-code-coverage: "npm:^1.0.3"
ember-cli-content-security-policy: "npm:^2.0.3"
ember-cli-dependency-checker: "npm:^3.3.2"
ember-cli-flash: "npm:^4.0.0"
ember-cli-htmlbars: "npm:^6.2.0"
ember-cli-htmlbars: "npm:^6.3.0"
ember-cli-inject-live-reload: "npm:^2.1.0"
ember-cli-sass: "npm:^11.0.1"
ember-cli-sri: "npm:^2.1.1"
@@ -8493,34 +8501,35 @@ __metadata:
ember-exam: "npm:^8.0.0"
ember-inline-svg: "npm:^1.0.1"
ember-load-initializers: "npm:^2.1.2"
ember-modifier: "npm:^4.1.0"
ember-modifier: "npm:^4.2.0"
ember-named-blocks-polyfill: "npm:^0.2.5"
ember-page-title: "npm:^7.0.0"
ember-page-title: "npm:^8.2.3"
ember-qunit: "npm:^8.1.0"
ember-resolver: "npm:^10.0.0"
ember-source: "npm:~4.12.0"
ember-template-lint: "npm:^5.7.2"
ember-resolver: "npm:^12.0.1"
ember-source: "npm:~5.12.0"
ember-template-lint: "npm:^6.0.0"
ember-template-lint-plugin-prettier: "npm:^5.0.0"
eslint: "npm:^8.54.0"
eslint-config-prettier: "npm:^9.0.0"
eslint-plugin-ember: "npm:^11.11.1"
eslint-plugin-n: "npm:^16.3.1"
eslint-plugin-qunit: "npm:^8.0.1"
eslint: "npm:^8.57.1"
eslint-config-prettier: "npm:^9.1.0"
eslint-plugin-ember: "npm:^12.2.1"
eslint-plugin-n: "npm:^16.6.2"
eslint-plugin-prettier: "npm:^5.2.1"
eslint-plugin-qunit: "npm:^8.1.2"
js-bexpr: "hashicorp/js-bexpr#9b4a4b54d85eba67fdfc0990133d1518d890b1e1"
loader.js: "npm:^4.7.0"
lodash: "npm:^4.17.21"
postcss: "npm:^8.4.31"
prettier: "npm:^3.0.0"
prettier: "npm:^3.3.3"
qunit: "npm:^2.22.0"
qunit-dom: "npm:^3.2.1"
rose: "workspace:*"
sinon: "npm:^19.0.2"
stylelint: "npm:^15.10.1"
stylelint: "npm:^15.11.0"
stylelint-config-prettier-scss: "npm:^0.0.1"
stylelint-config-standard-scss: "npm:^11.0.0"
tracked-built-ins: "npm:^3.1.1"
tracked-built-ins: "npm:^3.3.0"
uuid: "npm:^11.0.3"
webpack: "npm:^5.94.0"
webpack: "npm:^5.95.0"
languageName: unknown
linkType: soft
@@ -12534,6 +12543,18 @@ __metadata:
languageName: node
linkType: hard
"ember-cli-app-version@npm:^7.0.0":
version: 7.0.0
resolution: "ember-cli-app-version@npm:7.0.0"
dependencies:
ember-cli-babel: "npm:^7.26.11"
git-repo-info: "npm:^2.1.1"
peerDependencies:
ember-source: ^3.28.0 || >= 4.0.0
checksum: 10c0/6c3d31f74dd03d43c6b80d1496474daeace7799ce3f51f0273f5a728650a274adf2f0701cea7a42b238aafbfbcc00f7517fd10293ca46484efb2354288f2b733
languageName: node
linkType: hard
"ember-cli-babel-plugin-helpers@npm:^1.0.0, ember-cli-babel-plugin-helpers@npm:^1.1.0, ember-cli-babel-plugin-helpers@npm:^1.1.1":
version: 1.1.1
resolution: "ember-cli-babel-plugin-helpers@npm:1.1.1"
@@ -24995,6 +25016,17 @@ __metadata:
languageName: node
linkType: hard
"tracked-built-ins@npm:^3.3.0":
version: 3.4.0
resolution: "tracked-built-ins@npm:3.4.0"
dependencies:
"@embroider/addon-shim": "npm:^1.8.7"
decorator-transforms: "npm:^2.0.0"
ember-tracked-storage-polyfill: "npm:^1.0.0"
checksum: 10c0/db53509dd5910d0472976593a2b2ce3fc27f6e81c73eea850fbfdc2deafe5b64aa2dca6bcb1c727a3761dbdc182e7ec2da3243e83c82164e87ec47b61caa802d
languageName: node
linkType: hard
"tracked-maps-and-sets@npm:^3.0.2":
version: 3.0.2
resolution: "tracked-maps-and-sets@npm:3.0.2"