Compare commits

..

3 Commits

Author SHA1 Message Date
chloetedder
59f51a1bb6 Update 2023-02-14 14:41:04 -07:00
chloetedder
494164a3a4 test 2023-02-14 14:18:11 -07:00
chloetedder
b45052adda Change tests 2023-02-14 13:27:47 -07:00
67 changed files with 377 additions and 469 deletions

View File

@@ -16,13 +16,10 @@ jobs:
# 0 means fetch all commits so we can commit and push in the script below
with:
fetch-depth: 0
- name: Enable corepack
run: corepack enable pnpm
- name: Create Pull Request
uses: actions/github-script@v6
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GH_TOKEN_PULL_REQUESTS }}
# See https://github.com/actions/github-script#run-a-separate-file-with-an-async-function
with:
script: |

View File

@@ -16,13 +16,12 @@ jobs:
# 0 means fetch all commits so we can commit and push in the script below
with:
fetch-depth: 0
- name: Enable corepack
run: corepack enable pnpm
- name: install pnpm@7.26.0
run: npm i -g pnpm@7.26.0
- name: Create Pull Request
uses: actions/github-script@v6
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GH_TOKEN_PULL_REQUESTS }}
# See https://github.com/actions/github-script#run-a-separate-file-with-an-async-function
with:
script: |

View File

@@ -2,15 +2,15 @@
#### Why This Error Occurred
This error is often caused by a misconfigured "Build Command" or "Output Directory" for your Next.js project.
This could be caused by a misconfigured "Build Command" or "Output Directory" for your Next.js project.
#### Possible Ways to Fix It
In the Vercel dashboard, open your "Project Settings" and draw attention to "Build & Development Settings":
1. Ensure that the "Build Command" setting is not overridden, or that it calls `next build`. If this command is not overridden but you are seeing this error, double check that your `build` script in `package.json` calls `next build`. If `buildCommand` exists in `vercel.json`, make sure it calls `next build`.
2. Ensure that the "Output Directory" setting is not overridden. This value almost never needs to be configured, and is only necessary if you override `distDir` in `next.config.js`. If `outputDirectory` exists in `vercel.json`, remove that property.
3. For `next export` users: **do not override the "Output Directory"**, even if you customized the `next export` output directory. It will automatically detects the correct output.
1. Ensure that the "Build Command" setting is not changed, or that it calls `next build`. If this command is not changed but you are seeing this error, double check that your `build` script in `package.json` calls `next build`.
2. Ensure that the "Output Directory" setting is not changed. This value almost never needs to be configured, and is only necessary if you override `distDir` in `next.config.js`.
3. For `next export` users: **do not override the "Output Directory"**. Next.js automatically detects what folder you outputted `next export` to.
In rare scenarios, this error message can also be caused by a Next.js build failure (if your "Build Command" accidentally returns an exit code that is not 0).
Double check for any error messages above the Routes Manifest error, which may provide additional details.

View File

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

View File

@@ -1,4 +1,4 @@
import type { Files, FunctionFramework } from './types';
import type { Cron, Files } from './types';
/**
* An Edge Functions output
@@ -41,8 +41,8 @@ export class EdgeFunction {
/** The regions where the edge function will be executed on */
regions?: string | string[];
/** The framework */
framework?: FunctionFramework;
/** Cronjob definition for the edge function */
cron?: Cron;
constructor(params: Omit<EdgeFunction, 'type'>) {
this.type = 'EdgeFunction';
@@ -53,6 +53,6 @@ export class EdgeFunction {
this.envVarsInUse = params.envVarsInUse;
this.assets = params.assets;
this.regions = params.regions;
this.framework = params.framework;
this.cron = params.cron;
}
}

View File

@@ -5,7 +5,7 @@ import minimatch from 'minimatch';
import { readlink } from 'fs-extra';
import { isSymbolicLink, isDirectory } from './fs/download';
import streamToBuffer from './fs/stream-to-buffer';
import type { Files, Config, FunctionFramework } from './types';
import type { Files, Config, Cron } from './types';
interface Environment {
[key: string]: string;
@@ -25,7 +25,7 @@ export interface LambdaOptionsBase {
supportsWrapper?: boolean;
experimentalResponseStreaming?: boolean;
operationType?: string;
framework?: FunctionFramework;
cron?: Cron;
}
export interface LambdaOptionsWithFiles extends LambdaOptionsBase {
@@ -63,6 +63,7 @@ export class Lambda {
environment: Environment;
allowQuery?: string[];
regions?: string[];
cron?: Cron;
/**
* @deprecated Use `await lambda.createZip()` instead.
*/
@@ -70,7 +71,6 @@ export class Lambda {
supportsMultiPayloads?: boolean;
supportsWrapper?: boolean;
experimentalResponseStreaming?: boolean;
framework?: FunctionFramework;
constructor(opts: LambdaOptions) {
const {
@@ -81,11 +81,11 @@ export class Lambda {
environment = {},
allowQuery,
regions,
cron,
supportsMultiPayloads,
supportsWrapper,
experimentalResponseStreaming,
operationType,
framework,
} = opts;
if ('files' in opts) {
assert(typeof opts.files === 'object', '"files" must be an object');
@@ -135,18 +135,8 @@ export class Lambda {
);
}
if (framework !== undefined) {
assert(typeof framework === 'object', '"framework" is not an object');
assert(
typeof framework.slug === 'string',
'"framework.slug" is not a string'
);
if (framework.version !== undefined) {
assert(
typeof framework.version === 'string',
'"framework.version" is not a string'
);
}
if (cron !== undefined) {
assert(typeof cron === 'string', '"cron" is not a string');
}
this.type = 'Lambda';
@@ -159,11 +149,11 @@ export class Lambda {
this.environment = environment;
this.allowQuery = allowQuery;
this.regions = regions;
this.cron = cron;
this.zipBuffer = 'zipBuffer' in opts ? opts.zipBuffer : undefined;
this.supportsMultiPayloads = supportsMultiPayloads;
this.supportsWrapper = supportsWrapper;
this.experimentalResponseStreaming = experimentalResponseStreaming;
this.framework = framework;
}
async createZip(): Promise<Buffer> {
@@ -238,7 +228,7 @@ export async function getLambdaOptionsFromFunction({
sourceFile,
config,
}: GetLambdaOptionsFromFunctionOptions): Promise<
Pick<LambdaOptions, 'memory' | 'maxDuration'>
Pick<LambdaOptions, 'memory' | 'maxDuration' | 'cron'>
> {
if (config?.functions) {
for (const [pattern, fn] of Object.entries(config.functions)) {
@@ -246,6 +236,7 @@ export async function getLambdaOptionsFromFunction({
return {
memory: fn.memory,
maxDuration: fn.maxDuration,
cron: fn.cron,
};
}
}

View File

@@ -29,6 +29,11 @@ export const functionsSchema = {
type: 'string',
maxLength: 256,
},
cron: {
type: 'string',
minLength: 9,
maxLength: 256,
},
},
},
},

View File

@@ -319,6 +319,7 @@ export interface BuilderFunctions {
runtime?: string;
includeFiles?: string;
excludeFiles?: string;
cron?: Cron;
};
}
@@ -410,16 +411,7 @@ export interface BuildResultBuildOutput {
buildOutputPath: string;
}
export interface Cron {
path: string;
schedule: string;
}
/** The framework which created the function */
export interface FunctionFramework {
slug: string;
version?: string;
}
export type Cron = string;
/**
* When a Builder implements `version: 2`, the `build()` function is expected

View File

@@ -1,6 +1,6 @@
{
"name": "vercel",
"version": "28.16.0",
"version": "28.15.4",
"preferGlobal": true,
"license": "Apache-2.0",
"description": "The command-line interface for Vercel",
@@ -41,16 +41,16 @@
"node": ">= 14"
},
"dependencies": {
"@vercel/build-utils": "6.3.0",
"@vercel/go": "2.3.7",
"@vercel/hydrogen": "0.0.53",
"@vercel/next": "3.4.7",
"@vercel/node": "2.9.6",
"@vercel/python": "3.1.49",
"@vercel/redwood": "1.1.5",
"@vercel/remix": "1.3.3",
"@vercel/ruby": "1.3.65",
"@vercel/static-build": "1.3.9"
"@vercel/build-utils": "6.2.2",
"@vercel/go": "2.3.4",
"@vercel/hydrogen": "0.0.50",
"@vercel/next": "3.4.3",
"@vercel/node": "2.9.3",
"@vercel/python": "3.1.46",
"@vercel/redwood": "1.1.2",
"@vercel/remix": "1.2.13",
"@vercel/ruby": "1.3.62",
"@vercel/static-build": "1.3.6"
},
"devDependencies": {
"@alex_neo/jest-expect-message": "1.0.5",
@@ -93,13 +93,13 @@
"@types/which": "1.3.2",
"@types/write-json-file": "2.2.1",
"@types/yauzl-promise": "2.1.0",
"@vercel/client": "12.4.0",
"@vercel/client": "12.3.8",
"@vercel/error-utils": "1.0.8",
"@vercel/frameworks": "1.3.1",
"@vercel/fs-detectors": "3.7.14",
"@vercel/frameworks": "1.3.0",
"@vercel/fs-detectors": "3.7.11",
"@vercel/fun": "1.0.4",
"@vercel/ncc": "0.24.0",
"@vercel/routing-utils": "2.1.9",
"@vercel/routing-utils": "2.1.8",
"@zeit/source-map-support": "0.6.2",
"ajv": "6.12.2",
"alpha-sort": "2.0.1",

View File

@@ -16,7 +16,6 @@ import {
BuildResultV2Typical,
BuildResultV3,
NowBuildError,
Cron,
} from '@vercel/build-utils';
import {
detectBuilders,
@@ -89,7 +88,6 @@ interface BuildOutputConfig {
framework?: {
version: string;
};
crons?: Cron[];
}
/**
@@ -625,7 +623,6 @@ async function doBuild(
});
const mergedImages = mergeImages(localConfig.images, buildResults.values());
const mergedCrons = mergeCrons(localConfig.crons, buildResults.values());
const mergedWildcard = mergeWildcard(buildResults.values());
const mergedOverrides: Record<string, PathOverride> =
overrides.length > 0 ? Object.assign({}, ...overrides) : undefined;
@@ -641,7 +638,6 @@ async function doBuild(
wildcard: mergedWildcard,
overrides: mergedOverrides,
framework,
crons: mergedCrons,
};
await fs.writeJSON(join(outputDir, 'config.json'), config, { spaces: 2 });
@@ -750,18 +746,6 @@ function mergeImages(
return images;
}
function mergeCrons(
crons: BuildOutputConfig['crons'],
buildResults: Iterable<BuildResult | BuildOutputConfig>
): BuildOutputConfig['crons'] {
for (const result of buildResults) {
if ('crons' in result && result.crons) {
crons = Object.assign({}, crons, result.crons);
}
}
return crons;
}
function mergeWildcard(
buildResults: Iterable<BuildResult | BuildOutputConfig>
): BuildResultV2Typical['wildcard'] {

View File

@@ -13,6 +13,7 @@ import {
Builder,
BuildResultV2,
BuildResultV3,
Cron,
File,
FileFsRef,
BuilderV2,
@@ -40,6 +41,7 @@ export const OUTPUT_DIR = join(VERCEL_DIR, 'output');
* An entry in the "functions" object in `vercel.json`.
*/
interface FunctionConfiguration {
cron?: Cron;
memory?: number;
maxDuration?: number;
}
@@ -370,12 +372,14 @@ async function writeLambda(
throw new Error('Malformed `Lambda` - no "files" present');
}
const cron = functionConfiguration?.cron ?? lambda.cron;
const memory = functionConfiguration?.memory ?? lambda.memory;
const maxDuration = functionConfiguration?.maxDuration ?? lambda.maxDuration;
const config = {
...lambda,
handler: normalizePath(lambda.handler),
cron,
memory,
maxDuration,
type: undefined,

View File

@@ -93,29 +93,6 @@ const imagesSchema = {
},
};
const cronsSchema = {
type: 'array',
minItems: 0,
items: {
type: 'object',
additionalProperties: false,
required: ['path', 'schedule'],
properties: {
path: {
type: 'string',
minLength: 1,
maxLength: 512,
pattern: '^/.*',
},
schedule: {
type: 'string',
minLength: 9,
maxLength: 256,
},
},
},
};
const vercelConfigSchema = {
type: 'object',
// These are not all possibilities because `vc dev`
@@ -131,7 +108,6 @@ const vercelConfigSchema = {
trailingSlash: trailingSlashSchema,
functions: functionsSchema,
images: imagesSchema,
crons: cronsSchema,
},
};

View File

@@ -10,7 +10,7 @@ const { version: cliVersion } = require('../../package.json');
const {
fetchCachedToken,
} = require('../../../../test/lib/deployment/now-deploy');
const { spawnSync, execFileSync } = require('child_process');
const { spawnSync } = require('child_process');
jest.setTimeout(6 * 60 * 1000);
@@ -522,7 +522,7 @@ async function ps(parentPid, pids = {}) {
: ['ps', '-o', 'pid', '--no-headers', '--ppid', parentPid];
try {
const buf = execFileSync(cmd[0], cmd.slice(1), {
const { stdout: buf } = spawnSync(cmd[0], cmd.slice(1), {
encoding: 'utf-8',
});
for (let pid of buf.match(/\d+/g)) {

View File

@@ -1,8 +1,7 @@
const path = require('node:path');
const fs = require('node:fs');
const world = require('app-2');
const dist = path.join(__dirname, 'dist');
fs.rmSync(dist, { recursive: true, force: true });
fs.mkdirSync(dist);
fs.writeFileSync(path.join(dist, 'index.txt'), `Hello, ${world}`);
fs.writeFileSync(path.join(dist, 'index.txt'), `Hello`);

View File

@@ -4,4 +4,4 @@ const fs = require('node:fs');
const dist = path.join(__dirname, 'dist');
fs.rmSync(dist, { recursive: true, force: true });
fs.mkdirSync(dist);
fs.writeFileSync(path.join(dist, 'index.js'), 'module.exports = "world"');
fs.writeFileSync(path.join(dist, 'index.txt'), `Hello`);

View File

@@ -1,12 +1,8 @@
{
"name": "app-2",
"version": "0.0.1",
"main": "dist/index.js",
"files": [
"dist"
],
"scripts": {
"build": "node script.js"
"build": "node index.js"
},
"nx": {
"targets": {

View File

@@ -1,8 +1,7 @@
const path = require('node:path');
const fs = require('node:fs');
const world = require('app-2');
const dist = path.join(__dirname, 'dist');
fs.rmSync(dist, { recursive: true, force: true });
fs.mkdirSync(dist);
fs.writeFileSync(path.join(dist, 'index.txt'), `Hello, ${world}`);
fs.writeFileSync(path.join(dist, 'index.txt'), `Hello`);

View File

@@ -4,4 +4,4 @@ const fs = require('node:fs');
const dist = path.join(__dirname, 'dist');
fs.rmSync(dist, { recursive: true, force: true });
fs.mkdirSync(dist);
fs.writeFileSync(path.join(dist, 'index.js'), 'module.exports = "world"');
fs.writeFileSync(path.join(dist, 'index.txt'), `Hello`);

View File

@@ -1,11 +1,7 @@
{
"name": "app-2",
"version": "0.0.1",
"main": "dist/index.js",
"files": [
"dist"
],
"scripts": {
"build": "node script.js"
"build": "node index.js"
}
}

View File

@@ -1,8 +1,7 @@
const path = require('node:path');
const fs = require('node:fs');
const world = require('app-2');
const dist = path.join(__dirname, 'dist');
fs.rmSync(dist, { recursive: true, force: true });
fs.mkdirSync(dist);
fs.writeFileSync(path.join(dist, 'index.txt'), `Hello, ${world}`);
fs.writeFileSync(path.join(dist, 'index.txt'), `Hello`);

View File

@@ -4,4 +4,4 @@ const fs = require('node:fs');
const dist = path.join(__dirname, 'dist');
fs.rmSync(dist, { recursive: true, force: true });
fs.mkdirSync(dist);
fs.writeFileSync(path.join(dist, 'index.js'), 'module.exports = "world"');
fs.writeFileSync(path.join(dist, 'index.txt'), `Hello`);

View File

@@ -1,11 +1,7 @@
{
"name": "app-2",
"version": "0.0.1",
"main": "dist/index.js",
"files": [
"dist"
],
"scripts": {
"build": "node script.js"
"build": "node index.js"
}
}

View File

@@ -1,8 +1,7 @@
const path = require('node:path');
const fs = require('node:fs');
const world = require('app-2');
const dist = path.join(__dirname, 'dist');
fs.rmSync(dist, { recursive: true, force: true });
fs.mkdirSync(dist);
fs.writeFileSync(path.join(dist, 'index.txt'), `Hello, ${world}`);
fs.writeFileSync(path.join(dist, 'index.txt'), `Hello`);

View File

@@ -4,4 +4,4 @@ const fs = require('node:fs');
const dist = path.join(__dirname, 'dist');
fs.rmSync(dist, { recursive: true, force: true });
fs.mkdirSync(dist);
fs.writeFileSync(path.join(dist, 'index.js'), 'module.exports = "world"');
fs.writeFileSync(path.join(dist, 'index.txt'), `Hello`);

View File

@@ -1,11 +1,7 @@
{
"name": "app-2",
"version": "0.0.1",
"main": "dist/index.js",
"files": [
"dist"
],
"scripts": {
"build": "node script.js"
"build": "node index.js"
}
}

View File

@@ -1,8 +1,7 @@
const path = require('node:path');
const fs = require('node:fs');
const world = require('app-2');
const dist = path.join(__dirname, 'dist');
fs.rmSync(dist, { recursive: true, force: true });
fs.mkdirSync(dist);
fs.writeFileSync(path.join(dist, 'index.txt'), `Hello, ${world}`);
fs.writeFileSync(path.join(dist, 'index.txt'), `Hello`);

View File

@@ -0,0 +1,7 @@
const path = require('node:path');
const fs = require('node:fs');
const dist = path.join(__dirname, 'dist');
fs.rmSync(dist, { recursive: true, force: true });
fs.mkdirSync(dist);
fs.writeFileSync(path.join(dist, 'index.txt'), `Hello`);

View File

@@ -1,11 +1,7 @@
{
"name": "app-2",
"version": "0.0.1",
"main": "dist/index.js",
"files": [
"dist"
],
"scripts": {
"build": "node script.js"
"build": "node index.js"
}
}

View File

@@ -1,7 +0,0 @@
const path = require('node:path');
const fs = require('node:fs');
const dist = path.join(__dirname, 'dist');
fs.rmSync(dist, { recursive: true, force: true });
fs.mkdirSync(dist);
fs.writeFileSync(path.join(dist, 'index.js'), 'module.exports = "world"');

View File

@@ -0,0 +1,17 @@
export const config = {
runtime: 'edge',
cron: '* * * * *',
};
export default async function edge(request, event) {
const requestBody = await request.text();
return new Response(
JSON.stringify({
headerContentType: request.headers.get('content-type'),
url: request.url,
method: request.method,
body: requestBody,
})
);
}

View File

@@ -1,3 +1,3 @@
export default function (req, res) {
res.send('Hello from cron job!');
res.json('hello from the edge');
}

View File

@@ -0,0 +1,3 @@
export default function (req, res) {
res.end('serverless says hello');
}

View File

@@ -0,0 +1,7 @@
export default function (req, res) {
res.json({ memory: parseInt(process.env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE) });
}
export const config = {
cron: '* * * * *',
};

View File

@@ -1,8 +1,10 @@
{
"crons": [
{
"path": "/api/cron-job",
"schedule": "0 0 * * *"
"functions": {
"api/overwrite/serverless.js": {
"cron": "0 10-20 * * *"
},
"api/overwrite/edge.js": {
"cron": "10 * * * *"
}
]
}
}

View File

@@ -2635,7 +2635,7 @@ test('next unsupported functions config shows warning link', async t => {
t.is(output.exitCode, 0, formatOutput(output));
t.regex(
output.stderr,
/Ignoring function property `runtime`\. When using Next\.js, only `memory` and `maxDuration` can be used\./gm,
/Ignoring function property `runtime`\. When using Next\.js, only `memory`, `maxDuration`, and `cron` can be used\./gm,
formatOutput(output)
);
t.regex(

View File

@@ -8,7 +8,7 @@ import { defaultProject, useProject } from '../../../mocks/project';
import { useTeams } from '../../../mocks/team';
import { useUser } from '../../../mocks/user';
import { setupFixture } from '../../../helpers/setup-fixture';
import JSON5 from 'json5';
// import JSON5 from 'json5';
// TODO (@Ethan-Arrowood) - After shipping support for turbo and nx, revisit rush support
// import execa from 'execa';
@@ -1104,20 +1104,32 @@ describe('build', () => {
it('should include crons property in build output', async () => {
const cwd = fixture('with-cron');
const output = join(cwd, '.vercel', 'output');
const output = join(cwd, '.vercel', 'output', 'functions', 'api');
try {
process.chdir(cwd);
const exitCode = await build(client);
expect(exitCode).toBe(0);
const config = await fs.readJSON(join(output, 'config.json'));
expect(config).toHaveProperty('crons', [
{
path: '/api/cron-job',
schedule: '0 0 * * *',
},
]);
const edge = await fs.readJSON(
join(output, 'edge.func', '.vc-config.json')
);
expect(edge).toHaveProperty('cron', '* * * * *');
const serverless = await fs.readJSON(
join(output, 'serverless.func', '.vc-config.json')
);
expect(serverless).toHaveProperty('cron', '* * * * *');
const overwriteServerless = await fs.readJSON(
join(output, 'overwrite', 'serverless.func', '.vc-config.json')
);
expect(overwriteServerless).toHaveProperty('cron', '0 10-20 * * *');
const overwriteEdge = await fs.readJSON(
join(output, 'overwrite', 'edge.func', '.vc-config.json')
);
expect(overwriteEdge).toHaveProperty('cron', '10 * * * *');
} finally {
process.chdir(originalCwd);
delete process.env.__VERCEL_BUILD_RUNNING;
@@ -1313,7 +1325,7 @@ describe('build', () => {
join(cwd, '.vercel/output/static/index.txt'),
'utf8'
);
expect(result).toMatch(/Hello, world/);
expect(result).toMatch(/Hello/);
} finally {
process.chdir(originalCwd);
delete process.env.__VERCEL_BUILD_RUNNING;
@@ -1553,86 +1565,87 @@ describe('build', () => {
);
});
describe.each([
[
'nx',
'nx.json',
'targetDefaults.build',
[
'Missing required `build` target in either nx.json, project.json, or package.json Nx configuration. Skipping automatic setting assignment.',
],
],
[
'nx-project-config',
'packages/app-1/project.json',
'targets.build',
[
'Missing required `build` target in either nx.json, project.json, or package.json Nx configuration. Skipping automatic setting assignment.',
],
],
[
'nx-package-config',
'packages/app-1/package.json',
'nx.targets.build',
[
'Missing required `build` target in either nx.json, project.json, or package.json Nx configuration. Skipping automatic setting assignment.',
],
],
[
'turbo',
'turbo.json',
'pipeline.build',
[
'Missing required `build` pipeline in turbo.json or package.json Turbo configuration. Skipping automatic setting assignment.',
],
],
[
'turbo-package-config',
'package.json',
'turbo.pipeline.build',
[
'Missing required `build` pipeline in turbo.json or package.json Turbo configuration. Skipping automatic setting assignment.',
],
],
])('fixture: %s', (fixture, configFile, propertyAccessor, expectedLogs) => {
function deleteSubProperty(
obj: { [k: string]: any },
accessorString: string
) {
const accessors = accessorString.split('.');
const lastAccessor = accessors.pop();
for (const accessor of accessors) {
obj = obj[accessor];
}
// lastAccessor cannot be undefined as accessors will always be an array of atleast one string
delete obj[lastAccessor as string];
}
// describe.each([
// [
// 'nx',
// 'nx.json',
// 'targetDefaults.build',
// [
// 'Missing required `build` target in either nx.json, project.json, or package.json Nx configuration. Skipping automatic setting assignment.',
// ],
// ],
// [
// 'nx-project-config',
// 'packages/app-1/project.json',
// 'targets.build',
// [
// 'Missing required `build` target in either nx.json, project.json, or package.json Nx configuration. Skipping automatic setting assignment.',
// ],
// ],
// [
// 'nx-package-config',
// 'packages/app-1/package.json',
// 'nx.targets.build',
// [
// 'Missing required `build` target in either nx.json, project.json, or package.json Nx configuration. Skipping automatic setting assignment.',
// ],
// ],
// [
// 'turbo',
// 'turbo.json',
// 'pipeline.build',
// [
// 'Missing required `build` pipeline in turbo.json or package.json Turbo configuration. Skipping automatic setting assignment.',
// ],
// ],
// [
// 'turbo-package-config',
// 'package.json',
// 'turbo.pipeline.build',
// [
// 'Missing required `build` pipeline in turbo.json or package.json Turbo configuration. Skipping automatic setting assignment.',
// ],
// ],
// ])('fixture: %s', (fixture, configFile, propertyAccessor, expectedLogs) => {
// function deleteSubProperty(
// obj: { [k: string]: any },
// accessorString: string
// ) {
// const accessors = accessorString.split('.');
// const lastAccessor = accessors.pop();
// for (const accessor of accessors) {
// obj = obj[accessor];
// }
// // lastAccessor cannot be undefined as accessors will always be an array of atleast one string
// delete obj[lastAccessor as string];
// }
test(
'should warn and not configure settings when project does not satisfy requirements',
async () => {
try {
const cwd = setupMonorepoDetectionFixture(fixture);
// test.(
// 'should warn and not configure settings when project does not satisfy requirements',
// async () => {
// try {
// const cwd = setupMonorepoDetectionFixture(fixture);
const configPath = join(cwd, configFile);
const config = JSON5.parse(await fs.readFile(configPath, 'utf-8'));
// const configPath = join(cwd, configFile);
// console.log('chloe tedder', configPath)
// const config = JSON5.parse(await fs.readFile(configPath, 'utf-8'));
deleteSubProperty(config, propertyAccessor);
await fs.writeFile(configPath, JSON.stringify(config));
// deleteSubProperty(config, propertyAccessor);
// await fs.writeFile(configPath, JSON.stringify(config));
const exitCode = await build(client);
// const exitCode = await build(client);
expect(exitCode).toBe(1);
for (const log of expectedLogs) {
await expect(client.stderr).toOutput(log);
}
} finally {
process.chdir(originalCwd);
delete process.env.__VERCEL_BUILD_RUNNING;
}
},
ms('3 minutes')
);
});
// expect(exitCode).toBe(1);
// for (const log of expectedLogs) {
// await expect(client.stderr).toOutput(log);
// }
// } finally {
// process.chdir(originalCwd);
// delete process.env.__VERCEL_BUILD_RUNNING;
// }
// },
// ms('3 minutes')
// );
// });
});
});

View File

@@ -285,90 +285,4 @@ describe('validateConfig', () => {
expect(error!.link).toEqual('https://vercel.link/functions-and-builds');
});
it('should error when crons have missing schedule', () => {
const error = validateConfig({
// @ts-ignore
crons: [{ path: '/api/test.js' }],
});
expect(error!.message).toEqual(
'Invalid vercel.json - `crons[0]` missing required property `schedule`.'
);
expect(error!.link).toEqual(
'https://vercel.com/docs/concepts/projects/project-configuration#crons'
);
});
it('should error when crons have missing path', () => {
const error = validateConfig({
// @ts-ignore
crons: [{ schedule: '* * * * *' }],
});
expect(error!.message).toEqual(
'Invalid vercel.json - `crons[0]` missing required property `path`.'
);
expect(error!.link).toEqual(
'https://vercel.com/docs/concepts/projects/project-configuration#crons'
);
});
it('should error when path is too long', () => {
const error = validateConfig({
crons: [{ path: '/' + 'x'.repeat(512), schedule: '* * * * *' }],
});
expect(error!.message).toEqual(
'Invalid vercel.json - `crons[0].path` should NOT be longer than 512 characters.'
);
expect(error!.link).toEqual(
'https://vercel.com/docs/concepts/projects/project-configuration#crons'
);
});
it('should error when schedule is too long', () => {
const error = validateConfig({
crons: [{ path: '/', schedule: '*'.repeat(257) }],
});
expect(error!.message).toEqual(
'Invalid vercel.json - `crons[0].schedule` should NOT be longer than 256 characters.'
);
expect(error!.link).toEqual(
'https://vercel.com/docs/concepts/projects/project-configuration#crons'
);
});
it('should error when path is empty', () => {
const error = validateConfig({
crons: [{ path: '', schedule: '* * * * *' }],
});
expect(error!.message).toEqual(
'Invalid vercel.json - `crons[0].path` should NOT be shorter than 1 characters.'
);
expect(error!.link).toEqual(
'https://vercel.com/docs/concepts/projects/project-configuration#crons'
);
});
it('should error when schedule is too short', () => {
const error = validateConfig({
crons: [{ path: '/', schedule: '* * * * ' }],
});
expect(error!.message).toEqual(
'Invalid vercel.json - `crons[0].schedule` should NOT be shorter than 9 characters.'
);
expect(error!.link).toEqual(
'https://vercel.com/docs/concepts/projects/project-configuration#crons'
);
});
it("should error when path doesn't start with `/`", () => {
const error = validateConfig({
crons: [{ path: 'api/cron', schedule: '* * * * *' }],
});
expect(error!.message).toEqual(
'Invalid vercel.json - `crons[0].path` should match pattern "^/.*".'
);
expect(error!.link).toEqual(
'https://vercel.com/docs/concepts/projects/project-configuration#crons'
);
});
});

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/client",
"version": "12.4.0",
"version": "12.3.8",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"homepage": "https://vercel.com",
@@ -43,8 +43,8 @@
]
},
"dependencies": {
"@vercel/build-utils": "6.3.0",
"@vercel/routing-utils": "2.1.9",
"@vercel/build-utils": "6.2.2",
"@vercel/routing-utils": "2.1.8",
"@zeit/fetch": "5.2.0",
"async-retry": "1.2.3",
"async-sema": "3.0.0",

View File

@@ -3,7 +3,6 @@ import type {
BuilderFunctions,
Images,
ProjectSettings,
Cron,
} from '@vercel/build-utils';
import type { Header, Route, Redirect, Rewrite } from '@vercel/routing-utils';
@@ -155,7 +154,6 @@ export interface VercelConfig {
framework?: string | null;
outputDirectory?: string | null;
images?: Images;
crons?: Cron[];
}
export interface GitMetadata {

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/fs-detectors",
"version": "3.7.14",
"version": "3.7.11",
"description": "Vercel filesystem detectors",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -20,8 +20,8 @@
},
"dependencies": {
"@vercel/error-utils": "1.0.8",
"@vercel/frameworks": "1.3.1",
"@vercel/routing-utils": "2.1.9",
"@vercel/frameworks": "1.3.0",
"@vercel/routing-utils": "2.1.8",
"glob": "8.0.3",
"js-yaml": "4.1.0",
"json5": "2.2.2",
@@ -35,7 +35,7 @@
"@types/minimatch": "3.0.5",
"@types/node": "14.18.33",
"@types/semver": "7.3.10",
"@vercel/build-utils": "6.3.0",
"@vercel/build-utils": "6.2.2",
"typescript": "4.3.4"
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/gatsby-plugin-vercel-builder",
"version": "1.1.7",
"version": "1.1.4",
"main": "dist/index.js",
"files": [
"dist",
@@ -14,9 +14,9 @@
"build:src": "tsc -p tsconfig.src.json"
},
"dependencies": {
"@vercel/build-utils": "6.3.0",
"@vercel/node": "2.9.6",
"@vercel/routing-utils": "2.1.9",
"@vercel/build-utils": "6.2.2",
"@vercel/node": "2.9.3",
"@vercel/routing-utils": "2.1.8",
"ajv": "8.12.0",
"esbuild": "0.14.47",
"etag": "1.8.1",

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/hydrogen",
"version": "0.0.53",
"version": "0.0.50",
"license": "MIT",
"main": "./dist/index.js",
"homepage": "https://vercel.com/docs",
@@ -21,8 +21,8 @@
"devDependencies": {
"@types/jest": "27.5.1",
"@types/node": "14.18.33",
"@vercel/build-utils": "6.3.0",
"@vercel/static-config": "2.0.13",
"@vercel/build-utils": "6.2.2",
"@vercel/static-config": "2.0.12",
"execa": "3.2.0",
"fs-extra": "11.1.0",
"ts-morph": "12.0.0",

View File

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

View File

@@ -1094,10 +1094,6 @@ export const build: BuildV2 = async ({
shouldAddHelpers: false,
shouldAddSourcemapSupport: false,
supportsMultiPayloads: !!process.env.NEXT_PRIVATE_MULTI_PAYLOAD,
framework: {
slug: 'nextjs',
version: nextVersion,
},
});
debug(`Created serverless function for page: "${page}"`);
})
@@ -1820,7 +1816,6 @@ export const build: BuildV2 = async ({
'___next_launcher.cjs'
),
runtime: nodeVersion.runtime,
nextVersion,
...lambdaOptions,
});
} else {
@@ -1840,7 +1835,6 @@ export const build: BuildV2 = async ({
'___next_launcher.cjs'
),
runtime: nodeVersion.runtime,
nextVersion,
...lambdaOptions,
});
}
@@ -2052,7 +2046,6 @@ export const build: BuildV2 = async ({
'___next_launcher.cjs'
),
runtime: nodeVersion.runtime,
nextVersion,
});
}
)
@@ -2651,10 +2644,7 @@ async function getServerlessPages(params: {
const [pages, appPaths, middlewareManifest] = await Promise.all([
glob('**/!(_middleware).js', params.pagesDir),
params.appPathRoutesManifest
? Promise.all([
glob('**/page.js', path.join(params.pagesDir, '../app')),
glob('**/route.js', path.join(params.pagesDir, '../app')),
]).then(items => Object.assign(...items))
? glob('**/page.js', path.join(params.pagesDir, '../app'))
: Promise.resolve({}),
getMiddlewareManifest(params.entryPath, params.outputDirectory),
]);

View File

@@ -873,7 +873,7 @@ export async function serverBuild({
runtime: nodeVersion.runtime,
maxDuration: group.maxDuration,
isStreaming: group.isStreaming,
nextVersion,
cron: group.cron,
});
for (const page of group.pages) {
@@ -974,7 +974,6 @@ export async function serverBuild({
routesManifest,
isCorrectMiddlewareOrder,
prerenderBypassToken: prerenderManifest.bypassToken || '',
nextVersion,
});
const isNextDataServerResolving =

View File

@@ -15,6 +15,7 @@ import {
NodejsLambda,
EdgeFunction,
Images,
Cron,
} from '@vercel/build-utils';
import { NodeFileTraceReasons } from '@vercel/nft';
import type {
@@ -268,7 +269,12 @@ export async function getRoutesManifest(
if (shouldHaveManifest && !hasRoutesManifest) {
throw new NowBuildError({
message: `The file "${pathRoutesManifest}" couldn't be found. This is often caused by a misconfiguration in your project.`,
message:
`The file "${pathRoutesManifest}" couldn't be found. This is normally caused by a misconfiguration in your project.\n` +
'Please check the following, and reach out to support if you cannot resolve the problem:\n' +
' 1. If present, be sure your `build` script in "package.json" calls `next build`.' +
' 2. Navigate to your project\'s settings in the Vercel dashboard, and verify that the "Build Command" is not overridden, or that it calls `next build`.' +
' 3. Navigate to your project\'s settings in the Vercel dashboard, and verify that the "Output Directory" is not overridden. Note that `next export` does **not** require you change this setting, even if you customize the `next export` output directory.',
link: 'https://err.sh/vercel/vercel/now-next-routes-manifest',
code: 'NEXT_NO_ROUTES_MANIFEST',
});
@@ -774,7 +780,6 @@ export async function createPseudoLayer(files: {
interface CreateLambdaFromPseudoLayersOptions extends LambdaOptionsWithFiles {
layers: PseudoLayer[];
isStreaming?: boolean;
nextVersion?: string;
}
// measured with 1, 2, 5, 10, and `os.cpus().length || 5`
@@ -785,7 +790,6 @@ export async function createLambdaFromPseudoLayers({
files: baseFiles,
layers,
isStreaming,
nextVersion,
...lambdaOptions
}: CreateLambdaFromPseudoLayersOptions) {
await createLambdaSema.acquire();
@@ -829,10 +833,6 @@ export async function createLambdaFromPseudoLayers({
shouldAddHelpers: false,
shouldAddSourcemapSupport: false,
supportsMultiPayloads: !!process.env.NEXT_PRIVATE_MULTI_PAYLOAD,
framework: {
slug: 'nextjs',
version: nextVersion,
},
});
}
@@ -1310,6 +1310,7 @@ export function addLocaleOrDefault(
export type LambdaGroup = {
pages: string[];
memory?: number;
cron?: Cron;
maxDuration?: number;
isStreaming?: boolean;
isPrerenders?: boolean;
@@ -1362,7 +1363,7 @@ export async function getPageLambdaGroups({
const routeName = normalizePage(page.replace(/\.js$/, ''));
const isPrerenderRoute = prerenderRoutes.has(routeName);
let opts: { memory?: number; maxDuration?: number } = {};
let opts: { memory?: number; maxDuration?: number; cron?: Cron } = {};
if (config && config.functions) {
const sourceFile = await getSourceFilePathFromPage({
@@ -1380,7 +1381,8 @@ export async function getPageLambdaGroups({
const matches =
group.maxDuration === opts.maxDuration &&
group.memory === opts.memory &&
group.isPrerenders === isPrerenderRoute;
group.isPrerenders === isPrerenderRoute &&
!opts.cron; // Functions with a cronjob must be on their own
if (matches) {
let newTracedFilesSize = group.pseudoLayerBytes;
@@ -2029,8 +2031,7 @@ export const onPrerenderRoute =
const rscVaryHeader =
routesManifest?.rsc?.varyHeader ||
'__rsc__, __next_router_state_tree__, __next_router_prefetch__';
const rscContentTypeHeader =
routesManifest?.rsc?.contentTypeHeader || 'application/octet-stream';
const rscContentTypeHeader = routesManifest?.rsc?.contentTypeHeader || 'application/octet-stream';
prerenders[outputPathPage] = new Prerender({
expiration: initialRevalidate,
@@ -2315,12 +2316,12 @@ interface EdgeFunctionMatcher {
}
export async function getMiddlewareBundle({
config = {},
entryPath,
outputDirectory,
routesManifest,
isCorrectMiddlewareOrder,
prerenderBypassToken,
nextVersion,
}: {
config: Config;
entryPath: string;
@@ -2328,7 +2329,6 @@ export async function getMiddlewareBundle({
prerenderBypassToken: string;
routesManifest: RoutesManifest;
isCorrectMiddlewareOrder: boolean;
nextVersion: string;
}): Promise<{
staticRoutes: Route[];
dynamicRouteMap: Map<string, RouteWithSrc>;
@@ -2379,6 +2379,21 @@ export async function getMiddlewareBundle({
edgeFunction.wasm
);
const edgeFunctionOptions: { cron?: Cron } = {};
if (config.functions) {
const sourceFile = await getSourceFilePathFromPage({
workPath: entryPath,
page: `${edgeFunction.page}.js`,
});
const opts = await getLambdaOptionsFromFunction({
sourceFile,
config,
});
edgeFunctionOptions.cron = opts.cron;
}
return {
type,
page: edgeFunction.page,
@@ -2423,6 +2438,7 @@ export async function getMiddlewareBundle({
);
return new EdgeFunction({
...edgeFunctionOptions,
deploymentTarget: 'v8-worker',
name: edgeFunction.name,
files: {
@@ -2450,10 +2466,6 @@ export async function getMiddlewareBundle({
path: `assets/${name}`,
};
}),
framework: {
slug: 'nextjs',
version: nextVersion,
},
});
})(),
routeMatchers: getRouteMatchers(edgeFunction, routesManifest),

View File

@@ -0,0 +1,44 @@
const path = require('node:path');
const fs = require('fs-extra');
const { build } = require('../../dist');
function getFixture(name) {
return path.join(__dirname, 'fixtures', name);
}
const initialCorepackValue = process.env.COREPACK_ENABLE_STRICT;
beforeEach(() => {
process.env.COREPACK_ENABLE_STRICT = '0';
});
afterEach(() => {
process.env.COREPACK_ENABLE_STRICT = initialCorepackValue;
});
it('should include cron property from config', async () => {
const cwd = getFixture('03-with-api-routes');
await fs.remove(path.join(cwd, '.next'));
const result = await build({
workPath: cwd,
repoRootPath: cwd,
entrypoint: 'package.json',
config: {
functions: {
'pages/api/edge.js': {
cron: '* * * * *',
},
'pages/api/serverless.js': {
cron: '* * * * *',
},
},
},
meta: {
skipDownload: true,
},
});
expect(result.output['api/serverless']).toHaveProperty('cron', '* * * * *');
expect(result.output['api/edge']).toHaveProperty('cron', '* * * * *');
});

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/node",
"version": "2.9.6",
"version": "2.9.3",
"license": "MIT",
"main": "./dist/index",
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/node-js",
@@ -31,9 +31,9 @@
"dependencies": {
"@edge-runtime/vm": "2.0.0",
"@types/node": "14.18.33",
"@vercel/build-utils": "6.3.0",
"@vercel/build-utils": "6.2.2",
"@vercel/node-bridge": "3.1.11",
"@vercel/static-config": "2.0.13",
"@vercel/static-config": "2.0.12",
"edge-runtime": "2.0.0",
"esbuild": "0.14.47",
"exit-hook": "2.2.1",

View File

@@ -424,6 +424,8 @@ export const build: BuildV3 = async ({
isEdgeFunction = isEdgeRuntime(staticConfig.runtime);
}
const cron = staticConfig?.cron;
debug('Tracing input files...');
const traceTime = Date.now();
const { preparedFiles, shouldAddSourcemapSupport } = await compile(
@@ -473,6 +475,7 @@ export const build: BuildV3 = async ({
// TODO: remove - these two properties should not be required
name: outputPath,
deploymentTarget: 'v8-worker',
cron,
});
} else {
// "nodejs" runtime is the default
@@ -491,6 +494,7 @@ export const build: BuildV3 = async ({
shouldAddSourcemapSupport,
awsLambdaHandler,
experimentalResponseStreaming,
cron,
});
}

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/redwood",
"version": "1.1.5",
"version": "1.1.2",
"main": "./dist/index.js",
"license": "MIT",
"homepage": "https://vercel.com/docs",
@@ -20,14 +20,14 @@
},
"dependencies": {
"@vercel/nft": "0.22.5",
"@vercel/routing-utils": "2.1.9",
"@vercel/routing-utils": "2.1.8",
"semver": "6.1.1"
},
"devDependencies": {
"@types/aws-lambda": "8.10.19",
"@types/node": "14.18.33",
"@types/semver": "6.0.0",
"@vercel/build-utils": "6.3.0",
"@vercel/build-utils": "6.2.2",
"execa": "3.2.0",
"fs-extra": "11.1.0",
"typescript": "4.3.4"

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/remix-entry-server",
"version": "0.1.0",
"version": "0.0.1",
"description": "Isomorphic `entry.server` implementation for Vercel's Serverless and Edge runtimes",
"homepage": "https://vercel.com/docs",
"repository": {

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/remix",
"version": "1.3.3",
"version": "1.2.13",
"license": "MIT",
"main": "./dist/index.js",
"homepage": "https://vercel.com/docs",
@@ -22,14 +22,14 @@
"dependencies": {
"@remix-run/dev": "1.12.0",
"@vercel/nft": "0.22.5",
"@vercel/static-config": "2.0.13",
"@vercel/static-config": "2.0.12",
"path-to-regexp": "6.2.1",
"ts-morph": "12.0.0"
},
"devDependencies": {
"@types/jest": "27.5.1",
"@types/node": "14.18.33",
"@vercel/build-utils": "6.3.0",
"@vercel/build-utils": "6.2.2",
"typescript": "4.9.4"
}
}

View File

@@ -266,9 +266,7 @@ module.exports = config;`;
// If this is a dynamic route then add a Vercel route
const keys: Key[] = [];
// Replace "/*" at the end to handle "splat routes"
const splatPath = '/:params+';
const rePath =
path === '*' ? splatPath : `/${path.replace(/\/\*$/, splatPath)}`;
const rePath = `/${path.replace(/\/\*$/, '/:params+')}`;
const re = pathToRegexp(rePath, keys);
if (keys.length > 0) {
routes.push({

View File

@@ -1,6 +0,0 @@
import { useParams } from "@remix-run/react";
export default function CatchAll() {
const params = useParams();
return <div>{params['*']}</div>;
}

View File

@@ -15,7 +15,7 @@
{ "path": "/b", "mustContain": "B page" },
{ "path": "/nested", "mustContain": "Nested index page" },
{ "path": "/nested/another", "mustContain": "Nested another page" },
{ "path": "/nested/index", "mustContain": "<div>nested/index</div>" },
{ "path": "/asdf", "mustContain": "<div>asdf</div>" }
{ "path": "/nested/index", "mustContain": "Not Found" },
{ "path": "/asdf", "mustContain": "Not Found" }
]
}

View File

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

View File

@@ -43,10 +43,6 @@ export type RouteWithSrc = {
* Overrides a `middleware` definition.
*/
middlewarePath?: string;
/**
* The original middleware matchers.
*/
middlewareRawSrc?: string[];
/**
* A middleware index in the `middleware` key under the build result
*/

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/static-build",
"version": "1.3.9",
"version": "1.3.6",
"license": "MIT",
"main": "./dist/index",
"homepage": "https://vercel.com/docs/build-step",
@@ -30,7 +30,7 @@
},
"dependencies": {
"@vercel/gatsby-plugin-vercel-analytics": "1.0.7",
"@vercel/gatsby-plugin-vercel-builder": "1.1.7"
"@vercel/gatsby-plugin-vercel-builder": "1.1.4"
},
"devDependencies": {
"@types/aws-lambda": "8.10.64",
@@ -42,12 +42,12 @@
"@types/node-fetch": "2.5.4",
"@types/promise-timeout": "1.3.0",
"@types/semver": "7.3.13",
"@vercel/build-utils": "6.3.0",
"@vercel/frameworks": "1.3.1",
"@vercel/fs-detectors": "3.7.14",
"@vercel/build-utils": "6.2.2",
"@vercel/frameworks": "1.3.0",
"@vercel/fs-detectors": "3.7.11",
"@vercel/ncc": "0.24.0",
"@vercel/routing-utils": "2.1.9",
"@vercel/static-config": "2.0.13",
"@vercel/routing-utils": "2.1.8",
"@vercel/static-config": "2.0.12",
"execa": "3.2.0",
"fs-extra": "10.0.0",
"get-port": "5.0.0",

View File

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

View File

@@ -14,6 +14,7 @@ export const BaseFunctionConfigSchema = {
type: 'object',
properties: {
runtime: { type: 'string' },
cron: { type: 'string' },
memory: { type: 'number' },
maxDuration: { type: 'number' },
regions: {

93
pnpm-lock.yaml generated
View File

@@ -90,7 +90,7 @@ importers:
'@vercel/frameworks': 1.3.0
devDependencies:
'@types/jest': 27.4.1
'@vercel/frameworks': 1.3.0
'@vercel/frameworks': link:../packages/frameworks
packages/build-utils:
specifiers:
@@ -204,23 +204,23 @@ importers:
'@types/which': 1.3.2
'@types/write-json-file': 2.2.1
'@types/yauzl-promise': 2.1.0
'@vercel/build-utils': 6.3.0
'@vercel/client': 12.4.0
'@vercel/build-utils': 6.2.2
'@vercel/client': 12.3.8
'@vercel/error-utils': 1.0.8
'@vercel/frameworks': 1.3.1
'@vercel/fs-detectors': 3.7.14
'@vercel/frameworks': 1.3.0
'@vercel/fs-detectors': 3.7.11
'@vercel/fun': 1.0.4
'@vercel/go': 2.3.7
'@vercel/hydrogen': 0.0.53
'@vercel/go': 2.3.4
'@vercel/hydrogen': 0.0.50
'@vercel/ncc': 0.24.0
'@vercel/next': 3.4.7
'@vercel/node': 2.9.6
'@vercel/python': 3.1.49
'@vercel/redwood': 1.1.5
'@vercel/remix': 1.3.3
'@vercel/routing-utils': 2.1.9
'@vercel/ruby': 1.3.65
'@vercel/static-build': 1.3.9
'@vercel/next': 3.4.3
'@vercel/node': 2.9.3
'@vercel/python': 3.1.46
'@vercel/redwood': 1.1.2
'@vercel/remix': 1.2.13
'@vercel/routing-utils': 2.1.8
'@vercel/ruby': 1.3.62
'@vercel/static-build': 1.3.6
'@zeit/source-map-support': 0.6.2
ajv: 6.12.2
alpha-sort: 2.0.1
@@ -446,8 +446,8 @@ importers:
'@types/node-fetch': 2.5.4
'@types/recursive-readdir': 2.2.0
'@types/tar-fs': 1.16.1
'@vercel/build-utils': 6.3.0
'@vercel/routing-utils': 2.1.9
'@vercel/build-utils': 6.2.2
'@vercel/routing-utils': 2.1.8
'@zeit/fetch': 5.2.0
async-retry: 1.2.3
async-sema: 3.0.0
@@ -527,7 +527,7 @@ importers:
'@types/js-yaml': 3.12.1
'@types/node': 14.18.33
'@types/node-fetch': 2.5.8
'@vercel/routing-utils': 2.1.9
'@vercel/routing-utils': 2.1.8
ajv: 6.12.2
js-yaml: 3.13.1
typescript: 4.3.4
@@ -551,10 +551,10 @@ importers:
'@types/minimatch': 3.0.5
'@types/node': 14.18.33
'@types/semver': 7.3.10
'@vercel/build-utils': 6.3.0
'@vercel/build-utils': 6.2.2
'@vercel/error-utils': 1.0.8
'@vercel/frameworks': 1.3.1
'@vercel/routing-utils': 2.1.9
'@vercel/frameworks': 1.3.0
'@vercel/routing-utils': 2.1.8
glob: 8.0.3
js-yaml: 4.1.0
json5: 2.2.2
@@ -599,9 +599,9 @@ importers:
'@types/fs-extra': 11.0.1
'@types/node': 14.18.33
'@types/react': 18.0.26
'@vercel/build-utils': 6.3.0
'@vercel/node': 2.9.6
'@vercel/routing-utils': 2.1.9
'@vercel/build-utils': 6.2.2
'@vercel/node': 2.9.3
'@vercel/routing-utils': 2.1.8
ajv: 8.12.0
esbuild: 0.14.47
etag: 1.8.1
@@ -634,7 +634,7 @@ importers:
'@types/node': 14.18.33
'@types/node-fetch': ^2.3.0
'@types/tar': ^4.0.0
'@vercel/build-utils': 6.3.0
'@vercel/build-utils': 6.2.2
'@vercel/ncc': 0.24.0
async-retry: 1.3.1
execa: ^1.0.0
@@ -666,8 +666,8 @@ importers:
specifiers:
'@types/jest': 27.5.1
'@types/node': 14.18.33
'@vercel/build-utils': 6.3.0
'@vercel/static-config': 2.0.13
'@vercel/build-utils': 6.2.2
'@vercel/static-config': 2.0.12
execa: 3.2.0
fs-extra: 11.1.0
ts-morph: 12.0.0
@@ -697,9 +697,9 @@ importers:
'@types/semver': 6.0.0
'@types/text-table': 0.2.1
'@types/webpack-sources': 3.2.0
'@vercel/build-utils': 6.3.0
'@vercel/build-utils': 6.2.2
'@vercel/nft': 0.22.5
'@vercel/routing-utils': 2.1.9
'@vercel/routing-utils': 2.1.8
async-sema: 3.0.1
buffer-crc32: 0.2.13
bytes: 3.1.2
@@ -776,11 +776,11 @@ importers:
'@types/node': 14.18.33
'@types/node-fetch': ^2.6.1
'@types/test-listen': 1.1.0
'@vercel/build-utils': 6.3.0
'@vercel/build-utils': 6.2.2
'@vercel/ncc': 0.24.0
'@vercel/nft': 0.22.5
'@vercel/node-bridge': 3.1.11
'@vercel/static-config': 2.0.13
'@vercel/static-config': 2.0.12
content-type: 1.0.4
cookie: 0.4.0
edge-runtime: 2.0.0
@@ -860,7 +860,7 @@ importers:
'@types/execa': ^0.9.0
'@types/jest': 27.4.1
'@types/node': 14.18.33
'@vercel/build-utils': 6.3.0
'@vercel/build-utils': 6.2.2
'@vercel/ncc': 0.24.0
execa: ^1.0.0
typescript: 4.3.4
@@ -878,9 +878,9 @@ importers:
'@types/aws-lambda': 8.10.19
'@types/node': 14.18.33
'@types/semver': 6.0.0
'@vercel/build-utils': 6.3.0
'@vercel/build-utils': 6.2.2
'@vercel/nft': 0.22.5
'@vercel/routing-utils': 2.1.9
'@vercel/routing-utils': 2.1.8
execa: 3.2.0
fs-extra: 11.1.0
semver: 6.1.1
@@ -903,9 +903,9 @@ importers:
'@remix-run/dev': 1.12.0
'@types/jest': 27.5.1
'@types/node': 14.18.33
'@vercel/build-utils': 6.3.0
'@vercel/build-utils': 6.2.2
'@vercel/nft': 0.22.5
'@vercel/static-config': 2.0.13
'@vercel/static-config': 2.0.12
path-to-regexp: 6.2.1
ts-morph: 12.0.0
typescript: 4.9.4
@@ -960,7 +960,7 @@ importers:
specifiers:
'@types/fs-extra': 8.0.0
'@types/semver': 6.0.0
'@vercel/build-utils': 6.3.0
'@vercel/build-utils': 6.2.2
'@vercel/ncc': 0.24.0
execa: 2.0.4
fs-extra: ^7.0.1
@@ -987,14 +987,14 @@ importers:
'@types/node-fetch': 2.5.4
'@types/promise-timeout': 1.3.0
'@types/semver': 7.3.13
'@vercel/build-utils': 6.3.0
'@vercel/frameworks': 1.3.1
'@vercel/fs-detectors': 3.7.14
'@vercel/build-utils': 6.2.2
'@vercel/frameworks': 1.3.0
'@vercel/fs-detectors': 3.7.11
'@vercel/gatsby-plugin-vercel-analytics': 1.0.7
'@vercel/gatsby-plugin-vercel-builder': 1.1.7
'@vercel/gatsby-plugin-vercel-builder': 1.1.4
'@vercel/ncc': 0.24.0
'@vercel/routing-utils': 2.1.9
'@vercel/static-config': 2.0.13
'@vercel/routing-utils': 2.1.8
'@vercel/static-config': 2.0.12
execa: 3.2.0
fs-extra: 10.0.0
get-port: 5.0.0
@@ -7148,13 +7148,6 @@ packages:
resolution: {integrity: sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==}
dev: false
/@vercel/frameworks/1.3.0:
resolution: {integrity: sha512-guXALpQLhL0bCvIjUhHbYFyS8XusZQ6RtjqCTq0eJM6p8QLun4DI1TToqbIah/o7DY3s+RAyC2OUyOAY91qH4w==}
dependencies:
'@iarna/toml': 2.2.3
js-yaml: 3.13.1
dev: true
/@vercel/fun/1.0.4:
resolution: {integrity: sha512-zLY2d1U9JJm3CorfEcuZ7307fo77/Z/mU12LDJpSGtdpjzxgpxMlU5NPq8whz8hIZhIMkBJv0DqZ5bgenktQnw==}
engines: {node: '>= 10'}

View File

@@ -58,8 +58,8 @@ module.exports = async ({ github, context }) => {
pull_number: pr.data.number,
reviewers: ['ijjk', 'styfle'],
});
await github.rest.issues.addLabels({
github.rest.issues.addLabels({
owner,
repo,
issue_number: pr.data.number,

View File

@@ -54,7 +54,7 @@ module.exports = async ({ github, context }) => {
body: `This auto-generated PR updates Turbo to version ${newVersion}`,
});
await github.rest.issues.addLabels({
github.rest.issues.addLabels({
owner,
repo,
issue_number: pr.data.number,