create project
This commit is contained in:
74
kitabcitab/node_modules/next/dist/server/api-utils/index.d.ts
generated
vendored
Normal file
74
kitabcitab/node_modules/next/dist/server/api-utils/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
/// <reference types="node" />
|
||||
import type { IncomingMessage } from 'http';
|
||||
import type { BaseNextRequest } from '../base-http';
|
||||
import { NextApiRequest, NextApiResponse } from '../../shared/lib/utils';
|
||||
export declare type NextApiRequestCookies = Partial<{
|
||||
[key: string]: string;
|
||||
}>;
|
||||
export declare type NextApiRequestQuery = Partial<{
|
||||
[key: string]: string | string[];
|
||||
}>;
|
||||
export declare type __ApiPreviewProps = {
|
||||
previewModeId: string;
|
||||
previewModeEncryptionKey: string;
|
||||
previewModeSigningKey: string;
|
||||
};
|
||||
/**
|
||||
* Parse cookies from the `headers` of request
|
||||
* @param req request object
|
||||
*/
|
||||
export declare function getCookieParser(headers: {
|
||||
[key: string]: undefined | string | string[];
|
||||
}): () => NextApiRequestCookies;
|
||||
/**
|
||||
*
|
||||
* @param res response object
|
||||
* @param statusCode `HTTP` status code of response
|
||||
*/
|
||||
export declare function sendStatusCode(res: NextApiResponse, statusCode: number): NextApiResponse<any>;
|
||||
/**
|
||||
*
|
||||
* @param res response object
|
||||
* @param [statusOrUrl] `HTTP` status code of redirect
|
||||
* @param url URL of redirect
|
||||
*/
|
||||
export declare function redirect(res: NextApiResponse, statusOrUrl: string | number, url?: string): NextApiResponse<any>;
|
||||
export declare const PRERENDER_REVALIDATE_HEADER = "x-prerender-revalidate";
|
||||
export declare const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = "x-prerender-revalidate-if-generated";
|
||||
export declare function checkIsManualRevalidate(req: IncomingMessage | BaseNextRequest, previewProps: __ApiPreviewProps): {
|
||||
isManualRevalidate: boolean;
|
||||
revalidateOnlyGenerated: boolean;
|
||||
};
|
||||
export declare const COOKIE_NAME_PRERENDER_BYPASS = "__prerender_bypass";
|
||||
export declare const COOKIE_NAME_PRERENDER_DATA = "__next_preview_data";
|
||||
export declare const RESPONSE_LIMIT_DEFAULT: number;
|
||||
export declare const SYMBOL_PREVIEW_DATA: unique symbol;
|
||||
export declare const SYMBOL_CLEARED_COOKIES: unique symbol;
|
||||
export declare function clearPreviewData<T>(res: NextApiResponse<T>, options?: {
|
||||
path?: string;
|
||||
}): NextApiResponse<T>;
|
||||
/**
|
||||
* Custom error class
|
||||
*/
|
||||
export declare class ApiError extends Error {
|
||||
readonly statusCode: number;
|
||||
constructor(statusCode: number, message: string);
|
||||
}
|
||||
/**
|
||||
* Sends error in `response`
|
||||
* @param res response object
|
||||
* @param statusCode of response
|
||||
* @param message of response
|
||||
*/
|
||||
export declare function sendError(res: NextApiResponse, statusCode: number, message: string): void;
|
||||
interface LazyProps {
|
||||
req: NextApiRequest;
|
||||
}
|
||||
/**
|
||||
* Execute getter function only if its needed
|
||||
* @param LazyProps `req` and `params` for lazyProp
|
||||
* @param prop name of property
|
||||
* @param getter function to get data
|
||||
*/
|
||||
export declare function setLazyProp<T>({ req }: LazyProps, prop: string, getter: () => T): void;
|
||||
export {};
|
||||
146
kitabcitab/node_modules/next/dist/server/api-utils/index.js
generated
vendored
Normal file
146
kitabcitab/node_modules/next/dist/server/api-utils/index.js
generated
vendored
Normal file
@@ -0,0 +1,146 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.getCookieParser = getCookieParser;
|
||||
exports.sendStatusCode = sendStatusCode;
|
||||
exports.redirect = redirect;
|
||||
exports.checkIsManualRevalidate = checkIsManualRevalidate;
|
||||
exports.clearPreviewData = clearPreviewData;
|
||||
exports.sendError = sendError;
|
||||
exports.setLazyProp = setLazyProp;
|
||||
exports.SYMBOL_CLEARED_COOKIES = exports.SYMBOL_PREVIEW_DATA = exports.RESPONSE_LIMIT_DEFAULT = exports.COOKIE_NAME_PRERENDER_DATA = exports.COOKIE_NAME_PRERENDER_BYPASS = exports.PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = exports.PRERENDER_REVALIDATE_HEADER = void 0;
|
||||
function getCookieParser(headers) {
|
||||
return function parseCookie() {
|
||||
const header = headers.cookie;
|
||||
if (!header) {
|
||||
return {};
|
||||
}
|
||||
const { parse: parseCookieFn } = require("next/dist/compiled/cookie");
|
||||
return parseCookieFn(Array.isArray(header) ? header.join(";") : header);
|
||||
};
|
||||
}
|
||||
function sendStatusCode(res, statusCode) {
|
||||
res.statusCode = statusCode;
|
||||
return res;
|
||||
}
|
||||
function redirect(res, statusOrUrl, url) {
|
||||
if (typeof statusOrUrl === "string") {
|
||||
url = statusOrUrl;
|
||||
statusOrUrl = 307;
|
||||
}
|
||||
if (typeof statusOrUrl !== "number" || typeof url !== "string") {
|
||||
throw new Error(`Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`);
|
||||
}
|
||||
res.writeHead(statusOrUrl, {
|
||||
Location: url
|
||||
});
|
||||
res.write(url);
|
||||
res.end();
|
||||
return res;
|
||||
}
|
||||
const PRERENDER_REVALIDATE_HEADER = "x-prerender-revalidate";
|
||||
exports.PRERENDER_REVALIDATE_HEADER = PRERENDER_REVALIDATE_HEADER;
|
||||
const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = "x-prerender-revalidate-if-generated";
|
||||
exports.PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER;
|
||||
function checkIsManualRevalidate(req, previewProps) {
|
||||
return {
|
||||
isManualRevalidate: req.headers[PRERENDER_REVALIDATE_HEADER] === previewProps.previewModeId,
|
||||
revalidateOnlyGenerated: !!req.headers[PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER]
|
||||
};
|
||||
}
|
||||
const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`;
|
||||
exports.COOKIE_NAME_PRERENDER_BYPASS = COOKIE_NAME_PRERENDER_BYPASS;
|
||||
const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`;
|
||||
exports.COOKIE_NAME_PRERENDER_DATA = COOKIE_NAME_PRERENDER_DATA;
|
||||
const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024;
|
||||
exports.RESPONSE_LIMIT_DEFAULT = RESPONSE_LIMIT_DEFAULT;
|
||||
const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA);
|
||||
exports.SYMBOL_PREVIEW_DATA = SYMBOL_PREVIEW_DATA;
|
||||
const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS);
|
||||
exports.SYMBOL_CLEARED_COOKIES = SYMBOL_CLEARED_COOKIES;
|
||||
function clearPreviewData(res, options = {}) {
|
||||
if (SYMBOL_CLEARED_COOKIES in res) {
|
||||
return res;
|
||||
}
|
||||
const { serialize } = require("next/dist/compiled/cookie");
|
||||
const previous = res.getHeader("Set-Cookie");
|
||||
res.setHeader(`Set-Cookie`, [
|
||||
...typeof previous === "string" ? [
|
||||
previous
|
||||
] : Array.isArray(previous) ? previous : [],
|
||||
serialize(COOKIE_NAME_PRERENDER_BYPASS, "", {
|
||||
// To delete a cookie, set `expires` to a date in the past:
|
||||
// https://tools.ietf.org/html/rfc6265#section-4.1.1
|
||||
// `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.
|
||||
expires: new Date(0),
|
||||
httpOnly: true,
|
||||
sameSite: process.env.NODE_ENV !== "development" ? "none" : "lax",
|
||||
secure: process.env.NODE_ENV !== "development",
|
||||
path: "/",
|
||||
...options.path !== undefined ? {
|
||||
path: options.path
|
||||
} : undefined
|
||||
}),
|
||||
serialize(COOKIE_NAME_PRERENDER_DATA, "", {
|
||||
// To delete a cookie, set `expires` to a date in the past:
|
||||
// https://tools.ietf.org/html/rfc6265#section-4.1.1
|
||||
// `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.
|
||||
expires: new Date(0),
|
||||
httpOnly: true,
|
||||
sameSite: process.env.NODE_ENV !== "development" ? "none" : "lax",
|
||||
secure: process.env.NODE_ENV !== "development",
|
||||
path: "/",
|
||||
...options.path !== undefined ? {
|
||||
path: options.path
|
||||
} : undefined
|
||||
}),
|
||||
]);
|
||||
Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, {
|
||||
value: true,
|
||||
enumerable: false
|
||||
});
|
||||
return res;
|
||||
}
|
||||
class ApiError extends Error {
|
||||
constructor(statusCode, message){
|
||||
super(message);
|
||||
this.statusCode = statusCode;
|
||||
}
|
||||
}
|
||||
exports.ApiError = ApiError;
|
||||
function sendError(res, statusCode, message) {
|
||||
res.statusCode = statusCode;
|
||||
res.statusMessage = message;
|
||||
res.end(message);
|
||||
}
|
||||
function setLazyProp({ req }, prop, getter) {
|
||||
const opts = {
|
||||
configurable: true,
|
||||
enumerable: true
|
||||
};
|
||||
const optsReset = {
|
||||
...opts,
|
||||
writable: true
|
||||
};
|
||||
Object.defineProperty(req, prop, {
|
||||
...opts,
|
||||
get: ()=>{
|
||||
const value = getter();
|
||||
// we set the property on the object to avoid recalculating it
|
||||
Object.defineProperty(req, prop, {
|
||||
...optsReset,
|
||||
value
|
||||
});
|
||||
return value;
|
||||
},
|
||||
set: (value)=>{
|
||||
Object.defineProperty(req, prop, {
|
||||
...optsReset,
|
||||
value
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//# sourceMappingURL=index.js.map
|
||||
1
kitabcitab/node_modules/next/dist/server/api-utils/index.js.map
generated
vendored
Normal file
1
kitabcitab/node_modules/next/dist/server/api-utils/index.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
18
kitabcitab/node_modules/next/dist/server/api-utils/node.d.ts
generated
vendored
Normal file
18
kitabcitab/node_modules/next/dist/server/api-utils/node.d.ts
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
/// <reference types="node" />
|
||||
import type { IncomingMessage, ServerResponse } from 'http';
|
||||
import type { SizeLimit } from 'next/types';
|
||||
import { __ApiPreviewProps } from '.';
|
||||
import type { BaseNextRequest, BaseNextResponse } from '../base-http';
|
||||
import type { PreviewData } from 'next/types';
|
||||
export declare function tryGetPreviewData(req: IncomingMessage | BaseNextRequest, res: ServerResponse | BaseNextResponse, options: __ApiPreviewProps): PreviewData;
|
||||
/**
|
||||
* Parse incoming message like `json` or `urlencoded`
|
||||
* @param req request object
|
||||
*/
|
||||
export declare function parseBody(req: IncomingMessage, limit: SizeLimit): Promise<any>;
|
||||
declare type ApiContext = __ApiPreviewProps & {
|
||||
trustHostHeader?: boolean;
|
||||
revalidate?: (_req: IncomingMessage, _res: ServerResponse) => Promise<any>;
|
||||
};
|
||||
export declare function apiResolver(req: IncomingMessage, res: ServerResponse, query: any, resolverModule: any, apiContext: ApiContext, propagateError: boolean, dev?: boolean, page?: string): Promise<void>;
|
||||
export {};
|
||||
386
kitabcitab/node_modules/next/dist/server/api-utils/node.js
generated
vendored
Normal file
386
kitabcitab/node_modules/next/dist/server/api-utils/node.js
generated
vendored
Normal file
@@ -0,0 +1,386 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.tryGetPreviewData = tryGetPreviewData;
|
||||
exports.parseBody = parseBody;
|
||||
exports.apiResolver = apiResolver;
|
||||
var _ = require(".");
|
||||
var _bytes = _interopRequireDefault(require("next/dist/compiled/bytes"));
|
||||
var _etag = require("../lib/etag");
|
||||
var _sendPayload = require("../send-payload");
|
||||
var _stream = require("stream");
|
||||
var _contentType = require("next/dist/compiled/content-type");
|
||||
var _isError = _interopRequireDefault(require("../../lib/is-error"));
|
||||
var _utils = require("../../shared/lib/utils");
|
||||
var _interopDefault = require("../../lib/interop-default");
|
||||
var _index = require("./index");
|
||||
var _mockRequest = require("../lib/mock-request");
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
function tryGetPreviewData(req, res, options) {
|
||||
// if an On-Demand revalidation is being done preview mode
|
||||
// is disabled
|
||||
if (options && (0, _).checkIsManualRevalidate(req, options).isManualRevalidate) {
|
||||
return false;
|
||||
}
|
||||
// Read cached preview data if present
|
||||
if (_index.SYMBOL_PREVIEW_DATA in req) {
|
||||
return req[_index.SYMBOL_PREVIEW_DATA];
|
||||
}
|
||||
const getCookies = (0, _index).getCookieParser(req.headers);
|
||||
let cookies;
|
||||
try {
|
||||
cookies = getCookies();
|
||||
} catch {
|
||||
// TODO: warn
|
||||
return false;
|
||||
}
|
||||
const hasBypass = _index.COOKIE_NAME_PRERENDER_BYPASS in cookies;
|
||||
const hasData = _index.COOKIE_NAME_PRERENDER_DATA in cookies;
|
||||
// Case: neither cookie is set.
|
||||
if (!(hasBypass || hasData)) {
|
||||
return false;
|
||||
}
|
||||
// Case: one cookie is set, but not the other.
|
||||
if (hasBypass !== hasData) {
|
||||
(0, _index).clearPreviewData(res);
|
||||
return false;
|
||||
}
|
||||
// Case: preview session is for an old build.
|
||||
if (cookies[_index.COOKIE_NAME_PRERENDER_BYPASS] !== options.previewModeId) {
|
||||
(0, _index).clearPreviewData(res);
|
||||
return false;
|
||||
}
|
||||
const tokenPreviewData = cookies[_index.COOKIE_NAME_PRERENDER_DATA];
|
||||
let encryptedPreviewData;
|
||||
try {
|
||||
const jsonwebtoken = require("next/dist/compiled/jsonwebtoken");
|
||||
encryptedPreviewData = jsonwebtoken.verify(tokenPreviewData, options.previewModeSigningKey);
|
||||
} catch {
|
||||
// TODO: warn
|
||||
(0, _index).clearPreviewData(res);
|
||||
return false;
|
||||
}
|
||||
const { decryptWithSecret } = require("../crypto-utils");
|
||||
const decryptedPreviewData = decryptWithSecret(Buffer.from(options.previewModeEncryptionKey), encryptedPreviewData.data);
|
||||
try {
|
||||
// TODO: strict runtime type checking
|
||||
const data = JSON.parse(decryptedPreviewData);
|
||||
// Cache lookup
|
||||
Object.defineProperty(req, _index.SYMBOL_PREVIEW_DATA, {
|
||||
value: data,
|
||||
enumerable: false
|
||||
});
|
||||
return data;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Parse `JSON` and handles invalid `JSON` strings
|
||||
* @param str `JSON` string
|
||||
*/ function parseJson(str) {
|
||||
if (str.length === 0) {
|
||||
// special-case empty json body, as it's a common client-side mistake
|
||||
return {};
|
||||
}
|
||||
try {
|
||||
return JSON.parse(str);
|
||||
} catch (e) {
|
||||
throw new _index.ApiError(400, "Invalid JSON");
|
||||
}
|
||||
}
|
||||
async function parseBody(req, limit) {
|
||||
let contentType;
|
||||
try {
|
||||
contentType = (0, _contentType).parse(req.headers["content-type"] || "text/plain");
|
||||
} catch {
|
||||
contentType = (0, _contentType).parse("text/plain");
|
||||
}
|
||||
const { type , parameters } = contentType;
|
||||
const encoding = parameters.charset || "utf-8";
|
||||
let buffer;
|
||||
try {
|
||||
const getRawBody = require("next/dist/compiled/raw-body");
|
||||
buffer = await getRawBody(req, {
|
||||
encoding,
|
||||
limit
|
||||
});
|
||||
} catch (e) {
|
||||
if ((0, _isError).default(e) && e.type === "entity.too.large") {
|
||||
throw new _index.ApiError(413, `Body exceeded ${limit} limit`);
|
||||
} else {
|
||||
throw new _index.ApiError(400, "Invalid body");
|
||||
}
|
||||
}
|
||||
const body = buffer.toString();
|
||||
if (type === "application/json" || type === "application/ld+json") {
|
||||
return parseJson(body);
|
||||
} else if (type === "application/x-www-form-urlencoded") {
|
||||
const qs = require("querystring");
|
||||
return qs.decode(body);
|
||||
} else {
|
||||
return body;
|
||||
}
|
||||
}
|
||||
function getMaxContentLength(responseLimit) {
|
||||
if (responseLimit && typeof responseLimit !== "boolean") {
|
||||
return _bytes.default.parse(responseLimit);
|
||||
}
|
||||
return _index.RESPONSE_LIMIT_DEFAULT;
|
||||
}
|
||||
/**
|
||||
* Send `any` body to response
|
||||
* @param req request object
|
||||
* @param res response object
|
||||
* @param body of response
|
||||
*/ function sendData(req, res, body) {
|
||||
if (body === null || body === undefined) {
|
||||
res.end();
|
||||
return;
|
||||
}
|
||||
// strip irrelevant headers/body
|
||||
if (res.statusCode === 204 || res.statusCode === 304) {
|
||||
res.removeHeader("Content-Type");
|
||||
res.removeHeader("Content-Length");
|
||||
res.removeHeader("Transfer-Encoding");
|
||||
if (process.env.NODE_ENV === "development" && body) {
|
||||
console.warn(`A body was attempted to be set with a 204 statusCode for ${req.url}, this is invalid and the body was ignored.\n` + `See more info here https://nextjs.org/docs/messages/invalid-api-status-body`);
|
||||
}
|
||||
res.end();
|
||||
return;
|
||||
}
|
||||
const contentType = res.getHeader("Content-Type");
|
||||
if (body instanceof _stream.Stream) {
|
||||
if (!contentType) {
|
||||
res.setHeader("Content-Type", "application/octet-stream");
|
||||
}
|
||||
body.pipe(res);
|
||||
return;
|
||||
}
|
||||
const isJSONLike = [
|
||||
"object",
|
||||
"number",
|
||||
"boolean"
|
||||
].includes(typeof body);
|
||||
const stringifiedBody = isJSONLike ? JSON.stringify(body) : body;
|
||||
const etag = (0, _etag).generateETag(stringifiedBody);
|
||||
if ((0, _sendPayload).sendEtagResponse(req, res, etag)) {
|
||||
return;
|
||||
}
|
||||
if (Buffer.isBuffer(body)) {
|
||||
if (!contentType) {
|
||||
res.setHeader("Content-Type", "application/octet-stream");
|
||||
}
|
||||
res.setHeader("Content-Length", body.length);
|
||||
res.end(body);
|
||||
return;
|
||||
}
|
||||
if (isJSONLike) {
|
||||
res.setHeader("Content-Type", "application/json; charset=utf-8");
|
||||
}
|
||||
res.setHeader("Content-Length", Buffer.byteLength(stringifiedBody));
|
||||
res.end(stringifiedBody);
|
||||
}
|
||||
/**
|
||||
* Send `JSON` object
|
||||
* @param res response object
|
||||
* @param jsonBody of data
|
||||
*/ function sendJson(res, jsonBody) {
|
||||
// Set header to application/json
|
||||
res.setHeader("Content-Type", "application/json; charset=utf-8");
|
||||
// Use send to handle request
|
||||
res.send(JSON.stringify(jsonBody));
|
||||
}
|
||||
function isNotValidData(str) {
|
||||
return typeof str !== "string" || str.length < 16;
|
||||
}
|
||||
function setPreviewData(res, data, options) {
|
||||
if (isNotValidData(options.previewModeId)) {
|
||||
throw new Error("invariant: invalid previewModeId");
|
||||
}
|
||||
if (isNotValidData(options.previewModeEncryptionKey)) {
|
||||
throw new Error("invariant: invalid previewModeEncryptionKey");
|
||||
}
|
||||
if (isNotValidData(options.previewModeSigningKey)) {
|
||||
throw new Error("invariant: invalid previewModeSigningKey");
|
||||
}
|
||||
const jsonwebtoken = require("next/dist/compiled/jsonwebtoken");
|
||||
const { encryptWithSecret } = require("../crypto-utils");
|
||||
const payload = jsonwebtoken.sign({
|
||||
data: encryptWithSecret(Buffer.from(options.previewModeEncryptionKey), JSON.stringify(data))
|
||||
}, options.previewModeSigningKey, {
|
||||
algorithm: "HS256",
|
||||
...options.maxAge !== undefined ? {
|
||||
expiresIn: options.maxAge
|
||||
} : undefined
|
||||
});
|
||||
// limit preview mode cookie to 2KB since we shouldn't store too much
|
||||
// data here and browsers drop cookies over 4KB
|
||||
if (payload.length > 2048) {
|
||||
throw new Error(`Preview data is limited to 2KB currently, reduce how much data you are storing as preview data to continue`);
|
||||
}
|
||||
const { serialize } = require("next/dist/compiled/cookie");
|
||||
const previous = res.getHeader("Set-Cookie");
|
||||
res.setHeader(`Set-Cookie`, [
|
||||
...typeof previous === "string" ? [
|
||||
previous
|
||||
] : Array.isArray(previous) ? previous : [],
|
||||
serialize(_index.COOKIE_NAME_PRERENDER_BYPASS, options.previewModeId, {
|
||||
httpOnly: true,
|
||||
sameSite: process.env.NODE_ENV !== "development" ? "none" : "lax",
|
||||
secure: process.env.NODE_ENV !== "development",
|
||||
path: "/",
|
||||
...options.maxAge !== undefined ? {
|
||||
maxAge: options.maxAge
|
||||
} : undefined,
|
||||
...options.path !== undefined ? {
|
||||
path: options.path
|
||||
} : undefined
|
||||
}),
|
||||
serialize(_index.COOKIE_NAME_PRERENDER_DATA, payload, {
|
||||
httpOnly: true,
|
||||
sameSite: process.env.NODE_ENV !== "development" ? "none" : "lax",
|
||||
secure: process.env.NODE_ENV !== "development",
|
||||
path: "/",
|
||||
...options.maxAge !== undefined ? {
|
||||
maxAge: options.maxAge
|
||||
} : undefined,
|
||||
...options.path !== undefined ? {
|
||||
path: options.path
|
||||
} : undefined
|
||||
}),
|
||||
]);
|
||||
return res;
|
||||
}
|
||||
async function revalidate(urlPath, opts, req, context) {
|
||||
if (typeof urlPath !== "string" || !urlPath.startsWith("/")) {
|
||||
throw new Error(`Invalid urlPath provided to revalidate(), must be a path e.g. /blog/post-1, received ${urlPath}`);
|
||||
}
|
||||
const revalidateHeaders = {
|
||||
[_index.PRERENDER_REVALIDATE_HEADER]: context.previewModeId,
|
||||
...opts.unstable_onlyGenerated ? {
|
||||
[_.PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER]: "1"
|
||||
} : {}
|
||||
};
|
||||
try {
|
||||
if (context.trustHostHeader) {
|
||||
const res = await fetch(`https://${req.headers.host}${urlPath}`, {
|
||||
method: "HEAD",
|
||||
headers: {
|
||||
...revalidateHeaders,
|
||||
cookie: req.headers.cookie || ""
|
||||
}
|
||||
});
|
||||
// we use the cache header to determine successful revalidate as
|
||||
// a non-200 status code can be returned from a successful revalidate
|
||||
// e.g. notFound: true returns 404 status code but is successful
|
||||
const cacheHeader = res.headers.get("x-vercel-cache") || res.headers.get("x-nextjs-cache");
|
||||
if ((cacheHeader == null ? void 0 : cacheHeader.toUpperCase()) !== "REVALIDATED" && !(res.status === 404 && opts.unstable_onlyGenerated)) {
|
||||
throw new Error(`Invalid response ${res.status}`);
|
||||
}
|
||||
} else if (context.revalidate) {
|
||||
const { req: mockReq , res: mockRes , streamPromise , } = (0, _mockRequest).mockRequest(urlPath, revalidateHeaders, "GET");
|
||||
await context.revalidate(mockReq, mockRes);
|
||||
await streamPromise;
|
||||
if (mockRes.getHeader("x-nextjs-cache") !== "REVALIDATED" && !(mockRes.statusCode === 404 && opts.unstable_onlyGenerated)) {
|
||||
throw new Error(`Invalid response ${mockRes.statusCode}`);
|
||||
}
|
||||
} else {
|
||||
throw new Error(`Invariant: required internal revalidate method not passed to api-utils`);
|
||||
}
|
||||
} catch (err) {
|
||||
throw new Error(`Failed to revalidate ${urlPath}: ${(0, _isError).default(err) ? err.message : err}`);
|
||||
}
|
||||
}
|
||||
async function apiResolver(req, res, query, resolverModule, apiContext, propagateError, dev, page) {
|
||||
const apiReq = req;
|
||||
const apiRes = res;
|
||||
try {
|
||||
var ref, ref1, ref2;
|
||||
if (!resolverModule) {
|
||||
res.statusCode = 404;
|
||||
res.end("Not Found");
|
||||
return;
|
||||
}
|
||||
const config = resolverModule.config || {};
|
||||
const bodyParser = ((ref = config.api) == null ? void 0 : ref.bodyParser) !== false;
|
||||
const responseLimit = ((ref1 = config.api) == null ? void 0 : ref1.responseLimit) ?? true;
|
||||
const externalResolver = ((ref2 = config.api) == null ? void 0 : ref2.externalResolver) || false;
|
||||
// Parsing of cookies
|
||||
(0, _index).setLazyProp({
|
||||
req: apiReq
|
||||
}, "cookies", (0, _index).getCookieParser(req.headers));
|
||||
// Parsing query string
|
||||
apiReq.query = query;
|
||||
// Parsing preview data
|
||||
(0, _index).setLazyProp({
|
||||
req: apiReq
|
||||
}, "previewData", ()=>tryGetPreviewData(req, res, apiContext));
|
||||
// Checking if preview mode is enabled
|
||||
(0, _index).setLazyProp({
|
||||
req: apiReq
|
||||
}, "preview", ()=>apiReq.previewData !== false ? true : undefined);
|
||||
// Parsing of body
|
||||
if (bodyParser && !apiReq.body) {
|
||||
apiReq.body = await parseBody(apiReq, config.api && config.api.bodyParser && config.api.bodyParser.sizeLimit ? config.api.bodyParser.sizeLimit : "1mb");
|
||||
}
|
||||
let contentLength = 0;
|
||||
const maxContentLength = getMaxContentLength(responseLimit);
|
||||
const writeData = apiRes.write;
|
||||
const endResponse = apiRes.end;
|
||||
apiRes.write = (...args)=>{
|
||||
contentLength += Buffer.byteLength(args[0] || "");
|
||||
return writeData.apply(apiRes, args);
|
||||
};
|
||||
apiRes.end = (...args)=>{
|
||||
if (args.length && typeof args[0] !== "function") {
|
||||
contentLength += Buffer.byteLength(args[0] || "");
|
||||
}
|
||||
if (responseLimit && contentLength >= maxContentLength) {
|
||||
console.warn(`API response for ${req.url} exceeds ${_bytes.default.format(maxContentLength)}. API Routes are meant to respond quickly. https://nextjs.org/docs/messages/api-routes-response-size-limit`);
|
||||
}
|
||||
endResponse.apply(apiRes, args);
|
||||
};
|
||||
apiRes.status = (statusCode)=>(0, _index).sendStatusCode(apiRes, statusCode);
|
||||
apiRes.send = (data)=>sendData(apiReq, apiRes, data);
|
||||
apiRes.json = (data)=>sendJson(apiRes, data);
|
||||
apiRes.redirect = (statusOrUrl, url)=>(0, _index).redirect(apiRes, statusOrUrl, url);
|
||||
apiRes.setPreviewData = (data, options = {})=>setPreviewData(apiRes, data, Object.assign({}, apiContext, options));
|
||||
apiRes.clearPreviewData = (options = {})=>(0, _index).clearPreviewData(apiRes, options);
|
||||
apiRes.revalidate = (urlPath, opts)=>revalidate(urlPath, opts || {}, req, apiContext);
|
||||
const resolver = (0, _interopDefault).interopDefault(resolverModule);
|
||||
let wasPiped = false;
|
||||
if (process.env.NODE_ENV !== "production") {
|
||||
// listen for pipe event and don't show resolve warning
|
||||
res.once("pipe", ()=>wasPiped = true);
|
||||
}
|
||||
// Call API route method
|
||||
await resolver(req, res);
|
||||
if (process.env.NODE_ENV !== "production" && !externalResolver && !(0, _utils).isResSent(res) && !wasPiped) {
|
||||
console.warn(`API resolved without sending a response for ${req.url}, this may result in stalled requests.`);
|
||||
}
|
||||
} catch (err) {
|
||||
if (err instanceof _index.ApiError) {
|
||||
(0, _index).sendError(apiRes, err.statusCode, err.message);
|
||||
} else {
|
||||
if (dev) {
|
||||
if ((0, _isError).default(err)) {
|
||||
err.page = page;
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
console.error(err);
|
||||
if (propagateError) {
|
||||
throw err;
|
||||
}
|
||||
(0, _index).sendError(apiRes, 500, "Internal Server Error");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//# sourceMappingURL=node.js.map
|
||||
1
kitabcitab/node_modules/next/dist/server/api-utils/node.js.map
generated
vendored
Normal file
1
kitabcitab/node_modules/next/dist/server/api-utils/node.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
kitabcitab/node_modules/next/dist/server/api-utils/web.d.ts
generated
vendored
Normal file
1
kitabcitab/node_modules/next/dist/server/api-utils/web.d.ts
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
export declare function byteLength(payload: string): number;
|
||||
10
kitabcitab/node_modules/next/dist/server/api-utils/web.js
generated
vendored
Normal file
10
kitabcitab/node_modules/next/dist/server/api-utils/web.js
generated
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.byteLength = byteLength;
|
||||
function byteLength(payload) {
|
||||
return new TextEncoder().encode(payload).buffer.byteLength;
|
||||
}
|
||||
|
||||
//# sourceMappingURL=web.js.map
|
||||
1
kitabcitab/node_modules/next/dist/server/api-utils/web.js.map
generated
vendored
Normal file
1
kitabcitab/node_modules/next/dist/server/api-utils/web.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../server/api-utils/web.ts"],"names":["byteLength","payload","TextEncoder","encode","buffer"],"mappings":"AAEA;;;;QAAgBA,UAAU,GAAVA,UAAU;AAAnB,SAASA,UAAU,CAACC,OAAe,EAAU;IAClD,OAAO,IAAIC,WAAW,EAAE,CAACC,MAAM,CAACF,OAAO,CAAC,CAACG,MAAM,CAACJ,UAAU,CAAA;CAC3D"}
|
||||
Reference in New Issue
Block a user