@preprio/prepr-nextjs 2.1.2 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -36
- package/dist/chunk-3HGRH7FO.js +207 -0
- package/dist/chunk-3HGRH7FO.js.map +1 -0
- package/dist/chunk-6JKK7JBP.js +2 -0
- package/dist/{chunk-Y65HR6LY.js.map → chunk-6JKK7JBP.js.map} +1 -1
- package/dist/chunk-J5SXB377.js +207 -0
- package/dist/chunk-J5SXB377.js.map +1 -0
- package/dist/chunk-QL7ACWMP.js +207 -0
- package/dist/chunk-QL7ACWMP.js.map +1 -0
- package/dist/chunk-Y4KREOMP.js +2 -0
- package/dist/chunk-Y4KREOMP.js.map +1 -0
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/middleware/index.cjs +1 -1
- package/dist/middleware/index.cjs.map +1 -1
- package/dist/middleware/index.js +1 -1
- package/dist/react/index.cjs +2 -2
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.js +2 -2
- package/dist/react/index.js.map +1 -1
- package/dist/server/index.cjs +1 -1
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.js +1 -1
- package/package.json +7 -7
- package/dist/chunk-Y65HR6LY.js +0 -2
package/README.md
CHANGED
|
@@ -787,12 +787,45 @@ try {
|
|
|
787
787
|
Enable debug logging in development:
|
|
788
788
|
|
|
789
789
|
```typescript
|
|
790
|
-
<PreprToolbarProvider
|
|
790
|
+
<PreprToolbarProvider
|
|
791
791
|
props={toolbarProps}
|
|
792
792
|
options={{ debug: true }}
|
|
793
793
|
>
|
|
794
794
|
```
|
|
795
795
|
|
|
796
|
+
### Manual Stega Handling (v2.1.* and below)
|
|
797
|
+
|
|
798
|
+
**Note**: This section only applies to versions 2.1.* and below. Version 2.2.0+ handles stega encoding automatically.
|
|
799
|
+
|
|
800
|
+
In older versions, stega-encoded text could cause layout shifts with `letter-spacing` or `ReactWrapBalancer`. You needed to manually clean the text using `vercelStegaSplit`:
|
|
801
|
+
|
|
802
|
+
```typescript
|
|
803
|
+
import { vercelStegaSplit } from '@vercel/stega'
|
|
804
|
+
|
|
805
|
+
export default function Component({ encodedText }: { encodedText: string }) {
|
|
806
|
+
const { cleaned, encoded } = vercelStegaSplit(encodedText)
|
|
807
|
+
|
|
808
|
+
return (
|
|
809
|
+
<p data-prepr-edit-target>
|
|
810
|
+
{cleaned}
|
|
811
|
+
{encoded && (
|
|
812
|
+
<span className="hidden" suppressHydrationWarning>
|
|
813
|
+
{encoded}
|
|
814
|
+
</span>
|
|
815
|
+
)}
|
|
816
|
+
</p>
|
|
817
|
+
)
|
|
818
|
+
}
|
|
819
|
+
```
|
|
820
|
+
|
|
821
|
+
**Key points for manual handling (legacy approach)**:
|
|
822
|
+
- Place `data-prepr-edit-target` on the root element (e.g., `<p>`)
|
|
823
|
+
- Render the cleaned text normally
|
|
824
|
+
- Put encoded text in a hidden `<span>` for edit mode detection
|
|
825
|
+
- Add `suppressHydrationWarning` to prevent React warnings
|
|
826
|
+
|
|
827
|
+
**Upgrade to v2.2.0+** to eliminate this manual work and benefit from automatic cleaning!
|
|
828
|
+
|
|
796
829
|
## 📊 How It Works
|
|
797
830
|
|
|
798
831
|
### Middleware Functionality
|
|
@@ -815,41 +848,22 @@ The toolbar provides:
|
|
|
815
848
|
### Visual Editing
|
|
816
849
|
|
|
817
850
|
When edit mode is enabled, the package:
|
|
818
|
-
1. **
|
|
819
|
-
2. **
|
|
820
|
-
3. **
|
|
821
|
-
4. **
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
```typescript
|
|
836
|
-
import { vercelStegaSplit } from '@vercel/stega';
|
|
837
|
-
|
|
838
|
-
function MyComponent({ text }) {
|
|
839
|
-
const { cleaned, encoded } = vercelStegaSplit(text);
|
|
840
|
-
|
|
841
|
-
return (
|
|
842
|
-
<h1 data-prepr-edit-target>
|
|
843
|
-
{cleaned}
|
|
844
|
-
<span style={{ display: 'none' }}>{encoded}</span>
|
|
845
|
-
</h1>
|
|
846
|
-
);
|
|
847
|
-
}
|
|
848
|
-
```
|
|
849
|
-
|
|
850
|
-
The stega scan will automatically detect elements with `data-prepr-edit-target` and look for encoded data in hidden spans within them. The element itself (not the hidden span) will be marked as editable and highlighted correctly.
|
|
851
|
-
|
|
852
|
-
**Note:** The hidden span should have `display: none` or `visibility: hidden` set via inline styles or CSS. The scan will detect these hidden spans and extract the encoded data to mark the parent element correctly.
|
|
851
|
+
1. **Auto-cleans stega encoding** (v2.2.0+): Automatically removes invisible Unicode characters that cause layout shifts
|
|
852
|
+
2. **Scans content**: Identifies editable content using Stega encoding
|
|
853
|
+
3. **Highlights elements**: Shows proximity-based highlighting
|
|
854
|
+
4. **Provides overlays**: Click-to-edit functionality
|
|
855
|
+
5. **Syncs with Prepr**: Direct integration with Prepr's editing interface
|
|
856
|
+
|
|
857
|
+
#### Automatic Stega Cleaning (v2.2.0+)
|
|
858
|
+
|
|
859
|
+
Version 2.2.0 introduces automatic stega text cleaning in preview mode:
|
|
860
|
+
- Stega-encoded text is automatically cleaned after page load
|
|
861
|
+
- No layout shifts from invisible Unicode characters
|
|
862
|
+
- Works seamlessly with `letter-spacing` and `ReactWrapBalancer`
|
|
863
|
+
- Data attributes persist for instant edit mode activation
|
|
864
|
+
- Backward compatible with manual split patterns
|
|
865
|
+
|
|
866
|
+
No manual stega handling is required in v2.2.0 and later!
|
|
853
867
|
|
|
854
868
|
## 🔄 Upgrading from v1 to v2
|
|
855
869
|
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { ipAddress } from '@vercel/functions';
|
|
2
|
+
import { NextResponse } from 'next/server';
|
|
3
|
+
|
|
4
|
+
// src/middleware/index.ts
|
|
5
|
+
|
|
6
|
+
// package.json
|
|
7
|
+
var version = "2.1.3";
|
|
8
|
+
var package_default = {
|
|
9
|
+
name: "@preprio/prepr-nextjs",
|
|
10
|
+
version,
|
|
11
|
+
description: "Next.js package for Prepr CMS preview functionality with advanced debugging and visual editing capabilities",
|
|
12
|
+
main: "dist/react/index.cjs",
|
|
13
|
+
types: "./dist/react/index.d.ts",
|
|
14
|
+
module: "./dist/react/index.js",
|
|
15
|
+
type: "module",
|
|
16
|
+
scripts: {
|
|
17
|
+
build: "tsup",
|
|
18
|
+
dev: "tsup --watch",
|
|
19
|
+
clean: "rm -rf dist",
|
|
20
|
+
check: 'tsc --noEmit && eslint src --ext .ts,.tsx && prettier --check "src/**/*.{ts,tsx,js,jsx,json,md}"',
|
|
21
|
+
fix: 'eslint src --ext .ts,.tsx --fix && prettier --write "src/**/*.{ts,tsx,js,jsx,json,md}"',
|
|
22
|
+
changeset: "changeset",
|
|
23
|
+
version: "changeset version",
|
|
24
|
+
release: "pnpm run build && changeset publish",
|
|
25
|
+
prepublishOnly: "pnpm run check && pnpm run build"
|
|
26
|
+
},
|
|
27
|
+
exports: {
|
|
28
|
+
"./middleware": {
|
|
29
|
+
import: "./dist/middleware/index.js",
|
|
30
|
+
types: "./dist/middleware/index.d.ts",
|
|
31
|
+
require: "./dist/middleware/index.cjs"
|
|
32
|
+
},
|
|
33
|
+
"./server": {
|
|
34
|
+
import: "./dist/server/index.js",
|
|
35
|
+
types: "./dist/server/index.d.ts",
|
|
36
|
+
require: "./dist/server/index.cjs"
|
|
37
|
+
},
|
|
38
|
+
"./react": {
|
|
39
|
+
import: "./dist/react/index.js",
|
|
40
|
+
types: "./dist/react/index.d.ts",
|
|
41
|
+
require: "./dist/react/index.cjs"
|
|
42
|
+
},
|
|
43
|
+
"./utils": {
|
|
44
|
+
import: "./dist/utils/index.js",
|
|
45
|
+
types: "./dist/utils/index.d.ts",
|
|
46
|
+
require: "./dist/utils/index.cjs"
|
|
47
|
+
},
|
|
48
|
+
"./types": {
|
|
49
|
+
import: "./dist/types/index.js",
|
|
50
|
+
types: "./dist/types/index.d.ts",
|
|
51
|
+
require: "./dist/types/index.cjs"
|
|
52
|
+
},
|
|
53
|
+
"./index.css": {
|
|
54
|
+
import: "./dist/index.css",
|
|
55
|
+
require: "./dist/index.css"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
files: [
|
|
59
|
+
"dist",
|
|
60
|
+
"package.json"
|
|
61
|
+
],
|
|
62
|
+
keywords: [
|
|
63
|
+
"prepr",
|
|
64
|
+
"cms",
|
|
65
|
+
"nextjs",
|
|
66
|
+
"preview",
|
|
67
|
+
"visual-editing",
|
|
68
|
+
"headless-cms",
|
|
69
|
+
"react",
|
|
70
|
+
"typescript",
|
|
71
|
+
"debug",
|
|
72
|
+
"stega"
|
|
73
|
+
],
|
|
74
|
+
author: "Preprio",
|
|
75
|
+
license: "MIT",
|
|
76
|
+
packageManager: "pnpm@10.5.2",
|
|
77
|
+
devDependencies: {
|
|
78
|
+
"@changesets/cli": "^2.29.5",
|
|
79
|
+
"@eslint/js": "^9.25.1",
|
|
80
|
+
"@types/node": "^20.11.5",
|
|
81
|
+
"@types/react": "19.2.2",
|
|
82
|
+
"@types/react-dom": "19.2.2",
|
|
83
|
+
"@typescript-eslint/eslint-plugin": "^8.31.1",
|
|
84
|
+
"@typescript-eslint/parser": "^8.31.1",
|
|
85
|
+
autoprefixer: "^10.4.21",
|
|
86
|
+
cssnano: "^7.0.7",
|
|
87
|
+
eslint: "^9.25.1",
|
|
88
|
+
"eslint-config-prettier": "^10.1.2",
|
|
89
|
+
"eslint-plugin-prettier": "^5.2.6",
|
|
90
|
+
"eslint-plugin-react": "^7.37.2",
|
|
91
|
+
"eslint-plugin-react-hooks": "^5.0.0",
|
|
92
|
+
next: "16.0.10",
|
|
93
|
+
postcss: "^8",
|
|
94
|
+
prettier: "^3.5.3",
|
|
95
|
+
"prettier-plugin-tailwindcss": "^0.5.12",
|
|
96
|
+
react: "^19.2.3",
|
|
97
|
+
"react-dom": "^19.2.3",
|
|
98
|
+
tailwindcss: "^3.4.17",
|
|
99
|
+
tsup: "^8.5.0",
|
|
100
|
+
typescript: "^5.8.3"
|
|
101
|
+
},
|
|
102
|
+
peerDependencies: {
|
|
103
|
+
next: "^16.0.3 || ^15.0.5 || ^15.1.9 || ^15.2.6 || ^15.3.6 || ^15.4.8 || ^15.5.7 || ^14.0.0 || ^13.0.0",
|
|
104
|
+
react: "^19.0.0 || ^18.0.0 || ^17.0.0 ",
|
|
105
|
+
"react-dom": "^19.0.0 || ^18.0.0 || ^17.0.0"
|
|
106
|
+
},
|
|
107
|
+
dependencies: {
|
|
108
|
+
"@headlessui/react": "^2.2.0",
|
|
109
|
+
"@vercel/functions": "^2.0.0",
|
|
110
|
+
"@vercel/stega": "^0.1.2",
|
|
111
|
+
clsx: "^2.1.1",
|
|
112
|
+
"postcss-cli": "^11.0.1",
|
|
113
|
+
"tailwind-merge": "^3.0.1",
|
|
114
|
+
zustand: "^5.0.8"
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
// src/middleware/index.ts
|
|
119
|
+
function createPreprMiddleware(request, responseOrOptions, options) {
|
|
120
|
+
var _a, _b, _c, _d, _e;
|
|
121
|
+
let response;
|
|
122
|
+
let finalOptions;
|
|
123
|
+
if (responseOrOptions && "headers" in responseOrOptions) {
|
|
124
|
+
response = responseOrOptions;
|
|
125
|
+
finalOptions = options;
|
|
126
|
+
} else {
|
|
127
|
+
response = NextResponse.next();
|
|
128
|
+
finalOptions = responseOrOptions;
|
|
129
|
+
}
|
|
130
|
+
request.nextUrl.searchParams.forEach((value, key) => {
|
|
131
|
+
switch (key) {
|
|
132
|
+
case "utm_source":
|
|
133
|
+
response.headers.set("Prepr-Context-utm_source", value);
|
|
134
|
+
break;
|
|
135
|
+
case "utm_medium":
|
|
136
|
+
response.headers.set("Prepr-Context-utm_medium", value);
|
|
137
|
+
break;
|
|
138
|
+
case "utm_term":
|
|
139
|
+
response.headers.set("Prepr-Context-utm_term", value);
|
|
140
|
+
break;
|
|
141
|
+
case "utm_content":
|
|
142
|
+
response.headers.set("Prepr-Context-utm_content", value);
|
|
143
|
+
break;
|
|
144
|
+
case "utm_campaign":
|
|
145
|
+
response.headers.set("Prepr-Context-utm_campaign", value);
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
const referrer = request.headers.get("referer");
|
|
150
|
+
if (referrer) {
|
|
151
|
+
response.headers.set("Prepr-Context-initial_referral", referrer);
|
|
152
|
+
}
|
|
153
|
+
response.headers.set("Prepr-Package", version);
|
|
154
|
+
let ip = ipAddress(request) || null;
|
|
155
|
+
if (request.headers.get("Cf-Connecting-Ip")) {
|
|
156
|
+
ip = request.headers.get("Cf-Connecting-Ip");
|
|
157
|
+
}
|
|
158
|
+
if (ip) {
|
|
159
|
+
response.headers.set("Prepr-Visitor-IP", ip);
|
|
160
|
+
}
|
|
161
|
+
const hutkCookie = (_a = request.cookies.get("hubspotutk")) == null ? void 0 : _a.value;
|
|
162
|
+
if (hutkCookie) {
|
|
163
|
+
response.headers.set("Prepr-Hubspot-Id", hutkCookie);
|
|
164
|
+
}
|
|
165
|
+
let cookie = (_b = request.cookies.get("__prepr_uid")) == null ? void 0 : _b.value;
|
|
166
|
+
if (!cookie) {
|
|
167
|
+
cookie = crypto.randomUUID();
|
|
168
|
+
response.cookies.set("__prepr_uid", cookie, {
|
|
169
|
+
maxAge: 1 * 365 * 24 * 60
|
|
170
|
+
// Set for one year
|
|
171
|
+
});
|
|
172
|
+
response.headers.set("Prepr-Customer-Id-Created", "true");
|
|
173
|
+
}
|
|
174
|
+
response.headers.set("Prepr-Customer-Id", cookie);
|
|
175
|
+
if (!(finalOptions == null ? void 0 : finalOptions.preview) || process.env.PREPR_ENV !== "preview") {
|
|
176
|
+
return response;
|
|
177
|
+
}
|
|
178
|
+
const previewModeCookie = (_c = request.cookies.get("Prepr-Preview-Mode")) == null ? void 0 : _c.value;
|
|
179
|
+
const previewModeEnabled = previewModeCookie !== "false";
|
|
180
|
+
if (!previewModeEnabled) {
|
|
181
|
+
return response;
|
|
182
|
+
}
|
|
183
|
+
response.headers.set("Prepr-Preview-Bar", "true");
|
|
184
|
+
const segmentCookie = (_d = request.cookies.get("Prepr-Segments")) == null ? void 0 : _d.value;
|
|
185
|
+
if (segmentCookie) {
|
|
186
|
+
response.headers.set("Prepr-Segments", segmentCookie);
|
|
187
|
+
}
|
|
188
|
+
const abCookie = (_e = request.cookies.get("Prepr-ABtesting")) == null ? void 0 : _e.value;
|
|
189
|
+
if (abCookie) {
|
|
190
|
+
response.headers.set("Prepr-ABtesting", abCookie);
|
|
191
|
+
}
|
|
192
|
+
request.nextUrl.searchParams.forEach((value, key) => {
|
|
193
|
+
if (key === "prepr_preview_ab") {
|
|
194
|
+
response.headers.set("Prepr-ABtesting", value);
|
|
195
|
+
response.cookies.set("Prepr-ABtesting", value);
|
|
196
|
+
}
|
|
197
|
+
if (key === "prepr_preview_segment") {
|
|
198
|
+
response.headers.set("Prepr-Segments", value);
|
|
199
|
+
response.cookies.set("Prepr-Segments", value);
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
return response;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export { createPreprMiddleware, package_default };
|
|
206
|
+
//# sourceMappingURL=chunk-3HGRH7FO.js.map
|
|
207
|
+
//# sourceMappingURL=chunk-3HGRH7FO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/middleware/index.ts"],"names":[],"mappings":"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","file":"chunk-3HGRH7FO.js","sourcesContent":["{\n \"name\": \"@preprio/prepr-nextjs\",\n \"version\": \"2.1.3\",\n \"description\": \"Next.js package for Prepr CMS preview functionality with advanced debugging and visual editing capabilities\",\n \"main\": \"dist/react/index.cjs\",\n \"types\": \"./dist/react/index.d.ts\",\n \"module\": \"./dist/react/index.js\",\n \"type\": \"module\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"clean\": \"rm -rf dist\",\n \"check\": \"tsc --noEmit && eslint src --ext .ts,.tsx && prettier --check \\\"src/**/*.{ts,tsx,js,jsx,json,md}\\\"\",\n \"fix\": \"eslint src --ext .ts,.tsx --fix && prettier --write \\\"src/**/*.{ts,tsx,js,jsx,json,md}\\\"\",\n \"changeset\": \"changeset\",\n \"version\": \"changeset version\",\n \"release\": \"pnpm run build && changeset publish\",\n \"prepublishOnly\": \"pnpm run check && pnpm run build\"\n },\n \"exports\": {\n \"./middleware\": {\n \"import\": \"./dist/middleware/index.js\",\n \"types\": \"./dist/middleware/index.d.ts\",\n \"require\": \"./dist/middleware/index.cjs\"\n },\n \"./server\": {\n \"import\": \"./dist/server/index.js\",\n \"types\": \"./dist/server/index.d.ts\",\n \"require\": \"./dist/server/index.cjs\"\n },\n \"./react\": {\n \"import\": \"./dist/react/index.js\",\n \"types\": \"./dist/react/index.d.ts\",\n \"require\": \"./dist/react/index.cjs\"\n },\n \"./utils\": {\n \"import\": \"./dist/utils/index.js\",\n \"types\": \"./dist/utils/index.d.ts\",\n \"require\": \"./dist/utils/index.cjs\"\n },\n \"./types\": {\n \"import\": \"./dist/types/index.js\",\n \"types\": \"./dist/types/index.d.ts\",\n \"require\": \"./dist/types/index.cjs\"\n },\n \"./index.css\": {\n \"import\": \"./dist/index.css\",\n \"require\": \"./dist/index.css\"\n }\n },\n \"files\": [\n \"dist\",\n \"package.json\"\n ],\n \"keywords\": [\n \"prepr\",\n \"cms\",\n \"nextjs\",\n \"preview\",\n \"visual-editing\",\n \"headless-cms\",\n \"react\",\n \"typescript\",\n \"debug\",\n \"stega\"\n ],\n \"author\": \"Preprio\",\n \"license\": \"MIT\",\n \"packageManager\": \"pnpm@10.5.2\",\n \"devDependencies\": {\n \"@changesets/cli\": \"^2.29.5\",\n \"@eslint/js\": \"^9.25.1\",\n \"@types/node\": \"^20.11.5\",\n \"@types/react\": \"19.2.2\",\n \"@types/react-dom\": \"19.2.2\",\n \"@typescript-eslint/eslint-plugin\": \"^8.31.1\",\n \"@typescript-eslint/parser\": \"^8.31.1\",\n \"autoprefixer\": \"^10.4.21\",\n \"cssnano\": \"^7.0.7\",\n \"eslint\": \"^9.25.1\",\n \"eslint-config-prettier\": \"^10.1.2\",\n \"eslint-plugin-prettier\": \"^5.2.6\",\n \"eslint-plugin-react\": \"^7.37.2\",\n \"eslint-plugin-react-hooks\": \"^5.0.0\",\n \"next\": \"16.0.10\",\n \"postcss\": \"^8\",\n \"prettier\": \"^3.5.3\",\n \"prettier-plugin-tailwindcss\": \"^0.5.12\",\n \"react\": \"^19.2.3\",\n \"react-dom\": \"^19.2.3\",\n \"tailwindcss\": \"^3.4.17\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\"\n },\n \"peerDependencies\": {\n \"next\": \"^16.0.3 || ^15.0.5 || ^15.1.9 || ^15.2.6 || ^15.3.6 || ^15.4.8 || ^15.5.7 || ^14.0.0 || ^13.0.0\",\n \"react\": \"^19.0.0 || ^18.0.0 || ^17.0.0 \",\n \"react-dom\": \"^19.0.0 || ^18.0.0 || ^17.0.0\"\n },\n \"dependencies\": {\n \"@headlessui/react\": \"^2.2.0\",\n \"@vercel/functions\": \"^2.0.0\",\n \"@vercel/stega\": \"^0.1.2\",\n \"clsx\": \"^2.1.1\",\n \"postcss-cli\": \"^11.0.1\",\n \"tailwind-merge\": \"^3.0.1\",\n \"zustand\": \"^5.0.8\"\n }\n}\n\n","import { ipAddress } from '@vercel/functions';\nimport { NextRequest, NextResponse } from 'next/server';\nimport { version } from '../../package.json';\n\nexport interface PreprMiddlewareOptions {\n preview?: boolean;\n}\n\n/**\n * Middleware to set Prepr headers for personalization.\n *\n * @overload\n * @param request - NextRequest object\n * @param options - Options object\n * @returns NextResponse with Prepr headers set\n */\nexport default function createPreprMiddleware(\n request: NextRequest,\n options?: PreprMiddlewareOptions\n): NextResponse;\n\n/**\n * Middleware to set Prepr headers for personalization.\n *\n * @overload\n * @param request - NextRequest object\n * @param response - NextResponse object to chain with\n * @param options - Options object\n * @returns NextResponse with Prepr headers set\n */\nexport default function createPreprMiddleware(\n request: NextRequest,\n response: NextResponse,\n options?: PreprMiddlewareOptions\n): NextResponse;\n\n/**\n * Implementation of createPreprMiddleware with function overloads\n */\nexport default function createPreprMiddleware(\n request: NextRequest,\n responseOrOptions?: NextResponse | PreprMiddlewareOptions,\n options?: PreprMiddlewareOptions\n): NextResponse {\n let response: NextResponse;\n let finalOptions: PreprMiddlewareOptions | undefined;\n\n // Handle overloads\n if (responseOrOptions && 'headers' in responseOrOptions) {\n // Second parameter is NextResponse\n response = responseOrOptions;\n finalOptions = options;\n } else {\n // Second parameter is options or undefined\n response = NextResponse.next();\n finalOptions = responseOrOptions as PreprMiddlewareOptions | undefined;\n }\n\n // Map over search params and set headers\n request.nextUrl.searchParams.forEach((value, key) => {\n switch (key) {\n case 'utm_source':\n response.headers.set('Prepr-Context-utm_source', value);\n break;\n case 'utm_medium':\n response.headers.set('Prepr-Context-utm_medium', value);\n break;\n case 'utm_term':\n response.headers.set('Prepr-Context-utm_term', value);\n break;\n case 'utm_content':\n response.headers.set('Prepr-Context-utm_content', value);\n break;\n case 'utm_campaign':\n response.headers.set('Prepr-Context-utm_campaign', value);\n break;\n }\n });\n\n // Set initial referral header\n const referrer = request.headers.get('referer');\n if (referrer) {\n response.headers.set('Prepr-Context-initial_referral', referrer);\n }\n\n // Set Prepr version header\n response.headers.set('Prepr-Package', version);\n\n let ip: string | null = ipAddress(request) || null;\n\n if (request.headers.get('Cf-Connecting-Ip')) {\n ip = request.headers.get('Cf-Connecting-Ip');\n }\n\n if (ip) {\n response.headers.set('Prepr-Visitor-IP', ip);\n }\n\n // Set HubSpot cookie header\n const hutkCookie = request.cookies.get('hubspotutk')?.value;\n if (hutkCookie) {\n response.headers.set('Prepr-Hubspot-Id', hutkCookie);\n }\n\n // Check for existing Prepr UID cookie or create a new one\n let cookie = request.cookies.get('__prepr_uid')?.value;\n if (!cookie) {\n cookie = crypto.randomUUID();\n response.cookies.set('__prepr_uid', cookie, {\n maxAge: 1 * 365 * 24 * 60, // Set for one year\n });\n response.headers.set('Prepr-Customer-Id-Created', 'true');\n }\n\n // Set the Prepr Customer ID header\n response.headers.set('Prepr-Customer-Id', cookie);\n\n // If preview mode is not enabled, return the response\n if (!finalOptions?.preview || process.env.PREPR_ENV !== 'preview') {\n return response;\n }\n\n // Respect preview mode toggle cookie from client\n const previewModeCookie = request.cookies.get('Prepr-Preview-Mode')?.value;\n const previewModeEnabled = previewModeCookie !== 'false';\n\n if (!previewModeEnabled) {\n // When preview mode is disabled, do not set preview headers\n return response;\n }\n\n // If preview mode is enabled, set additional headers\n response.headers.set('Prepr-Preview-Bar', 'true');\n\n // Set Prepr Preview Segment and AB test cookies\n const segmentCookie = request.cookies.get('Prepr-Segments')?.value;\n if (segmentCookie) {\n response.headers.set('Prepr-Segments', segmentCookie);\n }\n\n const abCookie = request.cookies.get('Prepr-ABtesting')?.value;\n if (abCookie) {\n response.headers.set('Prepr-ABtesting', abCookie);\n }\n\n // Set Prepr Preview Segment and AB test headers from query params\n request.nextUrl.searchParams.forEach((value, key) => {\n if (key === 'prepr_preview_ab') {\n response.headers.set('Prepr-ABtesting', value);\n response.cookies.set('Prepr-ABtesting', value);\n }\n\n if (key === 'prepr_preview_segment') {\n response.headers.set('Prepr-Segments', value);\n response.cookies.set('Prepr-Segments', value);\n }\n });\n\n return response;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {ipAddress}from'@vercel/functions';import {NextResponse}from'next/server';var f="2.2.0";var C={name:"@preprio/prepr-nextjs",version:f,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.2.2","@types/react-dom":"19.2.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:"16.0.10",postcss:"^8",prettier:"^3.5.3","prettier-plugin-tailwindcss":"^0.5.12",react:"^19.2.3","react-dom":"^19.2.3",tailwindcss:"^3.4.17",tsup:"^8.5.0",typescript:"^5.8.3"},peerDependencies:{next:"^16.0.3 || ^15.0.5 || ^15.1.9 || ^15.2.6 || ^15.3.6 || ^15.4.8 || ^15.5.7 || ^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",zustand:"^5.0.8"}};function j(t,i,w){var u,m,x,g,h;let e,s;i&&"headers"in i?(e=i,s=w):(e=NextResponse.next(),s=i),t.nextUrl.searchParams.forEach((r,d)=>{switch(d){case "utm_source":e.headers.set("Prepr-Context-utm_source",r);break;case "utm_medium":e.headers.set("Prepr-Context-utm_medium",r);break;case "utm_term":e.headers.set("Prepr-Context-utm_term",r);break;case "utm_content":e.headers.set("Prepr-Context-utm_content",r);break;case "utm_campaign":e.headers.set("Prepr-Context-utm_campaign",r);break}});let a=t.headers.get("referer");a&&e.headers.set("Prepr-Context-initial_referral",a),e.headers.set("Prepr-Package",f);let p=ipAddress(t)||null;t.headers.get("Cf-Connecting-Ip")&&(p=t.headers.get("Cf-Connecting-Ip")),p&&e.headers.set("Prepr-Visitor-IP",p);let o=(u=t.cookies.get("hubspotutk"))==null?void 0:u.value;o&&e.headers.set("Prepr-Hubspot-Id",o);let n=(m=t.cookies.get("__prepr_uid"))==null?void 0:m.value;if(n||(n=crypto.randomUUID(),e.cookies.set("__prepr_uid",n,{maxAge:1*365*24*60}),e.headers.set("Prepr-Customer-Id-Created","true")),e.headers.set("Prepr-Customer-Id",n),!(s!=null&&s.preview)||process.env.PREPR_ENV!=="preview"||!(((x=t.cookies.get("Prepr-Preview-Mode"))==null?void 0:x.value)!=="false"))return e;e.headers.set("Prepr-Preview-Bar","true");let c=(g=t.cookies.get("Prepr-Segments"))==null?void 0:g.value;c&&e.headers.set("Prepr-Segments",c);let l=(h=t.cookies.get("Prepr-ABtesting"))==null?void 0:h.value;return l&&e.headers.set("Prepr-ABtesting",l),t.nextUrl.searchParams.forEach((r,d)=>{d==="prepr_preview_ab"&&(e.headers.set("Prepr-ABtesting",r),e.cookies.set("Prepr-ABtesting",r)),d==="prepr_preview_segment"&&(e.headers.set("Prepr-Segments",r),e.cookies.set("Prepr-Segments",r));}),e}export{C as a,j as b};//# sourceMappingURL=chunk-6JKK7JBP.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-6JKK7JBP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/middleware/index.ts"],"names":["version","package_default","createPreprMiddleware","request","responseOrOptions","options","_a","_b","_c","_d","_e","response","finalOptions","NextResponse","value","key","referrer","ip","ipAddress","hutkCookie","cookie","segmentCookie","abCookie"],"mappings":"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","file":"chunk-Y65HR6LY.js","sourcesContent":["{\n \"name\": \"@preprio/prepr-nextjs\",\n \"version\": \"2.1.2\",\n \"description\": \"Next.js package for Prepr CMS preview functionality with advanced debugging and visual editing capabilities\",\n \"main\": \"dist/react/index.cjs\",\n \"types\": \"./dist/react/index.d.ts\",\n \"module\": \"./dist/react/index.js\",\n \"type\": \"module\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"clean\": \"rm -rf dist\",\n \"check\": \"tsc --noEmit && eslint src --ext .ts,.tsx && prettier --check \\\"src/**/*.{ts,tsx,js,jsx,json,md}\\\"\",\n \"fix\": \"eslint src --ext .ts,.tsx --fix && prettier --write \\\"src/**/*.{ts,tsx,js,jsx,json,md}\\\"\",\n \"changeset\": \"changeset\",\n \"version\": \"changeset version\",\n \"release\": \"pnpm run build && changeset publish\",\n \"prepublishOnly\": \"pnpm run check && pnpm run build\"\n },\n \"exports\": {\n \"./middleware\": {\n \"import\": \"./dist/middleware/index.js\",\n \"types\": \"./dist/middleware/index.d.ts\",\n \"require\": \"./dist/middleware/index.cjs\"\n },\n \"./server\": {\n \"import\": \"./dist/server/index.js\",\n \"types\": \"./dist/server/index.d.ts\",\n \"require\": \"./dist/server/index.cjs\"\n },\n \"./react\": {\n \"import\": \"./dist/react/index.js\",\n \"types\": \"./dist/react/index.d.ts\",\n \"require\": \"./dist/react/index.cjs\"\n },\n \"./utils\": {\n \"import\": \"./dist/utils/index.js\",\n \"types\": \"./dist/utils/index.d.ts\",\n \"require\": \"./dist/utils/index.cjs\"\n },\n \"./types\": {\n \"import\": \"./dist/types/index.js\",\n \"types\": \"./dist/types/index.d.ts\",\n \"require\": \"./dist/types/index.cjs\"\n },\n \"./index.css\": {\n \"import\": \"./dist/index.css\",\n \"require\": \"./dist/index.css\"\n }\n },\n \"files\": [\n \"dist\",\n \"package.json\"\n ],\n \"keywords\": [\n \"prepr\",\n \"cms\",\n \"nextjs\",\n \"preview\",\n \"visual-editing\",\n \"headless-cms\",\n \"react\",\n \"typescript\",\n \"debug\",\n \"stega\"\n ],\n \"author\": \"Preprio\",\n \"license\": \"MIT\",\n \"packageManager\": \"pnpm@10.5.2\",\n \"devDependencies\": {\n \"@changesets/cli\": \"^2.29.5\",\n \"@eslint/js\": \"^9.25.1\",\n \"@types/node\": \"^20.11.5\",\n \"@types/react\": \"19.1.0\",\n \"@types/react-dom\": \"19.1.2\",\n \"@typescript-eslint/eslint-plugin\": \"^8.31.1\",\n \"@typescript-eslint/parser\": \"^8.31.1\",\n \"autoprefixer\": \"^10.4.21\",\n \"cssnano\": \"^7.0.7\",\n \"eslint\": \"^9.25.1\",\n \"eslint-config-prettier\": \"^10.1.2\",\n \"eslint-plugin-prettier\": \"^5.2.6\",\n \"eslint-plugin-react\": \"^7.37.2\",\n \"eslint-plugin-react-hooks\": \"^5.0.0\",\n \"next\": \"15.3.1\",\n \"postcss\": \"^8\",\n \"prettier\": \"^3.5.3\",\n \"prettier-plugin-tailwindcss\": \"^0.5.12\",\n \"react\": \"^19.1.0\",\n \"react-dom\": \"^19.1.0\",\n \"tailwindcss\": \"^3.4.17\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\"\n },\n \"peerDependencies\": {\n \"next\": \"^15.0.0 || ^14.0.0 || ^13.0.0\",\n \"react\": \"^19.0.0 || ^18.0.0 || ^17.0.0 \",\n \"react-dom\": \"^19.0.0 || ^18.0.0 || ^17.0.0\"\n },\n \"dependencies\": {\n \"@headlessui/react\": \"^2.2.0\",\n \"@vercel/functions\": \"^2.0.0\",\n \"@vercel/stega\": \"^0.1.2\",\n \"clsx\": \"^2.1.1\",\n \"postcss-cli\": \"^11.0.1\",\n \"tailwind-merge\": \"^3.0.1\",\n \"zustand\": \"^5.0.8\"\n }\n}\n","import { ipAddress } from '@vercel/functions';\nimport { NextRequest, NextResponse } from 'next/server';\nimport { version } from '../../package.json';\n\nexport interface PreprMiddlewareOptions {\n preview?: boolean;\n}\n\n/**\n * Middleware to set Prepr headers for personalization.\n *\n * @overload\n * @param request - NextRequest object\n * @param options - Options object\n * @returns NextResponse with Prepr headers set\n */\nexport default function createPreprMiddleware(\n request: NextRequest,\n options?: PreprMiddlewareOptions\n): NextResponse;\n\n/**\n * Middleware to set Prepr headers for personalization.\n *\n * @overload\n * @param request - NextRequest object\n * @param response - NextResponse object to chain with\n * @param options - Options object\n * @returns NextResponse with Prepr headers set\n */\nexport default function createPreprMiddleware(\n request: NextRequest,\n response: NextResponse,\n options?: PreprMiddlewareOptions\n): NextResponse;\n\n/**\n * Implementation of createPreprMiddleware with function overloads\n */\nexport default function createPreprMiddleware(\n request: NextRequest,\n responseOrOptions?: NextResponse | PreprMiddlewareOptions,\n options?: PreprMiddlewareOptions\n): NextResponse {\n let response: NextResponse;\n let finalOptions: PreprMiddlewareOptions | undefined;\n\n // Handle overloads\n if (responseOrOptions && 'headers' in responseOrOptions) {\n // Second parameter is NextResponse\n response = responseOrOptions;\n finalOptions = options;\n } else {\n // Second parameter is options or undefined\n response = NextResponse.next();\n finalOptions = responseOrOptions as PreprMiddlewareOptions | undefined;\n }\n\n // Map over search params and set headers\n request.nextUrl.searchParams.forEach((value, key) => {\n switch (key) {\n case 'utm_source':\n response.headers.set('Prepr-Context-utm_source', value);\n break;\n case 'utm_medium':\n response.headers.set('Prepr-Context-utm_medium', value);\n break;\n case 'utm_term':\n response.headers.set('Prepr-Context-utm_term', value);\n break;\n case 'utm_content':\n response.headers.set('Prepr-Context-utm_content', value);\n break;\n case 'utm_campaign':\n response.headers.set('Prepr-Context-utm_campaign', value);\n break;\n }\n });\n\n // Set initial referral header\n const referrer = request.headers.get('referer');\n if (referrer) {\n response.headers.set('Prepr-Context-initial_referral', referrer);\n }\n\n // Set Prepr version header\n response.headers.set('Prepr-Package', version);\n\n let ip: string | null = ipAddress(request) || null;\n\n if (request.headers.get('Cf-Connecting-Ip')) {\n ip = request.headers.get('Cf-Connecting-Ip');\n }\n\n if (ip) {\n response.headers.set('Prepr-Visitor-IP', ip);\n }\n\n // Set HubSpot cookie header\n const hutkCookie = request.cookies.get('hubspotutk')?.value;\n if (hutkCookie) {\n response.headers.set('Prepr-Hubspot-Id', hutkCookie);\n }\n\n // Check for existing Prepr UID cookie or create a new one\n let cookie = request.cookies.get('__prepr_uid')?.value;\n if (!cookie) {\n cookie = crypto.randomUUID();\n response.cookies.set('__prepr_uid', cookie, {\n maxAge: 1 * 365 * 24 * 60, // Set for one year\n });\n response.headers.set('Prepr-Customer-Id-Created', 'true');\n }\n\n // Set the Prepr Customer ID header\n response.headers.set('Prepr-Customer-Id', cookie);\n\n // If preview mode is not enabled, return the response\n if (!finalOptions?.preview || process.env.PREPR_ENV !== 'preview') {\n return response;\n }\n\n // Respect preview mode toggle cookie from client\n const previewModeCookie = request.cookies.get('Prepr-Preview-Mode')?.value;\n const previewModeEnabled = previewModeCookie !== 'false';\n\n if (!previewModeEnabled) {\n // When preview mode is disabled, do not set preview headers\n return response;\n }\n\n // If preview mode is enabled, set additional headers\n response.headers.set('Prepr-Preview-Bar', 'true');\n\n // Set Prepr Preview Segment and AB test cookies\n const segmentCookie = request.cookies.get('Prepr-Segments')?.value;\n if (segmentCookie) {\n response.headers.set('Prepr-Segments', segmentCookie);\n }\n\n const abCookie = request.cookies.get('Prepr-ABtesting')?.value;\n if (abCookie) {\n response.headers.set('Prepr-ABtesting', abCookie);\n }\n\n // Set Prepr Preview Segment and AB test headers from query params\n request.nextUrl.searchParams.forEach((value, key) => {\n if (key === 'prepr_preview_ab') {\n response.headers.set('Prepr-ABtesting', value);\n response.cookies.set('Prepr-ABtesting', value);\n }\n\n if (key === 'prepr_preview_segment') {\n response.headers.set('Prepr-Segments', value);\n response.cookies.set('Prepr-Segments', value);\n }\n });\n\n return response;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/middleware/index.ts"],"names":["version","package_default","createPreprMiddleware","request","responseOrOptions","options","_a","_b","_c","_d","_e","response","finalOptions","NextResponse","value","key","referrer","ip","ipAddress","hutkCookie","cookie","segmentCookie","abCookie"],"mappings":"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","file":"chunk-6JKK7JBP.js","sourcesContent":["{\n \"name\": \"@preprio/prepr-nextjs\",\n \"version\": \"2.2.0\",\n \"description\": \"Next.js package for Prepr CMS preview functionality with advanced debugging and visual editing capabilities\",\n \"main\": \"dist/react/index.cjs\",\n \"types\": \"./dist/react/index.d.ts\",\n \"module\": \"./dist/react/index.js\",\n \"type\": \"module\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"clean\": \"rm -rf dist\",\n \"check\": \"tsc --noEmit && eslint src --ext .ts,.tsx && prettier --check \\\"src/**/*.{ts,tsx,js,jsx,json,md}\\\"\",\n \"fix\": \"eslint src --ext .ts,.tsx --fix && prettier --write \\\"src/**/*.{ts,tsx,js,jsx,json,md}\\\"\",\n \"changeset\": \"changeset\",\n \"version\": \"changeset version\",\n \"release\": \"pnpm run build && changeset publish\",\n \"prepublishOnly\": \"pnpm run check && pnpm run build\"\n },\n \"exports\": {\n \"./middleware\": {\n \"import\": \"./dist/middleware/index.js\",\n \"types\": \"./dist/middleware/index.d.ts\",\n \"require\": \"./dist/middleware/index.cjs\"\n },\n \"./server\": {\n \"import\": \"./dist/server/index.js\",\n \"types\": \"./dist/server/index.d.ts\",\n \"require\": \"./dist/server/index.cjs\"\n },\n \"./react\": {\n \"import\": \"./dist/react/index.js\",\n \"types\": \"./dist/react/index.d.ts\",\n \"require\": \"./dist/react/index.cjs\"\n },\n \"./utils\": {\n \"import\": \"./dist/utils/index.js\",\n \"types\": \"./dist/utils/index.d.ts\",\n \"require\": \"./dist/utils/index.cjs\"\n },\n \"./types\": {\n \"import\": \"./dist/types/index.js\",\n \"types\": \"./dist/types/index.d.ts\",\n \"require\": \"./dist/types/index.cjs\"\n },\n \"./index.css\": {\n \"import\": \"./dist/index.css\",\n \"require\": \"./dist/index.css\"\n }\n },\n \"files\": [\n \"dist\",\n \"package.json\"\n ],\n \"keywords\": [\n \"prepr\",\n \"cms\",\n \"nextjs\",\n \"preview\",\n \"visual-editing\",\n \"headless-cms\",\n \"react\",\n \"typescript\",\n \"debug\",\n \"stega\"\n ],\n \"author\": \"Preprio\",\n \"license\": \"MIT\",\n \"packageManager\": \"pnpm@10.5.2\",\n \"devDependencies\": {\n \"@changesets/cli\": \"^2.29.5\",\n \"@eslint/js\": \"^9.25.1\",\n \"@types/node\": \"^20.11.5\",\n \"@types/react\": \"19.2.2\",\n \"@types/react-dom\": \"19.2.2\",\n \"@typescript-eslint/eslint-plugin\": \"^8.31.1\",\n \"@typescript-eslint/parser\": \"^8.31.1\",\n \"autoprefixer\": \"^10.4.21\",\n \"cssnano\": \"^7.0.7\",\n \"eslint\": \"^9.25.1\",\n \"eslint-config-prettier\": \"^10.1.2\",\n \"eslint-plugin-prettier\": \"^5.2.6\",\n \"eslint-plugin-react\": \"^7.37.2\",\n \"eslint-plugin-react-hooks\": \"^5.0.0\",\n \"next\": \"16.0.10\",\n \"postcss\": \"^8\",\n \"prettier\": \"^3.5.3\",\n \"prettier-plugin-tailwindcss\": \"^0.5.12\",\n \"react\": \"^19.2.3\",\n \"react-dom\": \"^19.2.3\",\n \"tailwindcss\": \"^3.4.17\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\"\n },\n \"peerDependencies\": {\n \"next\": \"^16.0.3 || ^15.0.5 || ^15.1.9 || ^15.2.6 || ^15.3.6 || ^15.4.8 || ^15.5.7 || ^14.0.0 || ^13.0.0\",\n \"react\": \"^19.0.0 || ^18.0.0 || ^17.0.0 \",\n \"react-dom\": \"^19.0.0 || ^18.0.0 || ^17.0.0\"\n },\n \"dependencies\": {\n \"@headlessui/react\": \"^2.2.0\",\n \"@vercel/functions\": \"^2.0.0\",\n \"@vercel/stega\": \"^0.1.2\",\n \"clsx\": \"^2.1.1\",\n \"postcss-cli\": \"^11.0.1\",\n \"tailwind-merge\": \"^3.0.1\",\n \"zustand\": \"^5.0.8\"\n }\n}\n\n","import { ipAddress } from '@vercel/functions';\nimport { NextRequest, NextResponse } from 'next/server';\nimport { version } from '../../package.json';\n\nexport interface PreprMiddlewareOptions {\n preview?: boolean;\n}\n\n/**\n * Middleware to set Prepr headers for personalization.\n *\n * @overload\n * @param request - NextRequest object\n * @param options - Options object\n * @returns NextResponse with Prepr headers set\n */\nexport default function createPreprMiddleware(\n request: NextRequest,\n options?: PreprMiddlewareOptions\n): NextResponse;\n\n/**\n * Middleware to set Prepr headers for personalization.\n *\n * @overload\n * @param request - NextRequest object\n * @param response - NextResponse object to chain with\n * @param options - Options object\n * @returns NextResponse with Prepr headers set\n */\nexport default function createPreprMiddleware(\n request: NextRequest,\n response: NextResponse,\n options?: PreprMiddlewareOptions\n): NextResponse;\n\n/**\n * Implementation of createPreprMiddleware with function overloads\n */\nexport default function createPreprMiddleware(\n request: NextRequest,\n responseOrOptions?: NextResponse | PreprMiddlewareOptions,\n options?: PreprMiddlewareOptions\n): NextResponse {\n let response: NextResponse;\n let finalOptions: PreprMiddlewareOptions | undefined;\n\n // Handle overloads\n if (responseOrOptions && 'headers' in responseOrOptions) {\n // Second parameter is NextResponse\n response = responseOrOptions;\n finalOptions = options;\n } else {\n // Second parameter is options or undefined\n response = NextResponse.next();\n finalOptions = responseOrOptions as PreprMiddlewareOptions | undefined;\n }\n\n // Map over search params and set headers\n request.nextUrl.searchParams.forEach((value, key) => {\n switch (key) {\n case 'utm_source':\n response.headers.set('Prepr-Context-utm_source', value);\n break;\n case 'utm_medium':\n response.headers.set('Prepr-Context-utm_medium', value);\n break;\n case 'utm_term':\n response.headers.set('Prepr-Context-utm_term', value);\n break;\n case 'utm_content':\n response.headers.set('Prepr-Context-utm_content', value);\n break;\n case 'utm_campaign':\n response.headers.set('Prepr-Context-utm_campaign', value);\n break;\n }\n });\n\n // Set initial referral header\n const referrer = request.headers.get('referer');\n if (referrer) {\n response.headers.set('Prepr-Context-initial_referral', referrer);\n }\n\n // Set Prepr version header\n response.headers.set('Prepr-Package', version);\n\n let ip: string | null = ipAddress(request) || null;\n\n if (request.headers.get('Cf-Connecting-Ip')) {\n ip = request.headers.get('Cf-Connecting-Ip');\n }\n\n if (ip) {\n response.headers.set('Prepr-Visitor-IP', ip);\n }\n\n // Set HubSpot cookie header\n const hutkCookie = request.cookies.get('hubspotutk')?.value;\n if (hutkCookie) {\n response.headers.set('Prepr-Hubspot-Id', hutkCookie);\n }\n\n // Check for existing Prepr UID cookie or create a new one\n let cookie = request.cookies.get('__prepr_uid')?.value;\n if (!cookie) {\n cookie = crypto.randomUUID();\n response.cookies.set('__prepr_uid', cookie, {\n maxAge: 1 * 365 * 24 * 60, // Set for one year\n });\n response.headers.set('Prepr-Customer-Id-Created', 'true');\n }\n\n // Set the Prepr Customer ID header\n response.headers.set('Prepr-Customer-Id', cookie);\n\n // If preview mode is not enabled, return the response\n if (!finalOptions?.preview || process.env.PREPR_ENV !== 'preview') {\n return response;\n }\n\n // Respect preview mode toggle cookie from client\n const previewModeCookie = request.cookies.get('Prepr-Preview-Mode')?.value;\n const previewModeEnabled = previewModeCookie !== 'false';\n\n if (!previewModeEnabled) {\n // When preview mode is disabled, do not set preview headers\n return response;\n }\n\n // If preview mode is enabled, set additional headers\n response.headers.set('Prepr-Preview-Bar', 'true');\n\n // Set Prepr Preview Segment and AB test cookies\n const segmentCookie = request.cookies.get('Prepr-Segments')?.value;\n if (segmentCookie) {\n response.headers.set('Prepr-Segments', segmentCookie);\n }\n\n const abCookie = request.cookies.get('Prepr-ABtesting')?.value;\n if (abCookie) {\n response.headers.set('Prepr-ABtesting', abCookie);\n }\n\n // Set Prepr Preview Segment and AB test headers from query params\n request.nextUrl.searchParams.forEach((value, key) => {\n if (key === 'prepr_preview_ab') {\n response.headers.set('Prepr-ABtesting', value);\n response.cookies.set('Prepr-ABtesting', value);\n }\n\n if (key === 'prepr_preview_segment') {\n response.headers.set('Prepr-Segments', value);\n response.cookies.set('Prepr-Segments', value);\n }\n });\n\n return response;\n}\n"]}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { ipAddress } from '@vercel/functions';
|
|
2
|
+
import { NextResponse } from 'next/server';
|
|
3
|
+
|
|
4
|
+
// src/middleware/index.ts
|
|
5
|
+
|
|
6
|
+
// package.json
|
|
7
|
+
var version = "2.1.1";
|
|
8
|
+
var package_default = {
|
|
9
|
+
name: "@preprio/prepr-nextjs",
|
|
10
|
+
version,
|
|
11
|
+
description: "Next.js package for Prepr CMS preview functionality with advanced debugging and visual editing capabilities",
|
|
12
|
+
main: "dist/react/index.cjs",
|
|
13
|
+
types: "./dist/react/index.d.ts",
|
|
14
|
+
module: "./dist/react/index.js",
|
|
15
|
+
type: "module",
|
|
16
|
+
scripts: {
|
|
17
|
+
build: "tsup",
|
|
18
|
+
dev: "tsup --watch",
|
|
19
|
+
clean: "rm -rf dist",
|
|
20
|
+
check: 'tsc --noEmit && eslint src --ext .ts,.tsx && prettier --check "src/**/*.{ts,tsx,js,jsx,json,md}"',
|
|
21
|
+
fix: 'eslint src --ext .ts,.tsx --fix && prettier --write "src/**/*.{ts,tsx,js,jsx,json,md}"',
|
|
22
|
+
changeset: "changeset",
|
|
23
|
+
version: "changeset version",
|
|
24
|
+
release: "pnpm run build && changeset publish",
|
|
25
|
+
prepublishOnly: "pnpm run check && pnpm run build"
|
|
26
|
+
},
|
|
27
|
+
exports: {
|
|
28
|
+
"./middleware": {
|
|
29
|
+
import: "./dist/middleware/index.js",
|
|
30
|
+
types: "./dist/middleware/index.d.ts",
|
|
31
|
+
require: "./dist/middleware/index.cjs"
|
|
32
|
+
},
|
|
33
|
+
"./server": {
|
|
34
|
+
import: "./dist/server/index.js",
|
|
35
|
+
types: "./dist/server/index.d.ts",
|
|
36
|
+
require: "./dist/server/index.cjs"
|
|
37
|
+
},
|
|
38
|
+
"./react": {
|
|
39
|
+
import: "./dist/react/index.js",
|
|
40
|
+
types: "./dist/react/index.d.ts",
|
|
41
|
+
require: "./dist/react/index.cjs"
|
|
42
|
+
},
|
|
43
|
+
"./utils": {
|
|
44
|
+
import: "./dist/utils/index.js",
|
|
45
|
+
types: "./dist/utils/index.d.ts",
|
|
46
|
+
require: "./dist/utils/index.cjs"
|
|
47
|
+
},
|
|
48
|
+
"./types": {
|
|
49
|
+
import: "./dist/types/index.js",
|
|
50
|
+
types: "./dist/types/index.d.ts",
|
|
51
|
+
require: "./dist/types/index.cjs"
|
|
52
|
+
},
|
|
53
|
+
"./index.css": {
|
|
54
|
+
import: "./dist/index.css",
|
|
55
|
+
require: "./dist/index.css"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
files: [
|
|
59
|
+
"dist",
|
|
60
|
+
"package.json"
|
|
61
|
+
],
|
|
62
|
+
keywords: [
|
|
63
|
+
"prepr",
|
|
64
|
+
"cms",
|
|
65
|
+
"nextjs",
|
|
66
|
+
"preview",
|
|
67
|
+
"visual-editing",
|
|
68
|
+
"headless-cms",
|
|
69
|
+
"react",
|
|
70
|
+
"typescript",
|
|
71
|
+
"debug",
|
|
72
|
+
"stega"
|
|
73
|
+
],
|
|
74
|
+
author: "Preprio",
|
|
75
|
+
license: "MIT",
|
|
76
|
+
packageManager: "pnpm@10.5.2",
|
|
77
|
+
devDependencies: {
|
|
78
|
+
"@changesets/cli": "^2.29.5",
|
|
79
|
+
"@eslint/js": "^9.25.1",
|
|
80
|
+
"@types/node": "^20.11.5",
|
|
81
|
+
"@types/react": "19.1.0",
|
|
82
|
+
"@types/react-dom": "19.1.2",
|
|
83
|
+
"@typescript-eslint/eslint-plugin": "^8.31.1",
|
|
84
|
+
"@typescript-eslint/parser": "^8.31.1",
|
|
85
|
+
autoprefixer: "^10.4.21",
|
|
86
|
+
cssnano: "^7.0.7",
|
|
87
|
+
eslint: "^9.25.1",
|
|
88
|
+
"eslint-config-prettier": "^10.1.2",
|
|
89
|
+
"eslint-plugin-prettier": "^5.2.6",
|
|
90
|
+
"eslint-plugin-react": "^7.37.2",
|
|
91
|
+
"eslint-plugin-react-hooks": "^5.0.0",
|
|
92
|
+
next: "15.3.1",
|
|
93
|
+
postcss: "^8",
|
|
94
|
+
prettier: "^3.5.3",
|
|
95
|
+
"prettier-plugin-tailwindcss": "^0.5.12",
|
|
96
|
+
react: "^19.1.0",
|
|
97
|
+
"react-dom": "^19.1.0",
|
|
98
|
+
tailwindcss: "^3.4.17",
|
|
99
|
+
tsup: "^8.5.0",
|
|
100
|
+
typescript: "^5.8.3"
|
|
101
|
+
},
|
|
102
|
+
peerDependencies: {
|
|
103
|
+
next: "^15.0.0 || ^14.0.0 || ^13.0.0",
|
|
104
|
+
react: "^19.0.0 || ^18.0.0 || ^17.0.0 ",
|
|
105
|
+
"react-dom": "^19.0.0 || ^18.0.0 || ^17.0.0"
|
|
106
|
+
},
|
|
107
|
+
dependencies: {
|
|
108
|
+
"@headlessui/react": "^2.2.0",
|
|
109
|
+
"@vercel/functions": "^2.0.0",
|
|
110
|
+
"@vercel/stega": "^0.1.2",
|
|
111
|
+
clsx: "^2.1.1",
|
|
112
|
+
"postcss-cli": "^11.0.1",
|
|
113
|
+
"tailwind-merge": "^3.0.1",
|
|
114
|
+
zustand: "^5.0.8"
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
// src/middleware/index.ts
|
|
119
|
+
function createPreprMiddleware(request, responseOrOptions, options) {
|
|
120
|
+
var _a, _b, _c, _d, _e;
|
|
121
|
+
let response;
|
|
122
|
+
let finalOptions;
|
|
123
|
+
if (responseOrOptions && "headers" in responseOrOptions) {
|
|
124
|
+
response = responseOrOptions;
|
|
125
|
+
finalOptions = options;
|
|
126
|
+
} else {
|
|
127
|
+
response = NextResponse.next();
|
|
128
|
+
finalOptions = responseOrOptions;
|
|
129
|
+
}
|
|
130
|
+
request.nextUrl.searchParams.forEach((value, key) => {
|
|
131
|
+
switch (key) {
|
|
132
|
+
case "utm_source":
|
|
133
|
+
response.headers.set("Prepr-Context-utm_source", value);
|
|
134
|
+
break;
|
|
135
|
+
case "utm_medium":
|
|
136
|
+
response.headers.set("Prepr-Context-utm_medium", value);
|
|
137
|
+
break;
|
|
138
|
+
case "utm_term":
|
|
139
|
+
response.headers.set("Prepr-Context-utm_term", value);
|
|
140
|
+
break;
|
|
141
|
+
case "utm_content":
|
|
142
|
+
response.headers.set("Prepr-Context-utm_content", value);
|
|
143
|
+
break;
|
|
144
|
+
case "utm_campaign":
|
|
145
|
+
response.headers.set("Prepr-Context-utm_campaign", value);
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
const referrer = request.headers.get("referer");
|
|
150
|
+
if (referrer) {
|
|
151
|
+
response.headers.set("Prepr-Context-initial_referral", referrer);
|
|
152
|
+
}
|
|
153
|
+
response.headers.set("Prepr-Package", version);
|
|
154
|
+
let ip = ipAddress(request) || null;
|
|
155
|
+
if (request.headers.get("Cf-Connecting-Ip")) {
|
|
156
|
+
ip = request.headers.get("Cf-Connecting-Ip");
|
|
157
|
+
}
|
|
158
|
+
if (ip) {
|
|
159
|
+
response.headers.set("Prepr-Visitor-IP", ip);
|
|
160
|
+
}
|
|
161
|
+
const hutkCookie = (_a = request.cookies.get("hubspotutk")) == null ? void 0 : _a.value;
|
|
162
|
+
if (hutkCookie) {
|
|
163
|
+
response.headers.set("Prepr-Hubspot-Id", hutkCookie);
|
|
164
|
+
}
|
|
165
|
+
let cookie = (_b = request.cookies.get("__prepr_uid")) == null ? void 0 : _b.value;
|
|
166
|
+
if (!cookie) {
|
|
167
|
+
cookie = crypto.randomUUID();
|
|
168
|
+
response.cookies.set("__prepr_uid", cookie, {
|
|
169
|
+
maxAge: 1 * 365 * 24 * 60
|
|
170
|
+
// Set for one year
|
|
171
|
+
});
|
|
172
|
+
response.headers.set("Prepr-Customer-Id-Created", "true");
|
|
173
|
+
}
|
|
174
|
+
response.headers.set("Prepr-Customer-Id", cookie);
|
|
175
|
+
if (!(finalOptions == null ? void 0 : finalOptions.preview) || process.env.PREPR_ENV !== "preview") {
|
|
176
|
+
return response;
|
|
177
|
+
}
|
|
178
|
+
const previewModeCookie = (_c = request.cookies.get("Prepr-Preview-Mode")) == null ? void 0 : _c.value;
|
|
179
|
+
const previewModeEnabled = previewModeCookie !== "false";
|
|
180
|
+
if (!previewModeEnabled) {
|
|
181
|
+
return response;
|
|
182
|
+
}
|
|
183
|
+
response.headers.set("Prepr-Preview-Bar", "true");
|
|
184
|
+
const segmentCookie = (_d = request.cookies.get("Prepr-Segments")) == null ? void 0 : _d.value;
|
|
185
|
+
if (segmentCookie) {
|
|
186
|
+
response.headers.set("Prepr-Segments", segmentCookie);
|
|
187
|
+
}
|
|
188
|
+
const abCookie = (_e = request.cookies.get("Prepr-ABtesting")) == null ? void 0 : _e.value;
|
|
189
|
+
if (abCookie) {
|
|
190
|
+
response.headers.set("Prepr-ABtesting", abCookie);
|
|
191
|
+
}
|
|
192
|
+
request.nextUrl.searchParams.forEach((value, key) => {
|
|
193
|
+
if (key === "prepr_preview_ab") {
|
|
194
|
+
response.headers.set("Prepr-ABtesting", value);
|
|
195
|
+
response.cookies.set("Prepr-ABtesting", value);
|
|
196
|
+
}
|
|
197
|
+
if (key === "prepr_preview_segment") {
|
|
198
|
+
response.headers.set("Prepr-Segments", value);
|
|
199
|
+
response.cookies.set("Prepr-Segments", value);
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
return response;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export { createPreprMiddleware, package_default };
|
|
206
|
+
//# sourceMappingURL=chunk-J5SXB377.js.map
|
|
207
|
+
//# sourceMappingURL=chunk-J5SXB377.js.map
|