strapi-nextgen-framework
Version:
Production-ready, type-safe framework bridging Strapi v4 CMS and Next.js 14+ App Router with automatic cache management, Error Boundaries, and SEO optimization
88 lines • 2.87 kB
JavaScript
;
/**
* Preview Mode Handler - Phase 4 Implementation
* This is a placeholder for the preview/draft mode handler
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.createExitPreviewHandler = exports.createPreviewHandler = void 0;
const headers_1 = require("next/headers");
const navigation_1 = require("next/navigation");
const server_1 = require("next/server");
/**
* Creates a preview mode handler for draft content
*
* Enables Next.js draft mode to preview unpublished content from Strapi.
* The SDK automatically detects draft mode and fetches draft content.
*
* @param config - Preview configuration
* @returns Next.js Route Handler
*
* @example
* ```typescript
* // app/api/preview/route.ts
* import { createPreviewHandler } from 'strapi-nextgen-framework';
*
* const handler = createPreviewHandler({
* secret: process.env.STRAPI_PREVIEW_SECRET!,
* logging: true,
* });
*
* export { handler as GET };
* ```
*
* Usage:
* ```
* /api/preview?secret=YOUR_SECRET&slug=/about
* ```
*/
function createPreviewHandler(config) {
return async function handler(request) {
try {
// Parse query parameters
const { searchParams } = new URL(request.url);
const secret = searchParams.get('secret');
const slug = searchParams.get('slug') || '/';
// Validate secret
if (!secret || secret !== config.secret) {
if (config.logging) {
console.error('[PreviewHandler] Invalid preview secret');
}
return server_1.NextResponse.json({ error: 'Invalid token' }, { status: 401 });
}
// Enable draft mode
(0, headers_1.draftMode)().enable();
if (config.logging) {
console.log('[PreviewHandler] Draft mode enabled for:', slug);
}
// Redirect to the path
(0, navigation_1.redirect)(slug);
}
catch (error) {
if (config.logging) {
console.error('[PreviewHandler] Error:', error);
}
return server_1.NextResponse.json({ error: 'Internal server error' }, { status: 500 });
}
};
}
exports.createPreviewHandler = createPreviewHandler;
/**
* Creates a handler to disable preview mode
*
* @example
* ```typescript
* // app/api/exit-preview/route.ts
* import { createExitPreviewHandler } from 'strapi-nextgen-framework';
*
* const handler = createExitPreviewHandler();
* export { handler as GET };
* ```
*/
function createExitPreviewHandler() {
return async function handler() {
(0, headers_1.draftMode)().disable();
return server_1.NextResponse.json({ preview: false });
};
}
exports.createExitPreviewHandler = createExitPreviewHandler;
//# sourceMappingURL=index.js.map