executable-stories-react 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -668,6 +668,11 @@ var story_report_v1_default = {
668
668
  type: "array",
669
669
  items: { $ref: "#/$defs/Ticket" }
670
670
  },
671
+ covers: {
672
+ type: "array",
673
+ items: { type: "string" },
674
+ description: "Product-code paths/globs this scenario exercises."
675
+ },
671
676
  sourceLine: { type: "integer", minimum: 1 },
672
677
  errorMessage: { type: "string" },
673
678
  errorStack: { type: "string" },
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/context/ReportRoot.tsx","../src/context/ReportContext.ts","../src/hooks/useReport.ts","../src/components/ReportSummary.tsx","../src/components/doc/DocNote.tsx","../src/components/doc/DocTag.tsx","../src/components/doc/DocKv.tsx","../src/hooks/useRenderers.ts","../src/components/doc/DocCode.tsx","../src/components/doc/DocTable.tsx","../src/components/doc/DocLink.tsx","../src/components/doc/DocSection.tsx","../src/components/doc/DocMermaid.tsx","../src/components/doc/DocScreenshot.tsx","../src/components/doc/DocCustom.tsx","../src/components/doc/DocEntry.tsx","../src/components/ReportDocEntries.tsx","../src/components/ReportSteps.tsx","../src/components/ReportScenario.tsx","../src/components/ReportScenarioList.tsx","../src/components/ReportFeature.tsx","../src/components/ReportFeatureList.tsx","../src/components/ReportEmpty.tsx","../src/components/ReportSchemaError.tsx","../src/components/Report.tsx","../src/result.ts","../src/schema/story-report.schema.ts","../../executable-stories-formatters/schemas/story-report-v1.json","../src/schema/parse.ts"],"sourcesContent":["/**\n * executable-stories-react — public exports.\n *\n * Drop-in React renderer for StoryReport v1 JSON. Semantic, SSR-safe,\n * themeable via CSS variables. Import the stylesheet once in your root:\n *\n * import \"executable-stories-react/styles.css\";\n */\n\nexport { Report } from \"./components/Report\";\nexport type { ReportProps } from \"./components/Report\";\n\nexport { ReportRoot } from \"./context/ReportRoot\";\nexport type { ReportRootProps } from \"./context/ReportRoot\";\n\nexport { ReportSummary, ReportSummaryView } from \"./components/ReportSummary\";\nexport type { ReportSummaryProps, ReportSummaryViewProps } from \"./components/ReportSummary\";\n\nexport { ReportFeatureList } from \"./components/ReportFeatureList\";\nexport { ReportFeature } from \"./components/ReportFeature\";\nexport type { ReportFeatureProps } from \"./components/ReportFeature\";\n\nexport { ReportScenarioList } from \"./components/ReportScenarioList\";\nexport type { ReportScenarioListProps } from \"./components/ReportScenarioList\";\n\nexport { ReportScenario } from \"./components/ReportScenario\";\nexport type { ReportScenarioProps } from \"./components/ReportScenario\";\n\nexport { ReportSteps, ReportStepItem } from \"./components/ReportSteps\";\nexport type { ReportStepsProps } from \"./components/ReportSteps\";\n\nexport { ReportDocEntries } from \"./components/ReportDocEntries\";\nexport type { ReportDocEntriesProps } from \"./components/ReportDocEntries\";\n\nexport { DocEntry } from \"./components/doc/DocEntry\";\nexport { DocNote } from \"./components/doc/DocNote\";\nexport { DocTag } from \"./components/doc/DocTag\";\nexport { DocKv } from \"./components/doc/DocKv\";\nexport { DocCode } from \"./components/doc/DocCode\";\nexport { DocTable } from \"./components/doc/DocTable\";\nexport { DocLink } from \"./components/doc/DocLink\";\nexport { DocSection } from \"./components/doc/DocSection\";\nexport { DocMermaid } from \"./components/doc/DocMermaid\";\nexport { DocScreenshot } from \"./components/doc/DocScreenshot\";\nexport { DocCustom } from \"./components/doc/DocCustom\";\n\nexport { useCustomRenderers, useBuiltinRenderers } from \"./hooks/useRenderers\";\n\n// Interactive layer (client-only) lives under the dedicated entry point:\n// import { ReportInteractive } from \"executable-stories-react/interactive\";\n// That bundle ships with a top-of-file \"use client\" directive so Next.js\n// App Router recognizes it as a client component.\n\nexport type {\n CustomRenderer,\n CustomRenderers,\n BuiltinRenderers,\n} from \"./renderers\";\n\nexport { ReportEmpty } from \"./components/ReportEmpty\";\nexport type { ReportEmptyProps } from \"./components/ReportEmpty\";\n\nexport { ReportSchemaError } from \"./components/ReportSchemaError\";\nexport type { ReportSchemaErrorProps } from \"./components/ReportSchemaError\";\n\nexport { useReport } from \"./hooks/useReport\";\n\nexport { parseStoryReport } from \"./schema/parse\";\nexport { storyReportSchema, STORY_REPORT_SCHEMA_MAJOR } from \"./schema/story-report.schema\";\n\nexport type { Result, ReportParseError, ReportParseErrorCode } from \"./result\";\nexport { ok, err } from \"./result\";\n\nexport type {\n StoryReport,\n ReportFeature as StoryReportFeature,\n ReportScenario as StoryReportScenario,\n ReportStep as StoryReportStep,\n ReportDocEntry as StoryReportDocEntry,\n ReportSummary as StoryReportSummary,\n} from \"executable-stories-formatters\";\n","import { useMemo, type ReactNode } from \"react\";\nimport type { StoryReport } from \"executable-stories-formatters\";\nimport type { BuiltinRenderers, CustomRenderers } from \"../renderers\";\nimport { ReportContext, type ReportContextValue } from \"./ReportContext\";\n\nexport interface ReportRootProps {\n report: StoryReport;\n customRenderers?: CustomRenderers;\n renderers?: BuiltinRenderers;\n children: ReactNode;\n}\n\nconst EMPTY_CUSTOM: CustomRenderers = {};\nconst EMPTY_RENDERERS: BuiltinRenderers = {};\n\nexport function ReportRoot({\n report,\n customRenderers,\n renderers,\n children,\n}: ReportRootProps) {\n const value = useMemo<ReportContextValue>(\n () => ({\n report,\n customRenderers: customRenderers ?? EMPTY_CUSTOM,\n renderers: renderers ?? EMPTY_RENDERERS,\n }),\n [report, customRenderers, renderers],\n );\n return <ReportContext.Provider value={value}>{children}</ReportContext.Provider>;\n}\n","import { createContext } from \"react\";\nimport type { StoryReport } from \"executable-stories-formatters\";\nimport type { BuiltinRenderers, CustomRenderers } from \"../renderers\";\n\nexport interface ReportContextValue {\n report: StoryReport;\n customRenderers: CustomRenderers;\n renderers: BuiltinRenderers;\n}\n\nexport const ReportContext = createContext<ReportContextValue | null>(null);\n","import { useContext } from \"react\";\nimport { ReportContext } from \"../context/ReportContext\";\n\nexport function useReport() {\n const ctx = useContext(ReportContext);\n if (!ctx) {\n throw new Error(\n \"useReport must be used inside <ReportRoot> or <Report>. Wrap your tree with one of those.\",\n );\n }\n return ctx.report;\n}\n","import type { ReportSummary as ReportSummaryT } from \"executable-stories-formatters\";\nimport { useReport } from \"../hooks/useReport\";\n\nexport interface ReportSummaryProps {\n className?: string;\n}\n\nexport function ReportSummary({ className }: ReportSummaryProps) {\n const report = useReport();\n return (\n <ReportSummaryView\n summary={report.summary}\n {...(className !== undefined && { className })}\n ariaLabel=\"Run summary\"\n />\n );\n}\n\nexport interface ReportSummaryViewProps {\n summary: ReportSummaryT;\n className?: string;\n ariaLabel?: string;\n}\n\nexport function ReportSummaryView({ summary, className, ariaLabel }: ReportSummaryViewProps) {\n return (\n <p\n className={[\"es-report-summary\", className].filter(Boolean).join(\" \")}\n aria-label={ariaLabel}\n >\n <span>\n <strong>{summary.total}</strong> scenario{summary.total === 1 ? \"\" : \"s\"}\n </span>\n {\" · \"}\n <span data-status=\"passed\">{summary.passed} passed</span>\n {\" · \"}\n <span data-status=\"failed\">{summary.failed} failed</span>\n {summary.skipped > 0 ? (\n <>\n {\" · \"}\n <span data-status=\"skipped\">{summary.skipped} skipped</span>\n </>\n ) : null}\n {summary.pending > 0 ? (\n <>\n {\" · \"}\n <span data-status=\"pending\">{summary.pending} pending</span>\n </>\n ) : null}\n </p>\n );\n}\n","import type { ReportDocNote } from \"executable-stories-formatters\";\n\nexport function DocNote({ entry }: { entry: ReportDocNote }) {\n return <p className=\"es-doc es-doc-note\">{entry.text}</p>;\n}\n","import type { ReportDocTag } from \"executable-stories-formatters\";\n\nexport function DocTag({ entry }: { entry: ReportDocTag }) {\n return (\n <ul className=\"es-doc es-tags\" aria-label=\"Tags\">\n {entry.names.map((n) => (\n <li key={n}>{n}</li>\n ))}\n </ul>\n );\n}\n","import type { ReportDocKv } from \"executable-stories-formatters\";\n\nfunction formatValue(value: unknown): string {\n if (value === null) return \"null\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function DocKv({ entry }: { entry: ReportDocKv }) {\n return (\n <dl className=\"es-doc es-doc-kv\">\n <dt>{entry.label}</dt>\n <dd>{formatValue(entry.value)}</dd>\n </dl>\n );\n}\n","import { useContext } from \"react\";\nimport { ReportContext } from \"../context/ReportContext\";\nimport type { BuiltinRenderers, CustomRenderers } from \"../renderers\";\n\nconst EMPTY_CUSTOM: CustomRenderers = {};\nconst EMPTY_RENDERERS: BuiltinRenderers = {};\n\nexport function useCustomRenderers(): CustomRenderers {\n const ctx = useContext(ReportContext);\n return ctx?.customRenderers ?? EMPTY_CUSTOM;\n}\n\nexport function useBuiltinRenderers(): BuiltinRenderers {\n const ctx = useContext(ReportContext);\n return ctx?.renderers ?? EMPTY_RENDERERS;\n}\n","import type { ReportDocCode } from \"executable-stories-formatters\";\nimport { useBuiltinRenderers } from \"../../hooks/useRenderers\";\n\nexport function DocCode({ entry }: { entry: ReportDocCode }) {\n const renderers = useBuiltinRenderers();\n if (renderers.code) {\n return <>{renderers.code(entry)}</>;\n }\n return (\n <figure className=\"es-doc es-doc-code\">\n <figcaption>{entry.label}</figcaption>\n <pre>\n <code className={entry.lang ? `language-${entry.lang}` : undefined}>\n {entry.content}\n </code>\n </pre>\n </figure>\n );\n}\n","import type { ReportDocTable } from \"executable-stories-formatters\";\n\nexport function DocTable({ entry }: { entry: ReportDocTable }) {\n return (\n <figure className=\"es-doc es-doc-table\">\n <figcaption>{entry.label}</figcaption>\n <table>\n <thead>\n <tr>\n {entry.columns.map((c) => (\n <th key={c} scope=\"col\">{c}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {entry.rows.map((row, i) => (\n <tr key={i}>\n {row.map((cell, j) => (\n <td key={j}>{cell}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </figure>\n );\n}\n","import type { ReportDocLink } from \"executable-stories-formatters\";\n\nexport function DocLink({ entry }: { entry: ReportDocLink }) {\n return (\n <a\n className=\"es-doc es-doc-link\"\n href={entry.url}\n rel=\"noreferrer noopener\"\n target=\"_blank\"\n >\n {entry.label}\n </a>\n );\n}\n","import { marked } from \"marked\";\nimport type { ReportDocSection } from \"executable-stories-formatters\";\nimport { useBuiltinRenderers } from \"../../hooks/useRenderers\";\n\n/**\n * Strips the most common dangerous patterns from marked-generated HTML:\n * - <script>...</script> blocks\n * - <style>...</style> blocks\n * - on* event-handler attributes\n * - javascript: URLs on href / src\n *\n * Not a substitute for a full HTML sanitizer (DOMPurify, sanitize-html).\n * For high-untrust input, supply `renderers.section` with your own sanitizer.\n */\nfunction safeMarkdownHtml(markdown: string): string {\n const raw = marked.parse(markdown, { async: false }) as string;\n return raw\n .replace(/<script\\b[^>]*>[\\s\\S]*?<\\/script>/gi, \"\")\n .replace(/<style\\b[^>]*>[\\s\\S]*?<\\/style>/gi, \"\")\n .replace(/\\son[a-z]+\\s*=\\s*\"[^\"]*\"/gi, \"\")\n .replace(/\\son[a-z]+\\s*=\\s*'[^']*'/gi, \"\")\n .replace(/\\son[a-z]+\\s*=\\s*[^\\s>]+/gi, \"\")\n .replace(/(href|src)\\s*=\\s*\"\\s*javascript:[^\"]*\"/gi, '$1=\"#\"')\n .replace(/(href|src)\\s*=\\s*'\\s*javascript:[^']*'/gi, \"$1='#'\");\n}\n\nexport function DocSection({ entry }: { entry: ReportDocSection }) {\n const renderers = useBuiltinRenderers();\n if (renderers.section) {\n return <>{renderers.section(entry)}</>;\n }\n const html = safeMarkdownHtml(entry.markdown);\n return (\n <section className=\"es-doc es-doc-section\" aria-label={entry.title}>\n {entry.title ? <h4 className=\"es-doc-section-title\">{entry.title}</h4> : null}\n <div\n className=\"es-doc-section-content\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </section>\n );\n}\n","import type { ReportDocMermaid } from \"executable-stories-formatters\";\nimport { useBuiltinRenderers } from \"../../hooks/useRenderers\";\n\n/**\n * Renders mermaid source as a semantic <pre data-mermaid> by default.\n *\n * AI agents and screen readers get the raw source. To render the diagram\n * visually, supply a `renderers.mermaid` prop with a client-only component\n * (e.g., one that dynamically imports the mermaid library on mount).\n */\nexport function DocMermaid({ entry }: { entry: ReportDocMermaid }) {\n const renderers = useBuiltinRenderers();\n if (renderers.mermaid) {\n return <>{renderers.mermaid(entry)}</>;\n }\n return (\n <figure\n className=\"es-doc es-doc-mermaid\"\n aria-label={entry.title ?? \"Diagram\"}\n >\n {entry.title ? <figcaption>{entry.title}</figcaption> : null}\n <pre data-mermaid>{entry.code}</pre>\n </figure>\n );\n}\n","import type { ReportDocScreenshot } from \"executable-stories-formatters\";\n\nexport function DocScreenshot({ entry }: { entry: ReportDocScreenshot }) {\n return (\n <figure className=\"es-doc es-doc-screenshot\">\n <img src={entry.path} alt={entry.alt ?? \"\"} loading=\"lazy\" />\n {entry.alt ? <figcaption>{entry.alt}</figcaption> : null}\n </figure>\n );\n}\n","import type { ReportDocCustom } from \"executable-stories-formatters\";\nimport { useCustomRenderers } from \"../../hooks/useRenderers\";\n\nexport function DocCustom({ entry }: { entry: ReportDocCustom }) {\n const renderers = useCustomRenderers();\n const renderer = renderers[entry.type];\n if (renderer) {\n return <>{renderer(entry)}</>;\n }\n return (\n <div className=\"es-doc es-doc-custom\" data-type={entry.type}>\n <p className=\"es-doc-custom-type\">{entry.type}</p>\n <pre>{safeStringify(entry.data)}</pre>\n </div>\n );\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n","import type { ReportDocEntry } from \"executable-stories-formatters\";\nimport { DocNote } from \"./DocNote\";\nimport { DocTag } from \"./DocTag\";\nimport { DocKv } from \"./DocKv\";\nimport { DocCode } from \"./DocCode\";\nimport { DocTable } from \"./DocTable\";\nimport { DocLink } from \"./DocLink\";\nimport { DocSection } from \"./DocSection\";\nimport { DocMermaid } from \"./DocMermaid\";\nimport { DocScreenshot } from \"./DocScreenshot\";\nimport { DocCustom } from \"./DocCustom\";\n\nexport function DocEntry({ entry }: { entry: ReportDocEntry }) {\n switch (entry.kind) {\n case \"note\":\n return <DocNote entry={entry} />;\n case \"tag\":\n return <DocTag entry={entry} />;\n case \"kv\":\n return <DocKv entry={entry} />;\n case \"code\":\n return <DocCode entry={entry} />;\n case \"table\":\n return <DocTable entry={entry} />;\n case \"link\":\n return <DocLink entry={entry} />;\n case \"section\":\n return <DocSection entry={entry} />;\n case \"mermaid\":\n return <DocMermaid entry={entry} />;\n case \"screenshot\":\n return <DocScreenshot entry={entry} />;\n case \"custom\":\n return <DocCustom entry={entry} />;\n }\n}\n","import type { ReportDocEntry } from \"executable-stories-formatters\";\nimport { DocEntry } from \"./doc/DocEntry\";\n\nexport interface ReportDocEntriesProps {\n entries: readonly ReportDocEntry[];\n}\n\nexport function ReportDocEntries({ entries }: ReportDocEntriesProps) {\n if (entries.length === 0) return null;\n return (\n <>\n {entries.map((entry, i) => (\n <DocEntry key={i} entry={entry} />\n ))}\n </>\n );\n}\n","import type { ReportStep, ReportScenario } from \"executable-stories-formatters\";\nimport { ReportDocEntries } from \"./ReportDocEntries\";\n\nexport interface ReportStepsProps {\n scenario: ReportScenario;\n}\n\nexport function ReportSteps({ scenario }: ReportStepsProps) {\n if (scenario.steps.length === 0) return null;\n return (\n <ol className=\"es-steps\">\n {scenario.steps.map((step) => (\n <ReportStepItem key={step.id} step={step} />\n ))}\n </ol>\n );\n}\n\nexport function ReportStepItem({ step }: { step: ReportStep }) {\n return (\n <li\n id={step.id}\n className={`es-step es-step-${step.status}`}\n data-status={step.status}\n >\n <span className=\"es-step-keyword\">{step.keyword}</span>\n <span className=\"es-step-text\">{step.text}</span>\n {step.errorMessage ? (\n <pre className=\"es-scenario-error\" role=\"alert\">{step.errorMessage}</pre>\n ) : null}\n {step.docEntries.length > 0 ? (\n <div className=\"es-step-docs\">\n <ReportDocEntries entries={step.docEntries} />\n </div>\n ) : null}\n </li>\n );\n}\n","import type { ReportScenario as ReportScenarioT } from \"executable-stories-formatters\";\nimport { ReportSteps } from \"./ReportSteps\";\nimport { ReportDocEntries } from \"./ReportDocEntries\";\n\nexport interface ReportScenarioProps {\n scenario: ReportScenarioT;\n}\n\nconst STATUS_LABEL: Record<ReportScenarioT[\"status\"], string> = {\n passed: \"Passed\",\n failed: \"Failed\",\n skipped: \"Skipped\",\n pending: \"Pending\",\n};\n\nexport function ReportScenario({ scenario }: ReportScenarioProps) {\n const titleId = `${scenario.id}-title`;\n return (\n <article\n id={scenario.id}\n className={`es-scenario es-status-${scenario.status}`}\n aria-labelledby={titleId}\n data-status={scenario.status}\n >\n <h3 id={titleId} className=\"es-scenario-title\">\n <span>{scenario.title}</span>\n <span className=\"es-scenario-status\" aria-label={`Status: ${STATUS_LABEL[scenario.status]}`}>\n {STATUS_LABEL[scenario.status]}\n </span>\n </h3>\n {scenario.tags.length > 0 ? (\n <ul className=\"es-tags\" aria-label=\"Tags\">\n {scenario.tags.map((t) => (\n <li key={t}>{t}</li>\n ))}\n </ul>\n ) : null}\n {scenario.errorMessage ? (\n <pre className=\"es-scenario-error\" role=\"alert\">{scenario.errorMessage}</pre>\n ) : null}\n {scenario.docEntries.length > 0 ? (\n <div className=\"es-scenario-docs\">\n <ReportDocEntries entries={scenario.docEntries} />\n </div>\n ) : null}\n <ReportSteps scenario={scenario} />\n </article>\n );\n}\n","import type { ReportFeature } from \"executable-stories-formatters\";\nimport { ReportScenario } from \"./ReportScenario\";\n\nexport interface ReportScenarioListProps {\n feature: ReportFeature;\n}\n\nexport function ReportScenarioList({ feature }: ReportScenarioListProps) {\n return (\n <>\n {feature.scenarios.map((scenario) => (\n <ReportScenario key={scenario.id} scenario={scenario} />\n ))}\n </>\n );\n}\n","import type { ReportFeature as ReportFeatureT } from \"executable-stories-formatters\";\nimport { ReportScenarioList } from \"./ReportScenarioList\";\nimport { ReportSummaryView } from \"./ReportSummary\";\n\nexport interface ReportFeatureProps {\n feature: ReportFeatureT;\n}\n\nexport function ReportFeature({ feature }: ReportFeatureProps) {\n const titleId = `${feature.id}-title`;\n return (\n <section\n id={feature.id}\n className=\"es-feature\"\n aria-labelledby={titleId}\n >\n <h2 id={titleId} className=\"es-feature-title\">{feature.title}</h2>\n <p className=\"es-feature-source\">{feature.sourceFile}</p>\n <ReportSummaryView summary={feature.summary} className=\"es-feature-summary\" />\n <ReportScenarioList feature={feature} />\n </section>\n );\n}\n","import { useReport } from \"../hooks/useReport\";\nimport { ReportFeature } from \"./ReportFeature\";\n\nexport function ReportFeatureList() {\n const report = useReport();\n return (\n <>\n {report.features.map((feature) => (\n <ReportFeature key={feature.id} feature={feature} />\n ))}\n </>\n );\n}\n","export interface ReportEmptyProps {\n message?: string;\n}\n\nexport function ReportEmpty({ message }: ReportEmptyProps) {\n return (\n <section className=\"es-empty\" aria-live=\"polite\">\n <p>{message ?? \"No scenarios in this report.\"}</p>\n </section>\n );\n}\n","import type { ReportParseError } from \"../result\";\n\nexport interface ReportSchemaErrorProps {\n error: ReportParseError;\n}\n\nexport function ReportSchemaError({ error }: ReportSchemaErrorProps) {\n return (\n <section className=\"es-schema-error\" role=\"alert\" aria-live=\"assertive\">\n <p>\n <strong>Report could not be displayed.</strong>\n </p>\n <p>{error.message}</p>\n {error.code === \"SCHEMA_VERSION_MISMATCH\" ? (\n <p>\n The report bundle is newer than this version of <code>executable-stories-react</code>.\n Upgrade the package, or regenerate the report with an older formatters CLI.\n </p>\n ) : null}\n {error.issues && error.issues.length > 0 ? (\n <details>\n <summary>{error.issues.length} validation issue{error.issues.length === 1 ? \"\" : \"s\"}</summary>\n <pre>\n {error.issues\n .slice(0, 20)\n .map((i) => `${i.path}: ${i.message}`)\n .join(\"\\n\")}\n </pre>\n </details>\n ) : null}\n </section>\n );\n}\n","import type { StoryReport } from \"executable-stories-formatters\";\nimport type { Result } from \"../result\";\nimport type { BuiltinRenderers, CustomRenderers } from \"../renderers\";\nimport { ReportRoot } from \"../context/ReportRoot\";\nimport { ReportSummary } from \"./ReportSummary\";\nimport { ReportFeatureList } from \"./ReportFeatureList\";\nimport { ReportEmpty } from \"./ReportEmpty\";\nimport { ReportSchemaError } from \"./ReportSchemaError\";\n\nexport interface ReportProps {\n /** A StoryReport, or a Result-wrapped one (e.g., from parseStoryReport). */\n report: StoryReport | Result<StoryReport>;\n /** Renderers keyed by `story.custom({ type })` strings. */\n customRenderers?: CustomRenderers;\n /** Optional overrides for the heavy built-ins (mermaid, code, section). */\n renderers?: BuiltinRenderers;\n /** Optional class on the <main> landmark for layout positioning. */\n className?: string;\n /** Optional override title. */\n title?: string;\n /** Optional theme attribute scope. Use to force \"light\" or \"dark\". */\n dataTheme?: \"light\" | \"dark\";\n}\n\nfunction isResult(value: ReportProps[\"report\"]): value is Result<StoryReport> {\n return typeof value === \"object\"\n && value !== null\n && \"ok\" in (value as object)\n && typeof (value as { ok: unknown }).ok === \"boolean\";\n}\n\nexport function Report(props: ReportProps) {\n const { report, customRenderers, renderers, className, title, dataTheme } = props;\n if (isResult(report)) {\n if (!report.ok) {\n return (\n <main\n className={[\"es-report\", className].filter(Boolean).join(\" \")}\n aria-label={title ?? \"Test report\"}\n data-theme={dataTheme}\n >\n <ReportSchemaError error={report.error} />\n </main>\n );\n }\n return (\n <ReportView\n report={report.data}\n customRenderers={customRenderers}\n renderers={renderers}\n className={className}\n title={title}\n dataTheme={dataTheme}\n />\n );\n }\n return (\n <ReportView\n report={report}\n customRenderers={customRenderers}\n renderers={renderers}\n className={className}\n title={title}\n dataTheme={dataTheme}\n />\n );\n}\n\ninterface ReportViewProps {\n report: StoryReport;\n customRenderers?: CustomRenderers;\n renderers?: BuiltinRenderers;\n className?: string;\n title?: string;\n dataTheme?: \"light\" | \"dark\";\n}\n\nfunction ReportView({\n report,\n customRenderers,\n renderers,\n className,\n title,\n dataTheme,\n}: ReportViewProps) {\n const hasContent = report.features.length > 0;\n return (\n <ReportRoot report={report} customRenderers={customRenderers} renderers={renderers}>\n <main\n className={[\"es-report\", className].filter(Boolean).join(\" \")}\n aria-label={title ?? \"Test report\"}\n data-theme={dataTheme}\n >\n <header className=\"es-report-header\">\n <h1>{title ?? \"Story Report\"}</h1>\n <ReportSummary />\n </header>\n {hasContent ? <ReportFeatureList /> : <ReportEmpty />}\n </main>\n </ReportRoot>\n );\n}\n","/**\n * Result<T> — explicit success/error type matching the cookbook convention.\n *\n * Used at the boundary where a StoryReport is parsed: the consumer hands us\n * an unknown value (file contents, fetch body, prop) and we return a Result.\n */\n\nexport type Result<T, E = ReportParseError> =\n | { ok: true; data: T }\n | { ok: false; error: E };\n\nexport interface ReportParseError {\n message: string;\n code: ReportParseErrorCode;\n issues?: readonly { path: string; message: string }[];\n}\n\nexport type ReportParseErrorCode =\n | \"INVALID_INPUT\"\n | \"SCHEMA_VERSION_MISMATCH\"\n | \"VALIDATION_FAILED\";\n\nexport const ok = <T>(data: T): Result<T> => ({ ok: true, data });\nexport const err = (error: ReportParseError): Result<never> => ({ ok: false, error });\n","/**\n * StoryReport runtime Zod schema, derived from the canonical JSON Schema\n * at executable-stories-formatters/schemas/story-report-v1.json.\n *\n * Uses z.fromJSONSchema (experimental in Zod 4.x). If the API changes upstream,\n * only this file needs updating — the rest of the package consumes\n * `storyReportSchema` and `StoryReportSchemaShape` via parse.ts.\n *\n * The JSON Schema is bundled at build time by tsup (resolveJsonModule).\n */\n\nimport { z } from \"zod\";\nimport schemaJson from \"../../../executable-stories-formatters/schemas/story-report-v1.json\" with { type: \"json\" };\n\nconst compiled = z.fromJSONSchema(schemaJson as Parameters<typeof z.fromJSONSchema>[0]);\n\nexport const storyReportSchema = compiled;\nexport type StoryReportSchemaShape = z.infer<typeof compiled>;\n\nexport const STORY_REPORT_SCHEMA_MAJOR = 1 as const;\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"$id\": \"https://executable-stories.dev/schemas/story-report-v1.schema.json\",\n \"title\": \"StoryReport\",\n \"description\": \"Pre-grouped, denormalized report shape consumed by UI renderers (React, Svelte, Vue, etc.). Stable public contract — additive-only within a major. Distinct from internal TestRunResult.\",\n \"type\": \"object\",\n \"$ref\": \"#/$defs/StoryReport\",\n \"$defs\": {\n \"StoryReport\": {\n \"type\": \"object\",\n \"description\": \"Top-level report containing all features, runtime metadata, and a pre-computed summary.\",\n \"properties\": {\n \"schemaVersion\": {\n \"type\": \"string\",\n \"pattern\": \"^1\\\\.[0-9]+$\",\n \"description\": \"Schema version as 'major.minor'. Major bumps are breaking; minors are additive-only. UI packages must accept any 1.x.\"\n },\n \"runId\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Unique deterministic identifier for this run.\"\n },\n \"startedAtMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Run start time as Unix epoch milliseconds.\"\n },\n \"finishedAtMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Run finish time as Unix epoch milliseconds.\"\n },\n \"durationMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Total run duration in milliseconds.\"\n },\n \"projectRoot\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Absolute path to the project root (for context only; relative paths in features.sourceFile are preferred).\"\n },\n \"packageVersion\": {\n \"type\": \"string\",\n \"description\": \"Version of the package under test, if known.\"\n },\n \"gitSha\": {\n \"type\": \"string\",\n \"description\": \"Git commit SHA at the time of the run.\"\n },\n \"ci\": {\n \"$ref\": \"#/$defs/CIInfo\"\n },\n \"coverage\": {\n \"$ref\": \"#/$defs/CoverageSummary\"\n },\n \"summary\": {\n \"$ref\": \"#/$defs/Summary\",\n \"description\": \"Pre-computed counts across all features and scenarios.\"\n },\n \"features\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Feature\" },\n \"description\": \"Features grouped by sourceFile, sorted by title.\"\n }\n },\n \"required\": [\"schemaVersion\", \"runId\", \"startedAtMs\", \"finishedAtMs\", \"durationMs\", \"projectRoot\", \"summary\", \"features\"],\n \"additionalProperties\": false\n },\n \"Summary\": {\n \"type\": \"object\",\n \"description\": \"Counts by status. Sums equal 'total'.\",\n \"properties\": {\n \"total\": { \"type\": \"integer\", \"minimum\": 0 },\n \"passed\": { \"type\": \"integer\", \"minimum\": 0 },\n \"failed\": { \"type\": \"integer\", \"minimum\": 0 },\n \"skipped\": { \"type\": \"integer\", \"minimum\": 0 },\n \"pending\": { \"type\": \"integer\", \"minimum\": 0 },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 }\n },\n \"required\": [\"total\", \"passed\", \"failed\", \"skipped\", \"pending\", \"durationMs\"],\n \"additionalProperties\": false\n },\n \"Feature\": {\n \"type\": \"object\",\n \"description\": \"A group of scenarios from the same source file.\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Stable slug derived from the relative source path. Suitable for use as a deep-link anchor.\"\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Display title. Derived from describe block when present, otherwise the file basename.\"\n },\n \"sourceFile\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Source path, relative to projectRoot when possible.\"\n },\n \"summary\": { \"$ref\": \"#/$defs/Summary\" },\n \"scenarios\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Scenario\" },\n \"description\": \"Scenarios in this feature, in declaration order.\"\n }\n },\n \"required\": [\"id\", \"title\", \"sourceFile\", \"summary\", \"scenarios\"],\n \"additionalProperties\": false\n },\n \"Scenario\": {\n \"type\": \"object\",\n \"description\": \"A single scenario with its steps, story-level doc entries, and attachments.\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Stable identifier: '<feature.id>--<slug-of-title>'. Suitable for use as a deep-link anchor.\"\n },\n \"title\": { \"type\": \"string\", \"minLength\": 1 },\n \"status\": { \"$ref\": \"#/$defs/TestStatus\" },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 },\n \"tags\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"description\": \"Normalized tags, deduplicated, lowercased.\"\n },\n \"tickets\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Ticket\" }\n },\n \"sourceLine\": { \"type\": \"integer\", \"minimum\": 1 },\n \"errorMessage\": { \"type\": \"string\" },\n \"errorStack\": { \"type\": \"string\" },\n \"retry\": { \"type\": \"integer\", \"minimum\": 0 },\n \"retries\": { \"type\": \"integer\", \"minimum\": 0 },\n \"docEntries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" },\n \"description\": \"Story-level doc entries (rendered before steps).\"\n },\n \"steps\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Step\" }\n },\n \"attachments\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Attachment\" }\n }\n },\n \"required\": [\"id\", \"title\", \"status\", \"durationMs\", \"tags\", \"retry\", \"retries\", \"docEntries\", \"steps\", \"attachments\"],\n \"additionalProperties\": false\n },\n \"Step\": {\n \"type\": \"object\",\n \"description\": \"A single BDD step.\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"minLength\": 1 },\n \"index\": { \"type\": \"integer\", \"minimum\": 0 },\n \"keyword\": { \"$ref\": \"#/$defs/StepKeyword\" },\n \"text\": { \"type\": \"string\" },\n \"status\": { \"$ref\": \"#/$defs/TestStatus\" },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 },\n \"errorMessage\": { \"type\": \"string\" },\n \"mode\": { \"$ref\": \"#/$defs/StepMode\" },\n \"docEntries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" },\n \"description\": \"Doc entries attached to this step.\"\n }\n },\n \"required\": [\"id\", \"index\", \"keyword\", \"text\", \"status\", \"durationMs\", \"docEntries\"],\n \"additionalProperties\": false\n },\n \"StepKeyword\": {\n \"type\": \"string\",\n \"enum\": [\"Given\", \"When\", \"Then\", \"And\", \"But\"]\n },\n \"StepMode\": {\n \"type\": \"string\",\n \"enum\": [\"normal\", \"skip\", \"only\", \"todo\", \"fails\", \"concurrent\"]\n },\n \"TestStatus\": {\n \"type\": \"string\",\n \"enum\": [\"passed\", \"failed\", \"skipped\", \"pending\"]\n },\n \"Ticket\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"minLength\": 1 },\n \"url\": { \"type\": \"string\" }\n },\n \"required\": [\"id\"],\n \"additionalProperties\": false\n },\n \"Attachment\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"mediaType\": { \"type\": \"string\", \"minLength\": 1 },\n \"body\": { \"type\": \"string\" },\n \"contentEncoding\": {\n \"type\": \"string\",\n \"enum\": [\"BASE64\", \"IDENTITY\"]\n }\n },\n \"required\": [\"name\", \"mediaType\", \"body\", \"contentEncoding\"],\n \"additionalProperties\": false\n },\n \"CIInfo\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"buildNumber\": { \"type\": \"string\" },\n \"branch\": { \"type\": \"string\" },\n \"commitSha\": { \"type\": \"string\" },\n \"prNumber\": { \"type\": \"string\" }\n },\n \"required\": [\"name\"],\n \"additionalProperties\": false\n },\n \"CoverageSummary\": {\n \"type\": \"object\",\n \"properties\": {\n \"linesPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"branchesPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"functionsPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"statementsPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 }\n },\n \"additionalProperties\": false\n },\n \"DocPhase\": {\n \"type\": \"string\",\n \"enum\": [\"static\", \"runtime\"]\n },\n \"DocEntry\": {\n \"oneOf\": [\n { \"$ref\": \"#/$defs/DocNote\" },\n { \"$ref\": \"#/$defs/DocTag\" },\n { \"$ref\": \"#/$defs/DocKv\" },\n { \"$ref\": \"#/$defs/DocCode\" },\n { \"$ref\": \"#/$defs/DocTable\" },\n { \"$ref\": \"#/$defs/DocLink\" },\n { \"$ref\": \"#/$defs/DocSection\" },\n { \"$ref\": \"#/$defs/DocMermaid\" },\n { \"$ref\": \"#/$defs/DocScreenshot\" },\n { \"$ref\": \"#/$defs/DocCustom\" }\n ]\n },\n \"DocNote\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"note\" },\n \"text\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"text\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocTag\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"tag\" },\n \"names\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"names\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocKv\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"kv\" },\n \"label\": { \"type\": \"string\" },\n \"value\": {},\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"value\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocCode\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"code\" },\n \"label\": { \"type\": \"string\" },\n \"content\": { \"type\": \"string\" },\n \"lang\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"content\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocTable\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"table\" },\n \"label\": { \"type\": \"string\" },\n \"columns\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n \"rows\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"columns\", \"rows\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocLink\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"link\" },\n \"label\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"url\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocSection\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"section\" },\n \"title\": { \"type\": \"string\" },\n \"markdown\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"title\", \"markdown\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocMermaid\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"mermaid\" },\n \"code\": { \"type\": \"string\" },\n \"title\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"code\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocScreenshot\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"screenshot\" },\n \"path\": { \"type\": \"string\" },\n \"alt\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"path\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocCustom\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"custom\" },\n \"type\": { \"type\": \"string\", \"minLength\": 1 },\n \"data\": {},\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"type\", \"data\", \"phase\"],\n \"additionalProperties\": false\n }\n }\n}\n","/**\n * parseStoryReport — boundary validator. Accepts unknown input (file contents,\n * fetch body, prop) and returns a Result-typed StoryReport.\n */\n\nimport type { StoryReport } from \"executable-stories-formatters\";\nimport type { Result } from \"../result\";\nimport { ok, err } from \"../result\";\nimport { storyReportSchema, STORY_REPORT_SCHEMA_MAJOR } from \"./story-report.schema\";\n\nexport function parseStoryReport(input: unknown): Result<StoryReport> {\n if (input === null || typeof input !== \"object\") {\n return err({\n message: \"Expected a StoryReport object.\",\n code: \"INVALID_INPUT\",\n });\n }\n\n const versionRaw = (input as { schemaVersion?: unknown }).schemaVersion;\n if (typeof versionRaw === \"string\") {\n const major = versionRaw.split(\".\")[0];\n if (major !== String(STORY_REPORT_SCHEMA_MAJOR)) {\n return err({\n message: `Schema major ${major} is not supported by this version of executable-stories-react (expected ${STORY_REPORT_SCHEMA_MAJOR}.x). Upgrade the package.`,\n code: \"SCHEMA_VERSION_MISMATCH\",\n });\n }\n }\n\n const parsed = storyReportSchema.safeParse(input);\n if (parsed.success) {\n return ok(parsed.data as StoryReport);\n }\n\n const issues = parsed.error.issues.map((i) => ({\n path: i.path.join(\".\") || \"/\",\n message: i.message,\n }));\n\n return err({\n message: `StoryReport failed validation (${issues.length} issue${issues.length === 1 ? \"\" : \"s\"}).`,\n code: \"VALIDATION_FAILED\",\n issues,\n });\n}\n"],"mappings":"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","names":["import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","EMPTY_CUSTOM","EMPTY_RENDERERS","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/context/ReportRoot.tsx","../src/context/ReportContext.ts","../src/hooks/useReport.ts","../src/components/ReportSummary.tsx","../src/components/doc/DocNote.tsx","../src/components/doc/DocTag.tsx","../src/components/doc/DocKv.tsx","../src/hooks/useRenderers.ts","../src/components/doc/DocCode.tsx","../src/components/doc/DocTable.tsx","../src/components/doc/DocLink.tsx","../src/components/doc/DocSection.tsx","../src/components/doc/DocMermaid.tsx","../src/components/doc/DocScreenshot.tsx","../src/components/doc/DocCustom.tsx","../src/components/doc/DocEntry.tsx","../src/components/ReportDocEntries.tsx","../src/components/ReportSteps.tsx","../src/components/ReportScenario.tsx","../src/components/ReportScenarioList.tsx","../src/components/ReportFeature.tsx","../src/components/ReportFeatureList.tsx","../src/components/ReportEmpty.tsx","../src/components/ReportSchemaError.tsx","../src/components/Report.tsx","../src/result.ts","../src/schema/story-report.schema.ts","../../executable-stories-formatters/schemas/story-report-v1.json","../src/schema/parse.ts"],"sourcesContent":["/**\n * executable-stories-react — public exports.\n *\n * Drop-in React renderer for StoryReport v1 JSON. Semantic, SSR-safe,\n * themeable via CSS variables. Import the stylesheet once in your root:\n *\n * import \"executable-stories-react/styles.css\";\n */\n\nexport { Report } from \"./components/Report\";\nexport type { ReportProps } from \"./components/Report\";\n\nexport { ReportRoot } from \"./context/ReportRoot\";\nexport type { ReportRootProps } from \"./context/ReportRoot\";\n\nexport { ReportSummary, ReportSummaryView } from \"./components/ReportSummary\";\nexport type { ReportSummaryProps, ReportSummaryViewProps } from \"./components/ReportSummary\";\n\nexport { ReportFeatureList } from \"./components/ReportFeatureList\";\nexport { ReportFeature } from \"./components/ReportFeature\";\nexport type { ReportFeatureProps } from \"./components/ReportFeature\";\n\nexport { ReportScenarioList } from \"./components/ReportScenarioList\";\nexport type { ReportScenarioListProps } from \"./components/ReportScenarioList\";\n\nexport { ReportScenario } from \"./components/ReportScenario\";\nexport type { ReportScenarioProps } from \"./components/ReportScenario\";\n\nexport { ReportSteps, ReportStepItem } from \"./components/ReportSteps\";\nexport type { ReportStepsProps } from \"./components/ReportSteps\";\n\nexport { ReportDocEntries } from \"./components/ReportDocEntries\";\nexport type { ReportDocEntriesProps } from \"./components/ReportDocEntries\";\n\nexport { DocEntry } from \"./components/doc/DocEntry\";\nexport { DocNote } from \"./components/doc/DocNote\";\nexport { DocTag } from \"./components/doc/DocTag\";\nexport { DocKv } from \"./components/doc/DocKv\";\nexport { DocCode } from \"./components/doc/DocCode\";\nexport { DocTable } from \"./components/doc/DocTable\";\nexport { DocLink } from \"./components/doc/DocLink\";\nexport { DocSection } from \"./components/doc/DocSection\";\nexport { DocMermaid } from \"./components/doc/DocMermaid\";\nexport { DocScreenshot } from \"./components/doc/DocScreenshot\";\nexport { DocCustom } from \"./components/doc/DocCustom\";\n\nexport { useCustomRenderers, useBuiltinRenderers } from \"./hooks/useRenderers\";\n\n// Interactive layer (client-only) lives under the dedicated entry point:\n// import { ReportInteractive } from \"executable-stories-react/interactive\";\n// That bundle ships with a top-of-file \"use client\" directive so Next.js\n// App Router recognizes it as a client component.\n\nexport type {\n CustomRenderer,\n CustomRenderers,\n BuiltinRenderers,\n} from \"./renderers\";\n\nexport { ReportEmpty } from \"./components/ReportEmpty\";\nexport type { ReportEmptyProps } from \"./components/ReportEmpty\";\n\nexport { ReportSchemaError } from \"./components/ReportSchemaError\";\nexport type { ReportSchemaErrorProps } from \"./components/ReportSchemaError\";\n\nexport { useReport } from \"./hooks/useReport\";\n\nexport { parseStoryReport } from \"./schema/parse\";\nexport { storyReportSchema, STORY_REPORT_SCHEMA_MAJOR } from \"./schema/story-report.schema\";\n\nexport type { Result, ReportParseError, ReportParseErrorCode } from \"./result\";\nexport { ok, err } from \"./result\";\n\nexport type {\n StoryReport,\n ReportFeature as StoryReportFeature,\n ReportScenario as StoryReportScenario,\n ReportStep as StoryReportStep,\n ReportDocEntry as StoryReportDocEntry,\n ReportSummary as StoryReportSummary,\n} from \"executable-stories-formatters\";\n","import { useMemo, type ReactNode } from \"react\";\nimport type { StoryReport } from \"executable-stories-formatters\";\nimport type { BuiltinRenderers, CustomRenderers } from \"../renderers\";\nimport { ReportContext, type ReportContextValue } from \"./ReportContext\";\n\nexport interface ReportRootProps {\n report: StoryReport;\n customRenderers?: CustomRenderers;\n renderers?: BuiltinRenderers;\n children: ReactNode;\n}\n\nconst EMPTY_CUSTOM: CustomRenderers = {};\nconst EMPTY_RENDERERS: BuiltinRenderers = {};\n\nexport function ReportRoot({\n report,\n customRenderers,\n renderers,\n children,\n}: ReportRootProps) {\n const value = useMemo<ReportContextValue>(\n () => ({\n report,\n customRenderers: customRenderers ?? EMPTY_CUSTOM,\n renderers: renderers ?? EMPTY_RENDERERS,\n }),\n [report, customRenderers, renderers],\n );\n return <ReportContext.Provider value={value}>{children}</ReportContext.Provider>;\n}\n","import { createContext } from \"react\";\nimport type { StoryReport } from \"executable-stories-formatters\";\nimport type { BuiltinRenderers, CustomRenderers } from \"../renderers\";\n\nexport interface ReportContextValue {\n report: StoryReport;\n customRenderers: CustomRenderers;\n renderers: BuiltinRenderers;\n}\n\nexport const ReportContext = createContext<ReportContextValue | null>(null);\n","import { useContext } from \"react\";\nimport { ReportContext } from \"../context/ReportContext\";\n\nexport function useReport() {\n const ctx = useContext(ReportContext);\n if (!ctx) {\n throw new Error(\n \"useReport must be used inside <ReportRoot> or <Report>. Wrap your tree with one of those.\",\n );\n }\n return ctx.report;\n}\n","import type { ReportSummary as ReportSummaryT } from \"executable-stories-formatters\";\nimport { useReport } from \"../hooks/useReport\";\n\nexport interface ReportSummaryProps {\n className?: string;\n}\n\nexport function ReportSummary({ className }: ReportSummaryProps) {\n const report = useReport();\n return (\n <ReportSummaryView\n summary={report.summary}\n {...(className !== undefined && { className })}\n ariaLabel=\"Run summary\"\n />\n );\n}\n\nexport interface ReportSummaryViewProps {\n summary: ReportSummaryT;\n className?: string;\n ariaLabel?: string;\n}\n\nexport function ReportSummaryView({ summary, className, ariaLabel }: ReportSummaryViewProps) {\n return (\n <p\n className={[\"es-report-summary\", className].filter(Boolean).join(\" \")}\n aria-label={ariaLabel}\n >\n <span>\n <strong>{summary.total}</strong> scenario{summary.total === 1 ? \"\" : \"s\"}\n </span>\n {\" · \"}\n <span data-status=\"passed\">{summary.passed} passed</span>\n {\" · \"}\n <span data-status=\"failed\">{summary.failed} failed</span>\n {summary.skipped > 0 ? (\n <>\n {\" · \"}\n <span data-status=\"skipped\">{summary.skipped} skipped</span>\n </>\n ) : null}\n {summary.pending > 0 ? (\n <>\n {\" · \"}\n <span data-status=\"pending\">{summary.pending} pending</span>\n </>\n ) : null}\n </p>\n );\n}\n","import type { ReportDocNote } from \"executable-stories-formatters\";\n\nexport function DocNote({ entry }: { entry: ReportDocNote }) {\n return <p className=\"es-doc es-doc-note\">{entry.text}</p>;\n}\n","import type { ReportDocTag } from \"executable-stories-formatters\";\n\nexport function DocTag({ entry }: { entry: ReportDocTag }) {\n return (\n <ul className=\"es-doc es-tags\" aria-label=\"Tags\">\n {entry.names.map((n) => (\n <li key={n}>{n}</li>\n ))}\n </ul>\n );\n}\n","import type { ReportDocKv } from \"executable-stories-formatters\";\n\nfunction formatValue(value: unknown): string {\n if (value === null) return \"null\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function DocKv({ entry }: { entry: ReportDocKv }) {\n return (\n <dl className=\"es-doc es-doc-kv\">\n <dt>{entry.label}</dt>\n <dd>{formatValue(entry.value)}</dd>\n </dl>\n );\n}\n","import { useContext } from \"react\";\nimport { ReportContext } from \"../context/ReportContext\";\nimport type { BuiltinRenderers, CustomRenderers } from \"../renderers\";\n\nconst EMPTY_CUSTOM: CustomRenderers = {};\nconst EMPTY_RENDERERS: BuiltinRenderers = {};\n\nexport function useCustomRenderers(): CustomRenderers {\n const ctx = useContext(ReportContext);\n return ctx?.customRenderers ?? EMPTY_CUSTOM;\n}\n\nexport function useBuiltinRenderers(): BuiltinRenderers {\n const ctx = useContext(ReportContext);\n return ctx?.renderers ?? EMPTY_RENDERERS;\n}\n","import type { ReportDocCode } from \"executable-stories-formatters\";\nimport { useBuiltinRenderers } from \"../../hooks/useRenderers\";\n\nexport function DocCode({ entry }: { entry: ReportDocCode }) {\n const renderers = useBuiltinRenderers();\n if (renderers.code) {\n return <>{renderers.code(entry)}</>;\n }\n return (\n <figure className=\"es-doc es-doc-code\">\n <figcaption>{entry.label}</figcaption>\n <pre>\n <code className={entry.lang ? `language-${entry.lang}` : undefined}>\n {entry.content}\n </code>\n </pre>\n </figure>\n );\n}\n","import type { ReportDocTable } from \"executable-stories-formatters\";\n\nexport function DocTable({ entry }: { entry: ReportDocTable }) {\n return (\n <figure className=\"es-doc es-doc-table\">\n <figcaption>{entry.label}</figcaption>\n <table>\n <thead>\n <tr>\n {entry.columns.map((c) => (\n <th key={c} scope=\"col\">{c}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {entry.rows.map((row, i) => (\n <tr key={i}>\n {row.map((cell, j) => (\n <td key={j}>{cell}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </figure>\n );\n}\n","import type { ReportDocLink } from \"executable-stories-formatters\";\n\nexport function DocLink({ entry }: { entry: ReportDocLink }) {\n return (\n <a\n className=\"es-doc es-doc-link\"\n href={entry.url}\n rel=\"noreferrer noopener\"\n target=\"_blank\"\n >\n {entry.label}\n </a>\n );\n}\n","import { marked } from \"marked\";\nimport type { ReportDocSection } from \"executable-stories-formatters\";\nimport { useBuiltinRenderers } from \"../../hooks/useRenderers\";\n\n/**\n * Strips the most common dangerous patterns from marked-generated HTML:\n * - <script>...</script> blocks\n * - <style>...</style> blocks\n * - on* event-handler attributes\n * - javascript: URLs on href / src\n *\n * Not a substitute for a full HTML sanitizer (DOMPurify, sanitize-html).\n * For high-untrust input, supply `renderers.section` with your own sanitizer.\n */\nfunction safeMarkdownHtml(markdown: string): string {\n const raw = marked.parse(markdown, { async: false }) as string;\n return raw\n .replace(/<script\\b[^>]*>[\\s\\S]*?<\\/script>/gi, \"\")\n .replace(/<style\\b[^>]*>[\\s\\S]*?<\\/style>/gi, \"\")\n .replace(/\\son[a-z]+\\s*=\\s*\"[^\"]*\"/gi, \"\")\n .replace(/\\son[a-z]+\\s*=\\s*'[^']*'/gi, \"\")\n .replace(/\\son[a-z]+\\s*=\\s*[^\\s>]+/gi, \"\")\n .replace(/(href|src)\\s*=\\s*\"\\s*javascript:[^\"]*\"/gi, '$1=\"#\"')\n .replace(/(href|src)\\s*=\\s*'\\s*javascript:[^']*'/gi, \"$1='#'\");\n}\n\nexport function DocSection({ entry }: { entry: ReportDocSection }) {\n const renderers = useBuiltinRenderers();\n if (renderers.section) {\n return <>{renderers.section(entry)}</>;\n }\n const html = safeMarkdownHtml(entry.markdown);\n return (\n <section className=\"es-doc es-doc-section\" aria-label={entry.title}>\n {entry.title ? <h4 className=\"es-doc-section-title\">{entry.title}</h4> : null}\n <div\n className=\"es-doc-section-content\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </section>\n );\n}\n","import type { ReportDocMermaid } from \"executable-stories-formatters\";\nimport { useBuiltinRenderers } from \"../../hooks/useRenderers\";\n\n/**\n * Renders mermaid source as a semantic <pre data-mermaid> by default.\n *\n * AI agents and screen readers get the raw source. To render the diagram\n * visually, supply a `renderers.mermaid` prop with a client-only component\n * (e.g., one that dynamically imports the mermaid library on mount).\n */\nexport function DocMermaid({ entry }: { entry: ReportDocMermaid }) {\n const renderers = useBuiltinRenderers();\n if (renderers.mermaid) {\n return <>{renderers.mermaid(entry)}</>;\n }\n return (\n <figure\n className=\"es-doc es-doc-mermaid\"\n aria-label={entry.title ?? \"Diagram\"}\n >\n {entry.title ? <figcaption>{entry.title}</figcaption> : null}\n <pre data-mermaid>{entry.code}</pre>\n </figure>\n );\n}\n","import type { ReportDocScreenshot } from \"executable-stories-formatters\";\n\nexport function DocScreenshot({ entry }: { entry: ReportDocScreenshot }) {\n return (\n <figure className=\"es-doc es-doc-screenshot\">\n <img src={entry.path} alt={entry.alt ?? \"\"} loading=\"lazy\" />\n {entry.alt ? <figcaption>{entry.alt}</figcaption> : null}\n </figure>\n );\n}\n","import type { ReportDocCustom } from \"executable-stories-formatters\";\nimport { useCustomRenderers } from \"../../hooks/useRenderers\";\n\nexport function DocCustom({ entry }: { entry: ReportDocCustom }) {\n const renderers = useCustomRenderers();\n const renderer = renderers[entry.type];\n if (renderer) {\n return <>{renderer(entry)}</>;\n }\n return (\n <div className=\"es-doc es-doc-custom\" data-type={entry.type}>\n <p className=\"es-doc-custom-type\">{entry.type}</p>\n <pre>{safeStringify(entry.data)}</pre>\n </div>\n );\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n","import type { ReportDocEntry } from \"executable-stories-formatters\";\nimport { DocNote } from \"./DocNote\";\nimport { DocTag } from \"./DocTag\";\nimport { DocKv } from \"./DocKv\";\nimport { DocCode } from \"./DocCode\";\nimport { DocTable } from \"./DocTable\";\nimport { DocLink } from \"./DocLink\";\nimport { DocSection } from \"./DocSection\";\nimport { DocMermaid } from \"./DocMermaid\";\nimport { DocScreenshot } from \"./DocScreenshot\";\nimport { DocCustom } from \"./DocCustom\";\n\nexport function DocEntry({ entry }: { entry: ReportDocEntry }) {\n switch (entry.kind) {\n case \"note\":\n return <DocNote entry={entry} />;\n case \"tag\":\n return <DocTag entry={entry} />;\n case \"kv\":\n return <DocKv entry={entry} />;\n case \"code\":\n return <DocCode entry={entry} />;\n case \"table\":\n return <DocTable entry={entry} />;\n case \"link\":\n return <DocLink entry={entry} />;\n case \"section\":\n return <DocSection entry={entry} />;\n case \"mermaid\":\n return <DocMermaid entry={entry} />;\n case \"screenshot\":\n return <DocScreenshot entry={entry} />;\n case \"custom\":\n return <DocCustom entry={entry} />;\n }\n}\n","import type { ReportDocEntry } from \"executable-stories-formatters\";\nimport { DocEntry } from \"./doc/DocEntry\";\n\nexport interface ReportDocEntriesProps {\n entries: readonly ReportDocEntry[];\n}\n\nexport function ReportDocEntries({ entries }: ReportDocEntriesProps) {\n if (entries.length === 0) return null;\n return (\n <>\n {entries.map((entry, i) => (\n <DocEntry key={i} entry={entry} />\n ))}\n </>\n );\n}\n","import type { ReportStep, ReportScenario } from \"executable-stories-formatters\";\nimport { ReportDocEntries } from \"./ReportDocEntries\";\n\nexport interface ReportStepsProps {\n scenario: ReportScenario;\n}\n\nexport function ReportSteps({ scenario }: ReportStepsProps) {\n if (scenario.steps.length === 0) return null;\n return (\n <ol className=\"es-steps\">\n {scenario.steps.map((step) => (\n <ReportStepItem key={step.id} step={step} />\n ))}\n </ol>\n );\n}\n\nexport function ReportStepItem({ step }: { step: ReportStep }) {\n return (\n <li\n id={step.id}\n className={`es-step es-step-${step.status}`}\n data-status={step.status}\n >\n <span className=\"es-step-keyword\">{step.keyword}</span>\n <span className=\"es-step-text\">{step.text}</span>\n {step.errorMessage ? (\n <pre className=\"es-scenario-error\" role=\"alert\">{step.errorMessage}</pre>\n ) : null}\n {step.docEntries.length > 0 ? (\n <div className=\"es-step-docs\">\n <ReportDocEntries entries={step.docEntries} />\n </div>\n ) : null}\n </li>\n );\n}\n","import type { ReportScenario as ReportScenarioT } from \"executable-stories-formatters\";\nimport { ReportSteps } from \"./ReportSteps\";\nimport { ReportDocEntries } from \"./ReportDocEntries\";\n\nexport interface ReportScenarioProps {\n scenario: ReportScenarioT;\n}\n\nconst STATUS_LABEL: Record<ReportScenarioT[\"status\"], string> = {\n passed: \"Passed\",\n failed: \"Failed\",\n skipped: \"Skipped\",\n pending: \"Pending\",\n};\n\nexport function ReportScenario({ scenario }: ReportScenarioProps) {\n const titleId = `${scenario.id}-title`;\n return (\n <article\n id={scenario.id}\n className={`es-scenario es-status-${scenario.status}`}\n aria-labelledby={titleId}\n data-status={scenario.status}\n >\n <h3 id={titleId} className=\"es-scenario-title\">\n <span>{scenario.title}</span>\n <span className=\"es-scenario-status\" aria-label={`Status: ${STATUS_LABEL[scenario.status]}`}>\n {STATUS_LABEL[scenario.status]}\n </span>\n </h3>\n {scenario.tags.length > 0 ? (\n <ul className=\"es-tags\" aria-label=\"Tags\">\n {scenario.tags.map((t) => (\n <li key={t}>{t}</li>\n ))}\n </ul>\n ) : null}\n {scenario.errorMessage ? (\n <pre className=\"es-scenario-error\" role=\"alert\">{scenario.errorMessage}</pre>\n ) : null}\n {scenario.docEntries.length > 0 ? (\n <div className=\"es-scenario-docs\">\n <ReportDocEntries entries={scenario.docEntries} />\n </div>\n ) : null}\n <ReportSteps scenario={scenario} />\n </article>\n );\n}\n","import type { ReportFeature } from \"executable-stories-formatters\";\nimport { ReportScenario } from \"./ReportScenario\";\n\nexport interface ReportScenarioListProps {\n feature: ReportFeature;\n}\n\nexport function ReportScenarioList({ feature }: ReportScenarioListProps) {\n return (\n <>\n {feature.scenarios.map((scenario) => (\n <ReportScenario key={scenario.id} scenario={scenario} />\n ))}\n </>\n );\n}\n","import type { ReportFeature as ReportFeatureT } from \"executable-stories-formatters\";\nimport { ReportScenarioList } from \"./ReportScenarioList\";\nimport { ReportSummaryView } from \"./ReportSummary\";\n\nexport interface ReportFeatureProps {\n feature: ReportFeatureT;\n}\n\nexport function ReportFeature({ feature }: ReportFeatureProps) {\n const titleId = `${feature.id}-title`;\n return (\n <section\n id={feature.id}\n className=\"es-feature\"\n aria-labelledby={titleId}\n >\n <h2 id={titleId} className=\"es-feature-title\">{feature.title}</h2>\n <p className=\"es-feature-source\">{feature.sourceFile}</p>\n <ReportSummaryView summary={feature.summary} className=\"es-feature-summary\" />\n <ReportScenarioList feature={feature} />\n </section>\n );\n}\n","import { useReport } from \"../hooks/useReport\";\nimport { ReportFeature } from \"./ReportFeature\";\n\nexport function ReportFeatureList() {\n const report = useReport();\n return (\n <>\n {report.features.map((feature) => (\n <ReportFeature key={feature.id} feature={feature} />\n ))}\n </>\n );\n}\n","export interface ReportEmptyProps {\n message?: string;\n}\n\nexport function ReportEmpty({ message }: ReportEmptyProps) {\n return (\n <section className=\"es-empty\" aria-live=\"polite\">\n <p>{message ?? \"No scenarios in this report.\"}</p>\n </section>\n );\n}\n","import type { ReportParseError } from \"../result\";\n\nexport interface ReportSchemaErrorProps {\n error: ReportParseError;\n}\n\nexport function ReportSchemaError({ error }: ReportSchemaErrorProps) {\n return (\n <section className=\"es-schema-error\" role=\"alert\" aria-live=\"assertive\">\n <p>\n <strong>Report could not be displayed.</strong>\n </p>\n <p>{error.message}</p>\n {error.code === \"SCHEMA_VERSION_MISMATCH\" ? (\n <p>\n The report bundle is newer than this version of <code>executable-stories-react</code>.\n Upgrade the package, or regenerate the report with an older formatters CLI.\n </p>\n ) : null}\n {error.issues && error.issues.length > 0 ? (\n <details>\n <summary>{error.issues.length} validation issue{error.issues.length === 1 ? \"\" : \"s\"}</summary>\n <pre>\n {error.issues\n .slice(0, 20)\n .map((i) => `${i.path}: ${i.message}`)\n .join(\"\\n\")}\n </pre>\n </details>\n ) : null}\n </section>\n );\n}\n","import type { StoryReport } from \"executable-stories-formatters\";\nimport type { Result } from \"../result\";\nimport type { BuiltinRenderers, CustomRenderers } from \"../renderers\";\nimport { ReportRoot } from \"../context/ReportRoot\";\nimport { ReportSummary } from \"./ReportSummary\";\nimport { ReportFeatureList } from \"./ReportFeatureList\";\nimport { ReportEmpty } from \"./ReportEmpty\";\nimport { ReportSchemaError } from \"./ReportSchemaError\";\n\nexport interface ReportProps {\n /** A StoryReport, or a Result-wrapped one (e.g., from parseStoryReport). */\n report: StoryReport | Result<StoryReport>;\n /** Renderers keyed by `story.custom({ type })` strings. */\n customRenderers?: CustomRenderers;\n /** Optional overrides for the heavy built-ins (mermaid, code, section). */\n renderers?: BuiltinRenderers;\n /** Optional class on the <main> landmark for layout positioning. */\n className?: string;\n /** Optional override title. */\n title?: string;\n /** Optional theme attribute scope. Use to force \"light\" or \"dark\". */\n dataTheme?: \"light\" | \"dark\";\n}\n\nfunction isResult(value: ReportProps[\"report\"]): value is Result<StoryReport> {\n return typeof value === \"object\"\n && value !== null\n && \"ok\" in (value as object)\n && typeof (value as { ok: unknown }).ok === \"boolean\";\n}\n\nexport function Report(props: ReportProps) {\n const { report, customRenderers, renderers, className, title, dataTheme } = props;\n if (isResult(report)) {\n if (!report.ok) {\n return (\n <main\n className={[\"es-report\", className].filter(Boolean).join(\" \")}\n aria-label={title ?? \"Test report\"}\n data-theme={dataTheme}\n >\n <ReportSchemaError error={report.error} />\n </main>\n );\n }\n return (\n <ReportView\n report={report.data}\n customRenderers={customRenderers}\n renderers={renderers}\n className={className}\n title={title}\n dataTheme={dataTheme}\n />\n );\n }\n return (\n <ReportView\n report={report}\n customRenderers={customRenderers}\n renderers={renderers}\n className={className}\n title={title}\n dataTheme={dataTheme}\n />\n );\n}\n\ninterface ReportViewProps {\n report: StoryReport;\n customRenderers?: CustomRenderers;\n renderers?: BuiltinRenderers;\n className?: string;\n title?: string;\n dataTheme?: \"light\" | \"dark\";\n}\n\nfunction ReportView({\n report,\n customRenderers,\n renderers,\n className,\n title,\n dataTheme,\n}: ReportViewProps) {\n const hasContent = report.features.length > 0;\n return (\n <ReportRoot report={report} customRenderers={customRenderers} renderers={renderers}>\n <main\n className={[\"es-report\", className].filter(Boolean).join(\" \")}\n aria-label={title ?? \"Test report\"}\n data-theme={dataTheme}\n >\n <header className=\"es-report-header\">\n <h1>{title ?? \"Story Report\"}</h1>\n <ReportSummary />\n </header>\n {hasContent ? <ReportFeatureList /> : <ReportEmpty />}\n </main>\n </ReportRoot>\n );\n}\n","/**\n * Result<T> — explicit success/error type matching the cookbook convention.\n *\n * Used at the boundary where a StoryReport is parsed: the consumer hands us\n * an unknown value (file contents, fetch body, prop) and we return a Result.\n */\n\nexport type Result<T, E = ReportParseError> =\n | { ok: true; data: T }\n | { ok: false; error: E };\n\nexport interface ReportParseError {\n message: string;\n code: ReportParseErrorCode;\n issues?: readonly { path: string; message: string }[];\n}\n\nexport type ReportParseErrorCode =\n | \"INVALID_INPUT\"\n | \"SCHEMA_VERSION_MISMATCH\"\n | \"VALIDATION_FAILED\";\n\nexport const ok = <T>(data: T): Result<T> => ({ ok: true, data });\nexport const err = (error: ReportParseError): Result<never> => ({ ok: false, error });\n","/**\n * StoryReport runtime Zod schema, derived from the canonical JSON Schema\n * at executable-stories-formatters/schemas/story-report-v1.json.\n *\n * Uses z.fromJSONSchema (experimental in Zod 4.x). If the API changes upstream,\n * only this file needs updating — the rest of the package consumes\n * `storyReportSchema` and `StoryReportSchemaShape` via parse.ts.\n *\n * The JSON Schema is bundled at build time by tsup (resolveJsonModule).\n */\n\nimport { z } from \"zod\";\nimport schemaJson from \"../../../executable-stories-formatters/schemas/story-report-v1.json\" with { type: \"json\" };\n\nconst compiled = z.fromJSONSchema(schemaJson as Parameters<typeof z.fromJSONSchema>[0]);\n\nexport const storyReportSchema = compiled;\nexport type StoryReportSchemaShape = z.infer<typeof compiled>;\n\nexport const STORY_REPORT_SCHEMA_MAJOR = 1 as const;\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"$id\": \"https://executable-stories.dev/schemas/story-report-v1.schema.json\",\n \"title\": \"StoryReport\",\n \"description\": \"Pre-grouped, denormalized report shape consumed by UI renderers (React, Svelte, Vue, etc.). Stable public contract — additive-only within a major. Distinct from internal TestRunResult.\",\n \"type\": \"object\",\n \"$ref\": \"#/$defs/StoryReport\",\n \"$defs\": {\n \"StoryReport\": {\n \"type\": \"object\",\n \"description\": \"Top-level report containing all features, runtime metadata, and a pre-computed summary.\",\n \"properties\": {\n \"schemaVersion\": {\n \"type\": \"string\",\n \"pattern\": \"^1\\\\.[0-9]+$\",\n \"description\": \"Schema version as 'major.minor'. Major bumps are breaking; minors are additive-only. UI packages must accept any 1.x.\"\n },\n \"runId\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Unique deterministic identifier for this run.\"\n },\n \"startedAtMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Run start time as Unix epoch milliseconds.\"\n },\n \"finishedAtMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Run finish time as Unix epoch milliseconds.\"\n },\n \"durationMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Total run duration in milliseconds.\"\n },\n \"projectRoot\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Absolute path to the project root (for context only; relative paths in features.sourceFile are preferred).\"\n },\n \"packageVersion\": {\n \"type\": \"string\",\n \"description\": \"Version of the package under test, if known.\"\n },\n \"gitSha\": {\n \"type\": \"string\",\n \"description\": \"Git commit SHA at the time of the run.\"\n },\n \"ci\": {\n \"$ref\": \"#/$defs/CIInfo\"\n },\n \"coverage\": {\n \"$ref\": \"#/$defs/CoverageSummary\"\n },\n \"summary\": {\n \"$ref\": \"#/$defs/Summary\",\n \"description\": \"Pre-computed counts across all features and scenarios.\"\n },\n \"features\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Feature\" },\n \"description\": \"Features grouped by sourceFile, sorted by title.\"\n }\n },\n \"required\": [\"schemaVersion\", \"runId\", \"startedAtMs\", \"finishedAtMs\", \"durationMs\", \"projectRoot\", \"summary\", \"features\"],\n \"additionalProperties\": false\n },\n \"Summary\": {\n \"type\": \"object\",\n \"description\": \"Counts by status. Sums equal 'total'.\",\n \"properties\": {\n \"total\": { \"type\": \"integer\", \"minimum\": 0 },\n \"passed\": { \"type\": \"integer\", \"minimum\": 0 },\n \"failed\": { \"type\": \"integer\", \"minimum\": 0 },\n \"skipped\": { \"type\": \"integer\", \"minimum\": 0 },\n \"pending\": { \"type\": \"integer\", \"minimum\": 0 },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 }\n },\n \"required\": [\"total\", \"passed\", \"failed\", \"skipped\", \"pending\", \"durationMs\"],\n \"additionalProperties\": false\n },\n \"Feature\": {\n \"type\": \"object\",\n \"description\": \"A group of scenarios from the same source file.\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Stable slug derived from the relative source path. Suitable for use as a deep-link anchor.\"\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Display title. Derived from describe block when present, otherwise the file basename.\"\n },\n \"sourceFile\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Source path, relative to projectRoot when possible.\"\n },\n \"summary\": { \"$ref\": \"#/$defs/Summary\" },\n \"scenarios\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Scenario\" },\n \"description\": \"Scenarios in this feature, in declaration order.\"\n }\n },\n \"required\": [\"id\", \"title\", \"sourceFile\", \"summary\", \"scenarios\"],\n \"additionalProperties\": false\n },\n \"Scenario\": {\n \"type\": \"object\",\n \"description\": \"A single scenario with its steps, story-level doc entries, and attachments.\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Stable identifier: '<feature.id>--<slug-of-title>'. Suitable for use as a deep-link anchor.\"\n },\n \"title\": { \"type\": \"string\", \"minLength\": 1 },\n \"status\": { \"$ref\": \"#/$defs/TestStatus\" },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 },\n \"tags\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"description\": \"Normalized tags, deduplicated, lowercased.\"\n },\n \"tickets\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Ticket\" }\n },\n \"covers\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"description\": \"Product-code paths/globs this scenario exercises.\"\n },\n \"sourceLine\": { \"type\": \"integer\", \"minimum\": 1 },\n \"errorMessage\": { \"type\": \"string\" },\n \"errorStack\": { \"type\": \"string\" },\n \"retry\": { \"type\": \"integer\", \"minimum\": 0 },\n \"retries\": { \"type\": \"integer\", \"minimum\": 0 },\n \"docEntries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" },\n \"description\": \"Story-level doc entries (rendered before steps).\"\n },\n \"steps\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Step\" }\n },\n \"attachments\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Attachment\" }\n }\n },\n \"required\": [\"id\", \"title\", \"status\", \"durationMs\", \"tags\", \"retry\", \"retries\", \"docEntries\", \"steps\", \"attachments\"],\n \"additionalProperties\": false\n },\n \"Step\": {\n \"type\": \"object\",\n \"description\": \"A single BDD step.\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"minLength\": 1 },\n \"index\": { \"type\": \"integer\", \"minimum\": 0 },\n \"keyword\": { \"$ref\": \"#/$defs/StepKeyword\" },\n \"text\": { \"type\": \"string\" },\n \"status\": { \"$ref\": \"#/$defs/TestStatus\" },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 },\n \"errorMessage\": { \"type\": \"string\" },\n \"mode\": { \"$ref\": \"#/$defs/StepMode\" },\n \"docEntries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" },\n \"description\": \"Doc entries attached to this step.\"\n }\n },\n \"required\": [\"id\", \"index\", \"keyword\", \"text\", \"status\", \"durationMs\", \"docEntries\"],\n \"additionalProperties\": false\n },\n \"StepKeyword\": {\n \"type\": \"string\",\n \"enum\": [\"Given\", \"When\", \"Then\", \"And\", \"But\"]\n },\n \"StepMode\": {\n \"type\": \"string\",\n \"enum\": [\"normal\", \"skip\", \"only\", \"todo\", \"fails\", \"concurrent\"]\n },\n \"TestStatus\": {\n \"type\": \"string\",\n \"enum\": [\"passed\", \"failed\", \"skipped\", \"pending\"]\n },\n \"Ticket\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"minLength\": 1 },\n \"url\": { \"type\": \"string\" }\n },\n \"required\": [\"id\"],\n \"additionalProperties\": false\n },\n \"Attachment\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"mediaType\": { \"type\": \"string\", \"minLength\": 1 },\n \"body\": { \"type\": \"string\" },\n \"contentEncoding\": {\n \"type\": \"string\",\n \"enum\": [\"BASE64\", \"IDENTITY\"]\n }\n },\n \"required\": [\"name\", \"mediaType\", \"body\", \"contentEncoding\"],\n \"additionalProperties\": false\n },\n \"CIInfo\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"buildNumber\": { \"type\": \"string\" },\n \"branch\": { \"type\": \"string\" },\n \"commitSha\": { \"type\": \"string\" },\n \"prNumber\": { \"type\": \"string\" }\n },\n \"required\": [\"name\"],\n \"additionalProperties\": false\n },\n \"CoverageSummary\": {\n \"type\": \"object\",\n \"properties\": {\n \"linesPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"branchesPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"functionsPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"statementsPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 }\n },\n \"additionalProperties\": false\n },\n \"DocPhase\": {\n \"type\": \"string\",\n \"enum\": [\"static\", \"runtime\"]\n },\n \"DocEntry\": {\n \"oneOf\": [\n { \"$ref\": \"#/$defs/DocNote\" },\n { \"$ref\": \"#/$defs/DocTag\" },\n { \"$ref\": \"#/$defs/DocKv\" },\n { \"$ref\": \"#/$defs/DocCode\" },\n { \"$ref\": \"#/$defs/DocTable\" },\n { \"$ref\": \"#/$defs/DocLink\" },\n { \"$ref\": \"#/$defs/DocSection\" },\n { \"$ref\": \"#/$defs/DocMermaid\" },\n { \"$ref\": \"#/$defs/DocScreenshot\" },\n { \"$ref\": \"#/$defs/DocCustom\" }\n ]\n },\n \"DocNote\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"note\" },\n \"text\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"text\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocTag\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"tag\" },\n \"names\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"names\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocKv\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"kv\" },\n \"label\": { \"type\": \"string\" },\n \"value\": {},\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"value\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocCode\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"code\" },\n \"label\": { \"type\": \"string\" },\n \"content\": { \"type\": \"string\" },\n \"lang\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"content\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocTable\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"table\" },\n \"label\": { \"type\": \"string\" },\n \"columns\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n \"rows\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"columns\", \"rows\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocLink\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"link\" },\n \"label\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"url\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocSection\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"section\" },\n \"title\": { \"type\": \"string\" },\n \"markdown\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"title\", \"markdown\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocMermaid\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"mermaid\" },\n \"code\": { \"type\": \"string\" },\n \"title\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"code\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocScreenshot\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"screenshot\" },\n \"path\": { \"type\": \"string\" },\n \"alt\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"path\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocCustom\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"custom\" },\n \"type\": { \"type\": \"string\", \"minLength\": 1 },\n \"data\": {},\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"type\", \"data\", \"phase\"],\n \"additionalProperties\": false\n }\n }\n}\n","/**\n * parseStoryReport — boundary validator. Accepts unknown input (file contents,\n * fetch body, prop) and returns a Result-typed StoryReport.\n */\n\nimport type { StoryReport } from \"executable-stories-formatters\";\nimport type { Result } from \"../result\";\nimport { ok, err } from \"../result\";\nimport { storyReportSchema, STORY_REPORT_SCHEMA_MAJOR } from \"./story-report.schema\";\n\nexport function parseStoryReport(input: unknown): Result<StoryReport> {\n if (input === null || typeof input !== \"object\") {\n return err({\n message: \"Expected a StoryReport object.\",\n code: \"INVALID_INPUT\",\n });\n }\n\n const versionRaw = (input as { schemaVersion?: unknown }).schemaVersion;\n if (typeof versionRaw === \"string\") {\n const major = versionRaw.split(\".\")[0];\n if (major !== String(STORY_REPORT_SCHEMA_MAJOR)) {\n return err({\n message: `Schema major ${major} is not supported by this version of executable-stories-react (expected ${STORY_REPORT_SCHEMA_MAJOR}.x). Upgrade the package.`,\n code: \"SCHEMA_VERSION_MISMATCH\",\n });\n }\n }\n\n const parsed = storyReportSchema.safeParse(input);\n if (parsed.success) {\n return ok(parsed.data as StoryReport);\n }\n\n const issues = parsed.error.issues.map((i) => ({\n path: i.path.join(\".\") || \"/\",\n message: i.message,\n }));\n\n return err({\n message: `StoryReport failed validation (${issues.length} issue${issues.length === 1 ? \"\" : \"s\"}).`,\n code: \"VALIDATION_FAILED\",\n issues,\n });\n}\n"],"mappings":"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","names":["import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","EMPTY_CUSTOM","EMPTY_RENDERERS","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
package/dist/index.js CHANGED
@@ -612,6 +612,11 @@ var story_report_v1_default = {
612
612
  type: "array",
613
613
  items: { $ref: "#/$defs/Ticket" }
614
614
  },
615
+ covers: {
616
+ type: "array",
617
+ items: { type: "string" },
618
+ description: "Product-code paths/globs this scenario exercises."
619
+ },
615
620
  sourceLine: { type: "integer", minimum: 1 },
616
621
  errorMessage: { type: "string" },
617
622
  errorStack: { type: "string" },
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context/ReportRoot.tsx","../src/context/ReportContext.ts","../src/hooks/useReport.ts","../src/components/ReportSummary.tsx","../src/components/doc/DocNote.tsx","../src/components/doc/DocTag.tsx","../src/components/doc/DocKv.tsx","../src/hooks/useRenderers.ts","../src/components/doc/DocCode.tsx","../src/components/doc/DocTable.tsx","../src/components/doc/DocLink.tsx","../src/components/doc/DocSection.tsx","../src/components/doc/DocMermaid.tsx","../src/components/doc/DocScreenshot.tsx","../src/components/doc/DocCustom.tsx","../src/components/doc/DocEntry.tsx","../src/components/ReportDocEntries.tsx","../src/components/ReportSteps.tsx","../src/components/ReportScenario.tsx","../src/components/ReportScenarioList.tsx","../src/components/ReportFeature.tsx","../src/components/ReportFeatureList.tsx","../src/components/ReportEmpty.tsx","../src/components/ReportSchemaError.tsx","../src/components/Report.tsx","../src/result.ts","../src/schema/story-report.schema.ts","../../executable-stories-formatters/schemas/story-report-v1.json","../src/schema/parse.ts"],"sourcesContent":["import { useMemo, type ReactNode } from \"react\";\nimport type { StoryReport } from \"executable-stories-formatters\";\nimport type { BuiltinRenderers, CustomRenderers } from \"../renderers\";\nimport { ReportContext, type ReportContextValue } from \"./ReportContext\";\n\nexport interface ReportRootProps {\n report: StoryReport;\n customRenderers?: CustomRenderers;\n renderers?: BuiltinRenderers;\n children: ReactNode;\n}\n\nconst EMPTY_CUSTOM: CustomRenderers = {};\nconst EMPTY_RENDERERS: BuiltinRenderers = {};\n\nexport function ReportRoot({\n report,\n customRenderers,\n renderers,\n children,\n}: ReportRootProps) {\n const value = useMemo<ReportContextValue>(\n () => ({\n report,\n customRenderers: customRenderers ?? EMPTY_CUSTOM,\n renderers: renderers ?? EMPTY_RENDERERS,\n }),\n [report, customRenderers, renderers],\n );\n return <ReportContext.Provider value={value}>{children}</ReportContext.Provider>;\n}\n","import { createContext } from \"react\";\nimport type { StoryReport } from \"executable-stories-formatters\";\nimport type { BuiltinRenderers, CustomRenderers } from \"../renderers\";\n\nexport interface ReportContextValue {\n report: StoryReport;\n customRenderers: CustomRenderers;\n renderers: BuiltinRenderers;\n}\n\nexport const ReportContext = createContext<ReportContextValue | null>(null);\n","import { useContext } from \"react\";\nimport { ReportContext } from \"../context/ReportContext\";\n\nexport function useReport() {\n const ctx = useContext(ReportContext);\n if (!ctx) {\n throw new Error(\n \"useReport must be used inside <ReportRoot> or <Report>. Wrap your tree with one of those.\",\n );\n }\n return ctx.report;\n}\n","import type { ReportSummary as ReportSummaryT } from \"executable-stories-formatters\";\nimport { useReport } from \"../hooks/useReport\";\n\nexport interface ReportSummaryProps {\n className?: string;\n}\n\nexport function ReportSummary({ className }: ReportSummaryProps) {\n const report = useReport();\n return (\n <ReportSummaryView\n summary={report.summary}\n {...(className !== undefined && { className })}\n ariaLabel=\"Run summary\"\n />\n );\n}\n\nexport interface ReportSummaryViewProps {\n summary: ReportSummaryT;\n className?: string;\n ariaLabel?: string;\n}\n\nexport function ReportSummaryView({ summary, className, ariaLabel }: ReportSummaryViewProps) {\n return (\n <p\n className={[\"es-report-summary\", className].filter(Boolean).join(\" \")}\n aria-label={ariaLabel}\n >\n <span>\n <strong>{summary.total}</strong> scenario{summary.total === 1 ? \"\" : \"s\"}\n </span>\n {\" · \"}\n <span data-status=\"passed\">{summary.passed} passed</span>\n {\" · \"}\n <span data-status=\"failed\">{summary.failed} failed</span>\n {summary.skipped > 0 ? (\n <>\n {\" · \"}\n <span data-status=\"skipped\">{summary.skipped} skipped</span>\n </>\n ) : null}\n {summary.pending > 0 ? (\n <>\n {\" · \"}\n <span data-status=\"pending\">{summary.pending} pending</span>\n </>\n ) : null}\n </p>\n );\n}\n","import type { ReportDocNote } from \"executable-stories-formatters\";\n\nexport function DocNote({ entry }: { entry: ReportDocNote }) {\n return <p className=\"es-doc es-doc-note\">{entry.text}</p>;\n}\n","import type { ReportDocTag } from \"executable-stories-formatters\";\n\nexport function DocTag({ entry }: { entry: ReportDocTag }) {\n return (\n <ul className=\"es-doc es-tags\" aria-label=\"Tags\">\n {entry.names.map((n) => (\n <li key={n}>{n}</li>\n ))}\n </ul>\n );\n}\n","import type { ReportDocKv } from \"executable-stories-formatters\";\n\nfunction formatValue(value: unknown): string {\n if (value === null) return \"null\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function DocKv({ entry }: { entry: ReportDocKv }) {\n return (\n <dl className=\"es-doc es-doc-kv\">\n <dt>{entry.label}</dt>\n <dd>{formatValue(entry.value)}</dd>\n </dl>\n );\n}\n","import { useContext } from \"react\";\nimport { ReportContext } from \"../context/ReportContext\";\nimport type { BuiltinRenderers, CustomRenderers } from \"../renderers\";\n\nconst EMPTY_CUSTOM: CustomRenderers = {};\nconst EMPTY_RENDERERS: BuiltinRenderers = {};\n\nexport function useCustomRenderers(): CustomRenderers {\n const ctx = useContext(ReportContext);\n return ctx?.customRenderers ?? EMPTY_CUSTOM;\n}\n\nexport function useBuiltinRenderers(): BuiltinRenderers {\n const ctx = useContext(ReportContext);\n return ctx?.renderers ?? EMPTY_RENDERERS;\n}\n","import type { ReportDocCode } from \"executable-stories-formatters\";\nimport { useBuiltinRenderers } from \"../../hooks/useRenderers\";\n\nexport function DocCode({ entry }: { entry: ReportDocCode }) {\n const renderers = useBuiltinRenderers();\n if (renderers.code) {\n return <>{renderers.code(entry)}</>;\n }\n return (\n <figure className=\"es-doc es-doc-code\">\n <figcaption>{entry.label}</figcaption>\n <pre>\n <code className={entry.lang ? `language-${entry.lang}` : undefined}>\n {entry.content}\n </code>\n </pre>\n </figure>\n );\n}\n","import type { ReportDocTable } from \"executable-stories-formatters\";\n\nexport function DocTable({ entry }: { entry: ReportDocTable }) {\n return (\n <figure className=\"es-doc es-doc-table\">\n <figcaption>{entry.label}</figcaption>\n <table>\n <thead>\n <tr>\n {entry.columns.map((c) => (\n <th key={c} scope=\"col\">{c}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {entry.rows.map((row, i) => (\n <tr key={i}>\n {row.map((cell, j) => (\n <td key={j}>{cell}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </figure>\n );\n}\n","import type { ReportDocLink } from \"executable-stories-formatters\";\n\nexport function DocLink({ entry }: { entry: ReportDocLink }) {\n return (\n <a\n className=\"es-doc es-doc-link\"\n href={entry.url}\n rel=\"noreferrer noopener\"\n target=\"_blank\"\n >\n {entry.label}\n </a>\n );\n}\n","import { marked } from \"marked\";\nimport type { ReportDocSection } from \"executable-stories-formatters\";\nimport { useBuiltinRenderers } from \"../../hooks/useRenderers\";\n\n/**\n * Strips the most common dangerous patterns from marked-generated HTML:\n * - <script>...</script> blocks\n * - <style>...</style> blocks\n * - on* event-handler attributes\n * - javascript: URLs on href / src\n *\n * Not a substitute for a full HTML sanitizer (DOMPurify, sanitize-html).\n * For high-untrust input, supply `renderers.section` with your own sanitizer.\n */\nfunction safeMarkdownHtml(markdown: string): string {\n const raw = marked.parse(markdown, { async: false }) as string;\n return raw\n .replace(/<script\\b[^>]*>[\\s\\S]*?<\\/script>/gi, \"\")\n .replace(/<style\\b[^>]*>[\\s\\S]*?<\\/style>/gi, \"\")\n .replace(/\\son[a-z]+\\s*=\\s*\"[^\"]*\"/gi, \"\")\n .replace(/\\son[a-z]+\\s*=\\s*'[^']*'/gi, \"\")\n .replace(/\\son[a-z]+\\s*=\\s*[^\\s>]+/gi, \"\")\n .replace(/(href|src)\\s*=\\s*\"\\s*javascript:[^\"]*\"/gi, '$1=\"#\"')\n .replace(/(href|src)\\s*=\\s*'\\s*javascript:[^']*'/gi, \"$1='#'\");\n}\n\nexport function DocSection({ entry }: { entry: ReportDocSection }) {\n const renderers = useBuiltinRenderers();\n if (renderers.section) {\n return <>{renderers.section(entry)}</>;\n }\n const html = safeMarkdownHtml(entry.markdown);\n return (\n <section className=\"es-doc es-doc-section\" aria-label={entry.title}>\n {entry.title ? <h4 className=\"es-doc-section-title\">{entry.title}</h4> : null}\n <div\n className=\"es-doc-section-content\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </section>\n );\n}\n","import type { ReportDocMermaid } from \"executable-stories-formatters\";\nimport { useBuiltinRenderers } from \"../../hooks/useRenderers\";\n\n/**\n * Renders mermaid source as a semantic <pre data-mermaid> by default.\n *\n * AI agents and screen readers get the raw source. To render the diagram\n * visually, supply a `renderers.mermaid` prop with a client-only component\n * (e.g., one that dynamically imports the mermaid library on mount).\n */\nexport function DocMermaid({ entry }: { entry: ReportDocMermaid }) {\n const renderers = useBuiltinRenderers();\n if (renderers.mermaid) {\n return <>{renderers.mermaid(entry)}</>;\n }\n return (\n <figure\n className=\"es-doc es-doc-mermaid\"\n aria-label={entry.title ?? \"Diagram\"}\n >\n {entry.title ? <figcaption>{entry.title}</figcaption> : null}\n <pre data-mermaid>{entry.code}</pre>\n </figure>\n );\n}\n","import type { ReportDocScreenshot } from \"executable-stories-formatters\";\n\nexport function DocScreenshot({ entry }: { entry: ReportDocScreenshot }) {\n return (\n <figure className=\"es-doc es-doc-screenshot\">\n <img src={entry.path} alt={entry.alt ?? \"\"} loading=\"lazy\" />\n {entry.alt ? <figcaption>{entry.alt}</figcaption> : null}\n </figure>\n );\n}\n","import type { ReportDocCustom } from \"executable-stories-formatters\";\nimport { useCustomRenderers } from \"../../hooks/useRenderers\";\n\nexport function DocCustom({ entry }: { entry: ReportDocCustom }) {\n const renderers = useCustomRenderers();\n const renderer = renderers[entry.type];\n if (renderer) {\n return <>{renderer(entry)}</>;\n }\n return (\n <div className=\"es-doc es-doc-custom\" data-type={entry.type}>\n <p className=\"es-doc-custom-type\">{entry.type}</p>\n <pre>{safeStringify(entry.data)}</pre>\n </div>\n );\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n","import type { ReportDocEntry } from \"executable-stories-formatters\";\nimport { DocNote } from \"./DocNote\";\nimport { DocTag } from \"./DocTag\";\nimport { DocKv } from \"./DocKv\";\nimport { DocCode } from \"./DocCode\";\nimport { DocTable } from \"./DocTable\";\nimport { DocLink } from \"./DocLink\";\nimport { DocSection } from \"./DocSection\";\nimport { DocMermaid } from \"./DocMermaid\";\nimport { DocScreenshot } from \"./DocScreenshot\";\nimport { DocCustom } from \"./DocCustom\";\n\nexport function DocEntry({ entry }: { entry: ReportDocEntry }) {\n switch (entry.kind) {\n case \"note\":\n return <DocNote entry={entry} />;\n case \"tag\":\n return <DocTag entry={entry} />;\n case \"kv\":\n return <DocKv entry={entry} />;\n case \"code\":\n return <DocCode entry={entry} />;\n case \"table\":\n return <DocTable entry={entry} />;\n case \"link\":\n return <DocLink entry={entry} />;\n case \"section\":\n return <DocSection entry={entry} />;\n case \"mermaid\":\n return <DocMermaid entry={entry} />;\n case \"screenshot\":\n return <DocScreenshot entry={entry} />;\n case \"custom\":\n return <DocCustom entry={entry} />;\n }\n}\n","import type { ReportDocEntry } from \"executable-stories-formatters\";\nimport { DocEntry } from \"./doc/DocEntry\";\n\nexport interface ReportDocEntriesProps {\n entries: readonly ReportDocEntry[];\n}\n\nexport function ReportDocEntries({ entries }: ReportDocEntriesProps) {\n if (entries.length === 0) return null;\n return (\n <>\n {entries.map((entry, i) => (\n <DocEntry key={i} entry={entry} />\n ))}\n </>\n );\n}\n","import type { ReportStep, ReportScenario } from \"executable-stories-formatters\";\nimport { ReportDocEntries } from \"./ReportDocEntries\";\n\nexport interface ReportStepsProps {\n scenario: ReportScenario;\n}\n\nexport function ReportSteps({ scenario }: ReportStepsProps) {\n if (scenario.steps.length === 0) return null;\n return (\n <ol className=\"es-steps\">\n {scenario.steps.map((step) => (\n <ReportStepItem key={step.id} step={step} />\n ))}\n </ol>\n );\n}\n\nexport function ReportStepItem({ step }: { step: ReportStep }) {\n return (\n <li\n id={step.id}\n className={`es-step es-step-${step.status}`}\n data-status={step.status}\n >\n <span className=\"es-step-keyword\">{step.keyword}</span>\n <span className=\"es-step-text\">{step.text}</span>\n {step.errorMessage ? (\n <pre className=\"es-scenario-error\" role=\"alert\">{step.errorMessage}</pre>\n ) : null}\n {step.docEntries.length > 0 ? (\n <div className=\"es-step-docs\">\n <ReportDocEntries entries={step.docEntries} />\n </div>\n ) : null}\n </li>\n );\n}\n","import type { ReportScenario as ReportScenarioT } from \"executable-stories-formatters\";\nimport { ReportSteps } from \"./ReportSteps\";\nimport { ReportDocEntries } from \"./ReportDocEntries\";\n\nexport interface ReportScenarioProps {\n scenario: ReportScenarioT;\n}\n\nconst STATUS_LABEL: Record<ReportScenarioT[\"status\"], string> = {\n passed: \"Passed\",\n failed: \"Failed\",\n skipped: \"Skipped\",\n pending: \"Pending\",\n};\n\nexport function ReportScenario({ scenario }: ReportScenarioProps) {\n const titleId = `${scenario.id}-title`;\n return (\n <article\n id={scenario.id}\n className={`es-scenario es-status-${scenario.status}`}\n aria-labelledby={titleId}\n data-status={scenario.status}\n >\n <h3 id={titleId} className=\"es-scenario-title\">\n <span>{scenario.title}</span>\n <span className=\"es-scenario-status\" aria-label={`Status: ${STATUS_LABEL[scenario.status]}`}>\n {STATUS_LABEL[scenario.status]}\n </span>\n </h3>\n {scenario.tags.length > 0 ? (\n <ul className=\"es-tags\" aria-label=\"Tags\">\n {scenario.tags.map((t) => (\n <li key={t}>{t}</li>\n ))}\n </ul>\n ) : null}\n {scenario.errorMessage ? (\n <pre className=\"es-scenario-error\" role=\"alert\">{scenario.errorMessage}</pre>\n ) : null}\n {scenario.docEntries.length > 0 ? (\n <div className=\"es-scenario-docs\">\n <ReportDocEntries entries={scenario.docEntries} />\n </div>\n ) : null}\n <ReportSteps scenario={scenario} />\n </article>\n );\n}\n","import type { ReportFeature } from \"executable-stories-formatters\";\nimport { ReportScenario } from \"./ReportScenario\";\n\nexport interface ReportScenarioListProps {\n feature: ReportFeature;\n}\n\nexport function ReportScenarioList({ feature }: ReportScenarioListProps) {\n return (\n <>\n {feature.scenarios.map((scenario) => (\n <ReportScenario key={scenario.id} scenario={scenario} />\n ))}\n </>\n );\n}\n","import type { ReportFeature as ReportFeatureT } from \"executable-stories-formatters\";\nimport { ReportScenarioList } from \"./ReportScenarioList\";\nimport { ReportSummaryView } from \"./ReportSummary\";\n\nexport interface ReportFeatureProps {\n feature: ReportFeatureT;\n}\n\nexport function ReportFeature({ feature }: ReportFeatureProps) {\n const titleId = `${feature.id}-title`;\n return (\n <section\n id={feature.id}\n className=\"es-feature\"\n aria-labelledby={titleId}\n >\n <h2 id={titleId} className=\"es-feature-title\">{feature.title}</h2>\n <p className=\"es-feature-source\">{feature.sourceFile}</p>\n <ReportSummaryView summary={feature.summary} className=\"es-feature-summary\" />\n <ReportScenarioList feature={feature} />\n </section>\n );\n}\n","import { useReport } from \"../hooks/useReport\";\nimport { ReportFeature } from \"./ReportFeature\";\n\nexport function ReportFeatureList() {\n const report = useReport();\n return (\n <>\n {report.features.map((feature) => (\n <ReportFeature key={feature.id} feature={feature} />\n ))}\n </>\n );\n}\n","export interface ReportEmptyProps {\n message?: string;\n}\n\nexport function ReportEmpty({ message }: ReportEmptyProps) {\n return (\n <section className=\"es-empty\" aria-live=\"polite\">\n <p>{message ?? \"No scenarios in this report.\"}</p>\n </section>\n );\n}\n","import type { ReportParseError } from \"../result\";\n\nexport interface ReportSchemaErrorProps {\n error: ReportParseError;\n}\n\nexport function ReportSchemaError({ error }: ReportSchemaErrorProps) {\n return (\n <section className=\"es-schema-error\" role=\"alert\" aria-live=\"assertive\">\n <p>\n <strong>Report could not be displayed.</strong>\n </p>\n <p>{error.message}</p>\n {error.code === \"SCHEMA_VERSION_MISMATCH\" ? (\n <p>\n The report bundle is newer than this version of <code>executable-stories-react</code>.\n Upgrade the package, or regenerate the report with an older formatters CLI.\n </p>\n ) : null}\n {error.issues && error.issues.length > 0 ? (\n <details>\n <summary>{error.issues.length} validation issue{error.issues.length === 1 ? \"\" : \"s\"}</summary>\n <pre>\n {error.issues\n .slice(0, 20)\n .map((i) => `${i.path}: ${i.message}`)\n .join(\"\\n\")}\n </pre>\n </details>\n ) : null}\n </section>\n );\n}\n","import type { StoryReport } from \"executable-stories-formatters\";\nimport type { Result } from \"../result\";\nimport type { BuiltinRenderers, CustomRenderers } from \"../renderers\";\nimport { ReportRoot } from \"../context/ReportRoot\";\nimport { ReportSummary } from \"./ReportSummary\";\nimport { ReportFeatureList } from \"./ReportFeatureList\";\nimport { ReportEmpty } from \"./ReportEmpty\";\nimport { ReportSchemaError } from \"./ReportSchemaError\";\n\nexport interface ReportProps {\n /** A StoryReport, or a Result-wrapped one (e.g., from parseStoryReport). */\n report: StoryReport | Result<StoryReport>;\n /** Renderers keyed by `story.custom({ type })` strings. */\n customRenderers?: CustomRenderers;\n /** Optional overrides for the heavy built-ins (mermaid, code, section). */\n renderers?: BuiltinRenderers;\n /** Optional class on the <main> landmark for layout positioning. */\n className?: string;\n /** Optional override title. */\n title?: string;\n /** Optional theme attribute scope. Use to force \"light\" or \"dark\". */\n dataTheme?: \"light\" | \"dark\";\n}\n\nfunction isResult(value: ReportProps[\"report\"]): value is Result<StoryReport> {\n return typeof value === \"object\"\n && value !== null\n && \"ok\" in (value as object)\n && typeof (value as { ok: unknown }).ok === \"boolean\";\n}\n\nexport function Report(props: ReportProps) {\n const { report, customRenderers, renderers, className, title, dataTheme } = props;\n if (isResult(report)) {\n if (!report.ok) {\n return (\n <main\n className={[\"es-report\", className].filter(Boolean).join(\" \")}\n aria-label={title ?? \"Test report\"}\n data-theme={dataTheme}\n >\n <ReportSchemaError error={report.error} />\n </main>\n );\n }\n return (\n <ReportView\n report={report.data}\n customRenderers={customRenderers}\n renderers={renderers}\n className={className}\n title={title}\n dataTheme={dataTheme}\n />\n );\n }\n return (\n <ReportView\n report={report}\n customRenderers={customRenderers}\n renderers={renderers}\n className={className}\n title={title}\n dataTheme={dataTheme}\n />\n );\n}\n\ninterface ReportViewProps {\n report: StoryReport;\n customRenderers?: CustomRenderers;\n renderers?: BuiltinRenderers;\n className?: string;\n title?: string;\n dataTheme?: \"light\" | \"dark\";\n}\n\nfunction ReportView({\n report,\n customRenderers,\n renderers,\n className,\n title,\n dataTheme,\n}: ReportViewProps) {\n const hasContent = report.features.length > 0;\n return (\n <ReportRoot report={report} customRenderers={customRenderers} renderers={renderers}>\n <main\n className={[\"es-report\", className].filter(Boolean).join(\" \")}\n aria-label={title ?? \"Test report\"}\n data-theme={dataTheme}\n >\n <header className=\"es-report-header\">\n <h1>{title ?? \"Story Report\"}</h1>\n <ReportSummary />\n </header>\n {hasContent ? <ReportFeatureList /> : <ReportEmpty />}\n </main>\n </ReportRoot>\n );\n}\n","/**\n * Result<T> — explicit success/error type matching the cookbook convention.\n *\n * Used at the boundary where a StoryReport is parsed: the consumer hands us\n * an unknown value (file contents, fetch body, prop) and we return a Result.\n */\n\nexport type Result<T, E = ReportParseError> =\n | { ok: true; data: T }\n | { ok: false; error: E };\n\nexport interface ReportParseError {\n message: string;\n code: ReportParseErrorCode;\n issues?: readonly { path: string; message: string }[];\n}\n\nexport type ReportParseErrorCode =\n | \"INVALID_INPUT\"\n | \"SCHEMA_VERSION_MISMATCH\"\n | \"VALIDATION_FAILED\";\n\nexport const ok = <T>(data: T): Result<T> => ({ ok: true, data });\nexport const err = (error: ReportParseError): Result<never> => ({ ok: false, error });\n","/**\n * StoryReport runtime Zod schema, derived from the canonical JSON Schema\n * at executable-stories-formatters/schemas/story-report-v1.json.\n *\n * Uses z.fromJSONSchema (experimental in Zod 4.x). If the API changes upstream,\n * only this file needs updating — the rest of the package consumes\n * `storyReportSchema` and `StoryReportSchemaShape` via parse.ts.\n *\n * The JSON Schema is bundled at build time by tsup (resolveJsonModule).\n */\n\nimport { z } from \"zod\";\nimport schemaJson from \"../../../executable-stories-formatters/schemas/story-report-v1.json\" with { type: \"json\" };\n\nconst compiled = z.fromJSONSchema(schemaJson as Parameters<typeof z.fromJSONSchema>[0]);\n\nexport const storyReportSchema = compiled;\nexport type StoryReportSchemaShape = z.infer<typeof compiled>;\n\nexport const STORY_REPORT_SCHEMA_MAJOR = 1 as const;\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"$id\": \"https://executable-stories.dev/schemas/story-report-v1.schema.json\",\n \"title\": \"StoryReport\",\n \"description\": \"Pre-grouped, denormalized report shape consumed by UI renderers (React, Svelte, Vue, etc.). Stable public contract — additive-only within a major. Distinct from internal TestRunResult.\",\n \"type\": \"object\",\n \"$ref\": \"#/$defs/StoryReport\",\n \"$defs\": {\n \"StoryReport\": {\n \"type\": \"object\",\n \"description\": \"Top-level report containing all features, runtime metadata, and a pre-computed summary.\",\n \"properties\": {\n \"schemaVersion\": {\n \"type\": \"string\",\n \"pattern\": \"^1\\\\.[0-9]+$\",\n \"description\": \"Schema version as 'major.minor'. Major bumps are breaking; minors are additive-only. UI packages must accept any 1.x.\"\n },\n \"runId\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Unique deterministic identifier for this run.\"\n },\n \"startedAtMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Run start time as Unix epoch milliseconds.\"\n },\n \"finishedAtMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Run finish time as Unix epoch milliseconds.\"\n },\n \"durationMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Total run duration in milliseconds.\"\n },\n \"projectRoot\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Absolute path to the project root (for context only; relative paths in features.sourceFile are preferred).\"\n },\n \"packageVersion\": {\n \"type\": \"string\",\n \"description\": \"Version of the package under test, if known.\"\n },\n \"gitSha\": {\n \"type\": \"string\",\n \"description\": \"Git commit SHA at the time of the run.\"\n },\n \"ci\": {\n \"$ref\": \"#/$defs/CIInfo\"\n },\n \"coverage\": {\n \"$ref\": \"#/$defs/CoverageSummary\"\n },\n \"summary\": {\n \"$ref\": \"#/$defs/Summary\",\n \"description\": \"Pre-computed counts across all features and scenarios.\"\n },\n \"features\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Feature\" },\n \"description\": \"Features grouped by sourceFile, sorted by title.\"\n }\n },\n \"required\": [\"schemaVersion\", \"runId\", \"startedAtMs\", \"finishedAtMs\", \"durationMs\", \"projectRoot\", \"summary\", \"features\"],\n \"additionalProperties\": false\n },\n \"Summary\": {\n \"type\": \"object\",\n \"description\": \"Counts by status. Sums equal 'total'.\",\n \"properties\": {\n \"total\": { \"type\": \"integer\", \"minimum\": 0 },\n \"passed\": { \"type\": \"integer\", \"minimum\": 0 },\n \"failed\": { \"type\": \"integer\", \"minimum\": 0 },\n \"skipped\": { \"type\": \"integer\", \"minimum\": 0 },\n \"pending\": { \"type\": \"integer\", \"minimum\": 0 },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 }\n },\n \"required\": [\"total\", \"passed\", \"failed\", \"skipped\", \"pending\", \"durationMs\"],\n \"additionalProperties\": false\n },\n \"Feature\": {\n \"type\": \"object\",\n \"description\": \"A group of scenarios from the same source file.\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Stable slug derived from the relative source path. Suitable for use as a deep-link anchor.\"\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Display title. Derived from describe block when present, otherwise the file basename.\"\n },\n \"sourceFile\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Source path, relative to projectRoot when possible.\"\n },\n \"summary\": { \"$ref\": \"#/$defs/Summary\" },\n \"scenarios\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Scenario\" },\n \"description\": \"Scenarios in this feature, in declaration order.\"\n }\n },\n \"required\": [\"id\", \"title\", \"sourceFile\", \"summary\", \"scenarios\"],\n \"additionalProperties\": false\n },\n \"Scenario\": {\n \"type\": \"object\",\n \"description\": \"A single scenario with its steps, story-level doc entries, and attachments.\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Stable identifier: '<feature.id>--<slug-of-title>'. Suitable for use as a deep-link anchor.\"\n },\n \"title\": { \"type\": \"string\", \"minLength\": 1 },\n \"status\": { \"$ref\": \"#/$defs/TestStatus\" },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 },\n \"tags\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"description\": \"Normalized tags, deduplicated, lowercased.\"\n },\n \"tickets\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Ticket\" }\n },\n \"sourceLine\": { \"type\": \"integer\", \"minimum\": 1 },\n \"errorMessage\": { \"type\": \"string\" },\n \"errorStack\": { \"type\": \"string\" },\n \"retry\": { \"type\": \"integer\", \"minimum\": 0 },\n \"retries\": { \"type\": \"integer\", \"minimum\": 0 },\n \"docEntries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" },\n \"description\": \"Story-level doc entries (rendered before steps).\"\n },\n \"steps\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Step\" }\n },\n \"attachments\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Attachment\" }\n }\n },\n \"required\": [\"id\", \"title\", \"status\", \"durationMs\", \"tags\", \"retry\", \"retries\", \"docEntries\", \"steps\", \"attachments\"],\n \"additionalProperties\": false\n },\n \"Step\": {\n \"type\": \"object\",\n \"description\": \"A single BDD step.\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"minLength\": 1 },\n \"index\": { \"type\": \"integer\", \"minimum\": 0 },\n \"keyword\": { \"$ref\": \"#/$defs/StepKeyword\" },\n \"text\": { \"type\": \"string\" },\n \"status\": { \"$ref\": \"#/$defs/TestStatus\" },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 },\n \"errorMessage\": { \"type\": \"string\" },\n \"mode\": { \"$ref\": \"#/$defs/StepMode\" },\n \"docEntries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" },\n \"description\": \"Doc entries attached to this step.\"\n }\n },\n \"required\": [\"id\", \"index\", \"keyword\", \"text\", \"status\", \"durationMs\", \"docEntries\"],\n \"additionalProperties\": false\n },\n \"StepKeyword\": {\n \"type\": \"string\",\n \"enum\": [\"Given\", \"When\", \"Then\", \"And\", \"But\"]\n },\n \"StepMode\": {\n \"type\": \"string\",\n \"enum\": [\"normal\", \"skip\", \"only\", \"todo\", \"fails\", \"concurrent\"]\n },\n \"TestStatus\": {\n \"type\": \"string\",\n \"enum\": [\"passed\", \"failed\", \"skipped\", \"pending\"]\n },\n \"Ticket\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"minLength\": 1 },\n \"url\": { \"type\": \"string\" }\n },\n \"required\": [\"id\"],\n \"additionalProperties\": false\n },\n \"Attachment\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"mediaType\": { \"type\": \"string\", \"minLength\": 1 },\n \"body\": { \"type\": \"string\" },\n \"contentEncoding\": {\n \"type\": \"string\",\n \"enum\": [\"BASE64\", \"IDENTITY\"]\n }\n },\n \"required\": [\"name\", \"mediaType\", \"body\", \"contentEncoding\"],\n \"additionalProperties\": false\n },\n \"CIInfo\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"buildNumber\": { \"type\": \"string\" },\n \"branch\": { \"type\": \"string\" },\n \"commitSha\": { \"type\": \"string\" },\n \"prNumber\": { \"type\": \"string\" }\n },\n \"required\": [\"name\"],\n \"additionalProperties\": false\n },\n \"CoverageSummary\": {\n \"type\": \"object\",\n \"properties\": {\n \"linesPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"branchesPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"functionsPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"statementsPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 }\n },\n \"additionalProperties\": false\n },\n \"DocPhase\": {\n \"type\": \"string\",\n \"enum\": [\"static\", \"runtime\"]\n },\n \"DocEntry\": {\n \"oneOf\": [\n { \"$ref\": \"#/$defs/DocNote\" },\n { \"$ref\": \"#/$defs/DocTag\" },\n { \"$ref\": \"#/$defs/DocKv\" },\n { \"$ref\": \"#/$defs/DocCode\" },\n { \"$ref\": \"#/$defs/DocTable\" },\n { \"$ref\": \"#/$defs/DocLink\" },\n { \"$ref\": \"#/$defs/DocSection\" },\n { \"$ref\": \"#/$defs/DocMermaid\" },\n { \"$ref\": \"#/$defs/DocScreenshot\" },\n { \"$ref\": \"#/$defs/DocCustom\" }\n ]\n },\n \"DocNote\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"note\" },\n \"text\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"text\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocTag\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"tag\" },\n \"names\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"names\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocKv\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"kv\" },\n \"label\": { \"type\": \"string\" },\n \"value\": {},\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"value\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocCode\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"code\" },\n \"label\": { \"type\": \"string\" },\n \"content\": { \"type\": \"string\" },\n \"lang\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"content\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocTable\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"table\" },\n \"label\": { \"type\": \"string\" },\n \"columns\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n \"rows\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"columns\", \"rows\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocLink\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"link\" },\n \"label\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"url\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocSection\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"section\" },\n \"title\": { \"type\": \"string\" },\n \"markdown\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"title\", \"markdown\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocMermaid\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"mermaid\" },\n \"code\": { \"type\": \"string\" },\n \"title\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"code\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocScreenshot\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"screenshot\" },\n \"path\": { \"type\": \"string\" },\n \"alt\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"path\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocCustom\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"custom\" },\n \"type\": { \"type\": \"string\", \"minLength\": 1 },\n \"data\": {},\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"type\", \"data\", \"phase\"],\n \"additionalProperties\": false\n }\n }\n}\n","/**\n * parseStoryReport — boundary validator. Accepts unknown input (file contents,\n * fetch body, prop) and returns a Result-typed StoryReport.\n */\n\nimport type { StoryReport } from \"executable-stories-formatters\";\nimport type { Result } from \"../result\";\nimport { ok, err } from \"../result\";\nimport { storyReportSchema, STORY_REPORT_SCHEMA_MAJOR } from \"./story-report.schema\";\n\nexport function parseStoryReport(input: unknown): Result<StoryReport> {\n if (input === null || typeof input !== \"object\") {\n return err({\n message: \"Expected a StoryReport object.\",\n code: \"INVALID_INPUT\",\n });\n }\n\n const versionRaw = (input as { schemaVersion?: unknown }).schemaVersion;\n if (typeof versionRaw === \"string\") {\n const major = versionRaw.split(\".\")[0];\n if (major !== String(STORY_REPORT_SCHEMA_MAJOR)) {\n return err({\n message: `Schema major ${major} is not supported by this version of executable-stories-react (expected ${STORY_REPORT_SCHEMA_MAJOR}.x). Upgrade the package.`,\n code: \"SCHEMA_VERSION_MISMATCH\",\n });\n }\n }\n\n const parsed = storyReportSchema.safeParse(input);\n if (parsed.success) {\n return ok(parsed.data as StoryReport);\n }\n\n const issues = parsed.error.issues.map((i) => ({\n path: i.path.join(\".\") || \"/\",\n message: i.message,\n }));\n\n return err({\n message: `StoryReport failed validation (${issues.length} issue${issues.length === 1 ? \"\" : \"s\"}).`,\n code: \"VALIDATION_FAILED\",\n issues,\n });\n}\n"],"mappings":"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","names":["jsx","jsx","jsx","jsx","jsxs","useContext","EMPTY_CUSTOM","EMPTY_RENDERERS","useContext","Fragment","jsx","jsxs","jsx","jsxs","jsx","Fragment","jsx","jsxs","Fragment","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","jsx","Fragment","jsx","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsx","jsxs","Fragment","jsx","jsx","jsx","jsxs","jsx","jsxs"]}
1
+ {"version":3,"sources":["../src/context/ReportRoot.tsx","../src/context/ReportContext.ts","../src/hooks/useReport.ts","../src/components/ReportSummary.tsx","../src/components/doc/DocNote.tsx","../src/components/doc/DocTag.tsx","../src/components/doc/DocKv.tsx","../src/hooks/useRenderers.ts","../src/components/doc/DocCode.tsx","../src/components/doc/DocTable.tsx","../src/components/doc/DocLink.tsx","../src/components/doc/DocSection.tsx","../src/components/doc/DocMermaid.tsx","../src/components/doc/DocScreenshot.tsx","../src/components/doc/DocCustom.tsx","../src/components/doc/DocEntry.tsx","../src/components/ReportDocEntries.tsx","../src/components/ReportSteps.tsx","../src/components/ReportScenario.tsx","../src/components/ReportScenarioList.tsx","../src/components/ReportFeature.tsx","../src/components/ReportFeatureList.tsx","../src/components/ReportEmpty.tsx","../src/components/ReportSchemaError.tsx","../src/components/Report.tsx","../src/result.ts","../src/schema/story-report.schema.ts","../../executable-stories-formatters/schemas/story-report-v1.json","../src/schema/parse.ts"],"sourcesContent":["import { useMemo, type ReactNode } from \"react\";\nimport type { StoryReport } from \"executable-stories-formatters\";\nimport type { BuiltinRenderers, CustomRenderers } from \"../renderers\";\nimport { ReportContext, type ReportContextValue } from \"./ReportContext\";\n\nexport interface ReportRootProps {\n report: StoryReport;\n customRenderers?: CustomRenderers;\n renderers?: BuiltinRenderers;\n children: ReactNode;\n}\n\nconst EMPTY_CUSTOM: CustomRenderers = {};\nconst EMPTY_RENDERERS: BuiltinRenderers = {};\n\nexport function ReportRoot({\n report,\n customRenderers,\n renderers,\n children,\n}: ReportRootProps) {\n const value = useMemo<ReportContextValue>(\n () => ({\n report,\n customRenderers: customRenderers ?? EMPTY_CUSTOM,\n renderers: renderers ?? EMPTY_RENDERERS,\n }),\n [report, customRenderers, renderers],\n );\n return <ReportContext.Provider value={value}>{children}</ReportContext.Provider>;\n}\n","import { createContext } from \"react\";\nimport type { StoryReport } from \"executable-stories-formatters\";\nimport type { BuiltinRenderers, CustomRenderers } from \"../renderers\";\n\nexport interface ReportContextValue {\n report: StoryReport;\n customRenderers: CustomRenderers;\n renderers: BuiltinRenderers;\n}\n\nexport const ReportContext = createContext<ReportContextValue | null>(null);\n","import { useContext } from \"react\";\nimport { ReportContext } from \"../context/ReportContext\";\n\nexport function useReport() {\n const ctx = useContext(ReportContext);\n if (!ctx) {\n throw new Error(\n \"useReport must be used inside <ReportRoot> or <Report>. Wrap your tree with one of those.\",\n );\n }\n return ctx.report;\n}\n","import type { ReportSummary as ReportSummaryT } from \"executable-stories-formatters\";\nimport { useReport } from \"../hooks/useReport\";\n\nexport interface ReportSummaryProps {\n className?: string;\n}\n\nexport function ReportSummary({ className }: ReportSummaryProps) {\n const report = useReport();\n return (\n <ReportSummaryView\n summary={report.summary}\n {...(className !== undefined && { className })}\n ariaLabel=\"Run summary\"\n />\n );\n}\n\nexport interface ReportSummaryViewProps {\n summary: ReportSummaryT;\n className?: string;\n ariaLabel?: string;\n}\n\nexport function ReportSummaryView({ summary, className, ariaLabel }: ReportSummaryViewProps) {\n return (\n <p\n className={[\"es-report-summary\", className].filter(Boolean).join(\" \")}\n aria-label={ariaLabel}\n >\n <span>\n <strong>{summary.total}</strong> scenario{summary.total === 1 ? \"\" : \"s\"}\n </span>\n {\" · \"}\n <span data-status=\"passed\">{summary.passed} passed</span>\n {\" · \"}\n <span data-status=\"failed\">{summary.failed} failed</span>\n {summary.skipped > 0 ? (\n <>\n {\" · \"}\n <span data-status=\"skipped\">{summary.skipped} skipped</span>\n </>\n ) : null}\n {summary.pending > 0 ? (\n <>\n {\" · \"}\n <span data-status=\"pending\">{summary.pending} pending</span>\n </>\n ) : null}\n </p>\n );\n}\n","import type { ReportDocNote } from \"executable-stories-formatters\";\n\nexport function DocNote({ entry }: { entry: ReportDocNote }) {\n return <p className=\"es-doc es-doc-note\">{entry.text}</p>;\n}\n","import type { ReportDocTag } from \"executable-stories-formatters\";\n\nexport function DocTag({ entry }: { entry: ReportDocTag }) {\n return (\n <ul className=\"es-doc es-tags\" aria-label=\"Tags\">\n {entry.names.map((n) => (\n <li key={n}>{n}</li>\n ))}\n </ul>\n );\n}\n","import type { ReportDocKv } from \"executable-stories-formatters\";\n\nfunction formatValue(value: unknown): string {\n if (value === null) return \"null\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function DocKv({ entry }: { entry: ReportDocKv }) {\n return (\n <dl className=\"es-doc es-doc-kv\">\n <dt>{entry.label}</dt>\n <dd>{formatValue(entry.value)}</dd>\n </dl>\n );\n}\n","import { useContext } from \"react\";\nimport { ReportContext } from \"../context/ReportContext\";\nimport type { BuiltinRenderers, CustomRenderers } from \"../renderers\";\n\nconst EMPTY_CUSTOM: CustomRenderers = {};\nconst EMPTY_RENDERERS: BuiltinRenderers = {};\n\nexport function useCustomRenderers(): CustomRenderers {\n const ctx = useContext(ReportContext);\n return ctx?.customRenderers ?? EMPTY_CUSTOM;\n}\n\nexport function useBuiltinRenderers(): BuiltinRenderers {\n const ctx = useContext(ReportContext);\n return ctx?.renderers ?? EMPTY_RENDERERS;\n}\n","import type { ReportDocCode } from \"executable-stories-formatters\";\nimport { useBuiltinRenderers } from \"../../hooks/useRenderers\";\n\nexport function DocCode({ entry }: { entry: ReportDocCode }) {\n const renderers = useBuiltinRenderers();\n if (renderers.code) {\n return <>{renderers.code(entry)}</>;\n }\n return (\n <figure className=\"es-doc es-doc-code\">\n <figcaption>{entry.label}</figcaption>\n <pre>\n <code className={entry.lang ? `language-${entry.lang}` : undefined}>\n {entry.content}\n </code>\n </pre>\n </figure>\n );\n}\n","import type { ReportDocTable } from \"executable-stories-formatters\";\n\nexport function DocTable({ entry }: { entry: ReportDocTable }) {\n return (\n <figure className=\"es-doc es-doc-table\">\n <figcaption>{entry.label}</figcaption>\n <table>\n <thead>\n <tr>\n {entry.columns.map((c) => (\n <th key={c} scope=\"col\">{c}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {entry.rows.map((row, i) => (\n <tr key={i}>\n {row.map((cell, j) => (\n <td key={j}>{cell}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </figure>\n );\n}\n","import type { ReportDocLink } from \"executable-stories-formatters\";\n\nexport function DocLink({ entry }: { entry: ReportDocLink }) {\n return (\n <a\n className=\"es-doc es-doc-link\"\n href={entry.url}\n rel=\"noreferrer noopener\"\n target=\"_blank\"\n >\n {entry.label}\n </a>\n );\n}\n","import { marked } from \"marked\";\nimport type { ReportDocSection } from \"executable-stories-formatters\";\nimport { useBuiltinRenderers } from \"../../hooks/useRenderers\";\n\n/**\n * Strips the most common dangerous patterns from marked-generated HTML:\n * - <script>...</script> blocks\n * - <style>...</style> blocks\n * - on* event-handler attributes\n * - javascript: URLs on href / src\n *\n * Not a substitute for a full HTML sanitizer (DOMPurify, sanitize-html).\n * For high-untrust input, supply `renderers.section` with your own sanitizer.\n */\nfunction safeMarkdownHtml(markdown: string): string {\n const raw = marked.parse(markdown, { async: false }) as string;\n return raw\n .replace(/<script\\b[^>]*>[\\s\\S]*?<\\/script>/gi, \"\")\n .replace(/<style\\b[^>]*>[\\s\\S]*?<\\/style>/gi, \"\")\n .replace(/\\son[a-z]+\\s*=\\s*\"[^\"]*\"/gi, \"\")\n .replace(/\\son[a-z]+\\s*=\\s*'[^']*'/gi, \"\")\n .replace(/\\son[a-z]+\\s*=\\s*[^\\s>]+/gi, \"\")\n .replace(/(href|src)\\s*=\\s*\"\\s*javascript:[^\"]*\"/gi, '$1=\"#\"')\n .replace(/(href|src)\\s*=\\s*'\\s*javascript:[^']*'/gi, \"$1='#'\");\n}\n\nexport function DocSection({ entry }: { entry: ReportDocSection }) {\n const renderers = useBuiltinRenderers();\n if (renderers.section) {\n return <>{renderers.section(entry)}</>;\n }\n const html = safeMarkdownHtml(entry.markdown);\n return (\n <section className=\"es-doc es-doc-section\" aria-label={entry.title}>\n {entry.title ? <h4 className=\"es-doc-section-title\">{entry.title}</h4> : null}\n <div\n className=\"es-doc-section-content\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </section>\n );\n}\n","import type { ReportDocMermaid } from \"executable-stories-formatters\";\nimport { useBuiltinRenderers } from \"../../hooks/useRenderers\";\n\n/**\n * Renders mermaid source as a semantic <pre data-mermaid> by default.\n *\n * AI agents and screen readers get the raw source. To render the diagram\n * visually, supply a `renderers.mermaid` prop with a client-only component\n * (e.g., one that dynamically imports the mermaid library on mount).\n */\nexport function DocMermaid({ entry }: { entry: ReportDocMermaid }) {\n const renderers = useBuiltinRenderers();\n if (renderers.mermaid) {\n return <>{renderers.mermaid(entry)}</>;\n }\n return (\n <figure\n className=\"es-doc es-doc-mermaid\"\n aria-label={entry.title ?? \"Diagram\"}\n >\n {entry.title ? <figcaption>{entry.title}</figcaption> : null}\n <pre data-mermaid>{entry.code}</pre>\n </figure>\n );\n}\n","import type { ReportDocScreenshot } from \"executable-stories-formatters\";\n\nexport function DocScreenshot({ entry }: { entry: ReportDocScreenshot }) {\n return (\n <figure className=\"es-doc es-doc-screenshot\">\n <img src={entry.path} alt={entry.alt ?? \"\"} loading=\"lazy\" />\n {entry.alt ? <figcaption>{entry.alt}</figcaption> : null}\n </figure>\n );\n}\n","import type { ReportDocCustom } from \"executable-stories-formatters\";\nimport { useCustomRenderers } from \"../../hooks/useRenderers\";\n\nexport function DocCustom({ entry }: { entry: ReportDocCustom }) {\n const renderers = useCustomRenderers();\n const renderer = renderers[entry.type];\n if (renderer) {\n return <>{renderer(entry)}</>;\n }\n return (\n <div className=\"es-doc es-doc-custom\" data-type={entry.type}>\n <p className=\"es-doc-custom-type\">{entry.type}</p>\n <pre>{safeStringify(entry.data)}</pre>\n </div>\n );\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n","import type { ReportDocEntry } from \"executable-stories-formatters\";\nimport { DocNote } from \"./DocNote\";\nimport { DocTag } from \"./DocTag\";\nimport { DocKv } from \"./DocKv\";\nimport { DocCode } from \"./DocCode\";\nimport { DocTable } from \"./DocTable\";\nimport { DocLink } from \"./DocLink\";\nimport { DocSection } from \"./DocSection\";\nimport { DocMermaid } from \"./DocMermaid\";\nimport { DocScreenshot } from \"./DocScreenshot\";\nimport { DocCustom } from \"./DocCustom\";\n\nexport function DocEntry({ entry }: { entry: ReportDocEntry }) {\n switch (entry.kind) {\n case \"note\":\n return <DocNote entry={entry} />;\n case \"tag\":\n return <DocTag entry={entry} />;\n case \"kv\":\n return <DocKv entry={entry} />;\n case \"code\":\n return <DocCode entry={entry} />;\n case \"table\":\n return <DocTable entry={entry} />;\n case \"link\":\n return <DocLink entry={entry} />;\n case \"section\":\n return <DocSection entry={entry} />;\n case \"mermaid\":\n return <DocMermaid entry={entry} />;\n case \"screenshot\":\n return <DocScreenshot entry={entry} />;\n case \"custom\":\n return <DocCustom entry={entry} />;\n }\n}\n","import type { ReportDocEntry } from \"executable-stories-formatters\";\nimport { DocEntry } from \"./doc/DocEntry\";\n\nexport interface ReportDocEntriesProps {\n entries: readonly ReportDocEntry[];\n}\n\nexport function ReportDocEntries({ entries }: ReportDocEntriesProps) {\n if (entries.length === 0) return null;\n return (\n <>\n {entries.map((entry, i) => (\n <DocEntry key={i} entry={entry} />\n ))}\n </>\n );\n}\n","import type { ReportStep, ReportScenario } from \"executable-stories-formatters\";\nimport { ReportDocEntries } from \"./ReportDocEntries\";\n\nexport interface ReportStepsProps {\n scenario: ReportScenario;\n}\n\nexport function ReportSteps({ scenario }: ReportStepsProps) {\n if (scenario.steps.length === 0) return null;\n return (\n <ol className=\"es-steps\">\n {scenario.steps.map((step) => (\n <ReportStepItem key={step.id} step={step} />\n ))}\n </ol>\n );\n}\n\nexport function ReportStepItem({ step }: { step: ReportStep }) {\n return (\n <li\n id={step.id}\n className={`es-step es-step-${step.status}`}\n data-status={step.status}\n >\n <span className=\"es-step-keyword\">{step.keyword}</span>\n <span className=\"es-step-text\">{step.text}</span>\n {step.errorMessage ? (\n <pre className=\"es-scenario-error\" role=\"alert\">{step.errorMessage}</pre>\n ) : null}\n {step.docEntries.length > 0 ? (\n <div className=\"es-step-docs\">\n <ReportDocEntries entries={step.docEntries} />\n </div>\n ) : null}\n </li>\n );\n}\n","import type { ReportScenario as ReportScenarioT } from \"executable-stories-formatters\";\nimport { ReportSteps } from \"./ReportSteps\";\nimport { ReportDocEntries } from \"./ReportDocEntries\";\n\nexport interface ReportScenarioProps {\n scenario: ReportScenarioT;\n}\n\nconst STATUS_LABEL: Record<ReportScenarioT[\"status\"], string> = {\n passed: \"Passed\",\n failed: \"Failed\",\n skipped: \"Skipped\",\n pending: \"Pending\",\n};\n\nexport function ReportScenario({ scenario }: ReportScenarioProps) {\n const titleId = `${scenario.id}-title`;\n return (\n <article\n id={scenario.id}\n className={`es-scenario es-status-${scenario.status}`}\n aria-labelledby={titleId}\n data-status={scenario.status}\n >\n <h3 id={titleId} className=\"es-scenario-title\">\n <span>{scenario.title}</span>\n <span className=\"es-scenario-status\" aria-label={`Status: ${STATUS_LABEL[scenario.status]}`}>\n {STATUS_LABEL[scenario.status]}\n </span>\n </h3>\n {scenario.tags.length > 0 ? (\n <ul className=\"es-tags\" aria-label=\"Tags\">\n {scenario.tags.map((t) => (\n <li key={t}>{t}</li>\n ))}\n </ul>\n ) : null}\n {scenario.errorMessage ? (\n <pre className=\"es-scenario-error\" role=\"alert\">{scenario.errorMessage}</pre>\n ) : null}\n {scenario.docEntries.length > 0 ? (\n <div className=\"es-scenario-docs\">\n <ReportDocEntries entries={scenario.docEntries} />\n </div>\n ) : null}\n <ReportSteps scenario={scenario} />\n </article>\n );\n}\n","import type { ReportFeature } from \"executable-stories-formatters\";\nimport { ReportScenario } from \"./ReportScenario\";\n\nexport interface ReportScenarioListProps {\n feature: ReportFeature;\n}\n\nexport function ReportScenarioList({ feature }: ReportScenarioListProps) {\n return (\n <>\n {feature.scenarios.map((scenario) => (\n <ReportScenario key={scenario.id} scenario={scenario} />\n ))}\n </>\n );\n}\n","import type { ReportFeature as ReportFeatureT } from \"executable-stories-formatters\";\nimport { ReportScenarioList } from \"./ReportScenarioList\";\nimport { ReportSummaryView } from \"./ReportSummary\";\n\nexport interface ReportFeatureProps {\n feature: ReportFeatureT;\n}\n\nexport function ReportFeature({ feature }: ReportFeatureProps) {\n const titleId = `${feature.id}-title`;\n return (\n <section\n id={feature.id}\n className=\"es-feature\"\n aria-labelledby={titleId}\n >\n <h2 id={titleId} className=\"es-feature-title\">{feature.title}</h2>\n <p className=\"es-feature-source\">{feature.sourceFile}</p>\n <ReportSummaryView summary={feature.summary} className=\"es-feature-summary\" />\n <ReportScenarioList feature={feature} />\n </section>\n );\n}\n","import { useReport } from \"../hooks/useReport\";\nimport { ReportFeature } from \"./ReportFeature\";\n\nexport function ReportFeatureList() {\n const report = useReport();\n return (\n <>\n {report.features.map((feature) => (\n <ReportFeature key={feature.id} feature={feature} />\n ))}\n </>\n );\n}\n","export interface ReportEmptyProps {\n message?: string;\n}\n\nexport function ReportEmpty({ message }: ReportEmptyProps) {\n return (\n <section className=\"es-empty\" aria-live=\"polite\">\n <p>{message ?? \"No scenarios in this report.\"}</p>\n </section>\n );\n}\n","import type { ReportParseError } from \"../result\";\n\nexport interface ReportSchemaErrorProps {\n error: ReportParseError;\n}\n\nexport function ReportSchemaError({ error }: ReportSchemaErrorProps) {\n return (\n <section className=\"es-schema-error\" role=\"alert\" aria-live=\"assertive\">\n <p>\n <strong>Report could not be displayed.</strong>\n </p>\n <p>{error.message}</p>\n {error.code === \"SCHEMA_VERSION_MISMATCH\" ? (\n <p>\n The report bundle is newer than this version of <code>executable-stories-react</code>.\n Upgrade the package, or regenerate the report with an older formatters CLI.\n </p>\n ) : null}\n {error.issues && error.issues.length > 0 ? (\n <details>\n <summary>{error.issues.length} validation issue{error.issues.length === 1 ? \"\" : \"s\"}</summary>\n <pre>\n {error.issues\n .slice(0, 20)\n .map((i) => `${i.path}: ${i.message}`)\n .join(\"\\n\")}\n </pre>\n </details>\n ) : null}\n </section>\n );\n}\n","import type { StoryReport } from \"executable-stories-formatters\";\nimport type { Result } from \"../result\";\nimport type { BuiltinRenderers, CustomRenderers } from \"../renderers\";\nimport { ReportRoot } from \"../context/ReportRoot\";\nimport { ReportSummary } from \"./ReportSummary\";\nimport { ReportFeatureList } from \"./ReportFeatureList\";\nimport { ReportEmpty } from \"./ReportEmpty\";\nimport { ReportSchemaError } from \"./ReportSchemaError\";\n\nexport interface ReportProps {\n /** A StoryReport, or a Result-wrapped one (e.g., from parseStoryReport). */\n report: StoryReport | Result<StoryReport>;\n /** Renderers keyed by `story.custom({ type })` strings. */\n customRenderers?: CustomRenderers;\n /** Optional overrides for the heavy built-ins (mermaid, code, section). */\n renderers?: BuiltinRenderers;\n /** Optional class on the <main> landmark for layout positioning. */\n className?: string;\n /** Optional override title. */\n title?: string;\n /** Optional theme attribute scope. Use to force \"light\" or \"dark\". */\n dataTheme?: \"light\" | \"dark\";\n}\n\nfunction isResult(value: ReportProps[\"report\"]): value is Result<StoryReport> {\n return typeof value === \"object\"\n && value !== null\n && \"ok\" in (value as object)\n && typeof (value as { ok: unknown }).ok === \"boolean\";\n}\n\nexport function Report(props: ReportProps) {\n const { report, customRenderers, renderers, className, title, dataTheme } = props;\n if (isResult(report)) {\n if (!report.ok) {\n return (\n <main\n className={[\"es-report\", className].filter(Boolean).join(\" \")}\n aria-label={title ?? \"Test report\"}\n data-theme={dataTheme}\n >\n <ReportSchemaError error={report.error} />\n </main>\n );\n }\n return (\n <ReportView\n report={report.data}\n customRenderers={customRenderers}\n renderers={renderers}\n className={className}\n title={title}\n dataTheme={dataTheme}\n />\n );\n }\n return (\n <ReportView\n report={report}\n customRenderers={customRenderers}\n renderers={renderers}\n className={className}\n title={title}\n dataTheme={dataTheme}\n />\n );\n}\n\ninterface ReportViewProps {\n report: StoryReport;\n customRenderers?: CustomRenderers;\n renderers?: BuiltinRenderers;\n className?: string;\n title?: string;\n dataTheme?: \"light\" | \"dark\";\n}\n\nfunction ReportView({\n report,\n customRenderers,\n renderers,\n className,\n title,\n dataTheme,\n}: ReportViewProps) {\n const hasContent = report.features.length > 0;\n return (\n <ReportRoot report={report} customRenderers={customRenderers} renderers={renderers}>\n <main\n className={[\"es-report\", className].filter(Boolean).join(\" \")}\n aria-label={title ?? \"Test report\"}\n data-theme={dataTheme}\n >\n <header className=\"es-report-header\">\n <h1>{title ?? \"Story Report\"}</h1>\n <ReportSummary />\n </header>\n {hasContent ? <ReportFeatureList /> : <ReportEmpty />}\n </main>\n </ReportRoot>\n );\n}\n","/**\n * Result<T> — explicit success/error type matching the cookbook convention.\n *\n * Used at the boundary where a StoryReport is parsed: the consumer hands us\n * an unknown value (file contents, fetch body, prop) and we return a Result.\n */\n\nexport type Result<T, E = ReportParseError> =\n | { ok: true; data: T }\n | { ok: false; error: E };\n\nexport interface ReportParseError {\n message: string;\n code: ReportParseErrorCode;\n issues?: readonly { path: string; message: string }[];\n}\n\nexport type ReportParseErrorCode =\n | \"INVALID_INPUT\"\n | \"SCHEMA_VERSION_MISMATCH\"\n | \"VALIDATION_FAILED\";\n\nexport const ok = <T>(data: T): Result<T> => ({ ok: true, data });\nexport const err = (error: ReportParseError): Result<never> => ({ ok: false, error });\n","/**\n * StoryReport runtime Zod schema, derived from the canonical JSON Schema\n * at executable-stories-formatters/schemas/story-report-v1.json.\n *\n * Uses z.fromJSONSchema (experimental in Zod 4.x). If the API changes upstream,\n * only this file needs updating — the rest of the package consumes\n * `storyReportSchema` and `StoryReportSchemaShape` via parse.ts.\n *\n * The JSON Schema is bundled at build time by tsup (resolveJsonModule).\n */\n\nimport { z } from \"zod\";\nimport schemaJson from \"../../../executable-stories-formatters/schemas/story-report-v1.json\" with { type: \"json\" };\n\nconst compiled = z.fromJSONSchema(schemaJson as Parameters<typeof z.fromJSONSchema>[0]);\n\nexport const storyReportSchema = compiled;\nexport type StoryReportSchemaShape = z.infer<typeof compiled>;\n\nexport const STORY_REPORT_SCHEMA_MAJOR = 1 as const;\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"$id\": \"https://executable-stories.dev/schemas/story-report-v1.schema.json\",\n \"title\": \"StoryReport\",\n \"description\": \"Pre-grouped, denormalized report shape consumed by UI renderers (React, Svelte, Vue, etc.). Stable public contract — additive-only within a major. Distinct from internal TestRunResult.\",\n \"type\": \"object\",\n \"$ref\": \"#/$defs/StoryReport\",\n \"$defs\": {\n \"StoryReport\": {\n \"type\": \"object\",\n \"description\": \"Top-level report containing all features, runtime metadata, and a pre-computed summary.\",\n \"properties\": {\n \"schemaVersion\": {\n \"type\": \"string\",\n \"pattern\": \"^1\\\\.[0-9]+$\",\n \"description\": \"Schema version as 'major.minor'. Major bumps are breaking; minors are additive-only. UI packages must accept any 1.x.\"\n },\n \"runId\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Unique deterministic identifier for this run.\"\n },\n \"startedAtMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Run start time as Unix epoch milliseconds.\"\n },\n \"finishedAtMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Run finish time as Unix epoch milliseconds.\"\n },\n \"durationMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Total run duration in milliseconds.\"\n },\n \"projectRoot\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Absolute path to the project root (for context only; relative paths in features.sourceFile are preferred).\"\n },\n \"packageVersion\": {\n \"type\": \"string\",\n \"description\": \"Version of the package under test, if known.\"\n },\n \"gitSha\": {\n \"type\": \"string\",\n \"description\": \"Git commit SHA at the time of the run.\"\n },\n \"ci\": {\n \"$ref\": \"#/$defs/CIInfo\"\n },\n \"coverage\": {\n \"$ref\": \"#/$defs/CoverageSummary\"\n },\n \"summary\": {\n \"$ref\": \"#/$defs/Summary\",\n \"description\": \"Pre-computed counts across all features and scenarios.\"\n },\n \"features\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Feature\" },\n \"description\": \"Features grouped by sourceFile, sorted by title.\"\n }\n },\n \"required\": [\"schemaVersion\", \"runId\", \"startedAtMs\", \"finishedAtMs\", \"durationMs\", \"projectRoot\", \"summary\", \"features\"],\n \"additionalProperties\": false\n },\n \"Summary\": {\n \"type\": \"object\",\n \"description\": \"Counts by status. Sums equal 'total'.\",\n \"properties\": {\n \"total\": { \"type\": \"integer\", \"minimum\": 0 },\n \"passed\": { \"type\": \"integer\", \"minimum\": 0 },\n \"failed\": { \"type\": \"integer\", \"minimum\": 0 },\n \"skipped\": { \"type\": \"integer\", \"minimum\": 0 },\n \"pending\": { \"type\": \"integer\", \"minimum\": 0 },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 }\n },\n \"required\": [\"total\", \"passed\", \"failed\", \"skipped\", \"pending\", \"durationMs\"],\n \"additionalProperties\": false\n },\n \"Feature\": {\n \"type\": \"object\",\n \"description\": \"A group of scenarios from the same source file.\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Stable slug derived from the relative source path. Suitable for use as a deep-link anchor.\"\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Display title. Derived from describe block when present, otherwise the file basename.\"\n },\n \"sourceFile\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Source path, relative to projectRoot when possible.\"\n },\n \"summary\": { \"$ref\": \"#/$defs/Summary\" },\n \"scenarios\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Scenario\" },\n \"description\": \"Scenarios in this feature, in declaration order.\"\n }\n },\n \"required\": [\"id\", \"title\", \"sourceFile\", \"summary\", \"scenarios\"],\n \"additionalProperties\": false\n },\n \"Scenario\": {\n \"type\": \"object\",\n \"description\": \"A single scenario with its steps, story-level doc entries, and attachments.\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Stable identifier: '<feature.id>--<slug-of-title>'. Suitable for use as a deep-link anchor.\"\n },\n \"title\": { \"type\": \"string\", \"minLength\": 1 },\n \"status\": { \"$ref\": \"#/$defs/TestStatus\" },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 },\n \"tags\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"description\": \"Normalized tags, deduplicated, lowercased.\"\n },\n \"tickets\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Ticket\" }\n },\n \"covers\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"description\": \"Product-code paths/globs this scenario exercises.\"\n },\n \"sourceLine\": { \"type\": \"integer\", \"minimum\": 1 },\n \"errorMessage\": { \"type\": \"string\" },\n \"errorStack\": { \"type\": \"string\" },\n \"retry\": { \"type\": \"integer\", \"minimum\": 0 },\n \"retries\": { \"type\": \"integer\", \"minimum\": 0 },\n \"docEntries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" },\n \"description\": \"Story-level doc entries (rendered before steps).\"\n },\n \"steps\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Step\" }\n },\n \"attachments\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Attachment\" }\n }\n },\n \"required\": [\"id\", \"title\", \"status\", \"durationMs\", \"tags\", \"retry\", \"retries\", \"docEntries\", \"steps\", \"attachments\"],\n \"additionalProperties\": false\n },\n \"Step\": {\n \"type\": \"object\",\n \"description\": \"A single BDD step.\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"minLength\": 1 },\n \"index\": { \"type\": \"integer\", \"minimum\": 0 },\n \"keyword\": { \"$ref\": \"#/$defs/StepKeyword\" },\n \"text\": { \"type\": \"string\" },\n \"status\": { \"$ref\": \"#/$defs/TestStatus\" },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 },\n \"errorMessage\": { \"type\": \"string\" },\n \"mode\": { \"$ref\": \"#/$defs/StepMode\" },\n \"docEntries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" },\n \"description\": \"Doc entries attached to this step.\"\n }\n },\n \"required\": [\"id\", \"index\", \"keyword\", \"text\", \"status\", \"durationMs\", \"docEntries\"],\n \"additionalProperties\": false\n },\n \"StepKeyword\": {\n \"type\": \"string\",\n \"enum\": [\"Given\", \"When\", \"Then\", \"And\", \"But\"]\n },\n \"StepMode\": {\n \"type\": \"string\",\n \"enum\": [\"normal\", \"skip\", \"only\", \"todo\", \"fails\", \"concurrent\"]\n },\n \"TestStatus\": {\n \"type\": \"string\",\n \"enum\": [\"passed\", \"failed\", \"skipped\", \"pending\"]\n },\n \"Ticket\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"minLength\": 1 },\n \"url\": { \"type\": \"string\" }\n },\n \"required\": [\"id\"],\n \"additionalProperties\": false\n },\n \"Attachment\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"mediaType\": { \"type\": \"string\", \"minLength\": 1 },\n \"body\": { \"type\": \"string\" },\n \"contentEncoding\": {\n \"type\": \"string\",\n \"enum\": [\"BASE64\", \"IDENTITY\"]\n }\n },\n \"required\": [\"name\", \"mediaType\", \"body\", \"contentEncoding\"],\n \"additionalProperties\": false\n },\n \"CIInfo\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"buildNumber\": { \"type\": \"string\" },\n \"branch\": { \"type\": \"string\" },\n \"commitSha\": { \"type\": \"string\" },\n \"prNumber\": { \"type\": \"string\" }\n },\n \"required\": [\"name\"],\n \"additionalProperties\": false\n },\n \"CoverageSummary\": {\n \"type\": \"object\",\n \"properties\": {\n \"linesPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"branchesPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"functionsPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"statementsPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 }\n },\n \"additionalProperties\": false\n },\n \"DocPhase\": {\n \"type\": \"string\",\n \"enum\": [\"static\", \"runtime\"]\n },\n \"DocEntry\": {\n \"oneOf\": [\n { \"$ref\": \"#/$defs/DocNote\" },\n { \"$ref\": \"#/$defs/DocTag\" },\n { \"$ref\": \"#/$defs/DocKv\" },\n { \"$ref\": \"#/$defs/DocCode\" },\n { \"$ref\": \"#/$defs/DocTable\" },\n { \"$ref\": \"#/$defs/DocLink\" },\n { \"$ref\": \"#/$defs/DocSection\" },\n { \"$ref\": \"#/$defs/DocMermaid\" },\n { \"$ref\": \"#/$defs/DocScreenshot\" },\n { \"$ref\": \"#/$defs/DocCustom\" }\n ]\n },\n \"DocNote\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"note\" },\n \"text\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"text\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocTag\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"tag\" },\n \"names\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"names\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocKv\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"kv\" },\n \"label\": { \"type\": \"string\" },\n \"value\": {},\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"value\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocCode\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"code\" },\n \"label\": { \"type\": \"string\" },\n \"content\": { \"type\": \"string\" },\n \"lang\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"content\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocTable\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"table\" },\n \"label\": { \"type\": \"string\" },\n \"columns\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n \"rows\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"columns\", \"rows\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocLink\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"link\" },\n \"label\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"url\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocSection\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"section\" },\n \"title\": { \"type\": \"string\" },\n \"markdown\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"title\", \"markdown\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocMermaid\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"mermaid\" },\n \"code\": { \"type\": \"string\" },\n \"title\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"code\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocScreenshot\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"screenshot\" },\n \"path\": { \"type\": \"string\" },\n \"alt\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"path\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocCustom\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"custom\" },\n \"type\": { \"type\": \"string\", \"minLength\": 1 },\n \"data\": {},\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"type\", \"data\", \"phase\"],\n \"additionalProperties\": false\n }\n }\n}\n","/**\n * parseStoryReport — boundary validator. Accepts unknown input (file contents,\n * fetch body, prop) and returns a Result-typed StoryReport.\n */\n\nimport type { StoryReport } from \"executable-stories-formatters\";\nimport type { Result } from \"../result\";\nimport { ok, err } from \"../result\";\nimport { storyReportSchema, STORY_REPORT_SCHEMA_MAJOR } from \"./story-report.schema\";\n\nexport function parseStoryReport(input: unknown): Result<StoryReport> {\n if (input === null || typeof input !== \"object\") {\n return err({\n message: \"Expected a StoryReport object.\",\n code: \"INVALID_INPUT\",\n });\n }\n\n const versionRaw = (input as { schemaVersion?: unknown }).schemaVersion;\n if (typeof versionRaw === \"string\") {\n const major = versionRaw.split(\".\")[0];\n if (major !== String(STORY_REPORT_SCHEMA_MAJOR)) {\n return err({\n message: `Schema major ${major} is not supported by this version of executable-stories-react (expected ${STORY_REPORT_SCHEMA_MAJOR}.x). Upgrade the package.`,\n code: \"SCHEMA_VERSION_MISMATCH\",\n });\n }\n }\n\n const parsed = storyReportSchema.safeParse(input);\n if (parsed.success) {\n return ok(parsed.data as StoryReport);\n }\n\n const issues = parsed.error.issues.map((i) => ({\n path: i.path.join(\".\") || \"/\",\n message: i.message,\n }));\n\n return err({\n message: `StoryReport failed validation (${issues.length} issue${issues.length === 1 ? \"\" : \"s\"}).`,\n code: \"VALIDATION_FAILED\",\n issues,\n });\n}\n"],"mappings":"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","names":["jsx","jsx","jsx","jsx","jsxs","useContext","EMPTY_CUSTOM","EMPTY_RENDERERS","useContext","Fragment","jsx","jsxs","jsx","jsxs","jsx","Fragment","jsx","jsxs","Fragment","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","jsx","Fragment","jsx","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsx","jsxs","Fragment","jsx","jsx","jsx","jsxs","jsx","jsxs"]}
package/dist/parse.cjs CHANGED
@@ -169,6 +169,11 @@ var story_report_v1_default = {
169
169
  type: "array",
170
170
  items: { $ref: "#/$defs/Ticket" }
171
171
  },
172
+ covers: {
173
+ type: "array",
174
+ items: { type: "string" },
175
+ description: "Product-code paths/globs this scenario exercises."
176
+ },
172
177
  sourceLine: { type: "integer", minimum: 1 },
173
178
  errorMessage: { type: "string" },
174
179
  errorStack: { type: "string" },
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/parse-entry.ts","../src/result.ts","../src/schema/story-report.schema.ts","../../executable-stories-formatters/schemas/story-report-v1.json","../src/schema/parse.ts"],"sourcesContent":["/**\n * Server-safe entry: parseStoryReport, Result types, schema constants.\n *\n * No React, no hooks, no client-only code. Safe to call from Next.js Server\n * Components, build scripts, edge functions, or anywhere else outside the\n * browser. The main \"executable-stories-react\" entry is marked \"use client\"\n * because it touches createContext; this entry stays clean.\n */\n\nexport { parseStoryReport } from \"./schema/parse\";\nexport { storyReportSchema, STORY_REPORT_SCHEMA_MAJOR } from \"./schema/story-report.schema\";\nexport type { Result, ReportParseError, ReportParseErrorCode } from \"./result\";\nexport { ok, err } from \"./result\";\nexport type {\n StoryReport,\n ReportFeature as StoryReportFeature,\n ReportScenario as StoryReportScenario,\n ReportStep as StoryReportStep,\n ReportDocEntry as StoryReportDocEntry,\n ReportSummary as StoryReportSummary,\n} from \"executable-stories-formatters\";\n","/**\n * Result<T> — explicit success/error type matching the cookbook convention.\n *\n * Used at the boundary where a StoryReport is parsed: the consumer hands us\n * an unknown value (file contents, fetch body, prop) and we return a Result.\n */\n\nexport type Result<T, E = ReportParseError> =\n | { ok: true; data: T }\n | { ok: false; error: E };\n\nexport interface ReportParseError {\n message: string;\n code: ReportParseErrorCode;\n issues?: readonly { path: string; message: string }[];\n}\n\nexport type ReportParseErrorCode =\n | \"INVALID_INPUT\"\n | \"SCHEMA_VERSION_MISMATCH\"\n | \"VALIDATION_FAILED\";\n\nexport const ok = <T>(data: T): Result<T> => ({ ok: true, data });\nexport const err = (error: ReportParseError): Result<never> => ({ ok: false, error });\n","/**\n * StoryReport runtime Zod schema, derived from the canonical JSON Schema\n * at executable-stories-formatters/schemas/story-report-v1.json.\n *\n * Uses z.fromJSONSchema (experimental in Zod 4.x). If the API changes upstream,\n * only this file needs updating — the rest of the package consumes\n * `storyReportSchema` and `StoryReportSchemaShape` via parse.ts.\n *\n * The JSON Schema is bundled at build time by tsup (resolveJsonModule).\n */\n\nimport { z } from \"zod\";\nimport schemaJson from \"../../../executable-stories-formatters/schemas/story-report-v1.json\" with { type: \"json\" };\n\nconst compiled = z.fromJSONSchema(schemaJson as Parameters<typeof z.fromJSONSchema>[0]);\n\nexport const storyReportSchema = compiled;\nexport type StoryReportSchemaShape = z.infer<typeof compiled>;\n\nexport const STORY_REPORT_SCHEMA_MAJOR = 1 as const;\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"$id\": \"https://executable-stories.dev/schemas/story-report-v1.schema.json\",\n \"title\": \"StoryReport\",\n \"description\": \"Pre-grouped, denormalized report shape consumed by UI renderers (React, Svelte, Vue, etc.). Stable public contract — additive-only within a major. Distinct from internal TestRunResult.\",\n \"type\": \"object\",\n \"$ref\": \"#/$defs/StoryReport\",\n \"$defs\": {\n \"StoryReport\": {\n \"type\": \"object\",\n \"description\": \"Top-level report containing all features, runtime metadata, and a pre-computed summary.\",\n \"properties\": {\n \"schemaVersion\": {\n \"type\": \"string\",\n \"pattern\": \"^1\\\\.[0-9]+$\",\n \"description\": \"Schema version as 'major.minor'. Major bumps are breaking; minors are additive-only. UI packages must accept any 1.x.\"\n },\n \"runId\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Unique deterministic identifier for this run.\"\n },\n \"startedAtMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Run start time as Unix epoch milliseconds.\"\n },\n \"finishedAtMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Run finish time as Unix epoch milliseconds.\"\n },\n \"durationMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Total run duration in milliseconds.\"\n },\n \"projectRoot\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Absolute path to the project root (for context only; relative paths in features.sourceFile are preferred).\"\n },\n \"packageVersion\": {\n \"type\": \"string\",\n \"description\": \"Version of the package under test, if known.\"\n },\n \"gitSha\": {\n \"type\": \"string\",\n \"description\": \"Git commit SHA at the time of the run.\"\n },\n \"ci\": {\n \"$ref\": \"#/$defs/CIInfo\"\n },\n \"coverage\": {\n \"$ref\": \"#/$defs/CoverageSummary\"\n },\n \"summary\": {\n \"$ref\": \"#/$defs/Summary\",\n \"description\": \"Pre-computed counts across all features and scenarios.\"\n },\n \"features\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Feature\" },\n \"description\": \"Features grouped by sourceFile, sorted by title.\"\n }\n },\n \"required\": [\"schemaVersion\", \"runId\", \"startedAtMs\", \"finishedAtMs\", \"durationMs\", \"projectRoot\", \"summary\", \"features\"],\n \"additionalProperties\": false\n },\n \"Summary\": {\n \"type\": \"object\",\n \"description\": \"Counts by status. Sums equal 'total'.\",\n \"properties\": {\n \"total\": { \"type\": \"integer\", \"minimum\": 0 },\n \"passed\": { \"type\": \"integer\", \"minimum\": 0 },\n \"failed\": { \"type\": \"integer\", \"minimum\": 0 },\n \"skipped\": { \"type\": \"integer\", \"minimum\": 0 },\n \"pending\": { \"type\": \"integer\", \"minimum\": 0 },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 }\n },\n \"required\": [\"total\", \"passed\", \"failed\", \"skipped\", \"pending\", \"durationMs\"],\n \"additionalProperties\": false\n },\n \"Feature\": {\n \"type\": \"object\",\n \"description\": \"A group of scenarios from the same source file.\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Stable slug derived from the relative source path. Suitable for use as a deep-link anchor.\"\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Display title. Derived from describe block when present, otherwise the file basename.\"\n },\n \"sourceFile\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Source path, relative to projectRoot when possible.\"\n },\n \"summary\": { \"$ref\": \"#/$defs/Summary\" },\n \"scenarios\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Scenario\" },\n \"description\": \"Scenarios in this feature, in declaration order.\"\n }\n },\n \"required\": [\"id\", \"title\", \"sourceFile\", \"summary\", \"scenarios\"],\n \"additionalProperties\": false\n },\n \"Scenario\": {\n \"type\": \"object\",\n \"description\": \"A single scenario with its steps, story-level doc entries, and attachments.\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Stable identifier: '<feature.id>--<slug-of-title>'. Suitable for use as a deep-link anchor.\"\n },\n \"title\": { \"type\": \"string\", \"minLength\": 1 },\n \"status\": { \"$ref\": \"#/$defs/TestStatus\" },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 },\n \"tags\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"description\": \"Normalized tags, deduplicated, lowercased.\"\n },\n \"tickets\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Ticket\" }\n },\n \"sourceLine\": { \"type\": \"integer\", \"minimum\": 1 },\n \"errorMessage\": { \"type\": \"string\" },\n \"errorStack\": { \"type\": \"string\" },\n \"retry\": { \"type\": \"integer\", \"minimum\": 0 },\n \"retries\": { \"type\": \"integer\", \"minimum\": 0 },\n \"docEntries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" },\n \"description\": \"Story-level doc entries (rendered before steps).\"\n },\n \"steps\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Step\" }\n },\n \"attachments\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Attachment\" }\n }\n },\n \"required\": [\"id\", \"title\", \"status\", \"durationMs\", \"tags\", \"retry\", \"retries\", \"docEntries\", \"steps\", \"attachments\"],\n \"additionalProperties\": false\n },\n \"Step\": {\n \"type\": \"object\",\n \"description\": \"A single BDD step.\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"minLength\": 1 },\n \"index\": { \"type\": \"integer\", \"minimum\": 0 },\n \"keyword\": { \"$ref\": \"#/$defs/StepKeyword\" },\n \"text\": { \"type\": \"string\" },\n \"status\": { \"$ref\": \"#/$defs/TestStatus\" },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 },\n \"errorMessage\": { \"type\": \"string\" },\n \"mode\": { \"$ref\": \"#/$defs/StepMode\" },\n \"docEntries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" },\n \"description\": \"Doc entries attached to this step.\"\n }\n },\n \"required\": [\"id\", \"index\", \"keyword\", \"text\", \"status\", \"durationMs\", \"docEntries\"],\n \"additionalProperties\": false\n },\n \"StepKeyword\": {\n \"type\": \"string\",\n \"enum\": [\"Given\", \"When\", \"Then\", \"And\", \"But\"]\n },\n \"StepMode\": {\n \"type\": \"string\",\n \"enum\": [\"normal\", \"skip\", \"only\", \"todo\", \"fails\", \"concurrent\"]\n },\n \"TestStatus\": {\n \"type\": \"string\",\n \"enum\": [\"passed\", \"failed\", \"skipped\", \"pending\"]\n },\n \"Ticket\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"minLength\": 1 },\n \"url\": { \"type\": \"string\" }\n },\n \"required\": [\"id\"],\n \"additionalProperties\": false\n },\n \"Attachment\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"mediaType\": { \"type\": \"string\", \"minLength\": 1 },\n \"body\": { \"type\": \"string\" },\n \"contentEncoding\": {\n \"type\": \"string\",\n \"enum\": [\"BASE64\", \"IDENTITY\"]\n }\n },\n \"required\": [\"name\", \"mediaType\", \"body\", \"contentEncoding\"],\n \"additionalProperties\": false\n },\n \"CIInfo\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"buildNumber\": { \"type\": \"string\" },\n \"branch\": { \"type\": \"string\" },\n \"commitSha\": { \"type\": \"string\" },\n \"prNumber\": { \"type\": \"string\" }\n },\n \"required\": [\"name\"],\n \"additionalProperties\": false\n },\n \"CoverageSummary\": {\n \"type\": \"object\",\n \"properties\": {\n \"linesPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"branchesPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"functionsPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"statementsPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 }\n },\n \"additionalProperties\": false\n },\n \"DocPhase\": {\n \"type\": \"string\",\n \"enum\": [\"static\", \"runtime\"]\n },\n \"DocEntry\": {\n \"oneOf\": [\n { \"$ref\": \"#/$defs/DocNote\" },\n { \"$ref\": \"#/$defs/DocTag\" },\n { \"$ref\": \"#/$defs/DocKv\" },\n { \"$ref\": \"#/$defs/DocCode\" },\n { \"$ref\": \"#/$defs/DocTable\" },\n { \"$ref\": \"#/$defs/DocLink\" },\n { \"$ref\": \"#/$defs/DocSection\" },\n { \"$ref\": \"#/$defs/DocMermaid\" },\n { \"$ref\": \"#/$defs/DocScreenshot\" },\n { \"$ref\": \"#/$defs/DocCustom\" }\n ]\n },\n \"DocNote\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"note\" },\n \"text\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"text\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocTag\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"tag\" },\n \"names\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"names\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocKv\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"kv\" },\n \"label\": { \"type\": \"string\" },\n \"value\": {},\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"value\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocCode\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"code\" },\n \"label\": { \"type\": \"string\" },\n \"content\": { \"type\": \"string\" },\n \"lang\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"content\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocTable\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"table\" },\n \"label\": { \"type\": \"string\" },\n \"columns\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n \"rows\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"columns\", \"rows\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocLink\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"link\" },\n \"label\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"url\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocSection\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"section\" },\n \"title\": { \"type\": \"string\" },\n \"markdown\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"title\", \"markdown\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocMermaid\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"mermaid\" },\n \"code\": { \"type\": \"string\" },\n \"title\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"code\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocScreenshot\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"screenshot\" },\n \"path\": { \"type\": \"string\" },\n \"alt\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"path\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocCustom\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"custom\" },\n \"type\": { \"type\": \"string\", \"minLength\": 1 },\n \"data\": {},\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"type\", \"data\", \"phase\"],\n \"additionalProperties\": false\n }\n }\n}\n","/**\n * parseStoryReport — boundary validator. Accepts unknown input (file contents,\n * fetch body, prop) and returns a Result-typed StoryReport.\n */\n\nimport type { StoryReport } from \"executable-stories-formatters\";\nimport type { Result } from \"../result\";\nimport { ok, err } from \"../result\";\nimport { storyReportSchema, STORY_REPORT_SCHEMA_MAJOR } from \"./story-report.schema\";\n\nexport function parseStoryReport(input: unknown): Result<StoryReport> {\n if (input === null || typeof input !== \"object\") {\n return err({\n message: \"Expected a StoryReport object.\",\n code: \"INVALID_INPUT\",\n });\n }\n\n const versionRaw = (input as { schemaVersion?: unknown }).schemaVersion;\n if (typeof versionRaw === \"string\") {\n const major = versionRaw.split(\".\")[0];\n if (major !== String(STORY_REPORT_SCHEMA_MAJOR)) {\n return err({\n message: `Schema major ${major} is not supported by this version of executable-stories-react (expected ${STORY_REPORT_SCHEMA_MAJOR}.x). Upgrade the package.`,\n code: \"SCHEMA_VERSION_MISMATCH\",\n });\n }\n }\n\n const parsed = storyReportSchema.safeParse(input);\n if (parsed.success) {\n return ok(parsed.data as StoryReport);\n }\n\n const issues = parsed.error.issues.map((i) => ({\n path: i.path.join(\".\") || \"/\",\n message: i.message,\n }));\n\n return err({\n message: `StoryReport failed validation (${issues.length} issue${issues.length === 1 ? \"\" : \"s\"}).`,\n code: \"VALIDATION_FAILED\",\n issues,\n });\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/parse-entry.ts","../src/result.ts","../src/schema/story-report.schema.ts","../../executable-stories-formatters/schemas/story-report-v1.json","../src/schema/parse.ts"],"sourcesContent":["/**\n * Server-safe entry: parseStoryReport, Result types, schema constants.\n *\n * No React, no hooks, no client-only code. Safe to call from Next.js Server\n * Components, build scripts, edge functions, or anywhere else outside the\n * browser. The main \"executable-stories-react\" entry is marked \"use client\"\n * because it touches createContext; this entry stays clean.\n */\n\nexport { parseStoryReport } from \"./schema/parse\";\nexport { storyReportSchema, STORY_REPORT_SCHEMA_MAJOR } from \"./schema/story-report.schema\";\nexport type { Result, ReportParseError, ReportParseErrorCode } from \"./result\";\nexport { ok, err } from \"./result\";\nexport type {\n StoryReport,\n ReportFeature as StoryReportFeature,\n ReportScenario as StoryReportScenario,\n ReportStep as StoryReportStep,\n ReportDocEntry as StoryReportDocEntry,\n ReportSummary as StoryReportSummary,\n} from \"executable-stories-formatters\";\n","/**\n * Result<T> — explicit success/error type matching the cookbook convention.\n *\n * Used at the boundary where a StoryReport is parsed: the consumer hands us\n * an unknown value (file contents, fetch body, prop) and we return a Result.\n */\n\nexport type Result<T, E = ReportParseError> =\n | { ok: true; data: T }\n | { ok: false; error: E };\n\nexport interface ReportParseError {\n message: string;\n code: ReportParseErrorCode;\n issues?: readonly { path: string; message: string }[];\n}\n\nexport type ReportParseErrorCode =\n | \"INVALID_INPUT\"\n | \"SCHEMA_VERSION_MISMATCH\"\n | \"VALIDATION_FAILED\";\n\nexport const ok = <T>(data: T): Result<T> => ({ ok: true, data });\nexport const err = (error: ReportParseError): Result<never> => ({ ok: false, error });\n","/**\n * StoryReport runtime Zod schema, derived from the canonical JSON Schema\n * at executable-stories-formatters/schemas/story-report-v1.json.\n *\n * Uses z.fromJSONSchema (experimental in Zod 4.x). If the API changes upstream,\n * only this file needs updating — the rest of the package consumes\n * `storyReportSchema` and `StoryReportSchemaShape` via parse.ts.\n *\n * The JSON Schema is bundled at build time by tsup (resolveJsonModule).\n */\n\nimport { z } from \"zod\";\nimport schemaJson from \"../../../executable-stories-formatters/schemas/story-report-v1.json\" with { type: \"json\" };\n\nconst compiled = z.fromJSONSchema(schemaJson as Parameters<typeof z.fromJSONSchema>[0]);\n\nexport const storyReportSchema = compiled;\nexport type StoryReportSchemaShape = z.infer<typeof compiled>;\n\nexport const STORY_REPORT_SCHEMA_MAJOR = 1 as const;\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"$id\": \"https://executable-stories.dev/schemas/story-report-v1.schema.json\",\n \"title\": \"StoryReport\",\n \"description\": \"Pre-grouped, denormalized report shape consumed by UI renderers (React, Svelte, Vue, etc.). Stable public contract — additive-only within a major. Distinct from internal TestRunResult.\",\n \"type\": \"object\",\n \"$ref\": \"#/$defs/StoryReport\",\n \"$defs\": {\n \"StoryReport\": {\n \"type\": \"object\",\n \"description\": \"Top-level report containing all features, runtime metadata, and a pre-computed summary.\",\n \"properties\": {\n \"schemaVersion\": {\n \"type\": \"string\",\n \"pattern\": \"^1\\\\.[0-9]+$\",\n \"description\": \"Schema version as 'major.minor'. Major bumps are breaking; minors are additive-only. UI packages must accept any 1.x.\"\n },\n \"runId\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Unique deterministic identifier for this run.\"\n },\n \"startedAtMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Run start time as Unix epoch milliseconds.\"\n },\n \"finishedAtMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Run finish time as Unix epoch milliseconds.\"\n },\n \"durationMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Total run duration in milliseconds.\"\n },\n \"projectRoot\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Absolute path to the project root (for context only; relative paths in features.sourceFile are preferred).\"\n },\n \"packageVersion\": {\n \"type\": \"string\",\n \"description\": \"Version of the package under test, if known.\"\n },\n \"gitSha\": {\n \"type\": \"string\",\n \"description\": \"Git commit SHA at the time of the run.\"\n },\n \"ci\": {\n \"$ref\": \"#/$defs/CIInfo\"\n },\n \"coverage\": {\n \"$ref\": \"#/$defs/CoverageSummary\"\n },\n \"summary\": {\n \"$ref\": \"#/$defs/Summary\",\n \"description\": \"Pre-computed counts across all features and scenarios.\"\n },\n \"features\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Feature\" },\n \"description\": \"Features grouped by sourceFile, sorted by title.\"\n }\n },\n \"required\": [\"schemaVersion\", \"runId\", \"startedAtMs\", \"finishedAtMs\", \"durationMs\", \"projectRoot\", \"summary\", \"features\"],\n \"additionalProperties\": false\n },\n \"Summary\": {\n \"type\": \"object\",\n \"description\": \"Counts by status. Sums equal 'total'.\",\n \"properties\": {\n \"total\": { \"type\": \"integer\", \"minimum\": 0 },\n \"passed\": { \"type\": \"integer\", \"minimum\": 0 },\n \"failed\": { \"type\": \"integer\", \"minimum\": 0 },\n \"skipped\": { \"type\": \"integer\", \"minimum\": 0 },\n \"pending\": { \"type\": \"integer\", \"minimum\": 0 },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 }\n },\n \"required\": [\"total\", \"passed\", \"failed\", \"skipped\", \"pending\", \"durationMs\"],\n \"additionalProperties\": false\n },\n \"Feature\": {\n \"type\": \"object\",\n \"description\": \"A group of scenarios from the same source file.\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Stable slug derived from the relative source path. Suitable for use as a deep-link anchor.\"\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Display title. Derived from describe block when present, otherwise the file basename.\"\n },\n \"sourceFile\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Source path, relative to projectRoot when possible.\"\n },\n \"summary\": { \"$ref\": \"#/$defs/Summary\" },\n \"scenarios\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Scenario\" },\n \"description\": \"Scenarios in this feature, in declaration order.\"\n }\n },\n \"required\": [\"id\", \"title\", \"sourceFile\", \"summary\", \"scenarios\"],\n \"additionalProperties\": false\n },\n \"Scenario\": {\n \"type\": \"object\",\n \"description\": \"A single scenario with its steps, story-level doc entries, and attachments.\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Stable identifier: '<feature.id>--<slug-of-title>'. Suitable for use as a deep-link anchor.\"\n },\n \"title\": { \"type\": \"string\", \"minLength\": 1 },\n \"status\": { \"$ref\": \"#/$defs/TestStatus\" },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 },\n \"tags\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"description\": \"Normalized tags, deduplicated, lowercased.\"\n },\n \"tickets\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Ticket\" }\n },\n \"covers\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"description\": \"Product-code paths/globs this scenario exercises.\"\n },\n \"sourceLine\": { \"type\": \"integer\", \"minimum\": 1 },\n \"errorMessage\": { \"type\": \"string\" },\n \"errorStack\": { \"type\": \"string\" },\n \"retry\": { \"type\": \"integer\", \"minimum\": 0 },\n \"retries\": { \"type\": \"integer\", \"minimum\": 0 },\n \"docEntries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" },\n \"description\": \"Story-level doc entries (rendered before steps).\"\n },\n \"steps\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Step\" }\n },\n \"attachments\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Attachment\" }\n }\n },\n \"required\": [\"id\", \"title\", \"status\", \"durationMs\", \"tags\", \"retry\", \"retries\", \"docEntries\", \"steps\", \"attachments\"],\n \"additionalProperties\": false\n },\n \"Step\": {\n \"type\": \"object\",\n \"description\": \"A single BDD step.\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"minLength\": 1 },\n \"index\": { \"type\": \"integer\", \"minimum\": 0 },\n \"keyword\": { \"$ref\": \"#/$defs/StepKeyword\" },\n \"text\": { \"type\": \"string\" },\n \"status\": { \"$ref\": \"#/$defs/TestStatus\" },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 },\n \"errorMessage\": { \"type\": \"string\" },\n \"mode\": { \"$ref\": \"#/$defs/StepMode\" },\n \"docEntries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" },\n \"description\": \"Doc entries attached to this step.\"\n }\n },\n \"required\": [\"id\", \"index\", \"keyword\", \"text\", \"status\", \"durationMs\", \"docEntries\"],\n \"additionalProperties\": false\n },\n \"StepKeyword\": {\n \"type\": \"string\",\n \"enum\": [\"Given\", \"When\", \"Then\", \"And\", \"But\"]\n },\n \"StepMode\": {\n \"type\": \"string\",\n \"enum\": [\"normal\", \"skip\", \"only\", \"todo\", \"fails\", \"concurrent\"]\n },\n \"TestStatus\": {\n \"type\": \"string\",\n \"enum\": [\"passed\", \"failed\", \"skipped\", \"pending\"]\n },\n \"Ticket\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"minLength\": 1 },\n \"url\": { \"type\": \"string\" }\n },\n \"required\": [\"id\"],\n \"additionalProperties\": false\n },\n \"Attachment\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"mediaType\": { \"type\": \"string\", \"minLength\": 1 },\n \"body\": { \"type\": \"string\" },\n \"contentEncoding\": {\n \"type\": \"string\",\n \"enum\": [\"BASE64\", \"IDENTITY\"]\n }\n },\n \"required\": [\"name\", \"mediaType\", \"body\", \"contentEncoding\"],\n \"additionalProperties\": false\n },\n \"CIInfo\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"buildNumber\": { \"type\": \"string\" },\n \"branch\": { \"type\": \"string\" },\n \"commitSha\": { \"type\": \"string\" },\n \"prNumber\": { \"type\": \"string\" }\n },\n \"required\": [\"name\"],\n \"additionalProperties\": false\n },\n \"CoverageSummary\": {\n \"type\": \"object\",\n \"properties\": {\n \"linesPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"branchesPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"functionsPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"statementsPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 }\n },\n \"additionalProperties\": false\n },\n \"DocPhase\": {\n \"type\": \"string\",\n \"enum\": [\"static\", \"runtime\"]\n },\n \"DocEntry\": {\n \"oneOf\": [\n { \"$ref\": \"#/$defs/DocNote\" },\n { \"$ref\": \"#/$defs/DocTag\" },\n { \"$ref\": \"#/$defs/DocKv\" },\n { \"$ref\": \"#/$defs/DocCode\" },\n { \"$ref\": \"#/$defs/DocTable\" },\n { \"$ref\": \"#/$defs/DocLink\" },\n { \"$ref\": \"#/$defs/DocSection\" },\n { \"$ref\": \"#/$defs/DocMermaid\" },\n { \"$ref\": \"#/$defs/DocScreenshot\" },\n { \"$ref\": \"#/$defs/DocCustom\" }\n ]\n },\n \"DocNote\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"note\" },\n \"text\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"text\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocTag\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"tag\" },\n \"names\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"names\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocKv\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"kv\" },\n \"label\": { \"type\": \"string\" },\n \"value\": {},\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"value\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocCode\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"code\" },\n \"label\": { \"type\": \"string\" },\n \"content\": { \"type\": \"string\" },\n \"lang\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"content\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocTable\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"table\" },\n \"label\": { \"type\": \"string\" },\n \"columns\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n \"rows\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"columns\", \"rows\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocLink\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"link\" },\n \"label\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"url\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocSection\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"section\" },\n \"title\": { \"type\": \"string\" },\n \"markdown\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"title\", \"markdown\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocMermaid\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"mermaid\" },\n \"code\": { \"type\": \"string\" },\n \"title\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"code\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocScreenshot\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"screenshot\" },\n \"path\": { \"type\": \"string\" },\n \"alt\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"path\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocCustom\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"custom\" },\n \"type\": { \"type\": \"string\", \"minLength\": 1 },\n \"data\": {},\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"type\", \"data\", \"phase\"],\n \"additionalProperties\": false\n }\n }\n}\n","/**\n * parseStoryReport — boundary validator. Accepts unknown input (file contents,\n * fetch body, prop) and returns a Result-typed StoryReport.\n */\n\nimport type { StoryReport } from \"executable-stories-formatters\";\nimport type { Result } from \"../result\";\nimport { ok, err } from \"../result\";\nimport { storyReportSchema, STORY_REPORT_SCHEMA_MAJOR } from \"./story-report.schema\";\n\nexport function parseStoryReport(input: unknown): Result<StoryReport> {\n if (input === null || typeof input !== \"object\") {\n return err({\n message: \"Expected a StoryReport object.\",\n code: \"INVALID_INPUT\",\n });\n }\n\n const versionRaw = (input as { schemaVersion?: unknown }).schemaVersion;\n if (typeof versionRaw === \"string\") {\n const major = versionRaw.split(\".\")[0];\n if (major !== String(STORY_REPORT_SCHEMA_MAJOR)) {\n return err({\n message: `Schema major ${major} is not supported by this version of executable-stories-react (expected ${STORY_REPORT_SCHEMA_MAJOR}.x). Upgrade the package.`,\n code: \"SCHEMA_VERSION_MISMATCH\",\n });\n }\n }\n\n const parsed = storyReportSchema.safeParse(input);\n if (parsed.success) {\n return ok(parsed.data as StoryReport);\n }\n\n const issues = parsed.error.issues.map((i) => ({\n path: i.path.join(\".\") || \"/\",\n message: i.message,\n }));\n\n return err({\n message: `StoryReport failed validation (${issues.length} issue${issues.length === 1 ? \"\" : \"s\"}).`,\n code: \"VALIDATION_FAILED\",\n issues,\n });\n}\n"],"mappings":"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","names":[]}
package/dist/parse.js CHANGED
@@ -139,6 +139,11 @@ var story_report_v1_default = {
139
139
  type: "array",
140
140
  items: { $ref: "#/$defs/Ticket" }
141
141
  },
142
+ covers: {
143
+ type: "array",
144
+ items: { type: "string" },
145
+ description: "Product-code paths/globs this scenario exercises."
146
+ },
142
147
  sourceLine: { type: "integer", minimum: 1 },
143
148
  errorMessage: { type: "string" },
144
149
  errorStack: { type: "string" },
package/dist/parse.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/result.ts","../src/schema/story-report.schema.ts","../../executable-stories-formatters/schemas/story-report-v1.json","../src/schema/parse.ts"],"sourcesContent":["/**\n * Result<T> — explicit success/error type matching the cookbook convention.\n *\n * Used at the boundary where a StoryReport is parsed: the consumer hands us\n * an unknown value (file contents, fetch body, prop) and we return a Result.\n */\n\nexport type Result<T, E = ReportParseError> =\n | { ok: true; data: T }\n | { ok: false; error: E };\n\nexport interface ReportParseError {\n message: string;\n code: ReportParseErrorCode;\n issues?: readonly { path: string; message: string }[];\n}\n\nexport type ReportParseErrorCode =\n | \"INVALID_INPUT\"\n | \"SCHEMA_VERSION_MISMATCH\"\n | \"VALIDATION_FAILED\";\n\nexport const ok = <T>(data: T): Result<T> => ({ ok: true, data });\nexport const err = (error: ReportParseError): Result<never> => ({ ok: false, error });\n","/**\n * StoryReport runtime Zod schema, derived from the canonical JSON Schema\n * at executable-stories-formatters/schemas/story-report-v1.json.\n *\n * Uses z.fromJSONSchema (experimental in Zod 4.x). If the API changes upstream,\n * only this file needs updating — the rest of the package consumes\n * `storyReportSchema` and `StoryReportSchemaShape` via parse.ts.\n *\n * The JSON Schema is bundled at build time by tsup (resolveJsonModule).\n */\n\nimport { z } from \"zod\";\nimport schemaJson from \"../../../executable-stories-formatters/schemas/story-report-v1.json\" with { type: \"json\" };\n\nconst compiled = z.fromJSONSchema(schemaJson as Parameters<typeof z.fromJSONSchema>[0]);\n\nexport const storyReportSchema = compiled;\nexport type StoryReportSchemaShape = z.infer<typeof compiled>;\n\nexport const STORY_REPORT_SCHEMA_MAJOR = 1 as const;\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"$id\": \"https://executable-stories.dev/schemas/story-report-v1.schema.json\",\n \"title\": \"StoryReport\",\n \"description\": \"Pre-grouped, denormalized report shape consumed by UI renderers (React, Svelte, Vue, etc.). Stable public contract — additive-only within a major. Distinct from internal TestRunResult.\",\n \"type\": \"object\",\n \"$ref\": \"#/$defs/StoryReport\",\n \"$defs\": {\n \"StoryReport\": {\n \"type\": \"object\",\n \"description\": \"Top-level report containing all features, runtime metadata, and a pre-computed summary.\",\n \"properties\": {\n \"schemaVersion\": {\n \"type\": \"string\",\n \"pattern\": \"^1\\\\.[0-9]+$\",\n \"description\": \"Schema version as 'major.minor'. Major bumps are breaking; minors are additive-only. UI packages must accept any 1.x.\"\n },\n \"runId\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Unique deterministic identifier for this run.\"\n },\n \"startedAtMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Run start time as Unix epoch milliseconds.\"\n },\n \"finishedAtMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Run finish time as Unix epoch milliseconds.\"\n },\n \"durationMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Total run duration in milliseconds.\"\n },\n \"projectRoot\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Absolute path to the project root (for context only; relative paths in features.sourceFile are preferred).\"\n },\n \"packageVersion\": {\n \"type\": \"string\",\n \"description\": \"Version of the package under test, if known.\"\n },\n \"gitSha\": {\n \"type\": \"string\",\n \"description\": \"Git commit SHA at the time of the run.\"\n },\n \"ci\": {\n \"$ref\": \"#/$defs/CIInfo\"\n },\n \"coverage\": {\n \"$ref\": \"#/$defs/CoverageSummary\"\n },\n \"summary\": {\n \"$ref\": \"#/$defs/Summary\",\n \"description\": \"Pre-computed counts across all features and scenarios.\"\n },\n \"features\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Feature\" },\n \"description\": \"Features grouped by sourceFile, sorted by title.\"\n }\n },\n \"required\": [\"schemaVersion\", \"runId\", \"startedAtMs\", \"finishedAtMs\", \"durationMs\", \"projectRoot\", \"summary\", \"features\"],\n \"additionalProperties\": false\n },\n \"Summary\": {\n \"type\": \"object\",\n \"description\": \"Counts by status. Sums equal 'total'.\",\n \"properties\": {\n \"total\": { \"type\": \"integer\", \"minimum\": 0 },\n \"passed\": { \"type\": \"integer\", \"minimum\": 0 },\n \"failed\": { \"type\": \"integer\", \"minimum\": 0 },\n \"skipped\": { \"type\": \"integer\", \"minimum\": 0 },\n \"pending\": { \"type\": \"integer\", \"minimum\": 0 },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 }\n },\n \"required\": [\"total\", \"passed\", \"failed\", \"skipped\", \"pending\", \"durationMs\"],\n \"additionalProperties\": false\n },\n \"Feature\": {\n \"type\": \"object\",\n \"description\": \"A group of scenarios from the same source file.\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Stable slug derived from the relative source path. Suitable for use as a deep-link anchor.\"\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Display title. Derived from describe block when present, otherwise the file basename.\"\n },\n \"sourceFile\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Source path, relative to projectRoot when possible.\"\n },\n \"summary\": { \"$ref\": \"#/$defs/Summary\" },\n \"scenarios\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Scenario\" },\n \"description\": \"Scenarios in this feature, in declaration order.\"\n }\n },\n \"required\": [\"id\", \"title\", \"sourceFile\", \"summary\", \"scenarios\"],\n \"additionalProperties\": false\n },\n \"Scenario\": {\n \"type\": \"object\",\n \"description\": \"A single scenario with its steps, story-level doc entries, and attachments.\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Stable identifier: '<feature.id>--<slug-of-title>'. Suitable for use as a deep-link anchor.\"\n },\n \"title\": { \"type\": \"string\", \"minLength\": 1 },\n \"status\": { \"$ref\": \"#/$defs/TestStatus\" },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 },\n \"tags\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"description\": \"Normalized tags, deduplicated, lowercased.\"\n },\n \"tickets\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Ticket\" }\n },\n \"sourceLine\": { \"type\": \"integer\", \"minimum\": 1 },\n \"errorMessage\": { \"type\": \"string\" },\n \"errorStack\": { \"type\": \"string\" },\n \"retry\": { \"type\": \"integer\", \"minimum\": 0 },\n \"retries\": { \"type\": \"integer\", \"minimum\": 0 },\n \"docEntries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" },\n \"description\": \"Story-level doc entries (rendered before steps).\"\n },\n \"steps\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Step\" }\n },\n \"attachments\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Attachment\" }\n }\n },\n \"required\": [\"id\", \"title\", \"status\", \"durationMs\", \"tags\", \"retry\", \"retries\", \"docEntries\", \"steps\", \"attachments\"],\n \"additionalProperties\": false\n },\n \"Step\": {\n \"type\": \"object\",\n \"description\": \"A single BDD step.\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"minLength\": 1 },\n \"index\": { \"type\": \"integer\", \"minimum\": 0 },\n \"keyword\": { \"$ref\": \"#/$defs/StepKeyword\" },\n \"text\": { \"type\": \"string\" },\n \"status\": { \"$ref\": \"#/$defs/TestStatus\" },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 },\n \"errorMessage\": { \"type\": \"string\" },\n \"mode\": { \"$ref\": \"#/$defs/StepMode\" },\n \"docEntries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" },\n \"description\": \"Doc entries attached to this step.\"\n }\n },\n \"required\": [\"id\", \"index\", \"keyword\", \"text\", \"status\", \"durationMs\", \"docEntries\"],\n \"additionalProperties\": false\n },\n \"StepKeyword\": {\n \"type\": \"string\",\n \"enum\": [\"Given\", \"When\", \"Then\", \"And\", \"But\"]\n },\n \"StepMode\": {\n \"type\": \"string\",\n \"enum\": [\"normal\", \"skip\", \"only\", \"todo\", \"fails\", \"concurrent\"]\n },\n \"TestStatus\": {\n \"type\": \"string\",\n \"enum\": [\"passed\", \"failed\", \"skipped\", \"pending\"]\n },\n \"Ticket\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"minLength\": 1 },\n \"url\": { \"type\": \"string\" }\n },\n \"required\": [\"id\"],\n \"additionalProperties\": false\n },\n \"Attachment\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"mediaType\": { \"type\": \"string\", \"minLength\": 1 },\n \"body\": { \"type\": \"string\" },\n \"contentEncoding\": {\n \"type\": \"string\",\n \"enum\": [\"BASE64\", \"IDENTITY\"]\n }\n },\n \"required\": [\"name\", \"mediaType\", \"body\", \"contentEncoding\"],\n \"additionalProperties\": false\n },\n \"CIInfo\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"buildNumber\": { \"type\": \"string\" },\n \"branch\": { \"type\": \"string\" },\n \"commitSha\": { \"type\": \"string\" },\n \"prNumber\": { \"type\": \"string\" }\n },\n \"required\": [\"name\"],\n \"additionalProperties\": false\n },\n \"CoverageSummary\": {\n \"type\": \"object\",\n \"properties\": {\n \"linesPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"branchesPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"functionsPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"statementsPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 }\n },\n \"additionalProperties\": false\n },\n \"DocPhase\": {\n \"type\": \"string\",\n \"enum\": [\"static\", \"runtime\"]\n },\n \"DocEntry\": {\n \"oneOf\": [\n { \"$ref\": \"#/$defs/DocNote\" },\n { \"$ref\": \"#/$defs/DocTag\" },\n { \"$ref\": \"#/$defs/DocKv\" },\n { \"$ref\": \"#/$defs/DocCode\" },\n { \"$ref\": \"#/$defs/DocTable\" },\n { \"$ref\": \"#/$defs/DocLink\" },\n { \"$ref\": \"#/$defs/DocSection\" },\n { \"$ref\": \"#/$defs/DocMermaid\" },\n { \"$ref\": \"#/$defs/DocScreenshot\" },\n { \"$ref\": \"#/$defs/DocCustom\" }\n ]\n },\n \"DocNote\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"note\" },\n \"text\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"text\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocTag\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"tag\" },\n \"names\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"names\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocKv\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"kv\" },\n \"label\": { \"type\": \"string\" },\n \"value\": {},\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"value\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocCode\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"code\" },\n \"label\": { \"type\": \"string\" },\n \"content\": { \"type\": \"string\" },\n \"lang\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"content\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocTable\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"table\" },\n \"label\": { \"type\": \"string\" },\n \"columns\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n \"rows\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"columns\", \"rows\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocLink\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"link\" },\n \"label\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"url\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocSection\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"section\" },\n \"title\": { \"type\": \"string\" },\n \"markdown\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"title\", \"markdown\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocMermaid\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"mermaid\" },\n \"code\": { \"type\": \"string\" },\n \"title\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"code\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocScreenshot\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"screenshot\" },\n \"path\": { \"type\": \"string\" },\n \"alt\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"path\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocCustom\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"custom\" },\n \"type\": { \"type\": \"string\", \"minLength\": 1 },\n \"data\": {},\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"type\", \"data\", \"phase\"],\n \"additionalProperties\": false\n }\n }\n}\n","/**\n * parseStoryReport — boundary validator. Accepts unknown input (file contents,\n * fetch body, prop) and returns a Result-typed StoryReport.\n */\n\nimport type { StoryReport } from \"executable-stories-formatters\";\nimport type { Result } from \"../result\";\nimport { ok, err } from \"../result\";\nimport { storyReportSchema, STORY_REPORT_SCHEMA_MAJOR } from \"./story-report.schema\";\n\nexport function parseStoryReport(input: unknown): Result<StoryReport> {\n if (input === null || typeof input !== \"object\") {\n return err({\n message: \"Expected a StoryReport object.\",\n code: \"INVALID_INPUT\",\n });\n }\n\n const versionRaw = (input as { schemaVersion?: unknown }).schemaVersion;\n if (typeof versionRaw === \"string\") {\n const major = versionRaw.split(\".\")[0];\n if (major !== String(STORY_REPORT_SCHEMA_MAJOR)) {\n return err({\n message: `Schema major ${major} is not supported by this version of executable-stories-react (expected ${STORY_REPORT_SCHEMA_MAJOR}.x). Upgrade the package.`,\n code: \"SCHEMA_VERSION_MISMATCH\",\n });\n }\n }\n\n const parsed = storyReportSchema.safeParse(input);\n if (parsed.success) {\n return ok(parsed.data as StoryReport);\n }\n\n const issues = parsed.error.issues.map((i) => ({\n path: i.path.join(\".\") || \"/\",\n message: i.message,\n }));\n\n return err({\n message: `StoryReport failed validation (${issues.length} issue${issues.length === 1 ? \"\" : \"s\"}).`,\n code: \"VALIDATION_FAILED\",\n issues,\n });\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/result.ts","../src/schema/story-report.schema.ts","../../executable-stories-formatters/schemas/story-report-v1.json","../src/schema/parse.ts"],"sourcesContent":["/**\n * Result<T> — explicit success/error type matching the cookbook convention.\n *\n * Used at the boundary where a StoryReport is parsed: the consumer hands us\n * an unknown value (file contents, fetch body, prop) and we return a Result.\n */\n\nexport type Result<T, E = ReportParseError> =\n | { ok: true; data: T }\n | { ok: false; error: E };\n\nexport interface ReportParseError {\n message: string;\n code: ReportParseErrorCode;\n issues?: readonly { path: string; message: string }[];\n}\n\nexport type ReportParseErrorCode =\n | \"INVALID_INPUT\"\n | \"SCHEMA_VERSION_MISMATCH\"\n | \"VALIDATION_FAILED\";\n\nexport const ok = <T>(data: T): Result<T> => ({ ok: true, data });\nexport const err = (error: ReportParseError): Result<never> => ({ ok: false, error });\n","/**\n * StoryReport runtime Zod schema, derived from the canonical JSON Schema\n * at executable-stories-formatters/schemas/story-report-v1.json.\n *\n * Uses z.fromJSONSchema (experimental in Zod 4.x). If the API changes upstream,\n * only this file needs updating — the rest of the package consumes\n * `storyReportSchema` and `StoryReportSchemaShape` via parse.ts.\n *\n * The JSON Schema is bundled at build time by tsup (resolveJsonModule).\n */\n\nimport { z } from \"zod\";\nimport schemaJson from \"../../../executable-stories-formatters/schemas/story-report-v1.json\" with { type: \"json\" };\n\nconst compiled = z.fromJSONSchema(schemaJson as Parameters<typeof z.fromJSONSchema>[0]);\n\nexport const storyReportSchema = compiled;\nexport type StoryReportSchemaShape = z.infer<typeof compiled>;\n\nexport const STORY_REPORT_SCHEMA_MAJOR = 1 as const;\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"$id\": \"https://executable-stories.dev/schemas/story-report-v1.schema.json\",\n \"title\": \"StoryReport\",\n \"description\": \"Pre-grouped, denormalized report shape consumed by UI renderers (React, Svelte, Vue, etc.). Stable public contract — additive-only within a major. Distinct from internal TestRunResult.\",\n \"type\": \"object\",\n \"$ref\": \"#/$defs/StoryReport\",\n \"$defs\": {\n \"StoryReport\": {\n \"type\": \"object\",\n \"description\": \"Top-level report containing all features, runtime metadata, and a pre-computed summary.\",\n \"properties\": {\n \"schemaVersion\": {\n \"type\": \"string\",\n \"pattern\": \"^1\\\\.[0-9]+$\",\n \"description\": \"Schema version as 'major.minor'. Major bumps are breaking; minors are additive-only. UI packages must accept any 1.x.\"\n },\n \"runId\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Unique deterministic identifier for this run.\"\n },\n \"startedAtMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Run start time as Unix epoch milliseconds.\"\n },\n \"finishedAtMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Run finish time as Unix epoch milliseconds.\"\n },\n \"durationMs\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Total run duration in milliseconds.\"\n },\n \"projectRoot\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Absolute path to the project root (for context only; relative paths in features.sourceFile are preferred).\"\n },\n \"packageVersion\": {\n \"type\": \"string\",\n \"description\": \"Version of the package under test, if known.\"\n },\n \"gitSha\": {\n \"type\": \"string\",\n \"description\": \"Git commit SHA at the time of the run.\"\n },\n \"ci\": {\n \"$ref\": \"#/$defs/CIInfo\"\n },\n \"coverage\": {\n \"$ref\": \"#/$defs/CoverageSummary\"\n },\n \"summary\": {\n \"$ref\": \"#/$defs/Summary\",\n \"description\": \"Pre-computed counts across all features and scenarios.\"\n },\n \"features\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Feature\" },\n \"description\": \"Features grouped by sourceFile, sorted by title.\"\n }\n },\n \"required\": [\"schemaVersion\", \"runId\", \"startedAtMs\", \"finishedAtMs\", \"durationMs\", \"projectRoot\", \"summary\", \"features\"],\n \"additionalProperties\": false\n },\n \"Summary\": {\n \"type\": \"object\",\n \"description\": \"Counts by status. Sums equal 'total'.\",\n \"properties\": {\n \"total\": { \"type\": \"integer\", \"minimum\": 0 },\n \"passed\": { \"type\": \"integer\", \"minimum\": 0 },\n \"failed\": { \"type\": \"integer\", \"minimum\": 0 },\n \"skipped\": { \"type\": \"integer\", \"minimum\": 0 },\n \"pending\": { \"type\": \"integer\", \"minimum\": 0 },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 }\n },\n \"required\": [\"total\", \"passed\", \"failed\", \"skipped\", \"pending\", \"durationMs\"],\n \"additionalProperties\": false\n },\n \"Feature\": {\n \"type\": \"object\",\n \"description\": \"A group of scenarios from the same source file.\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Stable slug derived from the relative source path. Suitable for use as a deep-link anchor.\"\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Display title. Derived from describe block when present, otherwise the file basename.\"\n },\n \"sourceFile\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Source path, relative to projectRoot when possible.\"\n },\n \"summary\": { \"$ref\": \"#/$defs/Summary\" },\n \"scenarios\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Scenario\" },\n \"description\": \"Scenarios in this feature, in declaration order.\"\n }\n },\n \"required\": [\"id\", \"title\", \"sourceFile\", \"summary\", \"scenarios\"],\n \"additionalProperties\": false\n },\n \"Scenario\": {\n \"type\": \"object\",\n \"description\": \"A single scenario with its steps, story-level doc entries, and attachments.\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Stable identifier: '<feature.id>--<slug-of-title>'. Suitable for use as a deep-link anchor.\"\n },\n \"title\": { \"type\": \"string\", \"minLength\": 1 },\n \"status\": { \"$ref\": \"#/$defs/TestStatus\" },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 },\n \"tags\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"description\": \"Normalized tags, deduplicated, lowercased.\"\n },\n \"tickets\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Ticket\" }\n },\n \"covers\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"description\": \"Product-code paths/globs this scenario exercises.\"\n },\n \"sourceLine\": { \"type\": \"integer\", \"minimum\": 1 },\n \"errorMessage\": { \"type\": \"string\" },\n \"errorStack\": { \"type\": \"string\" },\n \"retry\": { \"type\": \"integer\", \"minimum\": 0 },\n \"retries\": { \"type\": \"integer\", \"minimum\": 0 },\n \"docEntries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" },\n \"description\": \"Story-level doc entries (rendered before steps).\"\n },\n \"steps\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Step\" }\n },\n \"attachments\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/Attachment\" }\n }\n },\n \"required\": [\"id\", \"title\", \"status\", \"durationMs\", \"tags\", \"retry\", \"retries\", \"docEntries\", \"steps\", \"attachments\"],\n \"additionalProperties\": false\n },\n \"Step\": {\n \"type\": \"object\",\n \"description\": \"A single BDD step.\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"minLength\": 1 },\n \"index\": { \"type\": \"integer\", \"minimum\": 0 },\n \"keyword\": { \"$ref\": \"#/$defs/StepKeyword\" },\n \"text\": { \"type\": \"string\" },\n \"status\": { \"$ref\": \"#/$defs/TestStatus\" },\n \"durationMs\": { \"type\": \"number\", \"minimum\": 0 },\n \"errorMessage\": { \"type\": \"string\" },\n \"mode\": { \"$ref\": \"#/$defs/StepMode\" },\n \"docEntries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" },\n \"description\": \"Doc entries attached to this step.\"\n }\n },\n \"required\": [\"id\", \"index\", \"keyword\", \"text\", \"status\", \"durationMs\", \"docEntries\"],\n \"additionalProperties\": false\n },\n \"StepKeyword\": {\n \"type\": \"string\",\n \"enum\": [\"Given\", \"When\", \"Then\", \"And\", \"But\"]\n },\n \"StepMode\": {\n \"type\": \"string\",\n \"enum\": [\"normal\", \"skip\", \"only\", \"todo\", \"fails\", \"concurrent\"]\n },\n \"TestStatus\": {\n \"type\": \"string\",\n \"enum\": [\"passed\", \"failed\", \"skipped\", \"pending\"]\n },\n \"Ticket\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": { \"type\": \"string\", \"minLength\": 1 },\n \"url\": { \"type\": \"string\" }\n },\n \"required\": [\"id\"],\n \"additionalProperties\": false\n },\n \"Attachment\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"mediaType\": { \"type\": \"string\", \"minLength\": 1 },\n \"body\": { \"type\": \"string\" },\n \"contentEncoding\": {\n \"type\": \"string\",\n \"enum\": [\"BASE64\", \"IDENTITY\"]\n }\n },\n \"required\": [\"name\", \"mediaType\", \"body\", \"contentEncoding\"],\n \"additionalProperties\": false\n },\n \"CIInfo\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"buildNumber\": { \"type\": \"string\" },\n \"branch\": { \"type\": \"string\" },\n \"commitSha\": { \"type\": \"string\" },\n \"prNumber\": { \"type\": \"string\" }\n },\n \"required\": [\"name\"],\n \"additionalProperties\": false\n },\n \"CoverageSummary\": {\n \"type\": \"object\",\n \"properties\": {\n \"linesPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"branchesPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"functionsPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 },\n \"statementsPct\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 100 }\n },\n \"additionalProperties\": false\n },\n \"DocPhase\": {\n \"type\": \"string\",\n \"enum\": [\"static\", \"runtime\"]\n },\n \"DocEntry\": {\n \"oneOf\": [\n { \"$ref\": \"#/$defs/DocNote\" },\n { \"$ref\": \"#/$defs/DocTag\" },\n { \"$ref\": \"#/$defs/DocKv\" },\n { \"$ref\": \"#/$defs/DocCode\" },\n { \"$ref\": \"#/$defs/DocTable\" },\n { \"$ref\": \"#/$defs/DocLink\" },\n { \"$ref\": \"#/$defs/DocSection\" },\n { \"$ref\": \"#/$defs/DocMermaid\" },\n { \"$ref\": \"#/$defs/DocScreenshot\" },\n { \"$ref\": \"#/$defs/DocCustom\" }\n ]\n },\n \"DocNote\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"note\" },\n \"text\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"text\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocTag\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"tag\" },\n \"names\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"names\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocKv\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"kv\" },\n \"label\": { \"type\": \"string\" },\n \"value\": {},\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"value\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocCode\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"code\" },\n \"label\": { \"type\": \"string\" },\n \"content\": { \"type\": \"string\" },\n \"lang\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"content\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocTable\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"table\" },\n \"label\": { \"type\": \"string\" },\n \"columns\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } },\n \"rows\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"columns\", \"rows\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocLink\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"link\" },\n \"label\": { \"type\": \"string\" },\n \"url\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"label\", \"url\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocSection\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"section\" },\n \"title\": { \"type\": \"string\" },\n \"markdown\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"title\", \"markdown\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocMermaid\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"mermaid\" },\n \"code\": { \"type\": \"string\" },\n \"title\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"code\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocScreenshot\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"screenshot\" },\n \"path\": { \"type\": \"string\" },\n \"alt\": { \"type\": \"string\" },\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"path\", \"phase\"],\n \"additionalProperties\": false\n },\n \"DocCustom\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": { \"const\": \"custom\" },\n \"type\": { \"type\": \"string\", \"minLength\": 1 },\n \"data\": {},\n \"phase\": { \"$ref\": \"#/$defs/DocPhase\" },\n \"children\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/$defs/DocEntry\" }\n }\n },\n \"required\": [\"kind\", \"type\", \"data\", \"phase\"],\n \"additionalProperties\": false\n }\n }\n}\n","/**\n * parseStoryReport — boundary validator. Accepts unknown input (file contents,\n * fetch body, prop) and returns a Result-typed StoryReport.\n */\n\nimport type { StoryReport } from \"executable-stories-formatters\";\nimport type { Result } from \"../result\";\nimport { ok, err } from \"../result\";\nimport { storyReportSchema, STORY_REPORT_SCHEMA_MAJOR } from \"./story-report.schema\";\n\nexport function parseStoryReport(input: unknown): Result<StoryReport> {\n if (input === null || typeof input !== \"object\") {\n return err({\n message: \"Expected a StoryReport object.\",\n code: \"INVALID_INPUT\",\n });\n }\n\n const versionRaw = (input as { schemaVersion?: unknown }).schemaVersion;\n if (typeof versionRaw === \"string\") {\n const major = versionRaw.split(\".\")[0];\n if (major !== String(STORY_REPORT_SCHEMA_MAJOR)) {\n return err({\n message: `Schema major ${major} is not supported by this version of executable-stories-react (expected ${STORY_REPORT_SCHEMA_MAJOR}.x). Upgrade the package.`,\n code: \"SCHEMA_VERSION_MISMATCH\",\n });\n }\n }\n\n const parsed = storyReportSchema.safeParse(input);\n if (parsed.success) {\n return ok(parsed.data as StoryReport);\n }\n\n const issues = parsed.error.issues.map((i) => ({\n path: i.path.join(\".\") || \"/\",\n message: i.message,\n }));\n\n return err({\n message: `StoryReport failed validation (${issues.length} issue${issues.length === 1 ? \"\" : \"s\"}).`,\n code: \"VALIDATION_FAILED\",\n issues,\n });\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "executable-stories-react",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "React components for rendering executable-stories StoryReport JSON. Semantic, SSR-safe, themeable via CSS variables.",
5
5
  "author": "Jag Reehal <jag@jagreehal.com>",
6
6
  "homepage": "https://github.com/jagreehal/executable-stories#readme",
@@ -50,7 +50,7 @@
50
50
  "dependencies": {
51
51
  "marked": "^15.0.7",
52
52
  "zod": "^4.0.0",
53
- "executable-stories-formatters": "0.9.0"
53
+ "executable-stories-formatters": "0.10.0"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@testing-library/jest-dom": "^6.4.0",