@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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config.ts"],"names":[],"mappings":";AAqBO,SAAS,eAAqC,QAAA,EAAgB;AACnE,EAAA,OAAO,QAAA;AACT;AAuBO,SAAS,gBAAsD,SAAA,EAAiB;AACrF,EAAA,OAAO,SAAA;AACT;AAcO,SAAS,eAAe,QAAA,EAAsC;AACnE,EAAA,OAAO,QAAA;AACT;AAYO,SAAS,iBAAiB,WAAA,EAAuC;AACtE,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,GAAG,WAAW,CAAA;AACzC;AAkBO,SAAS,iBAAiB,MAAA,EAA8C;AAC7E,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,cAAA;AAAA,IACZ,UAAA,EAAY,cAAA;AAAA,IACZ,QAAA,EAAU,MAAA;AAAA,IACV,GAAG;AAAA,GACL;AACF","file":"index.js","sourcesContent":["import type { FixtureMap, FixtureHandler } from '@demokit-ai/core'\nimport type { DemoKitNextConfig, DemoScenario } 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"]}
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":[]}
@@ -1,8 +1,34 @@
1
- 'use strict';
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
- var server = require('next/server');
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 = server.NextResponse.next();
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 = server.NextResponse.next();
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 = server.NextResponse.next();
60
+ response = import_server.NextResponse.next();
35
61
  response.cookies.set(cookieName, "true", cookieOptions);
36
62
  isDemoMode = true;
37
63
  } else {
38
- response = server.NextResponse.next();
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 = server.NextResponse.next({
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.createDemoMiddleware = createDemoMiddleware;
107
- exports.demoMiddleware = demoMiddleware;
108
- exports.getDemoScenario = getDemoScenario;
109
- exports.isDemoRequest = isDemoRequest;
110
- //# sourceMappingURL=middleware.cjs.map
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
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server/middleware.ts"],"names":["demoMiddleware","NextResponse"],"mappings":"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","file":"middleware.cjs","sourcesContent":["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/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"]}
@@ -1,5 +1,5 @@
1
1
  import { NextRequest, NextResponse } from 'next/server';
2
- import { c as DemoMiddlewareConfig, M as MiddlewareResult } from './types-Cvq5JUP1.cjs';
2
+ import { c as DemoMiddlewareConfig, M as MiddlewareResult } from './types-Brt8EaFz.cjs';
3
3
  import '@demokit-ai/core';
4
4
  import 'react';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { NextRequest, NextResponse } from 'next/server';
2
- import { c as DemoMiddlewareConfig, M as MiddlewareResult } from './types-Cvq5JUP1.js';
2
+ import { c as DemoMiddlewareConfig, M as MiddlewareResult } from './types-Brt8EaFz.js';
3
3
  import '@demokit-ai/core';
4
4
  import 'react';
5
5
 
@@ -1,106 +1,13 @@
1
- import { NextResponse } from 'next/server';
2
-
3
- // src/server/middleware.ts
4
- var DEFAULT_CONFIG = {
5
- cookieName: "demokit-mode",
6
- urlParam: "demo",
7
- headerName: "x-demokit-mode",
8
- apiPaths: ["/api/"],
9
- cookieOptions: {
10
- maxAge: 60 * 60 * 24 * 7,
11
- // 1 week
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
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server/middleware.ts"],"names":["demoMiddleware"],"mappings":";;;AAGA,IAAM,cAAA,GAAiD;AAAA,EACrD,UAAA,EAAY,cAAA;AAAA,EACZ,QAAA,EAAU,MAAA;AAAA,EACV,UAAA,EAAY,gBAAA;AAAA,EACZ,QAAA,EAAU,CAAC,OAAO,CAAA;AAAA,EAClB,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,CAAA;AAAA;AAAA,IACvB,IAAA,EAAM,GAAA;AAAA,IACN,QAAA,EAAU,KAAA;AAAA,IACV,MAAA,EAAQ,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa;AAAA;AAErC,CAAA;AAyBO,SAAS,oBAAA,CAAqB,MAAA,GAA+B,EAAC,EAAG;AACtE,EAAA,MAAM,YAAA,GAAe,EAAE,GAAG,cAAA,EAAgB,GAAG,MAAA,EAAO;AACpD,EAAA,MAAM,EAAE,UAAA,EAAY,QAAA,EAAU,UAAA,EAAY,QAAA,EAAU,eAAc,GAAI,YAAA;AAEtE,EAAA,OAAO,SAASA,gBAAe,OAAA,EAAwC;AAErE,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,OAAA,CAAQ,YAAA,CAAa,IAAI,QAAQ,CAAA;AAG3D,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA;AAEjD,IAAA,IAAI,QAAA,GAAW,aAAa,IAAA,EAAK;AACjC,IAAA,IAAI,UAAA,GAAa,KAAA;AACjB,IAAA,IAAI,QAAA,GAA0B,IAAA;AAG9B,IAAA,IAAI,cAAc,IAAA,EAAM;AACtB,MAAA,IAAI,SAAA,KAAc,OAAA,IAAW,SAAA,KAAc,GAAA,IAAO,cAAc,EAAA,EAAI;AAElE,QAAA,QAAA,GAAW,aAAa,IAAA,EAAK;AAC7B,QAAA,QAAA,CAAS,OAAA,CAAQ,OAAO,UAAU,CAAA;AAClC,QAAA,UAAA,GAAa,KAAA;AAAA,MACf,CAAA,MAAA,IAAW,SAAA,KAAc,MAAA,IAAU,SAAA,KAAc,GAAA,EAAK;AAEpD,QAAA,QAAA,GAAW,aAAa,IAAA,EAAK;AAC7B,QAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,UAAA,EAAY,MAAA,EAAQ,aAAa,CAAA;AACtD,QAAA,UAAA,GAAa,IAAA;AAAA,MACf,CAAA,MAAO;AAEL,QAAA,QAAA,GAAW,aAAa,IAAA,EAAK;AAC7B,QAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,UAAA,EAAY,SAAA,EAAW,aAAa,CAAA;AACzD,QAAA,UAAA,GAAa,IAAA;AACb,QAAA,QAAA,GAAW,SAAA;AAAA,MACb;AAAA,IACF,WAAW,UAAA,EAAY;AAErB,MAAA,UAAA,GAAa,IAAA;AACb,MAAA,QAAA,GAAW,UAAA,CAAW,KAAA,KAAU,MAAA,GAAS,UAAA,CAAW,KAAA,GAAQ,IAAA;AAAA,IAC9D;AAGA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,aAAa,QAAA,CAAS,IAAA;AAAA,QAAK,CAAC,IAAA,KAChC,OAAA,CAAQ,OAAA,CAAQ,QAAA,CAAS,WAAW,IAAI;AAAA,OAC1C;AAEA,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,MAAM,cAAA,GAAiB,IAAI,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA;AAClD,QAAA,cAAA,CAAe,GAAA,CAAI,UAAA,EAAY,QAAA,IAAY,MAAM,CAAA;AAEjD,QAAA,QAAA,GAAW,aAAa,IAAA,CAAK;AAAA,UAC3B,OAAA,EAAS;AAAA,YACP,OAAA,EAAS;AAAA;AACX,SACD,CAAA;AAGD,QAAA,IAAI,cAAc,IAAA,EAAM;AACtB,UAAA,IAAI,SAAA,KAAc,OAAA,IAAW,SAAA,KAAc,GAAA,IAAO,cAAc,EAAA,EAAI;AAClE,YAAA,QAAA,CAAS,OAAA,CAAQ,OAAO,UAAU,CAAA;AAAA,UACpC,CAAA,MAAO;AACL,YAAA,QAAA,CAAS,OAAA,CAAQ,GAAA;AAAA,cACf,UAAA;AAAA,cACA,SAAA,KAAc,MAAA,IAAU,SAAA,KAAc,GAAA,GAAM,MAAA,GAAS,SAAA;AAAA,cACrD;AAAA,aACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,UAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AACF;AASO,SAAS,cAAA,CAAe,MAAA,GAA+B,EAAC,EAAG;AAChE,EAAA,MAAM,OAAA,GAAU,qBAAqB,MAAM,CAAA;AAE3C,EAAA,OAAO,SAAS,WAAW,OAAA,EAAoC;AAC7D,IAAA,OAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,QAAA;AAAA,EAC1B,CAAA;AACF;AAKO,SAAS,aAAA,CAAc,OAAA,EAAsB,MAAA,GAA+B,EAAC,EAAY;AAC9F,EAAA,MAAM,EAAE,UAAA,GAAa,cAAA,EAAgB,UAAA,GAAa,kBAAiB,GAAI,MAAA;AAGvE,EAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA,EAAG;AACnC,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA;AAC7C,EAAA,OAAO,MAAA,KAAW,MAAA,IAAa,MAAA,CAAO,KAAA,KAAU,EAAA;AAClD;AAKO,SAAS,eAAA,CAAgB,OAAA,EAAsB,MAAA,GAA+B,EAAC,EAAkB;AACtG,EAAA,MAAM,EAAE,UAAA,GAAa,cAAA,EAAgB,UAAA,GAAa,kBAAiB,GAAI,MAAA;AAGvE,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA;AAClD,EAAA,IAAI,WAAA,IAAe,gBAAgB,MAAA,EAAQ;AACzC,IAAA,OAAO,WAAA;AAAA,EACT;AAGA,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA;AAC7C,EAAA,IAAI,MAAA,IAAU,MAAA,CAAO,KAAA,KAAU,MAAA,EAAQ;AACrC,IAAA,OAAO,MAAA,CAAO,KAAA;AAAA,EAChB;AAEA,EAAA,OAAO,IAAA;AACT","file":"middleware.js","sourcesContent":["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":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/server.cjs CHANGED
@@ -1,11 +1,42 @@
1
- 'use strict';
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
- var async_hooks = require('async_hooks');
4
- var core = require('@demokit-ai/core');
5
- var server = require('next/server');
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 demoContextStorage = new async_hooks.AsyncLocalStorage();
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 core.createDemoInterceptor({
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 = server.NextResponse.next();
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 = server.NextResponse.next();
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 = server.NextResponse.next();
136
+ response = import_server.NextResponse.next();
100
137
  response.cookies.set(cookieName, "true", cookieOptions);
101
138
  isDemoMode = true;
102
139
  } else {
103
- response = server.NextResponse.next();
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 = server.NextResponse.next({
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.createDemoMiddleware = createDemoMiddleware;
172
- exports.createServerInterceptor = createServerInterceptor;
173
- exports.demoContextStorage = demoContextStorage;
174
- exports.demoMiddleware = demoMiddleware;
175
- exports.getDemoScenario = getDemoScenario;
176
- exports.getServerDemoContext = getServerDemoContext;
177
- exports.getServerScenario = getServerScenario;
178
- exports.isDemoRequest = isDemoRequest;
179
- exports.isServerDemoMode = isServerDemoMode;
180
- exports.runWithDemoContext = runWithDemoContext;
181
- exports.withDemoCheck = withDemoCheck;
182
- //# sourceMappingURL=server.cjs.map
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
@@ -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-Cvq5JUP1.cjs';
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-Cvq5JUP1.js';
5
+ import './types-Brt8EaFz.js';
6
6
  import 'react';
7
7
 
8
8
  /**