@demokit-ai/next 0.2.0 → 0.4.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 +190 -0
- package/dist/chunk-YLBNVWMI.js +109 -0
- package/dist/chunk-YLBNVWMI.js.map +1 -0
- package/dist/client.cjs +161 -55
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +8 -3
- package/dist/client.d.ts +8 -3
- package/dist/client.js +115 -20
- package/dist/client.js.map +1 -1
- package/dist/index.cjs +47 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +31 -3
- package/dist/index.d.ts +31 -3
- package/dist/index.js +16 -3
- package/dist/index.js.map +1 -1
- package/dist/middleware.cjs +40 -13
- package/dist/middleware.cjs.map +1 -1
- package/dist/middleware.d.cts +1 -1
- package/dist/middleware.d.ts +1 -1
- package/dist/middleware.js +11 -104
- package/dist/middleware.js.map +1 -1
- package/dist/server.cjs +62 -24
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +24 -104
- package/dist/server.js.map +1 -1
- package/dist/{types-Cvq5JUP1.d.cts → types-Brt8EaFz.d.cts} +38 -1
- package/dist/{types-Cvq5JUP1.d.ts → types-Brt8EaFz.d.ts} +38 -1
- package/package.json +23 -36
- package/README.md +0 -193
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts"],"
|
|
1
|
+
{"version":3,"sources":["../src/config.ts"],"sourcesContent":["import type { FixtureMap } from '@demokit-ai/core'\nimport type { DemoKitNextConfig, DemoScenario, RemoteSourceConfig } from './types'\n\n/**\n * Helper to define fixtures with type safety\n *\n * @example\n * const fixtures = defineFixtures({\n * 'GET /api/users': () => [\n * { id: '1', name: 'Demo User' },\n * ],\n * 'GET /api/users/:id': ({ params }) => ({\n * id: params.id,\n * name: `User ${params.id}`,\n * }),\n * 'POST /api/users': async ({ body }) => ({\n * id: crypto.randomUUID(),\n * ...body,\n * }),\n * })\n */\nexport function defineFixtures<T extends FixtureMap>(fixtures: T): T {\n return fixtures\n}\n\n/**\n * Helper to define scenarios with type safety\n *\n * @example\n * const scenarios = defineScenarios({\n * 'empty-state': {\n * 'GET /api/users': () => [],\n * 'GET /api/projects': () => [],\n * },\n * 'error-state': {\n * 'GET /api/users': () => {\n * throw new Error('API Error')\n * },\n * },\n * 'new-user': {\n * 'GET /api/users': () => [\n * { id: '1', name: 'Welcome, New User!', isNew: true },\n * ],\n * },\n * })\n */\nexport function defineScenarios<T extends Record<string, FixtureMap>>(scenarios: T): T {\n return scenarios\n}\n\n/**\n * Helper to create a scenario object\n *\n * @example\n * const emptyStateScenario = createScenario({\n * name: 'empty-state',\n * description: 'Shows the app with no data',\n * fixtures: {\n * 'GET /api/users': () => [],\n * },\n * })\n */\nexport function createScenario(scenario: DemoScenario): DemoScenario {\n return scenario\n}\n\n/**\n * Merge multiple fixture maps\n *\n * @example\n * const allFixtures = mergeFixtures(\n * baseFixtures,\n * usersFixtures,\n * projectsFixtures\n * )\n */\nexport function mergeFixtures(...fixtureMaps: FixtureMap[]): FixtureMap {\n return Object.assign({}, ...fixtureMaps)\n}\n\n/**\n * Create a complete DemoKit Next.js configuration\n *\n * @example\n * // lib/demo.ts\n * import { createDemoConfig, defineFixtures, defineScenarios } from '@demokit-ai/next'\n *\n * export const demoConfig = createDemoConfig({\n * fixtures: defineFixtures({\n * 'GET /api/users': () => [{ id: '1', name: 'Demo User' }],\n * }),\n * scenarios: defineScenarios({\n * 'empty': { 'GET /api/users': () => [] },\n * }),\n * })\n */\nexport function createDemoConfig(config: DemoKitNextConfig): DemoKitNextConfig {\n return {\n storageKey: 'demokit-mode',\n cookieName: 'demokit-mode',\n urlParam: 'demo',\n ...config,\n }\n}\n\n/**\n * Create a remote source configuration for fetching fixtures from DemoKit Cloud\n *\n * The SDK appends `/fixtures` to your apiUrl, so provide the versioned base URL.\n *\n * @example\n * ```typescript\n * // lib/demokit-config.ts\n * import { createRemoteSource } from '@demokit-ai/next'\n *\n * // .env.local:\n * // NEXT_PUBLIC_DEMOKIT_API_URL=https://demokit-cloud.kasava.dev/api\n * // NEXT_PUBLIC_DEMOKIT_API_KEY=dk_live_xxxx\n *\n * export const demokitSource = createRemoteSource({\n * apiUrl: process.env.NEXT_PUBLIC_DEMOKIT_API_URL!,\n * apiKey: process.env.NEXT_PUBLIC_DEMOKIT_API_KEY!,\n * })\n *\n * // Then in providers.tsx:\n * import { demokitSource } from '@/lib/demokit-config'\n *\n * <DemoKitNextProvider source={demokitSource}>\n * {children}\n * </DemoKitNextProvider>\n * ```\n */\nexport function createRemoteSource(config: RemoteSourceConfig): RemoteSourceConfig {\n return {\n timeout: 10000,\n retry: true,\n maxRetries: 3,\n ...config,\n }\n}\n"],"mappings":";AAqBO,SAAS,eAAqC,UAAgB;AACnE,SAAO;AACT;AAuBO,SAAS,gBAAsD,WAAiB;AACrF,SAAO;AACT;AAcO,SAAS,eAAe,UAAsC;AACnE,SAAO;AACT;AAYO,SAAS,iBAAiB,aAAuC;AACtE,SAAO,OAAO,OAAO,CAAC,GAAG,GAAG,WAAW;AACzC;AAkBO,SAAS,iBAAiB,QAA8C;AAC7E,SAAO;AAAA,IACL,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,GAAG;AAAA,EACL;AACF;AA6BO,SAAS,mBAAmB,QAAgD;AACjF,SAAO;AAAA,IACL,SAAS;AAAA,IACT,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,GAAG;AAAA,EACL;AACF;","names":[]}
|
package/dist/middleware.cjs
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
2
19
|
|
|
3
|
-
|
|
20
|
+
// src/middleware.ts
|
|
21
|
+
var middleware_exports = {};
|
|
22
|
+
__export(middleware_exports, {
|
|
23
|
+
createDemoMiddleware: () => createDemoMiddleware,
|
|
24
|
+
demoMiddleware: () => demoMiddleware,
|
|
25
|
+
getDemoScenario: () => getDemoScenario,
|
|
26
|
+
isDemoRequest: () => isDemoRequest
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(middleware_exports);
|
|
4
29
|
|
|
5
30
|
// src/server/middleware.ts
|
|
31
|
+
var import_server = require("next/server");
|
|
6
32
|
var DEFAULT_CONFIG = {
|
|
7
33
|
cookieName: "demokit-mode",
|
|
8
34
|
urlParam: "demo",
|
|
@@ -22,20 +48,20 @@ function createDemoMiddleware(config = {}) {
|
|
|
22
48
|
return function demoMiddleware2(request) {
|
|
23
49
|
const demoParam = request.nextUrl.searchParams.get(urlParam);
|
|
24
50
|
const demoCookie = request.cookies.get(cookieName);
|
|
25
|
-
let response =
|
|
51
|
+
let response = import_server.NextResponse.next();
|
|
26
52
|
let isDemoMode = false;
|
|
27
53
|
let scenario = null;
|
|
28
54
|
if (demoParam !== null) {
|
|
29
55
|
if (demoParam === "false" || demoParam === "0" || demoParam === "") {
|
|
30
|
-
response =
|
|
56
|
+
response = import_server.NextResponse.next();
|
|
31
57
|
response.cookies.delete(cookieName);
|
|
32
58
|
isDemoMode = false;
|
|
33
59
|
} else if (demoParam === "true" || demoParam === "1") {
|
|
34
|
-
response =
|
|
60
|
+
response = import_server.NextResponse.next();
|
|
35
61
|
response.cookies.set(cookieName, "true", cookieOptions);
|
|
36
62
|
isDemoMode = true;
|
|
37
63
|
} else {
|
|
38
|
-
response =
|
|
64
|
+
response = import_server.NextResponse.next();
|
|
39
65
|
response.cookies.set(cookieName, demoParam, cookieOptions);
|
|
40
66
|
isDemoMode = true;
|
|
41
67
|
scenario = demoParam;
|
|
@@ -51,7 +77,7 @@ function createDemoMiddleware(config = {}) {
|
|
|
51
77
|
if (isApiRoute) {
|
|
52
78
|
const requestHeaders = new Headers(request.headers);
|
|
53
79
|
requestHeaders.set(headerName, scenario ?? "true");
|
|
54
|
-
response =
|
|
80
|
+
response = import_server.NextResponse.next({
|
|
55
81
|
request: {
|
|
56
82
|
headers: requestHeaders
|
|
57
83
|
}
|
|
@@ -102,10 +128,11 @@ function getDemoScenario(request, config = {}) {
|
|
|
102
128
|
}
|
|
103
129
|
return null;
|
|
104
130
|
}
|
|
105
|
-
|
|
106
|
-
exports
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
131
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
132
|
+
0 && (module.exports = {
|
|
133
|
+
createDemoMiddleware,
|
|
134
|
+
demoMiddleware,
|
|
135
|
+
getDemoScenario,
|
|
136
|
+
isDemoRequest
|
|
137
|
+
});
|
|
111
138
|
//# sourceMappingURL=middleware.cjs.map
|
package/dist/middleware.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/server/middleware.ts"],"
|
|
1
|
+
{"version":3,"sources":["../src/middleware.ts","../src/server/middleware.ts"],"sourcesContent":["/**\n * Middleware exports for @demokit-ai/next\n *\n * Import from '@demokit-ai/next/middleware' in your middleware.ts file.\n *\n * @example\n * // middleware.ts\n * import { demoMiddleware } from '@demokit-ai/next/middleware'\n *\n * export const middleware = demoMiddleware()\n *\n * export const config = {\n * matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'],\n * }\n */\n\nexport {\n createDemoMiddleware,\n demoMiddleware,\n isDemoRequest,\n getDemoScenario,\n} from './server/middleware'\n\nexport type { DemoMiddlewareConfig, MiddlewareResult } from './types'\n","import { NextRequest, NextResponse } from 'next/server'\nimport type { DemoMiddlewareConfig, MiddlewareResult } from '../types'\n\nconst DEFAULT_CONFIG: Required<DemoMiddlewareConfig> = {\n cookieName: 'demokit-mode',\n urlParam: 'demo',\n headerName: 'x-demokit-mode',\n apiPaths: ['/api/'],\n cookieOptions: {\n maxAge: 60 * 60 * 24 * 7, // 1 week\n path: '/',\n sameSite: 'lax',\n secure: process.env.NODE_ENV === 'production',\n },\n}\n\n/**\n * Create a demo-aware middleware\n *\n * This middleware:\n * 1. Checks for demo mode URL parameter (?demo=true or ?demo=false)\n * 2. Sets/clears demo mode cookie\n * 3. Adds demo mode header to API requests\n * 4. Supports scenario switching via ?demo=scenario-name\n *\n * @example\n * // middleware.ts\n * import { createDemoMiddleware } from '@demokit-ai/next/middleware'\n *\n * const demoMiddleware = createDemoMiddleware()\n *\n * export function middleware(request: NextRequest) {\n * return demoMiddleware(request)\n * }\n *\n * export const config = {\n * matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'],\n * }\n */\nexport function createDemoMiddleware(config: DemoMiddlewareConfig = {}) {\n const mergedConfig = { ...DEFAULT_CONFIG, ...config }\n const { cookieName, urlParam, headerName, apiPaths, cookieOptions } = mergedConfig\n\n return function demoMiddleware(request: NextRequest): MiddlewareResult {\n // Check for demo mode in URL param\n const demoParam = request.nextUrl.searchParams.get(urlParam)\n\n // Check for existing cookie\n const demoCookie = request.cookies.get(cookieName)\n\n let response = NextResponse.next()\n let isDemoMode = false\n let scenario: string | null = null\n\n // Handle URL param toggle\n if (demoParam !== null) {\n if (demoParam === 'false' || demoParam === '0' || demoParam === '') {\n // Disable demo mode\n response = NextResponse.next()\n response.cookies.delete(cookieName)\n isDemoMode = false\n } else if (demoParam === 'true' || demoParam === '1') {\n // Enable demo mode (no scenario)\n response = NextResponse.next()\n response.cookies.set(cookieName, 'true', cookieOptions)\n isDemoMode = true\n } else {\n // Enable with specific scenario\n response = NextResponse.next()\n response.cookies.set(cookieName, demoParam, cookieOptions)\n isDemoMode = true\n scenario = demoParam\n }\n } else if (demoCookie) {\n // Use existing cookie\n isDemoMode = true\n scenario = demoCookie.value !== 'true' ? demoCookie.value : null\n }\n\n // Add header for API routes\n if (isDemoMode) {\n const isApiRoute = apiPaths.some((path) =>\n request.nextUrl.pathname.startsWith(path)\n )\n\n if (isApiRoute) {\n const requestHeaders = new Headers(request.headers)\n requestHeaders.set(headerName, scenario ?? 'true')\n\n response = NextResponse.next({\n request: {\n headers: requestHeaders,\n },\n })\n\n // Re-set cookie if we created new response\n if (demoParam !== null) {\n if (demoParam === 'false' || demoParam === '0' || demoParam === '') {\n response.cookies.delete(cookieName)\n } else {\n response.cookies.set(\n cookieName,\n demoParam === 'true' || demoParam === '1' ? 'true' : demoParam,\n cookieOptions\n )\n }\n }\n }\n }\n\n return {\n isDemoMode,\n scenario,\n response,\n }\n }\n}\n\n/**\n * Simple middleware wrapper that just returns the response\n *\n * @example\n * import { demoMiddleware } from '@demokit-ai/next/middleware'\n * export const middleware = demoMiddleware()\n */\nexport function demoMiddleware(config: DemoMiddlewareConfig = {}) {\n const handler = createDemoMiddleware(config)\n\n return function middleware(request: NextRequest): NextResponse {\n return handler(request).response\n }\n}\n\n/**\n * Check if a request is in demo mode (from middleware or direct header check)\n */\nexport function isDemoRequest(request: NextRequest, config: DemoMiddlewareConfig = {}): boolean {\n const { cookieName = 'demokit-mode', headerName = 'x-demokit-mode' } = config\n\n // Check header first (set by middleware)\n if (request.headers.get(headerName)) {\n return true\n }\n\n // Check cookie\n const cookie = request.cookies.get(cookieName)\n return cookie !== undefined && cookie.value !== ''\n}\n\n/**\n * Get the demo scenario from a request\n */\nexport function getDemoScenario(request: NextRequest, config: DemoMiddlewareConfig = {}): string | null {\n const { cookieName = 'demokit-mode', headerName = 'x-demokit-mode' } = config\n\n // Check header first\n const headerValue = request.headers.get(headerName)\n if (headerValue && headerValue !== 'true') {\n return headerValue\n }\n\n // Check cookie\n const cookie = request.cookies.get(cookieName)\n if (cookie && cookie.value !== 'true') {\n return cookie.value\n }\n\n return null\n}\n"],"mappings":"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","names":["demoMiddleware"]}
|
package/dist/middleware.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NextRequest, NextResponse } from 'next/server';
|
|
2
|
-
import { c as DemoMiddlewareConfig, M as MiddlewareResult } from './types-
|
|
2
|
+
import { c as DemoMiddlewareConfig, M as MiddlewareResult } from './types-Brt8EaFz.cjs';
|
|
3
3
|
import '@demokit-ai/core';
|
|
4
4
|
import 'react';
|
|
5
5
|
|
package/dist/middleware.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NextRequest, NextResponse } from 'next/server';
|
|
2
|
-
import { c as DemoMiddlewareConfig, M as MiddlewareResult } from './types-
|
|
2
|
+
import { c as DemoMiddlewareConfig, M as MiddlewareResult } from './types-Brt8EaFz.js';
|
|
3
3
|
import '@demokit-ai/core';
|
|
4
4
|
import 'react';
|
|
5
5
|
|
package/dist/middleware.js
CHANGED
|
@@ -1,106 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
path: "/",
|
|
13
|
-
sameSite: "lax",
|
|
14
|
-
secure: process.env.NODE_ENV === "production"
|
|
15
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
createDemoMiddleware,
|
|
3
|
+
demoMiddleware,
|
|
4
|
+
getDemoScenario,
|
|
5
|
+
isDemoRequest
|
|
6
|
+
} from "./chunk-YLBNVWMI.js";
|
|
7
|
+
export {
|
|
8
|
+
createDemoMiddleware,
|
|
9
|
+
demoMiddleware,
|
|
10
|
+
getDemoScenario,
|
|
11
|
+
isDemoRequest
|
|
16
12
|
};
|
|
17
|
-
function createDemoMiddleware(config = {}) {
|
|
18
|
-
const mergedConfig = { ...DEFAULT_CONFIG, ...config };
|
|
19
|
-
const { cookieName, urlParam, headerName, apiPaths, cookieOptions } = mergedConfig;
|
|
20
|
-
return function demoMiddleware2(request) {
|
|
21
|
-
const demoParam = request.nextUrl.searchParams.get(urlParam);
|
|
22
|
-
const demoCookie = request.cookies.get(cookieName);
|
|
23
|
-
let response = NextResponse.next();
|
|
24
|
-
let isDemoMode = false;
|
|
25
|
-
let scenario = null;
|
|
26
|
-
if (demoParam !== null) {
|
|
27
|
-
if (demoParam === "false" || demoParam === "0" || demoParam === "") {
|
|
28
|
-
response = NextResponse.next();
|
|
29
|
-
response.cookies.delete(cookieName);
|
|
30
|
-
isDemoMode = false;
|
|
31
|
-
} else if (demoParam === "true" || demoParam === "1") {
|
|
32
|
-
response = NextResponse.next();
|
|
33
|
-
response.cookies.set(cookieName, "true", cookieOptions);
|
|
34
|
-
isDemoMode = true;
|
|
35
|
-
} else {
|
|
36
|
-
response = NextResponse.next();
|
|
37
|
-
response.cookies.set(cookieName, demoParam, cookieOptions);
|
|
38
|
-
isDemoMode = true;
|
|
39
|
-
scenario = demoParam;
|
|
40
|
-
}
|
|
41
|
-
} else if (demoCookie) {
|
|
42
|
-
isDemoMode = true;
|
|
43
|
-
scenario = demoCookie.value !== "true" ? demoCookie.value : null;
|
|
44
|
-
}
|
|
45
|
-
if (isDemoMode) {
|
|
46
|
-
const isApiRoute = apiPaths.some(
|
|
47
|
-
(path) => request.nextUrl.pathname.startsWith(path)
|
|
48
|
-
);
|
|
49
|
-
if (isApiRoute) {
|
|
50
|
-
const requestHeaders = new Headers(request.headers);
|
|
51
|
-
requestHeaders.set(headerName, scenario ?? "true");
|
|
52
|
-
response = NextResponse.next({
|
|
53
|
-
request: {
|
|
54
|
-
headers: requestHeaders
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
if (demoParam !== null) {
|
|
58
|
-
if (demoParam === "false" || demoParam === "0" || demoParam === "") {
|
|
59
|
-
response.cookies.delete(cookieName);
|
|
60
|
-
} else {
|
|
61
|
-
response.cookies.set(
|
|
62
|
-
cookieName,
|
|
63
|
-
demoParam === "true" || demoParam === "1" ? "true" : demoParam,
|
|
64
|
-
cookieOptions
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return {
|
|
71
|
-
isDemoMode,
|
|
72
|
-
scenario,
|
|
73
|
-
response
|
|
74
|
-
};
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
function demoMiddleware(config = {}) {
|
|
78
|
-
const handler = createDemoMiddleware(config);
|
|
79
|
-
return function middleware(request) {
|
|
80
|
-
return handler(request).response;
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
function isDemoRequest(request, config = {}) {
|
|
84
|
-
const { cookieName = "demokit-mode", headerName = "x-demokit-mode" } = config;
|
|
85
|
-
if (request.headers.get(headerName)) {
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
const cookie = request.cookies.get(cookieName);
|
|
89
|
-
return cookie !== void 0 && cookie.value !== "";
|
|
90
|
-
}
|
|
91
|
-
function getDemoScenario(request, config = {}) {
|
|
92
|
-
const { cookieName = "demokit-mode", headerName = "x-demokit-mode" } = config;
|
|
93
|
-
const headerValue = request.headers.get(headerName);
|
|
94
|
-
if (headerValue && headerValue !== "true") {
|
|
95
|
-
return headerValue;
|
|
96
|
-
}
|
|
97
|
-
const cookie = request.cookies.get(cookieName);
|
|
98
|
-
if (cookie && cookie.value !== "true") {
|
|
99
|
-
return cookie.value;
|
|
100
|
-
}
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
export { createDemoMiddleware, demoMiddleware, getDemoScenario, isDemoRequest };
|
|
105
|
-
//# sourceMappingURL=middleware.js.map
|
|
106
13
|
//# sourceMappingURL=middleware.js.map
|
package/dist/middleware.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/server.cjs
CHANGED
|
@@ -1,11 +1,42 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
2
19
|
|
|
3
|
-
|
|
4
|
-
var
|
|
5
|
-
|
|
20
|
+
// src/server.ts
|
|
21
|
+
var server_exports = {};
|
|
22
|
+
__export(server_exports, {
|
|
23
|
+
createDemoMiddleware: () => createDemoMiddleware,
|
|
24
|
+
createServerInterceptor: () => createServerInterceptor,
|
|
25
|
+
demoContextStorage: () => demoContextStorage,
|
|
26
|
+
demoMiddleware: () => demoMiddleware,
|
|
27
|
+
getDemoScenario: () => getDemoScenario,
|
|
28
|
+
getServerDemoContext: () => getServerDemoContext,
|
|
29
|
+
getServerScenario: () => getServerScenario,
|
|
30
|
+
isDemoRequest: () => isDemoRequest,
|
|
31
|
+
isServerDemoMode: () => isServerDemoMode,
|
|
32
|
+
runWithDemoContext: () => runWithDemoContext,
|
|
33
|
+
withDemoCheck: () => withDemoCheck
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(server_exports);
|
|
6
36
|
|
|
7
37
|
// src/server/context.ts
|
|
8
|
-
var
|
|
38
|
+
var import_node_async_hooks = require("async_hooks");
|
|
39
|
+
var demoContextStorage = new import_node_async_hooks.AsyncLocalStorage();
|
|
9
40
|
function getServerDemoContext() {
|
|
10
41
|
return demoContextStorage.getStore() ?? null;
|
|
11
42
|
}
|
|
@@ -20,6 +51,9 @@ function getServerScenario() {
|
|
|
20
51
|
function runWithDemoContext(context, fn) {
|
|
21
52
|
return demoContextStorage.run(context, fn);
|
|
22
53
|
}
|
|
54
|
+
|
|
55
|
+
// src/server/interceptor.ts
|
|
56
|
+
var import_core = require("@demokit-ai/core");
|
|
23
57
|
function createServerInterceptor(config) {
|
|
24
58
|
const { fixtures, scenarios = {}, baseUrl } = config;
|
|
25
59
|
const getActiveFixtures = () => {
|
|
@@ -50,7 +84,7 @@ function createServerInterceptor(config) {
|
|
|
50
84
|
return void 0;
|
|
51
85
|
}
|
|
52
86
|
});
|
|
53
|
-
return
|
|
87
|
+
return (0, import_core.createDemoInterceptor)({
|
|
54
88
|
fixtures: wrappedFixtures,
|
|
55
89
|
baseUrl,
|
|
56
90
|
// Server-side storage is not used (we use cookies/headers)
|
|
@@ -68,6 +102,9 @@ function withDemoCheck(handler, fallback) {
|
|
|
68
102
|
return handler(context);
|
|
69
103
|
};
|
|
70
104
|
}
|
|
105
|
+
|
|
106
|
+
// src/server/middleware.ts
|
|
107
|
+
var import_server = require("next/server");
|
|
71
108
|
var DEFAULT_CONFIG = {
|
|
72
109
|
cookieName: "demokit-mode",
|
|
73
110
|
urlParam: "demo",
|
|
@@ -87,20 +124,20 @@ function createDemoMiddleware(config = {}) {
|
|
|
87
124
|
return function demoMiddleware2(request) {
|
|
88
125
|
const demoParam = request.nextUrl.searchParams.get(urlParam);
|
|
89
126
|
const demoCookie = request.cookies.get(cookieName);
|
|
90
|
-
let response =
|
|
127
|
+
let response = import_server.NextResponse.next();
|
|
91
128
|
let isDemoMode = false;
|
|
92
129
|
let scenario = null;
|
|
93
130
|
if (demoParam !== null) {
|
|
94
131
|
if (demoParam === "false" || demoParam === "0" || demoParam === "") {
|
|
95
|
-
response =
|
|
132
|
+
response = import_server.NextResponse.next();
|
|
96
133
|
response.cookies.delete(cookieName);
|
|
97
134
|
isDemoMode = false;
|
|
98
135
|
} else if (demoParam === "true" || demoParam === "1") {
|
|
99
|
-
response =
|
|
136
|
+
response = import_server.NextResponse.next();
|
|
100
137
|
response.cookies.set(cookieName, "true", cookieOptions);
|
|
101
138
|
isDemoMode = true;
|
|
102
139
|
} else {
|
|
103
|
-
response =
|
|
140
|
+
response = import_server.NextResponse.next();
|
|
104
141
|
response.cookies.set(cookieName, demoParam, cookieOptions);
|
|
105
142
|
isDemoMode = true;
|
|
106
143
|
scenario = demoParam;
|
|
@@ -116,7 +153,7 @@ function createDemoMiddleware(config = {}) {
|
|
|
116
153
|
if (isApiRoute) {
|
|
117
154
|
const requestHeaders = new Headers(request.headers);
|
|
118
155
|
requestHeaders.set(headerName, scenario ?? "true");
|
|
119
|
-
response =
|
|
156
|
+
response = import_server.NextResponse.next({
|
|
120
157
|
request: {
|
|
121
158
|
headers: requestHeaders
|
|
122
159
|
}
|
|
@@ -167,17 +204,18 @@ function getDemoScenario(request, config = {}) {
|
|
|
167
204
|
}
|
|
168
205
|
return null;
|
|
169
206
|
}
|
|
170
|
-
|
|
171
|
-
exports
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
207
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
208
|
+
0 && (module.exports = {
|
|
209
|
+
createDemoMiddleware,
|
|
210
|
+
createServerInterceptor,
|
|
211
|
+
demoContextStorage,
|
|
212
|
+
demoMiddleware,
|
|
213
|
+
getDemoScenario,
|
|
214
|
+
getServerDemoContext,
|
|
215
|
+
getServerScenario,
|
|
216
|
+
isDemoRequest,
|
|
217
|
+
isServerDemoMode,
|
|
218
|
+
runWithDemoContext,
|
|
219
|
+
withDemoCheck
|
|
220
|
+
});
|
|
183
221
|
//# sourceMappingURL=server.cjs.map
|
package/dist/server.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/server/context.ts","../src/server/interceptor.ts","../src/server/middleware.ts"],"names":["AsyncLocalStorage","createDemoInterceptor","demoMiddleware","NextResponse"],"mappings":"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","file":"server.cjs","sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks'\n\n/**\n * Server-side demo mode context\n */\nexport interface ServerDemoContext {\n /**\n * Whether demo mode is enabled\n */\n enabled: boolean\n\n /**\n * The current scenario name\n */\n scenario: string | null\n}\n\n/**\n * AsyncLocalStorage for server-side demo mode context\n * This allows Server Components to access demo mode state\n */\nexport const demoContextStorage = new AsyncLocalStorage<ServerDemoContext>()\n\n/**\n * Get the current server-side demo context\n * Returns null if not in a demo context\n */\nexport function getServerDemoContext(): ServerDemoContext | null {\n return demoContextStorage.getStore() ?? null\n}\n\n/**\n * Check if demo mode is enabled on the server\n */\nexport function isServerDemoMode(): boolean {\n const context = getServerDemoContext()\n return context?.enabled ?? false\n}\n\n/**\n * Get the current scenario on the server\n */\nexport function getServerScenario(): string | null {\n const context = getServerDemoContext()\n return context?.scenario ?? null\n}\n\n/**\n * Run a function within a demo context\n */\nexport function runWithDemoContext<T>(\n context: ServerDemoContext,\n fn: () => T\n): T {\n return demoContextStorage.run(context, fn)\n}\n","import {\n createDemoInterceptor,\n type FixtureMap,\n type DemoInterceptor,\n type RequestContext,\n} from '@demokit-ai/core'\nimport { isServerDemoMode, getServerScenario } from './context'\n\n/**\n * Configuration for server-side demo interceptor\n */\nexport interface ServerInterceptorConfig {\n /**\n * Base fixtures (always available)\n */\n fixtures: FixtureMap\n\n /**\n * Scenario-specific fixtures\n */\n scenarios?: Record<string, FixtureMap>\n\n /**\n * Base URL for relative URL parsing\n */\n baseUrl?: string\n}\n\n/**\n * Create a server-side demo interceptor\n *\n * This interceptor works with Server Components and API routes.\n * It uses AsyncLocalStorage to check demo mode state.\n *\n * @example\n * // lib/demo-interceptor.ts\n * import { createServerInterceptor } from '@demokit-ai/next/server'\n *\n * export const demoInterceptor = createServerInterceptor({\n * fixtures: {\n * 'GET /api/users': () => [{ id: '1', name: 'Demo User' }],\n * },\n * scenarios: {\n * 'empty': { 'GET /api/users': () => [] },\n * },\n * })\n *\n * // Enable in your app\n * demoInterceptor.enable()\n */\nexport function createServerInterceptor(config: ServerInterceptorConfig): DemoInterceptor {\n const { fixtures, scenarios = {}, baseUrl } = config\n\n // Merge fixtures based on current scenario\n const getActiveFixtures = (): FixtureMap => {\n const scenario = getServerScenario()\n if (scenario && scenarios[scenario]) {\n return { ...fixtures, ...scenarios[scenario] }\n }\n return fixtures\n }\n\n // Wrapper that checks server context before each request\n const wrappedFixtures: FixtureMap = new Proxy(fixtures, {\n get(target, prop: string) {\n const activeFixtures = getActiveFixtures()\n return activeFixtures[prop]\n },\n ownKeys() {\n const activeFixtures = getActiveFixtures()\n return Reflect.ownKeys(activeFixtures)\n },\n getOwnPropertyDescriptor(target, prop) {\n const activeFixtures = getActiveFixtures()\n if (prop in activeFixtures) {\n return {\n configurable: true,\n enumerable: true,\n value: activeFixtures[prop as string],\n }\n }\n return undefined\n },\n })\n\n return createDemoInterceptor({\n fixtures: wrappedFixtures,\n baseUrl,\n // Server-side storage is not used (we use cookies/headers)\n storageKey: undefined,\n })\n}\n\n/**\n * Helper to wrap a fixture handler with demo mode check\n */\nexport function withDemoCheck<T>(\n handler: (context: RequestContext) => T | Promise<T>,\n fallback?: () => T | Promise<T>\n): (context: RequestContext) => T | Promise<T> {\n return async (context) => {\n if (!isServerDemoMode()) {\n if (fallback) {\n return fallback()\n }\n throw new Error('[DemoKit] Demo mode is not enabled')\n }\n return handler(context)\n }\n}\n","import { NextRequest, NextResponse } from 'next/server'\nimport type { DemoMiddlewareConfig, MiddlewareResult } from '../types'\n\nconst DEFAULT_CONFIG: Required<DemoMiddlewareConfig> = {\n cookieName: 'demokit-mode',\n urlParam: 'demo',\n headerName: 'x-demokit-mode',\n apiPaths: ['/api/'],\n cookieOptions: {\n maxAge: 60 * 60 * 24 * 7, // 1 week\n path: '/',\n sameSite: 'lax',\n secure: process.env.NODE_ENV === 'production',\n },\n}\n\n/**\n * Create a demo-aware middleware\n *\n * This middleware:\n * 1. Checks for demo mode URL parameter (?demo=true or ?demo=false)\n * 2. Sets/clears demo mode cookie\n * 3. Adds demo mode header to API requests\n * 4. Supports scenario switching via ?demo=scenario-name\n *\n * @example\n * // middleware.ts\n * import { createDemoMiddleware } from '@demokit-ai/next/middleware'\n *\n * const demoMiddleware = createDemoMiddleware()\n *\n * export function middleware(request: NextRequest) {\n * return demoMiddleware(request)\n * }\n *\n * export const config = {\n * matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'],\n * }\n */\nexport function createDemoMiddleware(config: DemoMiddlewareConfig = {}) {\n const mergedConfig = { ...DEFAULT_CONFIG, ...config }\n const { cookieName, urlParam, headerName, apiPaths, cookieOptions } = mergedConfig\n\n return function demoMiddleware(request: NextRequest): MiddlewareResult {\n // Check for demo mode in URL param\n const demoParam = request.nextUrl.searchParams.get(urlParam)\n\n // Check for existing cookie\n const demoCookie = request.cookies.get(cookieName)\n\n let response = NextResponse.next()\n let isDemoMode = false\n let scenario: string | null = null\n\n // Handle URL param toggle\n if (demoParam !== null) {\n if (demoParam === 'false' || demoParam === '0' || demoParam === '') {\n // Disable demo mode\n response = NextResponse.next()\n response.cookies.delete(cookieName)\n isDemoMode = false\n } else if (demoParam === 'true' || demoParam === '1') {\n // Enable demo mode (no scenario)\n response = NextResponse.next()\n response.cookies.set(cookieName, 'true', cookieOptions)\n isDemoMode = true\n } else {\n // Enable with specific scenario\n response = NextResponse.next()\n response.cookies.set(cookieName, demoParam, cookieOptions)\n isDemoMode = true\n scenario = demoParam\n }\n } else if (demoCookie) {\n // Use existing cookie\n isDemoMode = true\n scenario = demoCookie.value !== 'true' ? demoCookie.value : null\n }\n\n // Add header for API routes\n if (isDemoMode) {\n const isApiRoute = apiPaths.some((path) =>\n request.nextUrl.pathname.startsWith(path)\n )\n\n if (isApiRoute) {\n const requestHeaders = new Headers(request.headers)\n requestHeaders.set(headerName, scenario ?? 'true')\n\n response = NextResponse.next({\n request: {\n headers: requestHeaders,\n },\n })\n\n // Re-set cookie if we created new response\n if (demoParam !== null) {\n if (demoParam === 'false' || demoParam === '0' || demoParam === '') {\n response.cookies.delete(cookieName)\n } else {\n response.cookies.set(\n cookieName,\n demoParam === 'true' || demoParam === '1' ? 'true' : demoParam,\n cookieOptions\n )\n }\n }\n }\n }\n\n return {\n isDemoMode,\n scenario,\n response,\n }\n }\n}\n\n/**\n * Simple middleware wrapper that just returns the response\n *\n * @example\n * import { demoMiddleware } from '@demokit-ai/next/middleware'\n * export const middleware = demoMiddleware()\n */\nexport function demoMiddleware(config: DemoMiddlewareConfig = {}) {\n const handler = createDemoMiddleware(config)\n\n return function middleware(request: NextRequest): NextResponse {\n return handler(request).response\n }\n}\n\n/**\n * Check if a request is in demo mode (from middleware or direct header check)\n */\nexport function isDemoRequest(request: NextRequest, config: DemoMiddlewareConfig = {}): boolean {\n const { cookieName = 'demokit-mode', headerName = 'x-demokit-mode' } = config\n\n // Check header first (set by middleware)\n if (request.headers.get(headerName)) {\n return true\n }\n\n // Check cookie\n const cookie = request.cookies.get(cookieName)\n return cookie !== undefined && cookie.value !== ''\n}\n\n/**\n * Get the demo scenario from a request\n */\nexport function getDemoScenario(request: NextRequest, config: DemoMiddlewareConfig = {}): string | null {\n const { cookieName = 'demokit-mode', headerName = 'x-demokit-mode' } = config\n\n // Check header first\n const headerValue = request.headers.get(headerName)\n if (headerValue && headerValue !== 'true') {\n return headerValue\n }\n\n // Check cookie\n const cookie = request.cookies.get(cookieName)\n if (cookie && cookie.value !== 'true') {\n return cookie.value\n }\n\n return null\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/server.ts","../src/server/context.ts","../src/server/interceptor.ts","../src/server/middleware.ts"],"sourcesContent":["/**\n * Server-side exports for @demokit-ai/next\n *\n * Import from '@demokit-ai/next/server' for server components and API routes.\n *\n * @example\n * // In Server Components\n * import { isServerDemoMode, getServerScenario } from '@demokit-ai/next/server'\n *\n * // In API routes\n * import { isDemoRequest, getDemoScenario } from '@demokit-ai/next/server'\n */\n\nexport * from './server/index'\n","import { AsyncLocalStorage } from 'node:async_hooks'\n\n/**\n * Server-side demo mode context\n */\nexport interface ServerDemoContext {\n /**\n * Whether demo mode is enabled\n */\n enabled: boolean\n\n /**\n * The current scenario name\n */\n scenario: string | null\n}\n\n/**\n * AsyncLocalStorage for server-side demo mode context\n * This allows Server Components to access demo mode state\n */\nexport const demoContextStorage = new AsyncLocalStorage<ServerDemoContext>()\n\n/**\n * Get the current server-side demo context\n * Returns null if not in a demo context\n */\nexport function getServerDemoContext(): ServerDemoContext | null {\n return demoContextStorage.getStore() ?? null\n}\n\n/**\n * Check if demo mode is enabled on the server\n */\nexport function isServerDemoMode(): boolean {\n const context = getServerDemoContext()\n return context?.enabled ?? false\n}\n\n/**\n * Get the current scenario on the server\n */\nexport function getServerScenario(): string | null {\n const context = getServerDemoContext()\n return context?.scenario ?? null\n}\n\n/**\n * Run a function within a demo context\n */\nexport function runWithDemoContext<T>(\n context: ServerDemoContext,\n fn: () => T\n): T {\n return demoContextStorage.run(context, fn)\n}\n","import {\n createDemoInterceptor,\n type FixtureMap,\n type DemoInterceptor,\n type RequestContext,\n} from '@demokit-ai/core'\nimport { isServerDemoMode, getServerScenario } from './context'\n\n/**\n * Configuration for server-side demo interceptor\n */\nexport interface ServerInterceptorConfig {\n /**\n * Base fixtures (always available)\n */\n fixtures: FixtureMap\n\n /**\n * Scenario-specific fixtures\n */\n scenarios?: Record<string, FixtureMap>\n\n /**\n * Base URL for relative URL parsing\n */\n baseUrl?: string\n}\n\n/**\n * Create a server-side demo interceptor\n *\n * This interceptor works with Server Components and API routes.\n * It uses AsyncLocalStorage to check demo mode state.\n *\n * @example\n * // lib/demo-interceptor.ts\n * import { createServerInterceptor } from '@demokit-ai/next/server'\n *\n * export const demoInterceptor = createServerInterceptor({\n * fixtures: {\n * 'GET /api/users': () => [{ id: '1', name: 'Demo User' }],\n * },\n * scenarios: {\n * 'empty': { 'GET /api/users': () => [] },\n * },\n * })\n *\n * // Enable in your app\n * demoInterceptor.enable()\n */\nexport function createServerInterceptor(config: ServerInterceptorConfig): DemoInterceptor {\n const { fixtures, scenarios = {}, baseUrl } = config\n\n // Merge fixtures based on current scenario\n const getActiveFixtures = (): FixtureMap => {\n const scenario = getServerScenario()\n if (scenario && scenarios[scenario]) {\n return { ...fixtures, ...scenarios[scenario] }\n }\n return fixtures\n }\n\n // Wrapper that checks server context before each request\n const wrappedFixtures: FixtureMap = new Proxy(fixtures, {\n get(target, prop: string) {\n const activeFixtures = getActiveFixtures()\n return activeFixtures[prop]\n },\n ownKeys() {\n const activeFixtures = getActiveFixtures()\n return Reflect.ownKeys(activeFixtures)\n },\n getOwnPropertyDescriptor(target, prop) {\n const activeFixtures = getActiveFixtures()\n if (prop in activeFixtures) {\n return {\n configurable: true,\n enumerable: true,\n value: activeFixtures[prop as string],\n }\n }\n return undefined\n },\n })\n\n return createDemoInterceptor({\n fixtures: wrappedFixtures,\n baseUrl,\n // Server-side storage is not used (we use cookies/headers)\n storageKey: undefined,\n })\n}\n\n/**\n * Helper to wrap a fixture handler with demo mode check\n */\nexport function withDemoCheck<T>(\n handler: (context: RequestContext) => T | Promise<T>,\n fallback?: () => T | Promise<T>\n): (context: RequestContext) => T | Promise<T> {\n return async (context) => {\n if (!isServerDemoMode()) {\n if (fallback) {\n return fallback()\n }\n throw new Error('[DemoKit] Demo mode is not enabled')\n }\n return handler(context)\n }\n}\n","import { NextRequest, NextResponse } from 'next/server'\nimport type { DemoMiddlewareConfig, MiddlewareResult } from '../types'\n\nconst DEFAULT_CONFIG: Required<DemoMiddlewareConfig> = {\n cookieName: 'demokit-mode',\n urlParam: 'demo',\n headerName: 'x-demokit-mode',\n apiPaths: ['/api/'],\n cookieOptions: {\n maxAge: 60 * 60 * 24 * 7, // 1 week\n path: '/',\n sameSite: 'lax',\n secure: process.env.NODE_ENV === 'production',\n },\n}\n\n/**\n * Create a demo-aware middleware\n *\n * This middleware:\n * 1. Checks for demo mode URL parameter (?demo=true or ?demo=false)\n * 2. Sets/clears demo mode cookie\n * 3. Adds demo mode header to API requests\n * 4. Supports scenario switching via ?demo=scenario-name\n *\n * @example\n * // middleware.ts\n * import { createDemoMiddleware } from '@demokit-ai/next/middleware'\n *\n * const demoMiddleware = createDemoMiddleware()\n *\n * export function middleware(request: NextRequest) {\n * return demoMiddleware(request)\n * }\n *\n * export const config = {\n * matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'],\n * }\n */\nexport function createDemoMiddleware(config: DemoMiddlewareConfig = {}) {\n const mergedConfig = { ...DEFAULT_CONFIG, ...config }\n const { cookieName, urlParam, headerName, apiPaths, cookieOptions } = mergedConfig\n\n return function demoMiddleware(request: NextRequest): MiddlewareResult {\n // Check for demo mode in URL param\n const demoParam = request.nextUrl.searchParams.get(urlParam)\n\n // Check for existing cookie\n const demoCookie = request.cookies.get(cookieName)\n\n let response = NextResponse.next()\n let isDemoMode = false\n let scenario: string | null = null\n\n // Handle URL param toggle\n if (demoParam !== null) {\n if (demoParam === 'false' || demoParam === '0' || demoParam === '') {\n // Disable demo mode\n response = NextResponse.next()\n response.cookies.delete(cookieName)\n isDemoMode = false\n } else if (demoParam === 'true' || demoParam === '1') {\n // Enable demo mode (no scenario)\n response = NextResponse.next()\n response.cookies.set(cookieName, 'true', cookieOptions)\n isDemoMode = true\n } else {\n // Enable with specific scenario\n response = NextResponse.next()\n response.cookies.set(cookieName, demoParam, cookieOptions)\n isDemoMode = true\n scenario = demoParam\n }\n } else if (demoCookie) {\n // Use existing cookie\n isDemoMode = true\n scenario = demoCookie.value !== 'true' ? demoCookie.value : null\n }\n\n // Add header for API routes\n if (isDemoMode) {\n const isApiRoute = apiPaths.some((path) =>\n request.nextUrl.pathname.startsWith(path)\n )\n\n if (isApiRoute) {\n const requestHeaders = new Headers(request.headers)\n requestHeaders.set(headerName, scenario ?? 'true')\n\n response = NextResponse.next({\n request: {\n headers: requestHeaders,\n },\n })\n\n // Re-set cookie if we created new response\n if (demoParam !== null) {\n if (demoParam === 'false' || demoParam === '0' || demoParam === '') {\n response.cookies.delete(cookieName)\n } else {\n response.cookies.set(\n cookieName,\n demoParam === 'true' || demoParam === '1' ? 'true' : demoParam,\n cookieOptions\n )\n }\n }\n }\n }\n\n return {\n isDemoMode,\n scenario,\n response,\n }\n }\n}\n\n/**\n * Simple middleware wrapper that just returns the response\n *\n * @example\n * import { demoMiddleware } from '@demokit-ai/next/middleware'\n * export const middleware = demoMiddleware()\n */\nexport function demoMiddleware(config: DemoMiddlewareConfig = {}) {\n const handler = createDemoMiddleware(config)\n\n return function middleware(request: NextRequest): NextResponse {\n return handler(request).response\n }\n}\n\n/**\n * Check if a request is in demo mode (from middleware or direct header check)\n */\nexport function isDemoRequest(request: NextRequest, config: DemoMiddlewareConfig = {}): boolean {\n const { cookieName = 'demokit-mode', headerName = 'x-demokit-mode' } = config\n\n // Check header first (set by middleware)\n if (request.headers.get(headerName)) {\n return true\n }\n\n // Check cookie\n const cookie = request.cookies.get(cookieName)\n return cookie !== undefined && cookie.value !== ''\n}\n\n/**\n * Get the demo scenario from a request\n */\nexport function getDemoScenario(request: NextRequest, config: DemoMiddlewareConfig = {}): string | null {\n const { cookieName = 'demokit-mode', headerName = 'x-demokit-mode' } = config\n\n // Check header first\n const headerValue = request.headers.get(headerName)\n if (headerValue && headerValue !== 'true') {\n return headerValue\n }\n\n // Check cookie\n const cookie = request.cookies.get(cookieName)\n if (cookie && cookie.value !== 'true') {\n return cookie.value\n }\n\n return null\n}\n"],"mappings":"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","names":["demoMiddleware"]}
|
package/dist/server.d.cts
CHANGED
|
@@ -2,7 +2,7 @@ import { AsyncLocalStorage } from 'node:async_hooks';
|
|
|
2
2
|
import { FixtureMap, DemoInterceptor, RequestContext } from '@demokit-ai/core';
|
|
3
3
|
export { createDemoMiddleware, demoMiddleware, getDemoScenario, isDemoRequest } from './middleware.cjs';
|
|
4
4
|
import 'next/server';
|
|
5
|
-
import './types-
|
|
5
|
+
import './types-Brt8EaFz.cjs';
|
|
6
6
|
import 'react';
|
|
7
7
|
|
|
8
8
|
/**
|
package/dist/server.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { AsyncLocalStorage } from 'node:async_hooks';
|
|
|
2
2
|
import { FixtureMap, DemoInterceptor, RequestContext } from '@demokit-ai/core';
|
|
3
3
|
export { createDemoMiddleware, demoMiddleware, getDemoScenario, isDemoRequest } from './middleware.js';
|
|
4
4
|
import 'next/server';
|
|
5
|
-
import './types-
|
|
5
|
+
import './types-Brt8EaFz.js';
|
|
6
6
|
import 'react';
|
|
7
7
|
|
|
8
8
|
/**
|