@preprio/prepr-nextjs
Version:
Next.js package for Prepr CMS preview functionality with advanced debugging and visual editing capabilities
201 lines (197 loc) • 6.18 kB
JavaScript
import { ipAddress } from '@vercel/functions';
import { NextResponse } from 'next/server';
// src/middleware/index.ts
// package.json
var version = "2.0.0";
var package_default = {
name: "@preprio/prepr-nextjs",
version,
description: "Next.js package for Prepr CMS preview functionality with advanced debugging and visual editing capabilities",
main: "dist/react/index.cjs",
types: "./dist/react/index.d.ts",
module: "./dist/react/index.js",
type: "module",
scripts: {
build: "tsup",
dev: "tsup --watch",
clean: "rm -rf dist",
check: 'tsc --noEmit && eslint src --ext .ts,.tsx && prettier --check "src/**/*.{ts,tsx,js,jsx,json,md}"',
fix: 'eslint src --ext .ts,.tsx --fix && prettier --write "src/**/*.{ts,tsx,js,jsx,json,md}"',
changeset: "changeset",
version: "changeset version",
release: "pnpm run build && changeset publish",
prepublishOnly: "pnpm run check && pnpm run build"
},
exports: {
"./middleware": {
import: "./dist/middleware/index.js",
types: "./dist/middleware/index.d.ts",
require: "./dist/middleware/index.cjs"
},
"./server": {
import: "./dist/server/index.js",
types: "./dist/server/index.d.ts",
require: "./dist/server/index.cjs"
},
"./react": {
import: "./dist/react/index.js",
types: "./dist/react/index.d.ts",
require: "./dist/react/index.cjs"
},
"./utils": {
import: "./dist/utils/index.js",
types: "./dist/utils/index.d.ts",
require: "./dist/utils/index.cjs"
},
"./types": {
import: "./dist/types/index.js",
types: "./dist/types/index.d.ts",
require: "./dist/types/index.cjs"
},
"./index.css": {
import: "./dist/index.css",
require: "./dist/index.css"
}
},
files: [
"dist",
"package.json"
],
keywords: [
"prepr",
"cms",
"nextjs",
"preview",
"visual-editing",
"headless-cms",
"react",
"typescript",
"debug",
"stega"
],
author: "Preprio",
license: "MIT",
packageManager: "pnpm@10.5.2",
devDependencies: {
"@changesets/cli": "^2.29.5",
"@eslint/js": "^9.25.1",
"@types/node": "^20.11.5",
"@types/react": "19.1.0",
"@types/react-dom": "19.1.2",
"@typescript-eslint/eslint-plugin": "^8.31.1",
"@typescript-eslint/parser": "^8.31.1",
autoprefixer: "^10.4.21",
cssnano: "^7.0.7",
eslint: "^9.25.1",
"eslint-config-prettier": "^10.1.2",
"eslint-plugin-prettier": "^5.2.6",
"eslint-plugin-react": "^7.37.2",
"eslint-plugin-react-hooks": "^5.0.0",
next: "15.3.1",
postcss: "^8",
prettier: "^3.5.3",
"prettier-plugin-tailwindcss": "^0.5.12",
react: "^19.1.0",
"react-dom": "^19.1.0",
tailwindcss: "^3.4.17",
tsup: "^8.5.0",
typescript: "^5.8.3"
},
peerDependencies: {
next: "^15.0.0 || ^14.0.0 || ^13.0.0",
react: "^19.0.0 || ^18.0.0 || ^17.0.0 ",
"react-dom": "^19.0.0 || ^18.0.0 || ^17.0.0"
},
dependencies: {
"@headlessui/react": "^2.2.0",
"@vercel/functions": "^2.0.0",
"@vercel/stega": "^0.1.2",
clsx: "^2.1.1",
"postcss-cli": "^11.0.1",
"tailwind-merge": "^3.0.1"
}
};
// src/middleware/index.ts
function createPreprMiddleware(request, responseOrOptions, options) {
var _a, _b, _c, _d;
let response;
let finalOptions;
if (responseOrOptions && "headers" in responseOrOptions) {
response = responseOrOptions;
finalOptions = options;
} else {
response = NextResponse.next();
finalOptions = responseOrOptions;
}
if (!process.env.PREPR_GRAPHQL_URL) {
console.error("PREPR_GRAPHQL_URL is not set");
}
request.nextUrl.searchParams.forEach((value, key) => {
switch (key) {
case "utm_source":
response.headers.set("Prepr-Context-utm_source", value);
break;
case "utm_medium":
response.headers.set("Prepr-Context-utm_medium", value);
break;
case "utm_term":
response.headers.set("Prepr-Context-utm_term", value);
break;
case "utm_content":
response.headers.set("Prepr-Context-utm_content", value);
break;
case "utm_campaign":
response.headers.set("Prepr-Context-utm_campaign", value);
break;
}
});
const referrer = request.headers.get("referer");
if (referrer) {
response.headers.set("Prepr-Context-initial_referral", referrer);
}
response.headers.set("Prepr-Package", version);
const ip = ipAddress(request);
if (ip) {
response.headers.set("Prepr-Visitor-IP", ip);
}
const hutkCookie = (_a = request.cookies.get("hubspotutk")) == null ? void 0 : _a.value;
if (hutkCookie) {
response.headers.set("Prepr-Hubspot-Id", hutkCookie);
}
let cookie = (_b = request.cookies.get("__prepr_uid")) == null ? void 0 : _b.value;
if (!cookie) {
cookie = crypto.randomUUID();
response.cookies.set("__prepr_uid", cookie, {
maxAge: 1 * 365 * 24 * 60
// Set for one year
});
response.headers.set("Prepr-Customer-Id-Created", "true");
}
response.headers.set("Prepr-Customer-Id", cookie);
if (!(finalOptions == null ? void 0 : finalOptions.preview) || process.env.PREPR_ENV !== "preview") {
return response;
}
response.headers.set("Prepr-Preview-Bar", "true");
const segmentCookie = (_c = request.cookies.get("Prepr-Segments")) == null ? void 0 : _c.value;
if (segmentCookie) {
response.headers.set("Prepr-Segments", segmentCookie);
}
const abCookie = (_d = request.cookies.get("Prepr-ABtesting")) == null ? void 0 : _d.value;
if (abCookie) {
response.headers.set("Prepr-ABtesting", abCookie);
}
request.nextUrl.searchParams.forEach((value, key) => {
if (key === "prepr_preview_ab") {
response.headers.set("Prepr-ABtesting", value);
response.cookies.set("Prepr-ABtesting", value);
}
if (key === "prepr_preview_segment") {
response.headers.set("Prepr-Segments", value);
response.cookies.set("Prepr-Segments", value);
}
});
return response;
}
export { createPreprMiddleware, package_default };
//# sourceMappingURL=chunk-C6L3X6KZ.js.map
//# sourceMappingURL=chunk-C6L3X6KZ.js.map