diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000000..448f24a86e --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,168 @@ +import jsdoc from "eslint-plugin-jsdoc"; +import preferArrow from "eslint-plugin-prefer-arrow"; +import typescriptEslint from "@typescript-eslint/eslint-plugin"; +import typescriptEslintTslint from "@typescript-eslint/eslint-plugin-tslint"; +import globals from "globals"; +import tsParser from "@typescript-eslint/parser"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default [...compat.extends( + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/recommended-requiring-type-checking", + "prettier", +), { + plugins: { + jsdoc, + "prefer-arrow": preferArrow, + "@typescript-eslint": typescriptEslint, + "@typescript-eslint/tslint": typescriptEslintTslint, + }, + + languageOptions: { + globals: { + ...globals.browser, + }, + + parser: tsParser, + ecmaVersion: 5, + sourceType: "module", + + parserOptions: { + project: "tsconfig.eslint.json", + }, + }, + + settings: { + typescript: {}, + }, + + rules: { + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/array-type": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/consistent-type-assertions": "error", + "@typescript-eslint/dot-notation": "error", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/only-throw-error": "off", + "@typescript-eslint/no-empty-function": "off", + + "@typescript-eslint/naming-convention": ["off", { + selector: "variable", + format: ["camelCase", "UPPER_CASE"], + leadingUnderscore: "forbid", + trailingUnderscore: "forbid", + }], + + "@typescript-eslint/no-empty-interface": "error", + "@typescript-eslint/no-unsafe-return": "warn", + "@typescript-eslint/no-unsafe-call": "warn", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/prefer-promise-reject-errors": "warn", + "@typescript-eslint/no-inferrable-types": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-misused-promises": "warn", + "@typescript-eslint/no-namespace": "off", + "@typescript-eslint/no-parameter-properties": "off", + + "@typescript-eslint/no-shadow": ["error", { + hoist: "all", + }], + + "@typescript-eslint/no-unused-expressions": "error", + + "@typescript-eslint/restrict-template-expressions": ["error", { + allowNumber: true, + allowBoolean: true, + allowAny: true, + allowArray: true, + }], + + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/prefer-function-type": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/no-require-imports": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unnecessary-type-assertion": "off", + "@typescript-eslint/quotes": "off", + + "@typescript-eslint/triple-slash-reference": ["error", { + path: "always", + types: "prefer-import", + lib: "always", + }], + + "@typescript-eslint/typedef": "off", + "@typescript-eslint/unified-signatures": "error", + "arrow-parens": ["off", "always"], + complexity: "off", + "constructor-super": "error", + "dot-notation": "off", + eqeqeq: ["error", "smart"], + "guard-for-in": "error", + "id-denylist": "error", + "id-match": "error", + "jsdoc/check-alignment": "error", + "jsdoc/check-indentation": "error", + "jsdoc/newline-after-description": "off", + "max-classes-per-file": "off", + + "max-len": ["error", { + code: 300, + }], + + "new-parens": "error", + "no-bitwise": "error", + "no-caller": "error", + "no-cond-assign": "error", + "no-console": "off", + "no-debugger": "error", + "no-empty": "off", + "no-empty-function": "off", + "no-eval": "error", + "no-fallthrough": "off", + "no-invalid-this": "off", + "no-new-wrappers": "error", + "no-return-await": "error", + "no-shadow": "off", + "no-throw-literal": "error", + "no-trailing-spaces": "error", + "no-undef-init": "error", + "no-underscore-dangle": "off", + "no-unsafe-finally": "error", + "no-unused-expressions": "off", + "no-unused-labels": "error", + "no-use-before-define": "off", + "no-var": "error", + "object-shorthand": "error", + "one-var": ["error", "never"], + "prefer-arrow/prefer-arrow-functions": "off", + "prefer-const": "error", + "prefer-template": "error", + quotes: "off", + radix: "error", + "use-isnan": "error", + "valid-typeof": "off", + + "@typescript-eslint/tslint/config": ["error", { + rules: { + "file-header": [true, "------"], + }, + }], + }, +}]; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 057b8f76ea..460d65771a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,12 +18,15 @@ "typescript": "^5.5.4" }, "devDependencies": { + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.10.0", "@types/source-map-support": "^0.5.6", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", "eslint-config-prettier": "^9.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-plugin-prettier": "^5.2.1", + "globals": "^15.9.0", "rimraf": "3.0.2" } }, @@ -320,15 +323,16 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha1-OIomnw8lwbatwxe1osVXFIlMcK0=", + "version": "3.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha1-29NIK/2R76Zjy+eqH1BoOYaCB7Y=", + "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -336,33 +340,30 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/espree": { - "version": "9.6.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/espree/-/espree-9.6.1.tgz", - "integrity": "sha1-oqF7jkNGkKVDLy+AGM5x0zGkjG8=", - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-14.0.0.tgz", + "integrity": "sha1-iY10E8Kbq89rr+Vvyt3thYrack4=", + "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -371,6 +372,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/js": { + "version": "9.10.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/js/-/js-9.10.0.tgz", + "integrity": "sha1-6qPLC67El5cLsp5DoVPQ1WUBQ8Y=", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -2292,6 +2303,29 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha1-OIomnw8lwbatwxe1osVXFIlMcK0=", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint/node_modules/@eslint/js": { "version": "8.57.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/js/-/js-8.57.0.tgz", @@ -2379,6 +2413,21 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-13.24.0.tgz", + "integrity": "sha1-hDKhnXjODB6DOUnDats0VAC7EXE=", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", @@ -2388,6 +2437,18 @@ "node": ">=8" } }, + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", @@ -2794,15 +2855,13 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-13.24.0.tgz", - "integrity": "sha1-hDKhnXjODB6DOUnDats0VAC7EXE=", + "version": "15.9.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-15.9.0.tgz", + "integrity": "sha1-6d4BdxCR/7w321cU2rSE+faf85k=", + "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5505,14 +5564,15 @@ "integrity": "sha1-sP/QMStKP9LW93I35ySKWtOmgK4=" }, "@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha1-OIomnw8lwbatwxe1osVXFIlMcK0=", + "version": "3.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha1-29NIK/2R76Zjy+eqH1BoOYaCB7Y=", + "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -5520,23 +5580,26 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "espree": { - "version": "9.6.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/espree/-/espree-9.6.1.tgz", - "integrity": "sha1-oqF7jkNGkKVDLy+AGM5x0zGkjG8=", - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } + "globals": { + "version": "14.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-14.0.0.tgz", + "integrity": "sha1-iY10E8Kbq89rr+Vvyt3thYrack4=", + "dev": true }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=" + "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=", + "dev": true } } }, + "@eslint/js": { + "version": "9.10.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/js/-/js-9.10.0.tgz", + "integrity": "sha1-6qPLC67El5cLsp5DoVPQ1WUBQ8Y=", + "dev": true + }, "@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -6582,6 +6645,22 @@ "text-table": "^0.2.0" }, "dependencies": { + "@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha1-OIomnw8lwbatwxe1osVXFIlMcK0=", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, "@eslint/js": { "version": "8.57.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/js/-/js-8.57.0.tgz", @@ -6632,11 +6711,24 @@ "eslint-visitor-keys": "^3.4.1" } }, + "globals": { + "version": "13.24.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-13.24.0.tgz", + "integrity": "sha1-hDKhnXjODB6DOUnDats0VAC7EXE=", + "requires": { + "type-fest": "^0.20.2" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=" }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=" + }, "supports-color": { "version": "7.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", @@ -7081,12 +7173,10 @@ } }, "globals": { - "version": "13.24.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-13.24.0.tgz", - "integrity": "sha1-hDKhnXjODB6DOUnDats0VAC7EXE=", - "requires": { - "type-fest": "^0.20.2" - } + "version": "15.9.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-15.9.0.tgz", + "integrity": "sha1-6d4BdxCR/7w321cU2rSE+faf85k=", + "dev": true }, "globalthis": { "version": "1.0.4", diff --git a/package.json b/package.json index 2096d48002..1d7a538fe0 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "author": "Microsoft Corporation", "scripts": { "compile-all": "build.cmd", - "lint": "eslint -c .eslintrc.js --ext=.ts vscode-dotnet-runtime-library/src/**/*.ts vscode-dotnet-runtime-extension/src/**/*.ts --ignore-pattern \"**/test/\" --fix" + "lint": "eslint -c .eslintrc.js vscode-dotnet-runtime-library/src/**/*.ts vscode-dotnet-runtime-extension/src/**/*.ts --ignore-pattern \"test/\" --fix" }, "dependencies": { "@typescript-eslint/eslint-plugin-tslint": "^7.0.2", @@ -25,12 +25,15 @@ "typescript": "^5.5.4" }, "devDependencies": { + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.10.0", "@types/source-map-support": "^0.5.6", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", "eslint-config-prettier": "^9.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-plugin-prettier": "^5.2.1", + "globals": "^15.9.0", "rimraf": "3.0.2" } } diff --git a/pipeline-templates/lint.yaml b/pipeline-templates/lint.yaml index f915beeb8e..9eb1445aa5 100644 --- a/pipeline-templates/lint.yaml +++ b/pipeline-templates/lint.yaml @@ -11,6 +11,7 @@ jobs: displayName: '🧶 ESLint' steps: - template: install-node.yaml + - script: build.cmd - bash: | npm install eslint@^8.57.0 @typescript-eslint/parser@^8.0.0 @typescript-eslint/eslint-plugin@^8.0.0 --reg https://registry.npmjs.org/ --save-dev --verbose npm run lint diff --git a/yarn.lock b/yarn.lock index 4b02d60a9d..43828dc5d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -179,6 +179,26 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/eslintrc@^3.1.0": + version "3.1.0" + resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/eslintrc/-/eslintrc-3.1.0.tgz" + integrity sha1-29NIK/2R76Zjy+eqH1BoOYaCB7Y= + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@^9.10.0": + version "9.10.0" + resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/js/-/js-9.10.0.tgz" + integrity sha1-6qPLC67El5cLsp5DoVPQ1WUBQ8Y= + "@eslint/js@8.57.0": version "8.57.0" resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/js/-/js-8.57.0.tgz" @@ -1241,7 +1261,7 @@ eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^6.0.0 || strip-ansi "^6.0.1" text-table "^0.2.0" -espree@^10.1.0: +espree@^10.0.1, espree@^10.1.0: version "10.1.0" resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/espree/-/espree-10.1.0.tgz" integrity sha1-h4ja5hFXTA8HBpH1IuQRbFoR/FY= @@ -1250,16 +1270,7 @@ espree@^10.1.0: acorn-jsx "^5.3.2" eslint-visitor-keys "^4.0.0" -espree@^9.6.0: - version "9.6.1" - resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/espree/-/espree-9.6.1.tgz" - integrity sha1-oqF7jkNGkKVDLy+AGM5x0zGkjG8= - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -espree@^9.6.1: +espree@^9.6.0, espree@^9.6.1: version "9.6.1" resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/espree/-/espree-9.6.1.tgz" integrity sha1-oqF7jkNGkKVDLy+AGM5x0zGkjG8= @@ -1499,6 +1510,16 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" +globals@^14.0.0: + version "14.0.0" + resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-14.0.0.tgz" + integrity sha1-iY10E8Kbq89rr+Vvyt3thYrack4= + +globals@^15.9.0: + version "15.9.0" + resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-15.9.0.tgz" + integrity sha1-6d4BdxCR/7w321cU2rSE+faf85k= + globalthis@^1.0.3: version "1.0.4" resolved "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globalthis/-/globalthis-1.0.4.tgz"