niceeval 0.13.2 → 0.13.3
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/agents/bub.cjs +4 -4
- package/dist/agents/bub.cjs.map +1 -1
- package/dist/agents/bub.d.cts +2 -2
- package/dist/agents/bub.d.mts +2 -2
- package/dist/agents/bub.d.ts +2 -2
- package/dist/agents/claude-code-native.cjs +213 -0
- package/dist/agents/claude-code-native.cjs.map +1 -0
- package/dist/agents/claude-code-native.d.cts +5 -0
- package/dist/agents/claude-code-native.d.mts +5 -0
- package/dist/agents/claude-code-native.d.ts +5 -0
- package/dist/agents/claude-code-native.js +6 -0
- package/dist/agents/claude-code-native.js.map +1 -0
- package/dist/agents/claude-code.cjs +26 -80
- package/dist/agents/claude-code.cjs.map +1 -1
- package/dist/agents/codex-app-server.cjs +314 -0
- package/dist/agents/codex-app-server.cjs.map +1 -0
- package/dist/agents/codex-app-server.d.cts +9 -0
- package/dist/agents/codex-app-server.d.mts +9 -0
- package/dist/agents/codex-app-server.d.ts +9 -0
- package/dist/agents/codex-app-server.js +6 -0
- package/dist/agents/codex-app-server.js.map +1 -0
- package/dist/agents/codex.cjs +19 -68
- package/dist/agents/codex.cjs.map +1 -1
- package/dist/agents/codex.d.cts +3 -3
- package/dist/agents/codex.d.mts +3 -3
- package/dist/agents/codex.d.ts +3 -3
- package/dist/agents/index.cjs +3 -1
- package/dist/agents/index.cjs.map +1 -1
- package/dist/agents/index.d.cts +1 -0
- package/dist/agents/index.d.mts +1 -0
- package/dist/agents/index.d.ts +1 -0
- package/dist/agents/index.js +84 -82
- package/dist/agents/index.mjs +84 -82
- package/dist/agents/managed-jsonl.cjs +207 -0
- package/dist/agents/managed-jsonl.cjs.map +1 -0
- package/dist/agents/managed-jsonl.d.cts +39 -0
- package/dist/agents/managed-jsonl.d.mts +39 -0
- package/dist/agents/managed-jsonl.d.ts +39 -0
- package/dist/agents/managed-jsonl.js +6 -0
- package/dist/agents/managed-jsonl.js.map +1 -0
- package/dist/agents/managed-process.cjs +31 -0
- package/dist/agents/managed-process.cjs.map +1 -0
- package/dist/agents/managed-process.d.cts +3 -0
- package/dist/agents/managed-process.d.mts +3 -0
- package/dist/agents/managed-process.d.ts +3 -0
- package/dist/agents/managed-process.js +6 -0
- package/dist/agents/managed-process.js.map +1 -0
- package/dist/agents/omp.cjs +18 -1
- package/dist/agents/omp.cjs.map +1 -1
- package/dist/agents/sdk-streams.cjs +11 -4
- package/dist/agents/sdk-streams.cjs.map +1 -1
- package/dist/agents/types.cjs.map +1 -1
- package/dist/agents/types.d.cts +8 -0
- package/dist/agents/types.d.mts +8 -0
- package/dist/agents/types.d.ts +8 -0
- package/dist/analysis/bindings.cjs +74 -19
- package/dist/analysis/bindings.cjs.map +1 -1
- package/dist/analysis/bindings.d.cts +534 -156
- package/dist/analysis/bindings.d.mts +534 -156
- package/dist/analysis/bindings.d.ts +534 -156
- package/dist/analysis/domain-view.cjs.map +1 -1
- package/dist/analysis/domain-view.d.cts +137 -8
- package/dist/analysis/domain-view.d.mts +137 -8
- package/dist/analysis/domain-view.d.ts +137 -8
- package/dist/analysis/index.cjs.map +1 -1
- package/dist/analysis/index.d.cts +1 -1
- package/dist/analysis/index.d.mts +1 -1
- package/dist/analysis/index.d.ts +1 -1
- package/dist/assertions/api.cjs.map +1 -1
- package/dist/assertions/api.d.cts +62 -0
- package/dist/assertions/api.d.mts +62 -0
- package/dist/assertions/api.d.ts +62 -0
- package/dist/assertions/judge.cjs +56 -5
- package/dist/assertions/judge.cjs.map +1 -1
- package/dist/assertions/match.cjs +66 -42
- package/dist/assertions/match.cjs.map +1 -1
- package/dist/assertions/match.d.cts +13 -0
- package/dist/assertions/match.d.mts +13 -0
- package/dist/assertions/match.d.ts +13 -0
- package/dist/assertions/record/attachment.cjs +104 -33
- package/dist/assertions/record/attachment.cjs.map +1 -1
- package/dist/assertions/record/attachment.d.cts +294 -57
- package/dist/assertions/record/attachment.d.mts +294 -57
- package/dist/assertions/record/attachment.d.ts +294 -57
- package/dist/assertions/record/codec.cjs +91 -17
- package/dist/assertions/record/codec.cjs.map +1 -1
- package/dist/assertions/record/codec.d.cts +280 -52
- package/dist/assertions/record/codec.d.mts +280 -52
- package/dist/assertions/record/codec.d.ts +280 -52
- package/dist/assertions/record/index.js +2 -0
- package/dist/assertions/record/model.cjs +16 -0
- package/dist/assertions/record/model.cjs.map +1 -1
- package/dist/assertions/record/model.d.cts +120 -13
- package/dist/assertions/record/model.d.mts +120 -13
- package/dist/assertions/record/model.d.ts +120 -13
- package/dist/assertions/record/model.js +2 -0
- package/dist/assertions/record/producer.cjs +70 -50
- package/dist/assertions/record/producer.cjs.map +1 -1
- package/dist/assertions/record/producer.d.cts +8 -7
- package/dist/assertions/record/producer.d.mts +8 -7
- package/dist/assertions/record/producer.d.ts +8 -7
- package/dist/assertions/runtime.cjs +49 -7
- package/dist/assertions/runtime.cjs.map +1 -1
- package/dist/cli/application.cjs +40 -0
- package/dist/cli/application.cjs.map +1 -0
- package/dist/cli/application.d.cts +129 -0
- package/dist/cli/application.d.mts +129 -0
- package/dist/cli/application.d.ts +129 -0
- package/dist/cli/application.js +24 -0
- package/dist/cli/application.js.map +1 -0
- package/dist/cli/bootstrap.cjs +10 -4
- package/dist/cli/bootstrap.cjs.map +1 -1
- package/dist/cli/node-application.cjs +123 -0
- package/dist/cli/node-application.cjs.map +1 -0
- package/dist/cli/node-application.d.cts +14 -0
- package/dist/cli/node-application.d.mts +14 -0
- package/dist/cli/node-application.d.ts +14 -0
- package/dist/cli/node-application.js +26 -0
- package/dist/cli/node-application.js.map +1 -0
- package/dist/cli/program.cjs +2807 -0
- package/dist/cli/program.cjs.map +1 -0
- package/dist/cli/program.d.cts +352 -0
- package/dist/cli/program.d.mts +352 -0
- package/dist/cli/program.d.ts +352 -0
- package/dist/cli/program.js +36 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/project-configuration.cjs +134 -0
- package/dist/cli/project-configuration.cjs.map +1 -0
- package/dist/cli/project-configuration.d.cts +64 -0
- package/dist/cli/project-configuration.d.mts +64 -0
- package/dist/cli/project-configuration.d.ts +64 -0
- package/dist/cli/project-configuration.js +22 -0
- package/dist/cli/project-configuration.js.map +1 -0
- package/dist/cli/record.cjs +20 -4
- package/dist/cli/record.cjs.map +1 -1
- package/dist/cli/record.d.cts +3 -3
- package/dist/cli/record.d.mts +3 -3
- package/dist/cli/record.d.ts +3 -3
- package/dist/cli.cjs +19 -3130
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.cts +2 -148
- package/dist/cli.d.mts +2 -148
- package/dist/cli.d.ts +2 -148
- package/dist/cli.js +22 -30
- package/dist/context/assert-first.cjs +21 -15
- package/dist/context/assert-first.cjs.map +1 -1
- package/dist/context/assert-first.d.cts +1 -0
- package/dist/context/assert-first.d.mts +1 -0
- package/dist/context/assert-first.d.ts +1 -0
- package/dist/context/attempt-resources.cjs +13 -0
- package/dist/context/attempt-resources.cjs.map +1 -0
- package/dist/context/attempt-resources.d.cts +3 -0
- package/dist/context/attempt-resources.d.mts +3 -0
- package/dist/context/attempt-resources.d.ts +3 -0
- package/dist/context/attempt-resources.js +8 -0
- package/dist/context/attempt-resources.js.map +1 -0
- package/dist/context/session.cjs +4 -3
- package/dist/context/session.cjs.map +1 -1
- package/dist/context/session.d.cts +1 -0
- package/dist/context/session.d.mts +1 -0
- package/dist/context/session.d.ts +1 -0
- package/dist/eval/record/verdict.cjs +3 -2
- package/dist/eval/record/verdict.cjs.map +1 -1
- package/dist/experiment/host/index.cjs +1 -6
- package/dist/experiment/host/index.cjs.map +1 -1
- package/dist/experiment/host/index.d.cts +1 -0
- package/dist/experiment/host/index.d.mts +1 -0
- package/dist/experiment/host/index.d.ts +1 -0
- package/dist/load-config.cjs +13 -4
- package/dist/load-config.cjs.map +1 -1
- package/dist/load-config.d.cts +4 -3
- package/dist/load-config.d.mts +4 -3
- package/dist/load-config.d.ts +4 -3
- package/dist/load-config.js +4 -2
- package/dist/o11y/parsers/codex.cjs +29 -7
- package/dist/o11y/parsers/codex.cjs.map +1 -1
- package/dist/record/codec/core.d.cts +0 -2
- package/dist/record/codec/core.d.mts +0 -2
- package/dist/record/codec/core.d.ts +0 -2
- package/dist/record/codec/identifiers.cjs +2 -3
- package/dist/record/codec/identifiers.cjs.map +1 -1
- package/dist/record/codec/identifiers.d.cts +1 -2
- package/dist/record/codec/identifiers.d.mts +1 -2
- package/dist/record/codec/identifiers.d.ts +1 -2
- package/dist/record/codec/identifiers.js +10 -12
- package/dist/record/codec/index.js +42 -44
- package/dist/record/definition/attachment.cjs +1 -0
- package/dist/record/definition/attachment.cjs.map +1 -1
- package/dist/record/definition/attachment.d.cts +14 -0
- package/dist/record/definition/attachment.d.mts +14 -0
- package/dist/record/definition/attachment.d.ts +14 -0
- package/dist/record/family/assertions-v1.cjs +104 -0
- package/dist/record/family/assertions-v1.cjs.map +1 -0
- package/dist/record/family/assertions-v1.d.cts +2 -0
- package/dist/record/family/assertions-v1.d.mts +2 -0
- package/dist/record/family/assertions-v1.d.ts +2 -0
- package/dist/record/family/assertions-v1.js +6 -0
- package/dist/record/family/assertions-v1.js.map +1 -0
- package/dist/record/family/assertions.cjs +16 -5
- package/dist/record/family/assertions.cjs.map +1 -1
- package/dist/record/family/assertions.d.cts +510 -56
- package/dist/record/family/assertions.d.mts +510 -56
- package/dist/record/family/assertions.d.ts +510 -56
- package/dist/record/family/assertions.js +14 -10
- package/dist/record/family/catalog.cjs +17 -1
- package/dist/record/family/catalog.cjs.map +1 -1
- package/dist/record/family/catalog.d.cts +1292 -104
- package/dist/record/family/catalog.d.mts +1292 -104
- package/dist/record/family/catalog.d.ts +1292 -104
- package/dist/record/family/catalog.js +22 -20
- package/dist/record/family/index.js +144 -138
- package/dist/record/family/observability-v1.cjs +5 -0
- package/dist/record/family/observability-v1.cjs.map +1 -1
- package/dist/record/family/observability.cjs +1 -1
- package/dist/record/family/observability.cjs.map +1 -1
- package/dist/record/host/runtime.cjs +323 -173
- package/dist/record/host/runtime.cjs.map +1 -1
- package/dist/record/host/types.cjs.map +1 -1
- package/dist/record/host/types.d.cts +9 -7
- package/dist/record/host/types.d.mts +9 -7
- package/dist/record/host/types.d.ts +9 -7
- package/dist/record/model/core.cjs.map +1 -1
- package/dist/record/model/core.d.cts +1 -2
- package/dist/record/model/core.d.mts +1 -2
- package/dist/record/model/core.d.ts +1 -2
- package/dist/record/model/definition.cjs +1 -2
- package/dist/record/model/definition.cjs.map +1 -1
- package/dist/record/model/definition.d.cts +1 -7
- package/dist/record/model/definition.d.mts +1 -7
- package/dist/record/model/definition.d.ts +1 -7
- package/dist/record/model/identifiers.cjs +2 -3
- package/dist/record/model/identifiers.cjs.map +1 -1
- package/dist/record/model/identifiers.d.cts +1 -3
- package/dist/record/model/identifiers.d.mts +1 -3
- package/dist/record/model/identifiers.d.ts +1 -3
- package/dist/record/model/identifiers.js +36 -38
- package/dist/record/model/index.js +60 -62
- package/dist/record/platform/node.cjs +17 -7
- package/dist/record/platform/node.cjs.map +1 -1
- package/dist/record/platform/services.cjs.map +1 -1
- package/dist/record/platform/services.d.cts +8 -3
- package/dist/record/platform/services.d.mts +8 -3
- package/dist/record/platform/services.d.ts +8 -3
- package/dist/record/reader/format.cjs +16 -65
- package/dist/record/reader/format.cjs.map +1 -1
- package/dist/record/reader/format.d.cts +5 -9
- package/dist/record/reader/format.d.mts +5 -9
- package/dist/record/reader/format.d.ts +5 -9
- package/dist/record/reader/index.js +10 -8
- package/dist/record/reader/runtime.cjs +63 -32
- package/dist/record/reader/runtime.cjs.map +1 -1
- package/dist/record/reader/runtime.d.cts +40 -4
- package/dist/record/reader/runtime.d.mts +40 -4
- package/dist/record/reader/runtime.d.ts +40 -4
- package/dist/record/reader/runtime.js +6 -4
- package/dist/report/assets/enhance.js +5 -5
- package/dist/report/assets/styles.css +190 -24
- package/dist/report/built-in/result-components.cjs +8 -5
- package/dist/report/built-in/result-components.cjs.map +1 -1
- package/dist/report/built-in/standard.cjs +3 -0
- package/dist/report/built-in/standard.cjs.map +1 -1
- package/dist/report/built-in/standard.d.cts +2 -0
- package/dist/report/built-in/standard.d.mts +2 -0
- package/dist/report/built-in/standard.d.ts +2 -0
- package/dist/report/client-dist/app.js +53 -0
- package/dist/report/components/attempt-detail/compute.cjs +108 -231
- package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
- package/dist/report/components/attempt-detail/compute.d.cts +11 -45
- package/dist/report/components/attempt-detail/compute.d.mts +11 -45
- package/dist/report/components/attempt-detail/compute.d.ts +11 -45
- package/dist/report/components/attempt-detail/compute.js +2 -4
- package/dist/report/components/attempt-detail/content.cjs +4 -4
- package/dist/report/components/attempt-detail/content.cjs.map +1 -1
- package/dist/report/components/attempt-detail/validate.cjs +47 -4
- package/dist/report/components/attempt-detail/validate.cjs.map +1 -1
- package/dist/report/components/entity-lists/compute.cjs +9 -15
- package/dist/report/components/entity-lists/compute.cjs.map +1 -1
- package/dist/report/components/entity-lists/content.cjs +53 -40
- package/dist/report/components/entity-lists/content.cjs.map +1 -1
- package/dist/report/components/entity-lists/index.cjs +1 -3
- package/dist/report/components/entity-lists/index.cjs.map +1 -1
- package/dist/report/components/experiment-detail/compute.cjs +4 -6
- package/dist/report/components/experiment-detail/compute.cjs.map +1 -1
- package/dist/report/components/summaries/index.cjs +5 -1
- package/dist/report/components/summaries/index.cjs.map +1 -1
- package/dist/report/definition/cell.cjs +14 -7
- package/dist/report/definition/cell.cjs.map +1 -1
- package/dist/report/definition/cell.d.cts +4 -0
- package/dist/report/definition/cell.d.mts +4 -0
- package/dist/report/definition/cell.d.ts +4 -0
- package/dist/report/definition/primitives/assertion-evidence.cjs +96 -0
- package/dist/report/definition/primitives/assertion-evidence.cjs.map +1 -0
- package/dist/report/definition/primitives/assertion-evidence.d.cts +11 -0
- package/dist/report/definition/primitives/assertion-evidence.d.mts +11 -0
- package/dist/report/definition/primitives/assertion-evidence.d.ts +11 -0
- package/dist/report/definition/primitives/assertion-evidence.js +6 -0
- package/dist/report/definition/primitives/assertion-evidence.js.map +1 -0
- package/dist/report/definition/primitives/conversation.cjs +7 -0
- package/dist/report/definition/primitives/conversation.cjs.map +1 -1
- package/dist/report/definition/primitives/conversation.d.cts +2 -0
- package/dist/report/definition/primitives/conversation.d.mts +2 -0
- package/dist/report/definition/primitives/conversation.d.ts +2 -0
- package/dist/report/definition/primitives/turn-trace.cjs +53 -3
- package/dist/report/definition/primitives/turn-trace.cjs.map +1 -1
- package/dist/report/definition/primitives.cjs +14 -1
- package/dist/report/definition/primitives.cjs.map +1 -1
- package/dist/report/definition/report.cjs +16 -8
- package/dist/report/definition/report.cjs.map +1 -1
- package/dist/report/definition/report.d.cts +6 -0
- package/dist/report/definition/report.d.mts +6 -0
- package/dist/report/definition/report.d.ts +6 -0
- package/dist/report/definition/table-text.cjs +12 -3
- package/dist/report/definition/table-text.cjs.map +1 -1
- package/dist/report/definition/table-text.d.cts +6 -1
- package/dist/report/definition/table-text.d.mts +6 -1
- package/dist/report/definition/table-text.d.ts +6 -1
- package/dist/report/execution/model.cjs +6 -14
- package/dist/report/execution/model.cjs.map +1 -1
- package/dist/report/execution/model.d.cts +5 -10
- package/dist/report/execution/model.d.mts +5 -10
- package/dist/report/execution/model.d.ts +5 -10
- package/dist/report/execution/model.js +6 -6
- package/dist/report/execution/paths.cjs +0 -11
- package/dist/report/execution/paths.cjs.map +1 -1
- package/dist/report/execution/paths.d.cts +0 -1
- package/dist/report/execution/paths.d.mts +0 -1
- package/dist/report/execution/paths.d.ts +0 -1
- package/dist/report/execution/paths.js +6 -8
- package/dist/report/host/execute.cjs +13 -22
- package/dist/report/host/execute.cjs.map +1 -1
- package/dist/report/host/execute.d.cts +1 -4
- package/dist/report/host/execute.d.mts +1 -4
- package/dist/report/host/execute.d.ts +1 -4
- package/dist/report/host/from-record.cjs +3 -0
- package/dist/report/host/from-record.cjs.map +1 -1
- package/dist/report/host/from-record.d.cts +4 -1
- package/dist/report/host/from-record.d.mts +4 -1
- package/dist/report/host/from-record.d.ts +4 -1
- package/dist/report/host/site-assets.cjs +1 -2
- package/dist/report/host/site-assets.cjs.map +1 -1
- package/dist/report/host/site-assets.d.cts +0 -1
- package/dist/report/host/site-assets.d.mts +0 -1
- package/dist/report/host/site-assets.d.ts +0 -1
- package/dist/report/host/site-assets.js +2 -4
- package/dist/report/host/static.cjs +71 -346
- package/dist/report/host/static.cjs.map +1 -1
- package/dist/report/host/static.d.cts +1 -3
- package/dist/report/host/static.d.mts +1 -3
- package/dist/report/host/static.d.ts +1 -3
- package/dist/report/host/static.js +2 -2
- package/dist/report/host/view-session.cjs.map +1 -1
- package/dist/report/host/view-session.d.cts +1 -1
- package/dist/report/host/view-session.d.mts +1 -1
- package/dist/report/host/view-session.d.ts +1 -1
- package/dist/report/model/locale.cjs +1 -1
- package/dist/report/model/locale.cjs.map +1 -1
- package/dist/report/model/locale.d.cts +1 -1
- package/dist/report/model/locale.d.mts +1 -1
- package/dist/report/model/locale.d.ts +1 -1
- package/dist/report/model/pricing.cjs +2 -2
- package/dist/report/model/pricing.cjs.map +1 -1
- package/dist/report/react/enhance.js +5 -5
- package/dist/report/react/styles.css +190 -24
- package/dist/runner/adoption.cjs +4 -7
- package/dist/runner/adoption.cjs.map +1 -1
- package/dist/runner/attempt-resources.cjs +60 -0
- package/dist/runner/attempt-resources.cjs.map +1 -0
- package/dist/runner/attempt-resources.d.cts +13 -0
- package/dist/runner/attempt-resources.d.mts +13 -0
- package/dist/runner/attempt-resources.d.ts +13 -0
- package/dist/runner/attempt-resources.js +6 -0
- package/dist/runner/attempt-resources.js.map +1 -0
- package/dist/runner/attempt.cjs +37 -3
- package/dist/runner/attempt.cjs.map +1 -1
- package/dist/runner/feedback/failure.cjs +77 -2
- package/dist/runner/feedback/failure.cjs.map +1 -1
- package/dist/runner/feedback/failure.d.cts +2 -1
- package/dist/runner/feedback/failure.d.mts +2 -1
- package/dist/runner/feedback/failure.d.ts +2 -1
- package/dist/runner/project-current.cjs +2 -13
- package/dist/runner/project-current.cjs.map +1 -1
- package/dist/runner/project-current.d.cts +4 -2
- package/dist/runner/project-current.d.mts +4 -2
- package/dist/runner/project-current.d.ts +4 -2
- package/dist/runner/reporters/braintrust.cjs +7 -7
- package/dist/runner/reporters/braintrust.cjs.map +1 -1
- package/dist/runner/reuse-readback.cjs +3 -4
- package/dist/runner/reuse-readback.cjs.map +1 -1
- package/dist/runner/run.cjs +5 -2
- package/dist/runner/run.cjs.map +1 -1
- package/dist/sandbox/backend.cjs +32 -2
- package/dist/sandbox/backend.cjs.map +1 -1
- package/dist/sandbox/backend.d.cts +12 -1
- package/dist/sandbox/backend.d.mts +12 -1
- package/dist/sandbox/backend.d.ts +12 -1
- package/dist/sandbox/backend.js +28 -22
- package/dist/sandbox/docker.cjs +140 -0
- package/dist/sandbox/docker.cjs.map +1 -1
- package/dist/sandbox/docker.d.cts +3 -1
- package/dist/sandbox/docker.d.mts +3 -1
- package/dist/sandbox/docker.d.ts +3 -1
- package/dist/sandbox/e2b.cjs +42 -0
- package/dist/sandbox/e2b.cjs.map +1 -1
- package/dist/sandbox/e2b.d.cts +2 -0
- package/dist/sandbox/e2b.d.mts +2 -0
- package/dist/sandbox/e2b.d.ts +2 -0
- package/dist/sandbox/local.cjs +64 -0
- package/dist/sandbox/local.cjs.map +1 -1
- package/dist/sandbox/local.d.cts +3 -1
- package/dist/sandbox/local.d.mts +3 -1
- package/dist/sandbox/local.d.ts +3 -1
- package/dist/sandbox/managed-process.cjs +49 -0
- package/dist/sandbox/managed-process.cjs.map +1 -0
- package/dist/sandbox/managed-process.d.cts +11 -0
- package/dist/sandbox/managed-process.d.mts +11 -0
- package/dist/sandbox/managed-process.d.ts +11 -0
- package/dist/sandbox/managed-process.js +6 -0
- package/dist/sandbox/managed-process.js.map +1 -0
- package/dist/sandbox/types.cjs.map +1 -1
- package/dist/sandbox/types.d.cts +24 -0
- package/dist/sandbox/types.d.mts +24 -0
- package/dist/sandbox/types.d.ts +24 -0
- package/dist/sandbox/vercel.cjs +1 -0
- package/dist/sandbox/vercel.cjs.map +1 -1
- package/dist/sandbox/vercel.d.cts +1 -0
- package/dist/sandbox/vercel.d.mts +1 -0
- package/dist/sandbox/vercel.d.ts +1 -0
- package/dist/view/server.cjs +2 -37
- package/dist/view/server.cjs.map +1 -1
- package/dist/view/server.d.cts +0 -3
- package/dist/view/server.d.mts +0 -3
- package/dist/view/server.d.ts +0 -3
- package/docs-site/zh/reference/builtin-agents.mdx +7 -7
- package/docs-site/zh/reference/official-adapters.mdx +4 -4
- package/docs-site/zh/reference/report-components.mdx +2 -2
- package/docs-site/zh/tutorials/configuration.mdx +2 -2
- package/docs-site/zh/tutorials/deploy-report-site.mdx +24 -2
- package/docs-site/zh/tutorials/publish-report.mdx +4 -4
- package/docs-site/zh/tutorials/sandbox-agent.mdx +5 -5
- package/docs-site/zh/tutorials/theming.mdx +2 -2
- package/package.json +4 -6
- package/dist/record/migration/index.cjs +0 -5
- package/dist/record/migration/index.cjs.map +0 -1
- package/dist/record/migration/index.d.cts +0 -11
- package/dist/record/migration/index.d.mts +0 -11
- package/dist/record/migration/index.d.ts +0 -11
- package/dist/record/migration/index.js +0 -6
- package/dist/record/migration/index.js.map +0 -1
- package/dist/report/host/site-runtime.cjs +0 -92
- package/dist/report/host/site-runtime.cjs.map +0 -1
- package/dist/report/host/site-runtime.d.cts +0 -9
- package/dist/report/host/site-runtime.d.mts +0 -9
- package/dist/report/host/site-runtime.d.ts +0 -9
- package/dist/report/host/site-runtime.js +0 -10
- package/dist/report/host/site-runtime.js.map +0 -1
- package/dist/view/client-dist/app.css +0 -2
- package/dist/view/client-dist/app.js +0 -49
- package/dist/view/data.cjs +0 -3
- package/dist/view/data.cjs.map +0 -1
- package/dist/view/data.d.cts +0 -9
- package/dist/view/data.d.mts +0 -9
- package/dist/view/data.d.ts +0 -9
- package/dist/view/data.js +0 -4
- package/dist/view/data.js.map +0 -1
- package/dist/view/index.cjs +0 -24
- package/dist/view/index.cjs.map +0 -1
- package/dist/view/index.d.cts +0 -9
- package/dist/view/index.d.mts +0 -9
- package/dist/view/index.d.ts +0 -9
- package/dist/view/index.js +0 -28
- package/dist/view/index.js.map +0 -1
- package/dist/view/report-view-cache.cjs +0 -200
- package/dist/view/report-view-cache.cjs.map +0 -1
- package/dist/view/report-view-cache.d.cts +0 -67
- package/dist/view/report-view-cache.d.mts +0 -67
- package/dist/view/report-view-cache.d.ts +0 -67
- package/dist/view/report-view-cache.js +0 -8
- package/dist/view/report-view-cache.js.map +0 -1
- package/dist/view/shared/types.cjs +0 -3
- package/dist/view/shared/types.cjs.map +0 -1
- package/dist/view/shared/types.d.cts +0 -51
- package/dist/view/shared/types.d.mts +0 -51
- package/dist/view/shared/types.d.ts +0 -51
- package/dist/view/shared/types.js +0 -4
- package/dist/view/shared/types.js.map +0 -1
- package/dist/view/site.cjs +0 -32
- package/dist/view/site.cjs.map +0 -1
- package/dist/view/site.d.cts +0 -24
- package/dist/view/site.d.mts +0 -24
- package/dist/view/site.d.ts +0 -24
- package/dist/view/site.js +0 -8
- package/dist/view/site.js.map +0 -1
- package/dist/view/styles.css +0 -170
- package/dist/view/template.html +0 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static.js","sourceRoot":"","sources":["static.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { Context, Effect } from \"effect\";\nimport { REPORT_BUILD_RSS_BYTES_MAX, REPORT_BUILD_TIME_MS_MAX, REPORT_DIFF_ASSET_BYTES_MAX, REPORT_DOWNLOAD_FILE_BYTES_MAX, REPORT_DOWNLOAD_FILES_MAX, REPORT_PAGE_HTML_BYTES_MAX, REPORT_SOURCE_ASSET_BYTES_MAX, REPORT_SOURCE_DIFF_ASSET_BYTES_MAX, REPORT_SITE_HTML_BYTES_MAX, REPORT_STATIC_ASSET_BYTES_MAX, closedSiteRevisionData, compareUtf8, makeClosedSiteRevision, reportBuildBudgetExceeded, type ClosedSiteFile, type ClosedSiteRevision, type ReportBuildBudgetExceeded, } from \"../execution/model.ts\";\nimport { hostStaticPath, staticPathConflicts, staticPathForDownload, staticPathForRoute, validateDownloadPath, validateReportRoute, type ReportStaticPath, } from \"../execution/paths.ts\";\nimport type { ReportProblem } from \"../execution/machine.ts\";\nimport { resolveLocalizedText } from \"../model/locale.ts\";\nimport type { ResolvedPage, ResolvedPageAsset } from \"../runtime/resolved-page.ts\";\nimport { basalt, themeSourceBase, themeStylesheet, type ThemeDefinition, } from \"../theme.ts\";\nimport type { ClosedReportSite, ClosedSitePage } from \"./execute.ts\";\nimport { REPORT_REFRESH_RUNTIME_PATH, REPORT_STYLESHEET_PATH, } from \"./site-assets.ts\";\nimport { reportSiteRuntime } from \"./site-runtime.ts\";\nexport interface ReportHostOutputPath {\n readonly value: string;\n}\nexport interface ReportFileSystemError {\n readonly code: \"report-export-write-failed\";\n readonly operation: string;\n}\nexport interface ReportExportTargetExists {\n readonly code: \"report-export-target-exists\";\n}\nexport type ReportFileSystemFailure = ReportFileSystemError | ReportExportTargetExists;\nexport interface ReportFileSystemService {\n readonly prepareOutput: (out: string) => Effect.Effect<void, ReportFileSystemFailure>;\n readonly writeFile: (input: {\n readonly out: string;\n readonly path: ReportHostOutputPath;\n readonly bytes: Uint8Array;\n }) => Effect.Effect<void, ReportFileSystemFailure>;\n readonly writeCompleteMarker: (out: string) => Effect.Effect<void, ReportFileSystemFailure>;\n readonly syncDirectory: (out: string) => Effect.Effect<void, ReportFileSystemFailure>;\n}\nexport class ReportFileSystem extends Context.Tag(\"@niceeval/report/ReportFileSystem\")<ReportFileSystem, ReportFileSystemService>() {\n}\nexport interface ReportStaticExportReceipt {\n readonly out: string;\n /** Does not include the zero-byte publication marker. */\n readonly filesWritten: number;\n}\nexport interface ReportSiteBuildFailure {\n readonly code: \"report-site-build-failed\";\n readonly operation: \"render\" | \"identity\" | \"path\" | \"asset\" | \"download\";\n readonly reason: string;\n}\nexport type ReportSiteBuildError = ReportSiteBuildFailure | ReportBuildBudgetExceeded;\nexport type ReportExportError = ReportFileSystemFailure | ReportSiteBuildFailure;\n/** The one Host-owned static resource path for a closed Theme stylesheet. */\nexport const REPORT_THEME_STYLESHEET_PATH = \"_niceeval/theme.css\";\n/** The Host-owned renderer identity carried by every static revision. */\nexport const REPORT_STATIC_RENDERER = \"niceeval.report-ssg/v1\" as const;\nconst MANIFEST_PATH = \"_niceeval/manifest.json\";\nconst PROBLEMS_PATH = \"_niceeval/problems.json\";\nconst PROJECTIONS_PATH = \"_niceeval/data/projections.json\";\nconst COMPLETE_PATH = \"_niceeval/complete\";\nconst NICEEVAL_BRAND_HREF = \"https://niceeval.com/?utm_source=report&utm_medium=brand\";\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\nconst PRODUCT_STYLESHEET = readFileSync(new URL(\"../assets/styles.css\", __niceevalImportMetaUrl), \"utf8\");\nconst PRODUCT_ENHANCER = readFileSync(new URL(\"../assets/enhance.js\", __niceevalImportMetaUrl), \"utf8\");\n/**\n * Host-owned parameterized-Page dialog for the shared view/static runtime.\n * A click on a same-site `<pageId>/<key>/index.html` href writes the legacy\n * hash deep link and opens a native `<dialog>` filled with that standalone\n * detail document's own slot bytes. No-JS and direct hrefs keep reading the\n * same document. The route list comes from the revision's closed pages, not\n * from any author declaration. The report content inside the dialog is styled\n * by the existing product stylesheet; only the dialog chrome is styled here.\n */\nconst PARAM_PAGE_DIALOG_RUNTIME = `(() => {\n \"use strict\";\n if (typeof window === \"undefined\" || typeof HTMLDialogElement !== \"function\") return;\n if (location.protocol !== \"http:\" && location.protocol !== \"https:\") return;\n const routes = (document.documentElement.getAttribute(\"data-niceeval-param-routes\") || \"\")\n .split(\" \")\n .filter((value) => value.length > 0);\n if (routes.length === 0) return;\n const siteRoot = document.documentElement.getAttribute(\"data-niceeval-site-root\") || \"index.html\";\n\n function closest(target, selector) {\n return target && target.closest ? target.closest(selector) : null;\n }\n\n function escapeRegExp(value) {\n const special = \".+*?^$()[]{}|\";\n let escaped = \"\";\n for (const character of value) {\n if (special.includes(character) || character.charCodeAt(0) === 92) {\n escaped += String.fromCharCode(92);\n }\n escaped += character;\n }\n return escaped;\n }\n\n function matchTarget(url) {\n if (url.origin !== location.origin) return null;\n for (const prefix of routes) {\n const root = new URL(siteRoot, document.baseURI);\n const pattern = new RegExp(\"^\" + escapeRegExp(new URL(prefix + \"/\", root).pathname) + \"([^/]+)/index\\\\\\\\.html$\");\n const match = pattern.exec(url.pathname);\n if (!match) continue;\n let key;\n try {\n key = decodeURIComponent(match[1]);\n } catch {\n return null;\n }\n if (!key || key.includes(\"/\")) return null;\n return { prefix, key, url };\n }\n return null;\n }\n\n function targetFromHash() {\n const match = location.hash.startsWith(\"#/\") ? location.hash.slice(2).split(\"/\") : [];\n if (match.length !== 2 || !routes.includes(match[0]) || !match[1]) return null;\n const root = new URL(siteRoot, document.baseURI);\n return {\n prefix: match[0],\n key: match[1],\n url: new URL(match[0] + \"/\" + encodeURIComponent(match[1]) + \"/index.html\", root),\n };\n }\n\n function hashForTarget(target) {\n return \"#/\" + target.prefix + \"/\" + target.key;\n }\n\n function currentLocale() {\n return document.documentElement.lang === \"zh-CN\" ? \"zh-CN\" : \"en\";\n }\n\n function rebaseSlotUrls(slot, responseUrl) {\n for (const element of slot.querySelectorAll(\"[href], [src]\")) {\n for (const attribute of [\"href\", \"src\"]) {\n const value = element.getAttribute(attribute);\n if (value === null) continue;\n // Fragment and non-document schemes retain their literal browser\n // meaning. Every other relative reference must keep the fetched\n // detail document as its base after this slot moves into the root\n // page's dialog.\n if (value.startsWith(\"#\") || /^(?:data:|mailto:|tel:)/i.test(value)) continue;\n try {\n element.setAttribute(attribute, new URL(value, responseUrl).href);\n } catch {\n // Leave malformed author data untouched; the standalone document\n // would have the same browser-level handling.\n }\n }\n }\n }\n\n function extractDocument(html, locale, responseUrl) {\n const parsed = new DOMParser().parseFromString(html, \"text/html\");\n const slot = parsed.querySelector('.niceeval-view-report-slot[data-niceeval-locale=\"' + locale + '\"]');\n if (!slot) return null;\n rebaseSlotUrls(slot, responseUrl);\n return { title: parsed.title, content: slot.innerHTML };\n }\n\n let dialog = null;\n let ownsHistory = false;\n let requestRevision = 0;\n let requestedTarget = null;\n\n function ensureDialog() {\n if (dialog !== null) return;\n dialog = document.createElement(\"dialog\");\n dialog.className = \"niceeval-view-dialog\";\n const head = document.createElement(\"div\");\n head.className = \"niceeval-view-dialog-head\";\n const title = document.createElement(\"span\");\n title.className = \"niceeval-view-dialog-title\";\n title.id = \"niceeval-view-dialog-title\";\n const close = document.createElement(\"button\");\n close.type = \"button\";\n close.className = \"niceeval-view-dialog-close\";\n close.setAttribute(\"aria-label\", \"Close\");\n // Keep the static host visually identical to the legacy React/Radix\n // dialog. The old DialogClose renders a literal x, rather than the\n // typographic multiplication sign.\n close.textContent = \"x\";\n close.addEventListener(\"click\", closeFromUi);\n head.appendChild(title);\n head.appendChild(close);\n const body = document.createElement(\"div\");\n body.className = \"niceeval-view-dialog-body niceeval-view-report-slot\";\n dialog.appendChild(head);\n dialog.appendChild(body);\n dialog.setAttribute(\"aria-labelledby\", title.id);\n dialog.addEventListener(\"click\", (event) => {\n if (event.target === dialog) closeFromUi();\n });\n dialog.addEventListener(\"cancel\", (event) => {\n event.preventDefault();\n closeFromUi();\n });\n document.body.appendChild(dialog);\n }\n\n function closeFromUi() {\n if (dialog === null || !dialog.open) return;\n requestedTarget = null;\n requestRevision++;\n if (!ownsHistory) {\n dialog.close();\n history.replaceState(null, \"\", location.pathname + location.search);\n return;\n }\n ownsHistory = false;\n history.back();\n }\n\n function openTarget(target, nextOwnsHistory) {\n ensureDialog();\n requestedTarget = target;\n const revision = ++requestRevision;\n fetch(target.url.href, { credentials: \"same-origin\" })\n .then((response) => {\n if (!response.ok) throw new Error(\"http \" + response.status);\n return response.text().then((html) => ({ html, responseUrl: response.url || target.url.href }));\n })\n .then(({ html, responseUrl }) => {\n if (revision !== requestRevision || requestedTarget !== target) return;\n const extracted = extractDocument(html, currentLocale(), responseUrl);\n if (extracted === null) {\n location.href = target.url.href;\n return;\n }\n dialog.querySelector(\".niceeval-view-dialog-title\").textContent = extracted.title;\n dialog.querySelector(\".niceeval-view-dialog-close\").setAttribute(\n \"aria-label\",\n currentLocale() === \"zh-CN\" ? \"关闭\" : \"Close\",\n );\n dialog.querySelector(\".niceeval-view-dialog-body\").innerHTML = extracted.content;\n if (!dialog.open) dialog.showModal();\n ownsHistory = nextOwnsHistory;\n })\n .catch(() => {\n if (revision === requestRevision && requestedTarget === target) location.href = target.url.href;\n });\n }\n\n function onHashChange() {\n const target = targetFromHash();\n if (target !== null) {\n openTarget(target, true);\n return;\n }\n requestedTarget = null;\n requestRevision++;\n ownsHistory = false;\n if (dialog !== null && dialog.open) dialog.close();\n }\n\n const initialTarget = targetFromHash();\n if (initialTarget !== null) openTarget(initialTarget, false);\n window.addEventListener(\"hashchange\", onHashChange);\n window.addEventListener(\"popstate\", () => {\n if (location.hash) return;\n onHashChange();\n });\n\n document.addEventListener(\"click\", (event) => {\n if (event.defaultPrevented || event.button !== 0) return;\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n const anchor = closest(event.target, \"a[href]\");\n if (!anchor) return;\n const anchorTarget = anchor.getAttribute(\"target\");\n if (anchorTarget !== null && anchorTarget !== \"_self\") return;\n if (anchor.hasAttribute(\"download\")) return;\n let url;\n try {\n url = new URL(anchor.getAttribute(\"href\"), document.baseURI);\n } catch {\n return;\n }\n const target = matchTarget(url);\n if (target === null) return;\n event.preventDefault();\n location.hash = hashForTarget(target);\n });\n})();`;\n/** Forms one byte-complete revision; neither view nor static renders afterward. */\nexport function buildSiteRevision(input: {\n readonly site: ClosedReportSite;\n readonly theme?: ThemeDefinition;\n}): Effect.Effect<ClosedSiteRevision, ReportSiteBuildError> {\n return Effect.try({\n try: () => {\n const files = buildSiteFiles(input.site, input.theme ?? input.site.theme ?? basalt);\n assertFinalBuildBudgets(input.site.startedAtMs, input.site.baselineRssBytes);\n const defaultRoute = defaultRouteForSite(input.site);\n return signClosedSiteRevision({\n sampleIdentity: input.site.sampleIdentity,\n reportIdentity: input.site.reportIdentity,\n files,\n routes: input.site.pages.map(({ page }) => page.target.route),\n ...(defaultRoute === undefined ? {} : { defaultRoute }),\n });\n },\n catch: (cause): ReportSiteBuildError => isBudgetError(cause)\n ? cause\n : siteFailure(isSiteBuildFailure(cause) ? cause.operation : \"render\", isSiteBuildFailure(cause) ? cause.reason : boundedReason(cause)),\n });\n}\n/**\n * Host-only final signer for a byte-complete static site. It derives the\n * problem table from the closed `_niceeval/problems.json` resource, so callers\n * which retain only closed bytes never need to retain revision problem values.\n */\nexport function signClosedSiteRevision(input: {\n readonly sampleIdentity: string;\n readonly reportIdentity: string;\n readonly files: readonly ClosedSiteFile[];\n readonly routes: readonly string[];\n readonly defaultRoute?: string;\n}): ClosedSiteRevision {\n const files = Object.freeze([...input.files].sort((left, right) => compareUtf8(left.path, right.path)));\n const problems = closedProblemsFromFiles(files);\n return makeClosedSiteRevision({\n contentHash: siteRevisionIdentity({\n sampleIdentity: input.sampleIdentity,\n reportIdentity: input.reportIdentity,\n files,\n ...(input.defaultRoute === undefined ? {} : { defaultRoute: input.defaultRoute }),\n problems,\n }),\n files,\n routes: input.routes,\n ...(input.defaultRoute === undefined ? {} : { defaultRoute: input.defaultRoute }),\n problems,\n });\n}\n/**\n * Closes exactly the stylesheet bytes used by the static builder. Watch cache\n * code may request these bytes but must not reproduce Theme asset resolution.\n */\nexport function closeStaticThemeStylesheet(theme: ThemeDefinition): Uint8Array {\n return encoder.encode(`${themeStylesheet(theme)}\\n${inlineThemeStyles(theme)}\\n`);\n}\nfunction assertFinalBuildBudgets(startedAtMs: number, baselineRssBytes: number): void {\n const elapsed = Date.now() - startedAtMs;\n if (elapsed > REPORT_BUILD_TIME_MS_MAX) {\n throw reportBuildBudgetExceeded(\"build-time\", REPORT_BUILD_TIME_MS_MAX, elapsed);\n }\n const rssGrowth = Math.max(0, process.memoryUsage().rss - baselineRssBytes);\n if (rssGrowth > REPORT_BUILD_RSS_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"build-rss\", REPORT_BUILD_RSS_BYTES_MAX, rssGrowth);\n }\n}\n/** Writes only the immutable revision mapping, then publishes its marker last. */\nexport function exportStaticReport(input: {\n readonly revision: ClosedSiteRevision;\n readonly out: string;\n}): Effect.Effect<ReportStaticExportReceipt, ReportExportError, ReportFileSystem> {\n return Effect.gen(function* () {\n const files = closedSiteRevisionData(input.revision).files;\n const fileSystem = yield* ReportFileSystem;\n yield* fileSystem.prepareOutput(input.out);\n let written = 0;\n for (const file of files) {\n if (file.path === COMPLETE_PATH)\n continue;\n yield* fileSystem.writeFile({\n out: input.out,\n path: Object.freeze({ value: file.path }),\n bytes: file.bytes,\n });\n written += 1;\n }\n yield* fileSystem.writeCompleteMarker(input.out);\n yield* fileSystem.syncDirectory(input.out);\n return Object.freeze({ out: input.out, filesWritten: written });\n });\n}\nfunction buildSiteFiles(site: ClosedReportSite, theme: ThemeDefinition): readonly ClosedSiteFile[] {\n const files = new Map<string, ClosedSiteFile>();\n const paths: ReportStaticPath[] = [];\n const add = (file: ClosedSiteFile, owner: ReportStaticPath): void => {\n const prior = files.get(file.path);\n if (prior !== undefined) {\n if (prior.mediaType === file.mediaType && bytesEqual(prior.bytes, file.bytes))\n return;\n throw siteFailure(\"path\", `two site resources produce ${file.path}`);\n }\n files.set(file.path, file);\n paths.push(owner);\n };\n const stylesheet = textFile(REPORT_STYLESHEET_PATH, PRODUCT_STYLESHEET, \"text/css; charset=utf-8\");\n const themeFile = binaryFile(REPORT_THEME_STYLESHEET_PATH, \"text/css; charset=utf-8\", closeStaticThemeStylesheet(theme));\n const runtime = textFile(REPORT_REFRESH_RUNTIME_PATH, `${reportSiteRuntime(PRODUCT_ENHANCER).trimEnd()}\\n${PARAM_PAGE_DIALOG_RUNTIME}\\n`, \"text/javascript; charset=utf-8\");\n add(stylesheet, hostStaticPath(stylesheet.path));\n add(themeFile, hostStaticPath(themeFile.path));\n add(runtime, hostStaticPath(runtime.path));\n const pages = [...site.pages].sort(compareSitePages);\n const paramRoutes = parameterizedRoutePrefixes(site);\n let siteHtmlBytes = 0;\n for (const entry of pages) {\n assertFinalBuildBudgets(site.startedAtMs, site.baselineRssBytes);\n const routeIssue = validateReportRoute(entry.page.target.route);\n if (routeIssue !== undefined || entry.page.target.route === \"/_niceeval\" ||\n entry.page.target.route.startsWith(\"/_niceeval/\")) {\n throw siteFailure(\"path\", routeIssue?.reason ?? \"author routes cannot occupy /_niceeval\");\n }\n const output = staticPathForRoute(entry.page.target.route);\n const pageFile = textFile(output.posix, renderPage(site, entry, paramRoutes), \"text/html; charset=utf-8\");\n if (pageFile.bytes.byteLength > REPORT_PAGE_HTML_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"page-html-bytes\", REPORT_PAGE_HTML_BYTES_MAX, pageFile.bytes.byteLength, { pageId: entry.page.target.pageId, route: entry.page.target.route });\n }\n siteHtmlBytes += pageFile.bytes.byteLength;\n if (siteHtmlBytes > REPORT_SITE_HTML_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"site-html-bytes\", REPORT_SITE_HTML_BYTES_MAX, siteHtmlBytes);\n }\n add(pageFile, output);\n for (const asset of entry.page.assets)\n addPageAsset(add, asset);\n }\n const downloads = collectDownloads(site.pages);\n if (downloads.length > REPORT_DOWNLOAD_FILES_MAX) {\n throw reportBuildBudgetExceeded(\"download-files\", REPORT_DOWNLOAD_FILES_MAX, downloads.length);\n }\n for (const download of downloads) {\n if (download.bytes.byteLength > REPORT_DOWNLOAD_FILE_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"download-file-bytes\", REPORT_DOWNLOAD_FILE_BYTES_MAX, download.bytes.byteLength);\n }\n const invalid = validateDownloadPath(download.path);\n if (invalid !== undefined)\n throw siteFailure(\"download\", invalid.reason);\n const output = staticPathForDownload(download.path);\n add(binaryFile(output.posix, download.mediaType, download.bytes), output);\n }\n const problems = textFile(PROBLEMS_PATH, `${canonicalJson(site.problems)}\\n`, \"application/json; charset=utf-8\");\n add(problems, hostStaticPath(problems.path));\n // Every closed site revision carries its projections document: the same\n // canonical bytes view serves and static export writes, and the same file\n // that enters the revision content hash below.\n const projections = textFile(PROJECTIONS_PATH, `${canonicalJson(site.projections)}\\n`, \"application/json; charset=utf-8\");\n add(projections, hostStaticPath(projections.path));\n assertAssetBudgets(files, site.pages);\n const manifestValue = Object.freeze({\n format: \"niceeval.report-static/v1\",\n sampleIdentity: site.sampleIdentity,\n reportIdentity: site.reportIdentity,\n pages: pages.map((entry) => Object.freeze({\n pageId: entry.page.target.pageId,\n route: entry.page.target.route,\n path: staticPathForRoute(entry.page.target.route).posix,\n navigation: entry.navigation,\n })),\n files: [...files.keys(), MANIFEST_PATH, COMPLETE_PATH].sort(compareUtf8),\n stylesheet: REPORT_STYLESHEET_PATH,\n theme: REPORT_THEME_STYLESHEET_PATH,\n runtime: REPORT_REFRESH_RUNTIME_PATH,\n problems: PROBLEMS_PATH,\n projections: PROJECTIONS_PATH,\n });\n const manifest = textFile(MANIFEST_PATH, `${canonicalJson(manifestValue)}\\n`, \"application/json; charset=utf-8\");\n add(manifest, hostStaticPath(manifest.path));\n add(binaryFile(COMPLETE_PATH, \"application/octet-stream\", new Uint8Array()), hostStaticPath(COMPLETE_PATH));\n const conflicts = staticPathConflicts(paths);\n if (conflicts.length > 0) {\n const first = conflicts[0]!;\n throw siteFailure(\"path\", `${first.kind} collision between ${first.left.posix} and ${first.right.posix}`);\n }\n return Object.freeze([...files.values()].sort((left, right) => compareUtf8(left.path, right.path)));\n}\n/**\n * The closed parameterized Page route prefixes of this site (the instance\n * route minus its final key segment, without the leading slash). The shared\n * dialog runtime uses them to recognize same-site detail hrefs.\n */\nfunction parameterizedRoutePrefixes(site: ClosedReportSite): readonly string[] {\n const prefixes = new Set<string>();\n for (const entry of site.pages) {\n if (entry.role?.kind === \"experiment-group\")\n continue;\n if (entry.page.target.params === undefined)\n continue;\n const route = entry.page.target.route;\n const cut = route.lastIndexOf(\"/\");\n prefixes.add(route.slice(1, cut));\n }\n return Object.freeze([...prefixes].sort(compareUtf8));\n}\nfunction renderPage(site: ClosedReportSite, entry: ClosedSitePage, paramRoutes: readonly string[]): string {\n const page = entry.page;\n const output = staticPathForRoute(page.target.route).posix;\n const stylesheetHref = relativeHref(output, REPORT_STYLESHEET_PATH);\n const themeHref = relativeHref(output, REPORT_THEME_STYLESHEET_PATH);\n const runtimeHref = relativeHref(output, REPORT_REFRESH_RUNTIME_PATH);\n const titleEn = resolveLocalizedText(page.title, \"en\");\n const titleZh = resolveLocalizedText(page.title, \"zh-CN\");\n const authorHead = renderHead(page, output);\n const rendererAssets = page.assets.map((asset) => asset.kind === \"style\"\n ? `<link rel=\"stylesheet\" href=\"${escapeAttribute(relativeHref(output, asset.path))}\">`\n : asset.kind === \"script\"\n ? `<script src=\"${escapeAttribute(relativeHref(output, asset.path))}\" defer></script>`\n : \"\").join(\"\");\n const bodyEn = projection(page, \"en\");\n const bodyZh = projection(page, \"zh-CN\");\n const navigationEn = renderNavigation(site.pages, page.target.route, output, \"en\");\n const navigationZh = renderNavigation(site.pages, page.target.route, output, \"zh-CN\");\n const groupsEn = renderExperimentGroupNavigation(site.pages, page.target.route, output, \"en\");\n const groupsZh = renderExperimentGroupNavigation(site.pages, page.target.route, output, \"zh-CN\");\n const pageProblems = site.problems.filter((problem) => problem.path.length === 0 || (problem.path[0] === \"page\" && problem.path[1] === page.target.pageId));\n const problemsEn = renderProblems(pageProblems, \"en\");\n const problemsZh = renderProblems(pageProblems, \"zh-CN\");\n const paramRoutesAttr = paramRoutes.length === 0\n ? \"\"\n : ` data-niceeval-param-routes=\"${escapeAttribute(paramRoutes.join(\" \"))}\"`;\n const siteRootHref = relativeHref(output, \"index.html\");\n return `<!doctype html><html class=\"niceeval-view-document\" lang=\"en\" data-niceeval-title-en=\"${escapeAttribute(titleEn)}\" data-niceeval-title-zh-cn=\"${escapeAttribute(titleZh)}\" data-niceeval-site-root=\"${escapeAttribute(siteRootHref)}\"${paramRoutesAttr}><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><title>${escapeText(titleEn)}</title><link rel=\"stylesheet\" href=\"${escapeAttribute(stylesheetHref)}\"><link rel=\"stylesheet\" href=\"${escapeAttribute(themeHref)}\">${authorHead}${rendererAssets}<script src=\"${escapeAttribute(runtimeHref)}\" defer></script></head><body><header class=\"niceeval-view-shell\"><a class=\"niceeval-view-brand\" href=\"${escapeAttribute(NICEEVAL_BRAND_HREF)}\" target=\"_blank\" rel=\"noopener\"><span class=\"niceeval-view-mark\" aria-hidden=\"true\"></span><span>NiceEval</span></a><div class=\"niceeval-view-pages\"><nav class=\"niceeval-view-nav\" data-niceeval-locale=\"en\" aria-label=\"Report pages\">${navigationEn}</nav><nav class=\"niceeval-view-nav\" data-niceeval-locale=\"zh-CN\" aria-label=\"报告页面\" hidden>${navigationZh}</nav></div><div class=\"niceeval-view-controls\">${groupsEn}${groupsZh}<label class=\"niceeval-view-language\"><select aria-label=\"Language\" data-niceeval-locale-select><option value=\"en\">EN</option><option value=\"zh-CN\">中文</option></select></label></div></header><main class=\"niceeval-view-main\"><div class=\"niceeval-view-report-slot\" data-niceeval-locale=\"en\" data-page-id=\"${escapeAttribute(page.target.pageId)}\">${bodyEn}${problemsEn}</div><div class=\"niceeval-view-report-slot\" data-niceeval-locale=\"zh-CN\" data-page-id=\"${escapeAttribute(page.target.pageId)}\" hidden>${bodyZh}${problemsZh}</div><noscript><p class=\"niceeval-view-noscript\">This report remains readable without JavaScript; language selection is unavailable.</p></noscript></main></body></html>`;\n}\nfunction renderExperimentGroupNavigation(pages: readonly ClosedSitePage[], currentRoute: string, sourceFile: string, locale: string): string {\n const groups = pages.filter((entry) => entry.role?.kind === \"experiment-group\").sort(compareSitePages);\n if (groups.length < 2)\n return \"\";\n const options = groups.map(({ page }) => {\n const current = page.target.route === currentRoute ? \" selected\" : \"\";\n const href = relativeHref(sourceFile, staticPathForRoute(page.target.route).posix);\n const params = page.target.params as Record<string, unknown> | undefined;\n const label = typeof params?.groupId === \"string\" ? params.groupId\n : typeof params?.experimentId === \"string\" ? params.experimentId : page.target.route;\n return `<option value=\"${escapeAttribute(href)}\"${current}>${escapeText(label)}</option>`;\n });\n const links = groups.map(({ page }) => {\n const current = page.target.route === currentRoute ? \" aria-current=\\\"page\\\"\" : \"\";\n const href = relativeHref(sourceFile, staticPathForRoute(page.target.route).posix);\n const params = page.target.params as Record<string, unknown> | undefined;\n const label = typeof params?.groupId === \"string\" ? params.groupId\n : typeof params?.experimentId === \"string\" ? params.experimentId : page.target.route;\n return `<li><a href=\"${escapeAttribute(href)}\"${current}>${escapeText(label)}</a></li>`;\n });\n const hidden = locale === \"zh-CN\" ? \" hidden\" : \"\";\n const label = locale === \"zh-CN\" ? \"实验\" : \"Experiments\";\n return `<div class=\"niceeval-view-experiment\" data-niceeval-locale=\"${locale}\"${hidden}><label><span>${label}</span><select aria-label=\"${label}\" data-niceeval-experiment-select>${options.join(\"\")}</select></label><noscript><nav class=\"niceeval-view-nav\" aria-label=\"${label}\"><ul>${links.join(\"\")}</ul></nav></noscript></div>`;\n}\nfunction renderNavigation(pages: readonly ClosedSitePage[], currentRoute: string, sourceFile: string, locale: string): string {\n const groups = pages.filter((entry) => entry.role?.kind === \"experiment-group\").sort(compareSitePages);\n const groupRoutes = new Set(groups.map((entry) => entry.page.target.route));\n const selectedGroupRoute = groupRoutes.has(currentRoute) ? currentRoute : groups[0]?.page.target.route;\n const items = pages.filter((entry) => entry.navigation).sort(compareSitePages).map(({ page }) => {\n const targetRoute = page.target.route === \"/\" && selectedGroupRoute !== undefined\n ? selectedGroupRoute\n : page.target.route;\n const current = page.target.route === currentRoute || (page.target.route === \"/\" && groupRoutes.has(currentRoute))\n ? \" aria-current=\\\"page\\\"\"\n : \"\";\n const href = relativeHref(sourceFile, staticPathForRoute(targetRoute).posix);\n return `<li><a href=\"${escapeAttribute(href)}\"${current}>${escapeText(resolveLocalizedText(page.title, locale))}</a></li>`;\n });\n return `<ul>${items.join(\"\")}</ul>`;\n}\nfunction renderProblems(problems: readonly ReportProblem[], locale: string): string {\n const visible = problems.filter((problem) => !isGenericMissingSlotProblem(problem));\n if (visible.length === 0)\n return \"\";\n const title = locale === \"zh-CN\" ? \"数据说明\" : \"Data notes\";\n return `<aside class=\"niceeval-view-problems\"><h2>${title}</h2><ul>${visible.map((problem) => `<li><code>${escapeText(problem.code)}</code>${problem.summary === undefined ? \"\" : ` — ${escapeText(problem.summary)}`}</li>`).join(\"\")}</ul></aside>`;\n}\nfunction isGenericMissingSlotProblem(problem: ReportProblem): boolean {\n return problem.code === \"analysis-missing\" &&\n problem.refs.length === 0 &&\n problem.summary === \"the selected logical Slot has no input value\";\n}\nfunction projection(page: ResolvedPage, locale: string): string {\n const found = page.web.find((candidate) => candidate.locale === locale);\n if (found === undefined)\n throw siteFailure(\"render\", `Page ${page.target.pageId} lacks ${locale} web projection`);\n return found.html;\n}\nfunction renderHead(page: ResolvedPage, sourceFile: string): string {\n if (!Array.isArray(page.head))\n return \"\";\n return page.head.map((raw) => {\n if (!isRecord(raw) || typeof raw.tag !== \"string\")\n return \"\";\n const attrs = renderAttributes(raw.attrs, sourceFile, raw.tag);\n switch (raw.tag) {\n case \"meta\":\n case \"link\":\n return `<${raw.tag}${attrs}>`;\n case \"style\":\n return typeof raw.children === \"string\" ? `<style${attrs}>${raw.children}</style>` : \"\";\n case \"script\":\n return typeof raw.children === \"string\"\n ? `<script${attrs}>${raw.children}</script>`\n : `<script${attrs}></script>`;\n default:\n return \"\";\n }\n }).join(\"\");\n}\nfunction renderAttributes(value: unknown, sourceFile: string, tag: string): string {\n if (!isRecord(value))\n return \"\";\n return Object.entries(value).sort(([left], [right]) => compareUtf8(left, right)).map(([name, raw]) => {\n const normalized = (tag === \"link\" && name === \"href\") || (tag === \"script\" && name === \"src\")\n ? typeof raw === \"string\" && isLocalReference(raw) ? relativeHref(sourceFile, raw) : raw\n : raw;\n return normalized === true\n ? ` ${escapeAttribute(name)}`\n : typeof normalized === \"string\"\n ? ` ${escapeAttribute(name)}=\"${escapeAttribute(normalized)}\"`\n : \"\";\n }).join(\"\");\n}\nfunction isLocalReference(value: string): boolean {\n return !/^[a-z][a-z0-9+.-]*:/iu.test(value) && !value.startsWith(\"//\") && !value.startsWith(\"/\");\n}\nfunction addPageAsset(add: (file: ClosedSiteFile, owner: ReportStaticPath) => void, asset: ResolvedPageAsset): void {\n const path = asset.path;\n if (path.startsWith(\"/\") || path.includes(\"\\\\\") || path.split(\"/\").some((segment) => segment.length === 0 || segment === \".\" || segment === \"..\"))\n throw siteFailure(\"asset\", `invalid asset path ${path}`);\n add(binaryFile(path, asset.mediaType, asset.bytes), hostStaticPath(path));\n}\nfunction collectDownloads(pages: readonly ClosedSitePage[]): readonly ResolvedPage[\"downloads\"][number][] {\n const byPath = new Map<string, ResolvedPage[\"downloads\"][number]>();\n for (const { page } of pages) {\n for (const download of page.downloads) {\n const prior = byPath.get(download.path);\n if (prior !== undefined && (prior.mediaType !== download.mediaType || !bytesEqual(prior.bytes, download.bytes))) {\n throw siteFailure(\"download\", `two downloads produce ${download.path}`);\n }\n if (prior === undefined)\n byPath.set(download.path, download);\n }\n }\n return Object.freeze([...byPath.values()].sort((left, right) => compareUtf8(left.path, right.path)));\n}\nfunction assertAssetBudgets(files: ReadonlyMap<string, ClosedSiteFile>, pages: readonly ClosedSitePage[]): void {\n const assetsByPath = new Map<string, ResolvedPageAsset>();\n for (const { page } of pages)\n for (const asset of page.assets)\n assetsByPath.set(asset.path, asset);\n let sourceDiffBytes = 0;\n for (const asset of assetsByPath.values()) {\n if (asset.kind === \"source\" && asset.byteLength > REPORT_SOURCE_ASSET_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"source-asset-bytes\", REPORT_SOURCE_ASSET_BYTES_MAX, asset.byteLength);\n }\n if (asset.kind === \"diff\" && asset.byteLength > REPORT_DIFF_ASSET_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"diff-asset-bytes\", REPORT_DIFF_ASSET_BYTES_MAX, asset.byteLength);\n }\n if (asset.kind === \"source\" || asset.kind === \"diff\")\n sourceDiffBytes += asset.byteLength;\n }\n if (sourceDiffBytes > REPORT_SOURCE_DIFF_ASSET_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"source-diff-asset-bytes\", REPORT_SOURCE_DIFF_ASSET_BYTES_MAX, sourceDiffBytes);\n }\n const assetBytes = [...files.values()]\n .filter((file) => !file.path.endsWith(\"index.html\") && !file.path.startsWith(\"downloads/\") &&\n file.path !== PROBLEMS_PATH)\n .reduce((total, file) => total + file.bytes.byteLength, 0);\n if (assetBytes > REPORT_STATIC_ASSET_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"static-asset-bytes\", REPORT_STATIC_ASSET_BYTES_MAX, assetBytes);\n }\n}\nfunction inlineThemeStyles(theme: ThemeDefinition): string {\n return (theme.styles ?? []).map((asset) => {\n if (\"inline\" in asset)\n return asset.inline;\n const base = themeSourceBase(theme);\n if (base === undefined) {\n throw siteFailure(\"asset\", `theme asset ${asset.src} has no trusted module base`);\n }\n try {\n return readFileSync(resolve(base, asset.src), \"utf8\");\n }\n catch (cause) {\n throw siteFailure(\"asset\", `theme asset ${asset.src} could not be read: ${boundedReason(cause)}`);\n }\n }).join(\"\\n\");\n}\n/** A grouped site always opens a concrete comparison; other sites use their first navigable Page. */\nfunction defaultRouteForSite(site: ClosedReportSite): string | undefined {\n return [...site.pages]\n .filter((entry) => entry.role?.kind === \"experiment-group\")\n .sort(compareSitePages)[0]?.page.target.route\n ?? site.pages.find((entry) => entry.navigation)?.page.target.route\n ?? site.pages[0]?.page.target.route;\n}\nfunction closedProblemsFromFiles(files: readonly ClosedSiteFile[]): readonly ReportProblem[] {\n const file = files.find((candidate) => candidate.path === PROBLEMS_PATH);\n if (file === undefined || file.mediaType !== \"application/json; charset=utf-8\") {\n throw siteFailure(\"identity\", \"closed site is missing its canonical problems resource\");\n }\n let raw: unknown;\n try {\n raw = JSON.parse(decoder.decode(file.bytes));\n }\n catch (cause) {\n throw siteFailure(\"identity\", `closed problems resource is invalid JSON: ${boundedReason(cause)}`);\n }\n if (!Array.isArray(raw)) {\n throw siteFailure(\"identity\", \"closed problems resource must be an array\");\n }\n const problems = raw.map((value, index): ReportProblem => {\n if (!isRecord(value) || typeof value.code !== \"string\" || !Array.isArray(value.path) ||\n !Array.isArray(value.refs) || !value.path.every((part) => typeof part === \"string\") ||\n !value.refs.every((ref) => typeof ref === \"string\") ||\n (value.summary !== undefined && typeof value.summary !== \"string\")) {\n throw siteFailure(\"identity\", `closed problems resource has an invalid entry at index ${index}`);\n }\n return Object.freeze({\n code: value.code,\n path: Object.freeze([...value.path]),\n refs: Object.freeze([...value.refs]),\n ...(value.summary === undefined ? {} : { summary: value.summary }),\n });\n });\n const canonical = encoder.encode(`${canonicalJson(problems)}\\n`);\n if (!bytesEqual(file.bytes, canonical)) {\n throw siteFailure(\"identity\", \"closed problems resource is not canonical\");\n }\n return Object.freeze(problems);\n}\nfunction siteRevisionIdentity(input: {\n readonly sampleIdentity: string;\n readonly reportIdentity: string;\n readonly files: readonly ClosedSiteFile[];\n readonly defaultRoute?: string;\n readonly problems: readonly ReportProblem[];\n}): string {\n const hash = createHash(\"sha256\");\n hash.update(canonicalJson({\n format: \"niceeval.report-site-revision/v1\",\n renderer: REPORT_STATIC_RENDERER,\n sampleIdentity: input.sampleIdentity,\n reportIdentity: input.reportIdentity,\n ...(input.defaultRoute === undefined ? {} : { defaultRoute: input.defaultRoute }),\n problems: input.problems,\n }));\n hash.update(\"\\0\");\n for (const file of input.files) {\n hash.update(file.path);\n hash.update(\"\\0\");\n hash.update(file.mediaType);\n hash.update(\"\\0\");\n hash.update(file.bytes);\n hash.update(\"\\0\");\n }\n return hash.digest(\"hex\");\n}\nfunction relativeHref(sourceFile: string, targetFile: string): string {\n const source = sourceFile.split(\"/\");\n source.pop();\n const target = targetFile.split(\"/\");\n let common = 0;\n while (common < source.length && common < target.length && source[common] === target[common])\n common += 1;\n const value = [...source.slice(common).map(() => \"..\"), ...target.slice(common)].join(\"/\");\n return value || \"./\";\n}\nfunction compareSitePages(left: ClosedSitePage, right: ClosedSitePage): number {\n return compareUtf8(left.page.target.route, right.page.target.route) ||\n compareUtf8(left.page.target.pageId, right.page.target.pageId);\n}\nfunction textFile(path: string, text: string, mediaType: string): ClosedSiteFile {\n return Object.freeze({ path, mediaType, bytes: encoder.encode(text) });\n}\nfunction binaryFile(path: string, mediaType: string, bytes: Uint8Array): ClosedSiteFile {\n return Object.freeze({ path, mediaType, bytes: new Uint8Array(bytes) });\n}\nfunction bytesEqual(left: Uint8Array, right: Uint8Array): boolean {\n return left.byteLength === right.byteLength && left.every((byte, index) => byte === right[index]);\n}\nfunction escapeText(value: string): string {\n return value.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n}\nfunction escapeAttribute(value: string): string {\n return escapeText(value).replaceAll('\"', \""\").replaceAll(\"'\", \"'\");\n}\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction canonicalJson(value: unknown): string {\n if (value === null)\n return \"null\";\n if (typeof value === \"string\" || typeof value === \"boolean\")\n return JSON.stringify(value);\n if (typeof value === \"number\") {\n if (!Number.isFinite(value))\n throw siteFailure(\"identity\", \"canonical JSON rejects non-finite numbers\");\n return JSON.stringify(Object.is(value, -0) ? 0 : value);\n }\n if (Array.isArray(value))\n return `[${value.map(canonicalJson).join(\",\")}]`;\n if (isRecord(value)) {\n return `{${Object.entries(value).filter(([, entry]) => entry !== undefined)\n .sort(([left], [right]) => compareUtf8(left, right))\n .map(([key, entry]) => `${JSON.stringify(key)}:${canonicalJson(entry)}`).join(\",\")}}`;\n }\n throw siteFailure(\"identity\", `canonical JSON rejects ${typeof value}`);\n}\nfunction siteFailure(operation: ReportSiteBuildFailure[\"operation\"], reason: string): ReportSiteBuildFailure {\n return Object.freeze({ code: \"report-site-build-failed\" as const, operation, reason });\n}\nfunction isSiteBuildFailure(value: unknown): value is ReportSiteBuildFailure {\n return isRecord(value) && value.code === \"report-site-build-failed\" && typeof value.operation === \"string\" &&\n typeof value.reason === \"string\";\n}\nfunction isBudgetError(value: unknown): value is ReportBuildBudgetExceeded {\n return isRecord(value) && value.code === \"report-build-budget-exceeded\";\n}\nfunction boundedReason(cause: unknown): string {\n const raw = cause instanceof Error ? cause.message : String(cause);\n return raw.replace(/[\\u0000-\\u001f\\u007f-\\u009f]/g, \" \").slice(0, 512).trim() || \"site build failed\";\n}\n"]}
|
|
1
|
+
{"version":3,"file":"static.js","sourceRoot":"","sources":["static.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { Context, Effect } from \"effect\";\nimport { REPORT_BUILD_RSS_BYTES_MAX, REPORT_BUILD_TIME_MS_MAX, REPORT_DIFF_ASSET_BYTES_MAX, REPORT_DOWNLOAD_FILE_BYTES_MAX, REPORT_DOWNLOAD_FILES_MAX, REPORT_FRAGMENT_BYTES_MAX, REPORT_SOURCE_ASSET_BYTES_MAX, REPORT_SOURCE_DIFF_ASSET_BYTES_MAX, REPORT_SHELL_FRAGMENT_BYTES_MAX, REPORT_STATIC_ASSET_BYTES_MAX, closedSiteRevisionData, compareUtf8, makeClosedSiteRevision, reportBuildBudgetExceeded, type ClosedSiteFile, type ClosedSiteRevision, type ReportBuildBudgetExceeded, } from \"../execution/model.ts\";\nimport { hostStaticPath, staticPathConflicts, staticPathForDownload, validateDownloadPath, validateReportRoute, type ReportStaticPath, } from \"../execution/paths.ts\";\nimport type { ReportProblem } from \"../execution/machine.ts\";\nimport { resolveLocalizedText } from \"../model/locale.ts\";\nimport type { ResolvedPage, ResolvedPageAsset } from \"../runtime/resolved-page.ts\";\nimport { basalt, themeSourceBase, themeStylesheet, type ThemeDefinition, } from \"../theme.ts\";\nimport type { ClosedReportSite, ClosedSitePage } from \"./execute.ts\";\nimport { REPORT_STYLESHEET_PATH, } from \"./site-assets.ts\";\nexport interface ReportHostOutputPath {\n readonly value: string;\n}\nexport interface ReportFileSystemError {\n readonly code: \"report-export-write-failed\";\n readonly operation: string;\n}\nexport interface ReportExportTargetExists {\n readonly code: \"report-export-target-exists\";\n}\nexport type ReportFileSystemFailure = ReportFileSystemError | ReportExportTargetExists;\nexport interface ReportFileSystemService {\n readonly prepareOutput: (out: string) => Effect.Effect<void, ReportFileSystemFailure>;\n readonly writeFile: (input: {\n readonly out: string;\n readonly path: ReportHostOutputPath;\n readonly bytes: Uint8Array;\n }) => Effect.Effect<void, ReportFileSystemFailure>;\n readonly writeCompleteMarker: (out: string) => Effect.Effect<void, ReportFileSystemFailure>;\n readonly syncDirectory: (out: string) => Effect.Effect<void, ReportFileSystemFailure>;\n}\nexport class ReportFileSystem extends Context.Tag(\"@niceeval/report/ReportFileSystem\")<ReportFileSystem, ReportFileSystemService>() {\n}\nexport interface ReportStaticExportReceipt {\n readonly out: string;\n /** Does not include the zero-byte publication marker. */\n readonly filesWritten: number;\n}\nexport interface ReportSiteBuildFailure {\n readonly code: \"report-site-build-failed\";\n readonly operation: \"render\" | \"identity\" | \"path\" | \"asset\" | \"download\";\n readonly reason: string;\n}\nexport type ReportSiteBuildError = ReportSiteBuildFailure | ReportBuildBudgetExceeded;\nexport type ReportExportError = ReportFileSystemFailure | ReportSiteBuildFailure;\n/** The one Host-owned static resource path for a closed Theme stylesheet. */\nexport const REPORT_THEME_STYLESHEET_PATH = \"_niceeval/theme.css\";\n/** The Host-owned renderer identity carried by every static revision. */\nexport const REPORT_APP_RENDERER = \"niceeval.report-spa/v1\" as const;\nconst MANIFEST_PATH = \"_niceeval/manifest.json\";\nconst PROBLEMS_PATH = \"_niceeval/problems.json\";\nconst PROJECTIONS_PATH = \"_niceeval/data/projections.json\";\nconst REPORT_APP_PATH = \"_niceeval/app.js\";\nconst REPORT_FRAGMENT_ROOT = \"_niceeval/fragments\";\nconst COMPLETE_PATH = \"_niceeval/complete\";\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\nconst PRODUCT_STYLESHEET = readFileSync(new URL(\"../assets/styles.css\", __niceevalImportMetaUrl), \"utf8\");\nconst PRODUCT_APP = readFileSync(new URL(\"../client-dist/app.js\", __niceevalImportMetaUrl), \"utf8\");\n/** Forms one byte-complete revision; neither view nor static renders afterward. */\nexport function buildSiteRevision(input: {\n readonly site: ClosedReportSite;\n readonly theme?: ThemeDefinition;\n}): Effect.Effect<ClosedSiteRevision, ReportSiteBuildError> {\n return Effect.try({\n try: () => {\n const files = buildSiteFiles(input.site, input.theme ?? input.site.theme ?? basalt);\n assertFinalBuildBudgets(input.site.startedAtMs, input.site.baselineRssBytes);\n return signClosedSiteRevision({\n sampleIdentity: input.site.sampleIdentity,\n reportIdentity: input.site.reportIdentity,\n files,\n });\n },\n catch: (cause): ReportSiteBuildError => isBudgetError(cause)\n ? cause\n : siteFailure(isSiteBuildFailure(cause) ? cause.operation : \"render\", isSiteBuildFailure(cause) ? cause.reason : boundedReason(cause)),\n });\n}\n/**\n * Host-only final signer for a byte-complete static site. It derives the\n * problem table from the closed `_niceeval/problems.json` resource, so callers\n * which retain only closed bytes never need to retain revision problem values.\n */\nexport function signClosedSiteRevision(input: {\n readonly sampleIdentity: string;\n readonly reportIdentity: string;\n readonly files: readonly ClosedSiteFile[];\n}): ClosedSiteRevision {\n const files = Object.freeze([...input.files].sort((left, right) => compareUtf8(left.path, right.path)));\n const problems = closedProblemsFromFiles(files);\n return makeClosedSiteRevision({\n contentHash: siteRevisionIdentity({\n sampleIdentity: input.sampleIdentity,\n reportIdentity: input.reportIdentity,\n files,\n problems,\n }),\n files,\n problems,\n });\n}\n/**\n * Closes exactly the stylesheet bytes used by the static builder. Watch cache\n * code may request these bytes but must not reproduce Theme asset resolution.\n */\nexport function closeStaticThemeStylesheet(theme: ThemeDefinition): Uint8Array {\n return encoder.encode(`${themeStylesheet(theme)}\\n${inlineThemeStyles(theme)}\\n`);\n}\nfunction assertFinalBuildBudgets(startedAtMs: number, baselineRssBytes: number, target?: {\n readonly pageId: string;\n readonly route: string;\n}): void {\n const elapsed = Date.now() - startedAtMs;\n if (elapsed > REPORT_BUILD_TIME_MS_MAX) {\n throw reportBuildBudgetExceeded(\"build-time\", REPORT_BUILD_TIME_MS_MAX, elapsed);\n }\n const rssGrowth = Math.max(0, process.memoryUsage().rss - baselineRssBytes);\n if (rssGrowth > REPORT_BUILD_RSS_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"build-rss\", REPORT_BUILD_RSS_BYTES_MAX, rssGrowth, target);\n }\n}\n/** Writes only the immutable revision mapping, then publishes its marker last. */\nexport function exportStaticReport(input: {\n readonly revision: ClosedSiteRevision;\n readonly out: string;\n}): Effect.Effect<ReportStaticExportReceipt, ReportExportError, ReportFileSystem> {\n return Effect.gen(function* () {\n const files = closedSiteRevisionData(input.revision).files;\n const fileSystem = yield* ReportFileSystem;\n yield* fileSystem.prepareOutput(input.out);\n let written = 0;\n for (const file of files) {\n if (file.path === COMPLETE_PATH)\n continue;\n yield* fileSystem.writeFile({\n out: input.out,\n path: Object.freeze({ value: file.path }),\n bytes: file.bytes,\n });\n written += 1;\n }\n yield* fileSystem.writeCompleteMarker(input.out);\n yield* fileSystem.syncDirectory(input.out);\n return Object.freeze({ out: input.out, filesWritten: written });\n });\n}\nfunction buildSiteFiles(site: ClosedReportSite, theme: ThemeDefinition): readonly ClosedSiteFile[] {\n const files = new Map<string, ClosedSiteFile>();\n const paths: ReportStaticPath[] = [];\n const add = (file: ClosedSiteFile, owner: ReportStaticPath): void => {\n const prior = files.get(file.path);\n if (prior !== undefined) {\n if (prior.mediaType === file.mediaType && bytesEqual(prior.bytes, file.bytes))\n return;\n throw siteFailure(\"path\", `two site resources produce ${file.path}`);\n }\n files.set(file.path, file);\n paths.push(owner);\n };\n const stylesheet = textFile(REPORT_STYLESHEET_PATH, PRODUCT_STYLESHEET, \"text/css; charset=utf-8\");\n const themeFile = binaryFile(REPORT_THEME_STYLESHEET_PATH, \"text/css; charset=utf-8\", closeStaticThemeStylesheet(theme));\n const app = textFile(REPORT_APP_PATH, PRODUCT_APP, \"text/javascript; charset=utf-8\");\n add(stylesheet, hostStaticPath(stylesheet.path));\n add(themeFile, hostStaticPath(themeFile.path));\n add(app, hostStaticPath(app.path));\n const pages = [...site.pages].sort(compareSitePages);\n let shellFragmentBytes = 0;\n const fragmentFiles = new Map<string, string>();\n for (const entry of pages) {\n assertFinalBuildBudgets(site.startedAtMs, site.baselineRssBytes, entry.page.target);\n const routeIssue = validateReportRoute(entry.page.target.route);\n if (routeIssue !== undefined || entry.page.target.route === \"/_niceeval\" ||\n entry.page.target.route.startsWith(\"/_niceeval/\")) {\n throw siteFailure(\"path\", routeIssue?.reason ?? \"author routes cannot occupy /_niceeval\");\n }\n const fragmentPath = fragmentPathForRoute(entry.page.target.route);\n const fragment = textFile(fragmentPath, renderFragment(site, entry), \"application/json; charset=utf-8\");\n if (fragment.bytes.byteLength > REPORT_FRAGMENT_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"fragment-bytes\", REPORT_FRAGMENT_BYTES_MAX, fragment.bytes.byteLength, { pageId: entry.page.target.pageId, route: entry.page.target.route });\n }\n shellFragmentBytes += fragment.bytes.byteLength;\n if (shellFragmentBytes > REPORT_SHELL_FRAGMENT_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"shell-fragment-bytes\", REPORT_SHELL_FRAGMENT_BYTES_MAX, shellFragmentBytes);\n }\n add(fragment, hostStaticPath(fragment.path));\n fragmentFiles.set(entry.page.target.route, fragment.path);\n for (const asset of entry.page.assets)\n addPageAsset(add, asset);\n }\n const shell = textFile(\"index.html\", renderShell(site, pages), \"text/html; charset=utf-8\");\n shellFragmentBytes += shell.bytes.byteLength;\n if (shellFragmentBytes > REPORT_SHELL_FRAGMENT_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"shell-fragment-bytes\", REPORT_SHELL_FRAGMENT_BYTES_MAX, shellFragmentBytes);\n }\n add(shell, hostStaticPath(\"index.html\"));\n const downloads = collectDownloads(site.pages);\n if (downloads.length > REPORT_DOWNLOAD_FILES_MAX) {\n throw reportBuildBudgetExceeded(\"download-files\", REPORT_DOWNLOAD_FILES_MAX, downloads.length);\n }\n for (const download of downloads) {\n if (download.bytes.byteLength > REPORT_DOWNLOAD_FILE_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"download-file-bytes\", REPORT_DOWNLOAD_FILE_BYTES_MAX, download.bytes.byteLength);\n }\n const invalid = validateDownloadPath(download.path);\n if (invalid !== undefined)\n throw siteFailure(\"download\", invalid.reason);\n const output = staticPathForDownload(download.path);\n add(binaryFile(output.posix, download.mediaType, download.bytes), output);\n }\n const problems = textFile(PROBLEMS_PATH, `${canonicalJson(site.problems)}\\n`, \"application/json; charset=utf-8\");\n add(problems, hostStaticPath(problems.path));\n // Every closed site revision carries its projections document: the same\n // canonical bytes view serves and static export writes, and the same file\n // that enters the revision content hash below.\n const projections = textFile(PROJECTIONS_PATH, `${canonicalJson(site.projections)}\\n`, \"application/json; charset=utf-8\");\n add(projections, hostStaticPath(projections.path));\n assertAssetBudgets(files, site.pages);\n const landing = landingPage(pages);\n const manifestValue = Object.freeze({\n format: \"niceeval.report-static/v2\",\n sampleIdentity: site.sampleIdentity,\n reportIdentity: site.reportIdentity,\n title: {\n en: resolveLocalizedText(site.title, \"en\"),\n \"zh-CN\": resolveLocalizedText(site.title, \"zh-CN\"),\n },\n defaultRoute: landing.page.target.route,\n pages: pages.map((entry) => Object.freeze({\n pageId: entry.page.target.pageId,\n route: entry.page.target.route,\n fragment: fragmentFiles.get(entry.page.target.route)!,\n title: {\n en: resolveLocalizedText(entry.page.title, \"en\"),\n \"zh-CN\": resolveLocalizedText(entry.page.title, \"zh-CN\"),\n },\n navigation: entry.navigation,\n presentation: entry.presentation,\n })),\n files: [...files.keys(), MANIFEST_PATH, COMPLETE_PATH].sort(compareUtf8),\n stylesheet: REPORT_STYLESHEET_PATH,\n theme: REPORT_THEME_STYLESHEET_PATH,\n app: REPORT_APP_PATH,\n problems: PROBLEMS_PATH,\n projections: PROJECTIONS_PATH,\n });\n const manifest = textFile(MANIFEST_PATH, `${canonicalJson(manifestValue)}\\n`, \"application/json; charset=utf-8\");\n add(manifest, hostStaticPath(manifest.path));\n add(binaryFile(COMPLETE_PATH, \"application/octet-stream\", new Uint8Array()), hostStaticPath(COMPLETE_PATH));\n const conflicts = staticPathConflicts(paths);\n if (conflicts.length > 0) {\n const first = conflicts[0]!;\n throw siteFailure(\"path\", `${first.kind} collision between ${first.left.posix} and ${first.right.posix}`);\n }\n return Object.freeze([...files.values()].sort((left, right) => compareUtf8(left.path, right.path)));\n}\nfunction fragmentPathForRoute(route: string): string {\n return route === \"/\" ? `${REPORT_FRAGMENT_ROOT}/root.json` : `${REPORT_FRAGMENT_ROOT}${route}.json`;\n}\nfunction renderFragment(site: ClosedReportSite, entry: ClosedSitePage): string {\n const page = entry.page;\n const pageProblems = site.problems.filter((problem) => problem.path.length === 0 || (problem.path[0] === \"page\" && problem.path[1] === page.target.pageId));\n return `${canonicalJson({\n title: {\n en: resolveLocalizedText(page.title, \"en\"),\n \"zh-CN\": resolveLocalizedText(page.title, \"zh-CN\"),\n },\n html: {\n en: `${projection(page, \"en\")}${renderProblems(pageProblems, \"en\")}`,\n \"zh-CN\": `${projection(page, \"zh-CN\")}${renderProblems(pageProblems, \"zh-CN\")}`,\n },\n })}\\n`;\n}\nfunction renderShell(site: ClosedReportSite, pages: readonly ClosedSitePage[]): string {\n const first = pages[0]!;\n const rendererAssets = [...new Map(pages.flatMap((entry) => entry.page.assets).map((asset) => [asset.path, asset])).values()]\n .map((asset) => asset.kind === \"style\"\n ? `<link rel=\"stylesheet\" href=\"${escapeAttribute(asset.path)}\">`\n : asset.kind === \"script\"\n ? `<script src=\"${escapeAttribute(asset.path)}\" defer></script>`\n : \"\").join(\"\");\n return `<!doctype html><html class=\"niceeval-view-document\" lang=\"en\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><title>${escapeText(resolveLocalizedText(site.title, \"en\"))}</title><noscript><style>#root{display:none!important}</style></noscript><link rel=\"stylesheet\" href=\"${REPORT_STYLESHEET_PATH}\"><link rel=\"stylesheet\" href=\"${REPORT_THEME_STYLESHEET_PATH}\">${renderHead(first.page, \"index.html\")}${rendererAssets}<script src=\"${REPORT_APP_PATH}\" defer></script></head><body><noscript><main class=\"niceeval-view-js-required\" role=\"alert\"><h1>JavaScript required</h1><p>Enable JavaScript to view this NiceEval report.</p></main></noscript><div id=\"root\"></div></body></html>`;\n}\nfunction landingPage(pages: readonly ClosedSitePage[]): ClosedSitePage {\n const landing = pages.find((entry) => entry.presentation === \"page\");\n if (landing === undefined)\n throw siteFailure(\"render\", \"a report site requires at least one page presentation\");\n return landing;\n}\nfunction renderProblems(problems: readonly ReportProblem[], locale: string): string {\n const visible = problems.filter((problem) => !isGenericMissingSlotProblem(problem));\n if (visible.length === 0)\n return \"\";\n const title = locale === \"zh-CN\" ? \"数据说明\" : \"Data notes\";\n return `<aside class=\"niceeval-view-problems\"><h2>${title}</h2><ul>${visible.map((problem) => `<li><code>${escapeText(problem.code)}</code>${problem.summary === undefined ? \"\" : ` — ${escapeText(problem.summary)}`}</li>`).join(\"\")}</ul></aside>`;\n}\nfunction isGenericMissingSlotProblem(problem: ReportProblem): boolean {\n return problem.code === \"analysis-missing\" &&\n problem.refs.length === 0 &&\n problem.summary === \"the selected logical Slot has no input value\";\n}\nfunction projection(page: ResolvedPage, locale: string): string {\n const found = page.web.find((candidate) => candidate.locale === locale);\n if (found === undefined)\n throw siteFailure(\"render\", `Page ${page.target.pageId} lacks ${locale} web projection`);\n return found.html;\n}\nfunction renderHead(page: ResolvedPage, sourceFile: string): string {\n if (!Array.isArray(page.head))\n return \"\";\n return page.head.map((raw) => {\n if (!isRecord(raw) || typeof raw.tag !== \"string\")\n return \"\";\n const attrs = renderAttributes(raw.attrs, sourceFile, raw.tag);\n switch (raw.tag) {\n case \"meta\":\n case \"link\":\n return `<${raw.tag}${attrs}>`;\n case \"style\":\n return typeof raw.children === \"string\" ? `<style${attrs}>${raw.children}</style>` : \"\";\n case \"script\":\n return typeof raw.children === \"string\"\n ? `<script${attrs}>${raw.children}</script>`\n : `<script${attrs}></script>`;\n default:\n return \"\";\n }\n }).join(\"\");\n}\nfunction renderAttributes(value: unknown, sourceFile: string, tag: string): string {\n if (!isRecord(value))\n return \"\";\n return Object.entries(value).sort(([left], [right]) => compareUtf8(left, right)).map(([name, raw]) => {\n const normalized = (tag === \"link\" && name === \"href\") || (tag === \"script\" && name === \"src\")\n ? typeof raw === \"string\" && isLocalReference(raw) ? relativeHref(sourceFile, raw) : raw\n : raw;\n return normalized === true\n ? ` ${escapeAttribute(name)}`\n : typeof normalized === \"string\"\n ? ` ${escapeAttribute(name)}=\"${escapeAttribute(normalized)}\"`\n : \"\";\n }).join(\"\");\n}\nfunction isLocalReference(value: string): boolean {\n return !/^[a-z][a-z0-9+.-]*:/iu.test(value) && !value.startsWith(\"//\") && !value.startsWith(\"/\");\n}\nfunction addPageAsset(add: (file: ClosedSiteFile, owner: ReportStaticPath) => void, asset: ResolvedPageAsset): void {\n const path = asset.path;\n if (path.startsWith(\"/\") || path.includes(\"\\\\\") || path.split(\"/\").some((segment) => segment.length === 0 || segment === \".\" || segment === \"..\"))\n throw siteFailure(\"asset\", `invalid asset path ${path}`);\n add(binaryFile(path, asset.mediaType, asset.bytes), hostStaticPath(path));\n}\nfunction collectDownloads(pages: readonly ClosedSitePage[]): readonly ResolvedPage[\"downloads\"][number][] {\n const byPath = new Map<string, ResolvedPage[\"downloads\"][number]>();\n for (const { page } of pages) {\n for (const download of page.downloads) {\n const prior = byPath.get(download.path);\n if (prior !== undefined && (prior.mediaType !== download.mediaType || !bytesEqual(prior.bytes, download.bytes))) {\n throw siteFailure(\"download\", `two downloads produce ${download.path}`);\n }\n if (prior === undefined)\n byPath.set(download.path, download);\n }\n }\n return Object.freeze([...byPath.values()].sort((left, right) => compareUtf8(left.path, right.path)));\n}\nfunction assertAssetBudgets(files: ReadonlyMap<string, ClosedSiteFile>, pages: readonly ClosedSitePage[]): void {\n const assetsByPath = new Map<string, ResolvedPageAsset>();\n for (const { page } of pages)\n for (const asset of page.assets)\n assetsByPath.set(asset.path, asset);\n let sourceDiffBytes = 0;\n for (const asset of assetsByPath.values()) {\n if (asset.kind === \"source\" && asset.byteLength > REPORT_SOURCE_ASSET_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"source-asset-bytes\", REPORT_SOURCE_ASSET_BYTES_MAX, asset.byteLength);\n }\n if (asset.kind === \"diff\" && asset.byteLength > REPORT_DIFF_ASSET_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"diff-asset-bytes\", REPORT_DIFF_ASSET_BYTES_MAX, asset.byteLength);\n }\n if (asset.kind === \"source\" || asset.kind === \"diff\")\n sourceDiffBytes += asset.byteLength;\n }\n if (sourceDiffBytes > REPORT_SOURCE_DIFF_ASSET_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"source-diff-asset-bytes\", REPORT_SOURCE_DIFF_ASSET_BYTES_MAX, sourceDiffBytes);\n }\n const assetBytes = [...files.values()]\n .filter((file) => !file.path.endsWith(\"index.html\") && !file.path.startsWith(\"downloads/\") &&\n file.path !== PROBLEMS_PATH)\n .reduce((total, file) => total + file.bytes.byteLength, 0);\n if (assetBytes > REPORT_STATIC_ASSET_BYTES_MAX) {\n throw reportBuildBudgetExceeded(\"static-asset-bytes\", REPORT_STATIC_ASSET_BYTES_MAX, assetBytes);\n }\n}\nfunction inlineThemeStyles(theme: ThemeDefinition): string {\n return (theme.styles ?? []).map((asset) => {\n if (\"inline\" in asset)\n return asset.inline;\n const base = themeSourceBase(theme);\n if (base === undefined) {\n throw siteFailure(\"asset\", `theme asset ${asset.src} has no trusted module base`);\n }\n try {\n return readFileSync(resolve(base, asset.src), \"utf8\");\n }\n catch (cause) {\n throw siteFailure(\"asset\", `theme asset ${asset.src} could not be read: ${boundedReason(cause)}`);\n }\n }).join(\"\\n\");\n}\nfunction closedProblemsFromFiles(files: readonly ClosedSiteFile[]): readonly ReportProblem[] {\n const file = files.find((candidate) => candidate.path === PROBLEMS_PATH);\n if (file === undefined || file.mediaType !== \"application/json; charset=utf-8\") {\n throw siteFailure(\"identity\", \"closed site is missing its canonical problems resource\");\n }\n let raw: unknown;\n try {\n raw = JSON.parse(decoder.decode(file.bytes));\n }\n catch (cause) {\n throw siteFailure(\"identity\", `closed problems resource is invalid JSON: ${boundedReason(cause)}`);\n }\n if (!Array.isArray(raw)) {\n throw siteFailure(\"identity\", \"closed problems resource must be an array\");\n }\n const problems = raw.map((value, index): ReportProblem => {\n if (!isRecord(value) || typeof value.code !== \"string\" || !Array.isArray(value.path) ||\n !Array.isArray(value.refs) || !value.path.every((part) => typeof part === \"string\") ||\n !value.refs.every((ref) => typeof ref === \"string\") ||\n (value.summary !== undefined && typeof value.summary !== \"string\")) {\n throw siteFailure(\"identity\", `closed problems resource has an invalid entry at index ${index}`);\n }\n return Object.freeze({\n code: value.code,\n path: Object.freeze([...value.path]),\n refs: Object.freeze([...value.refs]),\n ...(value.summary === undefined ? {} : { summary: value.summary }),\n });\n });\n const canonical = encoder.encode(`${canonicalJson(problems)}\\n`);\n if (!bytesEqual(file.bytes, canonical)) {\n throw siteFailure(\"identity\", \"closed problems resource is not canonical\");\n }\n return Object.freeze(problems);\n}\nfunction siteRevisionIdentity(input: {\n readonly sampleIdentity: string;\n readonly reportIdentity: string;\n readonly files: readonly ClosedSiteFile[];\n readonly problems: readonly ReportProblem[];\n}): string {\n const hash = createHash(\"sha256\");\n hash.update(canonicalJson({\n format: \"niceeval.report-site-revision/v2\",\n renderer: REPORT_APP_RENDERER,\n sampleIdentity: input.sampleIdentity,\n reportIdentity: input.reportIdentity,\n problems: input.problems,\n }));\n hash.update(\"\\0\");\n for (const file of input.files) {\n hash.update(file.path);\n hash.update(\"\\0\");\n hash.update(file.mediaType);\n hash.update(\"\\0\");\n hash.update(file.bytes);\n hash.update(\"\\0\");\n }\n return hash.digest(\"hex\");\n}\nfunction relativeHref(sourceFile: string, targetFile: string): string {\n const source = sourceFile.split(\"/\");\n source.pop();\n const target = targetFile.split(\"/\");\n let common = 0;\n while (common < source.length && common < target.length && source[common] === target[common])\n common += 1;\n const value = [...source.slice(common).map(() => \"..\"), ...target.slice(common)].join(\"/\");\n return value || \"./\";\n}\nfunction compareSitePages(left: ClosedSitePage, right: ClosedSitePage): number {\n return compareUtf8(left.page.target.route, right.page.target.route) ||\n compareUtf8(left.page.target.pageId, right.page.target.pageId);\n}\nfunction textFile(path: string, text: string, mediaType: string): ClosedSiteFile {\n return Object.freeze({ path, mediaType, bytes: encoder.encode(text) });\n}\nfunction binaryFile(path: string, mediaType: string, bytes: Uint8Array): ClosedSiteFile {\n return Object.freeze({ path, mediaType, bytes: new Uint8Array(bytes) });\n}\nfunction bytesEqual(left: Uint8Array, right: Uint8Array): boolean {\n return left.byteLength === right.byteLength && left.every((byte, index) => byte === right[index]);\n}\nfunction escapeText(value: string): string {\n return value.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n}\nfunction escapeAttribute(value: string): string {\n return escapeText(value).replaceAll('\"', \""\").replaceAll(\"'\", \"'\");\n}\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction canonicalJson(value: unknown): string {\n if (value === null)\n return \"null\";\n if (typeof value === \"string\" || typeof value === \"boolean\")\n return JSON.stringify(value);\n if (typeof value === \"number\") {\n if (!Number.isFinite(value))\n throw siteFailure(\"identity\", \"canonical JSON rejects non-finite numbers\");\n return JSON.stringify(Object.is(value, -0) ? 0 : value);\n }\n if (Array.isArray(value))\n return `[${value.map(canonicalJson).join(\",\")}]`;\n if (isRecord(value)) {\n return `{${Object.entries(value).filter(([, entry]) => entry !== undefined)\n .sort(([left], [right]) => compareUtf8(left, right))\n .map(([key, entry]) => `${JSON.stringify(key)}:${canonicalJson(entry)}`).join(\",\")}}`;\n }\n throw siteFailure(\"identity\", `canonical JSON rejects ${typeof value}`);\n}\nfunction siteFailure(operation: ReportSiteBuildFailure[\"operation\"], reason: string): ReportSiteBuildFailure {\n return Object.freeze({ code: \"report-site-build-failed\" as const, operation, reason });\n}\nfunction isSiteBuildFailure(value: unknown): value is ReportSiteBuildFailure {\n return isRecord(value) && value.code === \"report-site-build-failed\" && typeof value.operation === \"string\" &&\n typeof value.reason === \"string\";\n}\nfunction isBudgetError(value: unknown): value is ReportBuildBudgetExceeded {\n return isRecord(value) && value.code === \"report-build-budget-exceeded\";\n}\nfunction boundedReason(cause: unknown): string {\n const raw = cause instanceof Error ? cause.message : String(cause);\n return raw.replace(/[\\u0000-\\u001f\\u007f-\\u009f]/g, \" \").slice(0, 512).trim() || \"site build failed\";\n}\n"]}
|
|
@@ -41,7 +41,7 @@ export type ReportExportError = ReportFileSystemFailure | ReportSiteBuildFailure
|
|
|
41
41
|
/** The one Host-owned static resource path for a closed Theme stylesheet. */
|
|
42
42
|
export declare const REPORT_THEME_STYLESHEET_PATH = "_niceeval/theme.css";
|
|
43
43
|
/** The Host-owned renderer identity carried by every static revision. */
|
|
44
|
-
export declare const
|
|
44
|
+
export declare const REPORT_APP_RENDERER: "niceeval.report-spa/v1";
|
|
45
45
|
/** Forms one byte-complete revision; neither view nor static renders afterward. */
|
|
46
46
|
export declare function buildSiteRevision(input: {
|
|
47
47
|
readonly site: ClosedReportSite;
|
|
@@ -56,8 +56,6 @@ export declare function signClosedSiteRevision(input: {
|
|
|
56
56
|
readonly sampleIdentity: string;
|
|
57
57
|
readonly reportIdentity: string;
|
|
58
58
|
readonly files: readonly ClosedSiteFile[];
|
|
59
|
-
readonly routes: readonly string[];
|
|
60
|
-
readonly defaultRoute?: string;
|
|
61
59
|
}): ClosedSiteRevision;
|
|
62
60
|
/**
|
|
63
61
|
* Closes exactly the stylesheet bytes used by the static builder. Watch cache
|
|
@@ -41,7 +41,7 @@ export type ReportExportError = ReportFileSystemFailure | ReportSiteBuildFailure
|
|
|
41
41
|
/** The one Host-owned static resource path for a closed Theme stylesheet. */
|
|
42
42
|
export declare const REPORT_THEME_STYLESHEET_PATH = "_niceeval/theme.css";
|
|
43
43
|
/** The Host-owned renderer identity carried by every static revision. */
|
|
44
|
-
export declare const
|
|
44
|
+
export declare const REPORT_APP_RENDERER: "niceeval.report-spa/v1";
|
|
45
45
|
/** Forms one byte-complete revision; neither view nor static renders afterward. */
|
|
46
46
|
export declare function buildSiteRevision(input: {
|
|
47
47
|
readonly site: ClosedReportSite;
|
|
@@ -56,8 +56,6 @@ export declare function signClosedSiteRevision(input: {
|
|
|
56
56
|
readonly sampleIdentity: string;
|
|
57
57
|
readonly reportIdentity: string;
|
|
58
58
|
readonly files: readonly ClosedSiteFile[];
|
|
59
|
-
readonly routes: readonly string[];
|
|
60
|
-
readonly defaultRoute?: string;
|
|
61
59
|
}): ClosedSiteRevision;
|
|
62
60
|
/**
|
|
63
61
|
* Closes exactly the stylesheet bytes used by the static builder. Watch cache
|
|
@@ -41,7 +41,7 @@ export type ReportExportError = ReportFileSystemFailure | ReportSiteBuildFailure
|
|
|
41
41
|
/** The one Host-owned static resource path for a closed Theme stylesheet. */
|
|
42
42
|
export declare const REPORT_THEME_STYLESHEET_PATH = "_niceeval/theme.css";
|
|
43
43
|
/** The Host-owned renderer identity carried by every static revision. */
|
|
44
|
-
export declare const
|
|
44
|
+
export declare const REPORT_APP_RENDERER: "niceeval.report-spa/v1";
|
|
45
45
|
/** Forms one byte-complete revision; neither view nor static renders afterward. */
|
|
46
46
|
export declare function buildSiteRevision(input: {
|
|
47
47
|
readonly site: ClosedReportSite;
|
|
@@ -56,8 +56,6 @@ export declare function signClosedSiteRevision(input: {
|
|
|
56
56
|
readonly sampleIdentity: string;
|
|
57
57
|
readonly reportIdentity: string;
|
|
58
58
|
readonly files: readonly ClosedSiteFile[];
|
|
59
|
-
readonly routes: readonly string[];
|
|
60
|
-
readonly defaultRoute?: string;
|
|
61
59
|
}): ClosedSiteRevision;
|
|
62
60
|
/**
|
|
63
61
|
* Closes exactly the stylesheet bytes used by the static builder. Watch cache
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRequire as __niceevalCreateRequire } from "node:module";
|
|
2
2
|
const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
|
|
3
3
|
const __niceevalCanonical = __niceevalRequire("./static.cjs");
|
|
4
|
-
const __niceevalExport0 = __niceevalCanonical["
|
|
5
|
-
export { __niceevalExport0 as
|
|
4
|
+
const __niceevalExport0 = __niceevalCanonical["REPORT_APP_RENDERER"];
|
|
5
|
+
export { __niceevalExport0 as REPORT_APP_RENDERER };
|
|
6
6
|
const __niceevalExport1 = __niceevalCanonical["REPORT_THEME_STYLESHEET_PATH"];
|
|
7
7
|
export { __niceevalExport1 as REPORT_THEME_STYLESHEET_PATH };
|
|
8
8
|
const __niceevalExport2 = __niceevalCanonical["ReportFileSystem"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-session.js","sourceRoot":"","sources":["view-session.ts"],"names":[],"mappings":"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","sourcesContent":["import { Cause, Deferred, Effect, Exit, Fiber, Option, Ref } from \"effect\";\nimport type * as Scope from \"effect/Scope\";\nimport type { ClosedSiteRevision } from \"../execution/model.ts\";\n/** One immutable byte-complete site published by the live transport. */\nexport interface ReportViewRevision {\n readonly revision: number;\n readonly site: ClosedSiteRevision;\n /** The successful candidate's next recoverable watcher closure. */\n readonly watchInputs: readonly string[];\n}\nexport interface ReportViewProblem {\n readonly summary: string;\n}\nexport interface ReportViewState {\n readonly current: ReportViewRevision;\n readonly lastProblem?: ReportViewProblem;\n}\nexport interface ReportViewSessionClosed {\n readonly code: \"report-view-session-closed\";\n}\nexport interface ReportViewOpenError {\n readonly code: \"report-view-open-failed\";\n readonly reason: string;\n}\n/** A rebuild failure is deliberately bounded before it becomes visible in a view. */\nexport interface ReportViewRebuildFailure {\n readonly summary: string;\n}\n/** A successful candidate always contains a new SSG-complete revision. */\nexport interface ReportViewSiteRebuild {\n readonly kind: \"site\";\n readonly site: ClosedSiteRevision;\n /** Omit to keep the prior recoverable set after a host-only rebuild. */\n readonly watchInputs?: readonly string[];\n}\nexport type ReportViewRebuild = ReportViewSiteRebuild;\nexport interface ReportViewSession<Requirements = never> {\n readonly url: string;\n readonly snapshot: Effect.Effect<ReportViewState, ReportViewSessionClosed>;\n /**\n * Records a new user/watch intent and starts its candidate immediately.\n * A later intent interrupts or abandons any earlier candidate; callers do\n * not wait for author callbacks before the latest intent is registered.\n */\n readonly refresh: Effect.Effect<ReportViewRefreshIntent, ReportViewSessionClosed, Requirements>;\n}\nexport type ReportViewPublicationOutcome = {\n readonly state: \"published\";\n readonly revision: ReportViewRevision;\n} | {\n readonly state: \"failed\";\n} | {\n readonly state: \"superseded\";\n} | {\n readonly state: \"interrupted\";\n};\n/** A registered intent returns promptly; its outcome completes exactly once. */\nexport interface ReportViewRefreshIntent {\n readonly token: number;\n readonly outcome: Effect.Effect<ReportViewPublicationOutcome>;\n}\nexport interface OpenReportViewSessionInput<Requirements = never> {\n readonly url: string;\n readonly watchInputs?: readonly string[];\n /** The opening revision is already a complete byte map. */\n readonly initial: Effect.Effect<ClosedSiteRevision, ReportViewOpenError, Requirements>;\n /** Each invocation captures one complete Sample/Report/Theme intent. */\n readonly rebuild: () => Effect.Effect<ReportViewRebuild, ReportViewRebuildFailure, Requirements>;\n}\ntype SessionCell = {\n readonly state: \"open\";\n readonly value: ReportViewState;\n} | {\n readonly state: \"closed\";\n};\nconst closedError: ReportViewSessionClosed = Object.freeze({\n code: \"report-view-session-closed\",\n});\n/**\n * Latest-intent-wins state machine. A candidate has no authority to publish\n * until it proves that its intent token is still current while holding the\n * small publication mutex. Failed, superseded, and interrupted candidates\n * retain the last-good revision and its watcher closure.\n */\nexport function openReportViewSession<Requirements>(input: OpenReportViewSessionInput<Requirements>): Effect.Effect<ReportViewSession<Requirements>, ReportViewOpenError, Scope.Scope | Requirements> {\n return Effect.gen(function* () {\n const sessionScope = yield* Effect.scope;\n const initial = yield* input.initial;\n const cell = yield* Ref.make<SessionCell>(Object.freeze({\n state: \"open\",\n value: Object.freeze({\n current: makeRevision(0, initial, freezeWatchInputs(input.watchInputs)),\n }),\n }));\n const intent = yield* Ref.make(0);\n const active = yield* Ref.make<ActiveCandidate | undefined>(undefined);\n const mutex = yield* Effect.makeSemaphore(1);\n const snapshot: Effect.Effect<ReportViewState, ReportViewSessionClosed> = Effect.flatMap(Ref.get(cell), (current) => current.state === \"open\"\n ? Effect.succeed(current.value)\n : Effect.fail(closedError));\n const refresh: Effect.Effect<ReportViewRefreshIntent, ReportViewSessionClosed, Requirements> = mutex.withPermits(1)(Effect.gen(function* () {\n const current = yield* Ref.get(cell);\n if (current.state === \"closed\")\n return yield* Effect.fail(closedError);\n const nextIntent = yield* Ref.updateAndGet(intent, (value) => value + 1);\n const prior = yield* Ref.get(active);\n // Do not wait for arbitrary author Promise cleanup. The token below\n // still prevents a late completion from publishing if interruption is\n // not observed by an external callback.\n if (prior !== undefined) {\n yield* Deferred.succeed(prior.outcome, Object.freeze({ state: \"superseded\" as const }));\n yield* Fiber.interruptFork(prior.fiber);\n }\n const outcome = yield* Deferred.make<ReportViewPublicationOutcome>();\n const candidate = yield* Effect.forkIn(closeCandidate({ input, cell, intent, mutex, token: nextIntent, outcome }), sessionScope);\n yield* Ref.set(active, Object.freeze({ token: nextIntent, fiber: candidate, outcome }));\n return Object.freeze({ token: nextIntent, outcome });\n }));\n const session: ReportViewSession<Requirements> = Object.freeze({ url: input.url, snapshot, refresh });\n return yield* Effect.acquireRelease(Effect.succeed(session), () => mutex.withPermits(1)(Effect.gen(function* () {\n const prior = yield* Ref.get(active);\n if (prior !== undefined) {\n yield* Deferred.succeed(prior.outcome, Object.freeze({ state: \"interrupted\" as const }));\n yield* Fiber.interruptFork(prior.fiber);\n }\n yield* Ref.set(cell, Object.freeze({ state: \"closed\" }));\n })));\n });\n}\nfunction closeCandidate<Requirements>(input: {\n readonly input: OpenReportViewSessionInput<Requirements>;\n readonly cell: Ref.Ref<SessionCell>;\n readonly intent: Ref.Ref<number>;\n readonly mutex: Effect.Semaphore;\n readonly token: number;\n readonly outcome: Deferred.Deferred<ReportViewPublicationOutcome>;\n}): Effect.Effect<void, never, Requirements> {\n return Effect.exit(input.input.rebuild()).pipe(Effect.flatMap((exit) => input.mutex.withPermits(1)(publishCandidate({ ...input, exit }))));\n}\nfunction publishCandidate<Requirements>(input: {\n readonly cell: Ref.Ref<SessionCell>;\n readonly intent: Ref.Ref<number>;\n readonly token: number;\n readonly exit: Exit.Exit<ReportViewRebuild, ReportViewRebuildFailure>;\n readonly outcome: Deferred.Deferred<ReportViewPublicationOutcome>;\n}): Effect.Effect<void> {\n return Effect.gen(function* () {\n const currentIntent = yield* Ref.get(input.intent);\n const current = yield* Ref.get(input.cell);\n if (current.state === \"closed\" || currentIntent !== input.token) {\n return yield* Deferred.succeed(input.outcome, Object.freeze({ state: \"superseded\" as const }));\n }\n if (Exit.isSuccess(input.exit)) {\n const revision = makeRevision(current.value.current.revision + 1, input.exit.value.site, input.exit.value.watchInputs ?? current.value.current.watchInputs);\n const next: ReportViewState = Object.freeze({ current: revision });\n yield* Ref.set(input.cell, Object.freeze({ state: \"open\", value: next }));\n return yield* Deferred.succeed(input.outcome, Object.freeze({ state: \"published\" as const, revision }));\n }\n // Intentional cancellation has no user-visible error. A typed failure or\n // defect merely annotates last-good; neither can replace its bytes/watch set.\n if (Cause.isInterruptedOnly(input.exit.cause)) {\n return yield* Deferred.succeed(input.outcome, Object.freeze({ state: \"interrupted\" as const }));\n }\n const typed = Option.getOrUndefined(Cause.failureOption(input.exit.cause));\n const next: ReportViewState = Object.freeze({\n current: current.value.current,\n lastProblem: boundedProblem(typed ?? { summary: \"Report rebuild failed\" }),\n });\n yield* Ref.set(input.cell, Object.freeze({ state: \"open\", value: next }));\n return yield* Deferred.succeed(input.outcome, Object.freeze({ state: \"failed\" as const }));\n });\n}\ninterface ActiveCandidate {\n readonly token: number;\n readonly fiber: Fiber.RuntimeFiber<void, never>;\n readonly outcome: Deferred.Deferred<ReportViewPublicationOutcome>;\n}\nfunction makeRevision(revision: number, site: ClosedSiteRevision, watchInputs: readonly string[]): ReportViewRevision {\n return Object.freeze({ revision, site, watchInputs: freezeWatchInputs(watchInputs) });\n}\nfunction freezeWatchInputs(inputs: readonly string[] | undefined): readonly string[] {\n return Object.freeze([...(inputs ?? [])]);\n}\nfunction boundedProblem(failure: ReportViewRebuildFailure): ReportViewProblem {\n const normalized = failure.summary.replace(/[\\u0000-\\u001f\\u007f-\\u009f]/g, \" \").slice(0, 1024);\n return Object.freeze({ summary: normalized || \"Report rebuild failed\" });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"view-session.js","sourceRoot":"","sources":["view-session.ts"],"names":[],"mappings":"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","sourcesContent":["import { Cause, Deferred, Effect, Exit, Fiber, Option, Ref } from \"effect\";\nimport type * as Scope from \"effect/Scope\";\nimport type { ClosedSiteRevision } from \"../execution/model.ts\";\n/** One immutable byte-complete site published by the live transport. */\nexport interface ReportViewRevision {\n readonly revision: number;\n readonly site: ClosedSiteRevision;\n /** The successful candidate's next recoverable watcher closure. */\n readonly watchInputs: readonly string[];\n}\nexport interface ReportViewProblem {\n readonly summary: string;\n}\nexport interface ReportViewState {\n readonly current: ReportViewRevision;\n readonly lastProblem?: ReportViewProblem;\n}\nexport interface ReportViewSessionClosed {\n readonly code: \"report-view-session-closed\";\n}\nexport interface ReportViewOpenError {\n readonly code: \"report-view-open-failed\";\n readonly reason: string;\n}\n/** A rebuild failure is deliberately bounded before it becomes visible in a view. */\nexport interface ReportViewRebuildFailure {\n readonly summary: string;\n}\n/** A successful candidate always contains one fully closed site revision. */\nexport interface ReportViewSiteRebuild {\n readonly kind: \"site\";\n readonly site: ClosedSiteRevision;\n /** Omit to keep the prior recoverable set after a host-only rebuild. */\n readonly watchInputs?: readonly string[];\n}\nexport type ReportViewRebuild = ReportViewSiteRebuild;\nexport interface ReportViewSession<Requirements = never> {\n readonly url: string;\n readonly snapshot: Effect.Effect<ReportViewState, ReportViewSessionClosed>;\n /**\n * Records a new user/watch intent and starts its candidate immediately.\n * A later intent interrupts or abandons any earlier candidate; callers do\n * not wait for author callbacks before the latest intent is registered.\n */\n readonly refresh: Effect.Effect<ReportViewRefreshIntent, ReportViewSessionClosed, Requirements>;\n}\nexport type ReportViewPublicationOutcome = {\n readonly state: \"published\";\n readonly revision: ReportViewRevision;\n} | {\n readonly state: \"failed\";\n} | {\n readonly state: \"superseded\";\n} | {\n readonly state: \"interrupted\";\n};\n/** A registered intent returns promptly; its outcome completes exactly once. */\nexport interface ReportViewRefreshIntent {\n readonly token: number;\n readonly outcome: Effect.Effect<ReportViewPublicationOutcome>;\n}\nexport interface OpenReportViewSessionInput<Requirements = never> {\n readonly url: string;\n readonly watchInputs?: readonly string[];\n /** The opening revision is already a complete byte map. */\n readonly initial: Effect.Effect<ClosedSiteRevision, ReportViewOpenError, Requirements>;\n /** Each invocation captures one complete Sample/Report/Theme intent. */\n readonly rebuild: () => Effect.Effect<ReportViewRebuild, ReportViewRebuildFailure, Requirements>;\n}\ntype SessionCell = {\n readonly state: \"open\";\n readonly value: ReportViewState;\n} | {\n readonly state: \"closed\";\n};\nconst closedError: ReportViewSessionClosed = Object.freeze({\n code: \"report-view-session-closed\",\n});\n/**\n * Latest-intent-wins state machine. A candidate has no authority to publish\n * until it proves that its intent token is still current while holding the\n * small publication mutex. Failed, superseded, and interrupted candidates\n * retain the last-good revision and its watcher closure.\n */\nexport function openReportViewSession<Requirements>(input: OpenReportViewSessionInput<Requirements>): Effect.Effect<ReportViewSession<Requirements>, ReportViewOpenError, Scope.Scope | Requirements> {\n return Effect.gen(function* () {\n const sessionScope = yield* Effect.scope;\n const initial = yield* input.initial;\n const cell = yield* Ref.make<SessionCell>(Object.freeze({\n state: \"open\",\n value: Object.freeze({\n current: makeRevision(0, initial, freezeWatchInputs(input.watchInputs)),\n }),\n }));\n const intent = yield* Ref.make(0);\n const active = yield* Ref.make<ActiveCandidate | undefined>(undefined);\n const mutex = yield* Effect.makeSemaphore(1);\n const snapshot: Effect.Effect<ReportViewState, ReportViewSessionClosed> = Effect.flatMap(Ref.get(cell), (current) => current.state === \"open\"\n ? Effect.succeed(current.value)\n : Effect.fail(closedError));\n const refresh: Effect.Effect<ReportViewRefreshIntent, ReportViewSessionClosed, Requirements> = mutex.withPermits(1)(Effect.gen(function* () {\n const current = yield* Ref.get(cell);\n if (current.state === \"closed\")\n return yield* Effect.fail(closedError);\n const nextIntent = yield* Ref.updateAndGet(intent, (value) => value + 1);\n const prior = yield* Ref.get(active);\n // Do not wait for arbitrary author Promise cleanup. The token below\n // still prevents a late completion from publishing if interruption is\n // not observed by an external callback.\n if (prior !== undefined) {\n yield* Deferred.succeed(prior.outcome, Object.freeze({ state: \"superseded\" as const }));\n yield* Fiber.interruptFork(prior.fiber);\n }\n const outcome = yield* Deferred.make<ReportViewPublicationOutcome>();\n const candidate = yield* Effect.forkIn(closeCandidate({ input, cell, intent, mutex, token: nextIntent, outcome }), sessionScope);\n yield* Ref.set(active, Object.freeze({ token: nextIntent, fiber: candidate, outcome }));\n return Object.freeze({ token: nextIntent, outcome });\n }));\n const session: ReportViewSession<Requirements> = Object.freeze({ url: input.url, snapshot, refresh });\n return yield* Effect.acquireRelease(Effect.succeed(session), () => mutex.withPermits(1)(Effect.gen(function* () {\n const prior = yield* Ref.get(active);\n if (prior !== undefined) {\n yield* Deferred.succeed(prior.outcome, Object.freeze({ state: \"interrupted\" as const }));\n yield* Fiber.interruptFork(prior.fiber);\n }\n yield* Ref.set(cell, Object.freeze({ state: \"closed\" }));\n })));\n });\n}\nfunction closeCandidate<Requirements>(input: {\n readonly input: OpenReportViewSessionInput<Requirements>;\n readonly cell: Ref.Ref<SessionCell>;\n readonly intent: Ref.Ref<number>;\n readonly mutex: Effect.Semaphore;\n readonly token: number;\n readonly outcome: Deferred.Deferred<ReportViewPublicationOutcome>;\n}): Effect.Effect<void, never, Requirements> {\n return Effect.exit(input.input.rebuild()).pipe(Effect.flatMap((exit) => input.mutex.withPermits(1)(publishCandidate({ ...input, exit }))));\n}\nfunction publishCandidate<Requirements>(input: {\n readonly cell: Ref.Ref<SessionCell>;\n readonly intent: Ref.Ref<number>;\n readonly token: number;\n readonly exit: Exit.Exit<ReportViewRebuild, ReportViewRebuildFailure>;\n readonly outcome: Deferred.Deferred<ReportViewPublicationOutcome>;\n}): Effect.Effect<void> {\n return Effect.gen(function* () {\n const currentIntent = yield* Ref.get(input.intent);\n const current = yield* Ref.get(input.cell);\n if (current.state === \"closed\" || currentIntent !== input.token) {\n return yield* Deferred.succeed(input.outcome, Object.freeze({ state: \"superseded\" as const }));\n }\n if (Exit.isSuccess(input.exit)) {\n const revision = makeRevision(current.value.current.revision + 1, input.exit.value.site, input.exit.value.watchInputs ?? current.value.current.watchInputs);\n const next: ReportViewState = Object.freeze({ current: revision });\n yield* Ref.set(input.cell, Object.freeze({ state: \"open\", value: next }));\n return yield* Deferred.succeed(input.outcome, Object.freeze({ state: \"published\" as const, revision }));\n }\n // Intentional cancellation has no user-visible error. A typed failure or\n // defect merely annotates last-good; neither can replace its bytes/watch set.\n if (Cause.isInterruptedOnly(input.exit.cause)) {\n return yield* Deferred.succeed(input.outcome, Object.freeze({ state: \"interrupted\" as const }));\n }\n const typed = Option.getOrUndefined(Cause.failureOption(input.exit.cause));\n const next: ReportViewState = Object.freeze({\n current: current.value.current,\n lastProblem: boundedProblem(typed ?? { summary: \"Report rebuild failed\" }),\n });\n yield* Ref.set(input.cell, Object.freeze({ state: \"open\", value: next }));\n return yield* Deferred.succeed(input.outcome, Object.freeze({ state: \"failed\" as const }));\n });\n}\ninterface ActiveCandidate {\n readonly token: number;\n readonly fiber: Fiber.RuntimeFiber<void, never>;\n readonly outcome: Deferred.Deferred<ReportViewPublicationOutcome>;\n}\nfunction makeRevision(revision: number, site: ClosedSiteRevision, watchInputs: readonly string[]): ReportViewRevision {\n return Object.freeze({ revision, site, watchInputs: freezeWatchInputs(watchInputs) });\n}\nfunction freezeWatchInputs(inputs: readonly string[] | undefined): readonly string[] {\n return Object.freeze([...(inputs ?? [])]);\n}\nfunction boundedProblem(failure: ReportViewRebuildFailure): ReportViewProblem {\n const normalized = failure.summary.replace(/[\\u0000-\\u001f\\u007f-\\u009f]/g, \" \").slice(0, 1024);\n return Object.freeze({ summary: normalized || \"Report rebuild failed\" });\n}\n"]}
|
|
@@ -26,7 +26,7 @@ export interface ReportViewOpenError {
|
|
|
26
26
|
export interface ReportViewRebuildFailure {
|
|
27
27
|
readonly summary: string;
|
|
28
28
|
}
|
|
29
|
-
/** A successful candidate always contains
|
|
29
|
+
/** A successful candidate always contains one fully closed site revision. */
|
|
30
30
|
export interface ReportViewSiteRebuild {
|
|
31
31
|
readonly kind: "site";
|
|
32
32
|
readonly site: ClosedSiteRevision;
|
|
@@ -26,7 +26,7 @@ export interface ReportViewOpenError {
|
|
|
26
26
|
export interface ReportViewRebuildFailure {
|
|
27
27
|
readonly summary: string;
|
|
28
28
|
}
|
|
29
|
-
/** A successful candidate always contains
|
|
29
|
+
/** A successful candidate always contains one fully closed site revision. */
|
|
30
30
|
export interface ReportViewSiteRebuild {
|
|
31
31
|
readonly kind: "site";
|
|
32
32
|
readonly site: ClosedSiteRevision;
|
|
@@ -26,7 +26,7 @@ export interface ReportViewOpenError {
|
|
|
26
26
|
export interface ReportViewRebuildFailure {
|
|
27
27
|
readonly summary: string;
|
|
28
28
|
}
|
|
29
|
-
/** A successful candidate always contains
|
|
29
|
+
/** A successful candidate always contains one fully closed site revision. */
|
|
30
30
|
export interface ReportViewSiteRebuild {
|
|
31
31
|
readonly kind: "site";
|
|
32
32
|
readonly site: ClosedSiteRevision;
|
|
@@ -84,7 +84,7 @@ const en = {
|
|
|
84
84
|
"experimentList.totalScoreDescription": "Total score: sum of points earned across evals",
|
|
85
85
|
"experimentList.tokens": "Tokens",
|
|
86
86
|
"experimentList.cost": "Cost",
|
|
87
|
-
"experimentList.result": "
|
|
87
|
+
"experimentList.result": "Result",
|
|
88
88
|
"experimentList.status": "Status",
|
|
89
89
|
"experimentList.evalAttempt": "Eval / Attempt",
|
|
90
90
|
"experimentList.duration": "Duration",
|