Compare commits

..

17 Commits

Author SHA1 Message Date
dav-is
613c384ce8 Publish Canary
- @vercel/build-utils@2.5.3-canary.0
 - vercel@20.1.1-canary.4
 - @vercel/client@9.0.2-canary.3
 - @vercel/next@2.6.26-canary.0
 - @vercel/node@1.8.3-canary.0
2020-09-09 09:59:50 -04:00
Gianmarco
a9598d14e3 [docs] Fix typo in error message (#5141) 2020-09-08 16:48:52 -04:00
Connor Davis
48935e92d8 Remove extra newline in warning (#5165) 2020-09-08 11:23:28 -04:00
Steven
1b1e72ab88 Publish Stable
- @vercel/build-utils@2.5.2
 - @vercel/next@2.6.25
 - @vercel/node@1.8.2
2020-09-08 09:56:26 -04:00
Steven
0f574f67f6 [examples] Update Ember with missing robots.txt (#5164)
Fixes https://github.com/emberjs/ember.js/issues/19132

Source: https://github.com/ember-cli/ember-new-output/blob/master/public/robots.txt
2020-09-08 09:49:41 -04:00
Steven
0d4be3f5f2 Publish Canary
- @vercel/build-utils@2.5.2-canary.2
 - vercel@20.1.1-canary.3
 - @vercel/client@9.0.2-canary.2
 - @vercel/next@2.6.25-canary.2
 - @vercel/node@1.8.2-canary.2
2020-09-05 15:16:56 -04:00
Steven
a971c2aa3a [tests] Delay deprecation message (#5158)
This PR is a follow up to #5157 which was unable to deprecate a package immediately after publishing and failed with E405. So this PR adds a delay between publish and deprecate. It also uses the `-f` flag suggested in the error message. https://github.com/vercel/vercel/runs/1076007594#step:6:649
2020-09-05 15:13:48 -04:00
Steven
66414bd65a Publish Canary
- @vercel/build-utils@2.5.2-canary.1
 - vercel@20.1.1-canary.2
 - @vercel/client@9.0.2-canary.1
 - @vercel/next@2.6.25-canary.1
 - @vercel/node@1.8.2-canary.1
2020-09-05 13:54:34 -04:00
Steven
3b021993b5 [tests] Fix deprecation message (#5157)
This PR is a follow up to #5119 which had the names backwards.

I fixed the variable names to avoid the confusion since "new" and "old" were ambiguous.

I also removed the incorrect deprecation message from packages published during commit c9597dc199.
2020-09-05 13:49:20 -04:00
JJ Kasper
c9597dc199 Publish Canary
- @vercel/build-utils@2.5.2-canary.0
 - vercel@20.1.1-canary.1
 - @vercel/client@9.0.2-canary.0
 - @vercel/next@2.6.25-canary.0
 - @vercel/node@1.8.2-canary.0
2020-09-05 00:16:18 -05:00
Steven
1b5c94b392 [node][next] Fix nft tracing for monorepos (#5143)
Co-authored-by: Joe Haddad <joe.haddad@zeit.co>
Co-authored-by: JJ Kasper <jj@jjsweb.site>
2020-09-05 01:13:54 -04:00
dav-is
bd1393a9d6 Publish Canary
- vercel@20.1.1-canary.0
2020-09-04 18:40:25 -04:00
dependabot[bot]
47ddd36fec [cli] Update http-proxy to v1.18.1 (#5152)
Bumps [http-proxy](https://github.com/http-party/node-http-proxy) from 1.17.0 to 1.18.1.
- [Release notes](https://github.com/http-party/node-http-proxy/releases)
- [Changelog](https://github.com/http-party/node-http-proxy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/http-party/node-http-proxy/compare/1.17.0...1.18.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-04 14:33:56 -07:00
dependabot[bot]
bd047cdc6a Update tree-kill to v1.2.2 (#5151)
Bumps [tree-kill](https://github.com/pkrumins/node-tree-kill) from 1.2.1 to 1.2.2.
- [Release notes](https://github.com/pkrumins/node-tree-kill/releases)
- [Commits](https://github.com/pkrumins/node-tree-kill/compare/v1.2.1...v1.2.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-04 14:33:32 -07:00
Connor Davis
477f9e8753 [cli] Fix color and indention in learn more link (#5148)
CH-568

Before:
![image](https://user-images.githubusercontent.com/11590024/92258007-2883e080-eea4-11ea-8c14-af0f3c9e27a6.png)

After:
![Screenshot-2020-09-04-11:44](https://user-images.githubusercontent.com/11590024/92258023-3174b200-eea4-11ea-9170-0acd4d6f883b.png)
2020-09-04 21:25:52 +00:00
Mike Hartington
183ea42f94 [examples] chore(ionic-angular): remove Google Maps API key (#5130) 2020-08-31 11:58:52 -07:00
Steven
57a17eb416 [tests] Deprecate "now" npm package in favor of "vercel" (#5119)
We deprecated all the `now` scoped packages in favor of the `vercel` equivalents, however the deprecation message disappears after each publish, so we must to run `npm deprecate` after `npm publish` for legacy packages.
2020-08-28 15:39:06 -04:00
21 changed files with 225 additions and 128 deletions

View File

@@ -68,12 +68,12 @@ In such cases you can visit the URL of the failed deployment and append `/_logs`
The logs of this deployment will contain the actual error which may help you to understand what went wrong. The logs of this deployment will contain the actual error which may help you to understand what went wrong.
### @zeit/node-file-trace ### @vercel/nft
Some of the Builders use `@zeit/node-file-trace` to tree-shake files before deployment. If you suspect an error with this tree-shaking mechanism, you can create the following script in your project: Some of the Builders use `@vercel/nft` to tree-shake files before deployment. If you suspect an error with this tree-shaking mechanism, you can create the following script in your project:
```js ```js
const trace = require('@zeit/node-file-trace'); const trace = require('@vercel/nft');
trace(['path/to/entrypoint.js'], { trace(['path/to/entrypoint.js'], {
ts: true, ts: true,
mixedModules: true, mixedModules: true,
@@ -82,7 +82,7 @@ trace(['path/to/entrypoint.js'], {
.then(e => console.error(e)); .then(e => console.error(e));
``` ```
When you run this script, you'll see all imported files. If anything file is missing, the bug is in [@zeit/node-file-trace](https://github.com/vercel/node-file-trace) and not the Builder. When you run this script, you'll see all imported files. If anything file is missing, the bug is in [@vercel/nft](https://github.com/vercel/nft) and not the Builder.
## Deploy a Builder with existing project ## Deploy a Builder with existing project

View File

@@ -15,7 +15,7 @@ jobs:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- uses: actions/setup-node@v1 - uses: actions/setup-node@v1
with: with:
node-version: 10 node-version: 12
- name: Install - name: Install
run: yarn install --check-files --frozen-lockfile run: yarn install --check-files --frozen-lockfile
- name: Build - name: Build

View File

@@ -2,7 +2,7 @@
#### Why This Error Occurred #### Why This Error Occurred
This error occurs when you have your application is not configured for Serverless Next.js build output. This error occurs when your application is not configured for Serverless Next.js build output.
#### Possible Ways to Fix It #### Possible Ways to Fix It

View File

@@ -27,3 +27,6 @@
# Environment Variables # Environment Variables
.env .env
.env.build .env.build
# Vercel
.vercel

View File

@@ -0,0 +1,3 @@
# http://www.robotstxt.org
User-agent: *
Disallow:

View File

@@ -27,7 +27,7 @@ export class MapPage implements AfterViewInit {
} }
const googleMaps = await getGoogleMaps( const googleMaps = await getGoogleMaps(
'AIzaSyB8pf6ZdFQj5qw7rc_HSGrhUwQKfIe9ICw' 'YOUR_API_KEY_HERE'
); );
let map; let map;

View File

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

View File

@@ -107,6 +107,13 @@ export interface BuildOptions {
*/ */
workPath: string; workPath: string;
/**
* The "Root Directory" is assigned to the `workPath` so the `repoRootPath`
* is the Git Repository Root. This is only relevant for Monorepos.
* See https://vercel.com/blog/monorepos
*/
repoRootPath?: string;
/** /**
* An arbitrary object passed by the user in the build definition defined * An arbitrary object passed by the user in the build definition defined
* in `vercel.json`. * in `vercel.json`.

View File

@@ -1,6 +1,6 @@
{ {
"name": "vercel", "name": "vercel",
"version": "20.1.0", "version": "20.1.1-canary.4",
"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",
@@ -61,9 +61,9 @@
"node": ">= 10" "node": ">= 10"
}, },
"dependencies": { "dependencies": {
"@vercel/build-utils": "2.5.1", "@vercel/build-utils": "2.5.3-canary.0",
"@vercel/go": "1.1.6", "@vercel/go": "1.1.6",
"@vercel/node": "1.8.1", "@vercel/node": "1.8.3-canary.0",
"@vercel/python": "1.2.3", "@vercel/python": "1.2.3",
"@vercel/ruby": "1.2.4", "@vercel/ruby": "1.2.4",
"update-notifier": "4.1.0" "update-notifier": "4.1.0"
@@ -134,7 +134,7 @@
"fs-extra": "7.0.1", "fs-extra": "7.0.1",
"get-port": "5.1.1", "get-port": "5.1.1",
"glob": "7.1.2", "glob": "7.1.2",
"http-proxy": "1.17.0", "http-proxy": "1.18.1",
"inquirer": "7.0.4", "inquirer": "7.0.4",
"is-port-reachable": "3.0.0", "is-port-reachable": "3.0.0",
"is-url": "1.2.2", "is-url": "1.2.2",
@@ -168,7 +168,7 @@
"text-table": "0.2.0", "text-table": "0.2.0",
"title": "3.4.1", "title": "3.4.1",
"tmp-promise": "1.0.3", "tmp-promise": "1.0.3",
"tree-kill": "1.2.1", "tree-kill": "1.2.2",
"ts-node": "8.3.0", "ts-node": "8.3.0",
"typescript": "3.9.3", "typescript": "3.9.3",
"universal-analytics": "0.4.20", "universal-analytics": "0.4.20",

View File

@@ -157,17 +157,21 @@ const printDeploymentStatus = async (
} }
if (indications) { if (indications) {
const indent = process.stdout.isTTY ? ' ' : ''; // if using emojis
const newline = '\n';
for (let indication of indications) { for (let indication of indications) {
output.print( const message =
prependEmoji( prependEmoji(chalk.dim(indication.payload), emoji(indication.type)) +
`${chalk.dim(indication.payload)}`, newline;
emoji(indication.type) let link = '';
) + if (indication.link)
`\n` + link =
(indication.link indent +
? `${indication.action || 'Learn More'}: ${indication.link}\n\n` chalk.dim(
: '') `${indication.action || 'Learn More'}: ${indication.link}`
); ) +
newline;
output.print(message + link);
} }
} }
}; };

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/client", "name": "@vercel/client",
"version": "9.0.1", "version": "9.0.2-canary.3",
"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",
@@ -37,7 +37,7 @@
] ]
}, },
"dependencies": { "dependencies": {
"@vercel/build-utils": "2.5.1", "@vercel/build-utils": "2.5.3-canary.0",
"@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/next", "name": "@vercel/next",
"version": "2.6.24", "version": "2.6.26-canary.0",
"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",
@@ -26,7 +26,7 @@
"@types/resolve-from": "5.0.1", "@types/resolve-from": "5.0.1",
"@types/semver": "6.0.0", "@types/semver": "6.0.0",
"@types/yazl": "2.4.1", "@types/yazl": "2.4.1",
"@zeit/node-file-trace": "0.8.2", "@vercel/nft": "0.9.2",
"async-sema": "3.0.1", "async-sema": "3.0.1",
"buffer-crc32": "0.2.13", "buffer-crc32": "0.2.13",
"escape-string-regexp": "3.0.0", "escape-string-regexp": "3.0.0",

View File

@@ -16,7 +16,7 @@ import {
convertRedirects, convertRedirects,
convertRewrites, convertRewrites,
} from '@vercel/routing-utils/dist/superstatic'; } from '@vercel/routing-utils/dist/superstatic';
import { nodeFileTrace, NodeFileTraceReasons } from '@zeit/node-file-trace'; import { nodeFileTrace, NodeFileTraceReasons } from '@vercel/nft';
import { Sema } from 'async-sema'; import { Sema } from 'async-sema';
import { ChildProcess, fork } from 'child_process'; import { ChildProcess, fork } from 'child_process';
import escapeStringRegexp from 'escape-string-regexp'; import escapeStringRegexp from 'escape-string-regexp';
@@ -213,6 +213,7 @@ function startDevServer(entryPath: string, runtimeEnv: EnvConfig) {
export const build = async ({ export const build = async ({
files, files,
workPath, workPath,
repoRootPath,
entrypoint, entrypoint,
config = {} as Config, config = {} as Config,
meta = {} as BuildParamsMeta, meta = {} as BuildParamsMeta,
@@ -231,6 +232,7 @@ export const build = async ({
const entryPath = path.join(workPath, entryDirectory); const entryPath = path.join(workPath, entryDirectory);
const outputDirectory = config.outputDirectory || '.next'; const outputDirectory = config.outputDirectory || '.next';
const dotNextStatic = path.join(entryPath, outputDirectory, 'static'); const dotNextStatic = path.join(entryPath, outputDirectory, 'static');
const baseDir = repoRootPath || workPath;
await download(files, workPath, meta); await download(files, workPath, meta);
@@ -240,7 +242,7 @@ export const build = async ({
const spawnOpts = getSpawnOptions(meta, nodeVersion); const spawnOpts = getSpawnOptions(meta, nodeVersion);
const nowJsonPath = await findUp(['now.json', 'vercel.json'], { const nowJsonPath = await findUp(['now.json', 'vercel.json'], {
cwd: path.join(workPath, path.dirname(entrypoint)), cwd: entryPath,
}); });
let hasLegacyRoutes = false; let hasLegacyRoutes = false;
@@ -756,7 +758,10 @@ export const build = async ({
}; };
const lambdaOptions = await getLambdaOptionsFromFunction({ const lambdaOptions = await getLambdaOptionsFromFunction({
sourceFile: await getSourceFilePathFromPage({ workPath, page }), sourceFile: await getSourceFilePathFromPage({
workPath: entryPath,
page,
}),
config, config,
}); });
@@ -939,12 +944,18 @@ export const build = async ({
const { const {
fileList: apiFileList, fileList: apiFileList,
reasons: apiReasons, reasons: apiReasons,
} = await nodeFileTrace(apiPages, { base: workPath }); } = await nodeFileTrace(apiPages, {
base: baseDir,
processCwd: entryPath,
});
const { const { fileList, reasons: nonApiReasons } = await nodeFileTrace(
fileList, nonApiPages,
reasons: nonApiReasons, {
} = await nodeFileTrace(nonApiPages, { base: workPath }); base: baseDir,
processCwd: entryPath,
}
);
debug(`node-file-trace result for pages: ${fileList}`); debug(`node-file-trace result for pages: ${fileList}`);
@@ -962,7 +973,7 @@ export const build = async ({
// Initial files are manually added to the lambda later // Initial files are manually added to the lambda later
return; return;
} }
const filePath = path.join(workPath, file); const filePath = path.join(baseDir, file);
if (!lstatResults[filePath]) { if (!lstatResults[filePath]) {
lstatResults[filePath] = lstatSema lstatResults[filePath] = lstatSema
@@ -973,7 +984,7 @@ export const build = async ({
const { mode } = await lstatResults[filePath]; const { mode } = await lstatResults[filePath];
files[file] = new FileFsRef({ files[file] = new FileFsRef({
fsPath: path.join(workPath, file), fsPath: path.join(baseDir, file),
mode, mode,
}); });
}; };
@@ -1158,7 +1169,11 @@ export const build = async ({
const { const {
pseudoLayer: pageLayer, pseudoLayer: pageLayer,
pseudoLayerBytes: pageLayerBytes, pseudoLayerBytes: pageLayerBytes,
} = await createPseudoLayer({ [pageFileName]: pages[page] }); } = await createPseudoLayer({
[path.join(path.relative(baseDir, entryPath), pageFileName)]: pages[
page
],
});
currentLambdaGroup.pages[outputName] = { currentLambdaGroup.pages[outputName] = {
pageLayer, pageLayer,
@@ -1194,21 +1209,31 @@ export const build = async ({
} }
const pageFileName = path.normalize( const pageFileName = path.normalize(
path.relative(workPath, pages[page].fsPath) path.relative(entryPath, pages[page].fsPath)
); );
const launcher = launcherData.replace( const launcher = launcherData.replace(
/__LAUNCHER_PAGE_PATH__/g, /__LAUNCHER_PAGE_PATH__/g,
JSON.stringify(requiresTracing ? `./${pageFileName}` : './page') JSON.stringify(requiresTracing ? `./${pageFileName}` : './page')
); );
const launcherFiles: { [name: string]: FileFsRef | FileBlob } = { const launcherFiles: { [name: string]: FileFsRef | FileBlob } = {
'now__bridge.js': new FileFsRef({ [path.join(
path.relative(baseDir, entryPath),
'now__bridge.js'
)]: new FileFsRef({
fsPath: path.join(__dirname, 'now__bridge.js'), fsPath: path.join(__dirname, 'now__bridge.js'),
}), }),
'now__launcher.js': new FileBlob({ data: launcher }), [path.join(
path.relative(baseDir, entryPath),
'now__launcher.js'
)]: new FileBlob({ data: launcher }),
}; };
const lambdaOptions = await getLambdaOptionsFromFunction({ const lambdaOptions = await getLambdaOptionsFromFunction({
sourceFile: await getSourceFilePathFromPage({ workPath, page }), sourceFile: await getSourceFilePathFromPage({
workPath: entryPath,
page,
}),
config, config,
}); });
@@ -1218,10 +1243,16 @@ export const build = async ({
lambdas[outputName] = await createLambdaFromPseudoLayers({ lambdas[outputName] = await createLambdaFromPseudoLayers({
files: { files: {
...launcherFiles, ...launcherFiles,
[requiresTracing ? pageFileName : 'page.js']: pages[page], [path.join(
path.relative(baseDir, entryPath),
pageFileName
)]: pages[page],
}, },
layers: isApiPage(pageFileName) ? apiPseudoLayers : pseudoLayers, layers: isApiPage(pageFileName) ? apiPseudoLayers : pseudoLayers,
handler: 'now__launcher.launcher', handler: path.join(
path.relative(baseDir, entryPath),
'now__launcher.launcher'
),
runtime: nodeVersion.runtime, runtime: nodeVersion.runtime,
...lambdaOptions, ...lambdaOptions,
}); });
@@ -1231,7 +1262,7 @@ export const build = async ({
...launcherFiles, ...launcherFiles,
...assets, ...assets,
...tracedFiles, ...tracedFiles,
[requiresTracing ? pageFileName : 'page.js']: pages[page], ['page.js']: pages[page],
}, },
handler: 'now__launcher.launcher', handler: 'now__launcher.launcher',
runtime: nodeVersion.runtime, runtime: nodeVersion.runtime,
@@ -1372,10 +1403,16 @@ export const build = async ({
` `
); );
const launcherFiles: { [name: string]: FileFsRef | FileBlob } = { const launcherFiles: { [name: string]: FileFsRef | FileBlob } = {
'now__bridge.js': new FileFsRef({ [path.join(
path.relative(baseDir, entryPath),
'now__bridge.js'
)]: new FileFsRef({
fsPath: path.join(__dirname, 'now__bridge.js'), fsPath: path.join(__dirname, 'now__bridge.js'),
}), }),
'now__launcher.js': new FileBlob({ data: launcher }), [path.join(
path.relative(baseDir, entryPath),
'now__launcher.js'
)]: new FileBlob({ data: launcher }),
}; };
const pageLayers: PseudoLayer[] = []; const pageLayers: PseudoLayer[] = [];
@@ -1397,7 +1434,10 @@ export const build = async ({
...(group.isApiLambda ? apiPseudoLayers : pseudoLayers), ...(group.isApiLambda ? apiPseudoLayers : pseudoLayers),
...pageLayers, ...pageLayers,
], ],
handler: 'now__launcher.launcher', handler: path.join(
path.relative(baseDir, entryPath),
'now__launcher.launcher'
),
runtime: nodeVersion.runtime, runtime: nodeVersion.runtime,
}); });
} else { } else {
@@ -1409,7 +1449,10 @@ export const build = async ({
...assets, ...assets,
}, },
layers: pageLayers, layers: pageLayers,
handler: 'now__launcher.launcher', handler: path.join(
path.relative(baseDir, entryPath),
'now__launcher.launcher'
),
runtime: nodeVersion.runtime, runtime: nodeVersion.runtime,
}); });
} }

View File

@@ -1,3 +1,9 @@
// The Next.js builder can emit the project in a subdirectory depending on how
// many folder levels of `node_modules` are traced. To ensure `process.cwd()`
// returns the proper path, we change the directory to the folder with the
// launcher. This mimics `yarn workspace run` behavior.
process.chdir(__dirname);
if (!process.env.NODE_ENV) { if (!process.env.NODE_ENV) {
const region = process.env.VERCEL_REGION || process.env.NOW_REGION; const region = process.env.VERCEL_REGION || process.env.NOW_REGION;
process.env.NODE_ENV = region === 'dev1' ? 'development' : 'production'; process.env.NODE_ENV = region === 'dev1' ? 'development' : 'production';

View File

@@ -1,3 +1,9 @@
// The Next.js builder can emit the project in a subdirectory depending on how
// many folder levels of `node_modules` are traced. To ensure `process.cwd()`
// returns the proper path, we change the directory to the folder with the
// launcher. This mimics `yarn workspace run` behavior.
process.chdir(__dirname);
if (!process.env.NODE_ENV) { if (!process.env.NODE_ENV) {
const region = process.env.VERCEL_REGION || process.env.NOW_REGION; const region = process.env.VERCEL_REGION || process.env.NOW_REGION;
process.env.NODE_ENV = region === 'dev1' ? 'development' : 'production'; process.env.NODE_ENV = region === 'dev1' ? 'development' : 'production';

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/node", "name": "@vercel/node",
"version": "1.8.1", "version": "1.8.3-canary.0",
"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",
@@ -33,7 +33,7 @@
"@types/etag": "1.8.0", "@types/etag": "1.8.0",
"@types/test-listen": "1.1.0", "@types/test-listen": "1.1.0",
"@vercel/ncc": "0.24.0", "@vercel/ncc": "0.24.0",
"@zeit/node-file-trace": "0.8.2", "@vercel/nft": "0.9.2",
"content-type": "1.0.4", "content-type": "1.0.4",
"cookie": "0.4.0", "cookie": "0.4.0",
"etag": "1.8.1", "etag": "1.8.1",

View File

@@ -19,7 +19,7 @@ import {
// @ts-ignore - `@types/mkdirp-promise` is broken // @ts-ignore - `@types/mkdirp-promise` is broken
import mkdirp from 'mkdirp-promise'; import mkdirp from 'mkdirp-promise';
import once from '@tootallnate/once'; import once from '@tootallnate/once';
import { nodeFileTrace } from '@zeit/node-file-trace'; import { nodeFileTrace } from '@vercel/nft';
import buildUtils from './build-utils'; import buildUtils from './build-utils';
import { import {
File, File,
@@ -52,12 +52,6 @@ import { Register, register } from './typescript';
export { shouldServe }; export { shouldServe };
export { NowRequest, NowResponse } from './types'; export { NowRequest, NowResponse } from './types';
interface CompilerConfig {
debug?: boolean;
includeFiles?: string | string[];
excludeFiles?: string | string[];
}
interface DownloadOptions { interface DownloadOptions {
files: Files; files: Files;
entrypoint: string; entrypoint: string;
@@ -125,9 +119,10 @@ async function downloadInstallAndBundle({
async function compile( async function compile(
workPath: string, workPath: string,
baseDir: string,
entrypointPath: string, entrypointPath: string,
entrypoint: string, entrypoint: string,
config: CompilerConfig config: Config
): Promise<{ ): Promise<{
preparedFiles: Files; preparedFiles: Files;
shouldAddSourcemapSupport: boolean; shouldAddSourcemapSupport: boolean;
@@ -150,20 +145,21 @@ async function compile(
for (const pattern of includeFiles) { for (const pattern of includeFiles) {
const files = await glob(pattern, workPath); const files = await glob(pattern, workPath);
await Promise.all( await Promise.all(
Object.keys(files).map(async file => { Object.values(files).map(async entry => {
const entry = files[file]; const { fsPath } = entry;
fsCache.set(file, entry); const relPath = relative(baseDir, fsPath);
fsCache.set(relPath, entry);
const stream = entry.toStream(); const stream = entry.toStream();
const { data } = await FileBlob.fromStream({ stream }); const { data } = await FileBlob.fromStream({ stream });
if (file.endsWith('.ts') || file.endsWith('.tsx')) { if (relPath.endsWith('.ts') || relPath.endsWith('.tsx')) {
sourceCache.set( sourceCache.set(
file, relPath,
compileTypeScript(resolve(workPath, file), data.toString()) compileTypeScript(fsPath, data.toString())
); );
} else { } else {
sourceCache.set(file, data); sourceCache.set(relPath, data);
} }
inputFiles.add(resolve(workPath, file)); inputFiles.add(fsPath);
}) })
); );
} }
@@ -178,7 +174,7 @@ async function compile(
let tsCompile: Register; let tsCompile: Register;
function compileTypeScript(path: string, source: string): string { function compileTypeScript(path: string, source: string): string {
const relPath = relative(workPath, path); const relPath = relative(baseDir, path);
if (!tsCompile) { if (!tsCompile) {
tsCompile = register({ tsCompile = register({
basePath: workPath, // The base is the same as root now.json dir basePath: workPath, // The base is the same as root now.json dir
@@ -201,12 +197,13 @@ async function compile(
const { fileList, esmFileList, warnings } = await nodeFileTrace( const { fileList, esmFileList, warnings } = await nodeFileTrace(
[...inputFiles], [...inputFiles],
{ {
base: workPath, base: baseDir,
processCwd: workPath,
ts: true, ts: true,
mixedModules: true, mixedModules: true,
ignore: config.excludeFiles, ignore: config.excludeFiles,
readFile(fsPath: string): Buffer | string | null { readFile(fsPath: string): Buffer | string | null {
const relPath = relative(workPath, fsPath); const relPath = relative(baseDir, fsPath);
const cached = sourceCache.get(relPath); const cached = sourceCache.get(relPath);
if (cached) return cached.toString(); if (cached) return cached.toString();
// null represents a not found // null represents a not found
@@ -246,7 +243,7 @@ async function compile(
for (const path of fileList) { for (const path of fileList) {
let entry = fsCache.get(path); let entry = fsCache.get(path);
if (!entry) { if (!entry) {
const fsPath = resolve(workPath, path); const fsPath = resolve(baseDir, path);
const { mode } = lstatSync(fsPath); const { mode } = lstatSync(fsPath);
if (isSymbolicLink(mode)) { if (isSymbolicLink(mode)) {
entry = new FileFsRef({ fsPath, mode }); entry = new FileFsRef({ fsPath, mode });
@@ -258,14 +255,14 @@ async function compile(
if (isSymbolicLink(entry.mode) && entry.fsPath) { if (isSymbolicLink(entry.mode) && entry.fsPath) {
// ensure the symlink target is added to the file list // ensure the symlink target is added to the file list
const symlinkTarget = relative( const symlinkTarget = relative(
workPath, baseDir,
resolve(dirname(entry.fsPath), readlinkSync(entry.fsPath)) resolve(dirname(entry.fsPath), readlinkSync(entry.fsPath))
); );
if ( if (
!symlinkTarget.startsWith('..' + sep) && !symlinkTarget.startsWith('..' + sep) &&
fileList.indexOf(symlinkTarget) === -1 fileList.indexOf(symlinkTarget) === -1
) { ) {
const stats = statSync(resolve(workPath, symlinkTarget)); const stats = statSync(resolve(baseDir, symlinkTarget));
if (stats.isFile()) { if (stats.isFile()) {
fileList.push(symlinkTarget); fileList.push(symlinkTarget);
} }
@@ -275,7 +272,7 @@ async function compile(
// There is a bug on Windows where entrypoint uses forward slashes // There is a bug on Windows where entrypoint uses forward slashes
// and workPath uses backslashes so we use resolve before comparing. // and workPath uses backslashes so we use resolve before comparing.
if ( if (
resolve(workPath, path) !== resolve(workPath, entrypoint) && resolve(baseDir, path) !== resolve(workPath, entrypoint) &&
tsCompiled.has(path) tsCompiled.has(path)
) { ) {
preparedFiles[ preparedFiles[
@@ -339,6 +336,7 @@ export async function build({
files, files,
entrypoint, entrypoint,
workPath, workPath,
repoRootPath,
config = {}, config = {},
meta = {}, meta = {},
}: BuildOptions) { }: BuildOptions) {
@@ -346,6 +344,7 @@ export async function build({
config.helpers === false || process.env.NODEJS_HELPERS === '0' config.helpers === false || process.env.NODEJS_HELPERS === '0'
); );
const baseDir = repoRootPath || workPath;
const awsLambdaHandler = getAWSLambdaHandler(entrypoint, config); const awsLambdaHandler = getAWSLambdaHandler(entrypoint, config);
const { const {
@@ -372,6 +371,7 @@ export async function build({
const traceTime = Date.now(); const traceTime = Date.now();
const { preparedFiles, shouldAddSourcemapSupport, watch } = await compile( const { preparedFiles, shouldAddSourcemapSupport, watch } = await compile(
workPath, workPath,
baseDir,
entrypointPath, entrypointPath,
entrypoint, entrypoint,
config config
@@ -383,7 +383,7 @@ export async function build({
const launcherFiles: Files = { const launcherFiles: Files = {
[`${LAUNCHER_FILENAME}.js`]: new FileBlob({ [`${LAUNCHER_FILENAME}.js`]: new FileBlob({
data: makeLauncher({ data: makeLauncher({
entrypointPath: `./${entrypoint}`, entrypointPath: `./${relative(baseDir, entrypointPath)}`,
bridgePath: `./${BRIDGE_FILENAME}`, bridgePath: `./${BRIDGE_FILENAME}`,
helpersPath: `./${HELPERS_FILENAME}`, helpersPath: `./${HELPERS_FILENAME}`,
sourcemapSupportPath: `./${SOURCEMAP_SUPPORT_FILENAME}`, sourcemapSupportPath: `./${SOURCEMAP_SUPPORT_FILENAME}`,

View File

@@ -3,6 +3,7 @@
"strict": true, "strict": true,
"esModuleInterop": true, "esModuleInterop": true,
"sourceMap": true, "sourceMap": true,
"jsx": "react",
"lib": ["esnext"], "lib": ["esnext"],
"target": "esnext", "target": "esnext",
"module": "commonjs" "module": "commonjs"

View File

@@ -14,7 +14,15 @@ commit="$(git log --format="%H" -n 1)"
tags="$(git show-ref --tags -d | grep ^"$commit" | sed -e 's,.* refs/tags/,,' -e 's/\^{}//')" tags="$(git show-ref --tags -d | grep ^"$commit" | sed -e 's,.* refs/tags/,,' -e 's/\^{}//')"
for tag in $tags; do for tag in $tags; do
package_dir="$(node "${__dirname}/update-legacy-name.js" "$tag")" str="$(node "${__dirname}/update-legacy-name.js" "$tag")"
IFS='|' # set delimiter
read -ra ADDR <<< "$str" # str is read into an array as tokens separated by IFS
package_dir="${ADDR[0]}"
vc_name="${ADDR[1]}"
now_name="${ADDR[2]}"
version="${ADDR[3]}"
IFS=' ' # reset to default after usage
cd "${__dirname}/../packages/${package_dir}" cd "${__dirname}/../packages/${package_dir}"
@@ -25,4 +33,7 @@ for tag in $tags; do
echo "Running \`npm publish $npm_tag\` in \"$(pwd)\"" echo "Running \`npm publish $npm_tag\` in \"$(pwd)\""
npm publish $npm_tag npm publish $npm_tag
sleep 5 # Wait after publish before deprecate to avoid E405. https://github.com/vercel/vercel/runs/1076007594#step:6:649
echo "Running \`npm deprecate -f $now_name@$version\` in favor of $vc_name"
npm deprecate -f "$now_name@$version" "\"$now_name\" is deprecated and will stop receiving updates on December 31, 2020. Please use \"$vc_name\" instead."
done done

View File

@@ -29,7 +29,8 @@ if (!packageDir) {
const pkgJsonPath = join(packagesDir, packageDir, 'package.json'); const pkgJsonPath = join(packagesDir, packageDir, 'package.json');
const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf8')); const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf8'));
const originalName = pkg.name; const vcName = pkg.name;
const version = pkg.version;
if (pkg.name === '@vercel/client') { if (pkg.name === '@vercel/client') {
// The legacy name for `@vercel/client` is `now-client` (global scope) // The legacy name for `@vercel/client` is `now-client` (global scope)
@@ -42,10 +43,12 @@ if (pkg.name === '@vercel/client') {
} }
} }
console.error(`Updated package name: "${originalName}" -> "${pkg.name}"`); const nowName = pkg.name;
console.error(`Updated package name: "${vcName}" -> "${nowName}"`);
fs.writeFileSync(pkgJsonPath, `${JSON.stringify(pkg, null, 2)}\n`); fs.writeFileSync(pkgJsonPath, `${JSON.stringify(pkg, null, 2)}\n`);
// Log the directory name to stdout for the `publish-legacy.sh` // Log the directory name to stdout for the `publish-legacy.sh`
// script to consume for the `npm publish` that happens next. // script to consume for the `npm publish` that happens next.
console.log(packageDir); const IFS = '|';
console.log([packageDir, vcName, nowName, version].join(IFS));

108
yarn.lock
View File

@@ -2221,6 +2221,28 @@
resolved "https://registry.yarnpkg.com/@vercel/ncc/-/ncc-0.24.0.tgz#a2e8783a185caa99b5d8961a57dfc9665de16296" resolved "https://registry.yarnpkg.com/@vercel/ncc/-/ncc-0.24.0.tgz#a2e8783a185caa99b5d8961a57dfc9665de16296"
integrity sha512-crqItMcIwCkvdXY/V3/TzrHJQx6nbIaRqE1cOopJhgGX6izvNov40SmD//nS5flfEvdK54YGjwVVq+zG6crjOg== integrity sha512-crqItMcIwCkvdXY/V3/TzrHJQx6nbIaRqE1cOopJhgGX6izvNov40SmD//nS5flfEvdK54YGjwVVq+zG6crjOg==
"@vercel/nft@0.9.2":
version "0.9.2"
resolved "https://registry.yarnpkg.com/@vercel/nft/-/nft-0.9.2.tgz#677ecefb0bd618143281c62c719baca57a36ac4d"
integrity sha512-Dr2yJlCnfkQEt4QHKcPJKTxCyoBX0YCzHDzozd8upBFm8kKbh2yMSu5wp+1btevQXOMkOUtxntovwwPHDIU51w==
dependencies:
acorn "^7.1.1"
acorn-class-fields "^0.3.2"
acorn-export-ns-from "^0.1.0"
acorn-import-meta "^1.1.0"
acorn-numeric-separator "^0.3.0"
acorn-static-class-features "^0.2.1"
bindings "^1.4.0"
estree-walker "^0.6.1"
glob "^7.1.3"
graceful-fs "^4.1.15"
micromatch "^4.0.2"
mkdirp "^0.5.1"
node-gyp-build "^4.2.2"
node-pre-gyp "^0.13.0"
resolve-from "^5.0.0"
rollup-pluginutils "^2.8.2"
"@zeit/dns-cached-resolve@2.1.0": "@zeit/dns-cached-resolve@2.1.0":
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/@zeit/dns-cached-resolve/-/dns-cached-resolve-2.1.0.tgz#78583010df1683fdb7b05949b75593c9a8641bc1" resolved "https://registry.yarnpkg.com/@zeit/dns-cached-resolve/-/dns-cached-resolve-2.1.0.tgz#78583010df1683fdb7b05949b75593c9a8641bc1"
@@ -2282,28 +2304,6 @@
xdg-app-paths "5.1.0" xdg-app-paths "5.1.0"
yauzl-promise "2.1.3" yauzl-promise "2.1.3"
"@zeit/node-file-trace@0.8.2":
version "0.8.2"
resolved "https://registry.yarnpkg.com/@zeit/node-file-trace/-/node-file-trace-0.8.2.tgz#a00d21a98015c4ea18c8b1104ad60ea91b42dcca"
integrity sha512-M6KR95Xz9af8kB8X7e4inhoIjVoKNT6WxjLQwPByAAdCP6JdCg3Fb0dbTh2WelKlAibUpfS9nANU/HUDcfedSA==
dependencies:
acorn "^7.1.1"
acorn-class-fields "^0.3.2"
acorn-export-ns-from "^0.1.0"
acorn-import-meta "^1.1.0"
acorn-numeric-separator "^0.3.0"
acorn-static-class-features "^0.2.1"
bindings "^1.4.0"
estree-walker "^0.6.1"
glob "^7.1.3"
graceful-fs "^4.1.15"
micromatch "^4.0.2"
mkdirp "^0.5.1"
node-gyp-build "^4.2.2"
node-pre-gyp "^0.13.0"
resolve-from "^5.0.0"
rollup-pluginutils "^2.8.2"
"@zeit/source-map-support@0.6.2": "@zeit/source-map-support@0.6.2":
version "0.6.2" version "0.6.2"
resolved "https://registry.yarnpkg.com/@zeit/source-map-support/-/source-map-support-0.6.2.tgz#0efd478f24a606726948165e53a8efe89e24036f" resolved "https://registry.yarnpkg.com/@zeit/source-map-support/-/source-map-support-0.6.2.tgz#0efd478f24a606726948165e53a8efe89e24036f"
@@ -2339,11 +2339,11 @@ abbrev@1:
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
acorn-class-fields@^0.3.2: acorn-class-fields@^0.3.2:
version "0.3.4" version "0.3.7"
resolved "https://registry.yarnpkg.com/acorn-class-fields/-/acorn-class-fields-0.3.4.tgz#4144289bdf9d8b2bb9d274b794dd72d7f8e4a815" resolved "https://registry.yarnpkg.com/acorn-class-fields/-/acorn-class-fields-0.3.7.tgz#a35122f3cc6ad2bb33b1857e79215677fcfdd720"
integrity sha512-yqUCIu0UJHFmCVhH3Cq29UR+3OJo1CtNWf1ncxTf3KfdEDt7aD0iVYmX7UN+RvIHyOsgukzplQhNkgePtASLUw== integrity sha512-jdUWSFce0fuADUljmExz4TWpPkxmRW/ZCPRqeeUzbGf0vFUcpQYbyq52l75qGd0oSwwtAepeL6hgb/naRgvcKQ==
dependencies: dependencies:
acorn-private-class-elements "^0.2.5" acorn-private-class-elements "^0.2.7"
acorn-export-ns-from@^0.1.0: acorn-export-ns-from@^0.1.0:
version "0.1.0" version "0.1.0"
@@ -2369,21 +2369,21 @@ acorn-jsx@^5.2.0:
integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==
acorn-numeric-separator@^0.3.0: acorn-numeric-separator@^0.3.0:
version "0.3.2" version "0.3.6"
resolved "https://registry.yarnpkg.com/acorn-numeric-separator/-/acorn-numeric-separator-0.3.2.tgz#5f849ae00d11e0bf1f8092e0eca7e0917436ae9f" resolved "https://registry.yarnpkg.com/acorn-numeric-separator/-/acorn-numeric-separator-0.3.6.tgz#af7f0abaf8e74bd9ca1117602954d0a3b75804f3"
integrity sha512-ZNN1qnKvjWycDSQBfuD1TCiB81ItjjeGUPLHuqfP8X8HXwAodGTWsAaqSOQ1Nc9t+Wlb3tcEFdBrwUFUIzDiiA== integrity sha512-jUr5esgChu4k7VzesH/Nww3EysuyGJJcTEEiXqILUFKpO96PNyEXmK21M6nE0TSqGA1PeEg1MzgqJaoFsn9JMw==
acorn-private-class-elements@^0.2.3, acorn-private-class-elements@^0.2.5: acorn-private-class-elements@^0.2.7:
version "0.2.5" version "0.2.7"
resolved "https://registry.yarnpkg.com/acorn-private-class-elements/-/acorn-private-class-elements-0.2.5.tgz#5082582395d2dabbbb1ddf6397244fdaa61cded6" resolved "https://registry.yarnpkg.com/acorn-private-class-elements/-/acorn-private-class-elements-0.2.7.tgz#b14902c705bcff267adede1c9f61c1a317ef95d2"
integrity sha512-3eApRrJmPjaxWB3XidP8YMeVq9pcswPFE0KsSWVuhceCU68ZS8fkcf0fTXGhCmnNd7n48NWWV27EKMFPeCoJLg== integrity sha512-+GZH2wOKNZOBI4OOPmzpo4cs6mW297sn6fgIk1dUI08jGjhAaEwvC39mN2gJAg2lmAQJ1rBkFqKWonL3Zz6PVA==
acorn-static-class-features@^0.2.1: acorn-static-class-features@^0.2.1:
version "0.2.2" version "0.2.4"
resolved "https://registry.yarnpkg.com/acorn-static-class-features/-/acorn-static-class-features-0.2.2.tgz#3f8e5b97e5b969d544cf4b2fe51c0d4c396d7a5b" resolved "https://registry.yarnpkg.com/acorn-static-class-features/-/acorn-static-class-features-0.2.4.tgz#a0f5261dd483f25196716854f2d7652a1deb39ee"
integrity sha512-B7aWeS7MXqdgP3RnettN/CFz7HevAlQWfh5zkc3LJzeCQoF1InTzYBCfkkbmit1p0pmCEB8IG05gB62pOm5lvA== integrity sha512-5X4mpYq5J3pdndLmIB0+WtFd/mKWnNYpuTlTzj32wUu/PMmEGOiayQ5UrqgwdBNiaZBtDDh5kddpP7Yg2QaQYA==
dependencies: dependencies:
acorn-private-class-elements "^0.2.3" acorn-private-class-elements "^0.2.7"
acorn-walk@^6.0.1: acorn-walk@^6.0.1:
version "6.2.0" version "6.2.0"
@@ -4992,11 +4992,16 @@ etag@1.8.1:
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
eventemitter3@^3.0.0, eventemitter3@^3.1.0: eventemitter3@^3.1.0:
version "3.1.2" version "3.1.2"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
eventemitter3@^4.0.0:
version "4.0.7"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
events-intercept@^2.0.0: events-intercept@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/events-intercept/-/events-intercept-2.0.0.tgz#adbf38681c5a4b2011c41ee41f61a34cba448897" resolved "https://registry.yarnpkg.com/events-intercept/-/events-intercept-2.0.0.tgz#adbf38681c5a4b2011c41ee41f61a34cba448897"
@@ -6046,12 +6051,12 @@ http-proxy-agent@^4.0.0:
agent-base "6" agent-base "6"
debug "4" debug "4"
http-proxy@1.17.0: http-proxy@1.18.1:
version "1.17.0" version "1.18.1"
resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
dependencies: dependencies:
eventemitter3 "^3.0.0" eventemitter3 "^4.0.0"
follow-redirects "^1.0.0" follow-redirects "^1.0.0"
requires-port "^1.0.0" requires-port "^1.0.0"
@@ -8280,9 +8285,9 @@ natural-compare@^1.4.0:
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
needle@^2.2.1: needle@^2.2.1:
version "2.5.0" version "2.5.2"
resolved "https://registry.yarnpkg.com/needle/-/needle-2.5.0.tgz#e6fc4b3cc6c25caed7554bd613a5cf0bac8c31c0" resolved "https://registry.yarnpkg.com/needle/-/needle-2.5.2.tgz#cf1a8fce382b5a280108bba90a14993c00e4010a"
integrity sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA== integrity sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==
dependencies: dependencies:
debug "^3.2.6" debug "^3.2.6"
iconv-lite "^0.4.4" iconv-lite "^0.4.4"
@@ -8334,9 +8339,9 @@ node-fetch@2.6.0, node-fetch@^2.2.0, node-fetch@^2.2.1, node-fetch@^2.3.0, node-
integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
node-gyp-build@^4.2.2: node-gyp-build@^4.2.2:
version "4.2.2" version "4.2.3"
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.2.tgz#3f44b65adaafd42fb6c3d81afd630e45c847eb66" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739"
integrity sha512-Lqh7mrByWCM8Cf9UPqpeoVBBo5Ugx+RKu885GAzmLBVYjeywScxHXPGLa4JfYNZmcNGwzR0Glu5/9GaQZMFqyA== integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==
node-gyp@^5.0.2: node-gyp@^5.0.2:
version "5.1.1" version "5.1.1"
@@ -11087,6 +11092,11 @@ tree-kill@1.2.1:
resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a"
integrity sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q== integrity sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==
tree-kill@1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
trim-newlines@^1.0.0: trim-newlines@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"