There were a number of things wrong or could have been improved with the [Draft Preview Example](https://github.com/payloadcms/payload/tree/main/examples/draft-preview), namely: - The package.json was missing `"type": "modue"` which would throw ESM related import errors on startup - The preview secret was missing entirely, with pointless logic was written to throw an error if it missing in the search params as opposed to not matching the environment secret - The `/next/exit-preview` route was duplicated twice - The preview endpoint was unnecessarily querying the database for a matching document as opposed to letting the underlying page itself 404 as needed, and it was also throwing an inaccurate error message Some less critical changes were: - The page query was missing the `depth` and `limit` parameters which is best practice to optimize performance - The logic to format search params in the preview URL was unnecessarily complex - Utilities like `generatePreviewPath` and `getGlobals` were unnecessarily obfuscating simple functions - The `/preview` and `/exit-preview` routes were unecessarily nested within a `/next` page segment - Payload types weren't aliased
48 lines
1.5 KiB
JSON
48 lines
1.5 KiB
JSON
{
|
|
"name": "payload-example-preview",
|
|
"version": "1.0.0",
|
|
"description": "Payload preview example.",
|
|
"license": "MIT",
|
|
"type": "module",
|
|
"main": "dist/server.js",
|
|
"scripts": {
|
|
"build": "cross-env NODE_OPTIONS=--no-deprecation next build",
|
|
"dev": "cross-env NODE_OPTIONS=--no-deprecation && pnpm seed && next dev",
|
|
"generate:importmap": "cross-env NODE_OPTIONS=--no-deprecation payload generate:importmap",
|
|
"generate:schema": "payload-graphql generate:schema",
|
|
"generate:types": "cross-env NODE_OPTIONS=--no-deprecation payload generate:types",
|
|
"payload": "cross-env NODE_OPTIONS=--no-deprecation payload",
|
|
"seed": "npm run payload migrate:fresh",
|
|
"start": "cross-env NODE_OPTIONS=--no-deprecation next start"
|
|
},
|
|
"dependencies": {
|
|
"@payloadcms/db-mongodb": "latest",
|
|
"@payloadcms/next": "latest",
|
|
"@payloadcms/richtext-slate": "latest",
|
|
"@payloadcms/ui": "latest",
|
|
"dotenv": "^8.2.0",
|
|
"escape-html": "^1.0.3",
|
|
"graphql": "^16.9.0",
|
|
"next": "^15.0.0",
|
|
"payload": "latest",
|
|
"payload-admin-bar": "^1.0.6",
|
|
"react": "19.0.0",
|
|
"react-dom": "19.0.0"
|
|
},
|
|
"devDependencies": {
|
|
"@payloadcms/graphql": "latest",
|
|
"@swc/core": "^1.6.13",
|
|
"@types/escape-html": "^1.0.2",
|
|
"@types/react": "19.0.1",
|
|
"@types/react-dom": "19.0.1",
|
|
"eslint": "^8.57.0",
|
|
"eslint-config-next": "^15.0.0",
|
|
"slate": "^0.82.0",
|
|
"tsx": "^4.16.2",
|
|
"typescript": "5.5.2"
|
|
},
|
|
"engines": {
|
|
"node": "^18.20.2 || >=20.9.0"
|
|
}
|
|
}
|