payload-live-preview 1.0.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/LICENSE +21 -0
- package/README.md +389 -0
- package/dist/adapters/astro/RichText.astro +55 -0
- package/dist/adapters/astro/index.cjs +370 -0
- package/dist/adapters/astro/index.cjs.map +1 -0
- package/dist/adapters/astro/index.d.cts +105 -0
- package/dist/adapters/astro/index.d.ts +105 -0
- package/dist/adapters/astro/index.js +364 -0
- package/dist/adapters/astro/index.js.map +1 -0
- package/dist/adapters/astro/middleware-entry.cjs +303 -0
- package/dist/adapters/astro/middleware-entry.cjs.map +1 -0
- package/dist/adapters/astro/middleware-entry.d.cts +15 -0
- package/dist/adapters/astro/middleware-entry.d.ts +15 -0
- package/dist/adapters/astro/middleware-entry.js +297 -0
- package/dist/adapters/astro/middleware-entry.js.map +1 -0
- package/dist/adapters/nextjs/index.cjs +309 -0
- package/dist/adapters/nextjs/index.cjs.map +1 -0
- package/dist/adapters/nextjs/index.d.cts +75 -0
- package/dist/adapters/nextjs/index.d.ts +75 -0
- package/dist/adapters/nextjs/index.js +306 -0
- package/dist/adapters/nextjs/index.js.map +1 -0
- package/dist/adapters/nuxt/index.cjs +299 -0
- package/dist/adapters/nuxt/index.cjs.map +1 -0
- package/dist/adapters/nuxt/index.d.cts +126 -0
- package/dist/adapters/nuxt/index.d.ts +126 -0
- package/dist/adapters/nuxt/index.js +294 -0
- package/dist/adapters/nuxt/index.js.map +1 -0
- package/dist/adapters/sveltekit/index.cjs +275 -0
- package/dist/adapters/sveltekit/index.cjs.map +1 -0
- package/dist/adapters/sveltekit/index.d.cts +80 -0
- package/dist/adapters/sveltekit/index.d.ts +80 -0
- package/dist/adapters/sveltekit/index.js +273 -0
- package/dist/adapters/sveltekit/index.js.map +1 -0
- package/dist/bind-BSgxoQhN.d.cts +1137 -0
- package/dist/bind-BSgxoQhN.d.ts +1137 -0
- package/dist/codegen-astro.cjs +612 -0
- package/dist/codegen-astro.cjs.map +1 -0
- package/dist/codegen-astro.d.cts +54 -0
- package/dist/codegen-astro.d.ts +54 -0
- package/dist/codegen-astro.js +610 -0
- package/dist/codegen-astro.js.map +1 -0
- package/dist/codegen-cli.cjs +669 -0
- package/dist/codegen-cli.cjs.map +1 -0
- package/dist/codegen-cli.d.cts +19 -0
- package/dist/codegen-cli.d.ts +19 -0
- package/dist/codegen-cli.js +667 -0
- package/dist/codegen-cli.js.map +1 -0
- package/dist/codegen.cjs +551 -0
- package/dist/codegen.cjs.map +1 -0
- package/dist/codegen.d.cts +162 -0
- package/dist/codegen.d.ts +162 -0
- package/dist/codegen.js +547 -0
- package/dist/codegen.js.map +1 -0
- package/dist/core.cjs +3684 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.cts +24 -0
- package/dist/core.d.ts +24 -0
- package/dist/core.js +3657 -0
- package/dist/core.js.map +1 -0
- package/dist/index.cjs +4083 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +472 -0
- package/dist/index.d.ts +472 -0
- package/dist/index.js +4040 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware-BwIlf0jW.d.cts +168 -0
- package/dist/middleware-BwIlf0jW.d.ts +168 -0
- package/dist/payload.cjs +31 -0
- package/dist/payload.cjs.map +1 -0
- package/dist/payload.d.cts +87 -0
- package/dist/payload.d.ts +87 -0
- package/dist/payload.js +29 -0
- package/dist/payload.js.map +1 -0
- package/dist/preview-request-DAvxm18T.d.cts +68 -0
- package/dist/preview-request-DAvxm18T.d.ts +68 -0
- package/package.json +186 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-side preview-request detection.
|
|
3
|
+
*
|
|
4
|
+
* The live-preview runtime only ever activates inside the Payload
|
|
5
|
+
* admin's iframe, but the *server* still has to decide whether to
|
|
6
|
+
* inject the (sizeable) inline script into a given HTML response.
|
|
7
|
+
* Injecting it into every page for every visitor buffers every
|
|
8
|
+
* response and ships dead bytes to production traffic — so adapters
|
|
9
|
+
* gate injection on this predicate by default, and consumers with
|
|
10
|
+
* hand-rolled middleware can import it directly.
|
|
11
|
+
*
|
|
12
|
+
* A request counts as a preview when any of these hold:
|
|
13
|
+
*
|
|
14
|
+
* 1. A preview query parameter is present (`?preview=true`,
|
|
15
|
+
* `?draft=true`, `?livePreview=true` — configurable).
|
|
16
|
+
* 2. `Sec-Fetch-Dest: iframe` — the document is being loaded as an
|
|
17
|
+
* iframe, which is exactly how the Payload admin embeds it.
|
|
18
|
+
* (Sent by all evergreen browsers; absence never *excludes* a
|
|
19
|
+
* request, presence includes it.)
|
|
20
|
+
* 3. The `Referer` points at one of the given admin origins.
|
|
21
|
+
*
|
|
22
|
+
* @module @adapters/shared/preview-request
|
|
23
|
+
*/
|
|
24
|
+
/** The individual signals the predicate can consider. */
|
|
25
|
+
type PreviewSignal = 'query' | 'fetch-dest' | 'referer';
|
|
26
|
+
interface PreviewRequestOptions {
|
|
27
|
+
/**
|
|
28
|
+
* Which signals count as "this is a preview request". Default: all
|
|
29
|
+
* three. High-security setups that must never relax framing headers
|
|
30
|
+
* for unsolicited iframe loads can restrict to `['query']` — then
|
|
31
|
+
* only an explicit `?preview=true` (e.g. from `buildLivePreviewUrl`)
|
|
32
|
+
* activates preview handling.
|
|
33
|
+
*/
|
|
34
|
+
readonly signals?: readonly PreviewSignal[];
|
|
35
|
+
/**
|
|
36
|
+
* Query parameters (with values `true` or `1`) that mark a request
|
|
37
|
+
* as a preview. Default: `['preview', 'draft', 'livePreview']`.
|
|
38
|
+
*/
|
|
39
|
+
readonly queryParams?: readonly string[];
|
|
40
|
+
/**
|
|
41
|
+
* Treat `Sec-Fetch-Dest: iframe` as a preview signal. Default `true`.
|
|
42
|
+
* Legacy alias for excluding `'fetch-dest'` from `signals`.
|
|
43
|
+
*/
|
|
44
|
+
readonly checkFetchDest?: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Admin origins whose `Referer` marks a request as a preview,
|
|
47
|
+
* e.g. `['https://cms.example.com']`.
|
|
48
|
+
*/
|
|
49
|
+
readonly adminOrigins?: readonly string[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The minimal request surface the predicate needs. The standard
|
|
53
|
+
* `Request` satisfies it structurally, and server frameworks without
|
|
54
|
+
* fetch-style requests (e.g. Nitro/H3) can supply a tiny shim.
|
|
55
|
+
*/
|
|
56
|
+
interface PreviewRequestLike {
|
|
57
|
+
readonly url: string;
|
|
58
|
+
readonly headers: {
|
|
59
|
+
get(name: string): string | null;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Decide whether `request` is a live-preview request. See the module
|
|
64
|
+
* docblock for the exact signals.
|
|
65
|
+
*/
|
|
66
|
+
declare function isPreviewRequest(request: PreviewRequestLike, options?: PreviewRequestOptions): boolean;
|
|
67
|
+
|
|
68
|
+
export { type PreviewRequestLike as P, type PreviewRequestOptions as a, isPreviewRequest as i };
|
package/package.json
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "payload-live-preview",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Framework-agnostic live preview for Payload CMS — Astro-first; works with Next.js, SvelteKit, Nuxt, and plain HTML.",
|
|
5
|
+
"author": "relative23",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "./dist/index.cjs",
|
|
9
|
+
"module": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"default": "./dist/index.js"
|
|
16
|
+
},
|
|
17
|
+
"require": {
|
|
18
|
+
"types": "./dist/index.d.cts",
|
|
19
|
+
"default": "./dist/index.cjs"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"./core": {
|
|
23
|
+
"import": {
|
|
24
|
+
"types": "./dist/core.d.ts",
|
|
25
|
+
"default": "./dist/core.js"
|
|
26
|
+
},
|
|
27
|
+
"require": {
|
|
28
|
+
"types": "./dist/core.d.cts",
|
|
29
|
+
"default": "./dist/core.cjs"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"./astro": {
|
|
33
|
+
"import": {
|
|
34
|
+
"types": "./dist/adapters/astro/index.d.ts",
|
|
35
|
+
"default": "./dist/adapters/astro/index.js"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"./nextjs": {
|
|
39
|
+
"import": {
|
|
40
|
+
"types": "./dist/adapters/nextjs/index.d.ts",
|
|
41
|
+
"default": "./dist/adapters/nextjs/index.js"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"./sveltekit": {
|
|
45
|
+
"import": {
|
|
46
|
+
"types": "./dist/adapters/sveltekit/index.d.ts",
|
|
47
|
+
"default": "./dist/adapters/sveltekit/index.js"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"./nuxt": {
|
|
51
|
+
"import": {
|
|
52
|
+
"types": "./dist/adapters/nuxt/index.d.ts",
|
|
53
|
+
"default": "./dist/adapters/nuxt/index.js"
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"./codegen": {
|
|
57
|
+
"import": {
|
|
58
|
+
"types": "./dist/codegen.d.ts",
|
|
59
|
+
"default": "./dist/codegen.js"
|
|
60
|
+
},
|
|
61
|
+
"require": {
|
|
62
|
+
"types": "./dist/codegen.d.cts",
|
|
63
|
+
"default": "./dist/codegen.cjs"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"./codegen/astro": {
|
|
67
|
+
"import": {
|
|
68
|
+
"types": "./dist/codegen-astro.d.ts",
|
|
69
|
+
"default": "./dist/codegen-astro.js"
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"./payload": {
|
|
73
|
+
"import": {
|
|
74
|
+
"types": "./dist/payload.d.ts",
|
|
75
|
+
"default": "./dist/payload.js"
|
|
76
|
+
},
|
|
77
|
+
"require": {
|
|
78
|
+
"types": "./dist/payload.d.cts",
|
|
79
|
+
"default": "./dist/payload.cjs"
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"./astro/RichText.astro": "./dist/adapters/astro/RichText.astro",
|
|
83
|
+
"./astro/middleware-entry": {
|
|
84
|
+
"import": {
|
|
85
|
+
"types": "./dist/adapters/astro/middleware-entry.d.ts",
|
|
86
|
+
"default": "./dist/adapters/astro/middleware-entry.js"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"bin": {
|
|
91
|
+
"pll-codegen": "./dist/codegen-cli.js"
|
|
92
|
+
},
|
|
93
|
+
"files": [
|
|
94
|
+
"dist",
|
|
95
|
+
"README.md",
|
|
96
|
+
"LICENSE"
|
|
97
|
+
],
|
|
98
|
+
"sideEffects": false,
|
|
99
|
+
"scripts": {
|
|
100
|
+
"prepare": "npm run build:runtime",
|
|
101
|
+
"build:runtime": "tsx scripts/build-runtime.ts",
|
|
102
|
+
"build": "npm run build:runtime && tsup && npm run build:assets",
|
|
103
|
+
"build:assets": "node -e \"require('node:fs').copyFileSync('src/adapters/astro/RichText.astro','dist/adapters/astro/RichText.astro')\"",
|
|
104
|
+
"dev": "tsup --watch",
|
|
105
|
+
"test": "vitest run",
|
|
106
|
+
"test:watch": "vitest",
|
|
107
|
+
"test:unit": "vitest run tests/unit",
|
|
108
|
+
"test:integration": "vitest run tests/integration",
|
|
109
|
+
"test:e2e": "playwright test",
|
|
110
|
+
"test:bench": "vitest bench tests/benchmarks",
|
|
111
|
+
"test:coverage": "vitest run --coverage",
|
|
112
|
+
"typecheck": "tsc --noEmit",
|
|
113
|
+
"lint": "eslint .",
|
|
114
|
+
"lint:fix": "eslint . --fix",
|
|
115
|
+
"format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
|
|
116
|
+
"format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"",
|
|
117
|
+
"check": "npm run typecheck && npm run lint && npm run test",
|
|
118
|
+
"prepublishOnly": "npm run check && npm run build",
|
|
119
|
+
"changeset": "changeset",
|
|
120
|
+
"version": "changeset version",
|
|
121
|
+
"release": "npm run build && changeset publish"
|
|
122
|
+
},
|
|
123
|
+
"devDependencies": {
|
|
124
|
+
"@changesets/cli": "^2.31.0",
|
|
125
|
+
"@eslint/js": "^10.0.1",
|
|
126
|
+
"@playwright/test": "^1.61.1",
|
|
127
|
+
"@types/node": "^22.20.1",
|
|
128
|
+
"@vitest/coverage-v8": "^4.1.10",
|
|
129
|
+
"esbuild": "^0.28.1",
|
|
130
|
+
"eslint": "^10.7.0",
|
|
131
|
+
"globals": "^17.7.0",
|
|
132
|
+
"jsdom": "^29.1.1",
|
|
133
|
+
"prettier": "^3.9.5",
|
|
134
|
+
"ts-morph": "^28.0.0",
|
|
135
|
+
"tsup": "^8.5.1",
|
|
136
|
+
"tsx": "^4.23.0",
|
|
137
|
+
"typescript": "^5.9.3",
|
|
138
|
+
"typescript-eslint": "^8.63.0",
|
|
139
|
+
"vitest": "^4.1.10"
|
|
140
|
+
},
|
|
141
|
+
"keywords": [
|
|
142
|
+
"payload",
|
|
143
|
+
"payload-cms",
|
|
144
|
+
"payload-live-preview",
|
|
145
|
+
"live-preview",
|
|
146
|
+
"cms",
|
|
147
|
+
"headless",
|
|
148
|
+
"astro",
|
|
149
|
+
"nextjs",
|
|
150
|
+
"sveltekit",
|
|
151
|
+
"nuxt",
|
|
152
|
+
"vue",
|
|
153
|
+
"svelte",
|
|
154
|
+
"schema-driven",
|
|
155
|
+
"lexical",
|
|
156
|
+
"csp-safe",
|
|
157
|
+
"framework-agnostic"
|
|
158
|
+
],
|
|
159
|
+
"peerDependencies": {
|
|
160
|
+
"astro": ">=4.0.0 <8.0.0",
|
|
161
|
+
"ts-morph": "^28.0.0"
|
|
162
|
+
},
|
|
163
|
+
"peerDependenciesMeta": {
|
|
164
|
+
"astro": {
|
|
165
|
+
"optional": true
|
|
166
|
+
},
|
|
167
|
+
"ts-morph": {
|
|
168
|
+
"optional": true
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
"engines": {
|
|
172
|
+
"node": ">=20.19.0"
|
|
173
|
+
},
|
|
174
|
+
"publishConfig": {
|
|
175
|
+
"access": "public",
|
|
176
|
+
"provenance": true
|
|
177
|
+
},
|
|
178
|
+
"repository": {
|
|
179
|
+
"type": "git",
|
|
180
|
+
"url": "https://github.com/relative23/payload-live-preview.git"
|
|
181
|
+
},
|
|
182
|
+
"bugs": {
|
|
183
|
+
"url": "https://github.com/relative23/payload-live-preview/issues"
|
|
184
|
+
},
|
|
185
|
+
"homepage": "https://github.com/relative23/payload-live-preview#readme"
|
|
186
|
+
}
|