mirror of
https://github.com/LukeHagar/vercel.git
synced 2025-12-10 12:57:47 +00:00
[next][build-utils] Add support for cron to vercel.json (#9374)
This commit is contained in:
@@ -228,7 +228,7 @@ export async function getLambdaOptionsFromFunction({
|
|||||||
sourceFile,
|
sourceFile,
|
||||||
config,
|
config,
|
||||||
}: GetLambdaOptionsFromFunctionOptions): Promise<
|
}: GetLambdaOptionsFromFunctionOptions): Promise<
|
||||||
Pick<LambdaOptions, 'memory' | 'maxDuration'>
|
Pick<LambdaOptions, 'memory' | 'maxDuration' | 'cron'>
|
||||||
> {
|
> {
|
||||||
if (config?.functions) {
|
if (config?.functions) {
|
||||||
for (const [pattern, fn] of Object.entries(config.functions)) {
|
for (const [pattern, fn] of Object.entries(config.functions)) {
|
||||||
@@ -236,6 +236,7 @@ export async function getLambdaOptionsFromFunction({
|
|||||||
return {
|
return {
|
||||||
memory: fn.memory,
|
memory: fn.memory,
|
||||||
maxDuration: fn.maxDuration,
|
maxDuration: fn.maxDuration,
|
||||||
|
cron: fn.cron,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,11 @@ export const functionsSchema = {
|
|||||||
type: 'string',
|
type: 'string',
|
||||||
maxLength: 256,
|
maxLength: 256,
|
||||||
},
|
},
|
||||||
|
cron: {
|
||||||
|
type: 'string',
|
||||||
|
minLength: 9,
|
||||||
|
maxLength: 256,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -319,6 +319,7 @@ export interface BuilderFunctions {
|
|||||||
runtime?: string;
|
runtime?: string;
|
||||||
includeFiles?: string;
|
includeFiles?: string;
|
||||||
excludeFiles?: string;
|
excludeFiles?: string;
|
||||||
|
cron?: Cron;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import {
|
|||||||
Builder,
|
Builder,
|
||||||
BuildResultV2,
|
BuildResultV2,
|
||||||
BuildResultV3,
|
BuildResultV3,
|
||||||
|
Cron,
|
||||||
File,
|
File,
|
||||||
FileFsRef,
|
FileFsRef,
|
||||||
BuilderV2,
|
BuilderV2,
|
||||||
@@ -40,6 +41,7 @@ export const OUTPUT_DIR = join(VERCEL_DIR, 'output');
|
|||||||
* An entry in the "functions" object in `vercel.json`.
|
* An entry in the "functions" object in `vercel.json`.
|
||||||
*/
|
*/
|
||||||
interface FunctionConfiguration {
|
interface FunctionConfiguration {
|
||||||
|
cron?: Cron;
|
||||||
memory?: number;
|
memory?: number;
|
||||||
maxDuration?: number;
|
maxDuration?: number;
|
||||||
}
|
}
|
||||||
@@ -370,12 +372,14 @@ async function writeLambda(
|
|||||||
throw new Error('Malformed `Lambda` - no "files" present');
|
throw new Error('Malformed `Lambda` - no "files" present');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const cron = functionConfiguration?.cron ?? lambda.cron;
|
||||||
const memory = functionConfiguration?.memory ?? lambda.memory;
|
const memory = functionConfiguration?.memory ?? lambda.memory;
|
||||||
const maxDuration = functionConfiguration?.maxDuration ?? lambda.maxDuration;
|
const maxDuration = functionConfiguration?.maxDuration ?? lambda.maxDuration;
|
||||||
|
|
||||||
const config = {
|
const config = {
|
||||||
...lambda,
|
...lambda,
|
||||||
handler: normalizePath(lambda.handler),
|
handler: normalizePath(lambda.handler),
|
||||||
|
cron,
|
||||||
memory,
|
memory,
|
||||||
maxDuration,
|
maxDuration,
|
||||||
type: undefined,
|
type: undefined,
|
||||||
|
|||||||
3
packages/cli/test/fixtures/unit/commands/build/with-cron/api/overwrite/edge.js
vendored
Normal file
3
packages/cli/test/fixtures/unit/commands/build/with-cron/api/overwrite/edge.js
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export default function (req, res) {
|
||||||
|
res.json('hello from the edge');
|
||||||
|
}
|
||||||
3
packages/cli/test/fixtures/unit/commands/build/with-cron/api/overwrite/serverless.js
vendored
Normal file
3
packages/cli/test/fixtures/unit/commands/build/with-cron/api/overwrite/serverless.js
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export default function (req, res) {
|
||||||
|
res.end('serverless says hello');
|
||||||
|
}
|
||||||
10
packages/cli/test/fixtures/unit/commands/build/with-cron/vercel.json
vendored
Normal file
10
packages/cli/test/fixtures/unit/commands/build/with-cron/vercel.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"functions": {
|
||||||
|
"api/overwrite/serverless.js": {
|
||||||
|
"cron": "0 10-20 * * *"
|
||||||
|
},
|
||||||
|
"api/overwrite/edge.js": {
|
||||||
|
"cron": "10 * * * *"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1120,6 +1120,16 @@ describe('build', () => {
|
|||||||
join(output, 'serverless.func', '.vc-config.json')
|
join(output, 'serverless.func', '.vc-config.json')
|
||||||
);
|
);
|
||||||
expect(serverless).toHaveProperty('cron', '* * * * *');
|
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 {
|
} finally {
|
||||||
process.chdir(originalCwd);
|
process.chdir(originalCwd);
|
||||||
delete process.env.__VERCEL_BUILD_RUNNING;
|
delete process.env.__VERCEL_BUILD_RUNNING;
|
||||||
|
|||||||
@@ -873,6 +873,7 @@ export async function serverBuild({
|
|||||||
runtime: nodeVersion.runtime,
|
runtime: nodeVersion.runtime,
|
||||||
maxDuration: group.maxDuration,
|
maxDuration: group.maxDuration,
|
||||||
isStreaming: group.isStreaming,
|
isStreaming: group.isStreaming,
|
||||||
|
cron: group.cron,
|
||||||
});
|
});
|
||||||
|
|
||||||
for (const page of group.pages) {
|
for (const page of group.pages) {
|
||||||
@@ -967,6 +968,7 @@ export async function serverBuild({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const middleware = await getMiddlewareBundle({
|
const middleware = await getMiddlewareBundle({
|
||||||
|
config,
|
||||||
entryPath,
|
entryPath,
|
||||||
outputDirectory,
|
outputDirectory,
|
||||||
routesManifest,
|
routesManifest,
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import {
|
|||||||
NodejsLambda,
|
NodejsLambda,
|
||||||
EdgeFunction,
|
EdgeFunction,
|
||||||
Images,
|
Images,
|
||||||
|
Cron,
|
||||||
} from '@vercel/build-utils';
|
} from '@vercel/build-utils';
|
||||||
import { NodeFileTraceReasons } from '@vercel/nft';
|
import { NodeFileTraceReasons } from '@vercel/nft';
|
||||||
import type {
|
import type {
|
||||||
@@ -1308,6 +1309,7 @@ export function addLocaleOrDefault(
|
|||||||
export type LambdaGroup = {
|
export type LambdaGroup = {
|
||||||
pages: string[];
|
pages: string[];
|
||||||
memory?: number;
|
memory?: number;
|
||||||
|
cron?: Cron;
|
||||||
maxDuration?: number;
|
maxDuration?: number;
|
||||||
isStreaming?: boolean;
|
isStreaming?: boolean;
|
||||||
isPrerenders?: boolean;
|
isPrerenders?: boolean;
|
||||||
@@ -1360,7 +1362,7 @@ export async function getPageLambdaGroups({
|
|||||||
const routeName = normalizePage(page.replace(/\.js$/, ''));
|
const routeName = normalizePage(page.replace(/\.js$/, ''));
|
||||||
const isPrerenderRoute = prerenderRoutes.has(routeName);
|
const isPrerenderRoute = prerenderRoutes.has(routeName);
|
||||||
|
|
||||||
let opts: { memory?: number; maxDuration?: number } = {};
|
let opts: { memory?: number; maxDuration?: number; cron?: Cron } = {};
|
||||||
|
|
||||||
if (config && config.functions) {
|
if (config && config.functions) {
|
||||||
const sourceFile = await getSourceFilePathFromPage({
|
const sourceFile = await getSourceFilePathFromPage({
|
||||||
@@ -1378,7 +1380,8 @@ export async function getPageLambdaGroups({
|
|||||||
const matches =
|
const matches =
|
||||||
group.maxDuration === opts.maxDuration &&
|
group.maxDuration === opts.maxDuration &&
|
||||||
group.memory === opts.memory &&
|
group.memory === opts.memory &&
|
||||||
group.isPrerenders === isPrerenderRoute;
|
group.isPrerenders === isPrerenderRoute &&
|
||||||
|
!opts.cron; // Functions with a cronjob must be on their own
|
||||||
|
|
||||||
if (matches) {
|
if (matches) {
|
||||||
let newTracedFilesSize = group.pseudoLayerBytes;
|
let newTracedFilesSize = group.pseudoLayerBytes;
|
||||||
@@ -2311,12 +2314,14 @@ interface EdgeFunctionMatcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function getMiddlewareBundle({
|
export async function getMiddlewareBundle({
|
||||||
|
config = {},
|
||||||
entryPath,
|
entryPath,
|
||||||
outputDirectory,
|
outputDirectory,
|
||||||
routesManifest,
|
routesManifest,
|
||||||
isCorrectMiddlewareOrder,
|
isCorrectMiddlewareOrder,
|
||||||
prerenderBypassToken,
|
prerenderBypassToken,
|
||||||
}: {
|
}: {
|
||||||
|
config: Config;
|
||||||
entryPath: string;
|
entryPath: string;
|
||||||
outputDirectory: string;
|
outputDirectory: string;
|
||||||
prerenderBypassToken: string;
|
prerenderBypassToken: string;
|
||||||
@@ -2372,6 +2377,21 @@ export async function getMiddlewareBundle({
|
|||||||
edgeFunction.wasm
|
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 {
|
return {
|
||||||
type,
|
type,
|
||||||
page: edgeFunction.page,
|
page: edgeFunction.page,
|
||||||
@@ -2416,6 +2436,7 @@ export async function getMiddlewareBundle({
|
|||||||
);
|
);
|
||||||
|
|
||||||
return new EdgeFunction({
|
return new EdgeFunction({
|
||||||
|
...edgeFunctionOptions,
|
||||||
deploymentTarget: 'v8-worker',
|
deploymentTarget: 'v8-worker',
|
||||||
name: edgeFunction.name,
|
name: edgeFunction.name,
|
||||||
files: {
|
files: {
|
||||||
|
|||||||
44
packages/next/test/unit/build.test.js
Normal file
44
packages/next/test/unit/build.test.js
Normal 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', '* * * * *');
|
||||||
|
});
|
||||||
2
packages/next/test/unit/fixtures/03-with-api-routes/.gitignore
vendored
Normal file
2
packages/next/test/unit/fixtures/03-with-api-routes/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.vercel
|
||||||
|
node_modules
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
module.exports = {
|
||||||
|
generateBuildId() {
|
||||||
|
return 'testing-build-id';
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"name": "03-with-api-routes",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"dev": "next dev",
|
||||||
|
"build": "next build"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"next": "latest",
|
||||||
|
"react": "latest",
|
||||||
|
"react-dom": "latest"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
export const config = {
|
||||||
|
runtime: 'edge',
|
||||||
|
};
|
||||||
|
|
||||||
|
export default async function Edge(req, res) {
|
||||||
|
res.json({ edge: 1 });
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
export default async function Edge(req, res) {
|
||||||
|
res.json({ serverless: 1 });
|
||||||
|
}
|
||||||
185
packages/next/test/unit/fixtures/03-with-api-routes/yarn.lock
Normal file
185
packages/next/test/unit/fixtures/03-with-api-routes/yarn.lock
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@next/env@13.1.6":
|
||||||
|
version "13.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.6.tgz#c4925609f16142ded1a5cb833359ab17359b7a93"
|
||||||
|
integrity sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg==
|
||||||
|
|
||||||
|
"@next/swc-android-arm-eabi@13.1.6":
|
||||||
|
version "13.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz#d766dfc10e27814d947b20f052067c239913dbcc"
|
||||||
|
integrity sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ==
|
||||||
|
|
||||||
|
"@next/swc-android-arm64@13.1.6":
|
||||||
|
version "13.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz#f37a98d5f18927d8c9970d750d516ac779465176"
|
||||||
|
integrity sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw==
|
||||||
|
|
||||||
|
"@next/swc-darwin-arm64@13.1.6":
|
||||||
|
version "13.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz#ec1b90fd9bf809d8b81004c5182e254dced4ad96"
|
||||||
|
integrity sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw==
|
||||||
|
|
||||||
|
"@next/swc-darwin-x64@13.1.6":
|
||||||
|
version "13.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz#e869ac75d16995eee733a7d1550322d9051c1eb4"
|
||||||
|
integrity sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA==
|
||||||
|
|
||||||
|
"@next/swc-freebsd-x64@13.1.6":
|
||||||
|
version "13.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz#84a7b2e423a2904afc2edca21c2f1ba6b53fa4c1"
|
||||||
|
integrity sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw==
|
||||||
|
|
||||||
|
"@next/swc-linux-arm-gnueabihf@13.1.6":
|
||||||
|
version "13.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz#980eed1f655ff8a72187d8a6ef9e73ac39d20d23"
|
||||||
|
integrity sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw==
|
||||||
|
|
||||||
|
"@next/swc-linux-arm64-gnu@13.1.6":
|
||||||
|
version "13.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz#87a71db21cded3f7c63d1d19079845c59813c53d"
|
||||||
|
integrity sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ==
|
||||||
|
|
||||||
|
"@next/swc-linux-arm64-musl@13.1.6":
|
||||||
|
version "13.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz#c5aac8619331b9fd030603bbe2b36052011e11de"
|
||||||
|
integrity sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ==
|
||||||
|
|
||||||
|
"@next/swc-linux-x64-gnu@13.1.6":
|
||||||
|
version "13.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz#9513d36d540bbfea575576746736054c31aacdea"
|
||||||
|
integrity sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q==
|
||||||
|
|
||||||
|
"@next/swc-linux-x64-musl@13.1.6":
|
||||||
|
version "13.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz#d61fc6884899f5957251f4ce3f522e34a2c479b7"
|
||||||
|
integrity sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ==
|
||||||
|
|
||||||
|
"@next/swc-win32-arm64-msvc@13.1.6":
|
||||||
|
version "13.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz#fac2077a8ae9768e31444c9ae90807e64117cda7"
|
||||||
|
integrity sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ==
|
||||||
|
|
||||||
|
"@next/swc-win32-ia32-msvc@13.1.6":
|
||||||
|
version "13.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz#498bc11c91b4c482a625bf4b978f98ae91111e46"
|
||||||
|
integrity sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w==
|
||||||
|
|
||||||
|
"@next/swc-win32-x64-msvc@13.1.6":
|
||||||
|
version "13.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz#17ed919c723426b7d0ce1cd73d40ce3dcd342089"
|
||||||
|
integrity sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA==
|
||||||
|
|
||||||
|
"@swc/helpers@0.4.14":
|
||||||
|
version "0.4.14"
|
||||||
|
resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74"
|
||||||
|
integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==
|
||||||
|
dependencies:
|
||||||
|
tslib "^2.4.0"
|
||||||
|
|
||||||
|
caniuse-lite@^1.0.30001406:
|
||||||
|
version "1.0.30001450"
|
||||||
|
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz#022225b91200589196b814b51b1bbe45144cf74f"
|
||||||
|
integrity sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew==
|
||||||
|
|
||||||
|
client-only@0.0.1:
|
||||||
|
version "0.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1"
|
||||||
|
integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==
|
||||||
|
|
||||||
|
"js-tokens@^3.0.0 || ^4.0.0":
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||||
|
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
||||||
|
|
||||||
|
loose-envify@^1.1.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
|
||||||
|
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
|
||||||
|
dependencies:
|
||||||
|
js-tokens "^3.0.0 || ^4.0.0"
|
||||||
|
|
||||||
|
nanoid@^3.3.4:
|
||||||
|
version "3.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
|
||||||
|
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
|
||||||
|
|
||||||
|
next@latest:
|
||||||
|
version "13.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/next/-/next-13.1.6.tgz#054babe20b601f21f682f197063c9b0b32f1a27c"
|
||||||
|
integrity sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw==
|
||||||
|
dependencies:
|
||||||
|
"@next/env" "13.1.6"
|
||||||
|
"@swc/helpers" "0.4.14"
|
||||||
|
caniuse-lite "^1.0.30001406"
|
||||||
|
postcss "8.4.14"
|
||||||
|
styled-jsx "5.1.1"
|
||||||
|
optionalDependencies:
|
||||||
|
"@next/swc-android-arm-eabi" "13.1.6"
|
||||||
|
"@next/swc-android-arm64" "13.1.6"
|
||||||
|
"@next/swc-darwin-arm64" "13.1.6"
|
||||||
|
"@next/swc-darwin-x64" "13.1.6"
|
||||||
|
"@next/swc-freebsd-x64" "13.1.6"
|
||||||
|
"@next/swc-linux-arm-gnueabihf" "13.1.6"
|
||||||
|
"@next/swc-linux-arm64-gnu" "13.1.6"
|
||||||
|
"@next/swc-linux-arm64-musl" "13.1.6"
|
||||||
|
"@next/swc-linux-x64-gnu" "13.1.6"
|
||||||
|
"@next/swc-linux-x64-musl" "13.1.6"
|
||||||
|
"@next/swc-win32-arm64-msvc" "13.1.6"
|
||||||
|
"@next/swc-win32-ia32-msvc" "13.1.6"
|
||||||
|
"@next/swc-win32-x64-msvc" "13.1.6"
|
||||||
|
|
||||||
|
picocolors@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
|
||||||
|
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
|
||||||
|
|
||||||
|
postcss@8.4.14:
|
||||||
|
version "8.4.14"
|
||||||
|
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf"
|
||||||
|
integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==
|
||||||
|
dependencies:
|
||||||
|
nanoid "^3.3.4"
|
||||||
|
picocolors "^1.0.0"
|
||||||
|
source-map-js "^1.0.2"
|
||||||
|
|
||||||
|
react-dom@latest:
|
||||||
|
version "18.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
|
||||||
|
integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
|
||||||
|
dependencies:
|
||||||
|
loose-envify "^1.1.0"
|
||||||
|
scheduler "^0.23.0"
|
||||||
|
|
||||||
|
react@latest:
|
||||||
|
version "18.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
|
||||||
|
integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
|
||||||
|
dependencies:
|
||||||
|
loose-envify "^1.1.0"
|
||||||
|
|
||||||
|
scheduler@^0.23.0:
|
||||||
|
version "0.23.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
|
||||||
|
integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
|
||||||
|
dependencies:
|
||||||
|
loose-envify "^1.1.0"
|
||||||
|
|
||||||
|
source-map-js@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
|
||||||
|
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
|
||||||
|
|
||||||
|
styled-jsx@5.1.1:
|
||||||
|
version "5.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f"
|
||||||
|
integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==
|
||||||
|
dependencies:
|
||||||
|
client-only "0.0.1"
|
||||||
|
|
||||||
|
tslib@^2.4.0:
|
||||||
|
version "2.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
|
||||||
|
integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
|
||||||
Reference in New Issue
Block a user