@arponascension/express-inertia 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils.ts","../src/logger.ts","../src/circuit-breaker.ts","../src/ssr.ts","../src/response.ts","../src/middleware.ts","../src/directives.ts","../src/vite.ts","../src/engine.ts","../src/prefetch.ts","../src/index.ts"],"names":["logger","partialComponent","fs"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { Request } from 'express';\nimport type {\n PageProps,\n PropCallback,\n LazyProp,\n AlwaysProp,\n DeferredProp,\n MergeProp,\n OptionalProp,\n Page,\n SecurityOptions,\n} from './types.js';\n\n/**\n * Marks a prop as lazy. Lazy props are ONLY evaluated during partial reloads\n * when specifically requested in the `only` array by the client.\n */\nexport function lazy<T = any>(callback: PropCallback<T>): LazyProp<T> {\n return {\n __inertia_lazy: true,\n callback,\n };\n}\n\n/**\n * Marks a prop as always included. Always props are evaluated and returned\n * on every request, including partial reloads, even if not explicitly requested.\n */\nexport function always<T = any>(value: T | PropCallback<T>): AlwaysProp<T> {\n return {\n __inertia_always: true,\n value,\n };\n}\n\n/**\n * Marks a prop as deferred (Inertia v2).\n */\nexport function defer<T = any>(\n callback: PropCallback<T>,\n options?: { group?: string }\n): DeferredProp<T> {\n return {\n __inertia_deferred: true,\n callback,\n group: options?.group,\n };\n}\n\n/**\n * Marks a prop as mergeable (Inertia v2).\n */\nexport function merge<T = any>(value: T | PropCallback<T>): MergeProp<T> {\n return {\n __inertia_merge: true,\n value,\n };\n}\n\n/**\n * Marks a prop as optional.\n */\nexport function optional<T = any>(callback: PropCallback<T>): OptionalProp<T> {\n return {\n __inertia_optional: true,\n callback,\n };\n}\n\nexport function isLazy(val: any): val is LazyProp {\n return val && typeof val === 'object' && val.__inertia_lazy === true;\n}\n\nexport function isAlways(val: any): val is AlwaysProp {\n return val && typeof val === 'object' && val.__inertia_always === true;\n}\n\nexport function isDeferred(val: any): val is DeferredProp {\n return val && typeof val === 'object' && val.__inertia_deferred === true;\n}\n\nexport function isMerge(val: any): val is MergeProp {\n return val && typeof val === 'object' && val.__inertia_merge === true;\n}\n\nexport function isOptional(val: any): val is OptionalProp {\n return val && typeof val === 'object' && val.__inertia_optional === true;\n}\n\n/**\n * Evaluates and resolves all props (promises, functions, lazy, always, merge, deferred)\n * based on current Inertia request context and partial reload headers.\n */\nexport async function resolveProps(\n rawProps: PageProps,\n req: Request,\n component: string\n): Promise<{\n resolvedProps: PageProps;\n deferredProps?: Record<string, string[]>;\n mergeProps?: string[];\n}> {\n const isPartial =\n req.header('X-Inertia-Partial-Component') === component &&\n Boolean(req.header('X-Inertia-Partial-Data'));\n\n const partialKeys = isPartial\n ? (req.header('X-Inertia-Partial-Data') || '')\n .split(',')\n .map((k) => k.trim())\n .filter(Boolean)\n : [];\n\n const resolvedProps: PageProps = {};\n const deferredMap: Record<string, string[]> = {};\n const mergeKeys: string[] = [];\n\n for (const [key, rawValue] of Object.entries(rawProps)) {\n // Collect merge props\n if (isMerge(rawValue)) {\n mergeKeys.push(key);\n }\n\n // Collect deferred props\n if (isDeferred(rawValue)) {\n const group = rawValue.group || 'default';\n if (!deferredMap[group]) {\n deferredMap[group] = [];\n }\n deferredMap[group].push(key);\n }\n\n if (isPartial) {\n const isRequested = partialKeys.includes(key);\n const isAlwaysIncluded = isAlways(rawValue);\n\n // In partial reload, only include if explicitly requested or marked as always\n if (!isRequested && !isAlwaysIncluded) {\n continue;\n }\n } else {\n // In full request, lazy and deferred props are omitted.\n // Optional props are still included on initial load.\n if (isLazy(rawValue) || isDeferred(rawValue)) {\n continue;\n }\n }\n\n // Resolve prop value\n resolvedProps[key] = await unwrapValue(rawValue, req);\n }\n\n return {\n resolvedProps,\n deferredProps: Object.keys(deferredMap).length > 0 ? deferredMap : undefined,\n mergeProps: mergeKeys.length > 0 ? mergeKeys : undefined,\n };\n}\n\n/**\n * Unwraps closures, promises, and wrapper objects to get the actual value.\n */\nexport async function unwrapValue(val: any, req: Request): Promise<any> {\n if (val === null || val === undefined) {\n return val;\n }\n\n // Handle wrapper types\n if (isLazy(val)) {\n val = val.callback;\n } else if (isAlways(val)) {\n val = val.value;\n } else if (isDeferred(val)) {\n val = val.callback;\n } else if (isMerge(val)) {\n val = val.value;\n } else if (isOptional(val)) {\n val = val.callback;\n }\n\n // If function / closure, execute it\n if (typeof val === 'function') {\n val = val(req);\n }\n\n // If promise, await it\n if (val && typeof val.then === 'function') {\n val = await val;\n }\n\n return val;\n}\n\n/**\n * Escapes characters for HTML attribute insertion to prevent XSS.\n */\nexport function escapeHtmlAttr(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n\n/**\n * Serializes Page object safely for data-page HTML attribute.\n */\nexport function serializePage(page: Page): string {\n return escapeHtmlAttr(safeStringify(page));\n}\n\n/**\n * Safely stringifies an object, replacing circular references with null.\n */\nexport function safeStringify(obj: any): string {\n const seen = new WeakSet();\n return JSON.stringify(obj, (_key, value) => {\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return null;\n }\n seen.add(value);\n }\n return value;\n });\n}\n\n/**\n * Default pattern for safe component names: alphanumeric, hyphens, and underscores,\n * optionally separated by single forward slashes. Blocks path traversal sequences\n * like `..`, leading/trailing slashes, and consecutive slashes.\n */\nexport const DEFAULT_COMPONENT_NAME_PATTERN = /^[\\w-]+(?:\\/[\\w-]+)*$/;\n\n/**\n * Validates a component name to prevent path traversal and injection attacks.\n * Throws a TypeError if the name contains suspicious characters.\n */\nexport function validateComponentName(\n component: string,\n pattern: RegExp = DEFAULT_COMPONENT_NAME_PATTERN\n): void {\n if (!pattern.test(component)) {\n throw new TypeError(\n `Invalid component name \"${component}\". Component names must match the pattern ${pattern}.`\n );\n }\n}\n\n/**\n * Recursively sanitizes viewData by stripping functions and undefined values.\n * Only plain objects and primitive values are preserved.\n */\nexport function sanitizeViewData(data: Record<string, any>): Record<string, any> {\n const seen = new WeakSet();\n\n function sanitize(value: any): any {\n if (typeof value === 'function' || value === undefined) {\n return undefined;\n }\n\n if (value === null || typeof value !== 'object' || Buffer.isBuffer(value)) {\n return value;\n }\n\n if (seen.has(value)) {\n return undefined;\n }\n seen.add(value);\n\n if (Array.isArray(value)) {\n return value.map((item) => sanitize(item));\n }\n\n const sanitized: Record<string, any> = {};\n for (const [key, val] of Object.entries(value)) {\n const cleaned = sanitize(val);\n if (cleaned !== undefined) {\n sanitized[key] = cleaned;\n }\n }\n return sanitized;\n }\n\n return sanitize(data) as Record<string, any>;\n}\n\n/**\n * Generates a Subresource Integrity (SRI) hash for a given string.\n * Returns the base64-encoded SHA-384 hash prefixed with 'sha384-'.\n */\nexport async function generateSriHash(content: string | Buffer): Promise<string> {\n const crypto = await import('node:crypto');\n const hash = crypto.createHash('sha384').update(content);\n return `sha384-${hash.digest('base64')}`;\n}\n\n","export interface Logger {\n warn(message: string, meta?: Record<string, any>): void;\n error(message: string, meta?: Record<string, any>): void;\n info(message: string, meta?: Record<string, any>): void;\n debug(message: string, meta?: Record<string, any>): void;\n}\n\nexport interface LoggerOptions {\n prefix?: string;\n logger?: Logger;\n}\n\nconst DEFAULT_PREFIX = 'express-inertia';\n\nfunction createConsoleLogger(prefix: string): Logger {\n const pad = (str: string) => str.padEnd(2, ' ');\n\n return {\n warn(message: string, meta?: Record<string, any>) {\n const payload = meta ? { ...meta } : undefined;\n if (payload && Object.keys(payload).length > 0) {\n console.warn(`[${prefix}] ${message}`, JSON.stringify(payload));\n } else {\n console.warn(`[${prefix}] ${message}`);\n }\n },\n\n error(message: string, meta?: Record<string, any>) {\n const payload = meta ? { ...meta } : undefined;\n if (payload && Object.keys(payload).length > 0) {\n console.error(`[${prefix}] ${message}`, JSON.stringify(payload));\n } else {\n console.error(`[${prefix}] ${message}`);\n }\n },\n\n info(message: string, meta?: Record<string, any>) {\n const payload = meta ? { ...meta } : undefined;\n if (payload && Object.keys(payload).length > 0) {\n console.info(`[${prefix}] ${message}`, JSON.stringify(payload));\n } else {\n console.info(`[${prefix}] ${message}`);\n }\n },\n\n debug(message: string, meta?: Record<string, any>) {\n const payload = meta ? { ...meta } : undefined;\n if (payload && Object.keys(payload).length > 0) {\n console.debug(`[${prefix}] ${message}`, JSON.stringify(payload));\n } else {\n console.debug(`[${prefix}] ${message}`);\n }\n },\n };\n}\n\nlet globalLogger: Logger = createConsoleLogger(DEFAULT_PREFIX);\n\nexport function setGlobalLogger(logger: Logger): void {\n globalLogger = logger;\n}\n\nexport function getGlobalLogger(): Logger {\n return globalLogger;\n}\n\nexport function createLogger(options: LoggerOptions = {}): Logger {\n const prefix = options.prefix || DEFAULT_PREFIX;\n if (options.logger) {\n return options.logger;\n }\n return createConsoleLogger(prefix);\n}\n","export type CircuitState = 'CLOSED' | 'OPEN' | 'HALF_OPEN';\n\nexport interface CircuitBreakerOptions {\n /**\n * Number of consecutive failures before opening the circuit.\n * @default 5\n */\n failureThreshold: number;\n /**\n * Time in milliseconds before transitioning from OPEN to HALF_OPEN.\n * @default 30000\n */\n cooldownMs: number;\n /**\n * Time in milliseconds to wait in HALF_OPEN before succeeding.\n * @default 1000\n */\n probeDelayMs: number;\n}\n\nexport interface RetryOptions {\n /**\n * Maximum number of retry attempts.\n * @default 2\n */\n maxRetries: number;\n /**\n * Base delay in milliseconds for exponential backoff.\n * @default 200\n */\n baseDelayMs: number;\n /**\n * Maximum delay in milliseconds between retries.\n * @default 2000\n */\n maxDelayMs: number;\n /**\n * HTTP status codes that should trigger a retry.\n * @default [408, 429, 500, 502, 503, 504]\n */\n retryableStatusCodes: number[];\n}\n\nexport interface SSRResilienceOptions {\n circuitBreaker?: Partial<CircuitBreakerOptions>;\n retry?: Partial<RetryOptions>;\n}\n\nexport const DEFAULT_CIRCUIT_OPTIONS: Required<CircuitBreakerOptions> = {\n failureThreshold: 5,\n cooldownMs: 30_000,\n probeDelayMs: 1000,\n};\n\nexport const DEFAULT_RETRY_OPTIONS: Required<RetryOptions> = {\n maxRetries: 2,\n baseDelayMs: 200,\n maxDelayMs: 2000,\n retryableStatusCodes: [408, 429, 500, 502, 503, 504],\n};\n\nconst circuitBreakers = new Map<string, CircuitBreaker>();\n\nexport class CircuitBreaker {\n private state: CircuitState = 'CLOSED';\n private failures = 0;\n private openedAt = 0;\n private probeTimer: ReturnType<typeof setTimeout> | null = null;\n private pendingProbe: Promise<void> | null = null;\n\n constructor(private options: Required<CircuitBreakerOptions> = DEFAULT_CIRCUIT_OPTIONS) {}\n\n getState(): CircuitState {\n if (this.state === 'OPEN' && Date.now() - this.openedAt >= this.options.cooldownMs) {\n this.state = 'HALF_OPEN';\n }\n return this.state;\n }\n\n async execute<T>(fn: () => Promise<T>): Promise<T> {\n const state = this.getState();\n\n if (state === 'OPEN') {\n throw new Error('Circuit breaker is open');\n }\n\n try {\n const result = await fn();\n this.onSuccess();\n return result;\n } catch (err) {\n this.onFailure();\n throw err;\n }\n }\n\n private onSuccess(): void {\n this.failures = 0;\n this.state = 'CLOSED';\n if (this.probeTimer) {\n clearTimeout(this.probeTimer);\n this.probeTimer = null;\n }\n }\n\n private onFailure(): void {\n this.failures++;\n if (this.failures >= this.options.failureThreshold) {\n this.state = 'OPEN';\n this.openedAt = Date.now();\n }\n }\n\n async allowProbe<T>(fn: () => Promise<T>): Promise<T> {\n if (this.getState() !== 'HALF_OPEN') {\n throw new Error('Circuit breaker is not in HALF_OPEN state');\n }\n\n if (this.pendingProbe) {\n return this.pendingProbe.then(() => fn());\n }\n\n this.pendingProbe = new Promise<void>((resolve) => {\n this.probeTimer = setTimeout(() => {\n this.pendingProbe = null;\n resolve();\n }, this.options.probeDelayMs);\n });\n\n return this.pendingProbe.then(() => fn());\n }\n\n reset(): void {\n this.failures = 0;\n this.state = 'CLOSED';\n this.openedAt = 0;\n if (this.probeTimer) {\n clearTimeout(this.probeTimer);\n this.probeTimer = null;\n }\n this.pendingProbe = null;\n }\n}\n\nexport function shouldRetry(\n error: any,\n statusCode: number | undefined,\n retryableStatusCodes: number[]\n): boolean {\n if (error?.name === 'AbortError' || error?.name === 'TypeError') {\n return true;\n }\n\n if (typeof statusCode === 'number' && retryableStatusCodes.includes(statusCode)) {\n return true;\n }\n\n return false;\n}\n\nexport function resetAllCircuitBreakers(): void {\n for (const breaker of circuitBreakers.values()) {\n breaker.reset();\n }\n circuitBreakers.clear();\n}\n\nexport function calculateBackoff(\n attempt: number,\n baseDelayMs: number,\n maxDelayMs: number\n): number {\n const exponential = baseDelayMs * Math.pow(2, attempt);\n const jitter = Math.random() * baseDelayMs;\n return Math.min(exponential + jitter, maxDelayMs);\n}\n","import type { Page, SSROptions, SSRResult } from './types.js';\nimport { createLogger } from './logger.js';\nimport {\n CircuitBreaker,\n shouldRetry,\n calculateBackoff,\n DEFAULT_CIRCUIT_OPTIONS,\n type CircuitBreakerOptions,\n type RetryOptions,\n type SSRResilienceOptions,\n} from './circuit-breaker.js';\n\nconst DEFAULT_SSR_URL = 'http://127.0.0.1:13714/render';\nconst DEFAULT_TIMEOUT = 2000;\nconst logger = createLogger({ prefix: 'express-inertia:ssr' });\n\nconst DEFAULT_RETRY_OPTIONS: Required<RetryOptions> = {\n maxRetries: 2,\n baseDelayMs: 200,\n maxDelayMs: 2000,\n retryableStatusCodes: [408, 429, 500, 502, 503, 504],\n};\n\nconst circuitBreakers = new Map<string, CircuitBreaker>();\n\nfunction getCircuitBreaker(endpoint: string, options?: Partial<SSRResilienceOptions>): CircuitBreaker {\n const key = options?.circuitBreaker ? `${endpoint}:${JSON.stringify(options.circuitBreaker)}` : endpoint;\n let breaker = circuitBreakers.get(key);\n if (!breaker) {\n const cbOptions: Required<CircuitBreakerOptions> = {\n ...DEFAULT_CIRCUIT_OPTIONS,\n ...options?.circuitBreaker,\n };\n breaker = new CircuitBreaker(cbOptions);\n circuitBreakers.set(key, breaker);\n }\n return breaker;\n}\n\nexport function resetAllCircuitBreakers(): void {\n for (const breaker of circuitBreakers.values()) {\n breaker.reset();\n }\n circuitBreakers.clear();\n}\n\n/**\n * Executes Server-Side Rendering (SSR) for the given Inertia page.\n * Returns head elements and rendered HTML body, or null if SSR is disabled or fails.\n */\nexport async function renderSSR(\n page: Page,\n options?: boolean | SSROptions\n): Promise<SSRResult | null> {\n if (!options) {\n return null;\n }\n\n const ssrConfig: SSROptions = typeof options === 'boolean' ? { enabled: options } : options;\n\n if (ssrConfig.enabled === false) {\n return null;\n }\n\n // Use custom render function if provided\n if (typeof ssrConfig.render === 'function') {\n try {\n return await renderWithRetry(async () => {\n return await ssrConfig.render!(page);\n }, ssrConfig.retry, page.component);\n } catch (err) {\n if (ssrConfig.fallback === false) {\n throw err;\n }\n logger.warn('Custom SSR render failed, falling back to client-side', {\n error: (err as Error).message,\n component: page.component,\n });\n return null;\n }\n }\n\n const endpoint = ssrConfig.url || DEFAULT_SSR_URL;\n const timeout = ssrConfig.timeout || DEFAULT_TIMEOUT;\n const retryOptions: Required<RetryOptions> = {\n ...DEFAULT_RETRY_OPTIONS,\n ...ssrConfig.retry,\n };\n const breaker = getCircuitBreaker(endpoint, ssrConfig);\n\n try {\n const result = await breaker.execute(() =>\n renderWithRetry(\n () => renderHttpSSR(page, endpoint, timeout),\n retryOptions,\n page.component\n )\n );\n return result;\n } catch (err) {\n if (ssrConfig.fallback === false) {\n throw err;\n }\n logger.warn('SSR rendering failed, falling back to client rendering', {\n endpoint,\n component: page.component,\n error: (err as Error).message,\n });\n return null;\n }\n}\n\nasync function renderHttpSSR(\n page: Page,\n endpoint: string,\n timeout: number\n): Promise<SSRResult> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n\n let pageJson: string;\n try {\n pageJson = JSON.stringify(page);\n } catch (err: any) {\n throw new Error(`Failed to serialize page for SSR: ${err.message}`);\n }\n\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: pageJson,\n signal: controller.signal,\n });\n\n clearTimeout(timer);\n\n if (!response.ok) {\n throw new Error(`SSR server responded with status: ${response.status} ${response.statusText}`);\n }\n\n const data = (await response.json()) as SSRResult;\n return {\n head: Array.isArray(data.head) ? data.head : [],\n body: typeof data.body === 'string' ? data.body : '',\n };\n}\n\nasync function renderWithRetry<T>(\n fn: () => Promise<T>,\n retryOptions?: Partial<RetryOptions>,\n context?: string\n): Promise<T> {\n const options: Required<RetryOptions> = {\n ...DEFAULT_RETRY_OPTIONS,\n ...retryOptions,\n };\n\n let lastError: any;\n\n for (let attempt = 0; attempt <= options.maxRetries; attempt++) {\n try {\n return await fn();\n } catch (err: any) {\n lastError = err;\n\n if (attempt >= options.maxRetries) {\n break;\n }\n\n const statusCode = err.status || err.response?.status;\n if (!shouldRetry(err, statusCode, options.retryableStatusCodes)) {\n break;\n }\n\n const delay = calculateBackoff(attempt, options.baseDelayMs, options.maxDelayMs);\n logger.warn('SSR request failed, retrying', {\n attempt: attempt + 1,\n maxRetries: options.maxRetries,\n delayMs: Math.round(delay),\n error: err.message,\n component: context,\n });\n\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n\n throw lastError;\n}\n","import type { Request, Response } from 'express';\nimport type {\n InertiaOptions,\n InertiaResponseHandler,\n Page,\n PageProps,\n SSRResult,\n SecurityOptions,\n} from './types.js';\nimport { resolveProps } from './utils.js';\nimport { renderSSR } from './ssr.js';\nimport { validateComponentName, DEFAULT_COMPONENT_NAME_PATTERN, sanitizeViewData, safeStringify } from './utils.js';\n\nexport function createInertiaResponse(\n req: Request,\n res: Response,\n options: InertiaOptions,\n globalSharedProps: PageProps = {}\n): InertiaResponseHandler {\n const requestSharedProps: PageProps = {};\n let currentRootView = options.rootView || 'base.ejs';\n let currentVersion = options.version;\n let historyEncryption: boolean | undefined = options.encryptHistory;\n let clearHistorySetting: boolean | undefined;\n const flashMessages: Record<string, any> = {};\n\n async function resolveVersionValue(): Promise<string | null> {\n if (!currentVersion) {\n return null;\n }\n if (typeof currentVersion === 'function') {\n const result = await currentVersion();\n return result || null;\n }\n return currentVersion;\n }\n\n const renderFn = async (\n component: string,\n props: PageProps = {},\n viewData: Record<string, any> = {}\n ): Promise<void> => {\n // 0. Validate component name to prevent path traversal\n const securityOptions: SecurityOptions = options.security ?? { validateComponentNames: true };\n if (securityOptions.validateComponentNames !== false) {\n const pattern = securityOptions.componentNamePattern ?? DEFAULT_COMPONENT_NAME_PATTERN;\n validateComponentName(component, pattern);\n }\n\n // 1. Resolve dynamic global shared props if function\n let dynamicGlobal: PageProps = {};\n if (typeof options.shared === 'function') {\n dynamicGlobal = await options.shared(req);\n } else if (options.shared) {\n dynamicGlobal = options.shared;\n }\n\n const allProps = {\n ...globalSharedProps,\n ...dynamicGlobal,\n ...requestSharedProps,\n ...Object.keys(flashMessages).length > 0 ? { flash: flashMessages } : {},\n ...props,\n };\n\n // 2. Resolve asset version\n const version = await resolveVersionValue();\n\n // 3. Resolve props (handle lazy, always, defer, merge, promises, closures)\n const { resolvedProps, deferredProps, mergeProps } = await resolveProps(\n allProps,\n req,\n component\n );\n\n // 4. Construct Inertia Page object\n const pageUrl = req.originalUrl || req.url;\n const page: Page = {\n component,\n props: resolvedProps,\n url: pageUrl,\n version,\n };\n\n if (historyEncryption !== undefined) {\n page.encryptHistory = historyEncryption;\n }\n if (clearHistorySetting !== undefined) {\n page.clearHistory = clearHistorySetting;\n }\n if (deferredProps) {\n page.deferredProps = deferredProps;\n }\n if (mergeProps) {\n page.mergeProps = mergeProps;\n }\n\n // 5. Handle Inertia AJAX Request vs First/Full Page Load\n if (req.header('X-Inertia')) {\n res.setHeader('X-Inertia', 'true');\n res.setHeader('Vary', 'Accept, X-Inertia');\n\n if (historyEncryption) {\n res.setHeader('X-Inertia-Encrypt-History', 'true');\n }\n if (clearHistorySetting) {\n res.setHeader('X-Inertia-Clear-History', 'true');\n }\n\n res.status(200).setHeader('Content-Type', 'application/json').send(safeStringify(page));\n return;\n }\n\n // 6. First/Full Page Load (HTML with base template)\n let ssrResult: SSRResult | null = null;\n if (options.ssr) {\n ssrResult = await renderSSR(page, options.ssr);\n }\n\n let globalViewData: Record<string, any> = {};\n if (typeof options.viewData === 'function') {\n globalViewData = await options.viewData(req);\n } else if (options.viewData) {\n globalViewData = options.viewData;\n }\n\n const sanitizedViewData = securityOptions.validateComponentNames !== false\n ? sanitizeViewData(viewData)\n : viewData;\n const sanitizedGlobalViewData = securityOptions.validateComponentNames !== false\n ? sanitizeViewData(globalViewData)\n : globalViewData;\n\n const templateData = {\n ...res.locals,\n ...sanitizedGlobalViewData,\n ...sanitizedViewData,\n page,\n ssr: ssrResult,\n inertiaVersion: options.inertiaVersion,\n rootElement: options.rootElement,\n req,\n };\n\n // Render root template using Express res.render\n res.setHeader('Vary', 'Accept, X-Inertia');\n res.render(currentRootView, templateData);\n };\n\n // Create callable handler function\n const handler = renderFn as InertiaResponseHandler;\n handler.render = renderFn;\n handler.inertia = renderFn;\n\n handler.share = (keyOrObject: string | PageProps, value?: any) => {\n if (typeof keyOrObject === 'string') {\n requestSharedProps[keyOrObject] = value;\n } else if (typeof keyOrObject === 'object' && keyOrObject !== null) {\n Object.assign(requestSharedProps, keyOrObject);\n }\n return handler;\n };\n\n handler.getShared = (key?: string) => {\n if (key) {\n return requestSharedProps[key] ?? globalSharedProps[key];\n }\n return { ...globalSharedProps, ...requestSharedProps };\n };\n\n handler.location = (url: string) => {\n if (req.header('X-Inertia')) {\n res.setHeader('X-Inertia-Location', url);\n res.status(409).end();\n } else {\n res.redirect(url);\n }\n };\n\n handler.back = (fallbackUrl: string = '/') => {\n const referer = req.header('Referer') || fallbackUrl;\n res.redirect(303, referer);\n };\n\n handler.version = (ver: string | (() => string | Promise<string>)) => {\n currentVersion = ver;\n return handler;\n };\n\n handler.rootView = (view: string) => {\n currentRootView = view;\n return handler;\n };\n\n handler.encryptHistory = (encrypt: boolean = true) => {\n historyEncryption = encrypt;\n return handler;\n };\n\n handler.clearHistory = (clear: boolean = true) => {\n clearHistorySetting = clear;\n return handler;\n };\n\n handler.withFlash = (key: string, value: any) => {\n flashMessages[key] = value;\n return handler;\n };\n\n handler.postForm = (component: string, props?: PageProps, viewData?: Record<string, any>) => {\n return renderFn(component, props, viewData);\n };\n\n handler.putForm = (component: string, props?: PageProps, viewData?: Record<string, any>) => {\n return renderFn(component, props, viewData);\n };\n\n handler.patchForm = (component: string, props?: PageProps, viewData?: Record<string, any>) => {\n return renderFn(component, props, viewData);\n };\n\n handler.deleteForm = (component: string, props?: PageProps, viewData?: Record<string, any>) => {\n return renderFn(component, props, viewData);\n };\n\n return handler;\n}\n","import type { Request, Response, NextFunction, RequestHandler } from 'express';\nimport type { InertiaOptions, InertiaRequestHelper, PageProps, SecurityOptions } from './types.js';\nimport { createInertiaResponse } from './response.js';\nimport { validateComponentName, DEFAULT_COMPONENT_NAME_PATTERN } from './utils.js';\n\n/**\n * Creates the Inertia Express middleware.\n *\n * @example\n * ```ts\n * import express from 'express';\n * import inertia from 'express-inertia';\n *\n * const app = express();\n * app.use(inertia({\n * rootView: 'base.ejs',\n * version: '1.0.0',\n * shared: (req) => ({\n * user: req.user,\n * flash: req.flash?.() || {},\n * }),\n * }));\n * ```\n */\nexport function createInertia(options: InertiaOptions = {}): RequestHandler {\n const globalShared: PageProps = typeof options.shared === 'object' && options.shared !== null\n ? options.shared\n : {};\n\n return async function inertiaMiddleware(\n req: Request,\n res: Response,\n next: NextFunction\n ): Promise<void> {\n try {\n const isInertia = Boolean(req.header('X-Inertia'));\n const versionHeader = req.header('X-Inertia-Version') || null;\n const partialComponent = req.header('X-Inertia-Partial-Component') || null;\n const partialDataHeader = req.header('X-Inertia-Partial-Data');\n const resetDataHeader = req.header('X-Inertia-Reset');\n\n const partialData = partialDataHeader\n ? partialDataHeader.split(',').map((s) => s.trim()).filter(Boolean)\n : [];\n\n const resetData = resetDataHeader\n ? resetDataHeader.split(',').map((s) => s.trim()).filter(Boolean)\n : [];\n\n // Attach req.inertia helper\n req.inertia = {\n isInertia,\n version: versionHeader,\n partialComponent,\n partialData,\n resetData,\n };\n\n // Attach res.inertia response handler\n res.inertia = createInertiaResponse(req, res, options, { ...globalShared });\n\n // Validate component names on Inertia requests to prevent path traversal\n const securityOptions: SecurityOptions = options.security ?? { validateComponentNames: true };\n if (securityOptions.validateComponentNames !== false && isInertia) {\n const pattern = securityOptions.componentNamePattern ?? DEFAULT_COMPONENT_NAME_PATTERN;\n const partialComponent = req.header('X-Inertia-Partial-Component');\n if (partialComponent && !pattern.test(partialComponent)) {\n res.setHeader('X-Inertia-Location', req.originalUrl || req.url);\n res.status(409).end();\n return;\n }\n }\n\n // Asset Version Check:\n // On GET requests from Inertia client with version mismatch, return 409 Conflict\n if (isInertia && req.method === 'GET' && options.version) {\n let currentVersion: string | null = null;\n if (typeof options.version === 'function') {\n currentVersion = await options.version();\n } else {\n currentVersion = options.version;\n }\n\n if (versionHeader && currentVersion && versionHeader !== currentVersion) {\n res.setHeader('X-Inertia-Location', req.originalUrl || req.url);\n res.status(409).end();\n return;\n }\n }\n\n // Automatically convert 301/302 redirects to 303 See Other on PUT/PATCH/DELETE\n const originalRedirect = res.redirect.bind(res);\n res.redirect = function (this: Response, ...args: any[]): any {\n const method = req.method.toUpperCase();\n const isInertiaMethod = method === 'PUT' || method === 'PATCH' || method === 'DELETE';\n\n if (isInertia && isInertiaMethod) {\n if (args.length === 1) {\n // res.redirect(url) -> default to 303\n return originalRedirect(303, args[0]);\n } else if (args.length === 2 && typeof args[0] === 'number') {\n // res.redirect(302, url) -> convert 301/302 to 303\n const status = args[0] === 301 || args[0] === 302 ? 303 : args[0];\n return originalRedirect(status, args[1]);\n }\n }\n\n return (originalRedirect as any)(...args);\n } as any;\n\n next();\n } catch (err) {\n next(err);\n }\n };\n}\n\nexport default createInertia;\n\n/**\n * Middleware that assigns a unique request ID for correlation across logs.\n * Uses X-Request-ID header if present, otherwise generates a short ID.\n */\nexport function requestIdMiddleware(): RequestHandler {\n return (req: Request, _res: Response, next: NextFunction) => {\n (req as any).id = req.header('X-Request-ID') || generateRequestId();\n next();\n };\n}\n\nfunction generateRequestId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).slice(2, 8);\n return `${timestamp}-${random}`;\n}\n","import type { DirectiveHandler } from './types.js';\n\nconst customDirectives: Record<string, DirectiveHandler> = {};\n\n/**\n * Escape a string for safe interpolation inside a single-quoted JS string literal.\n */\nfunction escapeJsString(str: string): string {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n}\n\n/**\n * Register a global custom Blade directive.\n * @param name Directive name without the @ (e.g. 'datetime' for @datetime($date))\n * @param handler Function returning the compiled EJS string or HTML\n */\nexport function registerDirective(name: string, handler: DirectiveHandler): void {\n customDirectives[name] = handler;\n}\n\n/**\n * Compiles Blade-style directives and Blade-style component tags into valid EJS syntax.\n */\nexport function compileBladeDirectives(\n templateSource: string,\n localDirectives?: Record<string, DirectiveHandler>\n): string {\n let compiled = templateSource;\n\n // <x-inertia ... /> or <x-inertia ...></x-inertia>\n compiled = compiled.replace(\n /<x-inertia(\\s[^>]*)?\\s*(\\/|><\\/x-inertia>)/gi,\n (_match, attrs) => {\n const idMatch = attrs?.match(/id=(?:\"([^\"]*)\"|'([^']*)')/);\n const id = idMatch ? (idMatch[1] || idMatch[2]) : undefined;\n return id ? `<%- inertia('${escapeJsString(id)}') %>` : `<%- inertia() %>`;\n }\n );\n\n // <x-inertia-script ... /> or <x-inertia-data ... />\n compiled = compiled.replace(\n /<x-inertia-(?:script|data)(\\s[^>]*)?\\s*(\\/|><\\/x-inertia-(?:script|data)>)/gi,\n (_match, attrs) => {\n const idMatch = attrs?.match(/id=(?:\"([^\"]*)\"|'([^']*)')/);\n const id = idMatch ? (idMatch[1] || idMatch[2]) : undefined;\n return id ? `<%- inertiaScript('${escapeJsString(id)}') %>` : `<%- inertiaScript() %>`;\n }\n );\n\n // <x-inertia-head /> or <x-inertiaHead />\n compiled = compiled.replace(\n /<x-inertia-head\\s*(?:\\/>|><\\/x-inertia-head>)|<x-inertiaHead\\s*(?:\\/>|><\\/x-inertiaHead>)/gi,\n '<%- inertiaHead() %>'\n );\n\n // <x-vite src=\"...\" /> or <x-vite entries=\"...\" />\n compiled = compiled.replace(\n /<x-vite(\\s[^>]*)?\\s*(?:\\/>|><\\/x-vite>)/gi,\n (_match, attrs) => {\n const srcMatch = attrs?.match(/(?:src|entries)=(?:\"([^\"]*)\"|'([^']*)')/);\n const val = srcMatch ? (srcMatch[1] || srcMatch[2]) : '';\n if (val.startsWith('[') && val.endsWith(']')) {\n return `<%- vite(${val}) %>`;\n }\n return `<%- vite('${escapeJsString(val)}') %>`;\n }\n );\n\n // <x-vite-react-refresh /> or <x-viteReactRefresh />\n compiled = compiled.replace(\n /<x-vite-react-refresh\\s*(?:\\/>|><\\/x-vite-react-refresh>)|<x-viteReactRefresh\\s*(?:\\/>|><\\/x-viteReactRefresh>)/gi,\n '<%- viteReactRefresh() %>'\n );\n\n // <x-csrf />\n compiled = compiled.replace(/<x-csrf\\s*(?:\\/>|><\\/x-csrf>)/gi, '<%- csrf() %>');\n\n // <x-routes ... />\n compiled = compiled.replace(\n /<x-routes(\\s[^>]*)?\\s*(?:\\/>|><\\/x-routes>)/gi,\n (_match, attrs) => {\n const groupMatch = attrs?.match(/group=(?:\"([^\"]*)\"|'([^']*)')/);\n const group = groupMatch ? (groupMatch[1] || groupMatch[2]) : undefined;\n return group ? `<%- routes('${escapeJsString(group)}') %>` : `<%- routes() %>`;\n }\n );\n\n // 2. Built-in Blade Directives\n // @inertiaHead (must match before @inertia)\n compiled = compiled.replace(/@inertiaHead\\b/g, '<%- inertiaHead() %>');\n\n // @inertiaScript or @inertiaData\n compiled = compiled.replace(/@(inertiaScript|inertiaData)(\\([^)]*\\))?(?!\\w)/g, (_match, _d, args) => {\n return args ? `<%- inertiaScript${args} %>` : `<%- inertiaScript() %>`;\n });\n\n // @inertia or @inertia(...)\n compiled = compiled.replace(/@inertia(\\([^)]*\\))?(?!\\w)/g, (_match, args) => {\n return args ? `<%- inertia${args} %>` : `<%- inertia() %>`;\n });\n\n // @viteReactRefresh (must match before @vite)\n compiled = compiled.replace(/@viteReactRefresh\\b/g, '<%- viteReactRefresh() %>');\n\n // @vite(...)\n compiled = compiled.replace(/@vite\\(([^)]*(?:\\([^)]*\\)[^)]*)*)\\)/g, (_match, args) => {\n return `<%- vite(${args.trim()}) %>`;\n });\n\n // @csrf\n compiled = compiled.replace(/@csrf\\b/g, '<%- csrf() %>');\n\n // @routes or @routes(...)\n compiled = compiled.replace(/@routes(\\([^)]*\\))?(?!\\w)/g, (_match, args) => {\n return args ? `<%- routes${args} %>` : `<%- routes() %>`;\n });\n\n // @json(...)\n compiled = compiled.replace(/@json\\(([^)]*(?:\\([^)]*\\)[^)]*)*)\\)/g, (_match, args) => {\n return `<%- json(${args.trim()}) %>`;\n });\n\n // 3. User Registered Custom Directives\n const allDirectives = { ...customDirectives, ...(localDirectives || {}) };\n for (const [name, handler] of Object.entries(allDirectives)) {\n const escapedName = name.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const pattern = new RegExp(`@${escapedName}(\\\\([^)]*(?:\\\\([^)]*\\\\)[^)]*)*\\\\))?(?!\\\\w)`, 'g');\n compiled = compiled.replace(pattern, (_match, args) => {\n return handler(args ? args.slice(1, -1).trim() : '', {});\n });\n }\n\n return compiled;\n}\n","import fs from 'fs';\nimport path from 'path';\nimport type { ViteConfig } from './types.js';\nimport { createLogger } from './logger.js';\nimport { generateSriHash } from './utils.js';\n\n/**\n * Options for the auto dev/build Vite plugin.\n */\nexport interface InertiaVitePluginOptions {\n /**\n * Path to the hot file. Relative paths are resolved against Vite's project root.\n * @default 'public/hot'\n */\n hotFile?: string;\n /**\n * Override the dev server URL written to the hot file.\n * Defaults to the resolved Vite dev server URL.\n */\n devServerUrl?: string;\n}\n\n/**\n * Structural subset of Vite's `Plugin` type so the core package does not need\n * a hard runtime dependency on Vite.\n */\nexport interface InertiaVitePlugin {\n name: string;\n configResolved?: (config: any) => void;\n configureServer?: (server: any) => void;\n buildStart?: () => void;\n}\n\n/**\n * Derive the dev server URL from Vite's resolved config, mirroring Laravel's\n * vite-plugin logic (honours `server.origin`, then https/host/port).\n */\nfunction resolveDevServerUrl(config: any, override?: string): string {\n if (override) return override.replace(/\\/$/, '');\n const server = config?.server || {};\n if (typeof server.origin === 'string' && server.origin) {\n return server.origin.replace(/\\/$/, '');\n }\n const scheme = server.https ? 'https' : 'http';\n let host = server.host;\n if (!host || host === '0.0.0.0' || host === '::' || host === '::0' || host === true) {\n host = 'localhost';\n }\n if (host.includes(':') && !host.startsWith('[')) {\n host = `[${host}]`;\n }\n const port = server.port ?? 5173;\n return `${scheme}://${host}:${port}`;\n}\n\n/**\n * Vite plugin that automatically toggles Express between dev and build mode.\n *\n * - `vite dev` writes a `hot` file (signalling dev mode) and removes it on shutdown.\n * - `vite build` removes any stale `hot` file, so Express falls back to the built manifest.\n *\n * Use it in your `vite.config.ts`:\n * ```ts\n * import { inertiaVitePlugin } from 'express-inertia/vite';\n * export default defineConfig({\n * plugins: [react(), inertiaVitePlugin()],\n * });\n * ```\n */\nexport function inertiaVitePlugin(options: InertiaVitePluginOptions = {}): InertiaVitePlugin {\n const logger = createLogger({ prefix: 'express-inertia:vite' });\n const write = (config: any, server?: any) => {\n try {\n const hotFile = path.resolve(config.root, options.hotFile || 'public/hot');\n const actual = server?.resolvedUrls?.local?.[0];\n const url = actual || resolveDevServerUrl(config, options.devServerUrl);\n fs.mkdirSync(path.dirname(hotFile), { recursive: true });\n fs.writeFileSync(hotFile, url.replace(/\\/$/, ''));\n } catch (err) {\n logger.warn('Failed to write Vite hot file', { error: (err as Error).message });\n }\n };\n\n const remove = (config: any) => {\n try {\n const hotFile = path.resolve(config.root, options.hotFile || 'public/hot');\n fs.rmSync(hotFile, { force: true });\n } catch {\n // ignore\n }\n };\n\n return {\n name: 'express-inertia-hot-file',\n\n configResolved(config) {\n if (config.command === 'build') {\n remove(config);\n } else {\n write(config);\n }\n },\n\n configureServer(server) {\n write(server.config, server);\n server.httpServer?.once('listening', () => write(server.config, server));\n server.httpServer?.on('close', () => remove(server.config));\n process.once('exit', () => remove(server.config));\n },\n\n buildStart() {\n // noop guard: build-time cleanup happens in configResolved\n },\n };\n}\n\nexport interface ViteManifestChunk {\n src?: string;\n file: string;\n css?: string[];\n assets?: string[];\n isEntry?: boolean;\n isDynamicEntry?: boolean;\n imports?: string[];\n dynamicImports?: string[];\n}\n\nexport type ViteManifest = Record<string, ViteManifestChunk>;\n\nexport interface ResolvedViteConfig {\n publicDir: string;\n buildDir: string;\n devServerUrl: string;\n hotFile: string;\n manifestPath: string;\n base: string;\n manifest: ViteManifest | null;\n isDev: boolean;\n devServerUrlOverride: string | null;\n}\n\nexport class ViteHelper {\n private config: ResolvedViteConfig;\n private manifestCache: ViteManifest | null = null;\n private logger = createLogger({ prefix: 'express-inertia:vite' });\n\n constructor(config?: ViteConfig) {\n const publicDir = config?.publicDir ? path.resolve(config.publicDir) : path.resolve('public');\n const buildDir = config?.buildDir || 'build';\n\n this.config = {\n publicDir,\n buildDir,\n devServerUrl: config?.devServerUrl || 'http://localhost:5173',\n hotFile: path.resolve(config?.hotFile || path.join(publicDir, 'hot')),\n manifestPath: path.resolve(\n config?.manifestPath || path.join(publicDir, buildDir, '.vite', 'manifest.json')\n ),\n base: config?.base || `/${buildDir}/`,\n manifest: config?.manifest || null,\n isDev: config?.isDev ?? false,\n devServerUrlOverride: config?.devServerUrlOverride || null,\n };\n }\n\n /**\n * Detect whether the Vite dev server is running.\n *\n * Mirrors Laravel: the presence of the `hot` file is the sole signal. Vite's\n * dev server writes a `hot` file on startup and removes it on shutdown, so no\n * NODE_ENV switch is required to toggle between dev and build assets.\n */\n public isDev(): boolean {\n if (this.config.isDev === true) {\n return true;\n }\n\n const candidatePaths = [\n this.config.hotFile,\n path.resolve('hot'),\n path.join(this.config.publicDir, 'hot'),\n ];\n\n return candidatePaths.some((p) => fs.existsSync(p));\n }\n\n /**\n * Get development server URL from hot file or config.\n */\n public getDevServerUrl(): string {\n if (this.config.devServerUrlOverride) {\n return this.config.devServerUrlOverride.replace(/\\/$/, '');\n }\n\n const candidatePaths = [\n this.config.hotFile,\n path.resolve('hot'),\n path.join(this.config.publicDir, 'hot'),\n ];\n\n for (const p of candidatePaths) {\n if (fs.existsSync(p)) {\n try {\n const content = fs.readFileSync(p, 'utf-8').trim();\n if (content.startsWith('http://') || content.startsWith('https://')) {\n return content;\n }\n } catch {\n // ignore\n }\n }\n }\n\n return this.config.devServerUrl;\n }\n\n /**\n * Check if manifest file exists.\n */\n public manifestExists(): boolean {\n if (this.config.manifest) {\n return true;\n }\n const candidatePaths = this.getManifestCandidatePaths();\n return candidatePaths.some((p) => fs.existsSync(p));\n }\n\n private getManifestCandidatePaths(): string[] {\n const { publicDir, buildDir } = this.config;\n return [\n this.config.manifestPath,\n path.resolve(publicDir, buildDir, '.vite', 'manifest.json'),\n path.resolve(publicDir, buildDir, 'manifest.json'),\n path.resolve(buildDir, '.vite', 'manifest.json'),\n path.resolve(buildDir, 'manifest.json'),\n ];\n }\n\n /**\n * Load and cache the production manifest.\n */\n public getManifest(): ViteManifest {\n if (this.manifestCache) {\n return this.manifestCache;\n }\n\n if (this.config.manifest) {\n this.manifestCache = this.config.manifest;\n return this.config.manifest;\n }\n\n const candidatePaths = this.getManifestCandidatePaths();\n for (const p of candidatePaths) {\n if (fs.existsSync(p)) {\n try {\n const raw = fs.readFileSync(p, 'utf-8');\n const parsed = JSON.parse(raw);\n this.manifestCache = parsed;\n return parsed;\n } catch (err: any) {\n throw new Error(`[express-inertia] Failed to parse Vite manifest at ${p}: ${err.message}`);\n }\n }\n }\n\n throw new Error(\n `[express-inertia] Vite manifest not found. Looked in:\\n${candidatePaths.join('\\n')}\\nRun your build step (e.g. vite build) to generate it.`\n );\n }\n\n /**\n * Generate HTML script & link tags for the given entrypoint(s).\n * @param entrypoints Single entry string or array of entry paths (e.g. 'src/main.ts' or ['src/main.ts', 'src/style.css'])\n */\n public renderTags(entrypoints: string | string[]): string {\n const entries = Array.isArray(entrypoints) ? entrypoints : [entrypoints];\n const tags: string[] = [];\n\n if (this.isDev()) {\n const devUrl = this.getDevServerUrl().replace(/\\/$/, '');\n tags.push(`<script type=\"module\" src=\"${devUrl}/@vite/client\"></script>`);\n\n for (const entry of entries) {\n const cleanEntry = entry.replace(/^\\//, '');\n if (cleanEntry.endsWith('.css') || cleanEntry.endsWith('.scss') || cleanEntry.endsWith('.less')) {\n tags.push(`<link rel=\"stylesheet\" href=\"${devUrl}/${cleanEntry}\">`);\n } else {\n tags.push(`<script type=\"module\" src=\"${devUrl}/${cleanEntry}\"></script>`);\n }\n }\n\n return tags.join('\\n');\n }\n\n // Production mode\n const manifest = this.getManifest();\n const basePath = this.config.base.endsWith('/') ? this.config.base : `${this.config.base}/`;\n const renderedCss = new Set<string>();\n const renderedPreload = new Set<string>();\n\n for (const entry of entries) {\n const cleanEntry = entry.replace(/^\\//, '');\n const chunk =\n manifest[cleanEntry] ||\n Object.values(manifest).find(\n (c) =>\n c.src === cleanEntry ||\n c.file === cleanEntry ||\n (c.src && (c.src.endsWith(cleanEntry) || c.src.endsWith(`/${cleanEntry}`))) ||\n (c.file && (c.file.endsWith(cleanEntry) || c.file.endsWith(`/${cleanEntry}`)))\n );\n\n if (!chunk) {\n if (!/\\.(css|scss|sass|less)$/.test(cleanEntry)) {\n this.logger.warn('Entry not found in Vite manifest', { entry, manifestPath: this.config.manifestPath });\n }\n continue;\n }\n\n // Add CSS files\n if (chunk.css) {\n for (const cssFile of chunk.css) {\n if (!renderedCss.has(cssFile)) {\n renderedCss.add(cssFile);\n tags.push(`<link rel=\"stylesheet\" href=\"${basePath}${cssFile}\">`);\n }\n }\n }\n\n // If entry itself is a CSS file\n if (chunk.file.endsWith('.css')) {\n if (!renderedCss.has(chunk.file)) {\n renderedCss.add(chunk.file);\n tags.push(`<link rel=\"stylesheet\" href=\"${basePath}${chunk.file}\">`);\n }\n } else {\n // JS entry file\n tags.push(`<script type=\"module\" src=\"${basePath}${chunk.file}\"></script>`);\n }\n\n // Add module preloads\n if (chunk.imports) {\n for (const imp of chunk.imports) {\n const impChunk = manifest[imp];\n if (impChunk && !renderedPreload.has(impChunk.file)) {\n renderedPreload.add(impChunk.file);\n tags.push(`<link rel=\"modulepreload\" href=\"${basePath}${impChunk.file}\">`);\n }\n }\n }\n }\n\n return tags.join('\\n');\n }\n\n /**\n * Generates the React Fast Refresh preamble for development.\n */\n public renderReactRefresh(): string {\n if (!this.isDev()) {\n return '';\n }\n\n const devUrl = this.getDevServerUrl().replace(/\\/$/, '');\n return `<script type=\"module\">\n import RefreshRuntime from \"${devUrl}/@react-refresh\";\n RefreshRuntime.injectIntoGlobalHook(window);\n window.$RefreshReg$ = () => {};\n window.$RefreshSig$ = () => (type) => type;\n window.__vite_plugin_react_preamble_installed__ = true;\n</script>`;\n }\n\n /**\n * Generates an SRI hash for the given asset file content.\n * Useful for adding integrity attributes to script/link tags.\n */\n public async generateSriHashForAsset(assetPath: string): Promise<string> {\n const fullPath = path.resolve(this.config.publicDir, assetPath);\n const content = fs.readFileSync(fullPath);\n return generateSriHash(content);\n }\n}\n\n/**\n * Creates a configured ViteHelper instance.\n */\nexport function createViteHelper(config?: ViteConfig): ViteHelper {\n return new ViteHelper(config);\n}\n\n/**\n * Default singleton instance.\n */\nexport const defaultViteHelper = new ViteHelper();\n","import fs from 'fs';\nimport path from 'path';\nimport ejs from 'ejs';\nimport type { BladeEngineOptions, Page, SSRResult } from './types.js';\nimport { compileBladeDirectives } from './directives.js';\nimport { createViteHelper, ViteHelper } from './vite.js';\nimport { serializePage } from './utils.js';\n\nexport interface TemplateLocals extends Record<string, any> {\n page?: Page;\n ssr?: SSRResult | null;\n _csrf?: string;\n csrfToken?: string;\n routes?: any;\n}\n\n/**\n * Registry of all engine instance caches for bulk clearing.\n */\nconst engineCaches: Set<Map<string, ejs.TemplateFunction>> = new Set();\n\n/**\n * Creates an Express view engine with Blade directive support and built-in Inertia/Vite helpers.\n */\nexport function createInertiaEngine(options?: BladeEngineOptions) {\n const viteHelper: ViteHelper = options?.vite ? createViteHelper(options.vite) : createViteHelper();\n const shouldCache = options?.cache ?? !viteHelper.isDev();\n\n const inertiaVersion = options?.inertiaVersion ?? 2;\n const defaultRootElement = options?.rootElement ?? true;\n\n const templateCache = new Map<string, ejs.TemplateFunction>();\n engineCaches.add(templateCache);\n\n return function inertiaBladeEngine(\n filePath: string,\n rawOptions: Record<string, any>,\n callback: (err: Error | null, html?: string) => void\n ) {\n try {\n let compiledTemplate = shouldCache ? templateCache.get(filePath) : undefined;\n\n if (!compiledTemplate) {\n const templateSource = options?.templateSource || fs.readFileSync(filePath, 'utf-8');\n const compiledSource = options?.compileTemplate\n ? options.compileTemplate(templateSource)\n : compileBladeDirectives(templateSource, options?.directives);\n\n compiledTemplate = ejs.compile(compiledSource, {\n filename: filePath,\n cache: shouldCache,\n async: false,\n });\n\n if (shouldCache) {\n templateCache.set(filePath, compiledTemplate);\n }\n }\n\n const locals: TemplateLocals = { ...rawOptions };\n const page: Page | undefined = locals.page;\n const ssr: SSRResult | null | undefined = locals.ssr;\n const effectiveVersion = locals.inertiaVersion ?? inertiaVersion;\n const shouldRenderRootElement = locals.rootElement ?? defaultRootElement;\n\n // Provide standard Inertia and Blade helpers\n locals.inertiaScript = (id: string = 'app') => {\n if (!page) return '';\n const jsonSafe = JSON.stringify(page).replace(/</g, '\\\\u003c');\n return `<script data-page=\"${id}\" type=\"application/json\">${jsonSafe}</script>`;\n };\n\n locals.inertiaData = locals.inertiaScript;\n\n locals.inertia = (idOrOptions: string | boolean = 'app', version?: 1 | 2) => {\n const id = typeof idOrOptions === 'string' ? idOrOptions : 'app';\n const renderElement = typeof idOrOptions === 'boolean' ? idOrOptions : (shouldRenderRootElement !== false);\n const ver = version ?? effectiveVersion;\n\n if (!page) {\n return renderElement ? `<div id=\"${id}\"></div>` : '';\n }\n\n const ssrBody = ssr && ssr.body ? ssr.body : '';\n\n // Official @inertiajs SSR servers return a fully-wrapped payload\n // (`<script data-page=\"...\">` + `<div data-server-rendered id=\"app\">`) that\n // already includes the page data and root element, so pass it through untouched.\n const ssrFullBody = /<div[^>]*data-server-rendered/.test(ssrBody);\n\n // Inertia v1: data-page attribute on root div\n if (ver === 1) {\n const pageData = serializePage(page);\n return renderElement ? `<div id=\"${id}\" data-page=\"${pageData}\">${ssrBody}</div>` : '';\n }\n\n // Inertia v2:\n const jsonSafe = JSON.stringify(page).replace(/</g, '\\\\u003c');\n const scriptTag = `<script data-page=\"${id}\" type=\"application/json\">${jsonSafe}</script>`;\n\n if (ssrFullBody) {\n return ssrBody;\n }\n\n if (!renderElement) {\n return scriptTag;\n }\n\n return `<div id=\"${id}\">${ssrBody}</div>\\n${scriptTag}`;\n };\n\n locals.inertiaHead = () => {\n if (ssr && Array.isArray(ssr.head) && ssr.head.length > 0) {\n return ssr.head.join('\\n');\n }\n return '';\n };\n\n locals.vite = (entrypoints: string | string[]) => {\n return viteHelper.renderTags(entrypoints);\n };\n\n locals.viteReactRefresh = () => {\n return viteHelper.renderReactRefresh();\n };\n\n locals.csrf = () => {\n const token =\n locals._csrf ||\n locals.csrfToken ||\n (typeof locals.req?.csrfToken === 'function' ? locals.req.csrfToken() : '') ||\n '';\n return token ? `<input type=\"hidden\" name=\"_token\" value=\"${token}\">` : '';\n };\n\n locals.json = (value: any) => {\n return JSON.stringify(value);\n };\n\n if (!locals.routes) {\n locals.routes = (group?: string) => {\n if (locals.routeConfig || locals.ziggy) {\n const routesData = JSON.stringify(locals.routeConfig || locals.ziggy);\n return `<script>const Ziggy = ${routesData};</script>`;\n }\n return '';\n };\n }\n\n const html = compiledTemplate(locals);\n callback(null, html);\n } catch (err: any) {\n callback(err);\n }\n };\n}\n\n/**\n * Default Inertia Blade EJS engine instance.\n */\nexport const inertiaEngine = createInertiaEngine();\n\n/**\n * Clear all template engine caches (useful during testing or hot reloading).\n */\nexport function clearEngineCache(): void {\n for (const cache of engineCaches) {\n cache.clear();\n }\n}\n","import type { ViteHelper } from './vite.js';\n\nexport interface PrefetchOptions {\n /**\n * Whether to include crossorigin attribute.\n * @default false\n */\n crossorigin?: boolean;\n /**\n * Whether to include integrity attribute (requires async SRI calculation).\n * @default false\n */\n integrity?: boolean;\n /**\n * Prefetch mode: 'prefetch' (default) or 'preload'.\n */\n mode?: 'prefetch' | 'preload';\n}\n\nexport interface PrefetchEntry {\n entrypoints: string[];\n assets?: string[];\n}\n\nexport class PrefetchHelper {\n constructor(private viteHelper: ViteHelper) {}\n\n /**\n * Generates prefetch tags for the given entrypoints.\n * Uses the Vite manifest to resolve actual asset paths in production.\n */\n prefetch(entries: string | string[], options: PrefetchOptions = {}): string {\n const entrypoints = Array.isArray(entries) ? entries : [entries];\n const mode = options.mode || 'prefetch';\n const tags: string[] = [];\n\n if (this.viteHelper.isDev()) {\n const devUrl = this.viteHelper['getDevServerUrl']().replace(/\\/$/, '');\n for (const entry of entrypoints) {\n const cleanEntry = entry.replace(/^\\//, '');\n tags.push(`<link rel=\"${mode}\" href=\"${devUrl}/${cleanEntry}\" crossorigin>`);\n }\n return tags.join('\\n');\n }\n\n const manifest = this.viteHelper['getManifest']();\n const basePath = this.viteHelper['config'].base.endsWith('/')\n ? this.viteHelper['config'].base\n : `${this.viteHelper['config'].base}/`;\n\n const rendered = new Set<string>();\n\n for (const entry of entrypoints) {\n const cleanEntry = entry.replace(/^\\//, '');\n const chunk = this.resolveChunk(manifest, cleanEntry);\n if (!chunk) continue;\n\n const files = [chunk.file, ...(chunk.css || []), ...(chunk.assets || [])].filter(Boolean) as string[];\n for (const file of files) {\n if (rendered.has(file)) continue;\n rendered.add(file);\n\n const attrs = [`rel=\"${mode}\"`, `href=\"${basePath}${file}\"`];\n if (options.crossorigin) {\n attrs.push('crossorigin');\n }\n tags.push(`<link ${attrs.join(' ')}>`);\n }\n\n if (chunk.imports) {\n for (const imp of chunk.imports) {\n const impChunk = manifest[imp];\n if (impChunk?.file && !rendered.has(impChunk.file)) {\n rendered.add(impChunk.file);\n const attrs = [`rel=\"${mode}\"`, `href=\"${basePath}${impChunk.file}\"`];\n if (options.crossorigin) {\n attrs.push('crossorigin');\n }\n tags.push(`<link ${attrs.join(' ')}>`);\n }\n }\n }\n }\n\n return tags.join('\\n');\n }\n\n /**\n * Generates preload tags for critical assets.\n */\n preload(entries: string | string[], options: Omit<PrefetchOptions, 'mode'> = {}): string {\n return this.prefetch(entries, { ...options, mode: 'preload' });\n }\n\n private resolveChunk(manifest: Record<string, { file?: string; src?: string; css?: string[]; imports?: string[]; assets?: string[] }>, entry: string) {\n return (\n manifest[entry] ||\n Object.values(manifest).find(\n (c) =>\n c.src === entry ||\n c.file === entry ||\n (c.src && (c.src.endsWith(entry) || c.src.endsWith(`/${entry}`))) ||\n (c.file && (c.file.endsWith(entry) || c.file.endsWith(`/${entry}`)))\n )\n );\n }\n}\n\nexport function createPrefetchHelper(viteHelper: ViteHelper): PrefetchHelper {\n return new PrefetchHelper(viteHelper);\n}\n","import { createInertia } from './middleware.js';\n\nexport { createInertia, createInertia as inertia, requestIdMiddleware } from './middleware.js';\nexport default createInertia;\n\nexport {\n createInertiaEngine,\n inertiaEngine,\n clearEngineCache,\n type TemplateLocals,\n} from './engine.js';\n\nexport {\n createViteHelper,\n defaultViteHelper,\n ViteHelper,\n inertiaVitePlugin,\n type ViteManifest,\n type ViteManifestChunk,\n type InertiaVitePlugin,\n type InertiaVitePluginOptions,\n} from './vite.js';\n\nexport {\n compileBladeDirectives,\n registerDirective,\n} from './directives.js';\n\nexport {\n lazy,\n always,\n defer,\n merge,\n optional,\n isLazy,\n isAlways,\n isDeferred,\n isMerge,\n isOptional,\n resolveProps,\n escapeHtmlAttr,\n serializePage,\n safeStringify,\n validateComponentName,\n sanitizeViewData,\n generateSriHash,\n DEFAULT_COMPONENT_NAME_PATTERN,\n} from './utils.js';\n\nexport {\n renderSSR,\n resetAllCircuitBreakers,\n} from './ssr.js';\n\nexport {\n createPrefetchHelper,\n PrefetchHelper,\n type PrefetchOptions,\n type PrefetchEntry,\n} from './prefetch.js';\n\nexport {\n CircuitBreaker,\n shouldRetry,\n calculateBackoff,\n type CircuitBreakerOptions,\n type RetryOptions,\n type SSRResilienceOptions,\n} from './circuit-breaker.js';\n\nexport {\n createLogger,\n getGlobalLogger,\n setGlobalLogger,\n type Logger,\n type LoggerOptions,\n} from './logger.js';\n\nexport type {\n Page,\n PageProps,\n InertiaOptions,\n InertiaRequestHelper,\n InertiaResponseHandler,\n SSROptions,\n SSRResult,\n ViteConfig,\n DirectiveHandler,\n BladeEngineOptions,\n LazyProp,\n AlwaysProp,\n DeferredProp,\n MergeProp,\n OptionalProp,\n PropCallback,\n SecurityOptions,\n} from './types.js';\n"]}