diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7bdfe4fd9c..f5700227e2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,6 +36,26 @@ jobs: run: yarn lint - name: test run: yarn test + publish-packages-dry-run: + needs: build_and_test + uses: ./.github/workflows/publish-packages.yml + with: + dry-run: true + publish-registry-dry-run: + needs: build_and_test + uses: ./.github/workflows/publish-registry.yml + with: + dry-run: true + retag-dry-run: + needs: build_and_test + uses: ./.github/workflows/retag.yml + with: + dry-run: true + deprecate-dry-run: + needs: build_and_test + uses: ./.github/workflows/deprecate.yml + with: + dry-run: true publish_alpha: name: publish alpha release runs-on: ubuntu-latest diff --git a/.github/workflows/deprecate.yml b/.github/workflows/deprecate.yml new file mode 100644 index 0000000000..ef33eb3b2d --- /dev/null +++ b/.github/workflows/deprecate.yml @@ -0,0 +1,37 @@ +name: Mark removed types as deprecated +#description: Loop over npm @types packages and mark as deprecated any that no longer exist in the DT repo. +on: + schedule: + # https://crontab.guru/#0_0_*_*_0 + - cron: 0 0 * * 0 + workflow_call: + inputs: + dry-run: + type: boolean + workflow_dispatch: + inputs: + dry-run: + type: boolean +jobs: + deprecate: + if: github.event_name != 'schedule' || github.repository == 'microsoft/DefinitelyTyped-tools' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + cache: yarn + - run: yarn install --frozen-lockfile + - run: yarn build + - name: Parse declarations + run: yarn workspace @definitelytyped/publisher parse + - name: Mark removed types as deprecated${{ (inputs || github.event.inputs).dry-run && ' dry run' || '' }} + run: node --require source-map-support/register packages/deprecate/${{ (inputs || github.event.inputs).dry-run && ' --dry-run' || '' }} + env: + GITHUB_TOKEN: ${{ github.token }} + NPM_TOKEN: ${{ secrets.NPM_RETAG_TOKEN }} + - if: always() + uses: actions/upload-artifact@v3 + with: + name: ${{ github.job }} + path: packages/definitions-parser/data/ diff --git a/.github/workflows/publish-packages.yml b/.github/workflows/publish-packages.yml new file mode 100644 index 0000000000..e4ea967716 --- /dev/null +++ b/.github/workflows/publish-packages.yml @@ -0,0 +1,42 @@ +name: Publish packages +#description: Find changed @types packages in the DT repo and publish them to npm. +on: + workflow_call: + inputs: + dry-run: + type: boolean + workflow_dispatch: + inputs: + dry-run: + type: boolean +jobs: + publish-packages: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + cache: yarn + - run: yarn install --frozen-lockfile + - run: yarn build + - name: Parse declarations + run: yarn workspace @definitelytyped/publisher parse + - uses: actions/cache@v3 + with: + path: packages/utils/cache/ + key: cache-${{ github.run_id }} + restore-keys: cache- + - name: Calculate versions + run: yarn workspace @definitelytyped/publisher calculate-versions + - name: Generate packages + run: yarn workspace @definitelytyped/publisher generate + - name: Publish packages${{ (inputs || github.event.inputs).dry-run && ' dry run' || '' }} + run: yarn workspace @definitelytyped/publisher publish-packages${{ (inputs || github.event.inputs).dry-run && ' --dry' || '' }} + env: + GH_API_TOKEN: ${{ github.token }} + NPM_TOKEN: ${{ secrets.NPM_RETAG_TOKEN }} + - if: always() + uses: actions/upload-artifact@v3 + with: + name: ${{ github.job }} + path: packages/definitions-parser/data/ diff --git a/.github/workflows/publish-registry.yml b/.github/workflows/publish-registry.yml index e0a8a17fe3..f8533417dd 100644 --- a/.github/workflows/publish-registry.yml +++ b/.github/workflows/publish-registry.yml @@ -1,11 +1,20 @@ name: Publish registry +#description: Publish the types-registry package to npm (a list of all @types packages in the DT repo). on: schedule: # https://crontab.guru/#0_0_*_*_0 - cron: 0 0 * * 0 + workflow_call: + inputs: + dry-run: + type: boolean workflow_dispatch: + inputs: + dry-run: + type: boolean jobs: publish-registry: + if: github.event_name != 'schedule' || github.repository == 'microsoft/DefinitelyTyped-tools' runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -21,11 +30,12 @@ jobs: path: packages/utils/cache/ key: cache-${{ github.run_id }} restore-keys: cache- - - name: Publish registry - run: yarn workspace @definitelytyped/publisher publish-registry + - name: Publish registry${{ (inputs || github.event.inputs).dry-run && ' dry run' || '' }} + run: yarn workspace @definitelytyped/publisher publish-registry${{ (inputs || github.event.inputs).dry-run && ' --dry' || '' }} env: NPM_TOKEN: ${{ secrets.NPM_RETAG_TOKEN }} - if: always() uses: actions/upload-artifact@v3 with: + name: ${{ github.job }} path: packages/definitions-parser/data/ diff --git a/.github/workflows/retag.yml b/.github/workflows/retag.yml new file mode 100644 index 0000000000..c0f813a148 --- /dev/null +++ b/.github/workflows/retag.yml @@ -0,0 +1,39 @@ +name: Update npm tags +#description: Refresh tags on all DT-published packages in the @types scope. +on: + schedule: + # https://crontab.guru/#0_0_*_*_0 + - cron: 0 0 * * 0 + workflow_call: + inputs: + dry-run: + type: boolean + workflow_dispatch: + inputs: + dry-run: + type: boolean +jobs: + retag: + if: github.event_name != 'schedule' || github.repository == 'microsoft/DefinitelyTyped-tools' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + cache: yarn + - run: yarn install --frozen-lockfile + - run: yarn build + - uses: actions/cache@v3 + with: + path: packages/utils/cache/ + key: cache-${{ github.run_id }} + restore-keys: cache- + - name: Update npm tags${{ (inputs || github.event.inputs).dry-run && ' dry run' || '' }} + run: yarn retag${{ (inputs || github.event.inputs).dry-run && ' --dry' || '' }} + env: + NPM_TOKEN: ${{ secrets.NPM_RETAG_TOKEN }} + - if: always() + uses: actions/upload-artifact@v3 + with: + name: ${{ github.job }} + path: packages/definitions-parser/data/ diff --git a/.github/workflows/update-ts-version-tags.yml b/.github/workflows/update-ts-version-tags.yml deleted file mode 100644 index 220c96e542..0000000000 --- a/.github/workflows/update-ts-version-tags.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Update ts* tags for ATA - -# For testing -# on: pull_request - -# For production -on: - workflow_dispatch: - inputs: - checkout: - description: ref to deploy - required: true - default: master - schedule: - # https://crontab.guru/#5_8_*_*_1 - - cron: "5 8 * * 1" - -jobs: - publish: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - with: - node-version: '14' - - name: retag - run: | - git clone --depth 1 https://github.com/DefinitelyTyped/DefinitelyTyped ../DefinitelyTyped - yarn - yarn build - node packages/retag/dist/index.js - env: - NPM_TOKEN: ${{ secrets.NPM_RETAG_TOKEN }} - GH_API_TOKEN: ${{ secrets.GH_API_TOKEN }} - \ No newline at end of file diff --git a/README.md b/README.md index 31d1e8ca09..f3e0956864 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ A monorepo for formerly disparate DefinitelyTyped-related tools: - [definitions-parser](packages/definitions-parser): the part of [microsoft/types-publisher](https://github.com/microsoft/types-publisher) that reads DefinitelyTyped repository data +- [deprecate](packages/publish-registry): Loop over npm @types packages and mark as deprecated any that no longer exist in the DT repo. - [dtslint](packages/dtslint): [microsoft/dtslint](https://github.com/microsoft/dtslint) - [dtslint-runner](packages/dtslint-runner): [DefinitelyTyped/dtslint-runner](https://github.com/DefinitelyTyped/dtslint-runner) - [dts-critic](packages/dts-critic): [DefinitelyTyped/dts-critic](https://github.com/DefinitelyTyped/dts-critic) diff --git a/package.json b/package.json index 703d67b994..d0054ec5c5 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "format": "prettier --write 'packages/**/*.ts'", "test": "jest", "build": "tsc -b .", - "retag": "node packages/retag/dist/retag.js" + "retag": "node --require source-map-support/register packages/retag/" }, "devDependencies": { "@types/jest": "^25.1.3", diff --git a/packages/deprecate/README.md b/packages/deprecate/README.md new file mode 100644 index 0000000000..50e5702961 --- /dev/null +++ b/packages/deprecate/README.md @@ -0,0 +1,55 @@ +# deprecate + +[![Mark removed types as deprecated](https://github.com/microsoft/DefinitelyTyped-tools/actions/workflows/deprecate.yml/badge.svg)](https://github.com/microsoft/DefinitelyTyped-tools/actions/workflows/deprecate.yml) + +Loop over npm @types packages and mark as deprecated any that no longer exist in the DT repo. + +## Use + +```sh +yarn workspace @definitelytyped/publisher parse +node packages/deprecate/ +``` + +1. [Parse declarations](../publisher/README.md#parse-the-definitions). +2. Run this package's script. + +### Options + +
+ +`--dry-run` + +
+ +Don't actually mark anything as deprecated, just show what would be done. + +
+ +### Environment variables + +
+ +`GITHUB_TOKEN` + +
+ +Required. +Used to talk to [GitHub's GraphQL API](https://docs.github.com/en/graphql/guides/forming-calls-with-graphql#authenticating-with-graphql), to find the commit/PR that removed the types. +That data is public and a GitHub Actions [automatic token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication) is sufficient. + +
+ +[`NPM_TOKEN`](https://docs.npmjs.com/about-access-tokens) + +
+ +Not required for a dry run. +Only used to actually mark @types packages as deprecated. + +
+ +## Logs + +GitHub Actions runs this package's script weekly. +You can [examine the logs](https://github.com/microsoft/DefinitelyTyped-tools/actions/workflows/deprecate.yml). diff --git a/packages/deprecate/package.json b/packages/deprecate/package.json new file mode 100644 index 0000000000..94d2271d24 --- /dev/null +++ b/packages/deprecate/package.json @@ -0,0 +1,26 @@ +{ + "name": "@definitelytyped/deprecate", + "version": "1.0.0", + "description": "Loop over npm @types packages and mark as deprecated any that no longer exist in the DT repo.", + "license": "MIT", + "main": "dist/index.js", + "scripts": { + "build": "tsc --build" + }, + "dependencies": { + "@definitelytyped/definitions-parser": "^0.0.121", + "@definitelytyped/utils": "^0.0.121", + "@octokit/graphql": "^4.8.0", + "all-the-package-names": "^2.0.176", + "pacote": "^13.6.1", + "typescript-dom-lib-generator": "https://github.com/microsoft/TypeScript-DOM-lib-generator.git", + "yargs": "^17.5.1" + }, + "devDependencies": { + "@types/all-the-package-names": "^1.3744.0", + "@types/pacote": "^11.1.5", + "@types/yargs": "^17.0.10" + }, + "private": true, + "type": "module" +} diff --git a/packages/deprecate/src/index.ts b/packages/deprecate/src/index.ts new file mode 100644 index 0000000000..a759e08a53 --- /dev/null +++ b/packages/deprecate/src/index.ts @@ -0,0 +1,97 @@ +#!/usr/bin/env node + +import console from "console"; +import process from "process"; +import { AllPackages, getDefinitelyTyped } from "@definitelytyped/definitions-parser"; +import { NpmPublishClient, cacheDir } from "@definitelytyped/utils"; +import { graphql } from "@octokit/graphql"; +import names from "all-the-package-names" assert { type: "json" }; +import pacote from "pacote"; +// @ts-expect-error +import { packages } from "typescript-dom-lib-generator/deploy/createTypesPackages.js"; +import yargs from "yargs"; + +(async () => { + const { dryRun } = yargs(process.argv).argv as never; + const options = { definitelyTypedPath: undefined, progress: false, parseInParallel: false }; + // @ts-expect-error + const domLibs = new Set(packages.map((pkg) => pkg.name)); + const dt = await getDefinitelyTyped(options, console); + const allPackages = await AllPackages.read(dt); + const client = await NpmPublishClient.create(process.env.NPM_TOKEN!); + // Loop over npm @types packages and mark as deprecated any that no longer exist in the DT repo. + for (const name of names) { + // Skip @types/web, etc. + if (!name.startsWith("@types/") || domLibs.has(name)) continue; + const types = name.slice("@types/".length); + // Skip ones that exist, either in the types/ directory or in notNeededPackages.json. + if (allPackages.tryGetLatestVersion(types) || allPackages.getNotNeededPackage(types)) continue; + // Skip already-deprecated packages. + // Cache package deprecation indefinitely. + const offline = await pacote.manifest(name, { cache: cacheDir, offline: true }).catch((reason) => { + if (reason.code !== "ENOTCACHED") throw reason; + return undefined; + }); + if (offline?.deprecated) continue; + const online = await pacote.manifest(name, { cache: cacheDir, preferOnline: true }); + if (online.deprecated) continue; + const msg = await fetchMsg(types); + if (!msg) { + console.log(`Could not find the commit that removed types/${types}/.`); + continue; + } + console.log(`Deprecating ${name}: ${msg}`); + if (!dryRun) await client.deprecate(name, "*", msg); + } +})(); + +/** Reference the commit/PR that removed the named types. */ +async function fetchMsg(types: string) { + const { + repository: { + defaultBranchRef: { + target: { + history: { + nodes: [commit], + }, + }, + }, + }, + } = await graphql( + ` + query ($path: String!) { + repository(name: "DefinitelyTyped", owner: "DefinitelyTyped") { + defaultBranchRef { + target { + ... on Commit { + history(first: 1, path: $path) { + nodes { + associatedPullRequests(first: 1) { + nodes { + url + } + } + messageHeadline + } + } + } + } + } + } + } + `, + { + headers: { authorization: `token ${process.env.GITHUB_TOKEN}` }, + path: `types/${types}/`, + } + ); + if (!commit) return; + const { + associatedPullRequests: { + nodes: [pullRequest], + }, + messageHeadline, + } = commit; + const subject = messageHeadline.replace(new RegExp(String.raw`^\[${types}] `), "").replace(/ \(#[0-9]+\)$/, ""); + return pullRequest ? `${subject} ${pullRequest.url}` : subject; +} diff --git a/packages/deprecate/tsconfig.json b/packages/deprecate/tsconfig.json new file mode 100644 index 0000000000..22d80f3892 --- /dev/null +++ b/packages/deprecate/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "esnext", + "moduleResolution": "node", + "rootDir": "src/", + "outDir": "dist/" + }, + "references": [{ "path": "../definitions-parser/" }, { "path": "../utils/" }] +} diff --git a/packages/publisher/src/generate-packages.ts b/packages/publisher/src/generate-packages.ts index d7422279a2..ae16eeb103 100644 --- a/packages/publisher/src/generate-packages.ts +++ b/packages/publisher/src/generate-packages.ts @@ -1,9 +1,10 @@ import { makeTypesVersionsForPackageJson } from "@definitelytyped/header-parser"; import { emptyDir, mkdir, mkdirp, readFileSync } from "fs-extra"; import path = require("path"); +import process from "process"; import yargs = require("yargs"); -import { defaultLocalOptions } from "./lib/common"; +import { defaultLocalOptions, defaultRemoteOptions } from "./lib/common"; import { outputDirPath, sourceBranch } from "./lib/settings"; import { assertNever, @@ -42,7 +43,7 @@ if (!module.parent) { const tgz = !!yargs.argv.tgz; logUncaughtErrors(async () => { const log = loggerWithErrors()[0]; - const dt = await getDefinitelyTyped(defaultLocalOptions, log); + const dt = await getDefinitelyTyped(process.env.GITHUB_ACTIONS ? defaultRemoteOptions : defaultLocalOptions, log); const allPackages = await AllPackages.read(dt); await generatePackages(dt, allPackages, await readChangedPackages(allPackages), tgz); }); diff --git a/packages/publisher/src/publish-packages.ts b/packages/publisher/src/publish-packages.ts index 5b7b168526..3b11482710 100644 --- a/packages/publisher/src/publish-packages.ts +++ b/packages/publisher/src/publish-packages.ts @@ -1,7 +1,8 @@ +import process from "process"; import applicationinsights = require("applicationinsights"); import * as yargs from "yargs"; -import { defaultLocalOptions } from "./lib/common"; +import { defaultLocalOptions, defaultRemoteOptions } from "./lib/common"; import { publishNotNeededPackage, publishTypingsPackage } from "./lib/package-publisher"; import { getDefinitelyTyped, AllPackages } from "@definitelytyped/definitions-parser"; import { @@ -19,7 +20,10 @@ import { getSecret, Secret } from "./lib/secrets"; if (!module.parent) { const dry = !!yargs.argv.dry; logUncaughtErrors(async () => { - const dt = await getDefinitelyTyped(defaultLocalOptions, loggerWithErrors()[0]); + const dt = await getDefinitelyTyped( + process.env.GITHUB_ACTIONS ? defaultRemoteOptions : defaultLocalOptions, + loggerWithErrors()[0] + ); await publishPackages( await readChangedPackages(await AllPackages.read(dt)), dry, @@ -42,7 +46,7 @@ export default async function publishPackages( log("=== Publishing packages ==="); } - const client = await NpmPublishClient.create(await getSecret(Secret.NPM_TOKEN), undefined); + const client = await NpmPublishClient.create(dry ? "" : await getSecret(Secret.NPM_TOKEN), undefined); for (const cp of changedPackages.changedTypings) { log(`Publishing ${cp.pkg.desc}...`); diff --git a/packages/retag/package.json b/packages/retag/package.json index 98b0f35439..3bf83c7096 100644 --- a/packages/retag/package.json +++ b/packages/retag/package.json @@ -31,9 +31,6 @@ "@types/yargs": "^15.0.5" }, "main": "dist/index.js", - "bin": { - "retag": "./dist/retag.js" - }, "publishConfig": { "access": "public" } diff --git a/packages/retag/src/index.ts b/packages/retag/src/index.ts index 277ef487ef..a4486154b5 100644 --- a/packages/retag/src/index.ts +++ b/packages/retag/src/index.ts @@ -1,5 +1,3 @@ -#!/usr/bin/env node - import assert = require("assert"); import yargs from "yargs"; import process = require("process"); @@ -49,10 +47,14 @@ async function main() { */ async function tag(dry: boolean, nProcesses: number, name?: string) { const log = loggerWithErrors()[0]; - const options = { definitelyTypedPath: "../DefinitelyTyped", progress: true, parseInParallel: true }; + const options = process.env.GITHUB_ACTIONS + ? { definitelyTypedPath: undefined, progress: false, parseInParallel: false } + : { definitelyTypedPath: "../DefinitelyTyped", progress: true, parseInParallel: true }; await parseDefinitions( await getDefinitelyTyped(options, log), - { nProcesses: nProcesses || os.cpus().length, definitelyTypedPath: "../DefinitelyTyped" }, + options.parseInParallel + ? { nProcesses: nProcesses || os.cpus().length, definitelyTypedPath: "../DefinitelyTyped" } + : undefined, log ); diff --git a/tsconfig.json b/tsconfig.json index 0432015905..63b862df38 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,14 +3,15 @@ "files": [], "references": [ { "path": "packages/definitions-parser" }, + { "path": "packages/deprecate" }, { "path": "packages/dts-critic" }, { "path": "packages/dtslint" }, { "path": "packages/dtslint-runner" }, { "path": "packages/header-parser" }, { "path": "packages/perf" }, { "path": "packages/publisher" }, + { "path": "packages/retag" }, { "path": "packages/typescript-versions" }, - { "path": "packages/utils" }, - { "path": "packages/retag" } + { "path": "packages/utils" } ] } diff --git a/yarn.lock b/yarn.lock index 5a01279d97..02823ab02b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1563,7 +1563,7 @@ is-plain-object "^3.0.0" universal-user-agent "^5.0.0" -"@octokit/graphql@^4.5.8": +"@octokit/graphql@^4.5.8", "@octokit/graphql@^4.8.0": version "4.8.0" resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg== @@ -1762,6 +1762,11 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@types/all-the-package-names@^1.3744.0": + version "1.3744.0" + resolved "https://registry.yarnpkg.com/@types/all-the-package-names/-/all-the-package-names-1.3744.0.tgz#bf137bd79262dd24ed93ea80996f6a7bef74845e" + integrity sha512-pHfzXywUNwg0aKYXZqkl1H0dNOjJG8j5e1PqBrhQgF3vj+jcxZVKsaW+LFkc29R2PcIkIas8D6ocFIJqy0NFXg== + "@types/babel__core@^7.1.7": version "7.1.7" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.7.tgz#1dacad8840364a57c98d0dd4855c6dd3752c6b89" @@ -2124,6 +2129,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^17.0.10": + version "17.0.10" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.10.tgz#591522fce85d8739bca7b8bb90d048e4478d186a" + integrity sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA== + dependencies: + "@types/yargs-parser" "*" + "@typescript-eslint/eslint-plugin@^4.8.1": version "4.28.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.2.tgz#7a8320f00141666813d0ae43b49ee8244f7cf92a" @@ -2387,6 +2399,11 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" +all-the-package-names@^2.0.176: + version "2.0.176" + resolved "https://registry.yarnpkg.com/all-the-package-names/-/all-the-package-names-2.0.176.tgz#337bd76541e85985e09494d83b4734c8f02499a6" + integrity sha512-iDXRXto0tg4IiPHgZybugcpyusEZ8gor5ldS69OWCGIRDgEU7K+85G8iTG6IRCt+xbSj1Fz3zbwCvEJWJX7Akg== + ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -9104,6 +9121,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +"typescript-dom-lib-generator@https://github.com/microsoft/TypeScript-DOM-lib-generator.git": + version "0.0.1" + resolved "https://github.com/microsoft/TypeScript-DOM-lib-generator.git#bb1b98941082ed7585b4bab8215774d4833ddc49" + typescript@^4.1.0: version "4.5.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" @@ -9594,6 +9615,11 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.3: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.0.0: + version "21.0.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" + integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== + yargs@15.3.1, yargs@^15.1.0, yargs@^15.3.1: version "15.3.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" @@ -9641,6 +9667,19 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.5.1: + version "17.5.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + zero-fill@^2.2.3: version "2.2.4" resolved "https://registry.yarnpkg.com/zero-fill/-/zero-fill-2.2.4.tgz#b041320973dbcb03cd90193270ac8d4a3da05fc1"