From 0c24c5aeabae4bdbd4df65c54f49937983bf6447 Mon Sep 17 00:00:00 2001 From: Merlijn Vos Date: Thu, 24 Jul 2025 09:24:09 +0200 Subject: [PATCH] Migrate to changesets from custom release tooling (#5840) - Remove custom release tooling in favor of changesets - Add changesets for all unreleased commits --- .changeset/README.md | 8 + .changeset/breezy-showers-wash.md | 5 + .changeset/clear-weeks-fall.md | 5 + .changeset/config.json | 11 + .changeset/easy-pianos-heal.md | 5 + .changeset/hot-paths-repeat.md | 5 + .changeset/lemon-candles-ask.md | 5 + .changeset/twenty-birds-take.md | 5 + .changeset/warm-pugs-lay.md | 50 ++ .github/workflows/release-candidate.yml | 91 ---- .github/workflows/release.yml | 185 ++----- .../companion-custom-provider/package.json | 2 +- package.json | 6 +- private/release/afterVersionBump.js | 84 ---- private/release/autoFixConflicts.js | 51 -- private/release/choose-semverness.js | 89 ---- private/release/commit-and-open-pr.js | 42 -- private/release/config.js | 3 - private/release/formatChangeLog.js | 107 ---- private/release/getUpToDateRefsFromGitHub.js | 117 ----- private/release/interactive.js | 36 -- private/release/package.json | 15 - private/release/updateChangelogs.js | 134 ----- yarn.lock | 464 +++++++++++++++++- 24 files changed, 576 insertions(+), 949 deletions(-) create mode 100644 .changeset/README.md create mode 100644 .changeset/breezy-showers-wash.md create mode 100644 .changeset/clear-weeks-fall.md create mode 100644 .changeset/config.json create mode 100644 .changeset/easy-pianos-heal.md create mode 100644 .changeset/hot-paths-repeat.md create mode 100644 .changeset/lemon-candles-ask.md create mode 100644 .changeset/twenty-birds-take.md create mode 100644 .changeset/warm-pugs-lay.md delete mode 100644 .github/workflows/release-candidate.yml delete mode 100755 private/release/afterVersionBump.js delete mode 100755 private/release/autoFixConflicts.js delete mode 100755 private/release/choose-semverness.js delete mode 100644 private/release/commit-and-open-pr.js delete mode 100644 private/release/config.js delete mode 100644 private/release/formatChangeLog.js delete mode 100644 private/release/getUpToDateRefsFromGitHub.js delete mode 100755 private/release/interactive.js delete mode 100644 private/release/package.json delete mode 100644 private/release/updateChangelogs.js diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 000000000..e5b6d8d6a --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/breezy-showers-wash.md b/.changeset/breezy-showers-wash.md new file mode 100644 index 000000000..ba083a6e1 --- /dev/null +++ b/.changeset/breezy-showers-wash.md @@ -0,0 +1,5 @@ +--- +"@uppy/vue": patch +--- + +Fix uppy prop in UppyContextProvider diff --git a/.changeset/clear-weeks-fall.md b/.changeset/clear-weeks-fall.md new file mode 100644 index 000000000..517f0d469 --- /dev/null +++ b/.changeset/clear-weeks-fall.md @@ -0,0 +1,5 @@ +--- +"@uppy/webcam": minor +--- + +Add image preview with accept/discard buttons diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 000000000..2be13d431 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [] +} diff --git a/.changeset/easy-pianos-heal.md b/.changeset/easy-pianos-heal.md new file mode 100644 index 000000000..2419ac736 --- /dev/null +++ b/.changeset/easy-pianos-heal.md @@ -0,0 +1,5 @@ +--- +"@uppy/core": patch +--- + +Resolve stale state in checkAndUpdateFileState diff --git a/.changeset/hot-paths-repeat.md b/.changeset/hot-paths-repeat.md new file mode 100644 index 000000000..df6726867 --- /dev/null +++ b/.changeset/hot-paths-repeat.md @@ -0,0 +1,5 @@ +--- +"@uppy/companion": minor +--- + +Add provider name to metadata for observability diff --git a/.changeset/lemon-candles-ask.md b/.changeset/lemon-candles-ask.md new file mode 100644 index 000000000..2c85f10b1 --- /dev/null +++ b/.changeset/lemon-candles-ask.md @@ -0,0 +1,5 @@ +--- +"@uppy/companion": patch +--- + +Make StreamableBlob spec compliant for Node.js 24+ diff --git a/.changeset/twenty-birds-take.md b/.changeset/twenty-birds-take.md new file mode 100644 index 000000000..794facc01 --- /dev/null +++ b/.changeset/twenty-birds-take.md @@ -0,0 +1,5 @@ +--- +"@uppy/locales": minor +--- + +Update Swedish translations diff --git a/.changeset/warm-pugs-lay.md b/.changeset/warm-pugs-lay.md new file mode 100644 index 000000000..bf73acb58 --- /dev/null +++ b/.changeset/warm-pugs-lay.md @@ -0,0 +1,50 @@ +--- +"@uppy/audio": minor +"@uppy/aws-s3": minor +"@uppy/aws-s3-multipart": minor +"@uppy/box": minor +"@uppy/companion-client": minor +"@uppy/components": minor +"@uppy/compressor": minor +"@uppy/core": minor +"@uppy/dashboard": minor +"@uppy/drag-drop": minor +"@uppy/drop-target": minor +"@uppy/dropbox": minor +"@uppy/facebook": minor +"@uppy/file-input": minor +"@uppy/form": minor +"@uppy/golden-retriever": minor +"@uppy/google-drive": minor +"@uppy/google-drive-picker": minor +"@uppy/google-photos-picker": minor +"@uppy/image-editor": minor +"@uppy/informer": minor +"@uppy/instagram": minor +"@uppy/locales": minor +"@uppy/onedrive": minor +"@uppy/progress-bar": minor +"@uppy/provider-views": minor +"@uppy/react": minor +"@uppy/redux-dev-tools": minor +"@uppy/remote-sources": minor +"@uppy/screen-capture": minor +"@uppy/status-bar": minor +"@uppy/store-default": minor +"@uppy/store-redux": minor +"@uppy/svelte": minor +"@uppy/thumbnail-generator": minor +"@uppy/transloadit": minor +"@uppy/tus": minor +"@uppy/unsplash": minor +"@uppy/url": minor +"@uppy/utils": minor +"@uppy/vue": minor +"@uppy/webcam": minor +"@uppy/webdav": minor +"@uppy/xhr-upload": minor +"@uppy/zoom": minor +"uppy": minor +--- + +Use TypeScript compiler instead of Babel diff --git a/.github/workflows/release-candidate.yml b/.github/workflows/release-candidate.yml deleted file mode 100644 index 8937b8e13..000000000 --- a/.github/workflows/release-candidate.yml +++ /dev/null @@ -1,91 +0,0 @@ -name: Release candidate -on: - push: - branches: - - release - -env: - YARN_ENABLE_GLOBAL_CACHE: false - -jobs: - prepare-release: - name: Prepare release candidate Pull Request - runs-on: ubuntu-latest - steps: - - name: Checkout sources - uses: actions/checkout@v4 - with: - ref: release - - name: Rebase - run: | - git fetch origin HEAD --depth=1 - git config --global user.email "actions@github.com" - git config --global user.name "GitHub Actions" - git rebase FETCH_HEAD - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: - echo "dir=$(corepack yarn config get cacheFolder)" >> $GITHUB_OUTPUT - - - uses: actions/cache@v4 - id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - name: Install Node.js - uses: actions/setup-node@v4 - with: - node-version: lts/* - - name: Install dependencies - run: corepack yarn install --immutable - env: - # https://docs.cypress.io/guides/references/advanced-installation#Skipping-installation - CYPRESS_INSTALL_BINARY: 0 - - name: Bump candidate packages version - run: corepack yarn version apply --all --json | jq -s > releases.json - - name: Prepare changelog - run: - corepack yarn workspace @uppy-dev/release update-changelogs - releases.json | xargs git add - - name: Update CDN URLs - run: - corepack yarn workspace @uppy-dev/release update-version-URLs | xargs - git add - - name: Stage changes and remove temp files - run: | - git rm -rf .yarn/versions - git rm CHANGELOG.next.md - jq -r 'map(.cwd) | join("\n")' < releases.json | awk '{ print "git add " $0 "/package.json" }' | sh - - name: Commit - run: | - echo "Release: uppy@$(jq -r 'map(select(.ident == "uppy"))[0].newVersion' < releases.json)" > commitMessage - echo >> commitMessage - echo "This is a release candidate for the following packages:" >> commitMessage - echo >> commitMessage - jq -r 'map("- `"+.ident+"`: "+.oldVersion+" -> "+.newVersion) | join("\n") ' < releases.json >> commitMessage - git commit -n --amend --file commitMessage - - name: Open Pull Request - id: pr_opening - run: | - git push origin HEAD:release-candidate - gh api repos/${{ github.repository }}/pulls \ - -F base="$(gh api /repos/${{ github.repository }} | jq -r .default_branch)" \ - -F head="release-candidate" \ - -F title="$(head -1 commitMessage)" \ - -F body="$(git --no-pager diff HEAD^ -- CHANGELOG.md | awk '{ if( substr($0,0,1) == "+" && $1 != "+##" && $1 != "+Released:" && $1 != "+++" ) { print substr($0,2) } }')" \ - --jq '.number | tostring | "pr_number="+.' >> $GITHUB_OUTPUT - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Assign to the releaser - run: - echo '{"assignees":[${{ toJSON(github.actor) }}]}' | gh api repos/${{ - github.repository }}/issues/${{ steps.pr_opening.outputs.pr_number - }}/assignees --input - - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Enable Release workflow - run: gh workflow enable 15329895 --repo ${{ github.repository }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7e253d324..93b4d834d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,172 +1,43 @@ -name: Release -on: - pull_request_review: - types: [submitted] +name: release -env: - YARN_ENABLE_GLOBAL_CACHE: false +on: + push: + branches: + - main + +concurrency: ${{ github.workflow }}-${{ github.ref }} jobs: release: - name: Publish releases - if: - ${{ github.event.review.state == 'approved' && github.event.sender.login - == github.event.pull_request.assignee.login && - github.event.pull_request.head.ref == 'release-candidate' }} - outputs: - companionWasReleased: - ${{ steps.checkIfCompanionWasReleased.outputs.version }} + name: Release runs-on: ubuntu-latest steps: - - name: Checkout sources + - name: Checkout Repo uses: actions/checkout@v4 - with: - fetch-depth: 2 - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: - echo "dir=$(corepack yarn config get cacheFolder)" >> $GITHUB_OUTPUT - - uses: actions/cache@v4 - id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - name: Install Node.js + - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: lts/* + + # Allow yarn to make changes during release + - run: corepack yarn config set enableHardenedMode false + - run: corepack yarn --mode=update-lockfile + - name: Install dependencies run: corepack yarn install --immutable - env: - # https://docs.cypress.io/guides/references/advanced-installation#Skipping-installation - CYPRESS_INSTALL_BINARY: 0 - - name: Get CHANGELOG diff - run: - git --no-pager diff HEAD^ -- CHANGELOG.md | awk '{ if( substr($0,0,1) - == "+" && $1 != "+##" && $1 != "+Released:" && $1 != "+++" ) { print - substr($0,2) } }' > CHANGELOG.diff.md - - name: Copy README for `uppy` package - run: cp README.md packages/uppy/. - - name: Build before publishing - run: corepack yarn run build - - name: Hack to allow the publish of the Angular package - run: corepack yarn workspace @uppy/angular prepublishOnly - - name: Publish to the npm registry - run: - corepack yarn workspaces foreach --all --no-private npm publish - --access public --tolerate-republish - env: - YARN_NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - name: Merge PR - id: merge - run: | - gh api -X PUT repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/merge \ - -F merge_method="squash" \ - -F commit_message="$(cat CHANGELOG.diff.md)" \ - --jq 'if .merged then "sha="+.sha else error("not merged") end' >> $GITHUB_OUTPUT - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Create tags - continue-on-error: true - run: | - git --no-pager diff --name-only HEAD^ | awk '$0 ~ /^packages\/.+\/package\.json$/ { print "jq -r '"'"'\"gh api /repos/{owner}/{repo}/git/refs -f ref=\\\"refs/tags/\"+.name+\"@\"+.version+\"\\\" -f sha=${{ steps.merge.outputs.sha }}\"'"'"' < " $0 }' > createTags.sh - cat createTags.sh - sh createTags.sh | sh - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Get Uppy version number - id: uppyVersion - run: - jq -r '"version="+.version' < packages/uppy/package.json >> - $GITHUB_OUTPUT - - name: Create GitHub release - run: | - if ! gh release view uppy@${{ steps.uppyVersion.outputs.version }} > /dev/null 2>&1; then - gh release create uppy@${{ steps.uppyVersion.outputs.version }} \ - -t "Uppy ${{ steps.uppyVersion.outputs.version }}" \ - -F CHANGELOG.diff.md - else - echo "Release ${{ steps.uppyVersion.outputs.version }} already exists. Skipping." - fi - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Upload `uppy` to CDN - run: corepack yarn run uploadcdn uppy -- --force - env: - EDGLY_KEY: ${{secrets.EDGLY_KEY}} - EDGLY_SECRET: ${{secrets.EDGLY_SECRET}} - - name: Upload `@uppy/locales` to CDN if it was released - run: corepack yarn run uploadcdn @uppy/locales -- --force - env: - EDGLY_KEY: ${{secrets.EDGLY_KEY}} - EDGLY_SECRET: ${{secrets.EDGLY_SECRET}} - - name: Check if Companion was released - id: checkIfCompanionWasReleased - run: - git diff --exit-code --quiet HEAD^ -- - packages/@uppy/companion/package.json || echo "version=$(jq -r - .version < packages/@uppy/companion/package.json)" >> $GITHUB_OUTPUT - - name: Remove release-candidate branch - run: - gh api -X DELETE repos/${{ github.repository - }}/git/refs/heads/release-candidate || echo "Already deleted" - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Remove release branch - run: - gh api -X DELETE repos/${{ github.repository }}/git/refs/heads/release - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Disable Release workflow - run: gh workflow disable 15329895 --repo ${{ github.repository }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: In case of failure - if: ${{ failure() }} - run: - gh pr comment ${{ github.event.pull_request.number }} --body "Release - job failed, please take action." - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # See also companion-deploy.yml - docker: - name: DockerHub - needs: release - if: ${{ needs.release.outputs.companionWasReleased }} - runs-on: ubuntu-latest - env: - DOCKER_BUILDKIT: 0 - COMPOSE_DOCKER_CLI_BUILD: 0 - steps: - - name: Checkout sources - uses: actions/checkout@v4 - - name: Docker meta - id: docker_meta - uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0 + - name: Build + run: corepack yarn build + + - name: Create Release Pull Request or Publish + id: changesets + uses: changesets/action@v1 with: - images: transloadit/companion - tags: | - type=edge - type=semver,pattern={{version}},value=${{ needs.release.outputs.companionWasReleased }} - # set latest tag for default branch - type=raw,value=latest,enable=true - - uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 - - uses: docker/setup-buildx-action@v3 - - name: Log in to DockerHub - uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 - with: - username: ${{secrets.DOCKER_USERNAME}} - password: ${{secrets.DOCKER_PASSWORD}} - - name: Build and push - uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0 - with: - push: true - context: . - platforms: linux/amd64,linux/arm64 - file: Dockerfile - tags: ${{ steps.docker_meta.outputs.tags }} - labels: ${{ steps.docker_meta.outputs.labels }} + version: corepack yarn run version + publish: corepack yarn run release + commit: '[ci] release' + title: '[ci] release' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/examples/companion-custom-provider/package.json b/examples/companion-custom-provider/package.json index 74412f5cb..8cfc02e19 100644 --- a/examples/companion-custom-provider/package.json +++ b/examples/companion-custom-provider/package.json @@ -1,6 +1,7 @@ { "name": "example-companion-custom-provider", "version": "0.0.0", + "private": true, "type": "module", "dependencies": { "@uppy/companion-client": "workspace:*", @@ -23,7 +24,6 @@ "npm-run-all": "^4.1.2", "vite": "^5.4.17" }, - "private": true, "scripts": { "start": "npm-run-all --parallel start:server start:client", "start:client": "vite", diff --git a/package.json b/package.json index 64e1097ae..625d2016b 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "e2e:generate": "yarn workspace e2e generate-test", "e2e:headless": "yarn workspace e2e cypress:headless", "e2e": "npm-run-all --parallel build:watch e2e:client start:companion:with-loadbalancer e2e:cypress", - "release": "PACKAGES=$(yarn workspaces list --json) yarn workspace @uppy-dev/release interactive", "size": "echo 'JS Bundle mingz:' && cat ./packages/uppy/dist/uppy.min.js | gzip | wc -c && echo 'CSS Bundle mingz:' && cat ./packages/uppy/dist/uppy.min.css | gzip | wc -c", "start:companion": "yarn workspace @uppy/companion start:dev", "start:companion:with-loadbalancer": "e2e/start-companion-with-load-balancer.mjs", @@ -36,7 +35,8 @@ "test:watch": "turbo watch test --filter='./packages/@uppy/*' --filter='./packages/uppy'", "typecheck": "turbo run typecheck --filter='./packages/@uppy/*' --filter='./packages/uppy'", "uploadcdn": "yarn workspace uppy exec -- node upload-to-cdn.js", - "version": "yarn node ./bin/after-version-bump.js" + "version": "changeset version && corepack yarn install --mode=update-lockfile", + "release": "changeset publish" }, "resolutions": { "@types/react": "^18", @@ -48,6 +48,8 @@ }, "devDependencies": { "@biomejs/biome": "2.0.5", + "@changesets/changelog-github": "^0.5.1", + "@changesets/cli": "^2.29.5", "npm-run-all": "^4.1.5", "start-server-and-test": "^1.14.0", "turbo": "^2.5.4", diff --git a/private/release/afterVersionBump.js b/private/release/afterVersionBump.js deleted file mode 100755 index 8164d10cb..000000000 --- a/private/release/afterVersionBump.js +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env node - -import { readFileSync } from 'node:fs' -import { open } from 'node:fs/promises' -import { fileURLToPath } from 'node:url' -import { globby } from 'globby' - -const ROOT = new URL('../../', import.meta.url) -const PACKAGES_FOLDER = new URL('./packages/', ROOT) - -const VERSION_URL = - /(?<=https:\/\/\S+\/v)\d+\.\d+\.\d+(?:-(?:alpha|beta)(?:[.-]\d+)?)?(?=\/)/g - -async function replaceInFile(filename, replacements) { - const file = await open(filename, 'r+') - let content = await file.readFile('utf8') - - let hasBeenModified = false - let exec - exec = VERSION_URL.exec(content) - while (exec) { - const pkg = Object.keys(replacements).find( - (pkgName) => - content.slice(exec.index - pkgName.length, exec.index) === pkgName, - ) - if (pkg && exec[0] !== replacements[pkg]) { - hasBeenModified = true - content = - content.slice(0, exec.index) + - replacements[pkg] + - content.slice(VERSION_URL.lastIndex) - } - exec = VERSION_URL.exec(content) - } - - if (hasBeenModified) { - const { bytesWritten } = await file.write(content, 0, 'utf8') - await file.truncate(bytesWritten) - console.log(filename) - } - - await file.close() -} - -async function updateVersions(files, packageNames) { - const replacements = Object.fromEntries( - packageNames.map((packageName) => { - const { version } = JSON.parse( - readFileSync( - new URL(`./${packageName}/package.json`, PACKAGES_FOLDER), - 'utf8', - ), - ) - // uppy → /uppy/v - // @uppy/robodog → /uppy/robodog/v - const urlPart = `/${packageName.replace(/^@/, '')}/v` - return [urlPart, version] - }), - ) - - await Promise.all(files.map((f) => replaceInFile(f, replacements))) -} - -const files = await globby( - [ - 'README.md', - 'BUNDLE-README.md', - 'examples/**/*.html', - 'packages/*/README.md', - 'packages/@uppy/*/README.md', - 'website/src/docs/**', - 'website/src/examples/**', - 'website/themes/uppy/layout/**', - '!**/node_modules/**', - ], - { - gitignore: true, - onlyFiles: true, - cwd: fileURLToPath(ROOT), - absolute: true, - }, -) - -await updateVersions(files, ['uppy', '@uppy/locales']) diff --git a/private/release/autoFixConflicts.js b/private/release/autoFixConflicts.js deleted file mode 100755 index 832527db9..000000000 --- a/private/release/autoFixConflicts.js +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env node - -// Usage: autoFixConflicts.js | sh - -import { spawn } from 'node:child_process' -import { createInterface as readLines } from 'node:readline' - -const VERSION_URL = - /(?<=https:\/\/\S+\/v)\d+\.\d+\.\d+(?:-(?:alpha|beta)(?:[.-]\d+)?)?(?=\/)/ - -const gitStatus = spawn('git', ['status', '--porcelain']) - -for await (const line of readLines(gitStatus.stdout)) { - if (!line.startsWith('UU ')) continue - - const file = line.slice(3) - if (file === 'yarn.lock') { - console.log('corepack yarn install') - console.log('git add yarn.lock') - continue - } - - if (file.endsWith('/package.json')) { - console.log(`git checkout --ours ${file}`) - console.log(`git add ${file}`) - continue - } - - const gitDiff = spawn('git', ['--no-pager', 'diff', '--', file]) - let conflictHasStarted = false - let containsCDNChanges = true - let currentConflictContainsCDNChanges = false - - for await (const line of readLines(gitDiff.stdout)) { - if (conflictHasStarted) { - if (line.startsWith('++>>>>>>>')) { - conflictHasStarted = false - containsCDNChanges &&= currentConflictContainsCDNChanges - currentConflictContainsCDNChanges = false - } else { - currentConflictContainsCDNChanges ||= VERSION_URL.test(line) - } - } else if (line === '++<<<<<<< HEAD') { - conflictHasStarted = true - } - } - if (containsCDNChanges) { - console.log(`git checkout --ours ${file}`) - console.log(`git add ${file}`) - } -} diff --git a/private/release/choose-semverness.js b/private/release/choose-semverness.js deleted file mode 100755 index 4ada8463a..000000000 --- a/private/release/choose-semverness.js +++ /dev/null @@ -1,89 +0,0 @@ -import { spawnSync } from 'node:child_process' -import { createWriteStream, mkdirSync } from 'node:fs' - -import prompts from 'prompts' -import { TARGET_BRANCH } from './config.js' - -function maxSemverness(a, b) { - if (a === 'major' || b === 'major') return 'major' - if (a === 'premajor' || b === 'premajor') return 'premajor' - if (a === 'minor' || b === 'minor') return 'minor' - if (a === 'preminor' || b === 'preminor') return 'preminor' - if (a === 'prepatch' || b === 'prepatch') return 'prepatch' - if (a === 'prepatch' || b === 'prerelease') return 'prerelease' - return 'patch' -} - -export default async function pickSemverness( - spawnOptions, - LAST_RELEASE_COMMIT, - releaseFileUrl, - packagesList, -) { - mkdirSync(new URL('.', releaseFileUrl), { recursive: true }) - const releaseFile = createWriteStream(releaseFileUrl) - releaseFile.write('releases:\n') - - let uppySemverness - - for await (const workspaceInfo of packagesList) { - const { location, name } = JSON.parse(workspaceInfo) - if (!name.startsWith('@uppy/')) continue - - const { stdout } = spawnSync( - 'git', - [ - '--no-pager', - 'log', - '--format=- %s', - `${LAST_RELEASE_COMMIT}..`, - '--', - location, - ], - spawnOptions, - ) - if (stdout.length === 0) { - console.log(`No commits since last release for ${name}, skipping.`) - continue - } - console.log('\n') - console.log('-'.repeat(20)) - console.log(name) - console.log( - `\nHere are the commits that landed on ${name} since previous release:\n${stdout}\n`, - ) - console.log( - `Check the web UI at https://github.com/transloadit/uppy/tree/${TARGET_BRANCH}/${encodeURI( - location, - )}.`, - ) - - const response = await prompts({ - type: 'select', - name: 'value', - message: `What should be the semverness of next ${name} release?`, - choices: [ - { title: 'Pre-release', value: 'prerelease' }, - { title: 'Skip this package', value: '' }, - { title: 'Patch', value: 'patch' }, - { title: 'Minor', value: 'minor' }, - { title: 'Major', value: 'major' }, - ], - initial: 2, - }) - - if (!response.value) { - console.log('Skipping.') - continue - } - - releaseFile.write(` ${JSON.stringify(name)}: ${response.value}\n`) - uppySemverness = maxSemverness(uppySemverness, response.value) - } - - if (uppySemverness == null) - throw new Error('No package to release, aborting.') - - releaseFile.write(` "uppy": ${uppySemverness}\n`) - releaseFile.close() -} diff --git a/private/release/commit-and-open-pr.js b/private/release/commit-and-open-pr.js deleted file mode 100644 index 7b20ad861..000000000 --- a/private/release/commit-and-open-pr.js +++ /dev/null @@ -1,42 +0,0 @@ -import { spawnSync } from 'node:child_process' -import { fileURLToPath } from 'node:url' -import prompts from 'prompts' -import { REPO_NAME, REPO_OWNER } from './config.js' - -export default async function commit(spawnOptions, ...files) { - console.log(`Now is the time to do manual edits to:`) - files.forEach((f) => console.log(f.toString())) - console.log() - - await prompts({ - type: 'toggle', - name: 'value', - message: 'Ready to commit?', - initial: true, - active: 'yes', - inactive: 'no', - }) - - spawnSync( - 'git', - ['add', ...files.map((url) => fileURLToPath(url))], - spawnOptions, - ) - spawnSync('git', ['commit', '-n', '-m', 'Prepare next release'], { - ...spawnOptions, - stdio: 'inherit', - }) - const sha = spawnSync('git', ['rev-parse', 'HEAD'], spawnOptions) - .stdout.toString() - .trim() - const getRemoteCommamnd = `git remote -v | grep '${REPO_OWNER}/${REPO_NAME}' | awk '($3 == "(push)") { print $1; exit }'` - const remote = - spawnSync('/bin/sh', ['-c', getRemoteCommamnd]).stdout.toString().trim() || - `git@github.com:${REPO_OWNER}/${REPO_NAME}.git` - - console.log(`Please run \`git push ${remote} ${sha}:refs/heads/release\`.`) - console.log(`An automation will kick off and open a release candidate PR - on the GitHub repository. Do not merge it manually! Review the PR (you may need to close and - re-open so the CI and test will run on it). If everything looks good, approve the PR — - this will publish updated packages to npm, then the PR will be merged.`) -} diff --git a/private/release/config.js b/private/release/config.js deleted file mode 100644 index 88ab626e5..000000000 --- a/private/release/config.js +++ /dev/null @@ -1,3 +0,0 @@ -export const REPO_OWNER = 'transloadit' -export const REPO_NAME = 'uppy' -export const TARGET_BRANCH = 'main' diff --git a/private/release/formatChangeLog.js b/private/release/formatChangeLog.js deleted file mode 100644 index 0035fa2be..000000000 --- a/private/release/formatChangeLog.js +++ /dev/null @@ -1,107 +0,0 @@ -import { spawn } from 'node:child_process' -import { createWriteStream } from 'node:fs' -import { createInterface } from 'node:readline' - -import prompts from 'prompts' - -const subsystem = - /((?<=^packages\/)@uppy\/[a-z0-9-]+|(?<=^)(?:docs|e2e|examples))\// -async function inferPackageForCommit(sha, spawnOptions) { - const cp = spawn( - 'git', - ['--no-pager', 'log', '-1', '--name-only', sha], - spawnOptions, - ) - const candidates = {} - for await (const path of createInterface({ input: cp.stdout })) { - const match = subsystem.exec(path) - if (match != null) { - candidates[match[1]] ??= 0 - candidates[match[1]]++ - } - } - const maxVal = Math.max(...Object.values(candidates)) - return { - inferredPackages: Number.isFinite(maxVal) - ? Object.entries(candidates) - .flatMap(([pkg, nbOfFiles]) => - nbOfFiles === maxVal || nbOfFiles === maxVal - 1 ? [pkg] : [], - ) - .join(',') - : 'meta', - candidates, - } -} - -export default async function formatChangeLog( - spawnOptions, - LAST_RELEASE_COMMIT, - changeLogUrl, -) { - const changeLogCommits = createWriteStream(changeLogUrl) - - const gitLog = spawn( - 'git', - [ - '--no-pager', - 'log', - '--format="%H::%s::%an"', - `${LAST_RELEASE_COMMIT}..HEAD`, - ], - spawnOptions, - ) - const expectedFormat = - /^"([a-f0-9]+)::(?:((?:@uppy\/[a-z0-9-]+(?:,@uppy\/[a-z0-9-]+)*)|meta|docs|e2e|examples):\s?)?(.+?)(\s\(#\d+\))?::(.+)"$/ - for await (const log of createInterface({ input: gitLog.stdout })) { - const [, sha, packageName, title, PR, authorName] = expectedFormat.exec(log) - - const formattedCommitTitle = { - packageName, - title, - authorInfo: PR ? `${authorName} / #${PR.slice(3, -1)}` : authorName, - } - - if (!packageName) { - console.log( - `No package info found in commit title: ${sha} (https://github.com/transloadit/uppy/commit/${sha})`, - ) - console.log(log) - const { inferredPackages, candidates } = await inferPackageForCommit( - sha, - spawnOptions, - ) - const { useInferred } = await prompts({ - type: 'confirm', - name: 'useInferred', - message: `Assign commit to ${inferredPackages} (inferred from the files it touches)?`, - initial: true, - }) - - if (useInferred) { - formattedCommitTitle.packageName = inferredPackages - } else { - const response = await prompts({ - type: 'autocompleteMultiselect', - name: 'value', - message: 'Which package(s) does this commit belong to?', - min: 1, - choices: [ - { title: 'Docs', value: 'docs' }, - { title: 'Meta', value: 'meta' }, - ...Object.entries(candidates) - .sort((a, b) => a[1] > b[1]) - .map(([value]) => ({ title: value, value })), - ], - }) - if (!Array.isArray(response.value)) throw new Error('Aborting release') - formattedCommitTitle.packageName = response.value.join(',') - } - } - - changeLogCommits.write( - `- ${formattedCommitTitle.packageName}: ${formattedCommitTitle.title} (${formattedCommitTitle.authorInfo})\n`, - ) - } - - changeLogCommits.close() -} diff --git a/private/release/getUpToDateRefsFromGitHub.js b/private/release/getUpToDateRefsFromGitHub.js deleted file mode 100644 index 3e00d6513..000000000 --- a/private/release/getUpToDateRefsFromGitHub.js +++ /dev/null @@ -1,117 +0,0 @@ -import { spawnSync } from 'node:child_process' -import prompts from 'prompts' -import { REPO_NAME, REPO_OWNER, TARGET_BRANCH } from './config.js' - -async function apiCall(endpoint, errorMessage) { - const response = await fetch( - `https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}${endpoint}`, - ) - if (response.ok) { - return response.json() - } - console.warn(response) - throw new Error(errorMessage) -} - -export async function getRemoteHEAD() { - return ( - await apiCall( - `/git/ref/heads/${TARGET_BRANCH}`, - 'Cannot get remote HEAD, check your internet connection.', - ) - ).object.sha -} - -async function getLatestReleaseSHA() { - const response = await fetch( - `https://raw.githubusercontent.com/${REPO_OWNER}/${REPO_NAME}/${TARGET_BRANCH}/packages/uppy/package.json`, - ) - if (!response.ok) - throw new Error( - `Network call failed: ${response.status} ${response.statusText}`, - ) - const { version } = await response.json() - const tag_name = `uppy@${version}` - console.log(`Last release was ${tag_name}.`) - return ( - await apiCall( - `/git/ref/tags/${encodeURIComponent(tag_name)}`, - `Failed to fetch information for release ${JSON.stringify(tag_name)}`, - ) - ).object.sha -} - -async function getLocalHEAD() { - return spawnSync('git', ['rev-parse', 'HEAD']).stdout.toString().trim() -} - -export function rewindGitHistory(spawnOptions, sha) { - return spawnSync('git', ['reset', sha, '--hard'], spawnOptions).status === 0 -} - -export async function validateGitStatus(spawnOptions) { - const latestRelease = getLatestReleaseSHA() // run in parallel to speed things up - const [REMOTE_HEAD, LOCAL_HEAD] = await Promise.all([ - getRemoteHEAD(), - getLocalHEAD(), - ]) - - const { status, stderr } = spawnSync( - 'git', - ['diff', '--exit-code', '--quiet', REMOTE_HEAD, '--', '.'], - spawnOptions, - ) - if (status !== 0) { - console.error(stderr.toString()) - console.log( - `git repository is not clean and/or not in sync with ${REPO_OWNER}/${REPO_NAME}`, - ) - if ( - spawnSync( - 'git', - ['diff', '--exit-code', '--quiet', LOCAL_HEAD, '--', '.'], - spawnOptions, - ).status !== 0 - ) { - const { value } = await prompts({ - type: 'confirm', - name: 'value', - message: - 'Do you want to hard reset your local repository (all uncommitted changes will be lost)?', - }) - if (!value) { - throw new Error( - 'Please ensure manually that your local repository is clean and up to date.', - ) - } - } - - if (stderr.indexOf('bad object') !== -1) { - const { status, stdout, stderr } = spawnSync( - 'git', - [ - 'fetch', - `https://github.com/${REPO_OWNER}/${REPO_NAME}.git`, - TARGET_BRANCH, - ], - spawnOptions, - ) - - if (status) { - console.log(stdout.toString()) - console.error(stderr.toString()) - throw new Error( - 'Failed to fetch, please ensure manually that your local repository is up to date', - ) - } - } - - if (!rewindGitHistory(spawnOptions, REMOTE_HEAD)) { - throw new Error( - 'Failed to reset, please ensure manually that your local repository is clean and up to date.', - ) - } - } - - return [await latestRelease, LOCAL_HEAD] -} diff --git a/private/release/interactive.js b/private/release/interactive.js deleted file mode 100755 index 4e93ecb6b..000000000 --- a/private/release/interactive.js +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env node -import process from 'node:process' -import { fileURLToPath } from 'node:url' - -import pickSemverness from './choose-semverness.js' -import commit from './commit-and-open-pr.js' -import formatChangeLog from './formatChangeLog.js' -import { - rewindGitHistory, - validateGitStatus, -} from './getUpToDateRefsFromGitHub.js' - -const ROOT = new URL('../../', import.meta.url) -const spawnOptions = { cwd: fileURLToPath(ROOT) } - -const deferredReleaseFile = new URL('./.yarn/versions/next.yml', ROOT) -const temporaryChangeLog = new URL('./CHANGELOG.next.md', ROOT) - -console.log('Validating local repo status and get previous release info...') -const [LAST_RELEASE_COMMIT, LOCAL_HEAD] = await validateGitStatus(spawnOptions) -try { - console.log('Local git repository is ready, starting release process...') - await pickSemverness( - spawnOptions, - LAST_RELEASE_COMMIT, - deferredReleaseFile, - process.env.PACKAGES.split(' '), - ) - console.log('Working on the changelog...') - await formatChangeLog(spawnOptions, LAST_RELEASE_COMMIT, temporaryChangeLog) - console.log('Final step...') - await commit(spawnOptions, deferredReleaseFile, temporaryChangeLog) -} finally { - console.log('Rewinding git history...') - await rewindGitHistory(spawnOptions, LOCAL_HEAD) -} diff --git a/private/release/package.json b/private/release/package.json deleted file mode 100644 index 8ad9c3c8f..000000000 --- a/private/release/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "@uppy-dev/release", - "version": "0.0.0", - "private": true, - "type": "module", - "devDependencies": { - "globby": "^13.0.0", - "prompts": "^2.4.2" - }, - "scripts": { - "interactive": "node ./interactive.js", - "update-changelogs": "node ./updateChangelogs.js", - "update-version-URLs": "node ./afterVersionBump.js" - } -} diff --git a/private/release/updateChangelogs.js b/private/release/updateChangelogs.js deleted file mode 100644 index b3eb2863a..000000000 --- a/private/release/updateChangelogs.js +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env node - -import { Buffer } from 'node:buffer' -import { createReadStream, promises as fs } from 'node:fs' -import process from 'node:process' -import { createInterface } from 'node:readline' - -const ROOT = new URL('../../', import.meta.url) -const PACKAGES_FOLDER = new URL('./packages/', ROOT) - -const releasedDate = new Date().toISOString().slice(0, 10) - -const releases = JSON.parse( - await fs.readFile(new URL(process.argv[2], ROOT), 'utf-8'), -) -const uppyRelease = releases.find(({ ident }) => ident === 'uppy') - -const changelog = await fs.open(new URL('./CHANGELOG.md', ROOT), 'r+') - -const changelogContent = await changelog.readFile() - -const mostRecentReleaseHeading = changelogContent.indexOf('\n## ') - -function* makeTable(versions) { - const pkgNameMaxLength = Math.max( - 'Package'.length, - ...versions.map((pkg) => pkg.ident.length), - ) - const pkgVersionMaxLength = Math.max( - 'Version'.length, - ...versions.map((pkg) => pkg.newVersion.length), - ) - const makeRow = (...cells) => - `| ${cells.map((cell, i) => cell[i % 2 ? 'padStart' : 'padEnd'](i % 2 ? pkgVersionMaxLength : pkgNameMaxLength)).join(' | ')} |` - - yield makeRow('Package', 'Version', 'Package', 'Version') - yield makeRow( - ...Array.from({ length: 4 }, (_, i) => - '-'.repeat(i % 2 ? pkgVersionMaxLength : pkgNameMaxLength), - ), - ) - - const mid = Math.ceil(versions.length / 2) - for (let i = 0; i < mid; i++) { - const left = versions[i] || { ident: '', newVersion: '' } - const right = versions[i + mid] || { ident: '', newVersion: '' } - yield makeRow(left.ident, left.newVersion, right.ident, right.newVersion) - } -} - -/** - * Opens the changelog of a given package, creating it if it doesn't exist. - * - * @param {string} pkg Package name - * @returns {Promise} - */ -async function updateSubPackageChangelog(pkg, lines, subsetOfLines) { - const packageReleaseInfo = releases.find(({ ident }) => ident === pkg) - if (packageReleaseInfo == null) { - console.warn(pkg, 'is not being released') - return null - } - const { newVersion } = packageReleaseInfo - const url = new URL(`./${pkg}/CHANGELOG.md`, PACKAGES_FOLDER) - const heading = Buffer.from(`# ${pkg}\n`) - let fh - let oldContent - try { - fh = await fs.open(url, 'r+') // this will throw if the file doesn't exist - oldContent = await fh.readFile() - } catch (e) { - if (e.code !== 'ENOENT') { - throw e - } - // Creates the file if it doesn't exist yet. - fh = await fs.open(url, 'wx') - await fh.writeFile(heading) - } - const { bytesWritten } = await fh.write( - ` -## ${newVersion} - -Released: ${releasedDate} -Included in: Uppy v${uppyRelease.newVersion} - -${subsetOfLines.map((index) => lines[index]).join('\n')} -`, - heading.byteLength, - ) - if (oldContent != null) { - await fh.write( - oldContent, - heading.byteLength, - undefined, - bytesWritten + heading.byteLength, - ) - } - console.log(`packages/${pkg}/CHANGELOG.md`) // outputing the relative path of the file to git add it. - return fh.close() -} - -const subPackagesChangelogs = {} -const lines = [] -for await (const line of createInterface({ - input: createReadStream(new URL('./CHANGELOG.next.md', ROOT)), -})) { - const index = lines.push(line) - 1 - for (const pkg of line.slice(2, line.indexOf(':')).split(',')) { - subPackagesChangelogs[pkg] ??= [] - subPackagesChangelogs[pkg].push(index) - } -} - -await changelog.write( - ` -## ${uppyRelease.newVersion} - -Released: ${releasedDate} - -${Array.from(makeTable(releases)).join('\n')} - -${lines.join('\n')} - -${changelogContent.slice(mostRecentReleaseHeading)}`, - mostRecentReleaseHeading, -) -console.log('CHANGELOG.md') // outputing the relative path of the file to git add it. -await changelog.close() - -await Promise.all( - Object.entries(subPackagesChangelogs).map(([pkg, subsetOfLines]) => - updateSubPackageChangelog(pkg, lines, subsetOfLines), - ), -) diff --git a/yarn.lock b/yarn.lock index 31806d05a..00cffefe7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4891,7 +4891,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.20.0": +"@babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.5.5": version: 7.27.6 resolution: "@babel/runtime@npm:7.27.6" checksum: 10/cc957a12ba3781241b83d528eb69ddeb86ca5ac43179a825e83aa81263a6b3eb88c57bed8a937cdeacfc3192e07ec24c73acdfea4507d0c0428c8e23d6322bfe @@ -5122,6 +5122,261 @@ __metadata: languageName: node linkType: hard +"@changesets/apply-release-plan@npm:^7.0.12": + version: 7.0.12 + resolution: "@changesets/apply-release-plan@npm:7.0.12" + dependencies: + "@changesets/config": "npm:^3.1.1" + "@changesets/get-version-range-type": "npm:^0.4.0" + "@changesets/git": "npm:^3.0.4" + "@changesets/should-skip-package": "npm:^0.1.2" + "@changesets/types": "npm:^6.1.0" + "@manypkg/get-packages": "npm:^1.1.3" + detect-indent: "npm:^6.0.0" + fs-extra: "npm:^7.0.1" + lodash.startcase: "npm:^4.4.0" + outdent: "npm:^0.5.0" + prettier: "npm:^2.7.1" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.5.3" + checksum: 10/3ce05caa73b7b96a8a6be943507591925c44b22f209da001fb9d83df1d7a4569659e889373f5f7a208a121b3cf7bc17788969b8849bddaf13c27d6720e4e1c47 + languageName: node + linkType: hard + +"@changesets/assemble-release-plan@npm:^6.0.9": + version: 6.0.9 + resolution: "@changesets/assemble-release-plan@npm:6.0.9" + dependencies: + "@changesets/errors": "npm:^0.2.0" + "@changesets/get-dependents-graph": "npm:^2.1.3" + "@changesets/should-skip-package": "npm:^0.1.2" + "@changesets/types": "npm:^6.1.0" + "@manypkg/get-packages": "npm:^1.1.3" + semver: "npm:^7.5.3" + checksum: 10/f84656eabb700ed77f97751b282e1701636ed45a44b443abd9af0291870495cc046fee301478010f39a1dc455799065ae007b9d7d2bb5ae8b793b65bbb8e052a + languageName: node + linkType: hard + +"@changesets/changelog-git@npm:^0.2.1": + version: 0.2.1 + resolution: "@changesets/changelog-git@npm:0.2.1" + dependencies: + "@changesets/types": "npm:^6.1.0" + checksum: 10/c22f3c0baf50c102a6890046351ee42f65ff6d58747ba4f75e5e40da1ed5fbcfd0dc2d11cdfb86acbb3262e58acb93f096c798827cac570c1e22e8f32f58a30f + languageName: node + linkType: hard + +"@changesets/changelog-github@npm:^0.5.1": + version: 0.5.1 + resolution: "@changesets/changelog-github@npm:0.5.1" + dependencies: + "@changesets/get-github-info": "npm:^0.6.0" + "@changesets/types": "npm:^6.1.0" + dotenv: "npm:^8.1.0" + checksum: 10/1284e7dc067652edfa14792196e6036849455d121afabe63e8d1a7dc0e8fb0310edb58d1130f2a5944819ae4011eeecc7e0c44c1cda43e6a581a3add187c3447 + languageName: node + linkType: hard + +"@changesets/cli@npm:^2.29.5": + version: 2.29.5 + resolution: "@changesets/cli@npm:2.29.5" + dependencies: + "@changesets/apply-release-plan": "npm:^7.0.12" + "@changesets/assemble-release-plan": "npm:^6.0.9" + "@changesets/changelog-git": "npm:^0.2.1" + "@changesets/config": "npm:^3.1.1" + "@changesets/errors": "npm:^0.2.0" + "@changesets/get-dependents-graph": "npm:^2.1.3" + "@changesets/get-release-plan": "npm:^4.0.13" + "@changesets/git": "npm:^3.0.4" + "@changesets/logger": "npm:^0.1.1" + "@changesets/pre": "npm:^2.0.2" + "@changesets/read": "npm:^0.6.5" + "@changesets/should-skip-package": "npm:^0.1.2" + "@changesets/types": "npm:^6.1.0" + "@changesets/write": "npm:^0.4.0" + "@manypkg/get-packages": "npm:^1.1.3" + ansi-colors: "npm:^4.1.3" + ci-info: "npm:^3.7.0" + enquirer: "npm:^2.4.1" + external-editor: "npm:^3.1.0" + fs-extra: "npm:^7.0.1" + mri: "npm:^1.2.0" + p-limit: "npm:^2.2.0" + package-manager-detector: "npm:^0.2.0" + picocolors: "npm:^1.1.0" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.5.3" + spawndamnit: "npm:^3.0.1" + term-size: "npm:^2.1.0" + bin: + changeset: bin.js + checksum: 10/f401da29025d7bcc07b732bb09a9627f785bfc21c7c2005861d11ffea732bc14d33394fc2fcae50cc5f2b710f6080c5babe2fa90d432de5fdb47ae6afc147936 + languageName: node + linkType: hard + +"@changesets/config@npm:^3.1.1": + version: 3.1.1 + resolution: "@changesets/config@npm:3.1.1" + dependencies: + "@changesets/errors": "npm:^0.2.0" + "@changesets/get-dependents-graph": "npm:^2.1.3" + "@changesets/logger": "npm:^0.1.1" + "@changesets/types": "npm:^6.1.0" + "@manypkg/get-packages": "npm:^1.1.3" + fs-extra: "npm:^7.0.1" + micromatch: "npm:^4.0.8" + checksum: 10/9500e02b68801f052478b3e10523bd3a39b9e5e989e718832832537c9da965580f496262c2bc3f6e23a4e6fb4303f730a69dcbf2041f68d2fa7bd03dd1f82db0 + languageName: node + linkType: hard + +"@changesets/errors@npm:^0.2.0": + version: 0.2.0 + resolution: "@changesets/errors@npm:0.2.0" + dependencies: + extendable-error: "npm:^0.1.5" + checksum: 10/4b79373f92287af4f723e8dbbccaf0299aa8735fc043243d0ad587f04a7614615ea50180be575d4438b9f00aa82d1cf85e902b77a55bdd3e0a8dd97e77b18c60 + languageName: node + linkType: hard + +"@changesets/get-dependents-graph@npm:^2.1.3": + version: 2.1.3 + resolution: "@changesets/get-dependents-graph@npm:2.1.3" + dependencies: + "@changesets/types": "npm:^6.1.0" + "@manypkg/get-packages": "npm:^1.1.3" + picocolors: "npm:^1.1.0" + semver: "npm:^7.5.3" + checksum: 10/33f2bb5dc88443b68fd796fd3b019a553fb3e21cb957a8a117db2a6770ad81f7c156ebdc3b12cfa75169de918f11271a71f61034aec48a53bf1a936d6d783e3d + languageName: node + linkType: hard + +"@changesets/get-github-info@npm:^0.6.0": + version: 0.6.0 + resolution: "@changesets/get-github-info@npm:0.6.0" + dependencies: + dataloader: "npm:^1.4.0" + node-fetch: "npm:^2.5.0" + checksum: 10/4ba61eafb0a75fa7f741885b465d90559e63581e748527e060f90c37380a02f62810db3bc79a4e74d109754d7f72dc45249e1ac2be5fcaec6a7d0f99db1cee78 + languageName: node + linkType: hard + +"@changesets/get-release-plan@npm:^4.0.13": + version: 4.0.13 + resolution: "@changesets/get-release-plan@npm:4.0.13" + dependencies: + "@changesets/assemble-release-plan": "npm:^6.0.9" + "@changesets/config": "npm:^3.1.1" + "@changesets/pre": "npm:^2.0.2" + "@changesets/read": "npm:^0.6.5" + "@changesets/types": "npm:^6.1.0" + "@manypkg/get-packages": "npm:^1.1.3" + checksum: 10/9983fae5a68012c4c418ddd62f2fb3d325363f21160252ff7b868503a1a2effb8fdd32e4a0289b72653afc3605ce19d163ff69205c942a0004efb571a5f78fd0 + languageName: node + linkType: hard + +"@changesets/get-version-range-type@npm:^0.4.0": + version: 0.4.0 + resolution: "@changesets/get-version-range-type@npm:0.4.0" + checksum: 10/9868e99b31af652d3fa08fc33d55b9636f2feed1f4efdb318a6dbb4bb061281868de089b93041ce7f2775ab9cf454b92b1199767d0f4f228d8bbc483e61d2fd8 + languageName: node + linkType: hard + +"@changesets/git@npm:^3.0.4": + version: 3.0.4 + resolution: "@changesets/git@npm:3.0.4" + dependencies: + "@changesets/errors": "npm:^0.2.0" + "@manypkg/get-packages": "npm:^1.1.3" + is-subdir: "npm:^1.1.1" + micromatch: "npm:^4.0.8" + spawndamnit: "npm:^3.0.1" + checksum: 10/4f5a1f3354ec39d530df78b198eaaf2a8ef6cca873dd18efb8706aae09cab04e0d985abd236288644fac5d10cc5cb6ba2538c3e0be023c4d80790ff841f39fa6 + languageName: node + linkType: hard + +"@changesets/logger@npm:^0.1.1": + version: 0.1.1 + resolution: "@changesets/logger@npm:0.1.1" + dependencies: + picocolors: "npm:^1.1.0" + checksum: 10/bbfc050ddd0afdaa95bb790e81894b7548a2def059deeaed1685e22c10ede245ec2264df42bb2200cc0c8bd040e427bcd68a7afcca2633dc263a28e923d7c175 + languageName: node + linkType: hard + +"@changesets/parse@npm:^0.4.1": + version: 0.4.1 + resolution: "@changesets/parse@npm:0.4.1" + dependencies: + "@changesets/types": "npm:^6.1.0" + js-yaml: "npm:^3.13.1" + checksum: 10/2973ab8f38592a80efea589e148e5bdfd6ed3af86aa9206f941b5b3955f68464bf70a5965349f642667c708ebae60e4266be538328cd27075cace3f7cc1022e3 + languageName: node + linkType: hard + +"@changesets/pre@npm:^2.0.2": + version: 2.0.2 + resolution: "@changesets/pre@npm:2.0.2" + dependencies: + "@changesets/errors": "npm:^0.2.0" + "@changesets/types": "npm:^6.1.0" + "@manypkg/get-packages": "npm:^1.1.3" + fs-extra: "npm:^7.0.1" + checksum: 10/daaedd2747492ced61f107d38f90e535607bcb073b10ffac3d9e3bcad1a4cc082370884224fc6785af2d92d37f6b0a3bf853f9759b8fda294878d00d24344415 + languageName: node + linkType: hard + +"@changesets/read@npm:^0.6.5": + version: 0.6.5 + resolution: "@changesets/read@npm:0.6.5" + dependencies: + "@changesets/git": "npm:^3.0.4" + "@changesets/logger": "npm:^0.1.1" + "@changesets/parse": "npm:^0.4.1" + "@changesets/types": "npm:^6.1.0" + fs-extra: "npm:^7.0.1" + p-filter: "npm:^2.1.0" + picocolors: "npm:^1.1.0" + checksum: 10/fec0ac28801e0560fae0eb1d21250dd2a48aaff67bddd1b446a960afd761690d5873dca6eff369d43763bec61f1023d38a38876d5824e316e6de622dc52a24f3 + languageName: node + linkType: hard + +"@changesets/should-skip-package@npm:^0.1.2": + version: 0.1.2 + resolution: "@changesets/should-skip-package@npm:0.1.2" + dependencies: + "@changesets/types": "npm:^6.1.0" + "@manypkg/get-packages": "npm:^1.1.3" + checksum: 10/d09fcf1200ee201f0dd5b8049d90e8b5e0cfd34cc94f5c661c4cdab182a8263628733f9bc5886550a92f6f7857339d79fc77f12ffd53559b029a2bf9a2fa7ace + languageName: node + linkType: hard + +"@changesets/types@npm:^4.0.1": + version: 4.1.0 + resolution: "@changesets/types@npm:4.1.0" + checksum: 10/4d7c65a447400ac474b2dc2d79bc1a5341c305fbce4a648ef59d9939bc1bbbbd6852684c417a9a4ef0226468b9cb522b9ac2b5393f21fa5f20f1b12bee94eab5 + languageName: node + linkType: hard + +"@changesets/types@npm:^6.1.0": + version: 6.1.0 + resolution: "@changesets/types@npm:6.1.0" + checksum: 10/2dcd00712cb85d0c53afdd8d0e856b4bf9c0ce8dc36c838c918d44799aacd9ba8659b9ff610ff92b94fc03c8fd2b52c5b05418fcf8a1bd138cd9182414ede373 + languageName: node + linkType: hard + +"@changesets/write@npm:^0.4.0": + version: 0.4.0 + resolution: "@changesets/write@npm:0.4.0" + dependencies: + "@changesets/types": "npm:^6.1.0" + fs-extra: "npm:^7.0.1" + human-id: "npm:^4.1.1" + prettier: "npm:^2.7.1" + checksum: 10/bcea8431a09e282bdf66adbd8411d5d3cc19b4a2df519a42586c912b23a7b3ef18d1d0765e2d1a27ff175e2dfc9ef4c2df95cfa920dd4dd2972aaaf662afc6b9 + languageName: node + linkType: hard + "@cnakazawa/watch@npm:^1.0.3": version: 1.0.4 resolution: "@cnakazawa/watch@npm:1.0.4" @@ -7543,6 +7798,32 @@ __metadata: languageName: node linkType: hard +"@manypkg/find-root@npm:^1.1.0": + version: 1.1.0 + resolution: "@manypkg/find-root@npm:1.1.0" + dependencies: + "@babel/runtime": "npm:^7.5.5" + "@types/node": "npm:^12.7.1" + find-up: "npm:^4.1.0" + fs-extra: "npm:^8.1.0" + checksum: 10/31e7dde82612a0e37ebb07876d76b1bf2aedc5b285b5e50d94cdf63edbf1fa3970349b84a5837a3c687e5b643e9a4f4588ae1f4b4ae9d412516d57bf977a08db + languageName: node + linkType: hard + +"@manypkg/get-packages@npm:^1.1.3": + version: 1.1.3 + resolution: "@manypkg/get-packages@npm:1.1.3" + dependencies: + "@babel/runtime": "npm:^7.5.5" + "@changesets/types": "npm:^4.0.1" + "@manypkg/find-root": "npm:^1.1.0" + fs-extra: "npm:^8.1.0" + globby: "npm:^11.0.0" + read-yaml-file: "npm:^1.1.0" + checksum: 10/4912e002199ff3974ec48586376a04c5f1815a4faa5f4d36b0698838eec143c9d4e3d42c41e0de009f48a1e2251802ed63c1311ab44de225b50102f85919a248 + languageName: node + linkType: hard + "@mischnic/json-sourcemap@npm:^0.1.0": version: 0.1.1 resolution: "@mischnic/json-sourcemap@npm:0.1.1" @@ -11942,6 +12223,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^12.7.1": + version: 12.20.55 + resolution: "@types/node@npm:12.20.55" + checksum: 10/1f916a06fff02faadb09a16ed6e31820ce170798b202ef0b14fc244bfbd721938c54a3a99836e185e4414ca461fe96c5bb5c67c3d248f153555b7e6347f061dd + languageName: node + linkType: hard + "@types/prop-types@npm:*": version: 15.7.12 resolution: "@types/prop-types@npm:15.7.12" @@ -12277,6 +12565,8 @@ __metadata: resolution: "@uppy-dev/build@workspace:." dependencies: "@biomejs/biome": "npm:2.0.5" + "@changesets/changelog-github": "npm:^0.5.1" + "@changesets/cli": "npm:^2.29.5" npm-run-all: "npm:^4.1.5" start-server-and-test: "npm:^1.14.0" turbo: "npm:^2.5.4" @@ -12294,15 +12584,6 @@ __metadata: languageName: unknown linkType: soft -"@uppy-dev/release@workspace:private/release": - version: 0.0.0-use.local - resolution: "@uppy-dev/release@workspace:private/release" - dependencies: - globby: "npm:^13.0.0" - prompts: "npm:^2.4.2" - languageName: unknown - linkType: soft - "@uppy/angular@workspace:*, @uppy/angular@workspace:packages/@uppy/angular/projects/uppy/angular": version: 0.0.0-use.local resolution: "@uppy/angular@workspace:packages/@uppy/angular/projects/uppy/angular" @@ -15063,6 +15344,15 @@ __metadata: languageName: node linkType: hard +"better-path-resolve@npm:1.0.0": + version: 1.0.0 + resolution: "better-path-resolve@npm:1.0.0" + dependencies: + is-windows: "npm:^1.0.0" + checksum: 10/5392dbe04e7fe68b944eb37961d9dfa147aaac3ee9ee3f6e13d42e2c9fbe949e68d16e896c14ee9016fa5f8e6e53ec7fd8b5f01b50a32067a7d94ac9cfb9a050 + languageName: node + linkType: hard + "big-integer@npm:1.6.x": version: 1.6.52 resolution: "big-integer@npm:1.6.52" @@ -15829,7 +16119,7 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^3.2.0, ci-info@npm:^3.3.0": +"ci-info@npm:^3.2.0, ci-info@npm:^3.3.0, ci-info@npm:^3.7.0": version: 3.9.0 resolution: "ci-info@npm:3.9.0" checksum: 10/75bc67902b4d1c7b435497adeb91598f6d52a3389398e44294f6601b20cfef32cf2176f7be0eb961d9e085bb333a8a5cae121cb22f81cf238ae7f58eb80e9397 @@ -16680,7 +16970,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.6": +"cross-spawn@npm:^7.0.5, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" dependencies: @@ -17093,6 +17383,13 @@ __metadata: languageName: node linkType: hard +"dataloader@npm:^1.4.0": + version: 1.4.0 + resolution: "dataloader@npm:1.4.0" + checksum: 10/8dc2181f7fc243f657aa97b5aa51b9e0da88dee9a59a689bab50d4bac826c27ae0457db8d9a5d59559d636f6b997f419303ccfde595cc26191f37ab9c792fe01 + languageName: node + linkType: hard + "date-format@npm:^4.0.14": version: 4.0.14 resolution: "date-format@npm:4.0.14" @@ -17473,6 +17770,13 @@ __metadata: languageName: node linkType: hard +"detect-indent@npm:^6.0.0": + version: 6.1.0 + resolution: "detect-indent@npm:6.1.0" + checksum: 10/ab953a73c72dbd4e8fc68e4ed4bfd92c97eb6c43734af3900add963fd3a9316f3bc0578b018b24198d4c31a358571eff5f0656e81a1f3b9ad5c547d58b2d093d + languageName: node + linkType: hard + "detect-libc@npm:^1.0.3": version: 1.0.3 resolution: "detect-libc@npm:1.0.3" @@ -17712,6 +18016,13 @@ __metadata: languageName: node linkType: hard +"dotenv@npm:^8.1.0": + version: 8.6.0 + resolution: "dotenv@npm:8.6.0" + checksum: 10/31d7b5c010cebb80046ba6853d703f9573369b00b15129536494f04b0af4ea0060ce8646e3af58b455af2f6f1237879dd261a5831656410ec92561ae1ea44508 + languageName: node + linkType: hard + "dotenv@npm:~16.4.5": version: 16.4.7 resolution: "dotenv@npm:16.4.7" @@ -17954,7 +18265,7 @@ __metadata: languageName: node linkType: hard -"enquirer@npm:^2.3.6": +"enquirer@npm:^2.3.6, enquirer@npm:^2.4.1": version: 2.4.1 resolution: "enquirer@npm:2.4.1" dependencies: @@ -19996,6 +20307,13 @@ __metadata: languageName: node linkType: hard +"extendable-error@npm:^0.1.5": + version: 0.1.7 + resolution: "extendable-error@npm:0.1.7" + checksum: 10/80478be7429a1675d2085f701239796bab3230ed6f2fb1b138fbabec24bea6516b7c5ceb6e9c209efcc9c089948d93715703845653535f8e8a49655066a9255e + languageName: node + linkType: hard + "external-editor@npm:^3.1.0": version: 3.1.0 resolution: "external-editor@npm:3.1.0" @@ -20693,6 +21011,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^7.0.1": + version: 7.0.1 + resolution: "fs-extra@npm:7.0.1" + dependencies: + graceful-fs: "npm:^4.1.2" + jsonfile: "npm:^4.0.0" + universalify: "npm:^0.1.0" + checksum: 10/3fc6e56ba2f07c00d452163f27f21a7076b72ef7da8a50fef004336d59ef4c34deda11d10ecd73fd8fbcf20e4f575f52857293090b3c9f8741d4e0598be30fea + languageName: node + linkType: hard + "fs-extra@npm:^8.1.0": version: 8.1.0 resolution: "fs-extra@npm:8.1.0" @@ -21098,7 +21427,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.1.0": +"globby@npm:^11.0.0, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -21112,7 +21441,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^13.0.0, globby@npm:^13.1.1": +"globby@npm:^13.1.1": version: 13.2.2 resolution: "globby@npm:13.2.2" dependencies: @@ -21178,7 +21507,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10/bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2 @@ -21744,6 +22073,15 @@ __metadata: languageName: node linkType: hard +"human-id@npm:^4.1.1": + version: 4.1.1 + resolution: "human-id@npm:4.1.1" + bin: + human-id: dist/cli.js + checksum: 10/84fef1edd470fc155a34161107beed8baf77bafd20bf515c3fadfbce3690ecc9aa0bacf3fcf4cf9add3c274772ead3ef64aa6531374538ffebe8129fccfb0015 + languageName: node + linkType: hard + "human-signals@npm:^1.1.1": version: 1.1.1 resolution: "human-signals@npm:1.1.1" @@ -22635,6 +22973,15 @@ __metadata: languageName: node linkType: hard +"is-subdir@npm:^1.1.1": + version: 1.2.0 + resolution: "is-subdir@npm:1.2.0" + dependencies: + better-path-resolve: "npm:1.0.0" + checksum: 10/31029a383972bff4cc4f1bd1463fd04dde017e0a04ae3a6f6e08124a90c6c4656312d593101b0f38805fa3f3c8f6bc4583524bbf72c50784fa5ca0d3e5a76279 + languageName: node + linkType: hard + "is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": version: 1.0.4 resolution: "is-symbol@npm:1.0.4" @@ -22707,7 +23054,7 @@ __metadata: languageName: node linkType: hard -"is-windows@npm:^1.0.2": +"is-windows@npm:^1.0.0, is-windows@npm:^1.0.2": version: 1.0.2 resolution: "is-windows@npm:1.0.2" checksum: 10/438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 @@ -23540,7 +23887,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.13.1": +"js-yaml@npm:^3.13.1, js-yaml@npm:^3.6.1": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" dependencies: @@ -25010,6 +25357,13 @@ __metadata: languageName: node linkType: hard +"lodash.startcase@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.startcase@npm:4.4.0" + checksum: 10/3091048a54a2f92bcf2c6441d2bd9a706fb133d5f461ae7c310d6dca1530338a06c91e9e42a5b14b12e875ddae1814d448050dc02afe2cec09b3995d8e836837 + languageName: node + linkType: hard + "lodash.template@npm:^4.5.0": version: 4.5.0 resolution: "lodash.template@npm:4.5.0" @@ -26695,7 +27049,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.2.0, node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.12": +"node-fetch@npm:^2.2.0, node-fetch@npm:^2.5.0, node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.12": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -27630,6 +27984,13 @@ __metadata: languageName: node linkType: hard +"outdent@npm:^0.5.0": + version: 0.5.0 + resolution: "outdent@npm:0.5.0" + checksum: 10/7d94a7d93883afa32c99d84f33248b221f4eeeedbb571921fe0e5cf0bee32e64746c587e9606d98ec22762870c782d21dd4bc3a0edf442d347cb54aa107b198d + languageName: node + linkType: hard + "p-cancelable@npm:^3.0.0": version: 3.0.0 resolution: "p-cancelable@npm:3.0.0" @@ -27637,6 +27998,15 @@ __metadata: languageName: node linkType: hard +"p-filter@npm:^2.1.0": + version: 2.1.0 + resolution: "p-filter@npm:2.1.0" + dependencies: + p-map: "npm:^2.0.0" + checksum: 10/76e552ca624ce2233448d68b19eec9de42b695208121998f7e011edce71d1079a83096ee6a2078fb2a59cfa8a5c999f046edf00ebf16a8e780022010b4693234 + languageName: node + linkType: hard + "p-finally@npm:^1.0.0": version: 1.0.0 resolution: "p-finally@npm:1.0.0" @@ -27707,6 +28077,13 @@ __metadata: languageName: node linkType: hard +"p-map@npm:^2.0.0": + version: 2.1.0 + resolution: "p-map@npm:2.1.0" + checksum: 10/9e3ad3c9f6d75a5b5661bcad78c91f3a63849189737cd75e4f1225bf9ac205194e5c44aac2ef6f09562b1facdb9bd1425584d7ac375bfaa17b3f1a142dab936d + languageName: node + linkType: hard + "p-map@npm:^4.0.0": version: 4.0.0 resolution: "p-map@npm:4.0.0" @@ -27775,6 +28152,15 @@ __metadata: languageName: node linkType: hard +"package-manager-detector@npm:^0.2.0": + version: 0.2.11 + resolution: "package-manager-detector@npm:0.2.11" + dependencies: + quansync: "npm:^0.2.7" + checksum: 10/2c1a8da0e5895f0be06a8e1f4b4336fb78a19167ca3932dbaeca7260f948e67cf53b32585a13f8108341e7a468b38b4f2a8afc7b11691cb2d856ecd759d570fb + languageName: node + linkType: hard + "pacote@npm:18.0.6": version: 18.0.6 resolution: "pacote@npm:18.0.6" @@ -28919,6 +29305,15 @@ __metadata: languageName: node linkType: hard +"prettier@npm:^2.7.1": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: 10/00cdb6ab0281f98306cd1847425c24cbaaa48a5ff03633945ab4c701901b8e96ad558eb0777364ffc312f437af9b5a07d0f45346266e8245beaf6247b9c62b24 + languageName: node + linkType: hard + "pretty-bytes@npm:^5.6.0": version: 5.6.0 resolution: "pretty-bytes@npm:5.6.0" @@ -29262,6 +29657,13 @@ __metadata: languageName: node linkType: hard +"quansync@npm:^0.2.7": + version: 0.2.10 + resolution: "quansync@npm:0.2.10" + checksum: 10/b54d955de867e104025f2666d52b2b67befe4e0f184a96acc9adcbdc572e46dce49c69d1e79f99413beae8a974a576383806a05f85f9a826865dc589ee1bcaf2 + languageName: node + linkType: hard + "querystringify@npm:^2.1.1": version: 2.2.0 resolution: "querystringify@npm:2.2.0" @@ -29645,6 +30047,18 @@ __metadata: languageName: node linkType: hard +"read-yaml-file@npm:^1.1.0": + version: 1.1.0 + resolution: "read-yaml-file@npm:1.1.0" + dependencies: + graceful-fs: "npm:^4.1.5" + js-yaml: "npm:^3.6.1" + pify: "npm:^4.0.1" + strip-bom: "npm:^3.0.0" + checksum: 10/41ee5f075507ef0403328dd54e225a61c3149f915675ce7fd0fd791ddcce2e6c30a9fe0f76ffa7a465c1c157b9b4ad8ded1dcf47dc3b396103eeb013490bbc2e + languageName: node + linkType: hard + "readable-stream@npm:1.1.x": version: 1.1.14 resolution: "readable-stream@npm:1.1.14" @@ -31760,6 +32174,16 @@ __metadata: languageName: node linkType: hard +"spawndamnit@npm:^3.0.1": + version: 3.0.1 + resolution: "spawndamnit@npm:3.0.1" + dependencies: + cross-spawn: "npm:^7.0.5" + signal-exit: "npm:^4.0.1" + checksum: 10/47d88a7f1e5691e13e435eddc3d34123c2f7746e2853e91bfac5ea7c6e3bb4b1d1995223b25f7a8745871510d92f63ecd3c9fa02aa2896ac0c79fb618eb08bbe + languageName: node + linkType: hard + "spdx-correct@npm:^3.0.0": version: 3.2.0 resolution: "spdx-correct@npm:3.2.0" @@ -32638,7 +33062,7 @@ __metadata: languageName: node linkType: hard -"term-size@npm:^2.2.1": +"term-size@npm:^2.1.0, term-size@npm:^2.2.1": version: 2.2.1 resolution: "term-size@npm:2.2.1" checksum: 10/f96aca2d4139c91e3359f5949ffb86f0a58f8c254ab7fe4a64b65126974939c782db6aaa91bf51a56d0344e505e22f9a0186f2f689e23ac9382b54606603c537