@open-mercato/shared 0.9.1-develop.7477.1.64ba865101 → 0.9.1-develop.7497.1.543ea44c40

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/openapi/generator.ts"],
4
- "sourcesContent": ["import { z, type ZodTypeAny } from 'zod'\nimport type { Module, ModuleApi, ModuleApiLegacy, ModuleApiRouteFile, HttpMethod } from '@open-mercato/shared/modules/registry'\nimport type {\n OpenApiDocument,\n OpenApiDocumentOptions,\n OpenApiMethodDoc,\n OpenApiRequestBodyDoc,\n OpenApiResponseDoc,\n OpenApiRouteDoc,\n} from './types'\n\ntype PathParamInfo = {\n name: string\n catchAll?: boolean\n optional?: boolean\n}\n\ntype ParameterLocation = 'query' | 'path' | 'header'\n\nexport type JsonSchema = Record<string, unknown>\n\ntype SchemaConversionContext = {\n memo: WeakMap<ZodTypeAny, JsonSchema>\n}\n\ntype ExampleGenerationContext = {\n stack: WeakSet<ZodTypeAny>\n}\n\ntype ExampleMap = {\n query?: unknown\n body?: unknown\n path?: Record<string, unknown>\n headers?: Record<string, unknown>\n}\n\nconst HTTP_METHODS: HttpMethod[] = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE']\n\nfunction resolveType(def: any): string | undefined {\n if (!def) return undefined\n if (typeof def.typeName === 'string' && def.typeName.length) return def.typeName\n if (typeof def.type === 'string' && def.type.length) return def.type\n return undefined\n}\n\nfunction getShape(def: any): Record<string, ZodTypeAny> {\n if (!def) return {}\n const shape = typeof def.shape === 'function' ? def.shape() : def.shape\n if (shape && typeof shape === 'object') return shape as Record<string, ZodTypeAny>\n return {}\n}\n\nfunction normalizeChecks(checks: any[] | undefined): Array<{ kind?: string; value?: unknown; extra?: Record<string, unknown> }> {\n if (!Array.isArray(checks)) return []\n return checks.map((check) => {\n if (!check) return {}\n const base = (check as any)?._zod?.def ?? (check as any)?.def ?? check\n const kind = typeof (check as any)?.kind === 'string'\n ? (check as any).kind\n : typeof base?.check === 'string'\n ? base.check\n : undefined\n const value =\n base?.value ??\n base?.minimum ??\n base?.maximum ??\n base?.exact ??\n base?.length ??\n base?.limit ??\n base?.includes ??\n base?.min ??\n base?.max\n return { kind, value, extra: base && typeof base === 'object' ? base : undefined }\n })\n}\n\nconst DEFAULT_EXAMPLE_VALUES = {\n string: 'string',\n number: 1,\n integer: 1,\n boolean: true,\n uuid: '00000000-0000-4000-8000-000000000000',\n email: 'user@example.com',\n url: 'https://example.com/resource',\n datetime: new Date('2025-01-01T00:00:00.000Z').toISOString(),\n}\n\nfunction toTitle(str: string): string {\n if (!str) return ''\n return str\n .split(/[_\\-\\s]+/)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(' ')\n}\n\nfunction normalizePath(path: string): { path: string; params: PathParamInfo[] } {\n const segments = path.split('/').filter((seg) => seg.length > 0)\n const params: PathParamInfo[] = []\n const normalized = segments\n .map((seg) => {\n const catchAll = seg.match(/^\\[\\.\\.\\.(.+)\\]$/)\n if (catchAll) {\n params.push({ name: catchAll[1], catchAll: true })\n return `{${catchAll[1]}}`\n }\n const optCatchAll = seg.match(/^\\[\\[\\.\\.\\.(.+)\\]\\]$/)\n if (optCatchAll) {\n params.push({ name: optCatchAll[1], catchAll: true, optional: true })\n return `{${optCatchAll[1]}}`\n }\n const dyn = seg.match(/^\\[(.+)\\]$/)\n if (dyn) {\n params.push({ name: dyn[1] })\n return `{${dyn[1]}}`\n }\n return seg\n })\n .join('/')\n return { path: '/' + normalized, params }\n}\n\nfunction unwrap(schema?: ZodTypeAny): {\n schema: ZodTypeAny | undefined\n optional: boolean\n nullable: boolean\n defaultValue?: unknown\n} {\n if (!schema) {\n return { schema: undefined, optional: true, nullable: false }\n }\n\n let current: ZodTypeAny = schema\n let optional = false\n let nullable = false\n let defaultValue: unknown\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const def = (current as any)?._def\n if (!def) {\n return { schema: current, optional, nullable, defaultValue }\n }\n const typeName = resolveType(def)\n if (typeName === 'ZodOptional' || typeName === 'optional') {\n optional = true\n current = (current as any)._def.innerType\n continue\n }\n if (typeName === 'ZodNullable' || typeName === 'nullable') {\n nullable = true\n current = (current as any)._def.innerType\n continue\n }\n if (typeName === 'ZodDefault' || typeName === 'default') {\n optional = true\n const rawDefault = (current as any)._def.defaultValue\n defaultValue = typeof rawDefault === 'function' ? rawDefault() : rawDefault\n current = (current as any)._def.innerType\n continue\n }\n if (typeName === 'ZodPipeline' || typeName === 'pipe') {\n current = (current as any)._def.out ?? (current as any)._def.innerType ?? (current as any)._def.schema\n continue\n }\n if (typeName === 'transformer') {\n current = (current as any)._def.output\n continue\n }\n if (typeName === 'ZodLazy' || typeName === 'lazy') {\n const getter = (current as any)._def.getter\n current = typeof getter === 'function' ? getter() : current\n if (current === schema) break\n continue\n }\n if (typeName === 'ZodPromise' || typeName === 'promise') {\n current = (current as any)._def.type\n continue\n }\n if (typeName === 'ZodCatch' || typeName === 'catch') {\n current = (current as any)._def.innerType\n continue\n }\n if (typeName === 'ZodReadonly' || typeName === 'readonly') {\n current = (current as any)._def.innerType\n continue\n }\n if (typeName === 'ZodBranded' || typeName === 'branded') {\n current = (current as any)._def.type\n continue\n }\n break\n }\n return { schema: current, optional, nullable, defaultValue }\n}\n\n/**\n * Extract the description from a zod schema, walking through wrappers like optional/nullable/default.\n * Returns the first description found, or undefined if none exists.\n */\nfunction extractZodDescription(schema?: ZodTypeAny): string | undefined {\n if (!schema) return undefined\n\n let current: ZodTypeAny | undefined = schema\n while (current) {\n // In Zod 4/zod-mini, description is stored directly on the schema object\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const directDescription = (current as any).description\n if (typeof directDescription === 'string' && directDescription.length > 0) {\n return directDescription\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const def = (current as any)?._def as Record<string, unknown> | undefined\n if (!def) return undefined\n\n // Also check _def.description for Zod 3 compatibility\n if (typeof def.description === 'string' && def.description.length > 0) {\n return def.description\n }\n\n // Walk through wrappers to find description on inner types\n const typeName = resolveType(def)\n if (\n typeName === 'ZodOptional' || typeName === 'optional' ||\n typeName === 'ZodNullable' || typeName === 'nullable' ||\n typeName === 'ZodDefault' || typeName === 'default' ||\n typeName === 'ZodCatch' || typeName === 'catch' ||\n typeName === 'ZodReadonly' || typeName === 'readonly'\n ) {\n current = def.innerType as ZodTypeAny | undefined\n continue\n }\n if (typeName === 'ZodBranded' || typeName === 'branded') {\n current = def.type as ZodTypeAny | undefined\n continue\n }\n if (typeName === 'ZodPipeline' || typeName === 'pipe') {\n current = (def.out ?? def.innerType ?? def.schema) as ZodTypeAny | undefined\n continue\n }\n if (typeName === 'transformer') {\n current = def.output as ZodTypeAny | undefined\n continue\n }\n if (typeName === 'ZodLazy' || typeName === 'lazy') {\n const getter = def.getter\n const next = typeof getter === 'function' ? (getter as () => ZodTypeAny)() : current\n if (next === current) break\n current = next\n continue\n }\n if (typeName === 'ZodPromise' || typeName === 'promise') {\n current = def.type as ZodTypeAny | undefined\n continue\n }\n // No more wrappers to unwrap\n break\n }\n return undefined\n}\n\nexport function zodToJsonSchema(schema?: ZodTypeAny, ctx?: SchemaConversionContext): JsonSchema | undefined {\n if (!schema) return undefined\n const context: SchemaConversionContext = ctx ?? { memo: new WeakMap<ZodTypeAny, JsonSchema>() }\n\n const cached = context.memo.get(schema)\n if (cached) return cached\n\n const placeholder: JsonSchema = {}\n context.memo.set(schema, placeholder)\n\n const { schema: inner, nullable } = unwrap(schema)\n if (!inner) {\n if (nullable) placeholder.nullable = true\n return placeholder\n }\n\n if (inner !== schema && typeof inner === 'object') {\n if (!context.memo.has(inner as ZodTypeAny)) {\n context.memo.set(inner as ZodTypeAny, placeholder)\n }\n }\n\n const def = (inner as any)._def\n if (!def) return placeholder\n const typeName = resolveType(def) as string | undefined\n\n const result = placeholder\n\n switch (typeName) {\n case 'ZodString':\n case 'string': {\n result.type = 'string'\n const checks = normalizeChecks(def.checks)\n for (const check of checks) {\n if (!check.kind) continue\n if (check.kind === 'uuid' || check.extra?.format === 'uuid') {\n result.format = 'uuid'\n } else if (check.kind === 'email' || check.extra?.format === 'email') {\n result.format = 'email'\n } else if (check.kind === 'url' || check.extra?.format === 'uri' || check.extra?.format === 'url') {\n result.format = 'uri'\n } else if (check.kind === 'regex' && check.extra?.pattern instanceof RegExp) {\n result.pattern = check.extra.pattern.source\n } else if (check.kind === 'string_format' && typeof check.extra?.format === 'string') {\n if (check.extra.format === 'regex' && check.extra.pattern != null) {\n result.pattern = check.extra.pattern instanceof RegExp\n ? check.extra.pattern.source\n : String(check.extra.pattern)\n } else {\n result.format = check.extra.format\n }\n } else if (check.kind === 'datetime' || check.extra?.format === 'date-time') {\n result.format = 'date-time'\n } else if (['length', 'len', 'exact_length'].includes(check.kind ?? '')) {\n if (typeof check.value === 'number') {\n result.minLength = check.value\n result.maxLength = check.value\n }\n } else if (check.kind === 'min' || check.kind === 'min_length') {\n if (typeof check.value === 'number') result.minLength = check.value\n } else if (check.kind === 'max' || check.kind === 'max_length') {\n if (typeof check.value === 'number') result.maxLength = check.value\n }\n }\n break\n }\n case 'ZodNumber':\n case 'number': {\n result.type = 'number'\n const checks = normalizeChecks(def.checks)\n for (const check of checks) {\n if (!check.kind) continue\n if (check.kind === 'int' || check.kind === 'isInteger') result.type = 'integer'\n if ((check.kind === 'min' || check.kind === 'gte') && typeof check.value === 'number') result.minimum = check.value\n if ((check.kind === 'max' || check.kind === 'lte') && typeof check.value === 'number') result.maximum = check.value\n if (check.kind === 'multipleOf' && typeof check.value === 'number') result.multipleOf = check.value\n }\n break\n }\n case 'ZodBigInt':\n case 'bigint':\n result.type = 'integer'\n result.format = 'int64'\n break\n case 'ZodBoolean':\n case 'boolean':\n result.type = 'boolean'\n break\n case 'ZodLiteral':\n case 'literal': {\n const value = def.value ?? (Array.isArray(def.values) ? def.values[0] : undefined)\n result.type = typeof value\n result.enum = [value]\n break\n }\n case 'ZodEnum':\n case 'enum': {\n const entries = def.values ?? def.entries\n const values = Array.isArray(entries) ? entries : entries ? Object.values(entries) : []\n const enumerators = values.filter((v: unknown) => typeof v === 'string' || typeof v === 'number')\n const allString = enumerators.every((v: unknown) => typeof v === 'string')\n result.type = allString ? 'string' : 'number'\n result.enum = enumerators\n break\n }\n case 'ZodNativeEnum': {\n const values = Object.values(def.values).filter((v) => typeof v === 'string' || typeof v === 'number')\n const allString = values.every((v) => typeof v === 'string')\n result.type = allString ? 'string' : 'number'\n result.enum = values\n break\n }\n case 'ZodUnion':\n case 'union': {\n const options = def.options || []\n result.oneOf = options.map((option: ZodTypeAny) => zodToJsonSchema(option, context) ?? {})\n break\n }\n case 'ZodIntersection':\n case 'intersection': {\n result.allOf = [\n zodToJsonSchema(def.left, context) ?? {},\n zodToJsonSchema(def.right, context) ?? {},\n ]\n break\n }\n case 'ZodPipeline':\n case 'pipe': {\n const resolved = zodToJsonSchema(def.out ?? def.innerType ?? def.schema, context) ?? {}\n Object.assign(result, resolved)\n break\n }\n case 'ZodLazy':\n case 'lazy': {\n const next = typeof def.getter === 'function' ? def.getter() : undefined\n const resolved = next ? zodToJsonSchema(next, context) : undefined\n if (resolved) Object.assign(result, resolved)\n break\n }\n case 'ZodPromise':\n case 'promise': {\n const resolved = zodToJsonSchema(def.type, context)\n if (resolved) Object.assign(result, resolved)\n break\n }\n case 'ZodCatch':\n case 'catch': {\n const resolved = zodToJsonSchema(def.innerType ?? def.type, context)\n if (resolved) Object.assign(result, resolved)\n break\n }\n case 'ZodReadonly':\n case 'readonly': {\n const resolved = zodToJsonSchema(def.innerType ?? def.type, context)\n if (resolved) Object.assign(result, resolved)\n break\n }\n case 'ZodArray':\n case 'array': {\n const elementSchema =\n def.type && typeof def.type === 'object'\n ? def.type\n : (def.element && typeof def.element === 'object' ? def.element : undefined)\n result.type = 'array'\n result.items = zodToJsonSchema(elementSchema as ZodTypeAny, context) ?? {}\n if (typeof def.minLength === 'number') result.minItems = def.minLength\n if (typeof def.maxLength === 'number') result.maxItems = def.maxLength\n const checks = normalizeChecks(def.checks)\n for (const check of checks) {\n if (check.kind === 'min_length' && typeof check.value === 'number') result.minItems = check.value\n if (check.kind === 'max_length' && typeof check.value === 'number') result.maxItems = check.value\n if (check.kind === 'length' && typeof check.value === 'number') {\n result.minItems = check.value\n result.maxItems = check.value\n }\n }\n break\n }\n case 'ZodTuple':\n case 'tuple': {\n const items = def.items || []\n result.type = 'array'\n result.prefixItems = items.map((item: ZodTypeAny) => zodToJsonSchema(item, context) ?? {})\n result.minItems = items.length\n result.maxItems = items.length\n break\n }\n case 'ZodRecord':\n case 'record': {\n result.type = 'object'\n const valueSchema = def.valueType ?? def.value\n const valueType = valueSchema ? resolveType(valueSchema._def) : undefined\n if (!valueType || valueType === 'ZodUnknown' || valueType === 'unknown' || valueType === 'ZodAny' || valueType === 'any') {\n result.additionalProperties = true\n } else {\n result.additionalProperties = zodToJsonSchema(valueSchema, context) ?? true\n }\n break\n }\n case 'ZodObject':\n case 'object': {\n result.type = 'object'\n const shape = getShape(def)\n const properties: Record<string, JsonSchema> = {}\n const required: string[] = []\n for (const [key, rawSchema] of Object.entries(shape)) {\n const unwrapped = unwrap(rawSchema as ZodTypeAny)\n const childSchema = zodToJsonSchema(unwrapped.schema, context)\n if (!childSchema) continue\n const baseSchema = childSchema\n let propertySchema: JsonSchema = baseSchema\n if (unwrapped.nullable) {\n propertySchema = {\n anyOf: [{ type: 'null' }, propertySchema],\n }\n }\n if (unwrapped.defaultValue !== undefined) {\n if (propertySchema === baseSchema) {\n propertySchema = { allOf: [baseSchema], default: unwrapped.defaultValue }\n } else {\n propertySchema = { ...propertySchema, default: unwrapped.defaultValue }\n }\n }\n properties[key] = propertySchema\n if (!unwrapped.optional) required.push(key)\n }\n result.properties = properties\n if (required.length > 0) result.required = required\n if (def.unknownKeys === 'passthrough') {\n result.additionalProperties = true\n } else if (def.catchall) {\n const catchallType = resolveType(def.catchall._def)\n if (catchallType === 'ZodNever' || catchallType === 'never') {\n result.additionalProperties = false\n } else if (!catchallType || catchallType === 'ZodUnknown' || catchallType === 'unknown' || catchallType === 'ZodAny' || catchallType === 'any') {\n result.additionalProperties = true\n } else {\n result.additionalProperties = zodToJsonSchema(def.catchall, context) ?? true\n }\n } else {\n result.additionalProperties = false\n }\n break\n }\n case 'ZodDate':\n case 'date':\n result.type = 'string'\n result.format = 'date-time'\n break\n case 'ZodNull':\n case 'null':\n result.type = 'null'\n break\n case 'ZodVoid':\n case 'void':\n case 'ZodNever':\n case 'never':\n break\n case 'ZodAny':\n case 'any':\n case 'ZodUnknown':\n case 'unknown':\n case 'ZodNaN':\n case 'nan':\n default:\n break\n }\n\n if (nullable) {\n if (result.type && result.type !== 'null') {\n result.nullable = true\n } else if (!result.type) {\n const clone = { ...result }\n result.anyOf = [{ type: 'null' }, clone]\n }\n }\n\n return result\n}\n\nfunction generateExample(schema?: ZodTypeAny, ctx?: ExampleGenerationContext): unknown {\n if (!schema) return undefined\n if ((typeof schema !== 'object' || schema === null) && typeof schema !== 'function') return undefined\n const trackable = schema as object\n const context: ExampleGenerationContext = ctx ?? { stack: new WeakSet<ZodTypeAny>() }\n if (context.stack.has(trackable as ZodTypeAny)) return undefined\n context.stack.add(trackable as ZodTypeAny)\n\n try {\n const { schema: inner, optional, nullable, defaultValue } = unwrap(schema)\n if (!inner) {\n if (defaultValue !== undefined) return defaultValue\n if (nullable) return null\n if (optional) return undefined\n return undefined\n }\n const def = (inner as any)._def\n const typeName = resolveType(def) as string | undefined\n if (defaultValue !== undefined) return defaultValue\n\n if (nullable) return null\n if (optional) return undefined\n\n switch (typeName) {\n case 'ZodString':\n case 'string': {\n const checks = normalizeChecks(def?.checks)\n for (const check of checks) {\n if (!check.kind && !check.extra?.format) continue\n if (check.kind === 'uuid' || check.extra?.format === 'uuid') return DEFAULT_EXAMPLE_VALUES.uuid\n if (check.kind === 'email' || check.extra?.format === 'email') return DEFAULT_EXAMPLE_VALUES.email\n if (check.kind === 'url' || check.extra?.format === 'url' || check.extra?.format === 'uri') return DEFAULT_EXAMPLE_VALUES.url\n if (check.kind === 'datetime' || check.extra?.format === 'date-time') return DEFAULT_EXAMPLE_VALUES.datetime\n }\n return DEFAULT_EXAMPLE_VALUES.string\n }\n case 'ZodNumber':\n case 'number': {\n const checks = normalizeChecks(def?.checks)\n const isInt = checks.some((check) => check.kind === 'int' || check.kind === 'isInteger')\n return isInt ? DEFAULT_EXAMPLE_VALUES.integer : DEFAULT_EXAMPLE_VALUES.number\n }\n case 'ZodBigInt':\n case 'bigint':\n return BigInt(1)\n case 'ZodBoolean':\n case 'boolean':\n return DEFAULT_EXAMPLE_VALUES.boolean\n case 'ZodEnum':\n case 'enum': {\n const entries = def?.values ?? def?.entries\n const values = Array.isArray(entries) ? entries : entries ? Object.values(entries) : []\n return values[0]\n }\n case 'ZodNativeEnum': {\n const values = Object.values(def?.values || [])\n return values[0]\n }\n case 'ZodLiteral':\n case 'literal':\n return def?.value ?? (Array.isArray(def?.values) ? def.values[0] : undefined)\n case 'ZodArray':\n case 'array': {\n const elementSchema =\n def?.type && typeof def.type === 'object'\n ? def.type\n : (def?.element && typeof def.element === 'object' ? def.element : undefined)\n const child = generateExample(elementSchema, context)\n return child === undefined ? [] : [child]\n }\n case 'ZodTuple':\n case 'tuple': {\n const items = def?.items || []\n return items.map((item: ZodTypeAny) => generateExample(item, context))\n }\n case 'ZodObject':\n case 'object': {\n const shape = getShape(def)\n const obj: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(shape)) {\n const example = generateExample(value as ZodTypeAny, context)\n if (example !== undefined) obj[key] = example\n }\n return obj\n }\n case 'ZodRecord':\n case 'record': {\n const valueExample = generateExample(def?.valueType ?? def?.value, context)\n return valueExample === undefined ? {} : { key: valueExample }\n }\n case 'ZodUnion':\n case 'union': {\n const options = def?.options || []\n return options.length ? generateExample(options[0], context) : undefined\n }\n case 'ZodPipeline':\n case 'pipe':\n return generateExample(def?.out ?? def?.innerType ?? def?.schema, context)\n case 'ZodLazy':\n case 'lazy': {\n const next = typeof def?.getter === 'function' ? def.getter() : undefined\n return next ? generateExample(next, context) : undefined\n }\n case 'ZodPromise':\n case 'promise':\n return generateExample(def?.type, context)\n case 'ZodCatch':\n case 'catch':\n return generateExample(def?.innerType ?? def?.type, context)\n case 'ZodReadonly':\n case 'readonly':\n return generateExample(def?.innerType ?? def?.type, context)\n case 'ZodIntersection':\n case 'intersection': {\n const left = generateExample(def?.left, context)\n const right = generateExample(def?.right, context)\n if (typeof left === 'object' && left && typeof right === 'object' && right) {\n return { ...(left as object), ...(right as object) }\n }\n return left ?? right\n }\n case 'ZodDate':\n case 'date':\n return DEFAULT_EXAMPLE_VALUES.datetime\n default:\n return undefined\n }\n } finally {\n context.stack.delete(trackable as ZodTypeAny)\n }\n}\n\nfunction buildParameters(\n schema: ZodTypeAny | undefined,\n location: ParameterLocation,\n pathParamNames?: PathParamInfo[]\n): Array<Record<string, unknown>> {\n if (!schema && location !== 'path') return []\n\n const params: Array<Record<string, unknown>> = []\n\n if (location === 'path' && pathParamNames && pathParamNames.length) {\n const merged = mergePathParamSchemas(schema, pathParamNames)\n for (const { name, schema: paramSchema, optional } of merged) {\n const jsonSchema = zodToJsonSchema(paramSchema)\n const example = generateExample(paramSchema)\n const description = extractZodDescription(paramSchema)\n params.push({\n name,\n in: 'path',\n required: !optional,\n schema: jsonSchema ?? { type: 'string' },\n example,\n ...(description ? { description } : {}),\n })\n }\n return params\n }\n\n if (!schema) return params\n\n const { schema: unwrapped } = unwrap(schema)\n if (!unwrapped) return params\n const def = (unwrapped as any)._def\n const typeName = resolveType(def) as string | undefined\n if (typeName === 'ZodObject' || typeName === 'object') {\n const shape = getShape(def)\n for (const [key, raw] of Object.entries(shape)) {\n const details = unwrap(raw as ZodTypeAny)\n if (!details.schema) continue\n const jsonSchema = zodToJsonSchema(details.schema)\n const example = generateExample(details.schema)\n const description = extractZodDescription(raw as ZodTypeAny)\n params.push({\n name: key,\n in: location,\n required: location === 'path' ? true : !details.optional,\n schema: jsonSchema ?? {},\n example,\n ...(description ? { description } : {}),\n })\n }\n } else {\n const jsonSchema = zodToJsonSchema(unwrapped)\n const example = generateExample(unwrapped)\n const description = extractZodDescription(unwrapped)\n params.push({\n name: location === 'header' ? 'X-Custom-Header' : 'value',\n in: location,\n required: location === 'path',\n schema: jsonSchema ?? {},\n example,\n ...(description ? { description } : {}),\n })\n }\n\n return params\n}\n\nfunction mergePathParamSchemas(schema: ZodTypeAny | undefined, params: PathParamInfo[]) {\n const merged: Array<{ name: string; schema: ZodTypeAny | undefined; optional: boolean }> = []\n const map: Record<string, ZodTypeAny> = {}\n if (schema) {\n const { schema: unwrapped } = unwrap(schema)\n if (unwrapped && (unwrapped as any)._def && (resolveType((unwrapped as any)._def) === 'ZodObject' || resolveType((unwrapped as any)._def) === 'object')) {\n const shape = getShape((unwrapped as any)._def)\n for (const [key, value] of Object.entries(shape)) {\n map[key] = value as ZodTypeAny\n }\n }\n }\n for (const param of params) {\n merged.push({\n name: param.name,\n schema: map[param.name],\n optional: !!param.optional,\n })\n }\n return merged\n}\n\nfunction buildRequestBody(request?: OpenApiRequestBodyDoc): Record<string, unknown> | undefined {\n if (!request) return undefined\n const schema = zodToJsonSchema(request.schema)\n const example = request.example ?? generateExample(request.schema)\n const contentType = request.contentType ?? 'application/json'\n return {\n required: true,\n content: {\n [contentType]: {\n schema: schema ?? {},\n example,\n },\n },\n description: request.description,\n }\n}\n\nfunction buildResponses(\n method: HttpMethod,\n responses?: OpenApiResponseDoc[],\n errors?: OpenApiResponseDoc[],\n metadata?: any\n): Record<string, unknown> {\n const entries: Record<string, unknown> = {}\n const list = [...(responses ?? [])]\n const errorList = [...(errors ?? [])]\n const inferredList: OpenApiResponseDoc[] = []\n if (metadata?.requireAuth) {\n inferredList.push({\n status: 401,\n description: 'Unauthorized',\n schema: z.object({ error: z.string() }),\n xAutoGenerated: true,\n })\n }\n if (Array.isArray(metadata?.requireFeatures) && metadata.requireFeatures.length) {\n inferredList.push({\n status: 403,\n description: 'Forbidden \u2013 missing required features',\n schema: z.object({ error: z.string() }),\n xAutoGenerated: true,\n })\n }\n if (!list.some((res) => res.status >= 200 && res.status < 300)) {\n const fallbackStatus = method === 'POST' ? 201 : method === 'DELETE' ? 204 : 200\n list.push({\n status: fallbackStatus,\n description: fallbackStatus === 204 ? 'Success' : 'Success response',\n })\n }\n const setEntry = (res: OpenApiResponseDoc, options?: { skipIfPresent?: boolean }) => {\n const status = String(res.status || 200)\n if (options?.skipIfPresent && Object.prototype.hasOwnProperty.call(entries, status)) return\n const mediaType = res.mediaType ?? 'application/json'\n const schema = res.schema ? zodToJsonSchema(res.schema) : undefined\n const example = res.schema ? res.example ?? generateExample(res.schema) : res.example\n const isNoContent = res.status === 204\n entries[status] = {\n description: res.description ?? '',\n ...(isNoContent\n ? {}\n : {\n content: {\n [mediaType]: {\n schema: schema ?? { type: 'object', description: 'Schema not declared' },\n ...(example !== undefined ? { example } : {}),\n },\n },\n }),\n ...(res.xAutoGenerated ? { 'x-autoGenerated': true } : {}),\n }\n }\n for (const res of [...list, ...errorList]) setEntry(res)\n for (const res of inferredList) setEntry(res, { skipIfPresent: true })\n return entries\n}\n\nfunction buildSecurity(metadata: any, methodDoc?: OpenApiMethodDoc, defaults?: string[]) {\n const securitySchemes = new Set<string>()\n if (Array.isArray(methodDoc?.security)) methodDoc.security.forEach((s) => securitySchemes.add(s))\n if (metadata?.requireAuth) securitySchemes.add('bearerAuth')\n if (defaults) defaults.forEach((s) => securitySchemes.add(s))\n if (securitySchemes.size === 0) return undefined\n return Array.from(securitySchemes.values()).map((scheme) => ({ [scheme]: [] }))\n}\n\nfunction collectExamples(\n querySchema?: ZodTypeAny,\n bodySchema?: ZodTypeAny,\n pathSchema?: ZodTypeAny,\n headerSchema?: ZodTypeAny,\n metadata?: any\n): ExampleMap {\n const examples: ExampleMap = {}\n const queryExample = querySchema ? generateExample(querySchema) : undefined\n if (queryExample && typeof queryExample === 'object') examples.query = queryExample\n const bodyExample = bodySchema ? generateExample(bodySchema) : undefined\n if (bodyExample !== undefined) examples.body = bodyExample\n const pathExample = pathSchema ? generateExample(pathSchema) : undefined\n if (pathExample && typeof pathExample === 'object') examples.path = pathExample as Record<string, unknown>\n const headerExample = headerSchema ? generateExample(headerSchema) : undefined\n if (headerExample && typeof headerExample === 'object') examples.headers = headerExample as Record<string, unknown>\n if (metadata?.requireAuth) {\n if (!examples.headers) examples.headers = {}\n if (typeof examples.headers.authorization !== 'string') {\n examples.headers.authorization = 'Bearer <token>'\n }\n }\n return examples\n}\n\nfunction toFormUrlEncoded(value: unknown): string {\n if (!value || typeof value !== 'object') return ''\n const params = new URLSearchParams()\n for (const [key, raw] of Object.entries(value as Record<string, unknown>)) {\n if (raw === undefined) continue\n params.append(key, raw === null ? '' : String(raw))\n }\n return params.toString()\n}\n\nfunction stringifyBodyExample(value: unknown, mediaType?: string): string {\n if (value === undefined) return ''\n if (mediaType === 'application/x-www-form-urlencoded') {\n return toFormUrlEncoded(value)\n }\n if (!mediaType || mediaType === 'application/json') {\n try {\n return JSON.stringify(value, null, 2)\n } catch {\n return ''\n }\n }\n if (typeof value === 'string') return value\n try {\n return JSON.stringify(value, null, 2)\n } catch {\n return String(value)\n }\n}\n\nfunction buildQueryString(example: unknown): string {\n if (!example || typeof example !== 'object') return ''\n const parts: string[] = []\n for (const [key, value] of Object.entries(example as Record<string, unknown>)) {\n if (value === undefined || value === null) continue\n const encoded = encodeURIComponent(String(value))\n parts.push(`${encodeURIComponent(key)}=${encoded}`)\n }\n return parts.length ? `?${parts.join('&')}` : ''\n}\n\nfunction injectPathExamples(path: string, params: PathParamInfo[], examples?: Record<string, unknown>): string {\n if (!params.length) return path\n let result = path\n for (const param of params) {\n const placeholder = `{${param.name}}`\n const example = examples && examples[param.name] !== undefined ? examples[param.name] : `:${param.name}`\n result = result.replace(placeholder, String(example))\n }\n return result\n}\n\nfunction buildCurlSample(\n method: HttpMethod,\n path: string,\n params: PathParamInfo[],\n examples: ExampleMap,\n baseUrl: string,\n metadata: any,\n requestBody?: OpenApiRequestBodyDoc\n): string {\n const lines: string[] = []\n const pathWithExamples = injectPathExamples(path, params, examples.path)\n const query = buildQueryString(examples.query)\n const url = baseUrl.replace(/\\/$/, '') + pathWithExamples + query\n lines.push(`curl -X ${method} \"${url}\"`)\n\n lines.push(' -H \"Accept: application/json\"')\n\n const headers: Record<string, unknown> = { ...(examples.headers ?? {}) }\n if (metadata?.requireAuth && !headers.Authorization && !headers.authorization) {\n headers.Authorization = 'Bearer <token>'\n }\n for (const [key, value] of Object.entries(headers)) {\n lines.push(` -H \"${key.replace(/\"/g, '')}: ${String(value).replace(/\"/g, '')}\"`)\n }\n\n const bodyExample = examples.body ?? requestBody?.example\n const requestContentType = requestBody?.contentType ?? 'application/json'\n if (bodyExample !== undefined) {\n lines.push(` -H \"Content-Type: ${requestContentType}\"`)\n const serialized = stringifyBodyExample(bodyExample, requestContentType)\n if (serialized) {\n const escapedSerialized = escapeShellDoubleQuotes(serialized)\n lines.push(` -d \"${escapedSerialized}\"`)\n }\n }\n\n return lines.join(' \\\\\\n')\n}\n\nfunction escapeShellDoubleQuotes(value: string): string {\n return value.replace(/[\\\\`\"$]/g, '\\\\$&')\n}\n\nfunction ensureSecurityComponents(doc: OpenApiDocument) {\n if (!doc.components) doc.components = {}\n if (!doc.components.securitySchemes) doc.components.securitySchemes = {}\n if (!doc.components.securitySchemes.bearerAuth) {\n doc.components.securitySchemes.bearerAuth = {\n type: 'http',\n scheme: 'bearer',\n bearerFormat: 'JWT',\n description: 'Send an `Authorization: Bearer <token>` header with a valid API token.',\n }\n }\n}\n\nfunction resolveOperationId(moduleId: string, path: string, method: HttpMethod): string {\n const cleaned = normalizeOperationIdSegment(path)\n return [moduleId, method.toLowerCase(), cleaned].filter(Boolean).join('_')\n}\n\nfunction normalizeOperationIdSegment(input: string): string {\n let output = ''\n let previousUnderscore = false\n\n for (const character of input) {\n const codePoint = character.charCodeAt(0)\n const isLower = codePoint >= 97 && codePoint <= 122\n const isUpper = codePoint >= 65 && codePoint <= 90\n const isNumber = codePoint >= 48 && codePoint <= 57\n const isAlphaNumeric = isLower || isUpper || isNumber\n\n if (isAlphaNumeric) {\n output += character\n previousUnderscore = false\n continue\n }\n\n if (!previousUnderscore) {\n output += '_'\n previousUnderscore = true\n }\n }\n\n while (output.startsWith('_')) output = output.slice(1)\n while (output.endsWith('_')) output = output.slice(0, -1)\n\n return output\n}\n\nfunction collectRouteDoc(api: ModuleApi, moduleId: string): OpenApiRouteDoc | undefined {\n if ('handlers' in api) {\n const route = api as ModuleApiRouteFile & { docs?: OpenApiRouteDoc }\n if (route.docs) return route.docs\n const maybe = (route.handlers as any)?.openApi\n if (maybe && typeof maybe === 'object') return maybe as OpenApiRouteDoc\n } else {\n const legacy = api as ModuleApiLegacy & { docs?: OpenApiMethodDoc }\n if (legacy.docs) {\n return {\n methods: { [legacy.method]: legacy.docs },\n }\n }\n const maybe = (legacy.handler as any)?.openApi\n if (maybe && typeof maybe === 'object') {\n return {\n methods: { [legacy.method]: maybe as OpenApiMethodDoc },\n }\n }\n }\n return undefined\n}\n\nexport function buildOpenApiDocument(modules: Module[], options: OpenApiDocumentOptions = {}): OpenApiDocument {\n const doc: OpenApiDocument = {\n openapi: '3.1.0',\n info: {\n title: options.title ?? 'Open Mercato API',\n version: options.version ?? '1.0.0',\n description: options.description,\n },\n servers: options.servers,\n paths: {},\n }\n\n ensureSecurityComponents(doc)\n\n const includeAccessControlMetadata = options.includeAccessControlMetadata !== false\n const tags = new Map<string, string | undefined>()\n\n for (const moduleEntry of modules) {\n const defaultTag = moduleEntry.info?.title ?? toTitle(moduleEntry.id)\n if (defaultTag) tags.set(defaultTag, moduleEntry.info?.description)\n\n const apis = moduleEntry.apis ?? []\n for (const api of apis) {\n const routeDoc = collectRouteDoc(api, moduleEntry.id)\n const moduleTag = routeDoc?.tag ?? defaultTag\n const normalized = normalizePath((api as any).path ?? (api as any).path ?? '')\n const pathKey = normalized.path\n if (!doc.paths[pathKey]) doc.paths[pathKey] = {}\n const availableMethods: HttpMethod[] =\n 'handlers' in api\n ? HTTP_METHODS.filter((method) => typeof (api as ModuleApiRouteFile).handlers?.[method] === 'function')\n : [api.method as HttpMethod]\n\n for (const method of availableMethods) {\n const methodLower = method.toLowerCase() as Lowercase<HttpMethod>\n const existing = doc.paths[pathKey][methodLower]\n if (existing) continue\n\n const metadata = 'handlers' in api ? (api as ModuleApiRouteFile).metadata?.[method] : undefined\n const methodDoc = routeDoc?.methods?.[method]\n const summary = methodDoc?.summary ?? routeDoc?.summary ?? `${method} ${pathKey}`\n const baseDescription = methodDoc?.description ?? routeDoc?.description\n const meta = metadata && typeof metadata === 'object' ? (metadata as Record<string, unknown>) : undefined\n const requireFeatures = Array.isArray(meta?.['requireFeatures'])\n ? (meta!['requireFeatures'] as string[])\n : undefined\n const requireRoles = Array.isArray(meta?.['requireRoles'])\n ? (meta!['requireRoles'] as string[])\n : undefined\n const requireAuth = meta?.['requireAuth'] === true\n const descriptionParts: string[] = []\n if (baseDescription) descriptionParts.push(baseDescription)\n if (includeAccessControlMetadata && Array.isArray(requireFeatures) && requireFeatures.length) {\n descriptionParts.push(`Requires features: ${requireFeatures.join(', ')}`)\n }\n if (includeAccessControlMetadata && Array.isArray(requireRoles) && requireRoles.length) {\n descriptionParts.push(`Requires roles: ${requireRoles.join(', ')}`)\n }\n\n const querySchema = methodDoc?.query\n const pathSchema = methodDoc?.pathParams ?? routeDoc?.pathParams\n const headerSchema = methodDoc?.headers\n const requestBody = methodDoc?.requestBody\n const examples = collectExamples(querySchema, requestBody?.schema, pathSchema, headerSchema, metadata)\n const curlSample = buildCurlSample(\n method,\n pathKey,\n normalized.params,\n examples,\n options.baseUrlForExamples ?? 'https://api.open-mercato.local',\n metadata,\n requestBody\n )\n\n doc.paths[pathKey][methodLower] = {\n operationId: methodDoc?.operationId ?? resolveOperationId(moduleEntry.id, pathKey, method),\n summary,\n description: descriptionParts.length ? descriptionParts.join('\\n\\n') : undefined,\n tags: methodDoc?.tags ?? (moduleTag ? [moduleTag] : undefined),\n deprecated: methodDoc?.deprecated,\n externalDocs: methodDoc?.externalDocs,\n parameters: [\n ...buildParameters(pathSchema, 'path', normalized.params),\n ...buildParameters(querySchema, 'query'),\n ...buildParameters(headerSchema, 'header'),\n ].filter(Boolean),\n requestBody: buildRequestBody(requestBody),\n responses: buildResponses(method, methodDoc?.responses, methodDoc?.errors, metadata),\n security: buildSecurity(metadata, methodDoc, options.defaultSecurity),\n 'x-codeSamples': methodDoc?.codeSamples ?? [\n {\n lang: 'curl',\n label: 'cURL',\n source: curlSample,\n },\n ],\n ...(includeAccessControlMetadata && Array.isArray(requireFeatures) && requireFeatures.length\n ? { 'x-require-features': requireFeatures }\n : {}),\n ...(includeAccessControlMetadata && Array.isArray(requireRoles) && requireRoles.length\n ? { 'x-require-roles': requireRoles }\n : {}),\n ...(requireAuth ? { 'x-require-auth': true } : {}),\n ...(methodDoc?.extensions ?? {}),\n }\n }\n }\n }\n\n doc.tags = Array.from(tags.entries()).map(([name, description]) => ({\n name,\n description: description ?? undefined,\n }))\n\n return doc\n}\n\nfunction formatMarkdownTable(rows: Array<[string, string, string, string]>): string {\n if (!rows.length) return ''\n const header = ['Name', 'Location', 'Type', 'Description']\n const align = ['---', '---', '---', '---']\n const lines = [\n `| ${header.join(' | ')} |`,\n `| ${align.join(' | ')} |`,\n ...rows.map((row) => `| ${row.join(' | ')} |`),\n ]\n return lines.join('\\n')\n}\n\nfunction schemaTypeLabel(schema: any): string {\n if (!schema) return 'any'\n if (schema.type) return schema.type\n if (schema.oneOf) return schema.oneOf.map(schemaTypeLabel).join(' | ')\n if (schema.allOf) return schema.allOf.map(schemaTypeLabel).join(' & ')\n return 'any'\n}\n\nfunction schemaHasDetails(schema: unknown): boolean {\n if (!schema || typeof schema !== 'object') return false\n const schemaObj = schema as Record<string, unknown>\n if (Array.isArray(schemaObj.enum) && schemaObj.enum.length) return true\n if (schemaObj.const !== undefined) return true\n if (typeof schemaObj.format === 'string') return true\n if (Array.isArray(schemaObj.oneOf) && schemaObj.oneOf.some((s: unknown) => schemaHasDetails(s))) return true\n if (Array.isArray(schemaObj.anyOf) && schemaObj.anyOf.some((s: unknown) => schemaHasDetails(s))) return true\n if (Array.isArray(schemaObj.allOf) && schemaObj.allOf.some((s: unknown) => schemaHasDetails(s))) return true\n if (schemaObj.items && schemaHasDetails(schemaObj.items)) return true\n if (schemaObj.properties && Object.keys(schemaObj.properties as Record<string, unknown>).length) return true\n if (Array.isArray(schemaObj.prefixItems) && schemaObj.prefixItems.some((s: unknown) => schemaHasDetails(s))) return true\n if (schemaObj.type && schemaObj.type !== 'object') return true\n return false\n}\n\ntype ContentSelection = {\n mediaType: string\n entry: any\n}\n\ntype DisplaySnippet = {\n value: string\n language: string\n}\n\nfunction selectContentVariant(content?: Record<string, any>): ContentSelection | undefined {\n if (!content) return undefined\n const entries = Object.entries(content)\n if (!entries.length) return undefined\n const preferred = [\n 'application/json',\n 'application/x-www-form-urlencoded',\n 'multipart/form-data',\n 'text/plain',\n ]\n for (const mediaType of preferred) {\n const match = entries.find(([type]) => type === mediaType)\n if (match) {\n const [selectedType, entry] = match\n return { mediaType: selectedType, entry }\n }\n }\n const [mediaType, entry] = entries[0]\n return { mediaType, entry }\n}\n\nfunction formatExampleForDisplay(example: unknown, mediaType?: string): DisplaySnippet | null {\n if (example === undefined) return null\n if (mediaType === 'application/x-www-form-urlencoded') {\n const encoded = toFormUrlEncoded(example)\n if (!encoded) return null\n return { value: encoded, language: 'text' }\n }\n if (mediaType === 'multipart/form-data') {\n if (example && typeof example === 'object') {\n const lines = Object.entries(example as Record<string, unknown>).map(([key, value]) => {\n const rendered = value === undefined || value === null ? '' : String(value)\n return `${key}=${rendered}`\n })\n if (lines.length) {\n return { value: lines.join('\\n'), language: 'text' }\n }\n }\n if (typeof example === 'string') {\n return { value: example, language: 'text' }\n }\n }\n if (!mediaType || mediaType === 'application/json') {\n try {\n return { value: JSON.stringify(example, null, 2), language: 'json' }\n } catch {\n return null\n }\n }\n if (typeof example === 'string') {\n return { value: example, language: 'text' }\n }\n try {\n return { value: JSON.stringify(example, null, 2), language: 'json' }\n } catch {\n return { value: String(example), language: 'text' }\n }\n}\n\nfunction formatSchemaForDisplay(schema: any): DisplaySnippet | null {\n if (!schema) return null\n try {\n return { value: JSON.stringify(schema, null, 2), language: 'json' }\n } catch {\n return null\n }\n}\n\nexport function generateMarkdownFromOpenApi(doc: OpenApiDocument): string {\n const lines: string[] = []\n lines.push(`# ${doc.info.title}`)\n lines.push('')\n lines.push(`Version: ${doc.info.version}`)\n if (doc.info.description) {\n lines.push('')\n lines.push(doc.info.description)\n }\n if (doc.servers && doc.servers.length) {\n lines.push('')\n lines.push('## Servers')\n for (const server of doc.servers) {\n lines.push(`- ${server.url}${server.description ? ` \u2013 ${server.description}` : ''}`)\n }\n }\n\n const sortedPaths = Object.keys(doc.paths).sort((a, b) => a.localeCompare(b))\n for (const path of sortedPaths) {\n const operations = doc.paths[path]\n const methods = Object.keys(operations).sort((a, b) => a.localeCompare(b))\n for (const method of methods) {\n const op: any = operations[method]\n lines.push('')\n lines.push(`## ${method.toUpperCase()} \\`${path}\\``)\n if (op.summary) {\n lines.push('')\n lines.push(op.summary)\n }\n if (op.description) {\n lines.push('')\n lines.push(op.description)\n }\n if (op.tags && op.tags.length) {\n lines.push('')\n lines.push(`**Tags:** ${op.tags.join(', ')}`)\n }\n if (op['x-require-auth']) {\n lines.push('')\n lines.push(`**Requires authentication.**`)\n }\n if (op['x-require-features']) {\n lines.push('')\n lines.push(`**Features:** ${(op['x-require-features'] as string[]).join(', ')}`)\n }\n if (op['x-require-roles']) {\n lines.push('')\n lines.push(`**Roles:** ${(op['x-require-roles'] as string[]).join(', ')}`)\n }\n\n const parameters = (op.parameters as any[]) ?? []\n if (parameters.length) {\n lines.push('')\n lines.push('### Parameters')\n const rows: Array<[string, string, string, string]> = parameters.map((p) => {\n const requiredLabel = p.required ? 'Required' : 'Optional'\n const descriptionParts = [requiredLabel, p.description].filter(Boolean)\n return [\n p.name,\n p.in,\n schemaTypeLabel(p.schema),\n descriptionParts.join('. '),\n ]\n })\n lines.push(formatMarkdownTable(rows))\n }\n\n if (op.requestBody) {\n const selection = selectContentVariant(op.requestBody.content)\n if (selection) {\n const { mediaType, entry } = selection\n const example = entry?.example ?? entry?.examples?.default?.value\n const formatted = formatExampleForDisplay(example, mediaType)\n const schemaFormatted =\n entry?.schema && schemaHasDetails(entry.schema) ? formatSchemaForDisplay(entry.schema) : null\n lines.push('')\n lines.push('### Request Body')\n lines.push('')\n lines.push(`Content-Type: \\`${mediaType}\\``)\n if (formatted) {\n lines.push('')\n lines.push(`\\`\\`\\`${formatted.language}`)\n lines.push(formatted.value)\n lines.push('```')\n } else if (schemaFormatted) {\n lines.push('')\n lines.push(`\\`\\`\\`${schemaFormatted.language}`)\n lines.push(schemaFormatted.value)\n lines.push('```')\n } else {\n lines.push('')\n lines.push('No example available for this content type.')\n }\n }\n }\n\n const responses = op.responses ?? {}\n const responseStatuses = Object.keys(responses).sort((a, b) => a.localeCompare(b))\n if (responseStatuses.length) {\n lines.push('')\n lines.push('### Responses')\n for (const status of responseStatuses) {\n const response = responses[status]\n if (response?.['x-autoGenerated']) continue\n lines.push('')\n lines.push(`**${status}** \u2013 ${response.description || 'Response'}`)\n const selection = selectContentVariant(response.content)\n if (selection) {\n const { mediaType, entry } = selection\n const example = entry?.example ?? entry?.examples?.default?.value\n const formatted = formatExampleForDisplay(example, mediaType)\n const schemaFormatted =\n entry?.schema && schemaHasDetails(entry.schema) ? formatSchemaForDisplay(entry.schema) : null\n lines.push('')\n lines.push(`Content-Type: \\`${mediaType}\\``)\n if (formatted) {\n lines.push('')\n lines.push(`\\`\\`\\`${formatted.language}`)\n lines.push(formatted.value)\n lines.push('```')\n } else if (schemaFormatted) {\n lines.push('')\n lines.push(`\\`\\`\\`${schemaFormatted.language}`)\n lines.push(schemaFormatted.value)\n lines.push('```')\n }\n }\n }\n }\n\n const samples = op['x-codeSamples'] as any[] | undefined\n if (samples && samples.length) {\n const curl = samples.find((sample) => String(sample.lang).toLowerCase() === 'curl') ?? samples[0]\n if (curl?.source) {\n lines.push('')\n lines.push('### Example')\n lines.push('')\n lines.push('```bash')\n lines.push(curl.source)\n lines.push('```')\n }\n }\n }\n }\n\n return lines.join('\\n')\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { z, type ZodTypeAny } from 'zod'\nimport type { Module, ModuleApi, ModuleApiLegacy, ModuleApiRouteFile, HttpMethod } from '@open-mercato/shared/modules/registry'\nimport type {\n OpenApiDocument,\n OpenApiDocumentOptions,\n OpenApiMethodDoc,\n OpenApiRequestBodyDoc,\n OpenApiResponseDoc,\n OpenApiRouteDoc,\n} from './types'\n\ntype PathParamInfo = {\n name: string\n catchAll?: boolean\n optional?: boolean\n}\n\ntype PathVariant = {\n path: string\n params: PathParamInfo[]\n omittedParam?: string\n}\n\ntype ParameterLocation = 'query' | 'path' | 'header'\n\nexport type JsonSchema = Record<string, unknown>\n\ntype SchemaConversionContext = {\n memo: WeakMap<ZodTypeAny, JsonSchema>\n}\n\ntype ExampleGenerationContext = {\n stack: WeakSet<ZodTypeAny>\n}\n\ntype ExampleMap = {\n query?: unknown\n body?: unknown\n path?: Record<string, unknown>\n headers?: Record<string, unknown>\n}\n\nconst HTTP_METHODS: HttpMethod[] = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE']\n\nfunction resolveType(def: any): string | undefined {\n if (!def) return undefined\n if (typeof def.typeName === 'string' && def.typeName.length) return def.typeName\n if (typeof def.type === 'string' && def.type.length) return def.type\n return undefined\n}\n\nfunction getShape(def: any): Record<string, ZodTypeAny> {\n if (!def) return {}\n const shape = typeof def.shape === 'function' ? def.shape() : def.shape\n if (shape && typeof shape === 'object') return shape as Record<string, ZodTypeAny>\n return {}\n}\n\nfunction normalizeChecks(checks: any[] | undefined): Array<{ kind?: string; value?: unknown; extra?: Record<string, unknown> }> {\n if (!Array.isArray(checks)) return []\n return checks.map((check) => {\n if (!check) return {}\n const base = (check as any)?._zod?.def ?? (check as any)?.def ?? check\n const kind = typeof (check as any)?.kind === 'string'\n ? (check as any).kind\n : typeof base?.check === 'string'\n ? base.check\n : undefined\n const value =\n base?.value ??\n base?.minimum ??\n base?.maximum ??\n base?.exact ??\n base?.length ??\n base?.limit ??\n base?.includes ??\n base?.min ??\n base?.max\n return { kind, value, extra: base && typeof base === 'object' ? base : undefined }\n })\n}\n\nconst DEFAULT_EXAMPLE_VALUES = {\n string: 'string',\n number: 1,\n integer: 1,\n boolean: true,\n uuid: '00000000-0000-4000-8000-000000000000',\n email: 'user@example.com',\n url: 'https://example.com/resource',\n datetime: new Date('2025-01-01T00:00:00.000Z').toISOString(),\n}\n\nfunction toTitle(str: string): string {\n if (!str) return ''\n return str\n .split(/[_\\-\\s]+/)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(' ')\n}\n\nfunction normalizePath(path: string): { path: string; params: PathParamInfo[] } {\n const segments = path.split('/').filter((seg) => seg.length > 0)\n const params: PathParamInfo[] = []\n const normalized = segments\n .map((seg) => {\n const catchAll = seg.match(/^\\[\\.\\.\\.(.+)\\]$/)\n if (catchAll) {\n params.push({ name: catchAll[1], catchAll: true })\n return `{${catchAll[1]}}`\n }\n const optCatchAll = seg.match(/^\\[\\[\\.\\.\\.(.+)\\]\\]$/)\n if (optCatchAll) {\n params.push({ name: optCatchAll[1], catchAll: true, optional: true })\n return `{${optCatchAll[1]}}`\n }\n const dyn = seg.match(/^\\[(.+)\\]$/)\n if (dyn) {\n params.push({ name: dyn[1] })\n return `{${dyn[1]}}`\n }\n return seg\n })\n .join('/')\n return { path: '/' + normalized, params }\n}\n\nfunction expandOptionalPathParams(normalized: { path: string; params: PathParamInfo[] }): PathVariant[] {\n const required = normalized.params.filter((param) => !param.optional)\n const optionalParam = normalized.params.find((param) => param.optional)\n const fullVariant: PathVariant = {\n path: normalized.path,\n params: normalized.params.map((param) => ({ ...param, optional: false })),\n }\n if (!optionalParam) return [fullVariant]\n const placeholder = `/{${optionalParam.name}}`\n if (!normalized.path.endsWith(placeholder)) return [fullVariant]\n const basePath = normalized.path.slice(0, -placeholder.length) || '/'\n return [fullVariant, { path: basePath, params: required, omittedParam: optionalParam.name }]\n}\n\nfunction unwrap(schema?: ZodTypeAny): {\n schema: ZodTypeAny | undefined\n optional: boolean\n nullable: boolean\n defaultValue?: unknown\n} {\n if (!schema) {\n return { schema: undefined, optional: true, nullable: false }\n }\n\n let current: ZodTypeAny = schema\n let optional = false\n let nullable = false\n let defaultValue: unknown\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const def = (current as any)?._def\n if (!def) {\n return { schema: current, optional, nullable, defaultValue }\n }\n const typeName = resolveType(def)\n if (typeName === 'ZodOptional' || typeName === 'optional') {\n optional = true\n current = (current as any)._def.innerType\n continue\n }\n if (typeName === 'ZodNullable' || typeName === 'nullable') {\n nullable = true\n current = (current as any)._def.innerType\n continue\n }\n if (typeName === 'ZodDefault' || typeName === 'default') {\n optional = true\n const rawDefault = (current as any)._def.defaultValue\n defaultValue = typeof rawDefault === 'function' ? rawDefault() : rawDefault\n current = (current as any)._def.innerType\n continue\n }\n if (typeName === 'ZodPipeline' || typeName === 'pipe') {\n current = (current as any)._def.out ?? (current as any)._def.innerType ?? (current as any)._def.schema\n continue\n }\n if (typeName === 'transformer') {\n current = (current as any)._def.output\n continue\n }\n if (typeName === 'ZodLazy' || typeName === 'lazy') {\n const getter = (current as any)._def.getter\n current = typeof getter === 'function' ? getter() : current\n if (current === schema) break\n continue\n }\n if (typeName === 'ZodPromise' || typeName === 'promise') {\n current = (current as any)._def.type\n continue\n }\n if (typeName === 'ZodCatch' || typeName === 'catch') {\n current = (current as any)._def.innerType\n continue\n }\n if (typeName === 'ZodReadonly' || typeName === 'readonly') {\n current = (current as any)._def.innerType\n continue\n }\n if (typeName === 'ZodBranded' || typeName === 'branded') {\n current = (current as any)._def.type\n continue\n }\n break\n }\n return { schema: current, optional, nullable, defaultValue }\n}\n\n/**\n * Extract the description from a zod schema, walking through wrappers like optional/nullable/default.\n * Returns the first description found, or undefined if none exists.\n */\nfunction extractZodDescription(schema?: ZodTypeAny): string | undefined {\n if (!schema) return undefined\n\n let current: ZodTypeAny | undefined = schema\n while (current) {\n // In Zod 4/zod-mini, description is stored directly on the schema object\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const directDescription = (current as any).description\n if (typeof directDescription === 'string' && directDescription.length > 0) {\n return directDescription\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const def = (current as any)?._def as Record<string, unknown> | undefined\n if (!def) return undefined\n\n // Also check _def.description for Zod 3 compatibility\n if (typeof def.description === 'string' && def.description.length > 0) {\n return def.description\n }\n\n // Walk through wrappers to find description on inner types\n const typeName = resolveType(def)\n if (\n typeName === 'ZodOptional' || typeName === 'optional' ||\n typeName === 'ZodNullable' || typeName === 'nullable' ||\n typeName === 'ZodDefault' || typeName === 'default' ||\n typeName === 'ZodCatch' || typeName === 'catch' ||\n typeName === 'ZodReadonly' || typeName === 'readonly'\n ) {\n current = def.innerType as ZodTypeAny | undefined\n continue\n }\n if (typeName === 'ZodBranded' || typeName === 'branded') {\n current = def.type as ZodTypeAny | undefined\n continue\n }\n if (typeName === 'ZodPipeline' || typeName === 'pipe') {\n current = (def.out ?? def.innerType ?? def.schema) as ZodTypeAny | undefined\n continue\n }\n if (typeName === 'transformer') {\n current = def.output as ZodTypeAny | undefined\n continue\n }\n if (typeName === 'ZodLazy' || typeName === 'lazy') {\n const getter = def.getter\n const next = typeof getter === 'function' ? (getter as () => ZodTypeAny)() : current\n if (next === current) break\n current = next\n continue\n }\n if (typeName === 'ZodPromise' || typeName === 'promise') {\n current = def.type as ZodTypeAny | undefined\n continue\n }\n // No more wrappers to unwrap\n break\n }\n return undefined\n}\n\nexport function zodToJsonSchema(schema?: ZodTypeAny, ctx?: SchemaConversionContext): JsonSchema | undefined {\n if (!schema) return undefined\n const context: SchemaConversionContext = ctx ?? { memo: new WeakMap<ZodTypeAny, JsonSchema>() }\n\n const cached = context.memo.get(schema)\n if (cached) return cached\n\n const placeholder: JsonSchema = {}\n context.memo.set(schema, placeholder)\n\n const { schema: inner, nullable } = unwrap(schema)\n if (!inner) {\n if (nullable) placeholder.nullable = true\n return placeholder\n }\n\n if (inner !== schema && typeof inner === 'object') {\n if (!context.memo.has(inner as ZodTypeAny)) {\n context.memo.set(inner as ZodTypeAny, placeholder)\n }\n }\n\n const def = (inner as any)._def\n if (!def) return placeholder\n const typeName = resolveType(def) as string | undefined\n\n const result = placeholder\n\n switch (typeName) {\n case 'ZodString':\n case 'string': {\n result.type = 'string'\n const checks = normalizeChecks(def.checks)\n for (const check of checks) {\n if (!check.kind) continue\n if (check.kind === 'uuid' || check.extra?.format === 'uuid') {\n result.format = 'uuid'\n } else if (check.kind === 'email' || check.extra?.format === 'email') {\n result.format = 'email'\n } else if (check.kind === 'url' || check.extra?.format === 'uri' || check.extra?.format === 'url') {\n result.format = 'uri'\n } else if (check.kind === 'regex' && check.extra?.pattern instanceof RegExp) {\n result.pattern = check.extra.pattern.source\n } else if (check.kind === 'string_format' && typeof check.extra?.format === 'string') {\n if (check.extra.format === 'regex' && check.extra.pattern != null) {\n result.pattern = check.extra.pattern instanceof RegExp\n ? check.extra.pattern.source\n : String(check.extra.pattern)\n } else {\n result.format = check.extra.format\n }\n } else if (check.kind === 'datetime' || check.extra?.format === 'date-time') {\n result.format = 'date-time'\n } else if (['length', 'len', 'exact_length'].includes(check.kind ?? '')) {\n if (typeof check.value === 'number') {\n result.minLength = check.value\n result.maxLength = check.value\n }\n } else if (check.kind === 'min' || check.kind === 'min_length') {\n if (typeof check.value === 'number') result.minLength = check.value\n } else if (check.kind === 'max' || check.kind === 'max_length') {\n if (typeof check.value === 'number') result.maxLength = check.value\n }\n }\n break\n }\n case 'ZodNumber':\n case 'number': {\n result.type = 'number'\n const checks = normalizeChecks(def.checks)\n for (const check of checks) {\n if (!check.kind) continue\n if (check.kind === 'int' || check.kind === 'isInteger') result.type = 'integer'\n if ((check.kind === 'min' || check.kind === 'gte') && typeof check.value === 'number') result.minimum = check.value\n if ((check.kind === 'max' || check.kind === 'lte') && typeof check.value === 'number') result.maximum = check.value\n if (check.kind === 'multipleOf' && typeof check.value === 'number') result.multipleOf = check.value\n }\n break\n }\n case 'ZodBigInt':\n case 'bigint':\n result.type = 'integer'\n result.format = 'int64'\n break\n case 'ZodBoolean':\n case 'boolean':\n result.type = 'boolean'\n break\n case 'ZodLiteral':\n case 'literal': {\n const value = def.value ?? (Array.isArray(def.values) ? def.values[0] : undefined)\n result.type = typeof value\n result.enum = [value]\n break\n }\n case 'ZodEnum':\n case 'enum': {\n const entries = def.values ?? def.entries\n const values = Array.isArray(entries) ? entries : entries ? Object.values(entries) : []\n const enumerators = values.filter((v: unknown) => typeof v === 'string' || typeof v === 'number')\n const allString = enumerators.every((v: unknown) => typeof v === 'string')\n result.type = allString ? 'string' : 'number'\n result.enum = enumerators\n break\n }\n case 'ZodNativeEnum': {\n const values = Object.values(def.values).filter((v) => typeof v === 'string' || typeof v === 'number')\n const allString = values.every((v) => typeof v === 'string')\n result.type = allString ? 'string' : 'number'\n result.enum = values\n break\n }\n case 'ZodUnion':\n case 'union': {\n const options = def.options || []\n result.oneOf = options.map((option: ZodTypeAny) => zodToJsonSchema(option, context) ?? {})\n break\n }\n case 'ZodIntersection':\n case 'intersection': {\n result.allOf = [\n zodToJsonSchema(def.left, context) ?? {},\n zodToJsonSchema(def.right, context) ?? {},\n ]\n break\n }\n case 'ZodPipeline':\n case 'pipe': {\n const resolved = zodToJsonSchema(def.out ?? def.innerType ?? def.schema, context) ?? {}\n Object.assign(result, resolved)\n break\n }\n case 'ZodLazy':\n case 'lazy': {\n const next = typeof def.getter === 'function' ? def.getter() : undefined\n const resolved = next ? zodToJsonSchema(next, context) : undefined\n if (resolved) Object.assign(result, resolved)\n break\n }\n case 'ZodPromise':\n case 'promise': {\n const resolved = zodToJsonSchema(def.type, context)\n if (resolved) Object.assign(result, resolved)\n break\n }\n case 'ZodCatch':\n case 'catch': {\n const resolved = zodToJsonSchema(def.innerType ?? def.type, context)\n if (resolved) Object.assign(result, resolved)\n break\n }\n case 'ZodReadonly':\n case 'readonly': {\n const resolved = zodToJsonSchema(def.innerType ?? def.type, context)\n if (resolved) Object.assign(result, resolved)\n break\n }\n case 'ZodArray':\n case 'array': {\n const elementSchema =\n def.type && typeof def.type === 'object'\n ? def.type\n : (def.element && typeof def.element === 'object' ? def.element : undefined)\n result.type = 'array'\n result.items = zodToJsonSchema(elementSchema as ZodTypeAny, context) ?? {}\n if (typeof def.minLength === 'number') result.minItems = def.minLength\n if (typeof def.maxLength === 'number') result.maxItems = def.maxLength\n const checks = normalizeChecks(def.checks)\n for (const check of checks) {\n if (check.kind === 'min_length' && typeof check.value === 'number') result.minItems = check.value\n if (check.kind === 'max_length' && typeof check.value === 'number') result.maxItems = check.value\n if (check.kind === 'length' && typeof check.value === 'number') {\n result.minItems = check.value\n result.maxItems = check.value\n }\n }\n break\n }\n case 'ZodTuple':\n case 'tuple': {\n const items = def.items || []\n result.type = 'array'\n result.prefixItems = items.map((item: ZodTypeAny) => zodToJsonSchema(item, context) ?? {})\n result.minItems = items.length\n result.maxItems = items.length\n break\n }\n case 'ZodRecord':\n case 'record': {\n result.type = 'object'\n const valueSchema = def.valueType ?? def.value\n const valueType = valueSchema ? resolveType(valueSchema._def) : undefined\n if (!valueType || valueType === 'ZodUnknown' || valueType === 'unknown' || valueType === 'ZodAny' || valueType === 'any') {\n result.additionalProperties = true\n } else {\n result.additionalProperties = zodToJsonSchema(valueSchema, context) ?? true\n }\n break\n }\n case 'ZodObject':\n case 'object': {\n result.type = 'object'\n const shape = getShape(def)\n const properties: Record<string, JsonSchema> = {}\n const required: string[] = []\n for (const [key, rawSchema] of Object.entries(shape)) {\n const unwrapped = unwrap(rawSchema as ZodTypeAny)\n const childSchema = zodToJsonSchema(unwrapped.schema, context)\n if (!childSchema) continue\n const baseSchema = childSchema\n let propertySchema: JsonSchema = baseSchema\n if (unwrapped.nullable) {\n propertySchema = {\n anyOf: [{ type: 'null' }, propertySchema],\n }\n }\n if (unwrapped.defaultValue !== undefined) {\n if (propertySchema === baseSchema) {\n propertySchema = { allOf: [baseSchema], default: unwrapped.defaultValue }\n } else {\n propertySchema = { ...propertySchema, default: unwrapped.defaultValue }\n }\n }\n properties[key] = propertySchema\n if (!unwrapped.optional) required.push(key)\n }\n result.properties = properties\n if (required.length > 0) result.required = required\n if (def.unknownKeys === 'passthrough') {\n result.additionalProperties = true\n } else if (def.catchall) {\n const catchallType = resolveType(def.catchall._def)\n if (catchallType === 'ZodNever' || catchallType === 'never') {\n result.additionalProperties = false\n } else if (!catchallType || catchallType === 'ZodUnknown' || catchallType === 'unknown' || catchallType === 'ZodAny' || catchallType === 'any') {\n result.additionalProperties = true\n } else {\n result.additionalProperties = zodToJsonSchema(def.catchall, context) ?? true\n }\n } else {\n result.additionalProperties = false\n }\n break\n }\n case 'ZodDate':\n case 'date':\n result.type = 'string'\n result.format = 'date-time'\n break\n case 'ZodNull':\n case 'null':\n result.type = 'null'\n break\n case 'ZodVoid':\n case 'void':\n case 'ZodNever':\n case 'never':\n break\n case 'ZodAny':\n case 'any':\n case 'ZodUnknown':\n case 'unknown':\n case 'ZodNaN':\n case 'nan':\n default:\n break\n }\n\n if (nullable) {\n if (result.type && result.type !== 'null') {\n result.nullable = true\n } else if (!result.type) {\n const clone = { ...result }\n result.anyOf = [{ type: 'null' }, clone]\n }\n }\n\n return result\n}\n\nfunction generateExample(schema?: ZodTypeAny, ctx?: ExampleGenerationContext): unknown {\n if (!schema) return undefined\n if ((typeof schema !== 'object' || schema === null) && typeof schema !== 'function') return undefined\n const trackable = schema as object\n const context: ExampleGenerationContext = ctx ?? { stack: new WeakSet<ZodTypeAny>() }\n if (context.stack.has(trackable as ZodTypeAny)) return undefined\n context.stack.add(trackable as ZodTypeAny)\n\n try {\n const { schema: inner, optional, nullable, defaultValue } = unwrap(schema)\n if (!inner) {\n if (defaultValue !== undefined) return defaultValue\n if (nullable) return null\n if (optional) return undefined\n return undefined\n }\n const def = (inner as any)._def\n const typeName = resolveType(def) as string | undefined\n if (defaultValue !== undefined) return defaultValue\n\n if (nullable) return null\n if (optional) return undefined\n\n switch (typeName) {\n case 'ZodString':\n case 'string': {\n const checks = normalizeChecks(def?.checks)\n for (const check of checks) {\n if (!check.kind && !check.extra?.format) continue\n if (check.kind === 'uuid' || check.extra?.format === 'uuid') return DEFAULT_EXAMPLE_VALUES.uuid\n if (check.kind === 'email' || check.extra?.format === 'email') return DEFAULT_EXAMPLE_VALUES.email\n if (check.kind === 'url' || check.extra?.format === 'url' || check.extra?.format === 'uri') return DEFAULT_EXAMPLE_VALUES.url\n if (check.kind === 'datetime' || check.extra?.format === 'date-time') return DEFAULT_EXAMPLE_VALUES.datetime\n }\n return DEFAULT_EXAMPLE_VALUES.string\n }\n case 'ZodNumber':\n case 'number': {\n const checks = normalizeChecks(def?.checks)\n const isInt = checks.some((check) => check.kind === 'int' || check.kind === 'isInteger')\n return isInt ? DEFAULT_EXAMPLE_VALUES.integer : DEFAULT_EXAMPLE_VALUES.number\n }\n case 'ZodBigInt':\n case 'bigint':\n return BigInt(1)\n case 'ZodBoolean':\n case 'boolean':\n return DEFAULT_EXAMPLE_VALUES.boolean\n case 'ZodEnum':\n case 'enum': {\n const entries = def?.values ?? def?.entries\n const values = Array.isArray(entries) ? entries : entries ? Object.values(entries) : []\n return values[0]\n }\n case 'ZodNativeEnum': {\n const values = Object.values(def?.values || [])\n return values[0]\n }\n case 'ZodLiteral':\n case 'literal':\n return def?.value ?? (Array.isArray(def?.values) ? def.values[0] : undefined)\n case 'ZodArray':\n case 'array': {\n const elementSchema =\n def?.type && typeof def.type === 'object'\n ? def.type\n : (def?.element && typeof def.element === 'object' ? def.element : undefined)\n const child = generateExample(elementSchema, context)\n return child === undefined ? [] : [child]\n }\n case 'ZodTuple':\n case 'tuple': {\n const items = def?.items || []\n return items.map((item: ZodTypeAny) => generateExample(item, context))\n }\n case 'ZodObject':\n case 'object': {\n const shape = getShape(def)\n const obj: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(shape)) {\n const example = generateExample(value as ZodTypeAny, context)\n if (example !== undefined) obj[key] = example\n }\n return obj\n }\n case 'ZodRecord':\n case 'record': {\n const valueExample = generateExample(def?.valueType ?? def?.value, context)\n return valueExample === undefined ? {} : { key: valueExample }\n }\n case 'ZodUnion':\n case 'union': {\n const options = def?.options || []\n return options.length ? generateExample(options[0], context) : undefined\n }\n case 'ZodPipeline':\n case 'pipe':\n return generateExample(def?.out ?? def?.innerType ?? def?.schema, context)\n case 'ZodLazy':\n case 'lazy': {\n const next = typeof def?.getter === 'function' ? def.getter() : undefined\n return next ? generateExample(next, context) : undefined\n }\n case 'ZodPromise':\n case 'promise':\n return generateExample(def?.type, context)\n case 'ZodCatch':\n case 'catch':\n return generateExample(def?.innerType ?? def?.type, context)\n case 'ZodReadonly':\n case 'readonly':\n return generateExample(def?.innerType ?? def?.type, context)\n case 'ZodIntersection':\n case 'intersection': {\n const left = generateExample(def?.left, context)\n const right = generateExample(def?.right, context)\n if (typeof left === 'object' && left && typeof right === 'object' && right) {\n return { ...(left as object), ...(right as object) }\n }\n return left ?? right\n }\n case 'ZodDate':\n case 'date':\n return DEFAULT_EXAMPLE_VALUES.datetime\n default:\n return undefined\n }\n } finally {\n context.stack.delete(trackable as ZodTypeAny)\n }\n}\n\nfunction buildParameters(\n schema: ZodTypeAny | undefined,\n location: ParameterLocation,\n pathParamNames?: PathParamInfo[]\n): Array<Record<string, unknown>> {\n if (!schema && location !== 'path') return []\n\n const params: Array<Record<string, unknown>> = []\n\n if (location === 'path' && pathParamNames && pathParamNames.length) {\n const merged = mergePathParamSchemas(schema, pathParamNames)\n for (const { name, schema: paramSchema } of merged) {\n const jsonSchema = zodToJsonSchema(paramSchema)\n const example = generateExample(paramSchema)\n const description = extractZodDescription(paramSchema)\n params.push({\n name,\n in: 'path',\n required: true,\n schema: jsonSchema ?? { type: 'string' },\n example,\n ...(description ? { description } : {}),\n })\n }\n return params\n }\n\n if (!schema) return params\n\n const { schema: unwrapped } = unwrap(schema)\n if (!unwrapped) return params\n const def = (unwrapped as any)._def\n const typeName = resolveType(def) as string | undefined\n if (typeName === 'ZodObject' || typeName === 'object') {\n const shape = getShape(def)\n for (const [key, raw] of Object.entries(shape)) {\n const details = unwrap(raw as ZodTypeAny)\n if (!details.schema) continue\n const jsonSchema = zodToJsonSchema(details.schema)\n const example = generateExample(details.schema)\n const description = extractZodDescription(raw as ZodTypeAny)\n params.push({\n name: key,\n in: location,\n required: location === 'path' ? true : !details.optional,\n schema: jsonSchema ?? {},\n example,\n ...(description ? { description } : {}),\n })\n }\n } else {\n const jsonSchema = zodToJsonSchema(unwrapped)\n const example = generateExample(unwrapped)\n const description = extractZodDescription(unwrapped)\n params.push({\n name: location === 'header' ? 'X-Custom-Header' : 'value',\n in: location,\n required: location === 'path',\n schema: jsonSchema ?? {},\n example,\n ...(description ? { description } : {}),\n })\n }\n\n return params\n}\n\nfunction mergePathParamSchemas(schema: ZodTypeAny | undefined, params: PathParamInfo[]) {\n const merged: Array<{ name: string; schema: ZodTypeAny | undefined }> = []\n const map: Record<string, ZodTypeAny> = {}\n if (schema) {\n const { schema: unwrapped } = unwrap(schema)\n if (unwrapped && (unwrapped as any)._def && (resolveType((unwrapped as any)._def) === 'ZodObject' || resolveType((unwrapped as any)._def) === 'object')) {\n const shape = getShape((unwrapped as any)._def)\n for (const [key, value] of Object.entries(shape)) {\n map[key] = value as ZodTypeAny\n }\n }\n }\n for (const param of params) {\n merged.push({\n name: param.name,\n schema: map[param.name],\n })\n }\n return merged\n}\n\nfunction buildRequestBody(request?: OpenApiRequestBodyDoc): Record<string, unknown> | undefined {\n if (!request) return undefined\n const schema = zodToJsonSchema(request.schema)\n const example = request.example ?? generateExample(request.schema)\n const contentType = request.contentType ?? 'application/json'\n return {\n required: true,\n content: {\n [contentType]: {\n schema: schema ?? {},\n example,\n },\n },\n description: request.description,\n }\n}\n\nfunction buildResponses(\n method: HttpMethod,\n responses?: OpenApiResponseDoc[],\n errors?: OpenApiResponseDoc[],\n metadata?: any\n): Record<string, unknown> {\n const entries: Record<string, unknown> = {}\n const list = [...(responses ?? [])]\n const errorList = [...(errors ?? [])]\n const inferredList: OpenApiResponseDoc[] = []\n if (metadata?.requireAuth) {\n inferredList.push({\n status: 401,\n description: 'Unauthorized',\n schema: z.object({ error: z.string() }),\n xAutoGenerated: true,\n })\n }\n if (Array.isArray(metadata?.requireFeatures) && metadata.requireFeatures.length) {\n inferredList.push({\n status: 403,\n description: 'Forbidden \u2013 missing required features',\n schema: z.object({ error: z.string() }),\n xAutoGenerated: true,\n })\n }\n if (!list.some((res) => res.status >= 200 && res.status < 300)) {\n const fallbackStatus = method === 'POST' ? 201 : method === 'DELETE' ? 204 : 200\n list.push({\n status: fallbackStatus,\n description: fallbackStatus === 204 ? 'Success' : 'Success response',\n })\n }\n const setEntry = (res: OpenApiResponseDoc, options?: { skipIfPresent?: boolean }) => {\n const status = String(res.status || 200)\n if (options?.skipIfPresent && Object.prototype.hasOwnProperty.call(entries, status)) return\n const mediaType = res.mediaType ?? 'application/json'\n const schema = res.schema ? zodToJsonSchema(res.schema) : undefined\n const example = res.schema ? res.example ?? generateExample(res.schema) : res.example\n const isNoContent = res.status === 204\n entries[status] = {\n description: res.description ?? '',\n ...(isNoContent\n ? {}\n : {\n content: {\n [mediaType]: {\n schema: schema ?? { type: 'object', description: 'Schema not declared' },\n ...(example !== undefined ? { example } : {}),\n },\n },\n }),\n ...(res.xAutoGenerated ? { 'x-autoGenerated': true } : {}),\n }\n }\n for (const res of [...list, ...errorList]) setEntry(res)\n for (const res of inferredList) setEntry(res, { skipIfPresent: true })\n return entries\n}\n\nfunction buildSecurity(metadata: any, methodDoc?: OpenApiMethodDoc, defaults?: string[]) {\n const securitySchemes = new Set<string>()\n if (Array.isArray(methodDoc?.security)) methodDoc.security.forEach((s) => securitySchemes.add(s))\n if (metadata?.requireAuth) securitySchemes.add('bearerAuth')\n if (defaults) defaults.forEach((s) => securitySchemes.add(s))\n if (securitySchemes.size === 0) return undefined\n return Array.from(securitySchemes.values()).map((scheme) => ({ [scheme]: [] }))\n}\n\nfunction collectExamples(\n querySchema?: ZodTypeAny,\n bodySchema?: ZodTypeAny,\n pathSchema?: ZodTypeAny,\n headerSchema?: ZodTypeAny,\n metadata?: any\n): ExampleMap {\n const examples: ExampleMap = {}\n const queryExample = querySchema ? generateExample(querySchema) : undefined\n if (queryExample && typeof queryExample === 'object') examples.query = queryExample\n const bodyExample = bodySchema ? generateExample(bodySchema) : undefined\n if (bodyExample !== undefined) examples.body = bodyExample\n const pathExample = pathSchema ? generateExample(pathSchema) : undefined\n if (pathExample && typeof pathExample === 'object') examples.path = pathExample as Record<string, unknown>\n const headerExample = headerSchema ? generateExample(headerSchema) : undefined\n if (headerExample && typeof headerExample === 'object') examples.headers = headerExample as Record<string, unknown>\n if (metadata?.requireAuth) {\n if (!examples.headers) examples.headers = {}\n if (typeof examples.headers.authorization !== 'string') {\n examples.headers.authorization = 'Bearer <token>'\n }\n }\n return examples\n}\n\nfunction toFormUrlEncoded(value: unknown): string {\n if (!value || typeof value !== 'object') return ''\n const params = new URLSearchParams()\n for (const [key, raw] of Object.entries(value as Record<string, unknown>)) {\n if (raw === undefined) continue\n params.append(key, raw === null ? '' : String(raw))\n }\n return params.toString()\n}\n\nfunction stringifyBodyExample(value: unknown, mediaType?: string): string {\n if (value === undefined) return ''\n if (mediaType === 'application/x-www-form-urlencoded') {\n return toFormUrlEncoded(value)\n }\n if (!mediaType || mediaType === 'application/json') {\n try {\n return JSON.stringify(value, null, 2)\n } catch {\n return ''\n }\n }\n if (typeof value === 'string') return value\n try {\n return JSON.stringify(value, null, 2)\n } catch {\n return String(value)\n }\n}\n\nfunction buildQueryString(example: unknown): string {\n if (!example || typeof example !== 'object') return ''\n const parts: string[] = []\n for (const [key, value] of Object.entries(example as Record<string, unknown>)) {\n if (value === undefined || value === null) continue\n const encoded = encodeURIComponent(String(value))\n parts.push(`${encodeURIComponent(key)}=${encoded}`)\n }\n return parts.length ? `?${parts.join('&')}` : ''\n}\n\nfunction injectPathExamples(path: string, params: PathParamInfo[], examples?: Record<string, unknown>): string {\n if (!params.length) return path\n let result = path\n for (const param of params) {\n const placeholder = `{${param.name}}`\n const example = examples && examples[param.name] !== undefined ? examples[param.name] : `:${param.name}`\n result = result.replace(placeholder, String(example))\n }\n return result\n}\n\nfunction buildCurlSample(\n method: HttpMethod,\n path: string,\n params: PathParamInfo[],\n examples: ExampleMap,\n baseUrl: string,\n metadata: any,\n requestBody?: OpenApiRequestBodyDoc\n): string {\n const lines: string[] = []\n const pathWithExamples = injectPathExamples(path, params, examples.path)\n const query = buildQueryString(examples.query)\n const url = baseUrl.replace(/\\/$/, '') + pathWithExamples + query\n lines.push(`curl -X ${method} \"${url}\"`)\n\n lines.push(' -H \"Accept: application/json\"')\n\n const headers: Record<string, unknown> = { ...(examples.headers ?? {}) }\n if (metadata?.requireAuth && !headers.Authorization && !headers.authorization) {\n headers.Authorization = 'Bearer <token>'\n }\n for (const [key, value] of Object.entries(headers)) {\n lines.push(` -H \"${key.replace(/\"/g, '')}: ${String(value).replace(/\"/g, '')}\"`)\n }\n\n const bodyExample = examples.body ?? requestBody?.example\n const requestContentType = requestBody?.contentType ?? 'application/json'\n if (bodyExample !== undefined) {\n lines.push(` -H \"Content-Type: ${requestContentType}\"`)\n const serialized = stringifyBodyExample(bodyExample, requestContentType)\n if (serialized) {\n const escapedSerialized = escapeShellDoubleQuotes(serialized)\n lines.push(` -d \"${escapedSerialized}\"`)\n }\n }\n\n return lines.join(' \\\\\\n')\n}\n\nfunction escapeShellDoubleQuotes(value: string): string {\n return value.replace(/[\\\\`\"$]/g, '\\\\$&')\n}\n\nfunction ensureSecurityComponents(doc: OpenApiDocument) {\n if (!doc.components) doc.components = {}\n if (!doc.components.securitySchemes) doc.components.securitySchemes = {}\n if (!doc.components.securitySchemes.bearerAuth) {\n doc.components.securitySchemes.bearerAuth = {\n type: 'http',\n scheme: 'bearer',\n bearerFormat: 'JWT',\n description: 'Send an `Authorization: Bearer <token>` header with a valid API token.',\n }\n }\n}\n\nfunction resolveOperationId(moduleId: string, path: string, method: HttpMethod): string {\n const cleaned = normalizeOperationIdSegment(path)\n return [moduleId, method.toLowerCase(), cleaned].filter(Boolean).join('_')\n}\n\nfunction normalizeOperationIdSegment(input: string): string {\n let output = ''\n let previousUnderscore = false\n\n for (const character of input) {\n const codePoint = character.charCodeAt(0)\n const isLower = codePoint >= 97 && codePoint <= 122\n const isUpper = codePoint >= 65 && codePoint <= 90\n const isNumber = codePoint >= 48 && codePoint <= 57\n const isAlphaNumeric = isLower || isUpper || isNumber\n\n if (isAlphaNumeric) {\n output += character\n previousUnderscore = false\n continue\n }\n\n if (!previousUnderscore) {\n output += '_'\n previousUnderscore = true\n }\n }\n\n while (output.startsWith('_')) output = output.slice(1)\n while (output.endsWith('_')) output = output.slice(0, -1)\n\n return output\n}\n\nfunction collectRouteDoc(api: ModuleApi, moduleId: string): OpenApiRouteDoc | undefined {\n if ('handlers' in api) {\n const route = api as ModuleApiRouteFile & { docs?: OpenApiRouteDoc }\n if (route.docs) return route.docs\n const maybe = (route.handlers as any)?.openApi\n if (maybe && typeof maybe === 'object') return maybe as OpenApiRouteDoc\n } else {\n const legacy = api as ModuleApiLegacy & { docs?: OpenApiMethodDoc }\n if (legacy.docs) {\n return {\n methods: { [legacy.method]: legacy.docs },\n }\n }\n const maybe = (legacy.handler as any)?.openApi\n if (maybe && typeof maybe === 'object') {\n return {\n methods: { [legacy.method]: maybe as OpenApiMethodDoc },\n }\n }\n }\n return undefined\n}\n\nexport function buildOpenApiDocument(modules: Module[], options: OpenApiDocumentOptions = {}): OpenApiDocument {\n const doc: OpenApiDocument = {\n openapi: '3.1.0',\n info: {\n title: options.title ?? 'Open Mercato API',\n version: options.version ?? '1.0.0',\n description: options.description,\n },\n servers: options.servers,\n paths: {},\n }\n\n ensureSecurityComponents(doc)\n\n const includeAccessControlMetadata = options.includeAccessControlMetadata !== false\n const tags = new Map<string, string | undefined>()\n const derivedOperations = new Set<string>()\n\n for (const moduleEntry of modules) {\n const defaultTag = moduleEntry.info?.title ?? toTitle(moduleEntry.id)\n if (defaultTag) tags.set(defaultTag, moduleEntry.info?.description)\n\n const apis = moduleEntry.apis ?? []\n for (const api of apis) {\n const routeDoc = collectRouteDoc(api, moduleEntry.id)\n const moduleTag = routeDoc?.tag ?? defaultTag\n const availableMethods: HttpMethod[] =\n 'handlers' in api\n ? HTTP_METHODS.filter((method) => typeof (api as ModuleApiRouteFile).handlers?.[method] === 'function')\n : [api.method as HttpMethod]\n\n for (const normalized of expandOptionalPathParams(normalizePath((api as any).path ?? ''))) {\n const pathKey = normalized.path\n if (!doc.paths[pathKey]) doc.paths[pathKey] = {}\n\n for (const method of availableMethods) {\n const methodLower = method.toLowerCase() as Lowercase<HttpMethod>\n const operationKey = `${methodLower} ${pathKey}`\n const existing = doc.paths[pathKey][methodLower]\n if (existing && (normalized.omittedParam || !derivedOperations.has(operationKey))) continue\n if (normalized.omittedParam) derivedOperations.add(operationKey)\n else derivedOperations.delete(operationKey)\n\n const metadata = 'handlers' in api ? (api as ModuleApiRouteFile).metadata?.[method] : undefined\n const methodDoc = routeDoc?.methods?.[method]\n const summary = methodDoc?.summary ?? routeDoc?.summary ?? `${method} ${pathKey}`\n const baseDescription = methodDoc?.description ?? routeDoc?.description\n const meta = metadata && typeof metadata === 'object' ? (metadata as Record<string, unknown>) : undefined\n const requireFeatures = Array.isArray(meta?.['requireFeatures'])\n ? (meta!['requireFeatures'] as string[])\n : undefined\n const requireRoles = Array.isArray(meta?.['requireRoles'])\n ? (meta!['requireRoles'] as string[])\n : undefined\n const requireAuth = meta?.['requireAuth'] === true\n const descriptionParts: string[] = []\n if (baseDescription) descriptionParts.push(baseDescription)\n if (includeAccessControlMetadata && Array.isArray(requireFeatures) && requireFeatures.length) {\n descriptionParts.push(`Requires features: ${requireFeatures.join(', ')}`)\n }\n if (includeAccessControlMetadata && Array.isArray(requireRoles) && requireRoles.length) {\n descriptionParts.push(`Requires roles: ${requireRoles.join(', ')}`)\n }\n\n const querySchema = methodDoc?.query\n const pathSchema = methodDoc?.pathParams ?? routeDoc?.pathParams\n const headerSchema = methodDoc?.headers\n const requestBody = methodDoc?.requestBody\n const examples = collectExamples(querySchema, requestBody?.schema, pathSchema, headerSchema, metadata)\n const curlSample = buildCurlSample(\n method,\n pathKey,\n normalized.params,\n examples,\n options.baseUrlForExamples ?? 'https://api.open-mercato.local',\n metadata,\n requestBody\n )\n\n doc.paths[pathKey][methodLower] = {\n operationId: methodDoc?.operationId\n ? normalized.omittedParam\n ? `${methodDoc.operationId}_without_${normalizeOperationIdSegment(normalized.omittedParam)}`\n : methodDoc.operationId\n : resolveOperationId(moduleEntry.id, pathKey, method),\n summary,\n description: descriptionParts.length ? descriptionParts.join('\\n\\n') : undefined,\n tags: methodDoc?.tags ?? (moduleTag ? [moduleTag] : undefined),\n deprecated: methodDoc?.deprecated,\n externalDocs: methodDoc?.externalDocs,\n parameters: [\n ...buildParameters(pathSchema, 'path', normalized.params),\n ...buildParameters(querySchema, 'query'),\n ...buildParameters(headerSchema, 'header'),\n ].filter(Boolean),\n requestBody: buildRequestBody(requestBody),\n responses: buildResponses(method, methodDoc?.responses, methodDoc?.errors, metadata),\n security: buildSecurity(metadata, methodDoc, options.defaultSecurity),\n 'x-codeSamples': methodDoc?.codeSamples ?? [\n {\n lang: 'curl',\n label: 'cURL',\n source: curlSample,\n },\n ],\n ...(includeAccessControlMetadata && Array.isArray(requireFeatures) && requireFeatures.length\n ? { 'x-require-features': requireFeatures }\n : {}),\n ...(includeAccessControlMetadata && Array.isArray(requireRoles) && requireRoles.length\n ? { 'x-require-roles': requireRoles }\n : {}),\n ...(requireAuth ? { 'x-require-auth': true } : {}),\n ...(methodDoc?.extensions ?? {}),\n }\n }\n }\n }\n }\n\n doc.tags = Array.from(tags.entries()).map(([name, description]) => ({\n name,\n description: description ?? undefined,\n }))\n\n return doc\n}\n\nfunction formatMarkdownTable(rows: Array<[string, string, string, string]>): string {\n if (!rows.length) return ''\n const header = ['Name', 'Location', 'Type', 'Description']\n const align = ['---', '---', '---', '---']\n const lines = [\n `| ${header.join(' | ')} |`,\n `| ${align.join(' | ')} |`,\n ...rows.map((row) => `| ${row.join(' | ')} |`),\n ]\n return lines.join('\\n')\n}\n\nfunction schemaTypeLabel(schema: any): string {\n if (!schema) return 'any'\n if (schema.type) return schema.type\n if (schema.oneOf) return schema.oneOf.map(schemaTypeLabel).join(' | ')\n if (schema.allOf) return schema.allOf.map(schemaTypeLabel).join(' & ')\n return 'any'\n}\n\nfunction schemaHasDetails(schema: unknown): boolean {\n if (!schema || typeof schema !== 'object') return false\n const schemaObj = schema as Record<string, unknown>\n if (Array.isArray(schemaObj.enum) && schemaObj.enum.length) return true\n if (schemaObj.const !== undefined) return true\n if (typeof schemaObj.format === 'string') return true\n if (Array.isArray(schemaObj.oneOf) && schemaObj.oneOf.some((s: unknown) => schemaHasDetails(s))) return true\n if (Array.isArray(schemaObj.anyOf) && schemaObj.anyOf.some((s: unknown) => schemaHasDetails(s))) return true\n if (Array.isArray(schemaObj.allOf) && schemaObj.allOf.some((s: unknown) => schemaHasDetails(s))) return true\n if (schemaObj.items && schemaHasDetails(schemaObj.items)) return true\n if (schemaObj.properties && Object.keys(schemaObj.properties as Record<string, unknown>).length) return true\n if (Array.isArray(schemaObj.prefixItems) && schemaObj.prefixItems.some((s: unknown) => schemaHasDetails(s))) return true\n if (schemaObj.type && schemaObj.type !== 'object') return true\n return false\n}\n\ntype ContentSelection = {\n mediaType: string\n entry: any\n}\n\ntype DisplaySnippet = {\n value: string\n language: string\n}\n\nfunction selectContentVariant(content?: Record<string, any>): ContentSelection | undefined {\n if (!content) return undefined\n const entries = Object.entries(content)\n if (!entries.length) return undefined\n const preferred = [\n 'application/json',\n 'application/x-www-form-urlencoded',\n 'multipart/form-data',\n 'text/plain',\n ]\n for (const mediaType of preferred) {\n const match = entries.find(([type]) => type === mediaType)\n if (match) {\n const [selectedType, entry] = match\n return { mediaType: selectedType, entry }\n }\n }\n const [mediaType, entry] = entries[0]\n return { mediaType, entry }\n}\n\nfunction formatExampleForDisplay(example: unknown, mediaType?: string): DisplaySnippet | null {\n if (example === undefined) return null\n if (mediaType === 'application/x-www-form-urlencoded') {\n const encoded = toFormUrlEncoded(example)\n if (!encoded) return null\n return { value: encoded, language: 'text' }\n }\n if (mediaType === 'multipart/form-data') {\n if (example && typeof example === 'object') {\n const lines = Object.entries(example as Record<string, unknown>).map(([key, value]) => {\n const rendered = value === undefined || value === null ? '' : String(value)\n return `${key}=${rendered}`\n })\n if (lines.length) {\n return { value: lines.join('\\n'), language: 'text' }\n }\n }\n if (typeof example === 'string') {\n return { value: example, language: 'text' }\n }\n }\n if (!mediaType || mediaType === 'application/json') {\n try {\n return { value: JSON.stringify(example, null, 2), language: 'json' }\n } catch {\n return null\n }\n }\n if (typeof example === 'string') {\n return { value: example, language: 'text' }\n }\n try {\n return { value: JSON.stringify(example, null, 2), language: 'json' }\n } catch {\n return { value: String(example), language: 'text' }\n }\n}\n\nfunction formatSchemaForDisplay(schema: any): DisplaySnippet | null {\n if (!schema) return null\n try {\n return { value: JSON.stringify(schema, null, 2), language: 'json' }\n } catch {\n return null\n }\n}\n\nexport function generateMarkdownFromOpenApi(doc: OpenApiDocument): string {\n const lines: string[] = []\n lines.push(`# ${doc.info.title}`)\n lines.push('')\n lines.push(`Version: ${doc.info.version}`)\n if (doc.info.description) {\n lines.push('')\n lines.push(doc.info.description)\n }\n if (doc.servers && doc.servers.length) {\n lines.push('')\n lines.push('## Servers')\n for (const server of doc.servers) {\n lines.push(`- ${server.url}${server.description ? ` \u2013 ${server.description}` : ''}`)\n }\n }\n\n const sortedPaths = Object.keys(doc.paths).sort((a, b) => a.localeCompare(b))\n for (const path of sortedPaths) {\n const operations = doc.paths[path]\n const methods = Object.keys(operations).sort((a, b) => a.localeCompare(b))\n for (const method of methods) {\n const op: any = operations[method]\n lines.push('')\n lines.push(`## ${method.toUpperCase()} \\`${path}\\``)\n if (op.summary) {\n lines.push('')\n lines.push(op.summary)\n }\n if (op.description) {\n lines.push('')\n lines.push(op.description)\n }\n if (op.tags && op.tags.length) {\n lines.push('')\n lines.push(`**Tags:** ${op.tags.join(', ')}`)\n }\n if (op['x-require-auth']) {\n lines.push('')\n lines.push(`**Requires authentication.**`)\n }\n if (op['x-require-features']) {\n lines.push('')\n lines.push(`**Features:** ${(op['x-require-features'] as string[]).join(', ')}`)\n }\n if (op['x-require-roles']) {\n lines.push('')\n lines.push(`**Roles:** ${(op['x-require-roles'] as string[]).join(', ')}`)\n }\n\n const parameters = (op.parameters as any[]) ?? []\n if (parameters.length) {\n lines.push('')\n lines.push('### Parameters')\n const rows: Array<[string, string, string, string]> = parameters.map((p) => {\n const requiredLabel = p.required ? 'Required' : 'Optional'\n const descriptionParts = [requiredLabel, p.description].filter(Boolean)\n return [\n p.name,\n p.in,\n schemaTypeLabel(p.schema),\n descriptionParts.join('. '),\n ]\n })\n lines.push(formatMarkdownTable(rows))\n }\n\n if (op.requestBody) {\n const selection = selectContentVariant(op.requestBody.content)\n if (selection) {\n const { mediaType, entry } = selection\n const example = entry?.example ?? entry?.examples?.default?.value\n const formatted = formatExampleForDisplay(example, mediaType)\n const schemaFormatted =\n entry?.schema && schemaHasDetails(entry.schema) ? formatSchemaForDisplay(entry.schema) : null\n lines.push('')\n lines.push('### Request Body')\n lines.push('')\n lines.push(`Content-Type: \\`${mediaType}\\``)\n if (formatted) {\n lines.push('')\n lines.push(`\\`\\`\\`${formatted.language}`)\n lines.push(formatted.value)\n lines.push('```')\n } else if (schemaFormatted) {\n lines.push('')\n lines.push(`\\`\\`\\`${schemaFormatted.language}`)\n lines.push(schemaFormatted.value)\n lines.push('```')\n } else {\n lines.push('')\n lines.push('No example available for this content type.')\n }\n }\n }\n\n const responses = op.responses ?? {}\n const responseStatuses = Object.keys(responses).sort((a, b) => a.localeCompare(b))\n if (responseStatuses.length) {\n lines.push('')\n lines.push('### Responses')\n for (const status of responseStatuses) {\n const response = responses[status]\n if (response?.['x-autoGenerated']) continue\n lines.push('')\n lines.push(`**${status}** \u2013 ${response.description || 'Response'}`)\n const selection = selectContentVariant(response.content)\n if (selection) {\n const { mediaType, entry } = selection\n const example = entry?.example ?? entry?.examples?.default?.value\n const formatted = formatExampleForDisplay(example, mediaType)\n const schemaFormatted =\n entry?.schema && schemaHasDetails(entry.schema) ? formatSchemaForDisplay(entry.schema) : null\n lines.push('')\n lines.push(`Content-Type: \\`${mediaType}\\``)\n if (formatted) {\n lines.push('')\n lines.push(`\\`\\`\\`${formatted.language}`)\n lines.push(formatted.value)\n lines.push('```')\n } else if (schemaFormatted) {\n lines.push('')\n lines.push(`\\`\\`\\`${schemaFormatted.language}`)\n lines.push(schemaFormatted.value)\n lines.push('```')\n }\n }\n }\n }\n\n const samples = op['x-codeSamples'] as any[] | undefined\n if (samples && samples.length) {\n const curl = samples.find((sample) => String(sample.lang).toLowerCase() === 'curl') ?? samples[0]\n if (curl?.source) {\n lines.push('')\n lines.push('### Example')\n lines.push('')\n lines.push('```bash')\n lines.push(curl.source)\n lines.push('```')\n }\n }\n }\n }\n\n return lines.join('\\n')\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["mediaType", "entry"]
7
7
  }
@@ -1,4 +1,4 @@
1
- const APP_VERSION = "0.9.1-develop.7477.1.64ba865101";
1
+ const APP_VERSION = "0.9.1-develop.7497.1.543ea44c40";
2
2
  const appVersion = APP_VERSION;
3
3
  export {
4
4
  APP_VERSION,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lib/version.ts"],
4
- "sourcesContent": ["// Build-time generated version\nexport const APP_VERSION = '0.9.1-develop.7477.1.64ba865101';\nexport const appVersion = APP_VERSION;\n"],
4
+ "sourcesContent": ["// Build-time generated version\nexport const APP_VERSION = '0.9.1-develop.7497.1.543ea44c40';\nexport const appVersion = APP_VERSION;\n"],
5
5
  "mappings": "AACO,MAAM,cAAc;AACpB,MAAM,aAAa;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/modules/registry.ts"],
4
- "sourcesContent": ["import type { ReactNode } from 'react'\nimport type { OpenApiRouteDoc, OpenApiMethodDoc } from '@open-mercato/shared/lib/openapi/types'\nimport type { SyncCrudEventResult } from '../lib/crud/sync-event-types'\nimport type { DashboardWidgetModule } from './dashboard/widgets'\nimport type { InjectionAnyWidgetModule, ModuleInjectionTable } from './widgets/injection'\nimport type { IntegrationBundle, IntegrationDefinition } from './integrations/types'\nimport { createLogger } from '../lib/logger'\nimport {\n applyApiOverridesToManifests,\n applyModuleOverridesToModules,\n applyPageOverridesToManifests,\n composeApiRouteOverrides,\n composePageRouteOverrides,\n} from './overrides'\nimport { bindMatchedApiRoutePath } from '../lib/modules/api-route-identity'\n\nconst logger = createLogger('shared').child({ component: 'cli-registry' })\n\n// Context passed to dynamic metadata guards\nexport type RouteVisibilityContext = { path?: string; auth?: any }\n\n/**\n * Portal sidebar navigation hint. When declared on a portal page's metadata,\n * the page is auto-listed in the portal sidebar (subject to RBAC) by the\n * `/api/customer_accounts/portal/nav` endpoint.\n *\n * Absence of `nav` means the page is routable but not auto-listed (useful for\n * detail pages, create forms, etc.).\n */\nexport type PortalNavMetadata = {\n label: string\n labelKey?: string\n group?: 'main' | 'account'\n order?: number\n icon?: string\n}\n\n// Metadata you can export from page.meta.ts or directly from a server page\nexport type PageMetadata = {\n requireAuth?: boolean\n /** @deprecated Use `requireFeatures` instead \u2014 role names are mutable and can be spoofed */\n requireRoles?: readonly string[]\n // Optional fine-grained feature requirements\n requireFeatures?: readonly string[]\n // Portal: require customer (portal user) authentication instead of staff auth\n requireCustomerAuth?: boolean\n // Portal: require customer-specific features (checked against CustomerRbacService)\n requireCustomerFeatures?: readonly string[]\n // Portal: optional sidebar presentation hint (auto-listed by portal nav endpoint)\n nav?: PortalNavMetadata\n // Titles and grouping (aliases supported)\n title?: string\n titleKey?: string\n pageTitle?: string\n pageTitleKey?: string\n group?: string\n groupKey?: string\n pageGroup?: string\n pageGroupKey?: string\n // Ordering and visuals\n order?: number\n pageOrder?: number\n priority?: number\n pagePriority?: number\n icon?: ReactNode\n navHidden?: boolean\n // Dynamic flags\n visible?: (ctx: RouteVisibilityContext) => boolean | Promise<boolean>\n enabled?: (ctx: RouteVisibilityContext) => boolean | Promise<boolean>\n // Optional static breadcrumb trail for header\n breadcrumb?: Array<{ label: string; labelKey?: string; href?: string }>\n // Navigation context for tiered navigation:\n // - 'main' (default): Main sidebar business operations\n // - 'admin': Collapsible \"Settings & Admin\" section at bottom of sidebar\n // - 'settings': Hidden from sidebar, only accessible via Settings hub page\n // - 'profile': Profile dropdown items\n pageContext?: 'main' | 'admin' | 'settings' | 'profile'\n placement?: {\n section: string\n sectionLabel?: string\n sectionLabelKey?: string\n order?: number\n }\n}\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n\nexport type ApiHandler = (req: Request, ctx?: any) => Promise<Response> | Response\n\nexport type ModuleSubscriberHandler = (\n payload: any,\n ctx: any\n) => Promise<void | SyncCrudEventResult> | void | SyncCrudEventResult\n\nexport type ModuleWorkerHandler = (job: unknown, ctx: unknown) => Promise<void> | void\n\nexport type ModuleRoute = {\n pattern?: string\n path?: string\n requireAuth?: boolean\n /** @deprecated Use `requireFeatures` instead \u2014 role names are mutable and can be spoofed */\n requireRoles?: string[]\n // Optional fine-grained feature requirements\n requireFeatures?: string[]\n // Portal: require customer (portal user) authentication instead of staff auth\n requireCustomerAuth?: boolean\n // Portal: require customer-specific features (checked against CustomerRbacService)\n requireCustomerFeatures?: string[]\n // Portal: optional sidebar presentation hint (auto-listed by portal nav endpoint)\n nav?: PortalNavMetadata\n title?: string\n titleKey?: string\n group?: string\n groupKey?: string\n icon?: ReactNode\n order?: number\n priority?: number\n navHidden?: boolean\n visible?: (ctx: RouteVisibilityContext) => boolean | Promise<boolean>\n enabled?: (ctx: RouteVisibilityContext) => boolean | Promise<boolean>\n breadcrumb?: Array<{ label: string; labelKey?: string; href?: string }>\n pageContext?: 'main' | 'admin' | 'settings' | 'profile'\n placement?: {\n section: string\n sectionLabel?: string\n sectionLabelKey?: string\n order?: number\n }\n Component: (props: any) => ReactNode | Promise<ReactNode>\n}\n\nexport type ModuleRouteMetadata = Omit<ModuleRoute, 'Component'>\n\nexport type ModuleApiLegacy = {\n method: HttpMethod\n path: string\n handler: ApiHandler\n metadata?: Record<string, unknown>\n docs?: OpenApiMethodDoc\n}\n\nexport type ModuleApiRouteFile = {\n path: string\n handlers: Partial<Record<HttpMethod, ApiHandler>>\n requireAuth?: boolean\n /** @deprecated Use `requireFeatures` instead \u2014 role names are mutable and can be spoofed */\n requireRoles?: string[]\n // Optional fine-grained feature requirements for the entire route file\n // Note: per-method feature requirements should be expressed inside metadata\n requireFeatures?: string[]\n docs?: OpenApiRouteDoc\n metadata?: Partial<Record<HttpMethod, unknown>>\n}\n\nexport type ModuleApi = ModuleApiLegacy | ModuleApiRouteFile\n\nexport type RouteMatchParams = Record<string, string | string[]>\n\nexport type FrontendRouteManifestEntry = Omit<ModuleRoute, 'Component'> & {\n moduleId: string\n load: () => Promise<ModuleRoute['Component']>\n}\n\nexport type BackendRouteManifestEntry = Omit<ModuleRoute, 'Component'> & {\n moduleId: string\n load: () => Promise<ModuleRoute['Component']>\n}\n\nexport type ApiRouteManifestEntry = {\n moduleId: string\n kind: 'route-file' | 'legacy'\n path: string\n methods: HttpMethod[]\n method?: HttpMethod\n load: () => Promise<Record<string, unknown>>\n}\n\nexport type ModuleCli = {\n command: string\n run: (argv: string[]) => Promise<void> | void\n}\n\nexport type ModuleSubscriber = {\n id: string\n moduleId?: string\n event: string\n persistent?: boolean\n sync?: boolean\n priority?: number\n handler: ModuleSubscriberHandler\n}\n\nexport type ModuleWorker = {\n id: string\n moduleId?: string\n queue: string\n concurrency: number\n lockDuration?: number\n maxStalledCount?: number\n /**\n * Reports a job the queue abandoned without running the handler.\n *\n * Present only for workers whose metadata declares it; the generator emits it as a lazy import\n * beside the handler, because the registry serializes metadata as literals and a function cannot\n * survive that.\n */\n onJobAbandoned?: (payload: unknown, info: { jobId: string | null; reason: string }) => void | Promise<void>\n handler: ModuleWorkerHandler\n /** Opt-in flag exposing this queue as a user-facing scheduler target (issue #5213). */\n schedulerSafe?: boolean\n /** Creator features required beyond scheduler.jobs.manage when schedulerSafe is set. */\n schedulerRequiredFeatures?: string[]\n}\n\nexport type ModuleInfo = {\n name?: string\n title?: string\n version?: string\n description?: string\n author?: string\n license?: string\n homepage?: string\n copyright?: string\n // Optional hard dependencies: module ids that must be enabled\n requires?: string[]\n // Whether this module can be ejected into the app's src/modules/ for customization\n ejectable?: boolean\n}\n\nexport type ModuleDashboardWidgetEntry = {\n moduleId: string\n key: string\n source: 'app' | 'package'\n loader: () => Promise<DashboardWidgetModule<any>>\n}\n\nexport type ModuleInjectionWidgetEntry = {\n moduleId: string\n key: string\n source: 'app' | 'package'\n widgetId?: string\n loader: () => Promise<InjectionAnyWidgetModule<any, any>>\n}\n\nexport type Module = {\n id: string\n info?: ModuleInfo\n backendRoutes?: ModuleRoute[]\n frontendRoutes?: ModuleRoute[]\n apis?: ModuleApi[]\n cli?: ModuleCli[]\n translations?: Record<string, Record<string, string>>\n // Optional: per-module feature declarations discovered from acl.ts (module root)\n features?: Array<{ id: string; title: string; module: string }>\n // Auto-discovered event subscribers\n subscribers?: ModuleSubscriber[]\n // Auto-discovered queue workers\n workers?: ModuleWorker[]\n // Optional: per-module declared entity extensions and custom fields (static)\n // Extensions discovered from data/extensions.ts; Custom fields discovered from ce.ts (entities[].fields)\n entityExtensions?: import('./entities').EntityExtension[]\n customFieldSets?: import('./entities').CustomFieldSet[]\n // Optional: per-module declared custom entities (virtual/logical entities)\n // Discovered from ce.ts (module root). Each entry represents an entityId with optional label/description.\n customEntities?: Array<{ id: string; label?: string; description?: string }>\n dashboardWidgets?: ModuleDashboardWidgetEntry[]\n injectionWidgets?: ModuleInjectionWidgetEntry[]\n injectionTable?: ModuleInjectionTable\n // Optional: per-module vector search configuration (discovered from vector.ts)\n vector?: import('./vector').VectorModuleConfig\n // Optional: module-specific tenant setup configuration (from setup.ts)\n setup?: import('./setup').ModuleSetupConfig\n // Optional: a long-lived process-wide runtime the module starts itself (from runtime.ts).\n // Invoked once per process by `mercato server start` and `mercato queue worker`.\n runtime?: import('./runtime').ModuleRuntime\n // Optional: default encryption maps owned by the module (from encryption.ts)\n defaultEncryptionMaps?: import('./encryption').ModuleEncryptionMap[]\n // Optional: integration marketplace declarations discovered from integration.ts\n integrations?: IntegrationDefinition[]\n bundles?: IntegrationBundle[]\n}\n\nfunction normPath(s: string) {\n return (s.startsWith('/') ? s : '/' + s).replace(/\\/+$/, '') || '/'\n}\n\n// 0 = literal (most specific), 1 = dynamic [param], 2 = catch-all [...param] or [[...param]]\nfunction segmentSpecificity(seg: string): 0 | 1 | 2 {\n if (seg.startsWith('[[...') || seg.startsWith('[...')) return 2\n if (seg.startsWith('[')) return 1\n return 0\n}\n\nfunction compareRouteSpecificity(aPattern: string, bPattern: string): number {\n const aSegs = aPattern.split('/')\n const bSegs = bPattern.split('/')\n const len = Math.max(aSegs.length, bSegs.length)\n for (let i = 0; i < len; i++) {\n const av = i < aSegs.length ? segmentSpecificity(aSegs[i]) : -1\n const bv = i < bSegs.length ? segmentSpecificity(bSegs[i]) : -1\n if (av !== bv) return av - bv\n }\n return 0\n}\n\nexport function sortRoutesBySpecificity<T extends { pattern?: string; path?: string }>(routes: T[]): T[] {\n return [...routes].sort((a, b) =>\n compareRouteSpecificity(a.pattern ?? a.path ?? '/', b.pattern ?? b.path ?? '/'),\n )\n}\n\n// Memoized per-array sorted view, so direct callers (e.g., the Next.js catch-all\n// routes that import generated `frontendRoutes`/`backendRoutes`/`apiRoutes`\n// arrays) match against a specificity-sorted view even if they never call\n// `register*RouteManifests`. Keyed by array reference; generated arrays are\n// module-level constants so this caches once per process.\nconst sortedRoutesCache = new WeakMap<object, readonly unknown[]>()\n\nfunction ensureSortedRoutes<T extends { pattern?: string; path?: string }>(routes: readonly T[]): readonly T[] {\n const cached = sortedRoutesCache.get(routes) as readonly T[] | undefined\n if (cached) return cached\n const sorted = sortRoutesBySpecificity([...routes])\n sortedRoutesCache.set(routes, sorted)\n return sorted\n}\n\nexport function matchRoutePattern(pattern: string, pathname: string): RouteMatchParams | undefined {\n const p = normPath(pattern)\n const u = normPath(pathname)\n const pSegs = p.split('/').slice(1)\n const uSegs = u.split('/').slice(1)\n const params: Record<string, string | string[]> = {}\n let i = 0\n for (let j = 0; j < pSegs.length; j++, i++) {\n const seg = pSegs[j]\n const mCatchAll = seg.match(/^\\[\\.\\.\\.(.+)\\]$/)\n const mOptCatch = seg.match(/^\\[\\[\\.\\.\\.(.+)\\]\\]$/)\n const mDyn = seg.match(/^\\[(.+)\\]$/)\n if (mCatchAll) {\n const key = mCatchAll[1]\n if (i >= uSegs.length) return undefined\n params[key] = uSegs.slice(i)\n return params\n } else if (mOptCatch) {\n const key = mOptCatch[1]\n params[key] = i < uSegs.length ? uSegs.slice(i) : []\n return params\n } else if (mDyn) {\n if (i >= uSegs.length) return undefined\n params[mDyn[1]] = uSegs[i]\n } else {\n if (i >= uSegs.length || uSegs[i].toLowerCase() !== seg.toLowerCase()) return undefined\n }\n }\n if (i !== uSegs.length) return undefined\n return params\n}\n\nfunction getPattern(r: ModuleRoute) {\n return r.pattern ?? r.path ?? '/'\n}\n\nexport function findFrontendMatch(modules: Module[], pathname: string): { route: ModuleRoute; params: Record<string, string | string[]> } | undefined {\n for (const m of modules) {\n const routes = m.frontendRoutes ?? []\n for (const r of routes) {\n const params = matchRoutePattern(getPattern(r), pathname)\n if (params) return { route: r, params }\n }\n }\n}\n\nexport function findBackendMatch(modules: Module[], pathname: string): { route: ModuleRoute; params: Record<string, string | string[]> } | undefined {\n for (const m of modules) {\n const routes = m.backendRoutes ?? []\n for (const r of routes) {\n const params = matchRoutePattern(getPattern(r), pathname)\n if (params) return { route: r, params }\n }\n }\n}\n\nexport function findApi(modules: Module[], method: HttpMethod, pathname: string): { handler: ApiHandler; params: Record<string, string | string[]>; requireAuth?: boolean; requireRoles?: string[]; metadata?: any } | undefined {\n for (const m of modules) {\n const apis = m.apis ?? []\n for (const a of apis) {\n if ('handlers' in a) {\n const params = matchRoutePattern(a.path, pathname)\n const handler = (a.handlers as any)[method]\n if (params && handler) return { handler, params, requireAuth: a.requireAuth, requireRoles: (a as any).requireRoles, metadata: (a as any).metadata }\n } else {\n const al = a as ModuleApiLegacy\n if (al.method !== method) continue\n const params = matchRoutePattern(al.path, pathname)\n if (params) {\n return { handler: al.handler, params, metadata: al.metadata }\n }\n }\n }\n }\n}\n\nexport function findRouteManifestMatch<T extends { pattern?: string; path?: string }>(\n routes: T[],\n pathname: string\n): { route: T; params: RouteMatchParams } | undefined {\n for (const route of ensureSortedRoutes(routes)) {\n const params = matchRoutePattern(route.pattern ?? route.path ?? '/', pathname)\n if (params) {\n return { route, params }\n }\n }\n}\n\nexport function findApiRouteManifestMatch<T extends { path: string; methods: HttpMethod[] }>(\n routes: T[],\n method: HttpMethod,\n pathname: string,\n request?: Request,\n): { route: T; params: RouteMatchParams } | undefined {\n for (const route of ensureSortedRoutes(routes)) {\n if (!route.methods.includes(method)) continue\n const params = matchRoutePattern(route.path, pathname)\n if (params) {\n if (request && !bindMatchedApiRoutePath(request, route.path, params)) return undefined\n return { route, params }\n }\n }\n}\n\nexport { resolvePageRouteMetadata } from './pageRouteMetadata'\n\nlet _backendRouteManifests: BackendRouteManifestEntry[] | null = null\n\nexport function registerBackendRouteManifests(routes: BackendRouteManifestEntry[]) {\n const pageOverrides = composePageRouteOverrides()\n const finalRoutes = Object.keys(pageOverrides).length === 0\n ? routes\n : applyPageOverridesToManifests(routes, pageOverrides, 'backend')\n _backendRouteManifests = sortRoutesBySpecificity(finalRoutes)\n}\n\nexport function getBackendRouteManifests(): BackendRouteManifestEntry[] {\n return _backendRouteManifests ?? []\n}\n\nlet _frontendRouteManifests: FrontendRouteManifestEntry[] | null = null\n\nexport function registerFrontendRouteManifests(routes: FrontendRouteManifestEntry[]) {\n const pageOverrides = composePageRouteOverrides()\n const finalRoutes = Object.keys(pageOverrides).length === 0\n ? routes\n : applyPageOverridesToManifests(routes, pageOverrides, 'frontend')\n _frontendRouteManifests = sortRoutesBySpecificity(finalRoutes)\n}\n\nexport function getFrontendRouteManifests(): FrontendRouteManifestEntry[] {\n return _frontendRouteManifests ?? []\n}\n\nlet _apiRouteManifests: ApiRouteManifestEntry[] | null = null\n\nexport function registerApiRouteManifests(routes: ApiRouteManifestEntry[]) {\n // Apply any `entry.overrides.routes.api` overrides registered through the\n // unified `modules.ts` dispatcher or programmatic API before storing the\n // manifest. The composer is cheap and returns an empty object when no\n // overrides exist, so this is a no-op for apps that do not opt in.\n const routeOverrides = composeApiRouteOverrides()\n const finalRoutes = Object.keys(routeOverrides).length === 0\n ? routes\n : applyApiOverridesToManifests(routes, routeOverrides)\n _apiRouteManifests = sortRoutesBySpecificity(finalRoutes)\n}\n\nexport function getApiRouteManifests(): ApiRouteManifestEntry[] {\n return _apiRouteManifests ?? []\n}\n\n// CLI modules registry - populated ONLY by the `mercato` bin (packages/cli/src/bin.ts\n// plus the `init` and `seed:defaults` commands). Runtime code MUST NOT read it: it\n// fails open (see getCliModules below), so outside a CLI process a reader gets an\n// empty list and silently does nothing. The events worker made exactly that mistake\n// and dropped every persistent subscriber. Runtime code uses the app registry\n// (`getModules` from ../lib/modules/registry) or a DI-resolved service.\n// Enforced by src/modules/__tests__/cli-registry-boundary.test.ts.\nlet _cliModules: Module[] | null = null\n\nexport function registerCliModules(modules: Module[]) {\n if (_cliModules !== null && process.env.NODE_ENV === 'development') {\n logger.debug('CLI modules re-registered (this may occur during HMR)')\n }\n _cliModules = applyModuleOverridesToModules(modules)\n}\n\nexport function getCliModules(): Module[] {\n // Return empty array if not registered - allows generate command to work without bootstrap\n return _cliModules ?? []\n}\n\nexport function hasCliModules(): boolean {\n return _cliModules !== null && _cliModules.length > 0\n}\n\nexport function getDefaultEncryptionMaps(modules: Module[]): import('./encryption').ModuleEncryptionMap[] {\n const byEntityId = new Map<string, { moduleId: string; map: import('./encryption').ModuleEncryptionMap }>()\n\n for (const mod of modules) {\n for (const entry of mod.defaultEncryptionMaps ?? []) {\n const previous = byEntityId.get(entry.entityId)\n if (previous) {\n throw new Error(\n `[registry] Duplicate default encryption map for \"${entry.entityId}\" declared by \"${previous.moduleId}\" and \"${mod.id}\"`\n )\n }\n byEntityId.set(entry.entityId, {\n moduleId: mod.id,\n map: {\n entityId: entry.entityId,\n ...(entry.keyScope ? { keyScope: entry.keyScope } : {}),\n fields: entry.fields.map((field) => ({\n field: field.field,\n hashField: field.hashField ?? null,\n })),\n },\n })\n }\n }\n\n return Array.from(byEntityId.values(), ({ map }) => map)\n}\n\nfunction ensureLazyHandler<T extends (...args: any[]) => any>(\n loaded: unknown,\n kind: 'subscriber' | 'worker',\n id: string\n): T {\n const handler = typeof loaded === 'function'\n ? loaded\n : loaded && typeof loaded === 'object' && 'default' in loaded\n ? (loaded as Record<string, unknown>).default\n : null\n if (typeof handler !== 'function') {\n throw new Error(`[registry] Invalid ${kind} module \"${id}\" (missing default export handler)`)\n }\n return handler as T\n}\n\nexport function createLazyModuleSubscriber(\n loadModule: () => Promise<unknown>,\n id: string\n): ModuleSubscriberHandler {\n let handlerPromise: Promise<ModuleSubscriberHandler> | null = null\n return async (payload, ctx) => {\n handlerPromise ??= loadModule().then((loaded) =>\n ensureLazyHandler<ModuleSubscriberHandler>(loaded, 'subscriber', id)\n )\n const handler = await handlerPromise\n return handler(payload, ctx)\n }\n}\n\nexport function createLazyModuleWorker(\n loadModule: () => Promise<unknown>,\n id: string\n): ModuleWorkerHandler {\n let handlerPromise: Promise<ModuleWorkerHandler> | null = null\n return async (job, ctx) => {\n handlerPromise ??= loadModule().then((loaded) =>\n ensureLazyHandler<ModuleWorkerHandler>(loaded, 'worker', id)\n )\n const handler = await handlerPromise\n return handler(job, ctx)\n }\n}\n\n/**\n * Resolves a worker's `metadata.onJobAbandoned` on first use.\n *\n * The generator serializes worker metadata as literals, so a function declared there cannot be\n * emitted inline the way `concurrency` or `lockDuration` are. It is emitted as this thunk instead \u2014\n * the same lazy-import treatment the handler already gets \u2014 and only for workers whose metadata\n * declares the callback, so no other queue acquires one (and with it, a sweep) by accident.\n */\nexport function createLazyModuleWorkerAbandonHook(\n loadModule: () => Promise<unknown>,\n id: string\n): (payload: unknown, info: { jobId: string | null; reason: string }) => Promise<void> {\n let hookPromise: Promise<((payload: unknown, info: { jobId: string | null; reason: string }) => unknown) | null> | null = null\n return async (payload, info) => {\n hookPromise ??= loadModule().then((loaded) => {\n const metadata = (loaded as { metadata?: { onJobAbandoned?: unknown } } | null)?.metadata\n return typeof metadata?.onJobAbandoned === 'function'\n ? (metadata.onJobAbandoned as (payload: unknown, info: { jobId: string | null; reason: string }) => unknown)\n : null\n })\n const hook = await hookPromise\n if (!hook) {\n throw new Error(`[registry] Worker \"${id}\" was registered with an abandoned-job hook but its metadata no longer declares one`)\n }\n await hook(payload, info)\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { ReactNode } from 'react'\nimport type { OpenApiRouteDoc, OpenApiMethodDoc } from '@open-mercato/shared/lib/openapi/types'\nimport type { SyncCrudEventResult } from '../lib/crud/sync-event-types'\nimport type { DashboardWidgetModule } from './dashboard/widgets'\nimport type { InjectionAnyWidgetModule, ModuleInjectionTable } from './widgets/injection'\nimport type { IntegrationBundle, IntegrationDefinition } from './integrations/types'\nimport { createLogger } from '../lib/logger'\nimport {\n applyApiOverridesToManifests,\n applyModuleOverridesToModules,\n applyPageOverridesToManifests,\n composeApiRouteOverrides,\n composePageRouteOverrides,\n} from './overrides'\nimport { bindMatchedApiRoutePath } from '../lib/modules/api-route-identity'\n\nconst logger = createLogger('shared').child({ component: 'cli-registry' })\n\n// Context passed to dynamic metadata guards\nexport type RouteVisibilityContext = { path?: string; auth?: any }\n\n/**\n * Portal sidebar navigation hint. When declared on a portal page's metadata,\n * the page is auto-listed in the portal sidebar (subject to RBAC) by the\n * `/api/customer_accounts/portal/nav` endpoint.\n *\n * Absence of `nav` means the page is routable but not auto-listed (useful for\n * detail pages, create forms, etc.).\n */\nexport type PortalNavMetadata = {\n label: string\n labelKey?: string\n group?: 'main' | 'account'\n order?: number\n icon?: string\n}\n\n// Metadata you can export from page.meta.ts or directly from a server page\nexport type PageMetadata = {\n requireAuth?: boolean\n /** @deprecated Use `requireFeatures` instead \u2014 role names are mutable and can be spoofed */\n requireRoles?: readonly string[]\n // Optional fine-grained feature requirements\n requireFeatures?: readonly string[]\n // Portal: require customer (portal user) authentication instead of staff auth\n requireCustomerAuth?: boolean\n // Portal: require customer-specific features (checked against CustomerRbacService)\n requireCustomerFeatures?: readonly string[]\n // Portal: optional sidebar presentation hint (auto-listed by portal nav endpoint)\n nav?: PortalNavMetadata\n // Titles and grouping (aliases supported)\n title?: string\n titleKey?: string\n pageTitle?: string\n pageTitleKey?: string\n group?: string\n groupKey?: string\n pageGroup?: string\n pageGroupKey?: string\n // Ordering and visuals\n order?: number\n pageOrder?: number\n priority?: number\n pagePriority?: number\n icon?: ReactNode\n navHidden?: boolean\n // Dynamic flags\n visible?: (ctx: RouteVisibilityContext) => boolean | Promise<boolean>\n enabled?: (ctx: RouteVisibilityContext) => boolean | Promise<boolean>\n // Optional static breadcrumb trail for header\n breadcrumb?: Array<{ label: string; labelKey?: string; href?: string }>\n // Navigation context for tiered navigation:\n // - 'main' (default): Main sidebar business operations\n // - 'admin': Collapsible \"Settings & Admin\" section at bottom of sidebar\n // - 'settings': Hidden from sidebar, only accessible via Settings hub page\n // - 'profile': Profile dropdown items\n pageContext?: 'main' | 'admin' | 'settings' | 'profile'\n placement?: {\n section: string\n sectionLabel?: string\n sectionLabelKey?: string\n order?: number\n }\n}\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n\nexport type ApiHandler = (req: Request, ctx?: any) => Promise<Response> | Response\n\nexport type ModuleSubscriberHandler = (\n payload: any,\n ctx: any\n) => Promise<void | SyncCrudEventResult> | void | SyncCrudEventResult\n\nexport type ModuleWorkerHandler = (job: unknown, ctx: unknown) => Promise<void> | void\n\nexport type ModuleRoute = {\n pattern?: string\n path?: string\n requireAuth?: boolean\n /** @deprecated Use `requireFeatures` instead \u2014 role names are mutable and can be spoofed */\n requireRoles?: string[]\n // Optional fine-grained feature requirements\n requireFeatures?: string[]\n // Portal: require customer (portal user) authentication instead of staff auth\n requireCustomerAuth?: boolean\n // Portal: require customer-specific features (checked against CustomerRbacService)\n requireCustomerFeatures?: string[]\n // Portal: optional sidebar presentation hint (auto-listed by portal nav endpoint)\n nav?: PortalNavMetadata\n title?: string\n titleKey?: string\n group?: string\n groupKey?: string\n icon?: ReactNode\n order?: number\n priority?: number\n navHidden?: boolean\n visible?: (ctx: RouteVisibilityContext) => boolean | Promise<boolean>\n enabled?: (ctx: RouteVisibilityContext) => boolean | Promise<boolean>\n breadcrumb?: Array<{ label: string; labelKey?: string; href?: string }>\n pageContext?: 'main' | 'admin' | 'settings' | 'profile'\n placement?: {\n section: string\n sectionLabel?: string\n sectionLabelKey?: string\n order?: number\n }\n Component: (props: any) => ReactNode | Promise<ReactNode>\n}\n\nexport type ModuleRouteMetadata = Omit<ModuleRoute, 'Component'>\n\nexport type ModuleApiLegacy = {\n method: HttpMethod\n path: string\n handler: ApiHandler\n metadata?: Record<string, unknown>\n docs?: OpenApiMethodDoc\n}\n\nexport type ModuleApiRouteFile = {\n path: string\n handlers: Partial<Record<HttpMethod, ApiHandler>>\n requireAuth?: boolean\n /** @deprecated Use `requireFeatures` instead \u2014 role names are mutable and can be spoofed */\n requireRoles?: string[]\n // Optional fine-grained feature requirements for the entire route file\n // Note: per-method feature requirements should be expressed inside metadata\n requireFeatures?: string[]\n docs?: OpenApiRouteDoc\n metadata?: Partial<Record<HttpMethod, unknown>>\n}\n\nexport type ModuleApi = ModuleApiLegacy | ModuleApiRouteFile\n\nexport type RouteMatchParams = Record<string, string | string[]>\n\nexport type FrontendRouteManifestEntry = Omit<ModuleRoute, 'Component'> & {\n moduleId: string\n load: () => Promise<ModuleRoute['Component']>\n}\n\nexport type BackendRouteManifestEntry = Omit<ModuleRoute, 'Component'> & {\n moduleId: string\n load: () => Promise<ModuleRoute['Component']>\n}\n\nexport type ApiRouteManifestEntry = {\n moduleId: string\n kind: 'route-file' | 'legacy'\n path: string\n methods: HttpMethod[]\n method?: HttpMethod\n load: () => Promise<Record<string, unknown>>\n}\n\nexport type ModuleCli = {\n command: string\n run: (argv: string[]) => Promise<void> | void\n // Usage text printed by the `mercato` dispatcher when the command is invoked with --help/-h.\n help?: string\n // Set when the command parses --help/-h itself; the dispatcher then forwards the flag\n // instead of intercepting it, so the command can print its own richer usage text.\n handlesHelp?: boolean\n}\n\nexport type ModuleSubscriber = {\n id: string\n moduleId?: string\n event: string\n persistent?: boolean\n sync?: boolean\n priority?: number\n handler: ModuleSubscriberHandler\n}\n\nexport type ModuleWorker = {\n id: string\n moduleId?: string\n queue: string\n concurrency: number\n lockDuration?: number\n maxStalledCount?: number\n /**\n * Reports a job the queue abandoned without running the handler.\n *\n * Present only for workers whose metadata declares it; the generator emits it as a lazy import\n * beside the handler, because the registry serializes metadata as literals and a function cannot\n * survive that.\n */\n onJobAbandoned?: (payload: unknown, info: { jobId: string | null; reason: string }) => void | Promise<void>\n handler: ModuleWorkerHandler\n /** Opt-in flag exposing this queue as a user-facing scheduler target (issue #5213). */\n schedulerSafe?: boolean\n /** Creator features required beyond scheduler.jobs.manage when schedulerSafe is set. */\n schedulerRequiredFeatures?: string[]\n}\n\nexport type ModuleInfo = {\n name?: string\n title?: string\n version?: string\n description?: string\n author?: string\n license?: string\n homepage?: string\n copyright?: string\n // Optional hard dependencies: module ids that must be enabled\n requires?: string[]\n // Whether this module can be ejected into the app's src/modules/ for customization\n ejectable?: boolean\n}\n\nexport type ModuleDashboardWidgetEntry = {\n moduleId: string\n key: string\n source: 'app' | 'package'\n loader: () => Promise<DashboardWidgetModule<any>>\n}\n\nexport type ModuleInjectionWidgetEntry = {\n moduleId: string\n key: string\n source: 'app' | 'package'\n widgetId?: string\n loader: () => Promise<InjectionAnyWidgetModule<any, any>>\n}\n\nexport type Module = {\n id: string\n info?: ModuleInfo\n backendRoutes?: ModuleRoute[]\n frontendRoutes?: ModuleRoute[]\n apis?: ModuleApi[]\n cli?: ModuleCli[]\n translations?: Record<string, Record<string, string>>\n // Optional: per-module feature declarations discovered from acl.ts (module root)\n features?: Array<{ id: string; title: string; module: string }>\n // Auto-discovered event subscribers\n subscribers?: ModuleSubscriber[]\n // Auto-discovered queue workers\n workers?: ModuleWorker[]\n // Optional: per-module declared entity extensions and custom fields (static)\n // Extensions discovered from data/extensions.ts; Custom fields discovered from ce.ts (entities[].fields)\n entityExtensions?: import('./entities').EntityExtension[]\n customFieldSets?: import('./entities').CustomFieldSet[]\n // Optional: per-module declared custom entities (virtual/logical entities)\n // Discovered from ce.ts (module root). Each entry represents an entityId with optional label/description.\n customEntities?: Array<{ id: string; label?: string; description?: string }>\n dashboardWidgets?: ModuleDashboardWidgetEntry[]\n injectionWidgets?: ModuleInjectionWidgetEntry[]\n injectionTable?: ModuleInjectionTable\n // Optional: per-module vector search configuration (discovered from vector.ts)\n vector?: import('./vector').VectorModuleConfig\n // Optional: module-specific tenant setup configuration (from setup.ts)\n setup?: import('./setup').ModuleSetupConfig\n // Optional: a long-lived process-wide runtime the module starts itself (from runtime.ts).\n // Invoked once per process by `mercato server start` and `mercato queue worker`.\n runtime?: import('./runtime').ModuleRuntime\n // Optional: default encryption maps owned by the module (from encryption.ts)\n defaultEncryptionMaps?: import('./encryption').ModuleEncryptionMap[]\n // Optional: integration marketplace declarations discovered from integration.ts\n integrations?: IntegrationDefinition[]\n bundles?: IntegrationBundle[]\n}\n\nfunction normPath(s: string) {\n return (s.startsWith('/') ? s : '/' + s).replace(/\\/+$/, '') || '/'\n}\n\n// 0 = literal (most specific), 1 = dynamic [param], 2 = catch-all [...param] or [[...param]]\nfunction segmentSpecificity(seg: string): 0 | 1 | 2 {\n if (seg.startsWith('[[...') || seg.startsWith('[...')) return 2\n if (seg.startsWith('[')) return 1\n return 0\n}\n\nfunction compareRouteSpecificity(aPattern: string, bPattern: string): number {\n const aSegs = aPattern.split('/')\n const bSegs = bPattern.split('/')\n const len = Math.max(aSegs.length, bSegs.length)\n for (let i = 0; i < len; i++) {\n const av = i < aSegs.length ? segmentSpecificity(aSegs[i]) : -1\n const bv = i < bSegs.length ? segmentSpecificity(bSegs[i]) : -1\n if (av !== bv) return av - bv\n }\n return 0\n}\n\nexport function sortRoutesBySpecificity<T extends { pattern?: string; path?: string }>(routes: T[]): T[] {\n return [...routes].sort((a, b) =>\n compareRouteSpecificity(a.pattern ?? a.path ?? '/', b.pattern ?? b.path ?? '/'),\n )\n}\n\n// Memoized per-array sorted view, so direct callers (e.g., the Next.js catch-all\n// routes that import generated `frontendRoutes`/`backendRoutes`/`apiRoutes`\n// arrays) match against a specificity-sorted view even if they never call\n// `register*RouteManifests`. Keyed by array reference; generated arrays are\n// module-level constants so this caches once per process.\nconst sortedRoutesCache = new WeakMap<object, readonly unknown[]>()\n\nfunction ensureSortedRoutes<T extends { pattern?: string; path?: string }>(routes: readonly T[]): readonly T[] {\n const cached = sortedRoutesCache.get(routes) as readonly T[] | undefined\n if (cached) return cached\n const sorted = sortRoutesBySpecificity([...routes])\n sortedRoutesCache.set(routes, sorted)\n return sorted\n}\n\nexport function matchRoutePattern(pattern: string, pathname: string): RouteMatchParams | undefined {\n const p = normPath(pattern)\n const u = normPath(pathname)\n const pSegs = p.split('/').slice(1)\n const uSegs = u.split('/').slice(1)\n const params: Record<string, string | string[]> = {}\n let i = 0\n for (let j = 0; j < pSegs.length; j++, i++) {\n const seg = pSegs[j]\n const mCatchAll = seg.match(/^\\[\\.\\.\\.(.+)\\]$/)\n const mOptCatch = seg.match(/^\\[\\[\\.\\.\\.(.+)\\]\\]$/)\n const mDyn = seg.match(/^\\[(.+)\\]$/)\n if (mCatchAll) {\n const key = mCatchAll[1]\n if (i >= uSegs.length) return undefined\n params[key] = uSegs.slice(i)\n return params\n } else if (mOptCatch) {\n const key = mOptCatch[1]\n params[key] = i < uSegs.length ? uSegs.slice(i) : []\n return params\n } else if (mDyn) {\n if (i >= uSegs.length) return undefined\n params[mDyn[1]] = uSegs[i]\n } else {\n if (i >= uSegs.length || uSegs[i].toLowerCase() !== seg.toLowerCase()) return undefined\n }\n }\n if (i !== uSegs.length) return undefined\n return params\n}\n\nfunction getPattern(r: ModuleRoute) {\n return r.pattern ?? r.path ?? '/'\n}\n\nexport function findFrontendMatch(modules: Module[], pathname: string): { route: ModuleRoute; params: Record<string, string | string[]> } | undefined {\n for (const m of modules) {\n const routes = m.frontendRoutes ?? []\n for (const r of routes) {\n const params = matchRoutePattern(getPattern(r), pathname)\n if (params) return { route: r, params }\n }\n }\n}\n\nexport function findBackendMatch(modules: Module[], pathname: string): { route: ModuleRoute; params: Record<string, string | string[]> } | undefined {\n for (const m of modules) {\n const routes = m.backendRoutes ?? []\n for (const r of routes) {\n const params = matchRoutePattern(getPattern(r), pathname)\n if (params) return { route: r, params }\n }\n }\n}\n\nexport function findApi(modules: Module[], method: HttpMethod, pathname: string): { handler: ApiHandler; params: Record<string, string | string[]>; requireAuth?: boolean; requireRoles?: string[]; metadata?: any } | undefined {\n for (const m of modules) {\n const apis = m.apis ?? []\n for (const a of apis) {\n if ('handlers' in a) {\n const params = matchRoutePattern(a.path, pathname)\n const handler = (a.handlers as any)[method]\n if (params && handler) return { handler, params, requireAuth: a.requireAuth, requireRoles: (a as any).requireRoles, metadata: (a as any).metadata }\n } else {\n const al = a as ModuleApiLegacy\n if (al.method !== method) continue\n const params = matchRoutePattern(al.path, pathname)\n if (params) {\n return { handler: al.handler, params, metadata: al.metadata }\n }\n }\n }\n }\n}\n\nexport function findRouteManifestMatch<T extends { pattern?: string; path?: string }>(\n routes: T[],\n pathname: string\n): { route: T; params: RouteMatchParams } | undefined {\n for (const route of ensureSortedRoutes(routes)) {\n const params = matchRoutePattern(route.pattern ?? route.path ?? '/', pathname)\n if (params) {\n return { route, params }\n }\n }\n}\n\nexport function findApiRouteManifestMatch<T extends { path: string; methods: HttpMethod[] }>(\n routes: T[],\n method: HttpMethod,\n pathname: string,\n request?: Request,\n): { route: T; params: RouteMatchParams } | undefined {\n for (const route of ensureSortedRoutes(routes)) {\n if (!route.methods.includes(method)) continue\n const params = matchRoutePattern(route.path, pathname)\n if (params) {\n if (request && !bindMatchedApiRoutePath(request, route.path, params)) return undefined\n return { route, params }\n }\n }\n}\n\nexport { resolvePageRouteMetadata } from './pageRouteMetadata'\n\nlet _backendRouteManifests: BackendRouteManifestEntry[] | null = null\n\nexport function registerBackendRouteManifests(routes: BackendRouteManifestEntry[]) {\n const pageOverrides = composePageRouteOverrides()\n const finalRoutes = Object.keys(pageOverrides).length === 0\n ? routes\n : applyPageOverridesToManifests(routes, pageOverrides, 'backend')\n _backendRouteManifests = sortRoutesBySpecificity(finalRoutes)\n}\n\nexport function getBackendRouteManifests(): BackendRouteManifestEntry[] {\n return _backendRouteManifests ?? []\n}\n\nlet _frontendRouteManifests: FrontendRouteManifestEntry[] | null = null\n\nexport function registerFrontendRouteManifests(routes: FrontendRouteManifestEntry[]) {\n const pageOverrides = composePageRouteOverrides()\n const finalRoutes = Object.keys(pageOverrides).length === 0\n ? routes\n : applyPageOverridesToManifests(routes, pageOverrides, 'frontend')\n _frontendRouteManifests = sortRoutesBySpecificity(finalRoutes)\n}\n\nexport function getFrontendRouteManifests(): FrontendRouteManifestEntry[] {\n return _frontendRouteManifests ?? []\n}\n\nlet _apiRouteManifests: ApiRouteManifestEntry[] | null = null\n\nexport function registerApiRouteManifests(routes: ApiRouteManifestEntry[]) {\n // Apply any `entry.overrides.routes.api` overrides registered through the\n // unified `modules.ts` dispatcher or programmatic API before storing the\n // manifest. The composer is cheap and returns an empty object when no\n // overrides exist, so this is a no-op for apps that do not opt in.\n const routeOverrides = composeApiRouteOverrides()\n const finalRoutes = Object.keys(routeOverrides).length === 0\n ? routes\n : applyApiOverridesToManifests(routes, routeOverrides)\n _apiRouteManifests = sortRoutesBySpecificity(finalRoutes)\n}\n\nexport function getApiRouteManifests(): ApiRouteManifestEntry[] {\n return _apiRouteManifests ?? []\n}\n\n// CLI modules registry - populated ONLY by the `mercato` bin (packages/cli/src/bin.ts\n// plus the `init` and `seed:defaults` commands). Runtime code MUST NOT read it: it\n// fails open (see getCliModules below), so outside a CLI process a reader gets an\n// empty list and silently does nothing. The events worker made exactly that mistake\n// and dropped every persistent subscriber. Runtime code uses the app registry\n// (`getModules` from ../lib/modules/registry) or a DI-resolved service.\n// Enforced by src/modules/__tests__/cli-registry-boundary.test.ts.\nlet _cliModules: Module[] | null = null\n\nexport function registerCliModules(modules: Module[]) {\n if (_cliModules !== null && process.env.NODE_ENV === 'development') {\n logger.debug('CLI modules re-registered (this may occur during HMR)')\n }\n _cliModules = applyModuleOverridesToModules(modules)\n}\n\nexport function getCliModules(): Module[] {\n // Return empty array if not registered - allows generate command to work without bootstrap\n return _cliModules ?? []\n}\n\nexport function hasCliModules(): boolean {\n return _cliModules !== null && _cliModules.length > 0\n}\n\nexport function getDefaultEncryptionMaps(modules: Module[]): import('./encryption').ModuleEncryptionMap[] {\n const byEntityId = new Map<string, { moduleId: string; map: import('./encryption').ModuleEncryptionMap }>()\n\n for (const mod of modules) {\n for (const entry of mod.defaultEncryptionMaps ?? []) {\n const previous = byEntityId.get(entry.entityId)\n if (previous) {\n throw new Error(\n `[registry] Duplicate default encryption map for \"${entry.entityId}\" declared by \"${previous.moduleId}\" and \"${mod.id}\"`\n )\n }\n byEntityId.set(entry.entityId, {\n moduleId: mod.id,\n map: {\n entityId: entry.entityId,\n ...(entry.keyScope ? { keyScope: entry.keyScope } : {}),\n fields: entry.fields.map((field) => ({\n field: field.field,\n hashField: field.hashField ?? null,\n })),\n },\n })\n }\n }\n\n return Array.from(byEntityId.values(), ({ map }) => map)\n}\n\nfunction ensureLazyHandler<T extends (...args: any[]) => any>(\n loaded: unknown,\n kind: 'subscriber' | 'worker',\n id: string\n): T {\n const handler = typeof loaded === 'function'\n ? loaded\n : loaded && typeof loaded === 'object' && 'default' in loaded\n ? (loaded as Record<string, unknown>).default\n : null\n if (typeof handler !== 'function') {\n throw new Error(`[registry] Invalid ${kind} module \"${id}\" (missing default export handler)`)\n }\n return handler as T\n}\n\nexport function createLazyModuleSubscriber(\n loadModule: () => Promise<unknown>,\n id: string\n): ModuleSubscriberHandler {\n let handlerPromise: Promise<ModuleSubscriberHandler> | null = null\n return async (payload, ctx) => {\n handlerPromise ??= loadModule().then((loaded) =>\n ensureLazyHandler<ModuleSubscriberHandler>(loaded, 'subscriber', id)\n )\n const handler = await handlerPromise\n return handler(payload, ctx)\n }\n}\n\nexport function createLazyModuleWorker(\n loadModule: () => Promise<unknown>,\n id: string\n): ModuleWorkerHandler {\n let handlerPromise: Promise<ModuleWorkerHandler> | null = null\n return async (job, ctx) => {\n handlerPromise ??= loadModule().then((loaded) =>\n ensureLazyHandler<ModuleWorkerHandler>(loaded, 'worker', id)\n )\n const handler = await handlerPromise\n return handler(job, ctx)\n }\n}\n\n/**\n * Resolves a worker's `metadata.onJobAbandoned` on first use.\n *\n * The generator serializes worker metadata as literals, so a function declared there cannot be\n * emitted inline the way `concurrency` or `lockDuration` are. It is emitted as this thunk instead \u2014\n * the same lazy-import treatment the handler already gets \u2014 and only for workers whose metadata\n * declares the callback, so no other queue acquires one (and with it, a sweep) by accident.\n */\nexport function createLazyModuleWorkerAbandonHook(\n loadModule: () => Promise<unknown>,\n id: string\n): (payload: unknown, info: { jobId: string | null; reason: string }) => Promise<void> {\n let hookPromise: Promise<((payload: unknown, info: { jobId: string | null; reason: string }) => unknown) | null> | null = null\n return async (payload, info) => {\n hookPromise ??= loadModule().then((loaded) => {\n const metadata = (loaded as { metadata?: { onJobAbandoned?: unknown } } | null)?.metadata\n return typeof metadata?.onJobAbandoned === 'function'\n ? (metadata.onJobAbandoned as (payload: unknown, info: { jobId: string | null; reason: string }) => unknown)\n : null\n })\n const hook = await hookPromise\n if (!hook) {\n throw new Error(`[registry] Worker \"${id}\" was registered with an abandoned-job hook but its metadata no longer declares one`)\n }\n await hook(payload, info)\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }