From 118438625254c955e45c304e0543183331208eae Mon Sep 17 00:00:00 2001 From: e Date: Sat, 5 Nov 2022 13:18:15 -0600 Subject: [PATCH] Use node 16 --- .github/workflows/release.yml | 40 ++- .github/workflows/test_readme.yml | 8 +- action.yml | 4 +- main.ts | 61 ++-- package.json | 8 +- src/ImageDetector.ts | 43 ++- src/LayerCache.ts | 377 +++++++++++++--------- yarn.lock | 508 +++++++++++++++++------------- 8 files changed, 610 insertions(+), 439 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 62d539f1..b775b8f9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,27 +16,27 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/setup-node@v1 + - uses: actions/setup-node@v3 with: - node-version: 12.x + node-version: 16.x - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Output info id: info run: | if [ '${{ github.event_name }}' = 'pull_request' ]; then - echo '::set-output name=commit_message::' + echo "commit_message=" >> $GITHUB_OUTPUT exit 0 fi - echo '::set-output name=commit_message::[auto]' + echo "commit_message=[auto]" >> $GITHUB_OUTPUT - - uses: satackey/push-prebuilt-action@v0.2.0-beta3 + - uses: jpribyl/push-prebuilt-action@v0.2.3 with: commit-message: ${{ steps.info.outputs.commit_message }} push-branch: '{branch}-release' - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 if: github.event_name != 'delete' with: name: built @@ -44,7 +44,7 @@ jobs: - name: Output matrix id: set_matrix - uses: actions/github-script@v2 + uses: actions/github-script@v6 with: script: | return { @@ -69,12 +69,12 @@ jobs: }, { inspect_image: 'nothing', os: 'ubuntu-latest', - prepare_command: 'docker tag node:12 nothing', + prepare_command: 'docker tag node:16 nothing', build_command: ':', }, { inspect_image: 'nothing', os: 'windows-latest', - prepare_command: 'docker tag mcr.microsoft.com/windows/nanoserver:1809 nothing', + prepare_command: 'docker pull mcr.microsoft.com/windows/nanoserver:1809; docker tag mcr.microsoft.com/windows/nanoserver:1809 nothing', build_command: ':', }, { branch: process.env.GITHUB_REF.replace('refs/heads/', '') @@ -99,18 +99,17 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - run: ${{ matrix.prepare_command }} - name: Download action - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: built path: action-dlc - - uses: ./action-dlc - name: Run satackey/action-docker-layer-caching@${{ matrix.branch }} + name: Run jpribyl/action-docker-layer-caching@${{ matrix.branch }} with: key: docker-layer-caching-${{ matrix.os }}-${{ matrix.inspect_image }}-sha:${{ github.sha }}-{hash} @@ -123,23 +122,22 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - run: ${{ matrix.prepare_command }} - name: Extract id: extract - run: | - echo "##[set-output name=branch;]${GITHUB_REF#refs/heads/}" + run: echo "branch=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT - name: Download action - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: built path: action-dlc - uses: ./action-dlc - name: Run satackey/action-docker-layer-caching@${{ matrix.branch }} + name: Run jpribyl/action-docker-layer-caching@${{ matrix.branch }} with: key: never-restored-docker-layer-caching-${{ matrix.os }}-${{ matrix.inspect_image }}-sha:${{ github.sha }}-{hash} restore-keys: docker-layer-caching-${{ matrix.os }}-${{ matrix.inspect_image }}-sha:${{ github.sha }}- @@ -149,7 +147,7 @@ jobs: run: docker inspect ${{ matrix.inspect_image }} - name: Get cached image ID - run: echo ::set-output name=id::$(docker image ls -q ${{ matrix.inspect_image }}) + run: echo id=$(docker image ls -q ${{ matrix.inspect_image }}) >> $GITHUB_OUTPUT id: cached - run: ${{ matrix.build_command }} @@ -158,7 +156,7 @@ jobs: run: docker inspect ${{ matrix.inspect_image }} - name: Show built image ID - run: echo ::set-output name=id::$(docker image ls -q ${{ matrix.inspect_image }}) + run: echo id=$(docker image ls -q ${{ matrix.inspect_image }}) >> $GITHUB_OUTPUT id: latest - name: Compare cached ID and after build ID diff --git a/.github/workflows/test_readme.yml b/.github/workflows/test_readme.yml index cec03ce0..f0d81340 100644 --- a/.github/workflows/test_readme.yml +++ b/.github/workflows/test_readme.yml @@ -77,7 +77,7 @@ jobs: - run: ${{ matrix.prepare_command }} - - uses: satackey/action-docker-layer-caching@master-release + - uses: jpribyl/action-docker-layer-caching@master-release with: key: docker-layer-caching-${{ github.workflow }}-${{ matrix.os }}-${{ matrix.inspect_image }}-sha:${{ github.sha }}-{hash} restore-keys: '' @@ -95,7 +95,7 @@ jobs: - run: ${{ matrix.prepare_command }} - - uses: satackey/action-docker-layer-caching@master-release + - uses: jpribyl/action-docker-layer-caching@master-release with: key: never-restored-docker-layer-caching-${{ github.workflow }}-${{ matrix.os }}-${{ matrix.inspect_image }}-sha:${{ github.sha }}-{hash} restore-keys: docker-layer-caching-${{ github.workflow }}-${{ matrix.os }}-${{ matrix.inspect_image }}-sha:${{ github.sha }}- @@ -105,7 +105,7 @@ jobs: run: docker inspect ${{ matrix.inspect_image }} - name: Get cached image ID - run: echo ::set-output name=id::$(docker image ls -q ${{ matrix.inspect_image }}) + run: echo id=$(docker image ls -q ${{ matrix.inspect_image }}) >> $GITHUB_OUTPUT id: cached - run: ${{ matrix.build_command }} @@ -114,7 +114,7 @@ jobs: run: docker inspect ${{ matrix.inspect_image }} - name: Show built image ID - run: echo ::set-output name=id::$(docker image ls -q ${{ matrix.inspect_image }}) + run: echo id=$(docker image ls -q ${{ matrix.inspect_image }}) >> $GITHUB_OUTPUT id: latest - name: Compare cached ID and after build ID diff --git a/action.yml b/action.yml index 1a822ea9..e6420739 100644 --- a/action.yml +++ b/action.yml @@ -1,4 +1,4 @@ -name: Docker Layer Caching +name: Docker Layer Caching2 description: Cache images created between main run and post run branding: @@ -24,6 +24,6 @@ inputs: default: 'false' runs: - using: node12 + using: node16 main: main.ts post: post.ts diff --git a/main.ts b/main.ts index b271fca0..7b20de74 100644 --- a/main.ts +++ b/main.ts @@ -1,30 +1,47 @@ -import * as core from '@actions/core' -import * as exec from 'actions-exec-listener' -import { LayerCache } from './src/LayerCache' -import { ImageDetector } from './src/ImageDetector' +import * as core from "@actions/core"; +import * as exec from "actions-exec-listener"; +import { LayerCache } from "./src/LayerCache"; +import { ImageDetector } from "./src/ImageDetector"; const main = async () => { - const primaryKey = core.getInput(`key`, { required: true }) - const restoreKeys = core.getInput(`restore-keys`, { required: false }).split(`\n`).filter(key => key !== ``) + const primaryKey = core.getInput(`key`, { required: true }); + const restoreKeys = core + .getInput(`restore-keys`, { required: false }) + .split(`\n`) + .filter((key) => key !== ``); - const imageDetector = new ImageDetector() + const imageDetector = new ImageDetector(); - const alreadyExistingImages = await imageDetector.getExistingImages() - core.saveState(`already-existing-images`, JSON.stringify(alreadyExistingImages)) + const alreadyExistingImages = await imageDetector.getExistingImages(); + core.saveState( + `already-existing-images`, + JSON.stringify(alreadyExistingImages) + ); - const layerCache = new LayerCache([]) - layerCache.concurrency = parseInt(core.getInput(`concurrency`, { required: true }), 10) - const restoredKey = await layerCache.restore(primaryKey, restoreKeys) - await layerCache.cleanUp() + const layerCache = new LayerCache([]); + layerCache.concurrency = parseInt( + core.getInput(`concurrency`, { required: true }), + 10 + ); + const restoredKey = await layerCache.restore(primaryKey, restoreKeys); + await layerCache.cleanUp(); - core.saveState(`restored-key`, JSON.stringify(restoredKey !== undefined ? restoredKey : '')) - core.saveState(`restored-images`, JSON.stringify(await imageDetector.getImagesShouldSave(alreadyExistingImages))) -} + core.saveState( + `restored-key`, + JSON.stringify(restoredKey !== undefined ? restoredKey : "") + ); + core.saveState( + `restored-images`, + JSON.stringify( + await imageDetector.getImagesShouldSave(alreadyExistingImages) + ) + ); +}; -main().catch(e => { - console.error(e) - core.setFailed(e) +main().catch((e) => { + console.error(e); + core.setFailed(e); - core.saveState(`restored-key`, JSON.stringify(``)) - core.saveState(`restored-images`, JSON.stringify([])) -}) + core.saveState(`restored-key`, JSON.stringify(``)); + core.saveState(`restored-images`, JSON.stringify([])); +}); diff --git a/package.json b/package.json index d44f837a..bcb162d9 100644 --- a/package.json +++ b/package.json @@ -15,14 +15,14 @@ "native-promise-pool": "^3.16.0", "recursive-readdir": "^2.2.2", "string-format": "^2.0.0", - "typescript-is": "^0.17.1" + "typescript-is": "^0.19.0" }, "devDependencies": { "@types/node": "^14.14.14", "@types/string-format": "^2.0.0", - "@zeit/ncc": "^0.22.3", + "@vercel/ncc": "^0.34.0", "ts-node": "^9.1.1", - "ttypescript": "^1.5.12", - "typescript": "^4.2.3" + "ttypescript": "^1.5.13", + "typescript": ">=4.1.5 <4.7.2" } } diff --git a/src/ImageDetector.ts b/src/ImageDetector.ts index 905881ac..cd4cf9c5 100644 --- a/src/ImageDetector.ts +++ b/src/ImageDetector.ts @@ -1,20 +1,39 @@ -import * as exec from 'actions-exec-listener' -import * as core from '@actions/core' +import * as exec from "actions-exec-listener"; +import * as core from "@actions/core"; export class ImageDetector { async getExistingImages(): Promise { - const existingSet = new Set([]) - const ids = (await exec.exec(`docker image ls -q`, [], { silent: true, listeners: { stderr: console.warn }})).stdoutStr.split(`\n`).filter(id => id !== ``) - const repotags = (await exec.exec(`docker`, `image ls --format {{.Repository}}:{{.Tag}} --filter dangling=false`.split(' '), { silent: true, listeners: { stderr: console.warn }})).stdoutStr.split(`\n`).filter(id => id !== ``); + const existingSet = new Set([]); + const ids = ( + await exec.exec(`docker image ls -q`, [], { + silent: true, + listeners: { stderr: console.warn }, + }) + ).stdoutStr + .split(`\n`) + .filter((id) => id !== ``); + const repotags = ( + await exec.exec( + `docker`, + `image ls --format {{.Repository}}:{{.Tag}} --filter dangling=false`.split( + " " + ), + { silent: true, listeners: { stderr: console.warn } } + ) + ).stdoutStr + .split(`\n`) + .filter((id) => id !== ``); core.debug(JSON.stringify({ log: "getExistingImages", ids, repotags })); - ([...ids, ...repotags]).forEach(image => existingSet.add(image)) - core.debug(JSON.stringify({ existingSet })) - return Array.from(existingSet) + [...ids, ...repotags].forEach((image) => existingSet.add(image)); + core.debug(JSON.stringify({ existingSet })); + return Array.from(existingSet); } - async getImagesShouldSave(alreadRegisteredImages: string[]): Promise { - const resultSet = new Set(await this.getExistingImages()) - alreadRegisteredImages.forEach(image => resultSet.delete(image)) - return Array.from(resultSet) + async getImagesShouldSave( + alreadRegisteredImages: string[] + ): Promise { + const resultSet = new Set(await this.getExistingImages()); + alreadRegisteredImages.forEach((image) => resultSet.delete(image)); + return Array.from(resultSet); } } diff --git a/src/LayerCache.ts b/src/LayerCache.ts index 5fdfe646..f64f4a45 100644 --- a/src/LayerCache.ts +++ b/src/LayerCache.ts @@ -1,301 +1,364 @@ -import * as path from 'path' -import * as exec from 'actions-exec-listener' -import crypto from 'crypto' -import * as core from '@actions/core' -import * as cache from '@actions/cache' -import { ExecOptions } from '@actions/exec/lib/interfaces' -import { promises as fs } from 'fs' -import recursiveReaddir from 'recursive-readdir' -import { Manifest, loadManifests, loadRawManifests } from './Tar' -import format from 'string-format' -import PromisePool from 'native-promise-pool' +import * as path from "path"; +import * as exec from "actions-exec-listener"; +import crypto from "crypto"; +import * as core from "@actions/core"; +import * as cache from "@actions/cache"; +import { ExecOptions } from "@actions/exec/lib/interfaces"; +import { existsSync, promises as fs } from "fs"; +import recursiveReaddir from "recursive-readdir"; +import { Manifest, loadManifests, loadRawManifests } from "./Tar"; +import format from "string-format"; +import PromisePool from "native-promise-pool"; class LayerCache { - ids: string[] = [] - unformattedSaveKey: string = '' - restoredRootKey: string = '' - imagesDir: string = path.join(__dirname, '..', '.adlc') - enabledParallel = true - concurrency: number = 4 + ids: string[] = []; + unformattedSaveKey: string = ""; + restoredRootKey: string = ""; + imagesDir: string = path.join(__dirname, "..", ".adlc"); + enabledParallel = true; + concurrency: number = 4; - static ERROR_CACHE_ALREAD_EXISTS_STR = `Unable to reserve cache with key` - static ERROR_LAYER_CACHE_NOT_FOUND_STR = `Layer cache not found` + static ERROR_CACHE_ALREAD_EXISTS_STR = `Unable to reserve cache with key`; + static ERROR_LAYER_CACHE_NOT_FOUND_STR = `Layer cache not found`; constructor(ids: string[]) { - this.ids = ids + this.ids = ids; } async exec(command: string, args?: string[], options?: ExecOptions) { - const result = await exec.exec(command, args, options) + const result = await exec.exec(command, args, options); - return result + return result; } async store(key: string) { - this.unformattedSaveKey = key + this.unformattedSaveKey = key; - await this.saveImageAsUnpacked() + await this.saveImageAsUnpacked(); if (this.enabledParallel) { - await this.separateAllLayerCaches() + await this.separateAllLayerCaches(); } - if (await this.storeRoot() === undefined) { - core.info(`cache key already exists, aborting.`) - return false + if ((await this.storeRoot()) === undefined) { + core.info(`cache key already exists, aborting.`); + return false; } - await Promise.all(this.enabledParallel ? await this.storeLayers() : []) - return true + await Promise.all(this.enabledParallel ? await this.storeLayers() : []); + return true; } private async saveImageAsUnpacked() { - await fs.mkdir(this.getUnpackedTarDir(), { recursive: true }) - await this.exec(`sh -c`, [`docker save '${(await this.makeRepotagsDockerSaveArgReady(this.ids)).join(`' '`)}' | tar xf - -C .`], { cwd: this.getUnpackedTarDir() }) - } - - private async makeRepotagsDockerSaveArgReady(repotags: string[]): Promise { + await fs.mkdir(this.getUnpackedTarDir(), { recursive: true }); + await this.exec( + `sh -c`, + [ + `docker save '${( + await this.makeRepotagsDockerSaveArgReady(this.ids) + ).join(`' '`)}' | tar xf - -C .`, + ], + { cwd: this.getUnpackedTarDir() } + ); + } + + private async makeRepotagsDockerSaveArgReady( + repotags: string[] + ): Promise { const getMiddleIdsWithRepotag = async (id: string): Promise => { - return [id, ...(await this.getAllImageIdsFrom(id))] - } - return (await Promise.all(repotags.map(getMiddleIdsWithRepotag))).flat() + return [id, ...(await this.getAllImageIdsFrom(id))]; + }; + return (await Promise.all(repotags.map(getMiddleIdsWithRepotag))).flat(); } private async getAllImageIdsFrom(repotag: string): Promise { - const { stdoutStr: rawHistoryIds } = await this.exec(`docker history -q`, [repotag], { silent: true, listeners: { stderr: console.warn }}) - const historyIds = rawHistoryIds.split(`\n`).filter(id => id !== `` && id !== ``) - return historyIds + const { stdoutStr: rawHistoryIds } = await this.exec( + `docker history -q`, + [repotag], + { silent: true, listeners: { stderr: console.warn } } + ); + const historyIds = rawHistoryIds + .split(`\n`) + .filter((id) => id !== `` && id !== ``); + return historyIds; } private async getManifests() { - return loadManifests(this.getUnpackedTarDir()) + return loadManifests(this.getUnpackedTarDir()); } private async storeRoot() { - const rootKey = await this.generateRootSaveKey() - const paths = [ - this.getUnpackedTarDir(), - ] - core.info(`Start storing root cache, key: ${rootKey}, dir: ${paths}`) - const cacheId = await LayerCache.dismissError(cache.saveCache(paths, rootKey), LayerCache.ERROR_CACHE_ALREAD_EXISTS_STR, -1) - core.info(`Stored root cache, key: ${rootKey}, id: ${cacheId}`) - return cacheId !== -1 ? cacheId : undefined + const rootKey = await this.generateRootSaveKey(); + const paths = [this.getUnpackedTarDir()]; + core.info(`Start storing root cache, key: ${rootKey}, dir: ${paths}`); + const cacheId = await LayerCache.dismissError( + cache.saveCache(paths, rootKey), + LayerCache.ERROR_CACHE_ALREAD_EXISTS_STR, + -1 + ); + core.info(`Stored root cache, key: ${rootKey}, id: ${cacheId}`); + return cacheId !== -1 ? cacheId : undefined; } private async separateAllLayerCaches() { - await this.moveLayerTarsInDir(this.getUnpackedTarDir(), this.getLayerCachesDir()) + await this.moveLayerTarsInDir( + this.getUnpackedTarDir(), + this.getLayerCachesDir() + ); } private async joinAllLayerCaches() { - await this.moveLayerTarsInDir(this.getLayerCachesDir(), this.getUnpackedTarDir()) + await this.moveLayerTarsInDir( + this.getLayerCachesDir(), + this.getUnpackedTarDir() + ); } private async moveLayerTarsInDir(fromDir: string, toDir: string) { const layerTars = (await recursiveReaddir(fromDir)) - .filter(layerPath => path.basename(layerPath) === `layer.tar`) - .map(layerPath => path.relative(fromDir, layerPath)) + .filter((layerPath) => path.basename(layerPath) === `layer.tar`) + .map((layerPath) => path.relative(fromDir, layerPath)); const moveLayer = async (layer: string) => { - const from = path.join(fromDir, layer) - const to = path.join(toDir, layer) - core.debug(`Moving layer tar from ${from} to ${to}`) - await fs.mkdir(path.dirname(to), { recursive: true }) - await fs.rename(from, to) - } - await Promise.all(layerTars.map(moveLayer)) + const from = path.join(fromDir, layer); + const to = path.join(toDir, layer); + core.debug(`Moving layer tar from ${from} to ${to}`); + await fs.mkdir(path.dirname(to), { recursive: true }); + await fs.rename(from, to); + }; + await Promise.all(layerTars.map(moveLayer)); } private async storeLayers(): Promise { - const pool = new PromisePool(this.concurrency) + const pool = new PromisePool(this.concurrency); - const result = Promise.all( - (await this.getLayerIds()).map( - layerId => { - return pool.open(() => this.storeSingleLayerBy(layerId)) - } - ) - ) - return result + const result = Promise.all( + (await this.getLayerIds()).map((layerId) => { + return pool.open(() => this.storeSingleLayerBy(layerId)); + }) + ); + return result; } - static async dismissError(promise: Promise, dismissStr: string, defaultResult: T): Promise { + static async dismissError( + promise: Promise, + dismissStr: string, + defaultResult: T + ): Promise { try { - return await promise - } catch (e) { - core.debug(`catch error: ${e.toString()}`) - if (typeof e.message !== 'string' || !e.message.includes(dismissStr)) { - core.error(`Unexpected error: ${e.toString()}`) - throw e + return await promise; + } catch (e: any) { + core.debug(`catch error: ${e.toString()}`); + if (typeof e.message !== "string" || !e.message.includes(dismissStr)) { + core.error(`Unexpected error: ${e.toString()}`); + throw e; } - core.info(`${dismissStr}: ${e.toString()}`) - core.debug(e) - return defaultResult + core.info(`${dismissStr}: ${e.toString()}`); + core.debug(e); + return defaultResult; } } private async storeSingleLayerBy(layerId: string): Promise { - const path = this.genSingleLayerStorePath(layerId) - const key = await this.generateSingleLayerSaveKey(layerId) + const path = this.genSingleLayerStorePath(layerId); + const key = await this.generateSingleLayerSaveKey(layerId); - core.info(`Start storing layer cache: ${JSON.stringify({ layerId, key })}`) - const cacheId = await LayerCache.dismissError(cache.saveCache([path], key), LayerCache.ERROR_CACHE_ALREAD_EXISTS_STR, -1) - core.info(`Stored layer cache: ${JSON.stringify({ key, cacheId })}`) + core.info(`Start storing layer cache: ${JSON.stringify({ layerId, key })}`); + const cacheId = await LayerCache.dismissError( + cache.saveCache([path], key), + LayerCache.ERROR_CACHE_ALREAD_EXISTS_STR, + -1 + ); + core.info(`Stored layer cache: ${JSON.stringify({ key, cacheId })}`); - core.debug(JSON.stringify({ log: `storeSingleLayerBy`, layerId, path, key, cacheId})) - return cacheId + core.debug( + JSON.stringify({ log: `storeSingleLayerBy`, layerId, path, key, cacheId }) + ); + return cacheId; } // --- async restore(primaryKey: string, restoreKeys?: string[]) { - const restoredCacheKey = await this.restoreRoot(primaryKey, restoreKeys) + const restoredCacheKey = await this.restoreRoot(primaryKey, restoreKeys); if (restoredCacheKey === undefined) { - core.info(`Root cache could not be found. aborting.`) - return undefined + core.info(`Root cache could not be found. aborting.`); + return undefined; } if (this.enabledParallel) { - const hasRestoredAllLayers = await this.restoreLayers() + const hasRestoredAllLayers = await this.restoreLayers(); if (!hasRestoredAllLayers) { - core.info(`Some layer cache could not be found. aborting.`) - return undefined + core.info(`Some layer cache could not be found. aborting.`); + return undefined; } - await this.joinAllLayerCaches() + await this.joinAllLayerCaches(); } - await this.loadImageFromUnpacked() - return restoredCacheKey - } - - private async restoreRoot(primaryKey: string, restoreKeys?: string[]): Promise { - core.debug(`Trying to restore root cache: ${ JSON.stringify({ restoreKeys, dir: this.getUnpackedTarDir() }) }`) - const restoredRootKey = await cache.restoreCache([this.getUnpackedTarDir()], primaryKey, restoreKeys) - core.debug(`restoredRootKey: ${restoredRootKey}`) + await this.loadImageFromUnpacked(); + return restoredCacheKey; + } + + private async restoreRoot( + primaryKey: string, + restoreKeys?: string[] + ): Promise { + core.debug( + `Trying to restore root cache: ${JSON.stringify({ + restoreKeys, + dir: this.getUnpackedTarDir(), + })}` + ); + const restoredRootKey = await cache.restoreCache( + [this.getUnpackedTarDir()], + primaryKey, + restoreKeys + ); + core.debug(`restoredRootKey: ${restoredRootKey}`); if (restoredRootKey === undefined) { - return undefined + return undefined; } - this.restoredRootKey = restoredRootKey + this.restoredRootKey = restoredRootKey; - return restoredRootKey + return restoredRootKey; } private async restoreLayers(): Promise { - const pool = new PromisePool(this.concurrency) - const tasks = (await this.getLayerIds()).map( - layerId => pool.open(() => this.restoreSingleLayerBy(layerId)) - ) + const pool = new PromisePool(this.concurrency); + const tasks = (await this.getLayerIds()).map((layerId) => + pool.open(() => this.restoreSingleLayerBy(layerId)) + ); try { - await Promise.all(tasks) - } catch (e) { - if (typeof e.message === `string` && e.message.includes(LayerCache.ERROR_LAYER_CACHE_NOT_FOUND_STR)) { - core.info(e.message) + await Promise.all(tasks); + } catch (e: any) { + if ( + typeof e.message === `string` && + e.message.includes(LayerCache.ERROR_LAYER_CACHE_NOT_FOUND_STR) + ) { + core.info(e.message); // Avoid UnhandledPromiseRejectionWarning - tasks.map(task => task.catch(core.info)) + tasks.map((task) => task.catch(core.info)); - return false + return false; } - throw e + throw e; } - return true + return true; } private async restoreSingleLayerBy(id: string): Promise { - const layerPath = this.genSingleLayerStorePath(id) - const key = await this.recoverSingleLayerKey(id) - const dir = path.dirname(layerPath) + const layerPath = this.genSingleLayerStorePath(id); + const key = await this.recoverSingleLayerKey(id); + const dir = path.dirname(layerPath); - core.debug(JSON.stringify({ log: `restoreSingleLayerBy`, id, layerPath, dir, key })) + core.debug( + JSON.stringify({ log: `restoreSingleLayerBy`, id, layerPath, dir, key }) + ); - await fs.mkdir(dir, { recursive: true }) - const result = await cache.restoreCache([layerPath], key) + await fs.mkdir(dir, { recursive: true }); + const result = await cache.restoreCache([layerPath], key); if (result == null) { - throw new Error(`${LayerCache.ERROR_LAYER_CACHE_NOT_FOUND_STR}: ${JSON.stringify({ id })}`) + throw new Error( + `${LayerCache.ERROR_LAYER_CACHE_NOT_FOUND_STR}: ${JSON.stringify({ + id, + })}` + ); } - return result + return result; } private async loadImageFromUnpacked() { - await exec.exec(`sh -c`, [`tar cf - . | docker load`], { cwd: this.getUnpackedTarDir() }) + await exec.exec(`sh -c`, [`tar cf - . | docker load`], { + cwd: this.getUnpackedTarDir(), + }); } async cleanUp() { - await fs.rmdir(this.getImagesDir(), { recursive: true }) + if (existsSync(this.getImagesDir())) { + await fs.rm(this.getImagesDir(), { recursive: true }); + } } // --- getImagesDir(): string { - return this.imagesDir + return this.imagesDir; } getUnpackedTarDir(): string { - return path.join(this.getImagesDir(), this.getCurrentTarStoreDir()) + return path.join(this.getImagesDir(), this.getCurrentTarStoreDir()); } getLayerCachesDir() { - return `${this.getUnpackedTarDir()}-layers` + return `${this.getUnpackedTarDir()}-layers`; } getCurrentTarStoreDir(): string { - return 'image' + return "image"; } genSingleLayerStorePath(id: string) { - return path.join(this.getLayerCachesDir(), id, `layer.tar`) + return path.join(this.getLayerCachesDir(), id, `layer.tar`); } async generateRootHashFromManifest(): Promise { - const manifest = await loadRawManifests(this.getUnpackedTarDir()) - return crypto.createHash(`sha256`).update(manifest, `utf8`).digest(`hex`) + const manifest = await loadRawManifests(this.getUnpackedTarDir()); + return crypto.createHash(`sha256`).update(manifest, `utf8`).digest(`hex`); } async generateRootSaveKey(): Promise { - const rootHash = await this.generateRootHashFromManifest() - const formatted = await this.getFormattedSaveKey(rootHash) - core.debug(JSON.stringify({ log: `generateRootSaveKey`, rootHash, formatted })) - return `${formatted}-root` + const rootHash = await this.generateRootHashFromManifest(); + const formatted = await this.getFormattedSaveKey(rootHash); + core.debug( + JSON.stringify({ log: `generateRootSaveKey`, rootHash, formatted }) + ); + return `${formatted}-root`; } async generateSingleLayerSaveKey(id: string) { - const formatted = await this.getFormattedSaveKey(id) - core.debug(JSON.stringify({ log: `generateSingleLayerSaveKey`, formatted, id })) - return `layer-${formatted}` + const formatted = await this.getFormattedSaveKey(id); + core.debug( + JSON.stringify({ log: `generateSingleLayerSaveKey`, formatted, id }) + ); + return `layer-${formatted}`; } - + async recoverSingleLayerKey(id: string) { - const unformatted = await this.recoverUnformattedSaveKey() - return format(`layer-${unformatted}`, { hash: id }) + const unformatted = await this.recoverUnformattedSaveKey(); + return format(`layer-${unformatted}`, { hash: id }); } async getFormattedSaveKey(hash: string) { - const result = format(this.unformattedSaveKey, { hash }) - core.debug(JSON.stringify({ log: `getFormattedSaveKey`, hash, result })) - return result + const result = format(this.unformattedSaveKey, { hash }); + core.debug(JSON.stringify({ log: `getFormattedSaveKey`, hash, result })); + return result; } async recoverUnformattedSaveKey() { - const hash = await this.generateRootHashFromManifest() - core.debug(JSON.stringify({ log: `recoverUnformattedSaveKey`, hash})) + const hash = await this.generateRootHashFromManifest(); + core.debug(JSON.stringify({ log: `recoverUnformattedSaveKey`, hash })); - return this.restoredRootKey.replace(hash, `{hash}`).replace(/-root$/, ``) + return this.restoredRootKey.replace(hash, `{hash}`).replace(/-root$/, ``); } async getLayerTarFiles(): Promise { - const getTarFilesFromManifest = (manifest: Manifest) => manifest.Layers + const getTarFilesFromManifest = (manifest: Manifest) => manifest.Layers; - const tarFilesThatMayDuplicate = (await this.getManifests()).flatMap(getTarFilesFromManifest) - const tarFiles = [...new Set(tarFilesThatMayDuplicate)] - return tarFiles + const tarFilesThatMayDuplicate = (await this.getManifests()).flatMap( + getTarFilesFromManifest + ); + const tarFiles = [...new Set(tarFilesThatMayDuplicate)]; + return tarFiles; } async getLayerIds(): Promise { const layerIds = (await this.getLayerTarFiles()).map(path.dirname); - core.debug(JSON.stringify({ log: `getLayerIds`, layerIds })) - return layerIds + core.debug(JSON.stringify({ log: `getLayerIds`, layerIds })); + return layerIds; } } -export { LayerCache } +export { LayerCache }; diff --git a/yarn.lock b/yarn.lock index 3cc50cfd..6cee81dd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,193 +3,193 @@ "@actions/cache@^1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@actions/cache/-/cache-1.0.6.tgz#96000547577d4b915188e1c8e68e431e52c86ffc" - integrity sha512-c8CSJS6uCatX07VHazgvL4XPMpTdawOyyD+OCThRE0v486lqThYa4tayRqTyl6FSyD5LclQyB8/FQlZ5cxTNJA== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@actions/cache/-/cache-1.0.11.tgz#db7909ba7f7e7bc9bd1a761c172c48807586b996" + integrity sha512-L+VCF1JpFePAzxkYtpwYDWnd0WzSU1DoNPE2cuINKpEie27ONH0Cpqt40cG8NiJW4zbZLN+kNkEDo3F2MkUuRw== dependencies: "@actions/core" "^1.2.6" "@actions/exec" "^1.0.1" "@actions/glob" "^0.1.0" "@actions/http-client" "^1.0.9" "@actions/io" "^1.0.1" - "@azure/ms-rest-js" "^2.0.7" - "@azure/storage-blob" "^12.1.2" + "@azure/ms-rest-js" "^2.6.0" + "@azure/storage-blob" "^12.8.0" semver "^6.1.0" uuid "^3.3.3" -"@actions/core@^1.2.0", "@actions/core@^1.2.6": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.2.6.tgz#a78d49f41a4def18e88ce47c2cac615d5694bf09" - integrity sha512-ZQYitnqiyBc3D+k7LsgSBmMDVkOVidaagDG7j3fOym77jNunWRuYx7VSHa9GNfFZh+zh61xsCjRj4JxMZlDqTA== +"@actions/core@^1.2.6": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.10.0.tgz#44551c3c71163949a2f06e94d9ca2157a0cfac4f" + integrity sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug== + dependencies: + "@actions/http-client" "^2.0.1" + uuid "^8.3.2" "@actions/exec@^1.0.1", "@actions/exec@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@actions/exec/-/exec-1.0.4.tgz#99d75310e62e59fc37d2ee6dcff6d4bffadd3a5d" - integrity sha512-4DPChWow9yc9W3WqEbUj8Nr86xkpyE29ZzWjXucHItclLbEW6jr80Zx4nqv18QL6KK65+cifiQZXvnqgTV6oHw== + version "1.1.1" + resolved "https://registry.yarnpkg.com/@actions/exec/-/exec-1.1.1.tgz#2e43f28c54022537172819a7cf886c844221a611" + integrity sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w== dependencies: "@actions/io" "^1.0.1" "@actions/glob@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@actions/glob/-/glob-0.1.0.tgz#969ceda7e089c39343bca3306329f41799732e40" - integrity sha512-lx8SzyQ2FE9+UUvjqY1f28QbTJv+w8qP7kHHbfQRhphrlcx0Mdmm1tZdGJzfxv1jxREa/sLW4Oy8CbGQKCJySA== + version "0.1.2" + resolved "https://registry.yarnpkg.com/@actions/glob/-/glob-0.1.2.tgz#9685ed2d6583093479c8f137d067c4329d7d0974" + integrity sha512-SclLR7Ia5sEqjkJTPs7Sd86maMDw43p769YxBOxvPvEWuPEhpAnBsQfENOpXjFYMmhCqd127bmf+YdvJqVqR4A== dependencies: - "@actions/core" "^1.2.0" + "@actions/core" "^1.2.6" minimatch "^3.0.4" "@actions/http-client@^1.0.9": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-1.0.9.tgz#af1947d020043dbc6a3b4c5918892095c30ffb52" - integrity sha512-0O4SsJ7q+MK0ycvXPl2e6bMXV7dxAXOGjrXS1eTF9s2S401Tp6c/P3c3Joz04QefC1J6Gt942Wl2jbm3f4mLcg== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-1.0.11.tgz#c58b12e9aa8b159ee39e7dd6cbd0e91d905633c0" + integrity sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg== dependencies: tunnel "0.0.6" +"@actions/http-client@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.0.1.tgz#873f4ca98fe32f6839462a6f046332677322f99c" + integrity sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw== + dependencies: + tunnel "^0.0.6" + "@actions/io@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@actions/io/-/io-1.0.2.tgz#2f614b6e69ce14d191180451eb38e6576a6e6b27" - integrity sha512-J8KuFqVPr3p6U8W93DOXlXW6zFvrQAJANdS+vw0YhusLIq+bszW8zmK2Fh1C2kDPX8FMvwIl1OUcFgvJoXLbAg== + version "1.1.2" + resolved "https://registry.yarnpkg.com/@actions/io/-/io-1.1.2.tgz#766ac09674a289ce0f1550ffe0a6eac9261a8ea9" + integrity sha512-d+RwPlMp+2qmBfeLYPLXuSRykDIFEwdTA0MMxzS9kh4kvP1ftrc/9fzy6pX6qAjthdXruHQ6/6kjT/DNo5ALuw== "@azure/abort-controller@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-1.0.1.tgz#8510935b25ac051e58920300e9d7b511ca6e656a" - integrity sha512-wP2Jw6uPp8DEDy0n4KNidvwzDjyVV2xnycEIq7nPzj1rHyb/r+t3OPeNT1INZePP2wy5ZqlwyuyOMTi0ePyY1A== + version "1.1.0" + resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-1.1.0.tgz#788ee78457a55af8a1ad342acb182383d2119249" + integrity sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw== dependencies: - tslib "^1.9.3" - -"@azure/core-asynciterator-polyfill@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@azure/core-asynciterator-polyfill/-/core-asynciterator-polyfill-1.0.0.tgz#dcccebb88406e5c76e0e1d52e8cc4c43a68b3ee7" - integrity sha512-kmv8CGrPfN9SwMwrkiBK9VTQYxdFQEGe0BmQk+M8io56P9KNzpAxcWE/1fxJj7uouwN4kXF0BHW8DNlgx+wtCg== + tslib "^2.2.0" -"@azure/core-auth@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.1.3.tgz#94e7bbc207010e7a2fdba61565443e4e1cf1e131" - integrity sha512-A4xigW0YZZpkj1zK7dKuzbBpGwnhEcRk6WWuIshdHC32raR3EQ1j6VA9XZqE+RFsUgH6OAmIK5BWIz+mZjnd6Q== +"@azure/core-auth@^1.1.4", "@azure/core-auth@^1.3.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.4.0.tgz#6fa9661c1705857820dbc216df5ba5665ac36a9e" + integrity sha512-HFrcTgmuSuukRf/EdPmqBrc5l6Q5Uu+2TbuhaKbgaCpP2TfAeiNaQPAadxO+CYBRHGUzIDteMAjFspFLDLnKVQ== dependencies: "@azure/abort-controller" "^1.0.0" - "@azure/core-tracing" "1.0.0-preview.8" - "@opentelemetry/api" "^0.6.1" - tslib "^2.0.0" + tslib "^2.2.0" -"@azure/core-http@^1.1.1": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@azure/core-http/-/core-http-1.1.4.tgz#6f15423d6f62e1d9bc051ca4b724e2a7d18cd6e9" - integrity sha512-81cNvyT51MfYBVIscPwC7Sl1n/xWimqho+R2eOQLw6Qqtfxs5dYlFWfLr9HbYX7QEXZdc5xdsyYTjvfJkjA7Hg== +"@azure/core-http@^2.0.0": + version "2.2.7" + resolved "https://registry.yarnpkg.com/@azure/core-http/-/core-http-2.2.7.tgz#f4f52b3b7b8adb5387acf11102e751358a31fa6f" + integrity sha512-TyGMeDm90mkRS8XzSQbSMD+TqnWL1XKGCh0x0QVGMD8COH2yU0q5SaHm/IBEBkzcq0u73NhS/p57T3KVSgUFqQ== dependencies: "@azure/abort-controller" "^1.0.0" - "@azure/core-auth" "^1.1.3" - "@azure/core-tracing" "1.0.0-preview.8" + "@azure/core-auth" "^1.3.0" + "@azure/core-tracing" "1.0.0-preview.13" + "@azure/core-util" "^1.1.0" "@azure/logger" "^1.0.0" - "@opentelemetry/api" "^0.6.1" "@types/node-fetch" "^2.5.0" - "@types/tunnel" "^0.0.1" - form-data "^3.0.0" - node-fetch "^2.6.0" + "@types/tunnel" "^0.0.3" + form-data "^4.0.0" + node-fetch "^2.6.7" process "^0.11.10" tough-cookie "^4.0.0" - tslib "^2.0.0" + tslib "^2.2.0" tunnel "^0.0.6" - uuid "^8.1.0" + uuid "^8.3.0" xml2js "^0.4.19" -"@azure/core-lro@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@azure/core-lro/-/core-lro-1.0.2.tgz#b7b51ff7b84910b7eb152a706b0531d020864f31" - integrity sha512-Yr0JD7GKryOmbcb5wHCQoQ4KCcH5QJWRNorofid+UvudLaxnbCfvKh/cUfQsGUqRjO9L/Bw4X7FP824DcHdMxw== +"@azure/core-lro@^2.2.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@azure/core-lro/-/core-lro-2.4.0.tgz#e3fdff797b045ee753aab25c3d2ecc0aa3e0a539" + integrity sha512-F65+rYkll1dpw3RGm8/SSiSj+/QkMeYDanzS/QKlM1dmuneVyXbO46C88V1MRHluLGdMP6qfD3vDRYALn0z0tQ== dependencies: "@azure/abort-controller" "^1.0.0" - "@azure/core-http" "^1.1.1" - events "^3.0.0" - tslib "^1.10.0" + "@azure/logger" "^1.0.0" + tslib "^2.2.0" "@azure/core-paging@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@azure/core-paging/-/core-paging-1.1.1.tgz#9639d2d5b6631d481d81040504e0e26c003f47b1" - integrity sha512-hqEJBEGKan4YdOaL9ZG/GRG6PXaFd/Wb3SSjQW4LWotZzgl6xqG00h6wmkrpd2NNkbBkD1erLHBO3lPHApv+iQ== + version "1.4.0" + resolved "https://registry.yarnpkg.com/@azure/core-paging/-/core-paging-1.4.0.tgz#b04a73ad18149733a848c3089a5e5ed144592338" + integrity sha512-tabFtZTg8D9XqZKEfNUOGh63SuYeOxmvH4GDcOJN+R1bZWZ1FZskctgY9Pmuwzhn+0Xvq9rmimK9hsvtLkeBsw== dependencies: - "@azure/core-asynciterator-polyfill" "^1.0.0" + tslib "^2.2.0" -"@azure/core-tracing@1.0.0-preview.8": - version "1.0.0-preview.8" - resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.0.0-preview.8.tgz#1e0ff857e855edb774ffd33476003c27b5bb2705" - integrity sha512-ZKUpCd7Dlyfn7bdc+/zC/sf0aRIaNQMDuSj2RhYRFe3p70hVAnYGp3TX4cnG2yoEALp/LTj/XnZGQ8Xzf6Ja/Q== +"@azure/core-tracing@1.0.0-preview.13": + version "1.0.0-preview.13" + resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644" + integrity sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ== dependencies: - "@opencensus/web-types" "0.0.7" - "@opentelemetry/api" "^0.6.1" - tslib "^1.10.0" + "@opentelemetry/api" "^1.0.1" + tslib "^2.2.0" + +"@azure/core-util@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.1.1.tgz#8f87b3dd468795df0f0849d9f096c3e7b29452c1" + integrity sha512-A4TBYVQCtHOigFb2ETiiKFDocBoI1Zk2Ui1KpI42aJSIDexF7DHQFpnjonltXAIU/ceH+1fsZAWWgvX6/AKzog== + dependencies: + "@azure/abort-controller" "^1.0.0" + tslib "^2.2.0" "@azure/logger@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.0.0.tgz#48b371dfb34288c8797e5c104f6c4fb45bf1772c" - integrity sha512-g2qLDgvmhyIxR3JVS8N67CyIOeFRKQlX/llxYJQr1OSGQqM3HTpVP8MjmjcEKbL/OIt2N9C9UFaNQuKOw1laOA== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.0.3.tgz#6e36704aa51be7d4a1bae24731ea580836293c96" + integrity sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g== dependencies: - tslib "^1.9.3" + tslib "^2.2.0" -"@azure/ms-rest-js@^2.0.7": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@azure/ms-rest-js/-/ms-rest-js-2.0.8.tgz#f84304fba29e699fc7a391ce47af2824af4f585e" - integrity sha512-PO4pnYaF66IAB/RWbhrTprGyhOzDzsgcbT7z8k3O38JKlwifbrhW+8M0fzx0ScZnaacP8rZyBazYMUF9P12c0g== +"@azure/ms-rest-js@^2.6.0": + version "2.6.2" + resolved "https://registry.yarnpkg.com/@azure/ms-rest-js/-/ms-rest-js-2.6.2.tgz#185a9d643ea55c696134af76a5c6026c94e26217" + integrity sha512-0/8rOxAoR9M3qKUdbGOIYtHtQkm4m5jdoDNdxTU0DkOr84KwyAdJuW/RfjJinGyig4h73DNF0rdCl6XowgCYcg== dependencies: - "@types/node-fetch" "^2.3.7" - "@types/tunnel" "0.0.1" + "@azure/core-auth" "^1.1.4" abort-controller "^3.0.0" form-data "^2.5.0" - node-fetch "^2.6.0" + node-fetch "^2.6.7" tough-cookie "^3.0.1" tslib "^1.10.0" tunnel "0.0.6" - uuid "^3.3.2" + uuid "^8.3.2" xml2js "^0.4.19" -"@azure/storage-blob@^12.1.2": - version "12.1.2" - resolved "https://registry.yarnpkg.com/@azure/storage-blob/-/storage-blob-12.1.2.tgz#046d146a3bd2622b61d6bdc5708955893a5b4f04" - integrity sha512-PCHgG4r3xLt5FaFj+uiMqrRpuzD3TD17cvxCeA1JKK2bJEf8b07H3QRLQVf0DM1MmvYY8FgQagkWZTp+jr9yew== +"@azure/storage-blob@^12.8.0": + version "12.12.0" + resolved "https://registry.yarnpkg.com/@azure/storage-blob/-/storage-blob-12.12.0.tgz#25e277c885692d5adcd8c2a949789b2837a74c59" + integrity sha512-o/Mf6lkyYG/eBW4/hXB9864RxVNmAkcKHjsGR6Inlp5hupa3exjSyH2KjO3tLO//YGA+tS+17hM2bxRl9Sn16g== dependencies: "@azure/abort-controller" "^1.0.0" - "@azure/core-http" "^1.1.1" - "@azure/core-lro" "^1.0.2" + "@azure/core-http" "^2.0.0" + "@azure/core-lro" "^2.2.0" "@azure/core-paging" "^1.1.1" - "@azure/core-tracing" "1.0.0-preview.8" + "@azure/core-tracing" "1.0.0-preview.13" "@azure/logger" "^1.0.0" - "@opentelemetry/api" "^0.6.1" events "^3.0.0" - tslib "^1.10.0" + tslib "^2.2.0" -"@opencensus/web-types@0.0.7": - version "0.0.7" - resolved "https://registry.yarnpkg.com/@opencensus/web-types/-/web-types-0.0.7.tgz#4426de1fe5aa8f624db395d2152b902874f0570a" - integrity sha512-xB+w7ZDAu3YBzqH44rCmG9/RlrOmFuDPt/bpf17eJr8eZSrLt7nc7LnWdxM9Mmoj/YKMHpxRg28txu3TcpiL+g== +"@opentelemetry/api@^1.0.1": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.2.0.tgz#89ef99401cde6208cff98760b67663726ef26686" + integrity sha512-0nBr+VZNKm9tvNDZFstI3Pq1fCTEDK5OZTnVKNvBNAKgd0yIvmwsP4m61rEv7ZP+tOUjWJhROpxK5MsnlF911g== -"@opentelemetry/api@^0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-0.6.1.tgz#a00b504801f408230b9ad719716fe91ad888c642" - integrity sha512-wpufGZa7tTxw7eAsjXJtiyIQ42IWQdX9iUQp7ACJcKo1hCtuhLU+K2Nv1U6oRwT1oAlZTE6m4CgWKZBhOiau3Q== - dependencies: - "@opentelemetry/context-base" "^0.6.1" - -"@opentelemetry/context-base@^0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.6.1.tgz#b260e454ee4f9635ea024fc83be225e397f15363" - integrity sha512-5bHhlTBBq82ti3qPT15TRxkYTFPPQWbnkkQkmHPtqiS1XcTB69cEKd3Jm7Cfi/vkPoyxapmePE9tyA7EzLt8SQ== - -"@types/node-fetch@^2.3.7", "@types/node-fetch@^2.5.0": - version "2.5.7" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.7.tgz#20a2afffa882ab04d44ca786449a276f9f6bbf3c" - integrity sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw== +"@types/node-fetch@^2.5.0": + version "2.6.2" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" + integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== dependencies: "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@^14.14.14": - version "14.14.14" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.14.tgz#f7fd5f3cc8521301119f63910f0fb965c7d761ae" - integrity sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ== +"@types/node@*": + version "18.11.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" + integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== + +"@types/node@^14.14.14": + version "14.18.33" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.33.tgz#8c29a0036771569662e4635790ffa9e057db379b" + integrity sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg== "@types/recursive-readdir@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@types/recursive-readdir/-/recursive-readdir-2.2.0.tgz#b39cd5474fd58ea727fe434d5c68b7a20ba9121c" - integrity sha512-HGk753KRu2N4mWduovY4BLjYq4jTOL29gV2OfGdGxHcPSWGFkC5RRIdk+VTs5XmYd7MVAD+JwKrcb5+5Y7FOCg== + version "2.2.1" + resolved "https://registry.yarnpkg.com/@types/recursive-readdir/-/recursive-readdir-2.2.1.tgz#330f5ec0b73e8aeaf267a6e056884e393f3543a3" + integrity sha512-Xd+Ptc4/F2ueInqy5yK2FI5FxtwwbX2+VZpcg+9oYsFJVen8qQKGapCr+Bi5wQtHU1cTXT8s+07lo/nKPgu8Gg== dependencies: "@types/node" "*" @@ -198,17 +198,17 @@ resolved "https://registry.yarnpkg.com/@types/string-format/-/string-format-2.0.0.tgz#c1588f507be7b8ef5eb5074a41e48e4538f3f6d5" integrity sha512-mMwtmgN0ureESnJ3SuMM4W9lsi4CgOxs43YxNo14SDHgzJ+OPYO3yM7nOTJTh8x5YICseBdtrySUbvxnpb+NYQ== -"@types/tunnel@0.0.1", "@types/tunnel@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@types/tunnel/-/tunnel-0.0.1.tgz#0d72774768b73df26f25df9184273a42da72b19c" - integrity sha512-AOqu6bQu5MSWwYvehMXLukFHnupHrpZ8nvgae5Ggie9UwzDR1CCwoXgSSWNZJuyOlCdfdsWMA5F2LlmvyoTv8A== +"@types/tunnel@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@types/tunnel/-/tunnel-0.0.3.tgz#f109e730b072b3136347561fc558c9358bb8c6e9" + integrity sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA== dependencies: "@types/node" "*" -"@zeit/ncc@^0.22.3": - version "0.22.3" - resolved "https://registry.yarnpkg.com/@zeit/ncc/-/ncc-0.22.3.tgz#fca6b86b4454ce7a7e1e7e755165ec06457f16cd" - integrity sha512-jnCLpLXWuw/PAiJiVbLjA8WBC0IJQbFeUwF4I9M+23MvIxTxk5pD4Q8byQBSPmHQjz5aBoA7AKAElQxMpjrCLQ== +"@vercel/ncc@^0.34.0": + version "0.34.0" + resolved "https://registry.yarnpkg.com/@vercel/ncc/-/ncc-0.34.0.tgz#d0139528320e46670d949c82967044a8f66db054" + integrity sha512-G9h5ZLBJ/V57Ou9vz5hI8pda/YQX5HQszCs3AmIus3XzsmRn/0Ptic5otD3xVST8QLKk7AMk7AqpsyQGN7MZ9A== abort-controller@^3.0.0: version "3.0.0" @@ -230,12 +230,12 @@ arg@^4.1.0: asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== brace-expansion@^1.1.7: version "1.1.11" @@ -246,9 +246,9 @@ brace-expansion@^1.1.7: concat-map "0.0.1" buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== combined-stream@^1.0.6, combined-stream@^1.0.8: version "1.0.8" @@ -260,7 +260,7 @@ combined-stream@^1.0.6, combined-stream@^1.0.8: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== create-require@^1.1.0: version "1.1.1" @@ -275,7 +275,7 @@ crypto@^1.0.1: delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== diff@^4.0.1: version "4.0.2" @@ -288,9 +288,9 @@ event-target-shim@^5.0.0: integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== events@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" - integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== form-data@^2.5.0: version "2.5.1" @@ -302,96 +302,138 @@ form-data@^2.5.0: mime-types "^2.1.12" form-data@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" - integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" mime-types "^2.1.12" +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw== + +is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - mime-db "1.44.0" + mime-db "1.52.0" -minimatch@3.0.4, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +minimatch@^3.0.4, minimatch@^3.0.5: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" native-promise-pool@^3.16.0: - version "3.16.0" - resolved "https://registry.yarnpkg.com/native-promise-pool/-/native-promise-pool-3.16.0.tgz#1819c04f91357322f339232fa3e5f103564d741b" - integrity sha512-lv7wMAZuGIAJor/3lb0bpAxf2cmF8bQEW1uXGaibQnoO0oLzc/cDqjVHX5FrHDhpnV7iHsG9F4U20QuxdvtC2A== + version "3.19.0" + resolved "https://registry.yarnpkg.com/native-promise-pool/-/native-promise-pool-3.19.0.tgz#199b91d31322bd741575e63314e65076bfbecc37" + integrity sha512-Clf1xJ/qBGZrWeuu1qJ2Ta79L0CC0pANvh5cq2RIwCu4ehcc8W5COA4fwgnaU5a+Cg/QFOBGEuM/5naa9LF+og== nested-error-stacks@^2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61" - integrity sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug== + version "2.1.1" + resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz#26c8a3cee6cc05fbcf1e333cd2fc3e003326c0b5" + integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw== -node-fetch@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== +node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== psl@^1.1.28, psl@^1.1.33: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + recursive-readdir@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== dependencies: - minimatch "3.0.4" + minimatch "^3.0.5" reflect-metadata@>=0.1.12: version "0.1.13" resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + resolve@>=1.9.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: - path-parse "^1.0.6" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" sax@>=0.6.0: version "1.2.4" @@ -404,9 +446,9 @@ semver@^6.1.0: integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== source-map-support@^0.5.17: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -421,6 +463,11 @@ string-format@^2.0.0: resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + tough-cookie@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" @@ -431,13 +478,19 @@ tough-cookie@^3.0.1: punycode "^2.1.1" tough-cookie@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + version "4.1.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" + integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== dependencies: psl "^1.1.33" punycode "^2.1.1" - universalify "^0.1.2" + universalify "^0.2.0" + url-parse "^1.5.3" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== ts-node@^9.1.1: version "9.1.1" @@ -451,27 +504,27 @@ ts-node@^9.1.1: source-map-support "^0.5.17" yn "3.1.1" -tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.3: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== +tslib@^1.10.0, tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.0.tgz#18d13fc2dce04051e20f074cc8387fd8089ce4f3" - integrity sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g== +tslib@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== tsutils@^3.17.1: - version "3.17.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" - integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" -ttypescript@^1.5.12: - version "1.5.12" - resolved "https://registry.yarnpkg.com/ttypescript/-/ttypescript-1.5.12.tgz#27a8356d7d4e719d0075a8feb4df14b52384f044" - integrity sha512-1ojRyJvpnmgN9kIHmUnQPlEV1gq+VVsxVYjk/NfvMlHSmYxjK5hEvOOU2MQASrbekTUiUM7pR/nXeCc8bzvMOQ== +ttypescript@^1.5.13: + version "1.5.13" + resolved "https://registry.yarnpkg.com/ttypescript/-/ttypescript-1.5.13.tgz#c3bcb760599fe49157d30c5d5895a0023cbb7f30" + integrity sha512-KT/RBfGGlVJFqEI8cVvI3nMsmYcFvPSZh8bU0qX+pAwbi7/ABmYkzn7l/K8skw0xmYjVCoyaV6WLsBQxdadybQ== dependencies: resolve ">=1.9.0" @@ -480,35 +533,56 @@ tunnel@0.0.6, tunnel@^0.0.6: resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== -typescript-is@^0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/typescript-is/-/typescript-is-0.17.1.tgz#d1308dc9a318cc800fc86ec4843a4c8f853a17f7" - integrity sha512-RIz2hSJO5LPh5URMMf+5BTES+kfggk47qQ+Jez0Vg02LYT499OHsHr3V+GUsmvrkWQKd3Jgu6qo3C9Jz2N4wLQ== +typescript-is@^0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/typescript-is/-/typescript-is-0.19.0.tgz#5e42ad64f899d5eb169bc2fa692331638d02fa25" + integrity sha512-SAJEx2cxbQZhfOjDEjPnQJt1qRS1M3wrKbUwvsywVHWGbMgM1dcIf9gPWNDS1/dgTa/7Iexk2mmAHHsP9MeCsA== dependencies: nested-error-stacks "^2" tsutils "^3.17.1" optionalDependencies: reflect-metadata ">=0.1.12" -typescript@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3" - integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== +"typescript@>=4.1.5 <4.7.2": + version "4.6.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9" + integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== -universalify@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" -uuid@^3.3.2, uuid@^3.3.3: +uuid@^3.3.3: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.1.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" - integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== +uuid@^8.3.0, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" xml2js@^0.4.19: version "0.4.23"