From e055202ade2a1bac6efb5c4beb17ce00593ba02f Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Mon, 27 Feb 2023 12:09:46 -0800 Subject: [PATCH] fix: remove dependency on unzipper package Fixes #197 Fixes #166 --- lib/download.ts | 128 +++++++++++++++++++++++--------------- lib/util.ts | 15 +++++ package.json | 5 +- yarn.lock | 160 ++++++++++++------------------------------------ 4 files changed, 133 insertions(+), 175 deletions(-) diff --git a/lib/download.ts b/lib/download.ts index 95aa9dc7..3b810e7d 100644 --- a/lib/download.ts +++ b/lib/download.ts @@ -8,19 +8,29 @@ import * as fs from 'fs'; import { tmpdir } from 'os'; import * as path from 'path'; import { pipeline, Readable } from 'stream'; -import { Extract as extract } from 'unzipper'; import { promisify } from 'util'; import * as del from './del'; import { ConsoleReporter, ProgressReporter, ProgressReportStage } from './progress'; import * as request from './request'; import { - downloadDirToExecutablePath, getLatestInsidersMetadata, getVSCodeDownloadUrl, insidersDownloadDirMetadata, insidersDownloadDirToExecutablePath, isDefined, isStableVersionIdentifier, systemDefaultPlatform + downloadDirToExecutablePath, + getLatestInsidersMetadata, + getVSCodeDownloadUrl, + insidersDownloadDirMetadata, + insidersDownloadDirToExecutablePath, + isDefined, + isStableVersionIdentifier, + isSubdirectory, + streamToBuffer, + systemDefaultPlatform, } from './util'; const extensionRoot = process.cwd(); +const pipelineAsync = promisify(pipeline); const vscodeStableReleasesAPI = `https://update.code.visualstudio.com/api/releases/stable`; -const vscodeInsiderCommitsAPI = (platform: string) => `https://update.code.visualstudio.com/api/commits/insider/${platform}`; +const vscodeInsiderCommitsAPI = (platform: string) => + `https://update.code.visualstudio.com/api/commits/insider/${platform}`; const downloadDirNameFormat = /^vscode-(?[a-z]+)-(?[0-9.]+)$/; const makeDownloadDirName = (platform: string, version: string) => `vscode-${platform}-${version}`; @@ -38,10 +48,11 @@ async function fetchTargetStableVersion(timeout: number, cachePath: string, plat versions = await request.getJSON(vscodeStableReleasesAPI, timeout); } catch (e) { const entries = await fs.promises.readdir(cachePath).catch(() => [] as string[]); - const [fallbackTo] = entries.map(e => downloadDirNameFormat.exec(e)) + const [fallbackTo] = entries + .map((e) => downloadDirNameFormat.exec(e)) .filter(isDefined) - .filter(e => e.groups!.platform === platform) - .map(e => e.groups!.version) + .filter((e) => e.groups!.platform === platform) + .map((e) => e.groups!.version) .sort((a, b) => Number(b) - Number(a)); if (fallbackTo) { @@ -78,7 +89,9 @@ async function isValidVersion(version: string, platform: string, timeout: number // eslint-disable-next-line @typescript-eslint/ban-types type StringLiteralUnion = T | (string & {}); export type DownloadVersion = StringLiteralUnion<'insiders' | 'stable'>; -export type DownloadPlatform = StringLiteralUnion<'darwin' | 'darwin-arm64' | 'win32-archive' | 'win32-x64-archive' | 'linux-x64' | 'linux-arm64' | 'linux-armhf'>; +export type DownloadPlatform = StringLiteralUnion< + 'darwin' | 'darwin-arm64' | 'win32-archive' | 'win32-x64-archive' | 'linux-x64' | 'linux-arm64' | 'linux-armhf' +>; export interface DownloadOptions { readonly cachePath: string; @@ -104,7 +117,7 @@ async function downloadVSCodeArchive(options: DownloadOptions) { const timeout = options.timeout!; const downloadUrl = getVSCodeDownloadUrl(options.version, options.platform); options.reporter?.report({ stage: ProgressReportStage.ResolvingCDNLocation, url: downloadUrl }); - const res = await request.getStream(downloadUrl, timeout) + const res = await request.getStream(downloadUrl, timeout); if (res.statusCode !== 302) { throw 'Failed to get VS Code archive location'; } @@ -124,7 +137,7 @@ async function downloadVSCodeArchive(options: DownloadOptions) { options.reporter?.report({ stage: ProgressReportStage.Downloading, url, bytesSoFar: 0, totalBytes }); let bytesSoFar = 0; - download.on('data', chunk => { + download.on('data', (chunk) => { bytesSoFar += chunk.length; timeoutCtrl.touch(); options.reporter?.report({ stage: ProgressReportStage.Downloading, url, bytesSoFar, totalBytes }); @@ -146,44 +159,50 @@ async function downloadVSCodeArchive(options: DownloadOptions) { /** * Unzip a .zip or .tar.gz VS Code archive stream. */ -async function unzipVSCode(reporter: ProgressReporter, extractDir: string, extractSync: boolean, stream: Readable, format: 'zip' | 'tgz') { +async function unzipVSCode( + reporter: ProgressReporter, + extractDir: string, + extractSync: boolean, + stream: Readable, + format: 'zip' | 'tgz' +) { const stagingFile = path.join(tmpdir(), `vscode-test-${Date.now()}.zip`); if (format === 'zip') { - // note: this used to use Expand-Archive, but this caused a failure - // on longer file paths on windows. Instead use unzipper, which does - // not have this limitation. - // - // However it has problems that prevent it working on OSX: - // - https://github.com/ZJONSSON/node-unzipper/issues/216 (avoidable) - // - https://github.com/ZJONSSON/node-unzipper/issues/115 (not avoidable) - if (process.platform === 'win32' && extractSync) { - try { - await promisify(pipeline)(stream, fs.createWriteStream(stagingFile)); - reporter.report({ stage: ProgressReportStage.ExtractingSynchonrously }); - await spawnDecompressorChild('powershell.exe', [ - '-NoProfile', '-ExecutionPolicy', 'Bypass', '-NonInteractive', '-NoLogo', - '-Command', `Microsoft.PowerShell.Archive\\Expand-Archive -Path "${stagingFile}" -DestinationPath "${extractDir}"` - ]); - } finally { - fs.unlink(stagingFile, () => undefined); - } - } else if (process.platform !== 'darwin' && !extractSync) { - await new Promise((resolve, reject) => - stream - .on('error', reject) - .pipe(extract({ path: extractDir })) - .on('close', resolve) - .on('error', reject) - ); - } else { // darwin or *nix sync - try { - await promisify(pipeline)(stream, fs.createWriteStream(stagingFile)); - reporter.report({ stage: ProgressReportStage.ExtractingSynchonrously }); + try { + reporter.report({ stage: ProgressReportStage.ExtractingSynchonrously }); + + // note: this used to use Expand-Archive, but this caused a failure + // on longer file paths on windows. And we used to use the streaming + // "unzipper", but the module was very outdated and a bit buggy. + // Instead, use jszip. It's well-used and actually 8x faster than + // Expand-Archive on my machine. + if (process.platform === 'win32') { + const [buffer, JSZip] = await Promise.all([streamToBuffer(stream), import('jszip')]); + const content = await JSZip.loadAsync(buffer); + // extract file with jszip + for (const filename of Object.keys(content.files)) { + const file = content.files[filename]; + const filepath = path.join(extractDir, filename); + if (file.dir) { + continue; + } + + // vscode update zips are trusted, but check for zip slip anyway. + if (!isSubdirectory(extractDir, filepath)) { + throw new Error(`Invalid zip file: ${filename}`); + } + + await fs.promises.mkdir(path.dirname(filepath), { recursive: true }); + await pipelineAsync(file.nodeStream(), fs.createWriteStream(filepath)); + } + } else { + // darwin or *nix sync + await pipelineAsync(stream, fs.createWriteStream(stagingFile)); await spawnDecompressorChild('unzip', ['-q', stagingFile, '-d', extractDir]); - } finally { - fs.unlink(stagingFile, () => undefined); } + } finally { + fs.unlink(stagingFile, () => undefined); } } else { // tar does not create extractDir by default @@ -207,8 +226,10 @@ function spawnDecompressorChild(command: string, args: ReadonlyArray, in child.stdout.pipe(process.stdout); child.on('error', reject); - child.on('exit', code => code === 0 ? resolve() : reject(new Error(`Failed to unzip archive, exited with ${code}`))); - }) + child.on('exit', (code) => + code === 0 ? resolve() : reject(new Error(`Failed to unzip archive, exited with ${code}`)) + ); + }); } export const defaultCachePath = path.resolve(extensionRoot, '.vscode-test'); @@ -275,7 +296,7 @@ export async function download(options: Partial = {}): Promise< return Promise.resolve(downloadDirToExecutablePath(downloadedPath, platform)); } else { reporter.report({ stage: ProgressReportStage.FoundMatchingInstall, downloadedPath }); - return Promise.resolve(insidersDownloadDirToExecutablePath(downloadedPath, platform)) + return Promise.resolve(insidersDownloadDirToExecutablePath(downloadedPath, platform)); } } @@ -283,18 +304,23 @@ export async function download(options: Partial = {}): Promise< try { const { stream, format } = await downloadVSCodeArchive({ version, platform, cachePath, reporter, timeout }); await unzipVSCode(reporter, downloadedPath, extractSync, stream, format); - reporter.report({ stage: ProgressReportStage.NewInstallComplete, downloadedPath }) + reporter.report({ stage: ProgressReportStage.NewInstallComplete, downloadedPath }); break; } catch (error) { if (i++ < DOWNLOAD_ATTEMPTS) { - reporter.report({ stage: ProgressReportStage.Retrying, attempt: i, error: error as Error, totalAttempts: DOWNLOAD_ATTEMPTS }); + reporter.report({ + stage: ProgressReportStage.Retrying, + attempt: i, + error: error as Error, + totalAttempts: DOWNLOAD_ATTEMPTS, + }); } else { reporter.error(error); throw Error(`Failed to download and unzip VS Code ${version}`); } } } - reporter.report({ stage: ProgressReportStage.NewInstallComplete, downloadedPath }) + reporter.report({ stage: ProgressReportStage.NewInstallComplete, downloadedPath }); if (isStableVersionIdentifier(version)) { return downloadDirToExecutablePath(downloadedPath, platform); @@ -322,17 +348,17 @@ export async function downloadAndUnzipVSCode( version?: DownloadVersion, platform?: DownloadPlatform, reporter?: ProgressReporter, - extractSync?: boolean, + extractSync?: boolean ): Promise; export async function downloadAndUnzipVSCode( versionOrOptions?: DownloadVersion | Partial, platform?: DownloadPlatform, reporter?: ProgressReporter, - extractSync?: boolean, + extractSync?: boolean ): Promise { return await download( typeof versionOrOptions === 'object' - ? versionOrOptions as Partial + ? (versionOrOptions as Partial) : { version: versionOrOptions, platform, reporter, extractSync } ); } diff --git a/lib/util.ts b/lib/util.ts index 7bcb5076..74794d6a 100644 --- a/lib/util.ts +++ b/lib/util.ts @@ -181,3 +181,18 @@ export function resolveCliArgsFromVSCodeExecutablePath(vscodeExecutablePath: str export function isDefined(arg: T | undefined | null): arg is T { return arg != null; } + +/** Gets a Buffer from a Node.js stream */ +export function streamToBuffer(readable: NodeJS.ReadableStream) { + return new Promise((resolve, reject) => { + const chunks: Buffer[] = []; + readable.on('data', chunk => chunks.push(chunk)); + readable.on('error', reject); + readable.on('end', () => resolve(Buffer.concat(chunks))); + }); +} +/** Gets whether child is a subdirectory of the parent */ +export function isSubdirectory(parent: string, child: string) { + const relative = path.relative(parent, child); + return !relative.startsWith('..') && !path.isAbsolute(relative); +} diff --git a/package.json b/package.json index 77253ad5..6cc95dea 100644 --- a/package.json +++ b/package.json @@ -14,13 +14,12 @@ "dependencies": { "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" + "jszip": "^3.10.1", + "rimraf": "^3.0.2" }, "devDependencies": { "@types/node": "^18", "@types/rimraf": "^3.0.0", - "@types/unzipper": "^0.10.3", "@typescript-eslint/eslint-plugin": "^4.13.0", "@typescript-eslint/parser": "^4.13.0", "eslint": "^7.17.0", diff --git a/yarn.lock b/yarn.lock index 5171afdf..49312dad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -119,13 +119,6 @@ "@types/glob" "*" "@types/node" "*" -"@types/unzipper@^0.10.3": - version "0.10.3" - resolved "https://registry.npmjs.org/@types/unzipper/-/unzipper-0.10.3.tgz" - integrity sha512-01mQdTLp3/KuBVDhP82FNBf+enzVOjJ9dGsCWa5z8fcYAFVgA9bqIQ2NmsgNFzN/DhD0PUQj4n5p7k6I9mq80g== - dependencies: - "@types/node" "*" - "@typescript-eslint/eslint-plugin@^4.13.0": version "4.13.0" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.13.0.tgz" @@ -285,27 +278,9 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -big-integer@^1.6.17: - version "1.6.48" - resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz" - integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== - -binary@~0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz" - integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= - dependencies: - buffers "~0.1.1" - chainsaw "~0.1.0" - -bluebird@~3.4.1: - version "3.4.7" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz" - integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= - brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -318,16 +293,6 @@ braces@^3.0.1: dependencies: fill-range "^7.0.1" -buffer-indexof-polyfill@~1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz" - integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== - -buffers@~0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz" - integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= - callsites@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" @@ -346,13 +311,6 @@ chai@^4.3.6: pathval "^1.1.1" type-detect "^4.0.5" -chainsaw@~0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz" - integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= - dependencies: - traverse ">=0.3.0 <0.4" - chalk@^2.0.0: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" @@ -401,7 +359,7 @@ color-name@~1.1.4: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== core-util-is@~1.0.0: @@ -451,13 +409,6 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= - dependencies: - readable-stream "^2.0.2" - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" @@ -562,7 +513,7 @@ esbuild-windows-32@0.14.54: esbuild-windows-64@0.14.54: version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" + resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz" integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== esbuild-windows-arm64@0.14.54: @@ -572,7 +523,7 @@ esbuild-windows-arm64@0.14.54: esbuild@^0.14.27: version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz" integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== optionalDependencies: "@esbuild/linux-loong64" "0.14.54" @@ -789,16 +740,6 @@ fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" @@ -852,11 +793,6 @@ globby@^11.0.1: merge2 "^1.3.0" slash "^3.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.2.2: - version "4.2.4" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" @@ -901,6 +837,11 @@ ignore@^5.1.4: resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" @@ -922,14 +863,14 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@~2.0.0, inherits@~2.0.3: +inherits@2, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 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" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== dependencies: has "^1.0.3" @@ -994,6 +935,16 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +jszip@^3.10.1: + version "3.10.1" + resolved "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + levn@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" @@ -1002,10 +953,12 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -listenercount@~1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz" - integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" local-pkg@^0.4.1: version "0.4.1" @@ -1051,18 +1004,6 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.5: - version "1.2.6" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -"mkdirp@>=0.5 0": - version "0.5.5" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" @@ -1070,7 +1011,7 @@ ms@2.1.2: nanoid@^3.3.4: version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== natural-compare@^1.4.0: @@ -1097,6 +1038,11 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" @@ -1141,7 +1087,7 @@ picomatch@^2.0.5, picomatch@^2.2.1: postcss@^8.4.13: version "8.4.19" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.19.tgz#61178e2add236b17351897c8bcc0b4c8ecab56fc" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz" integrity sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA== dependencies: nanoid "^3.3.4" @@ -1168,7 +1114,7 @@ punycode@^2.1.0: resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -readable-stream@^2.0.2, readable-stream@~2.3.6: +readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -1198,7 +1144,7 @@ resolve-from@^4.0.0: resolve@^1.22.0: version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: is-core-module "^2.9.0" @@ -1210,13 +1156,6 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@2: - version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" @@ -1226,7 +1165,7 @@ rimraf@^3.0.2: "rollup@>=2.59.0 <2.78.0": version "2.77.3" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.3.tgz#8f00418d3a2740036e15deb653bed1a90ee0cc12" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz" integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g== optionalDependencies: fsevents "~2.3.2" @@ -1248,7 +1187,7 @@ semver@^7.2.1, semver@^7.3.2: dependencies: lru-cache "^6.0.0" -setimmediate@~1.0.4: +setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -1368,11 +1307,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz" - integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= - tslib@^1.8.1: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" @@ -1407,22 +1341,6 @@ typescript@^4.3.5: resolved "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz" integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== -unzipper@^0.10.11: - version "0.10.11" - resolved "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz" - integrity sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw== - dependencies: - big-integer "^1.6.17" - binary "~0.3.0" - bluebird "~3.4.1" - buffer-indexof-polyfill "~1.0.0" - duplexer2 "~0.1.4" - fstream "^1.0.12" - graceful-fs "^4.2.2" - listenercount "~1.0.1" - readable-stream "~2.3.6" - setimmediate "~1.0.4" - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" @@ -1442,7 +1360,7 @@ v8-compile-cache@^2.0.3: vite@^2.9.5: version "2.9.15" - resolved "https://registry.yarnpkg.com/vite/-/vite-2.9.15.tgz#2858dd5b2be26aa394a283e62324281892546f0b" + resolved "https://registry.npmjs.org/vite/-/vite-2.9.15.tgz" integrity sha512-fzMt2jK4vQ3yK56te3Kqpkaeq9DkcZfBbzHwYpobasvgYmP2SoAr6Aic05CsB4CzCZbsDv4sujX3pkEGhLabVQ== dependencies: esbuild "^0.14.27"