Compare commits

...

6 Commits

Author SHA1 Message Date
Sean Massa
b793a67588 Publish Stable
- @vercel/build-utils@5.8.1
 - vercel@28.12.2
 - @vercel/client@12.2.29
 - @vercel/edge@0.2.4
 - @vercel/error-utils@1.0.6
 - @vercel/frameworks@1.2.2
 - @vercel/fs-detectors@3.7.2
 - @vercel/gatsby-plugin-vercel-analytics@1.0.4
 - @vercel/go@2.2.27
 - @vercel/hydrogen@0.0.41
 - @vercel/next@3.3.12
 - @vercel/node-bridge@3.1.6
 - @vercel/node@2.8.9
 - @vercel/python@3.1.37
 - @vercel/redwood@1.0.48
 - @vercel/remix@1.2.2
 - @vercel/routing-utils@2.1.6
 - @vercel/ruby@1.3.53
 - @vercel/static-build@1.1.4
 - @vercel/static-config@2.0.9
2023-01-13 15:01:55 -06:00
Sean Massa
31dd354b3a remove unnecessary checkout 2023-01-13 15:00:52 -06:00
Sean Massa
529ff3b2d7 add "version" lifecycle hook for lerna to update lockfile before commit 2023-01-13 14:59:49 -06:00
Sean Massa
e71d5638ee Publish Stable
- @vercel/build-utils@5.8.0
 - vercel@28.12.1
 - @vercel/client@12.2.28
 - @vercel/edge@0.2.3
 - @vercel/error-utils@1.0.5
 - @vercel/frameworks@1.2.1
 - @vercel/fs-detectors@3.7.1
 - @vercel/gatsby-plugin-vercel-analytics@1.0.3
 - @vercel/go@2.2.26
 - @vercel/hydrogen@0.0.40
 - @vercel/next@3.3.11
 - @vercel/node-bridge@3.1.5
 - @vercel/node@2.8.8
 - @vercel/python@3.1.36
 - @vercel/redwood@1.0.47
 - @vercel/remix@1.2.1
 - @vercel/routing-utils@2.1.5
 - @vercel/ruby@1.3.52
 - @vercel/static-build@1.1.3
 - @vercel/static-config@2.0.8
2023-01-13 14:47:25 -06:00
Ethan Arrowood
8c16e765ee [tests] adjust root and api deps to use worskpace:* (#9223) 2023-01-13 14:29:23 -06:00
Ethan Arrowood
a008c9c7fe [build-utils] Support empty directory entries for glob() and download() (#9164)
Reopening #9103 since it was reverted.
2023-01-13 12:01:37 -08:00
30 changed files with 386 additions and 265 deletions

View File

@@ -4,8 +4,7 @@
"version": "0.0.0", "version": "0.0.0",
"description": "API for the vercel/vercel repo", "description": "API for the vercel/vercel repo",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {},
},
"dependencies": { "dependencies": {
"@sentry/node": "5.11.1", "@sentry/node": "5.11.1",
"got": "10.2.1", "got": "10.2.1",
@@ -17,7 +16,7 @@
"devDependencies": { "devDependencies": {
"@types/node": "16.18.11", "@types/node": "16.18.11",
"@types/node-fetch": "2.5.4", "@types/node-fetch": "2.5.4",
"@vercel/node": "workspace:2.8.6", "@vercel/node": "workspace:*",
"typescript": "4.3.4" "typescript": "4.3.4"
} }
} }

View File

@@ -11,9 +11,9 @@
"@types/node": "14.18.33", "@types/node": "14.18.33",
"@typescript-eslint/eslint-plugin": "5.21.0", "@typescript-eslint/eslint-plugin": "5.21.0",
"@typescript-eslint/parser": "5.21.0", "@typescript-eslint/parser": "5.21.0",
"@vercel/build-utils": "workspace:5.7.5", "@vercel/build-utils": "workspace:*",
"@vercel/ncc": "0.24.0", "@vercel/ncc": "0.24.0",
"@vercel/next": "workspace:3.3.9", "@vercel/next": "workspace:*",
"async-retry": "1.2.3", "async-retry": "1.2.3",
"buffer-replace": "1.0.0", "buffer-replace": "1.0.0",
"create-svelte": "2.0.1", "create-svelte": "2.0.1",
@@ -37,6 +37,7 @@
}, },
"scripts": { "scripts": {
"lerna": "lerna", "lerna": "lerna",
"version": "pnpm install",
"bootstrap": "lerna bootstrap", "bootstrap": "lerna bootstrap",
"publish-stable": "echo 'Run `pnpm changelog` for instructions'", "publish-stable": "echo 'Run `pnpm changelog` for instructions'",
"publish-canary": "git checkout main && git pull && lerna version prerelease --preid canary --message \"Publish Canary\" --exact", "publish-canary": "git checkout main && git pull && lerna version prerelease --preid canary --message \"Publish Canary\" --exact",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/build-utils", "name": "@vercel/build-utils",
"version": "5.7.6", "version": "5.8.1",
"license": "MIT", "license": "MIT",
"main": "./dist/index.js", "main": "./dist/index.js",
"types": "./dist/index.d.js", "types": "./dist/index.d.js",

View File

@@ -2,7 +2,7 @@ import path from 'path';
import debug from '../debug'; import debug from '../debug';
import FileFsRef from '../file-fs-ref'; import FileFsRef from '../file-fs-ref';
import { File, Files, Meta } from '../types'; import { File, Files, Meta } from '../types';
import { remove, mkdirp, readlink, symlink } from 'fs-extra'; import { remove, mkdirp, readlink, symlink, chmod } from 'fs-extra';
import streamToBuffer from './stream-to-buffer'; import streamToBuffer from './stream-to-buffer';
export interface DownloadedFiles { export interface DownloadedFiles {
@@ -51,6 +51,12 @@ export async function downloadFile(
): Promise<FileFsRef> { ): Promise<FileFsRef> {
const { mode } = file; const { mode } = file;
if (isDirectory(mode)) {
await mkdirp(fsPath);
await chmod(fsPath, mode);
return FileFsRef.fromFsPath({ mode, fsPath });
}
// If the source is a symlink, try to create it instead of copying the file. // If the source is a symlink, try to create it instead of copying the file.
// Note: creating symlinks on Windows requires admin priviliges or symlinks // Note: creating symlinks on Windows requires admin priviliges or symlinks
// enabled in the group policy. We may want to improve the error message. // enabled in the group policy. We may want to improve the error message.

View File

@@ -15,12 +15,7 @@ export default async function glob(
opts: GlobOptions | string, opts: GlobOptions | string,
mountpoint?: string mountpoint?: string
): Promise<Record<string, FileFsRef>> { ): Promise<Record<string, FileFsRef>> {
let options: GlobOptions; const options = typeof opts === 'string' ? { cwd: opts } : opts;
if (typeof opts === 'string') {
options = { cwd: opts };
} else {
options = opts;
}
if (!options.cwd) { if (!options.cwd) {
throw new Error( throw new Error(
@@ -34,13 +29,18 @@ export default async function glob(
const results: Record<string, FileFsRef> = {}; const results: Record<string, FileFsRef> = {};
const statCache: Record<string, Stats> = {}; const statCache: Record<string, Stats> = {};
const symlinks: Record<string, boolean | undefined> = {};
options.symlinks = {}; const files = await vanillaGlob(pattern, {
options.statCache = statCache; ...options,
options.stat = true; symlinks,
options.dot = true; statCache,
stat: true,
dot: true,
});
const files = await vanillaGlob(pattern, options); const dirs = new Set<string>();
const dirsWithEntries = new Set<string>();
for (const relativePath of files) { for (const relativePath of files) {
const fsPath = normalizePath(path.join(options.cwd, relativePath)); const fsPath = normalizePath(path.join(options.cwd, relativePath));
@@ -49,12 +49,20 @@ export default async function glob(
stat, stat,
`statCache does not contain value for ${relativePath} (resolved to ${fsPath})` `statCache does not contain value for ${relativePath} (resolved to ${fsPath})`
); );
const isSymlink = options.symlinks![fsPath]; const isSymlink = symlinks[fsPath];
if (isSymlink || stat.isFile()) { if (isSymlink || stat.isFile() || stat.isDirectory()) {
if (isSymlink) { if (isSymlink) {
stat = await lstat(fsPath); stat = await lstat(fsPath);
} }
// Some bookkeeping to track which directories already have entries within
const dirname = path.dirname(relativePath);
dirsWithEntries.add(dirname);
if (stat.isDirectory()) {
dirs.add(relativePath);
continue;
}
let finalPath = relativePath; let finalPath = relativePath;
if (mountpoint) { if (mountpoint) {
finalPath = path.join(mountpoint, finalPath); finalPath = path.join(mountpoint, finalPath);
@@ -64,5 +72,20 @@ export default async function glob(
} }
} }
// Add empty directory entries
for (const relativePath of dirs) {
if (dirsWithEntries.has(relativePath)) continue;
let finalPath = relativePath;
if (mountpoint) {
finalPath = path.join(mountpoint, finalPath);
}
const fsPath = normalizePath(path.join(options.cwd, relativePath));
const stat = statCache[fsPath];
results[finalPath] = new FileFsRef({ mode: stat.mode, fsPath });
}
return results; return results;
} }

View File

@@ -8,6 +8,7 @@ import download, {
downloadFile, downloadFile,
DownloadedFiles, DownloadedFiles,
isSymbolicLink, isSymbolicLink,
isDirectory,
} from './fs/download'; } from './fs/download';
import getWriteableDirectory from './fs/get-writable-directory'; import getWriteableDirectory from './fs/get-writable-directory';
import glob, { GlobOptions } from './fs/glob'; import glob, { GlobOptions } from './fs/glob';
@@ -82,6 +83,7 @@ export {
streamToBuffer, streamToBuffer,
debug, debug,
isSymbolicLink, isSymbolicLink,
isDirectory,
getLambdaOptionsFromFunction, getLambdaOptionsFromFunction,
scanParentDirs, scanParentDirs,
getIgnoreFilter, getIgnoreFilter,

View File

@@ -0,0 +1,195 @@
import path from 'path';
import fs, { readlink } from 'fs-extra';
import { strict as assert, strictEqual } from 'assert';
import { download, glob, FileBlob } from '../src';
describe('download()', () => {
let warningMessages: string[];
const originalConsoleWarn = console.warn;
beforeEach(() => {
warningMessages = [];
console.warn = m => {
warningMessages.push(m);
};
});
afterEach(() => {
console.warn = originalConsoleWarn;
});
it('should re-create FileFsRef symlinks properly', async () => {
if (process.platform === 'win32') {
console.log('Skipping test on windows');
return;
}
const files = await glob('**', path.join(__dirname, 'symlinks'));
assert.equal(Object.keys(files).length, 4);
const outDir = path.join(__dirname, 'symlinks-out');
await fs.remove(outDir);
const files2 = await download(files, outDir);
assert.equal(Object.keys(files2).length, 4);
const [linkStat, linkDirStat, aStat] = await Promise.all([
fs.lstat(path.join(outDir, 'link.txt')),
fs.lstat(path.join(outDir, 'link-dir')),
fs.lstat(path.join(outDir, 'a.txt')),
]);
assert(linkStat.isSymbolicLink());
assert(linkDirStat.isSymbolicLink());
assert(aStat.isFile());
const [linkDirContents, linkTextContents] = await Promise.all([
readlink(path.join(outDir, 'link-dir')),
readlink(path.join(outDir, 'link.txt')),
]);
strictEqual(linkDirContents, 'dir');
strictEqual(linkTextContents, './a.txt');
});
it('should re-create FileBlob symlinks properly', async () => {
if (process.platform === 'win32') {
console.log('Skipping test on windows');
return;
}
const files = {
'a.txt': new FileBlob({
mode: 33188,
contentType: undefined,
data: 'a text',
}),
'dir/b.txt': new FileBlob({
mode: 33188,
contentType: undefined,
data: 'b text',
}),
'link-dir': new FileBlob({
mode: 41453,
contentType: undefined,
data: 'dir',
}),
'link.txt': new FileBlob({
mode: 41453,
contentType: undefined,
data: 'a.txt',
}),
};
strictEqual(Object.keys(files).length, 4);
const outDir = path.join(__dirname, 'symlinks-out');
await fs.remove(outDir);
const files2 = await download(files, outDir);
strictEqual(Object.keys(files2).length, 4);
const [linkStat, linkDirStat, aStat, dirStat] = await Promise.all([
fs.lstat(path.join(outDir, 'link.txt')),
fs.lstat(path.join(outDir, 'link-dir')),
fs.lstat(path.join(outDir, 'a.txt')),
fs.lstat(path.join(outDir, 'dir')),
]);
assert(linkStat.isSymbolicLink());
assert(linkDirStat.isSymbolicLink());
assert(aStat.isFile());
assert(dirStat.isDirectory());
const [linkDirContents, linkTextContents] = await Promise.all([
readlink(path.join(outDir, 'link-dir')),
readlink(path.join(outDir, 'link.txt')),
]);
strictEqual(linkDirContents, 'dir');
strictEqual(linkTextContents, 'a.txt');
});
it('should download symlinks even with incorrect file', async () => {
if (process.platform === 'win32') {
console.log('Skipping test on windows');
return;
}
const files = {
'dir/file.txt': new FileBlob({
mode: 33188,
contentType: undefined,
data: 'file text',
}),
linkdir: new FileBlob({
mode: 41453,
contentType: undefined,
data: 'dir',
}),
'linkdir/file.txt': new FileBlob({
mode: 33188,
contentType: undefined,
data: 'this file should be discarded',
}),
};
const outDir = path.join(__dirname, 'symlinks-out');
await fs.remove(outDir);
await fs.mkdirp(outDir);
await download(files, outDir);
const [dir, file, linkdir] = await Promise.all([
fs.lstat(path.join(outDir, 'dir')),
fs.lstat(path.join(outDir, 'dir/file.txt')),
fs.lstat(path.join(outDir, 'linkdir')),
]);
expect(dir.isFile()).toBe(false);
expect(dir.isSymbolicLink()).toBe(false);
expect(file.isFile()).toBe(true);
expect(file.isSymbolicLink()).toBe(false);
expect(linkdir.isSymbolicLink()).toBe(true);
expect(warningMessages).toEqual([
'Warning: file "linkdir/file.txt" is within a symlinked directory "linkdir" and will be ignored',
]);
});
it('should create empty directory entries', async () => {
const outDir = path.join(__dirname, 'symlinks-out');
await fs.remove(outDir);
const files = {
'empty-dir': new FileBlob({
mode: 16877, // drwxr-xr-x
contentType: undefined,
data: '',
}),
dir: new FileBlob({
mode: 16877,
contentType: undefined,
data: '',
}),
'dir/subdir': new FileBlob({
mode: 16877,
contentType: undefined,
data: '',
}),
'another/subdir': new FileBlob({
mode: 16895, // drwxrwxrwx
contentType: undefined,
data: '',
}),
};
await download(files, outDir);
for (const [p, f] of Object.entries(files)) {
const stat = await fs.lstat(path.join(outDir, p));
expect(stat.isDirectory()).toEqual(true);
if (process.platform !== 'win32') {
// Don't test Windows since it doesn't support the same permissions
expect(stat.mode).toEqual(f.mode);
}
}
});
});

View File

@@ -0,0 +1,38 @@
import fs from 'fs-extra';
import { join } from 'path';
import { tmpdir } from 'os';
import { glob, isDirectory } from '../src';
describe('glob()', () => {
it('should return entries for empty directories', async () => {
const dir = await fs.mkdtemp(join(tmpdir(), 'build-utils-test'));
try {
await Promise.all([
fs.writeFile(join(dir, 'root.txt'), 'file at the root'),
fs.mkdirp(join(dir, 'empty-dir')),
fs
.mkdirp(join(dir, 'dir-with-file'))
.then(() =>
fs.writeFile(join(dir, 'dir-with-file/data.json'), '{"a":"b"}')
),
fs.mkdirp(join(dir, 'another/subdir')),
]);
const files = await glob('**', dir);
const fileNames = Object.keys(files).sort();
expect(fileNames).toHaveLength(4);
expect(fileNames).toEqual([
'another/subdir',
'dir-with-file/data.json',
'empty-dir',
'root.txt',
]);
expect(isDirectory(files['another/subdir'].mode)).toEqual(true);
expect(isDirectory(files['empty-dir'].mode)).toEqual(true);
expect(isDirectory(files['dir-with-file/data.json'].mode)).toEqual(false);
expect(isDirectory(files['root.txt'].mode)).toEqual(false);
expect(files['dir-with-file']).toBeUndefined();
} finally {
await fs.remove(dir);
}
});
});

View File

@@ -1,18 +1,15 @@
import ms from 'ms'; import ms from 'ms';
import path from 'path'; import path from 'path';
import fs, { readlink } from 'fs-extra'; import fs from 'fs-extra';
import { strict as assert, strictEqual } from 'assert'; import { strict as assert } from 'assert';
import { getSupportedNodeVersion } from '../src/fs/node-version'; import { getSupportedNodeVersion } from '../src/fs/node-version';
import download from '../src/fs/download';
import { import {
glob,
getNodeVersion, getNodeVersion,
getLatestNodeVersion, getLatestNodeVersion,
getDiscontinuedNodeVersions, getDiscontinuedNodeVersions,
runNpmInstall, runNpmInstall,
runPackageJsonScript, runPackageJsonScript,
scanParentDirs, scanParentDirs,
FileBlob,
Prerender, Prerender,
} from '../src'; } from '../src';
@@ -49,143 +46,6 @@ afterEach(() => {
console.warn = originalConsoleWarn; console.warn = originalConsoleWarn;
}); });
it('should re-create FileFsRef symlinks properly', async () => {
if (process.platform === 'win32') {
console.log('Skipping test on windows');
return;
}
const files = await glob('**', path.join(__dirname, 'symlinks'));
assert.equal(Object.keys(files).length, 4);
const outDir = path.join(__dirname, 'symlinks-out');
await fs.remove(outDir);
const files2 = await download(files, outDir);
assert.equal(Object.keys(files2).length, 4);
const [linkStat, linkDirStat, aStat] = await Promise.all([
fs.lstat(path.join(outDir, 'link.txt')),
fs.lstat(path.join(outDir, 'link-dir')),
fs.lstat(path.join(outDir, 'a.txt')),
]);
assert(linkStat.isSymbolicLink());
assert(linkDirStat.isSymbolicLink());
assert(aStat.isFile());
const [linkDirContents, linkTextContents] = await Promise.all([
readlink(path.join(outDir, 'link-dir')),
readlink(path.join(outDir, 'link.txt')),
]);
strictEqual(linkDirContents, 'dir');
strictEqual(linkTextContents, './a.txt');
});
it('should re-create FileBlob symlinks properly', async () => {
if (process.platform === 'win32') {
console.log('Skipping test on windows');
return;
}
const files = {
'a.txt': new FileBlob({
mode: 33188,
contentType: undefined,
data: 'a text',
}),
'dir/b.txt': new FileBlob({
mode: 33188,
contentType: undefined,
data: 'b text',
}),
'link-dir': new FileBlob({
mode: 41453,
contentType: undefined,
data: 'dir',
}),
'link.txt': new FileBlob({
mode: 41453,
contentType: undefined,
data: 'a.txt',
}),
};
strictEqual(Object.keys(files).length, 4);
const outDir = path.join(__dirname, 'symlinks-out');
await fs.remove(outDir);
const files2 = await download(files, outDir);
strictEqual(Object.keys(files2).length, 4);
const [linkStat, linkDirStat, aStat, dirStat] = await Promise.all([
fs.lstat(path.join(outDir, 'link.txt')),
fs.lstat(path.join(outDir, 'link-dir')),
fs.lstat(path.join(outDir, 'a.txt')),
fs.lstat(path.join(outDir, 'dir')),
]);
assert(linkStat.isSymbolicLink());
assert(linkDirStat.isSymbolicLink());
assert(aStat.isFile());
assert(dirStat.isDirectory());
const [linkDirContents, linkTextContents] = await Promise.all([
readlink(path.join(outDir, 'link-dir')),
readlink(path.join(outDir, 'link.txt')),
]);
strictEqual(linkDirContents, 'dir');
strictEqual(linkTextContents, 'a.txt');
});
it('should download symlinks even with incorrect file', async () => {
if (process.platform === 'win32') {
console.log('Skipping test on windows');
return;
}
const files = {
'dir/file.txt': new FileBlob({
mode: 33188,
contentType: undefined,
data: 'file text',
}),
linkdir: new FileBlob({
mode: 41453,
contentType: undefined,
data: 'dir',
}),
'linkdir/file.txt': new FileBlob({
mode: 33188,
contentType: undefined,
data: 'this file should be discarded',
}),
};
const outDir = path.join(__dirname, 'symlinks-out');
await fs.remove(outDir);
await fs.mkdirp(outDir);
await download(files, outDir);
const [dir, file, linkdir] = await Promise.all([
fs.lstat(path.join(outDir, 'dir')),
fs.lstat(path.join(outDir, 'dir/file.txt')),
fs.lstat(path.join(outDir, 'linkdir')),
]);
expect(dir.isFile()).toBe(false);
expect(dir.isSymbolicLink()).toBe(false);
expect(file.isFile()).toBe(true);
expect(file.isSymbolicLink()).toBe(false);
expect(linkdir.isSymbolicLink()).toBe(true);
expect(warningMessages).toEqual([
'Warning: file "linkdir/file.txt" is within a symlinked directory "linkdir" and will be ignored',
]);
});
it('should only match supported node versions, otherwise throw an error', async () => { it('should only match supported node versions, otherwise throw an error', async () => {
expect(await getSupportedNodeVersion('14.x', false)).toHaveProperty( expect(await getSupportedNodeVersion('14.x', false)).toHaveProperty(
'major', 'major',

View File

@@ -1,6 +1,6 @@
{ {
"name": "vercel", "name": "vercel",
"version": "28.12.0", "version": "28.12.2",
"preferGlobal": true, "preferGlobal": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"description": "The command-line interface for Vercel", "description": "The command-line interface for Vercel",
@@ -41,16 +41,16 @@
"node": ">= 14" "node": ">= 14"
}, },
"dependencies": { "dependencies": {
"@vercel/build-utils": "workspace:5.7.6", "@vercel/build-utils": "workspace:5.8.1",
"@vercel/go": "workspace:2.2.25", "@vercel/go": "workspace:2.2.27",
"@vercel/hydrogen": "workspace:0.0.39", "@vercel/hydrogen": "workspace:0.0.41",
"@vercel/next": "workspace:3.3.10", "@vercel/next": "workspace:3.3.12",
"@vercel/node": "workspace:2.8.7", "@vercel/node": "workspace:2.8.9",
"@vercel/python": "workspace:3.1.35", "@vercel/python": "workspace:3.1.37",
"@vercel/redwood": "workspace:1.0.46", "@vercel/redwood": "workspace:1.0.48",
"@vercel/remix": "workspace:1.2.0", "@vercel/remix": "workspace:1.2.2",
"@vercel/ruby": "workspace:1.3.51", "@vercel/ruby": "workspace:1.3.53",
"@vercel/static-build": "workspace:1.1.2" "@vercel/static-build": "workspace:1.1.4"
}, },
"devDependencies": { "devDependencies": {
"@alex_neo/jest-expect-message": "1.0.5", "@alex_neo/jest-expect-message": "1.0.5",
@@ -93,13 +93,13 @@
"@types/which": "1.3.2", "@types/which": "1.3.2",
"@types/write-json-file": "2.2.1", "@types/write-json-file": "2.2.1",
"@types/yauzl-promise": "2.1.0", "@types/yauzl-promise": "2.1.0",
"@vercel/client": "workspace:12.2.27", "@vercel/client": "workspace:12.2.29",
"@vercel/error-utils": "workspace:1.0.4", "@vercel/error-utils": "workspace:1.0.6",
"@vercel/frameworks": "workspace:1.2.0", "@vercel/frameworks": "workspace:1.2.2",
"@vercel/fs-detectors": "workspace:3.7.0", "@vercel/fs-detectors": "workspace:3.7.2",
"@vercel/fun": "1.0.4", "@vercel/fun": "1.0.4",
"@vercel/ncc": "0.24.0", "@vercel/ncc": "0.24.0",
"@vercel/routing-utils": "workspace:2.1.4", "@vercel/routing-utils": "workspace:2.1.6",
"@zeit/source-map-support": "0.6.2", "@zeit/source-map-support": "0.6.2",
"ajv": "6.12.2", "ajv": "6.12.2",
"alpha-sort": "2.0.1", "alpha-sort": "2.0.1",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/client", "name": "@vercel/client",
"version": "12.2.27", "version": "12.2.29",
"main": "dist/index.js", "main": "dist/index.js",
"typings": "dist/index.d.ts", "typings": "dist/index.d.ts",
"homepage": "https://vercel.com", "homepage": "https://vercel.com",
@@ -43,8 +43,8 @@
] ]
}, },
"dependencies": { "dependencies": {
"@vercel/build-utils": "workspace:5.7.6", "@vercel/build-utils": "workspace:5.8.1",
"@vercel/routing-utils": "workspace:2.1.4", "@vercel/routing-utils": "workspace:2.1.6",
"@zeit/fetch": "5.2.0", "@zeit/fetch": "5.2.0",
"async-retry": "1.2.3", "async-retry": "1.2.3",
"async-sema": "3.0.0", "async-sema": "3.0.0",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/edge", "name": "@vercel/edge",
"version": "0.2.2", "version": "0.2.4",
"license": "MIT", "license": "MIT",
"main": "dist/index.js", "main": "dist/index.js",
"module": "dist/index.mjs", "module": "dist/index.mjs",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/error-utils", "name": "@vercel/error-utils",
"version": "1.0.4", "version": "1.0.6",
"description": "A collection of error utilities for vercel/vercel", "description": "A collection of error utilities for vercel/vercel",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/frameworks", "name": "@vercel/frameworks",
"version": "1.2.0", "version": "1.2.2",
"main": "./dist/frameworks.js", "main": "./dist/frameworks.js",
"types": "./dist/frameworks.d.ts", "types": "./dist/frameworks.d.ts",
"files": [ "files": [
@@ -21,7 +21,7 @@
"@types/js-yaml": "3.12.1", "@types/js-yaml": "3.12.1",
"@types/node": "14.18.33", "@types/node": "14.18.33",
"@types/node-fetch": "2.5.8", "@types/node-fetch": "2.5.8",
"@vercel/routing-utils": "workspace:2.1.4", "@vercel/routing-utils": "workspace:2.1.6",
"ajv": "6.12.2", "ajv": "6.12.2",
"typescript": "4.3.4" "typescript": "4.3.4"
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/fs-detectors", "name": "@vercel/fs-detectors",
"version": "3.7.0", "version": "3.7.2",
"description": "Vercel filesystem detectors", "description": "Vercel filesystem detectors",
"main": "./dist/index.js", "main": "./dist/index.js",
"types": "./dist/index.d.ts", "types": "./dist/index.d.ts",
@@ -19,9 +19,9 @@
"test-unit": "pnpm test" "test-unit": "pnpm test"
}, },
"dependencies": { "dependencies": {
"@vercel/error-utils": "workspace:1.0.4", "@vercel/error-utils": "workspace:1.0.6",
"@vercel/frameworks": "workspace:1.2.0", "@vercel/frameworks": "workspace:1.2.2",
"@vercel/routing-utils": "workspace:2.1.4", "@vercel/routing-utils": "workspace:2.1.6",
"glob": "8.0.3", "glob": "8.0.3",
"js-yaml": "4.1.0", "js-yaml": "4.1.0",
"json5": "2.2.2", "json5": "2.2.2",
@@ -35,7 +35,7 @@
"@types/minimatch": "3.0.5", "@types/minimatch": "3.0.5",
"@types/node": "14.18.33", "@types/node": "14.18.33",
"@types/semver": "7.3.10", "@types/semver": "7.3.10",
"@vercel/build-utils": "workspace:5.7.6", "@vercel/build-utils": "workspace:5.8.1",
"typescript": "4.3.4" "typescript": "4.3.4"
} }
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/gatsby-plugin-vercel-analytics", "name": "@vercel/gatsby-plugin-vercel-analytics",
"version": "1.0.2", "version": "1.0.4",
"description": "Track Core Web Vitals in Gatsby projects with Vercel Analytics.", "description": "Track Core Web Vitals in Gatsby projects with Vercel Analytics.",
"main": "index.js", "main": "index.js",
"files": [ "files": [

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/go", "name": "@vercel/go",
"version": "2.2.25", "version": "2.2.27",
"license": "MIT", "license": "MIT",
"main": "./dist/index", "main": "./dist/index",
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/go", "homepage": "https://vercel.com/docs/runtimes#official-runtimes/go",
@@ -36,7 +36,7 @@
"@types/node": "14.18.33", "@types/node": "14.18.33",
"@types/node-fetch": "^2.3.0", "@types/node-fetch": "^2.3.0",
"@types/tar": "^4.0.0", "@types/tar": "^4.0.0",
"@vercel/build-utils": "workspace:5.7.6", "@vercel/build-utils": "workspace:5.8.1",
"@vercel/ncc": "0.24.0", "@vercel/ncc": "0.24.0",
"async-retry": "1.3.1", "async-retry": "1.3.1",
"execa": "^1.0.0", "execa": "^1.0.0",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/hydrogen", "name": "@vercel/hydrogen",
"version": "0.0.39", "version": "0.0.41",
"license": "MIT", "license": "MIT",
"main": "./dist/index.js", "main": "./dist/index.js",
"homepage": "https://vercel.com/docs", "homepage": "https://vercel.com/docs",
@@ -21,8 +21,8 @@
"devDependencies": { "devDependencies": {
"@types/jest": "27.5.1", "@types/jest": "27.5.1",
"@types/node": "14.18.33", "@types/node": "14.18.33",
"@vercel/build-utils": "workspace:5.7.6", "@vercel/build-utils": "workspace:5.8.1",
"@vercel/static-config": "workspace:2.0.7", "@vercel/static-config": "workspace:2.0.9",
"execa": "3.2.0", "execa": "3.2.0",
"fs-extra": "11.1.0", "fs-extra": "11.1.0",
"ts-morph": "12.0.0", "ts-morph": "12.0.0",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/next", "name": "@vercel/next",
"version": "3.3.10", "version": "3.3.12",
"license": "MIT", "license": "MIT",
"main": "./dist/index", "main": "./dist/index",
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/next-js", "homepage": "https://vercel.com/docs/runtimes#official-runtimes/next-js",
@@ -45,9 +45,9 @@
"@types/semver": "6.0.0", "@types/semver": "6.0.0",
"@types/text-table": "0.2.1", "@types/text-table": "0.2.1",
"@types/webpack-sources": "3.2.0", "@types/webpack-sources": "3.2.0",
"@vercel/build-utils": "workspace:5.7.6", "@vercel/build-utils": "workspace:5.8.1",
"@vercel/nft": "0.22.5", "@vercel/nft": "0.22.5",
"@vercel/routing-utils": "workspace:2.1.4", "@vercel/routing-utils": "workspace:2.1.6",
"async-sema": "3.0.1", "async-sema": "3.0.1",
"buffer-crc32": "0.2.13", "buffer-crc32": "0.2.13",
"bytes": "3.1.2", "bytes": "3.1.2",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/node-bridge", "name": "@vercel/node-bridge",
"version": "3.1.4", "version": "3.1.6",
"license": "MIT", "license": "MIT",
"main": "./index.js", "main": "./index.js",
"repository": { "repository": {

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/node", "name": "@vercel/node",
"version": "2.8.7", "version": "2.8.9",
"license": "MIT", "license": "MIT",
"main": "./dist/index", "main": "./dist/index",
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/node-js", "homepage": "https://vercel.com/docs/runtimes#official-runtimes/node-js",
@@ -31,9 +31,9 @@
"dependencies": { "dependencies": {
"@edge-runtime/vm": "2.0.0", "@edge-runtime/vm": "2.0.0",
"@types/node": "14.18.33", "@types/node": "14.18.33",
"@vercel/build-utils": "workspace:5.7.6", "@vercel/build-utils": "workspace:5.8.1",
"@vercel/node-bridge": "workspace:3.1.4", "@vercel/node-bridge": "workspace:3.1.6",
"@vercel/static-config": "workspace:2.0.7", "@vercel/static-config": "workspace:2.0.9",
"edge-runtime": "2.0.0", "edge-runtime": "2.0.0",
"esbuild": "0.14.47", "esbuild": "0.14.47",
"exit-hook": "2.2.1", "exit-hook": "2.2.1",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/python", "name": "@vercel/python",
"version": "3.1.35", "version": "3.1.37",
"main": "./dist/index.js", "main": "./dist/index.js",
"license": "MIT", "license": "MIT",
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/python", "homepage": "https://vercel.com/docs/runtimes#official-runtimes/python",
@@ -23,7 +23,7 @@
"@types/execa": "^0.9.0", "@types/execa": "^0.9.0",
"@types/jest": "27.4.1", "@types/jest": "27.4.1",
"@types/node": "14.18.33", "@types/node": "14.18.33",
"@vercel/build-utils": "workspace:5.7.6", "@vercel/build-utils": "workspace:5.8.1",
"@vercel/ncc": "0.24.0", "@vercel/ncc": "0.24.0",
"execa": "^1.0.0", "execa": "^1.0.0",
"typescript": "4.3.4" "typescript": "4.3.4"

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/redwood", "name": "@vercel/redwood",
"version": "1.0.46", "version": "1.0.48",
"main": "./dist/index.js", "main": "./dist/index.js",
"license": "MIT", "license": "MIT",
"homepage": "https://vercel.com/docs", "homepage": "https://vercel.com/docs",
@@ -20,14 +20,14 @@
}, },
"dependencies": { "dependencies": {
"@vercel/nft": "0.22.5", "@vercel/nft": "0.22.5",
"@vercel/routing-utils": "workspace:2.1.4", "@vercel/routing-utils": "workspace:2.1.6",
"semver": "6.1.1" "semver": "6.1.1"
}, },
"devDependencies": { "devDependencies": {
"@types/aws-lambda": "8.10.19", "@types/aws-lambda": "8.10.19",
"@types/node": "14.18.33", "@types/node": "14.18.33",
"@types/semver": "6.0.0", "@types/semver": "6.0.0",
"@vercel/build-utils": "workspace:5.7.6", "@vercel/build-utils": "workspace:5.8.1",
"execa": "3.2.0", "execa": "3.2.0",
"fs-extra": "11.1.0", "fs-extra": "11.1.0",
"typescript": "4.3.4" "typescript": "4.3.4"

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/remix", "name": "@vercel/remix",
"version": "1.2.0", "version": "1.2.2",
"license": "MIT", "license": "MIT",
"main": "./dist/index.js", "main": "./dist/index.js",
"homepage": "https://vercel.com/docs", "homepage": "https://vercel.com/docs",
@@ -25,7 +25,7 @@
"devDependencies": { "devDependencies": {
"@types/jest": "27.5.1", "@types/jest": "27.5.1",
"@types/node": "14.18.33", "@types/node": "14.18.33",
"@vercel/build-utils": "workspace:5.7.6", "@vercel/build-utils": "workspace:5.8.1",
"typescript": "4.6.4" "typescript": "4.6.4"
} }
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/routing-utils", "name": "@vercel/routing-utils",
"version": "2.1.4", "version": "2.1.6",
"description": "Vercel routing utilities", "description": "Vercel routing utilities",
"main": "./dist/index.js", "main": "./dist/index.js",
"types": "./dist/index.d.ts", "types": "./dist/index.d.ts",

View File

@@ -1,7 +1,7 @@
{ {
"name": "@vercel/ruby", "name": "@vercel/ruby",
"author": "Nathan Cahill <nathan@nathancahill.com>", "author": "Nathan Cahill <nathan@nathancahill.com>",
"version": "1.3.51", "version": "1.3.53",
"license": "MIT", "license": "MIT",
"main": "./dist/index", "main": "./dist/index",
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/ruby", "homepage": "https://vercel.com/docs/runtimes#official-runtimes/ruby",
@@ -22,7 +22,7 @@
"devDependencies": { "devDependencies": {
"@types/fs-extra": "8.0.0", "@types/fs-extra": "8.0.0",
"@types/semver": "6.0.0", "@types/semver": "6.0.0",
"@vercel/build-utils": "workspace:5.7.6", "@vercel/build-utils": "workspace:5.8.1",
"@vercel/ncc": "0.24.0", "@vercel/ncc": "0.24.0",
"execa": "2.0.4", "execa": "2.0.4",
"fs-extra": "^7.0.1", "fs-extra": "^7.0.1",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/static-build", "name": "@vercel/static-build",
"version": "1.1.2", "version": "1.1.4",
"license": "MIT", "license": "MIT",
"main": "./dist/index", "main": "./dist/index",
"homepage": "https://vercel.com/docs/build-step", "homepage": "https://vercel.com/docs/build-step",
@@ -37,11 +37,11 @@
"@types/node": "14.18.33", "@types/node": "14.18.33",
"@types/node-fetch": "2.5.4", "@types/node-fetch": "2.5.4",
"@types/promise-timeout": "1.3.0", "@types/promise-timeout": "1.3.0",
"@vercel/build-utils": "workspace:5.7.6", "@vercel/build-utils": "workspace:5.8.1",
"@vercel/frameworks": "workspace:1.2.0", "@vercel/frameworks": "workspace:1.2.2",
"@vercel/ncc": "0.24.0", "@vercel/ncc": "0.24.0",
"@vercel/routing-utils": "workspace:2.1.4", "@vercel/routing-utils": "workspace:2.1.6",
"@vercel/static-config": "workspace:2.0.7", "@vercel/static-config": "workspace:2.0.9",
"execa": "3.2.0", "execa": "3.2.0",
"fs-extra": "10.0.0", "fs-extra": "10.0.0",
"get-port": "5.0.0", "get-port": "5.0.0",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/static-config", "name": "@vercel/static-config",
"version": "2.0.7", "version": "2.0.9",
"license": "MIT", "license": "MIT",
"main": "./dist/index", "main": "./dist/index",
"repository": { "repository": {

84
pnpm-lock.yaml generated
View File

@@ -7,9 +7,9 @@ importers:
'@types/node': 14.18.33 '@types/node': 14.18.33
'@typescript-eslint/eslint-plugin': 5.21.0 '@typescript-eslint/eslint-plugin': 5.21.0
'@typescript-eslint/parser': 5.21.0 '@typescript-eslint/parser': 5.21.0
'@vercel/build-utils': workspace:5.7.5 '@vercel/build-utils': workspace:*
'@vercel/ncc': 0.24.0 '@vercel/ncc': 0.24.0
'@vercel/next': workspace:3.3.9 '@vercel/next': workspace:*
async-retry: 1.2.3 async-retry: 1.2.3
buffer-replace: 1.0.0 buffer-replace: 1.0.0
create-svelte: 2.0.1 create-svelte: 2.0.1
@@ -66,7 +66,7 @@ importers:
'@sentry/node': 5.11.1 '@sentry/node': 5.11.1
'@types/node': 16.18.11 '@types/node': 16.18.11
'@types/node-fetch': 2.5.4 '@types/node-fetch': 2.5.4
'@vercel/node': workspace:2.8.6 '@vercel/node': workspace:*
got: 10.2.1 got: 10.2.1
node-fetch: 2.6.7 node-fetch: 2.6.7
parse-github-url: 1.0.2 parse-github-url: 1.0.2
@@ -198,23 +198,23 @@ importers:
'@types/which': 1.3.2 '@types/which': 1.3.2
'@types/write-json-file': 2.2.1 '@types/write-json-file': 2.2.1
'@types/yauzl-promise': 2.1.0 '@types/yauzl-promise': 2.1.0
'@vercel/build-utils': workspace:5.7.5 '@vercel/build-utils': workspace:5.7.6
'@vercel/client': workspace:12.2.26 '@vercel/client': workspace:12.2.27
'@vercel/error-utils': workspace:1.0.3 '@vercel/error-utils': workspace:1.0.4
'@vercel/frameworks': workspace:1.1.18 '@vercel/frameworks': workspace:1.2.0
'@vercel/fs-detectors': workspace:3.6.2 '@vercel/fs-detectors': workspace:3.7.0
'@vercel/fun': 1.0.4 '@vercel/fun': 1.0.4
'@vercel/go': workspace:2.2.24 '@vercel/go': workspace:2.2.25
'@vercel/hydrogen': workspace:0.0.38 '@vercel/hydrogen': workspace:0.0.39
'@vercel/ncc': 0.24.0 '@vercel/ncc': 0.24.0
'@vercel/next': workspace:3.3.9 '@vercel/next': workspace:3.3.10
'@vercel/node': workspace:2.8.6 '@vercel/node': workspace:2.8.7
'@vercel/python': workspace:3.1.34 '@vercel/python': workspace:3.1.35
'@vercel/redwood': workspace:1.0.45 '@vercel/redwood': workspace:1.0.46
'@vercel/remix': workspace:1.1.7 '@vercel/remix': workspace:1.2.0
'@vercel/routing-utils': workspace:2.1.3 '@vercel/routing-utils': workspace:2.1.4
'@vercel/ruby': workspace:1.3.50 '@vercel/ruby': workspace:1.3.51
'@vercel/static-build': workspace:1.1.1 '@vercel/static-build': workspace:1.1.2
'@zeit/source-map-support': 0.6.2 '@zeit/source-map-support': 0.6.2
ajv: 6.12.2 ajv: 6.12.2
alpha-sort: 2.0.1 alpha-sort: 2.0.1
@@ -440,8 +440,8 @@ importers:
'@types/node-fetch': 2.5.4 '@types/node-fetch': 2.5.4
'@types/recursive-readdir': 2.2.0 '@types/recursive-readdir': 2.2.0
'@types/tar-fs': 1.16.1 '@types/tar-fs': 1.16.1
'@vercel/build-utils': workspace:5.7.5 '@vercel/build-utils': workspace:5.7.6
'@vercel/routing-utils': workspace:2.1.3 '@vercel/routing-utils': workspace:2.1.4
'@zeit/fetch': 5.2.0 '@zeit/fetch': 5.2.0
async-retry: 1.2.3 async-retry: 1.2.3
async-sema: 3.0.0 async-sema: 3.0.0
@@ -521,7 +521,7 @@ importers:
'@types/js-yaml': 3.12.1 '@types/js-yaml': 3.12.1
'@types/node': 14.18.33 '@types/node': 14.18.33
'@types/node-fetch': 2.5.8 '@types/node-fetch': 2.5.8
'@vercel/routing-utils': workspace:2.1.3 '@vercel/routing-utils': workspace:2.1.4
ajv: 6.12.2 ajv: 6.12.2
js-yaml: 3.13.1 js-yaml: 3.13.1
typescript: 4.3.4 typescript: 4.3.4
@@ -545,10 +545,10 @@ importers:
'@types/minimatch': 3.0.5 '@types/minimatch': 3.0.5
'@types/node': 14.18.33 '@types/node': 14.18.33
'@types/semver': 7.3.10 '@types/semver': 7.3.10
'@vercel/build-utils': workspace:5.7.5 '@vercel/build-utils': workspace:5.7.6
'@vercel/error-utils': workspace:1.0.3 '@vercel/error-utils': workspace:1.0.4
'@vercel/frameworks': workspace:1.1.18 '@vercel/frameworks': workspace:1.2.0
'@vercel/routing-utils': workspace:2.1.3 '@vercel/routing-utils': workspace:2.1.4
glob: 8.0.3 glob: 8.0.3
js-yaml: 4.1.0 js-yaml: 4.1.0
json5: 2.2.2 json5: 2.2.2
@@ -592,7 +592,7 @@ importers:
'@types/node': 14.18.33 '@types/node': 14.18.33
'@types/node-fetch': ^2.3.0 '@types/node-fetch': ^2.3.0
'@types/tar': ^4.0.0 '@types/tar': ^4.0.0
'@vercel/build-utils': workspace:5.7.5 '@vercel/build-utils': workspace:5.7.6
'@vercel/ncc': 0.24.0 '@vercel/ncc': 0.24.0
async-retry: 1.3.1 async-retry: 1.3.1
execa: ^1.0.0 execa: ^1.0.0
@@ -624,8 +624,8 @@ importers:
specifiers: specifiers:
'@types/jest': 27.5.1 '@types/jest': 27.5.1
'@types/node': 14.18.33 '@types/node': 14.18.33
'@vercel/build-utils': workspace:5.7.5 '@vercel/build-utils': workspace:5.7.6
'@vercel/static-config': workspace:2.0.6 '@vercel/static-config': workspace:2.0.7
execa: 3.2.0 execa: 3.2.0
fs-extra: 11.1.0 fs-extra: 11.1.0
ts-morph: 12.0.0 ts-morph: 12.0.0
@@ -655,9 +655,9 @@ importers:
'@types/semver': 6.0.0 '@types/semver': 6.0.0
'@types/text-table': 0.2.1 '@types/text-table': 0.2.1
'@types/webpack-sources': 3.2.0 '@types/webpack-sources': 3.2.0
'@vercel/build-utils': workspace:5.7.5 '@vercel/build-utils': workspace:5.7.6
'@vercel/nft': 0.22.5 '@vercel/nft': 0.22.5
'@vercel/routing-utils': workspace:2.1.3 '@vercel/routing-utils': workspace:2.1.4
async-sema: 3.0.1 async-sema: 3.0.1
buffer-crc32: 0.2.13 buffer-crc32: 0.2.13
bytes: 3.1.2 bytes: 3.1.2
@@ -734,11 +734,11 @@ importers:
'@types/node': 14.18.33 '@types/node': 14.18.33
'@types/node-fetch': ^2.6.1 '@types/node-fetch': ^2.6.1
'@types/test-listen': 1.1.0 '@types/test-listen': 1.1.0
'@vercel/build-utils': workspace:5.7.5 '@vercel/build-utils': workspace:5.7.6
'@vercel/ncc': 0.24.0 '@vercel/ncc': 0.24.0
'@vercel/nft': 0.22.5 '@vercel/nft': 0.22.5
'@vercel/node-bridge': workspace:3.1.3 '@vercel/node-bridge': workspace:3.1.4
'@vercel/static-config': workspace:2.0.6 '@vercel/static-config': workspace:2.0.7
content-type: 1.0.4 content-type: 1.0.4
cookie: 0.4.0 cookie: 0.4.0
edge-runtime: 2.0.0 edge-runtime: 2.0.0
@@ -812,7 +812,7 @@ importers:
'@types/execa': ^0.9.0 '@types/execa': ^0.9.0
'@types/jest': 27.4.1 '@types/jest': 27.4.1
'@types/node': 14.18.33 '@types/node': 14.18.33
'@vercel/build-utils': workspace:5.7.5 '@vercel/build-utils': workspace:5.7.6
'@vercel/ncc': 0.24.0 '@vercel/ncc': 0.24.0
execa: ^1.0.0 execa: ^1.0.0
typescript: 4.3.4 typescript: 4.3.4
@@ -830,9 +830,9 @@ importers:
'@types/aws-lambda': 8.10.19 '@types/aws-lambda': 8.10.19
'@types/node': 14.18.33 '@types/node': 14.18.33
'@types/semver': 6.0.0 '@types/semver': 6.0.0
'@vercel/build-utils': workspace:5.7.5 '@vercel/build-utils': workspace:5.7.6
'@vercel/nft': 0.22.5 '@vercel/nft': 0.22.5
'@vercel/routing-utils': workspace:2.1.3 '@vercel/routing-utils': workspace:2.1.4
execa: 3.2.0 execa: 3.2.0
fs-extra: 11.1.0 fs-extra: 11.1.0
semver: 6.1.1 semver: 6.1.1
@@ -854,7 +854,7 @@ importers:
specifiers: specifiers:
'@types/jest': 27.5.1 '@types/jest': 27.5.1
'@types/node': 14.18.33 '@types/node': 14.18.33
'@vercel/build-utils': workspace:5.7.5 '@vercel/build-utils': workspace:5.7.6
'@vercel/nft': 0.22.5 '@vercel/nft': 0.22.5
typescript: 4.6.4 typescript: 4.6.4
dependencies: dependencies:
@@ -885,7 +885,7 @@ importers:
specifiers: specifiers:
'@types/fs-extra': 8.0.0 '@types/fs-extra': 8.0.0
'@types/semver': 6.0.0 '@types/semver': 6.0.0
'@vercel/build-utils': workspace:5.7.5 '@vercel/build-utils': workspace:5.7.6
'@vercel/ncc': 0.24.0 '@vercel/ncc': 0.24.0
execa: 2.0.4 execa: 2.0.4
fs-extra: ^7.0.1 fs-extra: ^7.0.1
@@ -911,11 +911,11 @@ importers:
'@types/node': 14.18.33 '@types/node': 14.18.33
'@types/node-fetch': 2.5.4 '@types/node-fetch': 2.5.4
'@types/promise-timeout': 1.3.0 '@types/promise-timeout': 1.3.0
'@vercel/build-utils': workspace:5.7.5 '@vercel/build-utils': workspace:5.7.6
'@vercel/frameworks': workspace:1.1.18 '@vercel/frameworks': workspace:1.2.0
'@vercel/ncc': 0.24.0 '@vercel/ncc': 0.24.0
'@vercel/routing-utils': workspace:2.1.3 '@vercel/routing-utils': workspace:2.1.4
'@vercel/static-config': workspace:2.0.6 '@vercel/static-config': workspace:2.0.7
execa: 3.2.0 execa: 3.2.0
fs-extra: 10.0.0 fs-extra: 10.0.0
get-port: 5.0.0 get-port: 5.0.0

3
utils/publish.sh vendored
View File

@@ -29,9 +29,6 @@ else
echo "Publishing stable release" echo "Publishing stable release"
fi fi
# Sometimes this is a false alarm and blocks publish
git checkout pnpm-lock.yaml
pnpm run lerna publish from-git $dist_tag --no-verify-access --yes pnpm run lerna publish from-git $dist_tag --no-verify-access --yes
# always update canary dist-tag as we no longer publish canary versions separate # always update canary dist-tag as we no longer publish canary versions separate