mirror of
https://github.com/LukeHagar/vercel.git
synced 2025-12-23 09:59:12 +00:00
Compare commits
5 Commits
@vercel/fr
...
@vercel/ro
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
be2ae2c539 | ||
|
|
4969a65209 | ||
|
|
7275878b2b | ||
|
|
53d429e3f5 | ||
|
|
3f1384bd1a |
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@vercel/build-utils",
|
"name": "@vercel/build-utils",
|
||||||
"version": "2.10.1",
|
"version": "2.10.2-canary.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"main": "./dist/index.js",
|
"main": "./dist/index.js",
|
||||||
"types": "./dist/index.d.js",
|
"types": "./dist/index.d.js",
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
"@types/node-fetch": "^2.1.6",
|
"@types/node-fetch": "^2.1.6",
|
||||||
"@types/semver": "6.0.0",
|
"@types/semver": "6.0.0",
|
||||||
"@types/yazl": "^2.4.1",
|
"@types/yazl": "^2.4.1",
|
||||||
"@vercel/frameworks": "0.3.1",
|
"@vercel/frameworks": "0.3.2-canary.0",
|
||||||
"@vercel/ncc": "0.24.0",
|
"@vercel/ncc": "0.24.0",
|
||||||
"aggregate-error": "3.0.1",
|
"aggregate-error": "3.0.1",
|
||||||
"async-retry": "1.2.3",
|
"async-retry": "1.2.3",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "vercel",
|
"name": "vercel",
|
||||||
"version": "21.3.3",
|
"version": "21.3.4-canary.0",
|
||||||
"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,7 +61,7 @@
|
|||||||
"node": ">= 10"
|
"node": ">= 10"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vercel/build-utils": "2.10.1",
|
"@vercel/build-utils": "2.10.2-canary.0",
|
||||||
"@vercel/go": "1.2.2",
|
"@vercel/go": "1.2.2",
|
||||||
"@vercel/node": "1.9.1",
|
"@vercel/node": "1.9.1",
|
||||||
"@vercel/python": "2.0.1",
|
"@vercel/python": "2.0.1",
|
||||||
@@ -83,7 +83,6 @@
|
|||||||
"@types/glob": "7.1.1",
|
"@types/glob": "7.1.1",
|
||||||
"@types/http-proxy": "1.16.2",
|
"@types/http-proxy": "1.16.2",
|
||||||
"@types/load-json-file": "2.0.7",
|
"@types/load-json-file": "2.0.7",
|
||||||
"@types/micro": "7.3.3",
|
|
||||||
"@types/mime-types": "2.1.0",
|
"@types/mime-types": "2.1.0",
|
||||||
"@types/minimatch": "3.0.3",
|
"@types/minimatch": "3.0.3",
|
||||||
"@types/mri": "1.1.0",
|
"@types/mri": "1.1.0",
|
||||||
@@ -100,7 +99,7 @@
|
|||||||
"@types/universal-analytics": "0.4.2",
|
"@types/universal-analytics": "0.4.2",
|
||||||
"@types/which": "1.3.2",
|
"@types/which": "1.3.2",
|
||||||
"@types/write-json-file": "2.2.1",
|
"@types/write-json-file": "2.2.1",
|
||||||
"@vercel/frameworks": "0.3.1",
|
"@vercel/frameworks": "0.3.2-canary.0",
|
||||||
"@vercel/ncc": "0.24.0",
|
"@vercel/ncc": "0.24.0",
|
||||||
"@zeit/fun": "0.11.2",
|
"@zeit/fun": "0.11.2",
|
||||||
"@zeit/source-map-support": "0.6.2",
|
"@zeit/source-map-support": "0.6.2",
|
||||||
@@ -141,7 +140,6 @@
|
|||||||
"jaro-winkler": "0.2.8",
|
"jaro-winkler": "0.2.8",
|
||||||
"jsonlines": "0.1.1",
|
"jsonlines": "0.1.1",
|
||||||
"load-json-file": "3.0.0",
|
"load-json-file": "3.0.0",
|
||||||
"micro": "9.1.2",
|
|
||||||
"mime-types": "2.1.24",
|
"mime-types": "2.1.24",
|
||||||
"minimatch": "3.0.4",
|
"minimatch": "3.0.4",
|
||||||
"mri": "1.1.5",
|
"mri": "1.1.5",
|
||||||
|
|||||||
@@ -1,29 +1,37 @@
|
|||||||
import { stringify as stringifyQuery } from 'querystring';
|
import { stringify as stringifyQuery } from 'querystring';
|
||||||
import fetch from 'node-fetch';
|
import fetch from 'node-fetch';
|
||||||
import debugFactory from 'debug';
|
import createDebug from 'debug';
|
||||||
|
// @ts-ignore
|
||||||
import promptEmail from 'email-prompt';
|
import promptEmail from 'email-prompt';
|
||||||
import ms from 'ms';
|
import ms from 'ms';
|
||||||
import { validate as validateEmail } from 'email-validator';
|
import { validate as validateEmail } from 'email-validator';
|
||||||
import chalk from 'chalk';
|
import chalk from 'chalk';
|
||||||
import ua from '../util/ua.ts';
|
import ua from '../util/ua';
|
||||||
import getArgs from '../util/get-args';
|
import getArgs from '../util/get-args';
|
||||||
import error from '../util/output/error';
|
import error from '../util/output/error';
|
||||||
import highlight from '../util/output/highlight';
|
import highlight from '../util/output/highlight';
|
||||||
import ok from '../util/output/ok';
|
import ok from '../util/output/ok';
|
||||||
import param from '../util/output/param.ts';
|
import param from '../util/output/param';
|
||||||
import eraseLines from '../util/output/erase-lines';
|
import eraseLines from '../util/output/erase-lines';
|
||||||
import sleep from '../util/sleep';
|
import sleep from '../util/sleep';
|
||||||
import { handleError } from '../util/error';
|
import handleError from '../util/handle-error';
|
||||||
import { writeToAuthConfigFile, writeToConfigFile } from '../util/config/files';
|
import { writeToAuthConfigFile, writeToConfigFile } from '../util/config/files';
|
||||||
import getGlobalPathConfig from '../util/config/global-path';
|
import getGlobalPathConfig from '../util/config/global-path';
|
||||||
import hp from '../util/humanize-path';
|
import hp from '../util/humanize-path';
|
||||||
import logo from '../util/output/logo';
|
import logo from '../util/output/logo';
|
||||||
import exit from '../util/exit';
|
import exit from '../util/exit';
|
||||||
import executeLogin from '../util/login/login.ts';
|
import executeLogin from '../util/login/login';
|
||||||
import { prependEmoji, emoji } from '../util/emoji';
|
import { prependEmoji, emoji } from '../util/emoji';
|
||||||
import { getCommandName, getPkgName } from '../util/pkg-name.ts';
|
import { getCommandName, getPkgName } from '../util/pkg-name';
|
||||||
|
import { NowContext } from '../types';
|
||||||
|
|
||||||
const debug = debugFactory(`${getPkgName()}:login`);
|
interface VerifyParams {
|
||||||
|
apiUrl: string;
|
||||||
|
email: string;
|
||||||
|
verificationToken: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const debug = createDebug(`${getPkgName()}:login`);
|
||||||
|
|
||||||
const help = () => {
|
const help = () => {
|
||||||
console.log(`
|
console.log(`
|
||||||
@@ -51,7 +59,7 @@ const help = () => {
|
|||||||
`);
|
`);
|
||||||
};
|
};
|
||||||
|
|
||||||
const verify = async ({ apiUrl, email, verificationToken }) => {
|
const verify = async ({ apiUrl, email, verificationToken }: VerifyParams) => {
|
||||||
const query = {
|
const query = {
|
||||||
email,
|
email,
|
||||||
token: verificationToken,
|
token: verificationToken,
|
||||||
@@ -125,7 +133,7 @@ const readEmail = async () => {
|
|||||||
return email;
|
return email;
|
||||||
};
|
};
|
||||||
|
|
||||||
const login = async ctx => {
|
const login = async (ctx: NowContext) => {
|
||||||
let argv;
|
let argv;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -197,10 +205,8 @@ const login = async ctx => {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
output.stopSpinner();
|
|
||||||
|
|
||||||
// Clear up `Sending email` success message
|
// Clear up `Sending email` success message
|
||||||
process.stdout.write(eraseLines(possibleAddress ? 1 : 2));
|
output.print(eraseLines(possibleAddress ? 1 : 2));
|
||||||
|
|
||||||
output.print(
|
output.print(
|
||||||
`We sent an email to ${highlight(
|
`We sent an email to ${highlight(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
export default code =>
|
export default (code?: number) =>
|
||||||
new Promise(() => {
|
new Promise(() => {
|
||||||
// We give stdout some time to flush out
|
// We give stdout some time to flush out
|
||||||
// because there's a node bug where
|
// because there's a node bug where
|
||||||
@@ -13,11 +13,11 @@ interface Spec {
|
|||||||
|
|
||||||
export default function getArgs<T extends Spec>(
|
export default function getArgs<T extends Spec>(
|
||||||
argv: string[],
|
argv: string[],
|
||||||
argsOptions: T,
|
argsOptions?: T,
|
||||||
argOptions: ArgOptions = {}
|
argOptions: ArgOptions = {}
|
||||||
) {
|
) {
|
||||||
return arg(Object.assign({}, getCommonArgs(), argsOptions), {
|
return arg(Object.assign({}, getCommonArgs(), argsOptions), {
|
||||||
...argOptions,
|
...argOptions,
|
||||||
argv
|
argv,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,11 +13,9 @@ export default async function login(
|
|||||||
apiUrl: string,
|
apiUrl: string,
|
||||||
email: string,
|
email: string,
|
||||||
mode: 'login' | 'signup' = 'login'
|
mode: 'login' | 'signup' = 'login'
|
||||||
): Promise<LoginData | InvalidEmail | AccountNotFound> {
|
): Promise<LoginData> {
|
||||||
const hyphens = new RegExp('-', 'g');
|
const hyphens = new RegExp('-', 'g');
|
||||||
const host = hostname()
|
const host = hostname().replace(hyphens, ' ').replace('.local', '');
|
||||||
.replace(hyphens, ' ')
|
|
||||||
.replace('.local', '');
|
|
||||||
const tokenName = `${getTitleName()} CLI on ${host}`;
|
const tokenName = `${getTitleName()} CLI on ${host}`;
|
||||||
|
|
||||||
const response = await fetch(`${apiUrl}/now/registration?mode=${mode}`, {
|
const response = await fetch(`${apiUrl}/now/registration?mode=${mode}`, {
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
import { cyan } from 'chalk';
|
|
||||||
import chars from './chars';
|
|
||||||
|
|
||||||
const ok = msg => `${cyan(chars.tick)} ${msg}`;
|
|
||||||
|
|
||||||
export default ok;
|
|
||||||
6
packages/cli/src/util/output/ok.ts
Normal file
6
packages/cli/src/util/output/ok.ts
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import chalk from 'chalk';
|
||||||
|
import chars from './chars';
|
||||||
|
|
||||||
|
const ok = (msg: string) => `${chalk.cyan(chars.tick)} ${msg}`;
|
||||||
|
|
||||||
|
export default ok;
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
// Packages
|
// Packages
|
||||||
|
const http = require('http');
|
||||||
const listen = require('test-listen');
|
const listen = require('test-listen');
|
||||||
const micro = require('micro');
|
|
||||||
|
|
||||||
module.exports = fn => {
|
module.exports = fn => {
|
||||||
const srv = micro(fn);
|
const srv = http.createServer(fn);
|
||||||
return listen(srv);
|
return listen(srv);
|
||||||
};
|
};
|
||||||
|
|||||||
33
packages/cli/test/unit.js
vendored
33
packages/cli/test/unit.js
vendored
@@ -1,5 +1,4 @@
|
|||||||
import { basename, join, sep } from 'path';
|
import { basename, join, sep } from 'path';
|
||||||
import { send } from 'micro';
|
|
||||||
import test from 'ava';
|
import test from 'ava';
|
||||||
import sinon from 'sinon';
|
import sinon from 'sinon';
|
||||||
import { asc as alpha } from 'alpha-sort';
|
import { asc as alpha } from 'alpha-sort';
|
||||||
@@ -22,6 +21,12 @@ const prefix = `${join(__dirname, 'fixtures', 'unit')}${sep}`;
|
|||||||
const base = path => path.replace(prefix, '');
|
const base = path => path.replace(prefix, '');
|
||||||
const fixture = name => join(prefix, name);
|
const fixture = name => join(prefix, name);
|
||||||
|
|
||||||
|
const send = (res, statusCode, body) => {
|
||||||
|
res.statusCode = statusCode;
|
||||||
|
res.setHeader('Content-Type', 'application/json; charset=utf8');
|
||||||
|
res.end(JSON.stringify(body));
|
||||||
|
};
|
||||||
|
|
||||||
const getStaticFiles = async dir => {
|
const getStaticFiles = async dir => {
|
||||||
const files = await getStaticFiles_(dir, {
|
const files = await getStaticFiles_(dir, {
|
||||||
output,
|
output,
|
||||||
@@ -163,7 +168,7 @@ test('`wait` utility does not invoke spinner when stopped before delay', async t
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('4xx response error with fallback message', async t => {
|
test('4xx response error with fallback message', async t => {
|
||||||
const fn = async (req, res) => {
|
const fn = (req, res) => {
|
||||||
send(res, 404, {});
|
send(res, 404, {});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -175,7 +180,7 @@ test('4xx response error with fallback message', async t => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('4xx response error without fallback message', async t => {
|
test('4xx response error without fallback message', async t => {
|
||||||
const fn = async (req, res) => {
|
const fn = (req, res) => {
|
||||||
send(res, 404, {});
|
send(res, 404, {});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -187,7 +192,7 @@ test('4xx response error without fallback message', async t => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('5xx response error without fallback message', async t => {
|
test('5xx response error without fallback message', async t => {
|
||||||
const fn = async (req, res) => {
|
const fn = (req, res) => {
|
||||||
send(res, 500, '');
|
send(res, 500, '');
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -199,7 +204,7 @@ test('5xx response error without fallback message', async t => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('4xx response error as correct JSON', async t => {
|
test('4xx response error as correct JSON', async t => {
|
||||||
const fn = async (req, res) => {
|
const fn = (req, res) => {
|
||||||
send(res, 400, {
|
send(res, 400, {
|
||||||
error: {
|
error: {
|
||||||
message: 'The request is not correct',
|
message: 'The request is not correct',
|
||||||
@@ -215,7 +220,7 @@ test('4xx response error as correct JSON', async t => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('5xx response error as HTML', async t => {
|
test('5xx response error as HTML', async t => {
|
||||||
const fn = async (req, res) => {
|
const fn = (req, res) => {
|
||||||
send(res, 500, 'This is a malformed error');
|
send(res, 500, 'This is a malformed error');
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -227,7 +232,7 @@ test('5xx response error as HTML', async t => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('5xx response error with random JSON', async t => {
|
test('5xx response error with random JSON', async t => {
|
||||||
const fn = async (req, res) => {
|
const fn = (req, res) => {
|
||||||
send(res, 500, {
|
send(res, 500, {
|
||||||
wrong: 'property',
|
wrong: 'property',
|
||||||
});
|
});
|
||||||
@@ -294,7 +299,7 @@ test('getProjectName with a directory', t => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('4xx error message with broken JSON', async t => {
|
test('4xx error message with broken JSON', async t => {
|
||||||
const fn = async (req, res) => {
|
const fn = (req, res) => {
|
||||||
send(res, 403, `32puuuh2332`);
|
send(res, 403, `32puuuh2332`);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -306,7 +311,7 @@ test('4xx error message with broken JSON', async t => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('4xx error message with proper message', async t => {
|
test('4xx error message with proper message', async t => {
|
||||||
const fn = async (req, res) => {
|
const fn = (req, res) => {
|
||||||
send(res, 403, {
|
send(res, 403, {
|
||||||
error: {
|
error: {
|
||||||
message: 'This is a test',
|
message: 'This is a test',
|
||||||
@@ -322,7 +327,7 @@ test('4xx error message with proper message', async t => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('5xx error message with proper message', async t => {
|
test('5xx error message with proper message', async t => {
|
||||||
const fn = async (req, res) => {
|
const fn = (req, res) => {
|
||||||
send(res, 500, {
|
send(res, 500, {
|
||||||
error: {
|
error: {
|
||||||
message: 'This is a test',
|
message: 'This is a test',
|
||||||
@@ -338,7 +343,7 @@ test('5xx error message with proper message', async t => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('4xx response error with broken JSON', async t => {
|
test('4xx response error with broken JSON', async t => {
|
||||||
const fn = async (req, res) => {
|
const fn = (req, res) => {
|
||||||
send(res, 403, `122{"sss"`);
|
send(res, 403, `122{"sss"`);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -350,7 +355,7 @@ test('4xx response error with broken JSON', async t => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('4xx response error as correct JSON with more properties', async t => {
|
test('4xx response error as correct JSON with more properties', async t => {
|
||||||
const fn = async (req, res) => {
|
const fn = (req, res) => {
|
||||||
send(res, 403, {
|
send(res, 403, {
|
||||||
error: {
|
error: {
|
||||||
message: 'The request is not correct',
|
message: 'The request is not correct',
|
||||||
@@ -368,7 +373,7 @@ test('4xx response error as correct JSON with more properties', async t => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('429 response error with retry header', async t => {
|
test('429 response error with retry header', async t => {
|
||||||
const fn = async (req, res) => {
|
const fn = (req, res) => {
|
||||||
res.setHeader('Retry-After', '20');
|
res.setHeader('Retry-After', '20');
|
||||||
|
|
||||||
send(res, 429, {
|
send(res, 429, {
|
||||||
@@ -387,7 +392,7 @@ test('429 response error with retry header', async t => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('429 response error without retry header', async t => {
|
test('429 response error without retry header', async t => {
|
||||||
const fn = async (req, res) => {
|
const fn = (req, res) => {
|
||||||
send(res, 429, {
|
send(res, 429, {
|
||||||
error: {
|
error: {
|
||||||
message: 'You were rate limited',
|
message: 'You were rate limited',
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@vercel/client",
|
"name": "@vercel/client",
|
||||||
"version": "9.0.8",
|
"version": "9.0.9-canary.0",
|
||||||
"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.10.1",
|
"@vercel/build-utils": "2.10.2-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",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@vercel/frameworks",
|
"name": "@vercel/frameworks",
|
||||||
"version": "0.3.1",
|
"version": "0.3.2-canary.0",
|
||||||
"main": "./dist/frameworks.js",
|
"main": "./dist/frameworks.js",
|
||||||
"types": "./dist/frameworks.d.ts",
|
"types": "./dist/frameworks.d.ts",
|
||||||
"files": [
|
"files": [
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
"@types/js-yaml": "3.12.1",
|
"@types/js-yaml": "3.12.1",
|
||||||
"@types/node": "12.0.4",
|
"@types/node": "12.0.4",
|
||||||
"@types/node-fetch": "2.5.8",
|
"@types/node-fetch": "2.5.8",
|
||||||
"@vercel/routing-utils": "1.10.1",
|
"@vercel/routing-utils": "1.10.2-canary.0",
|
||||||
"ajv": "6.12.2",
|
"ajv": "6.12.2",
|
||||||
"jest": "24.9.0",
|
"jest": "24.9.0",
|
||||||
"ts-jest": "24.1.0",
|
"ts-jest": "24.1.0",
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Blitz.js',
|
name: 'Blitz.js',
|
||||||
slug: 'blitzjs',
|
slug: 'blitzjs',
|
||||||
demo: 'https://blitzjs.now-examples.now.sh',
|
demo: 'https://blitzjs.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/blitz.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/blitz.svg',
|
||||||
tagline: 'Blitz.js: The Fullstack React Framework',
|
tagline: 'Blitz.js: The Fullstack React Framework',
|
||||||
@@ -60,7 +60,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Next.js',
|
name: 'Next.js',
|
||||||
slug: 'nextjs',
|
slug: 'nextjs',
|
||||||
demo: 'https://nextjs.now-examples.now.sh',
|
demo: 'https://nextjs.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/next.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/next.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -105,7 +105,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Gatsby.js',
|
name: 'Gatsby.js',
|
||||||
slug: 'gatsby',
|
slug: 'gatsby',
|
||||||
demo: 'https://gatsby.now-examples.now.sh',
|
demo: 'https://gatsby.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/gatsby.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/gatsby.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -193,7 +193,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Hexo',
|
name: 'Hexo',
|
||||||
slug: 'hexo',
|
slug: 'hexo',
|
||||||
demo: 'https://hexo.now-examples.now.sh',
|
demo: 'https://hexo.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/hexo.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/hexo.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -232,7 +232,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Eleventy',
|
name: 'Eleventy',
|
||||||
slug: 'eleventy',
|
slug: 'eleventy',
|
||||||
demo: 'https://eleventy.now-examples.now.sh',
|
demo: 'https://eleventy.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/eleventy.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/eleventy.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -272,7 +272,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Docusaurus 2',
|
name: 'Docusaurus 2',
|
||||||
slug: 'docusaurus-2',
|
slug: 'docusaurus-2',
|
||||||
demo: 'https://docusaurus-2.now-examples.now.sh',
|
demo: 'https://docusaurus-2.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/docusaurus.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/docusaurus.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -364,7 +364,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Docusaurus 1',
|
name: 'Docusaurus 1',
|
||||||
slug: 'docusaurus',
|
slug: 'docusaurus',
|
||||||
demo: 'https://docusaurus.now-examples.now.sh',
|
demo: 'https://docusaurus.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/docusaurus.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/docusaurus.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -417,7 +417,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Preact',
|
name: 'Preact',
|
||||||
slug: 'preact',
|
slug: 'preact',
|
||||||
demo: 'https://preact.now-examples.now.sh',
|
demo: 'https://preact.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/preact.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/preact.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -464,7 +464,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Dojo',
|
name: 'Dojo',
|
||||||
slug: 'dojo',
|
slug: 'dojo',
|
||||||
demo: 'https://dojo.now-examples.now.sh',
|
demo: 'https://dojo.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/dojo.png',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/dojo.png',
|
||||||
tagline: 'Dojo is a modern progressive, TypeScript first framework.',
|
tagline: 'Dojo is a modern progressive, TypeScript first framework.',
|
||||||
@@ -519,7 +519,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Ember.js',
|
name: 'Ember.js',
|
||||||
slug: 'ember',
|
slug: 'ember',
|
||||||
demo: 'https://ember.now-examples.now.sh',
|
demo: 'https://ember.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/ember.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/ember.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -566,7 +566,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Vue.js',
|
name: 'Vue.js',
|
||||||
slug: 'vue',
|
slug: 'vue',
|
||||||
demo: 'https://vue.now-examples.now.sh',
|
demo: 'https://vue.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/vue.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/vue.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -623,7 +623,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Scully',
|
name: 'Scully',
|
||||||
slug: 'scully',
|
slug: 'scully',
|
||||||
demo: 'https://scully.now-examples.now.sh',
|
demo: 'https://scully.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/scullyio-logo.png',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/scullyio-logo.png',
|
||||||
tagline: 'Scully is a static site generator for Angular.',
|
tagline: 'Scully is a static site generator for Angular.',
|
||||||
@@ -660,7 +660,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Ionic Angular',
|
name: 'Ionic Angular',
|
||||||
slug: 'ionic-angular',
|
slug: 'ionic-angular',
|
||||||
demo: 'https://ionic-angular.now-examples.now.sh',
|
demo: 'https://ionic-angular.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/ionic.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/ionic.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -707,7 +707,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Angular',
|
name: 'Angular',
|
||||||
slug: 'angular',
|
slug: 'angular',
|
||||||
demo: 'https://angular.now-examples.now.sh',
|
demo: 'https://angular.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/angular.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/angular.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -768,7 +768,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Polymer',
|
name: 'Polymer',
|
||||||
slug: 'polymer',
|
slug: 'polymer',
|
||||||
demo: 'https://polymer.now-examples.now.sh',
|
demo: 'https://polymer.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/polymer.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/polymer.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -826,7 +826,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Svelte',
|
name: 'Svelte',
|
||||||
slug: 'svelte',
|
slug: 'svelte',
|
||||||
demo: 'https://svelte.now-examples.now.sh',
|
demo: 'https://svelte.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/svelte.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/svelte.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -874,7 +874,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Ionic React',
|
name: 'Ionic React',
|
||||||
slug: 'ionic-react',
|
slug: 'ionic-react',
|
||||||
demo: 'https://ionic-react.now-examples.now.sh',
|
demo: 'https://ionic-react.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/ionic.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/ionic.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -936,7 +936,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Create React App',
|
name: 'Create React App',
|
||||||
slug: 'create-react-app',
|
slug: 'create-react-app',
|
||||||
demo: 'https://react-functions.now-examples.now.sh',
|
demo: 'https://react-functions.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/react.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/react.svg',
|
||||||
tagline: 'Create React App allows you to get going with React in no time.',
|
tagline: 'Create React App allows you to get going with React in no time.',
|
||||||
@@ -1003,7 +1003,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Gridsome',
|
name: 'Gridsome',
|
||||||
slug: 'gridsome',
|
slug: 'gridsome',
|
||||||
demo: 'https://gridsome.now-examples.now.sh',
|
demo: 'https://gridsome.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/gridsome.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/gridsome.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -1041,7 +1041,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'UmiJS',
|
name: 'UmiJS',
|
||||||
slug: 'umijs',
|
slug: 'umijs',
|
||||||
demo: 'https://umijs.now-examples.now.sh',
|
demo: 'https://umijs.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/umi.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/umi.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -1088,7 +1088,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Sapper',
|
name: 'Sapper',
|
||||||
slug: 'sapper',
|
slug: 'sapper',
|
||||||
demo: 'https://sapper.now-examples.now.sh',
|
demo: 'https://sapper.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/svelte.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/svelte.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -1126,7 +1126,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Saber',
|
name: 'Saber',
|
||||||
slug: 'saber',
|
slug: 'saber',
|
||||||
demo: 'https://saber.now-examples.now.sh',
|
demo: 'https://saber.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/saber.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/saber.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -1178,7 +1178,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Stencil',
|
name: 'Stencil',
|
||||||
slug: 'stencil',
|
slug: 'stencil',
|
||||||
demo: 'https://stencil.now-examples.now.sh',
|
demo: 'https://stencil.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/stencil.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/stencil.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -1240,7 +1240,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Nuxt.js',
|
name: 'Nuxt.js',
|
||||||
slug: 'nuxtjs',
|
slug: 'nuxtjs',
|
||||||
demo: 'https://nuxtjs.now-examples.now.sh',
|
demo: 'https://nuxtjs.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/nuxt.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/nuxt.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -1298,7 +1298,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'RedwoodJS',
|
name: 'RedwoodJS',
|
||||||
slug: 'redwoodjs',
|
slug: 'redwoodjs',
|
||||||
demo: 'https://redwoodjs.now-examples.now.sh',
|
demo: 'https://redwoodjs.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/redwoodjs.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/redwoodjs.svg',
|
||||||
tagline: 'RedwoodJS is a full-stack framework for the Jamstack.',
|
tagline: 'RedwoodJS is a full-stack framework for the Jamstack.',
|
||||||
@@ -1336,7 +1336,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Hugo',
|
name: 'Hugo',
|
||||||
slug: 'hugo',
|
slug: 'hugo',
|
||||||
demo: 'https://hugo.now-examples.now.sh',
|
demo: 'https://hugo.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/hugo.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/hugo.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -1391,7 +1391,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Jekyll',
|
name: 'Jekyll',
|
||||||
slug: 'jekyll',
|
slug: 'jekyll',
|
||||||
demo: 'https://jekyll.now-examples.vercel.app',
|
demo: 'https://jekyll.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/jekyll.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/jekyll.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -1433,7 +1433,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Brunch',
|
name: 'Brunch',
|
||||||
slug: 'brunch',
|
slug: 'brunch',
|
||||||
demo: 'https://brunch.now-examples.now.sh',
|
demo: 'https://brunch.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/brunch.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/brunch.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -1468,7 +1468,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Middleman',
|
name: 'Middleman',
|
||||||
slug: 'middleman',
|
slug: 'middleman',
|
||||||
demo: 'https://middleman.now-examples.vercel.app',
|
demo: 'https://middleman.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/middleman.svg',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/middleman.svg',
|
||||||
tagline:
|
tagline:
|
||||||
@@ -1504,7 +1504,7 @@ export const frameworks = [
|
|||||||
{
|
{
|
||||||
name: 'Zola',
|
name: 'Zola',
|
||||||
slug: 'zola',
|
slug: 'zola',
|
||||||
demo: 'https://zola.now-examples.vercel.app',
|
demo: 'https://zola.examples.vercel.com',
|
||||||
logo:
|
logo:
|
||||||
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/zola.png',
|
'https://raw.githubusercontent.com/vercel/vercel/master/packages/frameworks/logos/zola.png',
|
||||||
tagline: 'Everything you need to make a static site engine in one binary.',
|
tagline: 'Everything you need to make a static site engine in one binary.',
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@vercel/routing-utils",
|
"name": "@vercel/routing-utils",
|
||||||
"version": "1.10.1",
|
"version": "1.10.2-canary.0",
|
||||||
"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",
|
||||||
|
|||||||
@@ -1,3 +1,27 @@
|
|||||||
|
const hasSchema = {
|
||||||
|
type: 'array',
|
||||||
|
maxItems: 16,
|
||||||
|
items: {
|
||||||
|
type: 'object',
|
||||||
|
additionalProperties: false,
|
||||||
|
required: ['type', 'key'],
|
||||||
|
properties: {
|
||||||
|
type: {
|
||||||
|
type: 'string',
|
||||||
|
enum: ['header', 'cookie', 'query'],
|
||||||
|
},
|
||||||
|
key: {
|
||||||
|
type: 'string',
|
||||||
|
maxLength: 4096,
|
||||||
|
},
|
||||||
|
value: {
|
||||||
|
type: 'string',
|
||||||
|
maxLength: 4096,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An ajv schema for the routes array
|
* An ajv schema for the routes array
|
||||||
*/
|
*/
|
||||||
@@ -91,6 +115,7 @@ export const routesSchema = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
has: hasSchema,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -125,6 +150,7 @@ export const rewritesSchema = {
|
|||||||
type: 'string',
|
type: 'string',
|
||||||
maxLength: 4096,
|
maxLength: 4096,
|
||||||
},
|
},
|
||||||
|
has: hasSchema,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -154,6 +180,7 @@ export const redirectsSchema = {
|
|||||||
minimum: 100,
|
minimum: 100,
|
||||||
maximum: 999,
|
maximum: 999,
|
||||||
},
|
},
|
||||||
|
has: hasSchema,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -189,6 +216,7 @@ export const headersSchema = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
has: hasSchema,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -65,6 +65,10 @@ export function convertRedirects(
|
|||||||
headers: { Location: loc },
|
headers: { Location: loc },
|
||||||
status,
|
status,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (r.has) {
|
||||||
|
route.has = r.has;
|
||||||
|
}
|
||||||
return route;
|
return route;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw new Error(`Failed to parse redirect: ${JSON.stringify(r)}`);
|
throw new Error(`Failed to parse redirect: ${JSON.stringify(r)}`);
|
||||||
@@ -78,6 +82,10 @@ export function convertRewrites(rewrites: Rewrite[]): Route[] {
|
|||||||
try {
|
try {
|
||||||
const dest = replaceSegments(segments, r.destination);
|
const dest = replaceSegments(segments, r.destination);
|
||||||
const route: Route = { src, dest, check: true };
|
const route: Route = { src, dest, check: true };
|
||||||
|
|
||||||
|
if (r.has) {
|
||||||
|
route.has = r.has;
|
||||||
|
}
|
||||||
return route;
|
return route;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw new Error(`Failed to parse rewrite: ${JSON.stringify(r)}`);
|
throw new Error(`Failed to parse rewrite: ${JSON.stringify(r)}`);
|
||||||
@@ -112,6 +120,10 @@ export function convertHeaders(headers: Header[]): Route[] {
|
|||||||
headers: obj,
|
headers: obj,
|
||||||
continue: true,
|
continue: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (h.has) {
|
||||||
|
route.has = h.has;
|
||||||
|
}
|
||||||
return route;
|
return route;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,12 @@ export type RouteApiError = {
|
|||||||
errors?: string[]; // array of all error messages
|
errors?: string[]; // array of all error messages
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type HasField = Array<{
|
||||||
|
type: 'header' | 'cookie' | 'query';
|
||||||
|
key: string;
|
||||||
|
value?: string;
|
||||||
|
}>;
|
||||||
|
|
||||||
export type Source = {
|
export type Source = {
|
||||||
src: string;
|
src: string;
|
||||||
dest?: string;
|
dest?: string;
|
||||||
@@ -18,6 +24,7 @@ export type Source = {
|
|||||||
check?: boolean;
|
check?: boolean;
|
||||||
important?: boolean;
|
important?: boolean;
|
||||||
status?: number;
|
status?: number;
|
||||||
|
has?: HasField;
|
||||||
locale?: {
|
locale?: {
|
||||||
redirect?: Record<string, string>;
|
redirect?: Record<string, string>;
|
||||||
cookie?: string;
|
cookie?: string;
|
||||||
@@ -67,6 +74,7 @@ export interface VercelConfig {
|
|||||||
export interface Rewrite {
|
export interface Rewrite {
|
||||||
source: string;
|
source: string;
|
||||||
destination: string;
|
destination: string;
|
||||||
|
has?: HasField;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Redirect {
|
export interface Redirect {
|
||||||
@@ -74,11 +82,13 @@ export interface Redirect {
|
|||||||
destination: string;
|
destination: string;
|
||||||
permanent?: boolean;
|
permanent?: boolean;
|
||||||
statusCode?: number;
|
statusCode?: number;
|
||||||
|
has?: HasField;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Header {
|
export interface Header {
|
||||||
source: string;
|
source: string;
|
||||||
headers: HeaderKeyValue[];
|
headers: HeaderKeyValue[];
|
||||||
|
has?: HasField;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface HeaderKeyValue {
|
export interface HeaderKeyValue {
|
||||||
|
|||||||
42
packages/routing-utils/test/index.spec.js
vendored
42
packages/routing-utils/test/index.spec.js
vendored
@@ -82,6 +82,15 @@ describe('normalizeRoutes', () => {
|
|||||||
dest: '/404',
|
dest: '/404',
|
||||||
status: 404,
|
status: 404,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: '^/hello$',
|
||||||
|
dest: '/another',
|
||||||
|
has: [
|
||||||
|
{ type: 'header', key: 'x-rewrite' },
|
||||||
|
{ type: 'cookie', key: 'loggedIn', value: 'yup' },
|
||||||
|
{ type: 'query', key: 'authorized', value: 'yup' },
|
||||||
|
],
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
assertValid(routes);
|
assertValid(routes);
|
||||||
@@ -942,11 +951,30 @@ describe('getTransformedRoutes', () => {
|
|||||||
rewrites: [
|
rewrites: [
|
||||||
{ source: '/page', destination: '/page.html' },
|
{ source: '/page', destination: '/page.html' },
|
||||||
{ source: '/home', destination: '/index.html' },
|
{ source: '/home', destination: '/index.html' },
|
||||||
|
{
|
||||||
|
source: '/home',
|
||||||
|
destination: '/another',
|
||||||
|
has: [
|
||||||
|
{ type: 'header', key: 'x-rewrite' },
|
||||||
|
{ type: 'cookie', key: 'loggedIn', value: 'yup' },
|
||||||
|
{ type: 'query', key: 'authorized', value: 'yup' },
|
||||||
|
],
|
||||||
|
},
|
||||||
],
|
],
|
||||||
redirects: [
|
redirects: [
|
||||||
{ source: '/version1', destination: '/api1.py' },
|
{ source: '/version1', destination: '/api1.py' },
|
||||||
{ source: '/version2', destination: '/api2.py', statusCode: 302 },
|
{ source: '/version2', destination: '/api2.py', statusCode: 302 },
|
||||||
{ source: '/version3', destination: '/api3.py', permanent: true },
|
{ source: '/version3', destination: '/api3.py', permanent: true },
|
||||||
|
{
|
||||||
|
source: '/version4',
|
||||||
|
destination: '/api4.py',
|
||||||
|
has: [
|
||||||
|
{ type: 'header', key: 'x-redirect' },
|
||||||
|
{ type: 'cookie', key: 'loggedIn', value: 'yup' },
|
||||||
|
{ type: 'query', key: 'authorized', value: 'yup' },
|
||||||
|
],
|
||||||
|
permanent: false,
|
||||||
|
},
|
||||||
],
|
],
|
||||||
headers: [
|
headers: [
|
||||||
{
|
{
|
||||||
@@ -971,6 +999,20 @@ describe('getTransformedRoutes', () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
source: '/add-header',
|
||||||
|
has: [
|
||||||
|
{ type: 'header', key: 'x-header' },
|
||||||
|
{ type: 'cookie', key: 'loggedIn', value: 'yup' },
|
||||||
|
{ type: 'query', key: 'authorized', value: 'yup' },
|
||||||
|
],
|
||||||
|
headers: [
|
||||||
|
{
|
||||||
|
key: 'Cache-Control',
|
||||||
|
value: 'max-age=forever',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
],
|
],
|
||||||
trailingSlashSchema: false,
|
trailingSlashSchema: false,
|
||||||
};
|
};
|
||||||
|
|||||||
109
packages/routing-utils/test/superstatic.spec.js
vendored
109
packages/routing-utils/test/superstatic.spec.js
vendored
@@ -198,6 +198,22 @@ test('convertRedirects', () => {
|
|||||||
source: '/hello/:world',
|
source: '/hello/:world',
|
||||||
destination: '/somewhere?else={:world}',
|
destination: '/somewhere?else={:world}',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
source: '/hello',
|
||||||
|
destination: '/another',
|
||||||
|
has: [
|
||||||
|
{
|
||||||
|
type: 'header',
|
||||||
|
key: 'x-rewrite',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'cookie',
|
||||||
|
key: 'loggedIn',
|
||||||
|
value: '1',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
permanent: false,
|
||||||
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const expected = [
|
const expected = [
|
||||||
@@ -288,6 +304,24 @@ test('convertRedirects', () => {
|
|||||||
src: '^\\/hello(?:\\/([^\\/]+?))$',
|
src: '^\\/hello(?:\\/([^\\/]+?))$',
|
||||||
status: 308,
|
status: 308,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
has: [
|
||||||
|
{
|
||||||
|
key: 'x-rewrite',
|
||||||
|
type: 'header',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'loggedIn',
|
||||||
|
type: 'cookie',
|
||||||
|
value: '1',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
headers: {
|
||||||
|
Location: '/another',
|
||||||
|
},
|
||||||
|
src: '^\\/hello$',
|
||||||
|
status: 307,
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
deepEqual(actual, expected);
|
deepEqual(actual, expected);
|
||||||
@@ -309,6 +343,7 @@ test('convertRedirects', () => {
|
|||||||
['/optional', '/optional/1'],
|
['/optional', '/optional/1'],
|
||||||
['/feature-first', '/feature-second'],
|
['/feature-first', '/feature-second'],
|
||||||
['/hello/world', '/hello/again'],
|
['/hello/world', '/hello/again'],
|
||||||
|
['/hello'],
|
||||||
];
|
];
|
||||||
|
|
||||||
const mustNotMatch = [
|
const mustNotMatch = [
|
||||||
@@ -328,6 +363,7 @@ test('convertRedirects', () => {
|
|||||||
['/optionalnope', '/optionally'],
|
['/optionalnope', '/optionally'],
|
||||||
['/feature/first', '/feature'],
|
['/feature/first', '/feature'],
|
||||||
['/hello', '/hello/another/one'],
|
['/hello', '/hello/another/one'],
|
||||||
|
['/helloooo'],
|
||||||
];
|
];
|
||||||
|
|
||||||
assertRegexMatches(actual, mustMatch, mustNotMatch);
|
assertRegexMatches(actual, mustMatch, mustNotMatch);
|
||||||
@@ -384,6 +420,21 @@ test('convertRewrites', () => {
|
|||||||
source: '/hello/:world',
|
source: '/hello/:world',
|
||||||
destination: '/somewhere?else={:world}',
|
destination: '/somewhere?else={:world}',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
source: '/hello',
|
||||||
|
destination: '/another',
|
||||||
|
has: [
|
||||||
|
{
|
||||||
|
type: 'header',
|
||||||
|
key: 'x-rewrite',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'cookie',
|
||||||
|
key: 'loggedIn',
|
||||||
|
value: '1',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const expected = [
|
const expected = [
|
||||||
@@ -470,6 +521,22 @@ test('convertRewrites', () => {
|
|||||||
src: '^\\/hello(?:\\/([^\\/]+?))$',
|
src: '^\\/hello(?:\\/([^\\/]+?))$',
|
||||||
check: true,
|
check: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
check: true,
|
||||||
|
dest: '/another',
|
||||||
|
has: [
|
||||||
|
{
|
||||||
|
key: 'x-rewrite',
|
||||||
|
type: 'header',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'loggedIn',
|
||||||
|
type: 'cookie',
|
||||||
|
value: '1',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
src: '^\\/hello$',
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
deepEqual(actual, expected);
|
deepEqual(actual, expected);
|
||||||
@@ -493,6 +560,7 @@ test('convertRewrites', () => {
|
|||||||
['/hello/post-123.html', '/post-123.html'],
|
['/hello/post-123.html', '/post-123.html'],
|
||||||
['/feature-first', '/feature-second'],
|
['/feature-first', '/feature-second'],
|
||||||
['/hello/world', '/hello/again'],
|
['/hello/world', '/hello/again'],
|
||||||
|
['/hello'],
|
||||||
];
|
];
|
||||||
|
|
||||||
const mustNotMatch = [
|
const mustNotMatch = [
|
||||||
@@ -514,6 +582,7 @@ test('convertRewrites', () => {
|
|||||||
['/hello/post.html'],
|
['/hello/post.html'],
|
||||||
['/feature/first', '/feature'],
|
['/feature/first', '/feature'],
|
||||||
['/hello', '/hello/another/one'],
|
['/hello', '/hello/another/one'],
|
||||||
|
['/hllooo'],
|
||||||
];
|
];
|
||||||
|
|
||||||
assertRegexMatches(actual, mustMatch, mustNotMatch);
|
assertRegexMatches(actual, mustMatch, mustNotMatch);
|
||||||
@@ -610,6 +679,26 @@ test('convertHeaders', () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
source: '/hello',
|
||||||
|
headers: [
|
||||||
|
{
|
||||||
|
key: 'x-header',
|
||||||
|
value: 'something',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
has: [
|
||||||
|
{
|
||||||
|
key: 'x-rewrite',
|
||||||
|
type: 'header',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'loggedIn',
|
||||||
|
type: 'cookie',
|
||||||
|
value: '1',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const expected = [
|
const expected = [
|
||||||
@@ -647,6 +736,24 @@ test('convertHeaders', () => {
|
|||||||
},
|
},
|
||||||
src: '^\\/like\\/params(?:\\/([^\\/]+?))$',
|
src: '^\\/like\\/params(?:\\/([^\\/]+?))$',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
continue: true,
|
||||||
|
has: [
|
||||||
|
{
|
||||||
|
key: 'x-rewrite',
|
||||||
|
type: 'header',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'loggedIn',
|
||||||
|
type: 'cookie',
|
||||||
|
value: '1',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
headers: {
|
||||||
|
'x-header': 'something',
|
||||||
|
},
|
||||||
|
src: '^\\/hello$',
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
deepEqual(actual, expected);
|
deepEqual(actual, expected);
|
||||||
@@ -656,6 +763,7 @@ test('convertHeaders', () => {
|
|||||||
['404.html'],
|
['404.html'],
|
||||||
['/blog/first-post', '/blog/another/one'],
|
['/blog/first-post', '/blog/another/one'],
|
||||||
['/like/params/first', '/like/params/second'],
|
['/like/params/first', '/like/params/second'],
|
||||||
|
['/hello'],
|
||||||
];
|
];
|
||||||
|
|
||||||
const mustNotMatch = [
|
const mustNotMatch = [
|
||||||
@@ -663,6 +771,7 @@ test('convertHeaders', () => {
|
|||||||
['403.html', '500.html'],
|
['403.html', '500.html'],
|
||||||
['/blogg', '/random'],
|
['/blogg', '/random'],
|
||||||
['/non-match', '/like/params', '/like/params/'],
|
['/non-match', '/like/params', '/like/params/'],
|
||||||
|
['/hellooo'],
|
||||||
];
|
];
|
||||||
|
|
||||||
assertRegexMatches(actual, mustMatch, mustNotMatch);
|
assertRegexMatches(actual, mustMatch, mustNotMatch);
|
||||||
|
|||||||
66
yarn.lock
66
yarn.lock
@@ -1798,13 +1798,6 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-4.1.1.tgz#b2d87a5e3df8d4b18ca426c5105cd701c2306d40"
|
resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-4.1.1.tgz#b2d87a5e3df8d4b18ca426c5105cd701c2306d40"
|
||||||
integrity sha512-8mNEUG6diOrI6pMqOHrHPDBB1JsrpedeMK9AWGzVCQ7StRRribiT9BRvUmF8aUws9iBbVlgVekOT5Sgzc1MTKw==
|
integrity sha512-8mNEUG6diOrI6pMqOHrHPDBB1JsrpedeMK9AWGzVCQ7StRRribiT9BRvUmF8aUws9iBbVlgVekOT5Sgzc1MTKw==
|
||||||
|
|
||||||
"@types/micro@7.3.3":
|
|
||||||
version "7.3.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/@types/micro/-/micro-7.3.3.tgz#31ead8df18ac10d58b7be1186d4b2d977b13a938"
|
|
||||||
integrity sha512-I3n3QYT7lqAxkyAoTZyg1yrvo38BxW/7ZafLAXZF/zZQOnAnQzg6j9XOuSmUEL5GGVFKWw4iqM+ZLnqb2154TA==
|
|
||||||
dependencies:
|
|
||||||
"@types/node" "*"
|
|
||||||
|
|
||||||
"@types/mime-types@2.1.0":
|
"@types/mime-types@2.1.0":
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.0.tgz#9ca52cda363f699c69466c2a6ccdaad913ea7a73"
|
resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.0.tgz#9ca52cda363f699c69466c2a6ccdaad913ea7a73"
|
||||||
@@ -4107,11 +4100,6 @@ delegates@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
|
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
|
||||||
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
|
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
|
||||||
|
|
||||||
depd@1.1.1:
|
|
||||||
version "1.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
|
|
||||||
integrity sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=
|
|
||||||
|
|
||||||
depd@~1.1.2:
|
depd@~1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
|
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
|
||||||
@@ -5645,16 +5633,6 @@ http-cache-semantics@^4.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
|
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
|
||||||
integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
|
integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
|
||||||
|
|
||||||
http-errors@1.6.2:
|
|
||||||
version "1.6.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
|
|
||||||
integrity sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=
|
|
||||||
dependencies:
|
|
||||||
depd "1.1.1"
|
|
||||||
inherits "2.0.3"
|
|
||||||
setprototypeof "1.0.3"
|
|
||||||
statuses ">= 1.3.1 < 2"
|
|
||||||
|
|
||||||
http-errors@1.7.3:
|
http-errors@1.7.3:
|
||||||
version "1.7.3"
|
version "1.7.3"
|
||||||
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
|
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
|
||||||
@@ -5762,11 +5740,6 @@ husky@3.0.4:
|
|||||||
run-node "^1.0.0"
|
run-node "^1.0.0"
|
||||||
slash "^3.0.0"
|
slash "^3.0.0"
|
||||||
|
|
||||||
iconv-lite@0.4.19:
|
|
||||||
version "0.4.19"
|
|
||||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
|
|
||||||
integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==
|
|
||||||
|
|
||||||
iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
|
iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
|
||||||
version "0.4.24"
|
version "0.4.24"
|
||||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||||
@@ -5890,11 +5863,6 @@ inherits@2.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
|
||||||
integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
|
integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
|
||||||
|
|
||||||
inherits@2.0.3:
|
|
||||||
version "2.0.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
|
||||||
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
|
|
||||||
|
|
||||||
ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
|
ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
|
||||||
version "1.3.7"
|
version "1.3.7"
|
||||||
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
|
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
|
||||||
@@ -6281,7 +6249,7 @@ is-ssh@^1.3.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
protocols "^1.1.0"
|
protocols "^1.1.0"
|
||||||
|
|
||||||
is-stream@1.1.0, is-stream@^1.0.1, is-stream@^1.1.0:
|
is-stream@^1.0.1, is-stream@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||||
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
|
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
|
||||||
@@ -7569,16 +7537,6 @@ merge2@^1.2.3, merge2@^1.3.0:
|
|||||||
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
|
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
|
||||||
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
|
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
|
||||||
|
|
||||||
micro@9.1.2:
|
|
||||||
version "9.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/micro/-/micro-9.1.2.tgz#fabb79ca60bf7696551943d4b932dcd9eddbbc96"
|
|
||||||
integrity sha512-wteCRJBbzcatTkUSsD/IKqMiLkq1yK3KL5MlimiFxT8SWbVtD3R6CirpglildwRUvadItM9pScLM2AiBpqiCuQ==
|
|
||||||
dependencies:
|
|
||||||
content-type "1.0.4"
|
|
||||||
is-stream "1.1.0"
|
|
||||||
mri "1.1.0"
|
|
||||||
raw-body "2.3.2"
|
|
||||||
|
|
||||||
micro@9.3.5-canary.3:
|
micro@9.3.5-canary.3:
|
||||||
version "9.3.5-canary.3"
|
version "9.3.5-canary.3"
|
||||||
resolved "https://registry.yarnpkg.com/micro/-/micro-9.3.5-canary.3.tgz#e957598abb9ab05aea8453e0150a521fe22135c3"
|
resolved "https://registry.yarnpkg.com/micro/-/micro-9.3.5-canary.3.tgz#e957598abb9ab05aea8453e0150a521fe22135c3"
|
||||||
@@ -7775,11 +7733,6 @@ move-concurrently@^1.0.1:
|
|||||||
rimraf "^2.5.4"
|
rimraf "^2.5.4"
|
||||||
run-queue "^1.0.3"
|
run-queue "^1.0.3"
|
||||||
|
|
||||||
mri@1.1.0:
|
|
||||||
version "1.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.0.tgz#5c0a3f29c8ccffbbb1ec941dcec09d71fa32f36a"
|
|
||||||
integrity sha1-XAo/KcjM/7ux7JQdzsCdcfoy82o=
|
|
||||||
|
|
||||||
mri@1.1.5:
|
mri@1.1.5:
|
||||||
version "1.1.5"
|
version "1.1.5"
|
||||||
resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.5.tgz#ce21dba2c69f74a9b7cf8a1ec62307e089e223e0"
|
resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.5.tgz#ce21dba2c69f74a9b7cf8a1ec62307e089e223e0"
|
||||||
@@ -8981,16 +8934,6 @@ range-parser@1.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
|
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
|
||||||
integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=
|
integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=
|
||||||
|
|
||||||
raw-body@2.3.2:
|
|
||||||
version "2.3.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89"
|
|
||||||
integrity sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=
|
|
||||||
dependencies:
|
|
||||||
bytes "3.0.0"
|
|
||||||
http-errors "1.6.2"
|
|
||||||
iconv-lite "0.4.19"
|
|
||||||
unpipe "1.0.0"
|
|
||||||
|
|
||||||
raw-body@2.4.1:
|
raw-body@2.4.1:
|
||||||
version "2.4.1"
|
version "2.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c"
|
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c"
|
||||||
@@ -9655,11 +9598,6 @@ set-value@^2.0.0, set-value@^2.0.1:
|
|||||||
is-plain-object "^2.0.3"
|
is-plain-object "^2.0.3"
|
||||||
split-string "^3.0.1"
|
split-string "^3.0.1"
|
||||||
|
|
||||||
setprototypeof@1.0.3:
|
|
||||||
version "1.0.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
|
|
||||||
integrity sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=
|
|
||||||
|
|
||||||
setprototypeof@1.1.1:
|
setprototypeof@1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
|
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
|
||||||
@@ -9971,7 +9909,7 @@ static-extend@^0.1.1:
|
|||||||
define-property "^0.2.5"
|
define-property "^0.2.5"
|
||||||
object-copy "^0.1.0"
|
object-copy "^0.1.0"
|
||||||
|
|
||||||
"statuses@>= 1.2.1 < 2", "statuses@>= 1.3.1 < 2", "statuses@>= 1.5.0 < 2":
|
"statuses@>= 1.2.1 < 2", "statuses@>= 1.5.0 < 2":
|
||||||
version "1.5.0"
|
version "1.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
|
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
|
||||||
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
|
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
|
||||||
|
|||||||
Reference in New Issue
Block a user