@legionworks/facet 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-APACHE +202 -0
- package/LICENSE-MIT +23 -0
- package/README.md +158 -0
- package/dist/gallery/chunk-4g8rem85.css +656 -0
- package/dist/gallery/chunk-c6s9k9ty.js +5970 -0
- package/dist/gallery/frame/artifact.css +8424 -0
- package/dist/gallery/frame/chunks/abnfDiagram-N423BO3Z-jj74szbm.js +155 -0
- package/dist/gallery/frame/chunks/architecture-TIHT7OUA-cvdjn7dt.js +10 -0
- package/dist/gallery/frame/chunks/architectureDiagram-T3A2C74G-n4z77eg6.js +8675 -0
- package/dist/gallery/frame/chunks/blockDiagram-VBNYF7ZC-7xsqzrd1.js +3529 -0
- package/dist/gallery/frame/chunks/c4Diagram-5PPSVZJV-z2zjs7wx.js +2413 -0
- package/dist/gallery/frame/chunks/classDiagram-JCYQIIEL-ve8rngqp.js +47 -0
- package/dist/gallery/frame/chunks/classDiagram-v2-OCEON4UE-8cfaxb8z.js +47 -0
- package/dist/gallery/frame/chunks/cose-bilkent-JH36ORCC-sn92qexx.js +4822 -0
- package/dist/gallery/frame/chunks/cynefin-VYW2F7L2-tqjv913d.js +10 -0
- package/dist/gallery/frame/chunks/cynefinDiagram-MW4NZA55-c1c0dj12.js +500 -0
- package/dist/gallery/frame/chunks/dagre-VZM6K2ZE-7tyg4yt2.js +476 -0
- package/dist/gallery/frame/chunks/diagram-7IWD3JNH-y4eng9sc.js +526 -0
- package/dist/gallery/frame/chunks/diagram-B4RE2ZJO-rn3p7j5h.js +673 -0
- package/dist/gallery/frame/chunks/diagram-LBJQPF4R-w4a2cm9q.js +255 -0
- package/dist/gallery/frame/chunks/diagram-Q27KOJAE-aqc2v7wy.js +575 -0
- package/dist/gallery/frame/chunks/diagram-UB23O5K3-xncy8nyd.js +355 -0
- package/dist/gallery/frame/chunks/ebnfDiagram-BXEA7PRR-acwgxz16.js +175 -0
- package/dist/gallery/frame/chunks/erDiagram-JOGREHBK-mzp5nswt.js +1332 -0
- package/dist/gallery/frame/chunks/eventmodeling-45OFAUF4-sg07qr0c.js +10 -0
- package/dist/gallery/frame/chunks/flowDiagram-UKHOOZJN-2e5ygs44.js +29 -0
- package/dist/gallery/frame/chunks/ganttDiagram-PKOTCBZU-p2hhh7hr.js +2620 -0
- package/dist/gallery/frame/chunks/gitGraph-TEB2WS4Q-j6kw0naa.js +10 -0
- package/dist/gallery/frame/chunks/gitGraphDiagram-DS77QQ5N-4z9z8wjm.js +1347 -0
- package/dist/gallery/frame/chunks/info-DKCQHKI2-mpt80jd3.js +10 -0
- package/dist/gallery/frame/chunks/infoDiagram-6WML65LV-5rqm3mgg.js +65 -0
- package/dist/gallery/frame/chunks/ishikawaDiagram-WSZJBQD7-b51z96jy.js +975 -0
- package/dist/gallery/frame/chunks/journeyDiagram-NVQOT4AX-9jbfp0pk.js +1272 -0
- package/dist/gallery/frame/chunks/kanban-definition-27J2QSJJ-4x0vx4se.js +1116 -0
- package/dist/gallery/frame/chunks/katex-xfgk95tv.js +14034 -0
- package/dist/gallery/frame/chunks/markdown-1s5vwkf2.js +9 -0
- package/dist/gallery/frame/chunks/markdown-2h6bwsms.js +3239 -0
- package/dist/gallery/frame/chunks/markdown-2x113yh8.js +107 -0
- package/dist/gallery/frame/chunks/markdown-30b7rwmp.js +1943 -0
- package/dist/gallery/frame/chunks/markdown-356bfj4g.js +2031 -0
- package/dist/gallery/frame/chunks/markdown-44n9ea69.js +2406 -0
- package/dist/gallery/frame/chunks/markdown-56enrf2r.js +39 -0
- package/dist/gallery/frame/chunks/markdown-5avymm8t.js +725 -0
- package/dist/gallery/frame/chunks/markdown-6r4svars.js +33 -0
- package/dist/gallery/frame/chunks/markdown-6zz8efx2.js +24 -0
- package/dist/gallery/frame/chunks/markdown-7jp6prnb.js +19 -0
- package/dist/gallery/frame/chunks/markdown-809k7q41.js +55 -0
- package/dist/gallery/frame/chunks/markdown-82xmzhzd.js +1076 -0
- package/dist/gallery/frame/chunks/markdown-92n37gd4.js +7627 -0
- package/dist/gallery/frame/chunks/markdown-ag2sssf8.js +36 -0
- package/dist/gallery/frame/chunks/markdown-b4s7ntq2.js +19 -0
- package/dist/gallery/frame/chunks/markdown-c9k0fvp1.js +100 -0
- package/dist/gallery/frame/chunks/markdown-ceefymn8.js +125 -0
- package/dist/gallery/frame/chunks/markdown-d1wfbs70.js +243 -0
- package/dist/gallery/frame/chunks/markdown-dy5sgjhc.js +11022 -0
- package/dist/gallery/frame/chunks/markdown-dz3z5w30.js +30868 -0
- package/dist/gallery/frame/chunks/markdown-eg6ngz7y.js +30340 -0
- package/dist/gallery/frame/chunks/markdown-ff5wvb43.js +1149 -0
- package/dist/gallery/frame/chunks/markdown-ffg06nfz.js +86 -0
- package/dist/gallery/frame/chunks/markdown-fvfncadf.js +472 -0
- package/dist/gallery/frame/chunks/markdown-gvyszqpv.js +19 -0
- package/dist/gallery/frame/chunks/markdown-gx1p0ew0.js +88 -0
- package/dist/gallery/frame/chunks/markdown-gxye5frz.js +65 -0
- package/dist/gallery/frame/chunks/markdown-h7pzv34e.js +105 -0
- package/dist/gallery/frame/chunks/markdown-hab789t9.js +47 -0
- package/dist/gallery/frame/chunks/markdown-hjp6sj8t.js +125 -0
- package/dist/gallery/frame/chunks/markdown-jka64qgp.js +1993 -0
- package/dist/gallery/frame/chunks/markdown-k8xkn8mw.js +56 -0
- package/dist/gallery/frame/chunks/markdown-m7frq8x8.js +112 -0
- package/dist/gallery/frame/chunks/markdown-p740v4qm.js +36 -0
- package/dist/gallery/frame/chunks/markdown-pxfeh231.js +57 -0
- package/dist/gallery/frame/chunks/markdown-pzgd8z3s.js +87 -0
- package/dist/gallery/frame/chunks/markdown-qx3cngz2.js +1673 -0
- package/dist/gallery/frame/chunks/markdown-rawhfvvc.js +85 -0
- package/dist/gallery/frame/chunks/markdown-rd8w0ng9.js +49 -0
- package/dist/gallery/frame/chunks/markdown-rm2yxfjj.js +2773 -0
- package/dist/gallery/frame/chunks/markdown-s1jatrnk.js +993 -0
- package/dist/gallery/frame/chunks/markdown-sgfg5vvq.js +59 -0
- package/dist/gallery/frame/chunks/markdown-t4ethv9d.js +409 -0
- package/dist/gallery/frame/chunks/markdown-tnmabqvz.js +36 -0
- package/dist/gallery/frame/chunks/markdown-tvdpppw8.js +5292 -0
- package/dist/gallery/frame/chunks/markdown-v0x27twr.js +22 -0
- package/dist/gallery/frame/chunks/markdown-v14td68x.js +36 -0
- package/dist/gallery/frame/chunks/markdown-w6sgd54z.js +36 -0
- package/dist/gallery/frame/chunks/markdown-xw8dsk8b.js +2125 -0
- package/dist/gallery/frame/chunks/markdown-y18mve73.js +85 -0
- package/dist/gallery/frame/chunks/markdown-yengsms5.js +427 -0
- package/dist/gallery/frame/chunks/markdown-z1wc0v0d.js +1826 -0
- package/dist/gallery/frame/chunks/markdown-zazx9h4n.js +329 -0
- package/dist/gallery/frame/chunks/mermaid-de7p4v0x.js +30 -0
- package/dist/gallery/frame/chunks/mindmap-definition-FAOFIHXS-ra44cbem.js +1216 -0
- package/dist/gallery/frame/chunks/packet-7NZHBO7P-xppm5913.js +10 -0
- package/dist/gallery/frame/chunks/pegDiagram-VL7TDLO6-a2a4wg03.js +163 -0
- package/dist/gallery/frame/chunks/pie-RZYD4A2V-hnbxk152.js +10 -0
- package/dist/gallery/frame/chunks/pieDiagram-7S7Q4E2Y-f1vxjtmx.js +311 -0
- package/dist/gallery/frame/chunks/quadrantDiagram-CIZ2JOQS-ywafa6kh.js +1390 -0
- package/dist/gallery/frame/chunks/radar-I7S5WNFK-ewqd27se.js +10 -0
- package/dist/gallery/frame/chunks/railroad-3IZDKUUU-5hy4bdx3.js +10 -0
- package/dist/gallery/frame/chunks/railroad-abnf-AHOZXSZD-bh5sxz0d.js +10 -0
- package/dist/gallery/frame/chunks/railroad-ebnf-EBAXGLYW-6b9c3zeh.js +10 -0
- package/dist/gallery/frame/chunks/railroad-peg-LSFZ7HO6-avc8v39s.js +10 -0
- package/dist/gallery/frame/chunks/railroadDiagram-AXF67PYL-qc61wax4.js +131 -0
- package/dist/gallery/frame/chunks/requirementDiagram-LRYGKXZP-9bs4786c.js +1295 -0
- package/dist/gallery/frame/chunks/sankeyDiagram-W5VNT64P-awt1em8b.js +1339 -0
- package/dist/gallery/frame/chunks/sequenceDiagram-SI44F4Z6-qaf9mz3t.js +4324 -0
- package/dist/gallery/frame/chunks/sizeCapture-X5ZJPWSS-9fq685xd.js +64 -0
- package/dist/gallery/frame/chunks/stateDiagram-OKZ733FA-vx7a7hh0.js +456 -0
- package/dist/gallery/frame/chunks/stateDiagram-v2-UEYNNEHI-x4m6ws5t.js +46 -0
- package/dist/gallery/frame/chunks/swimlanes-SLNWSIFB-e4mxm1gh.js +8287 -0
- package/dist/gallery/frame/chunks/swimlanesDiagram-ULZ7WXOC-0h93e2qq.js +42 -0
- package/dist/gallery/frame/chunks/timeline-definition-Z64GVDOM-wp0bhbzg.js +1549 -0
- package/dist/gallery/frame/chunks/treeView-QDETBFTQ-hcx7n0vt.js +10 -0
- package/dist/gallery/frame/chunks/treemap-6X3UGDF4-av02skdw.js +10 -0
- package/dist/gallery/frame/chunks/vennDiagram-T6HMQDX7-pmvk1p7n.js +2566 -0
- package/dist/gallery/frame/chunks/wardley-OPB4EBWU-njsp6e40.js +10 -0
- package/dist/gallery/frame/chunks/wardleyDiagram-T6FBY63Y-eggmnv4z.js +979 -0
- package/dist/gallery/frame/chunks/xychartDiagram-ELKLHX3M-q40tnpe5.js +1954 -0
- package/dist/gallery/frame/frame.css +183 -0
- package/dist/gallery/frame/runtime/chart.js +42744 -0
- package/dist/gallery/frame/runtime/html.js +14 -0
- package/dist/gallery/frame/runtime/markdown.js +1403 -0
- package/dist/gallery/frame/runtime/mermaid.js +32 -0
- package/dist/gallery/frame/runtime/svg.js +14 -0
- package/dist/gallery/frame/runtime/tsx.js +52 -0
- package/dist/gallery/index.html +104 -0
- package/docs/reference/cli.md +163 -0
- package/docs/reference/export.md +106 -0
- package/docs/reference/html.md +215 -0
- package/docs/reference/http.md +85 -0
- package/docs/reference/mcp.md +78 -0
- package/docs/reference/security.md +119 -0
- package/docs/reference/storage.md +93 -0
- package/docs/reference/tsx.md +101 -0
- package/docs/reference/validation.md +212 -0
- package/package.json +89 -0
- package/scripts/build-gallery.ts +127 -0
- package/scripts/launch-netns.sh +67 -0
- package/skills/facet/SKILL.md +100 -0
- package/src/cli/client.ts +311 -0
- package/src/cli/commands/create.ts +49 -0
- package/src/cli/commands/doctor.ts +249 -0
- package/src/cli/commands/export.ts +179 -0
- package/src/cli/commands/instantiate.ts +35 -0
- package/src/cli/commands/list.ts +49 -0
- package/src/cli/commands/open.ts +75 -0
- package/src/cli/commands/pin.ts +39 -0
- package/src/cli/commands/promote.ts +49 -0
- package/src/cli/commands/publish.ts +122 -0
- package/src/cli/commands/read-back.ts +56 -0
- package/src/cli/commands/status.ts +114 -0
- package/src/cli/commands/watch.ts +146 -0
- package/src/cli/main.ts +522 -0
- package/src/cli/output.ts +106 -0
- package/src/cli/parser.ts +376 -0
- package/src/cli/presenter.ts +212 -0
- package/src/cli/service-metadata.ts +134 -0
- package/src/cli/spawn-service.ts +326 -0
- package/src/css.d.ts +4 -0
- package/src/gallery-web/app.ts +1581 -0
- package/src/gallery-web/export-menu.ts +121 -0
- package/src/gallery-web/export.ts +112 -0
- package/src/gallery-web/favicon.ts +54 -0
- package/src/gallery-web/frame/entries/chart.ts +6 -0
- package/src/gallery-web/frame/entries/html.ts +6 -0
- package/src/gallery-web/frame/entries/markdown.ts +6 -0
- package/src/gallery-web/frame/entries/mermaid.ts +6 -0
- package/src/gallery-web/frame/entries/svg.ts +6 -0
- package/src/gallery-web/frame/entries/tsx.ts +6 -0
- package/src/gallery-web/frame/frame-payload.ts +91 -0
- package/src/gallery-web/frame/renderer-validation.ts +13 -0
- package/src/gallery-web/frame/renderers/chart.ts +182 -0
- package/src/gallery-web/frame/renderers/dompurify-shim.ts +112 -0
- package/src/gallery-web/frame/renderers/html.ts +48 -0
- package/src/gallery-web/frame/renderers/markdown.ts +81 -0
- package/src/gallery-web/frame/renderers/mermaid.ts +120 -0
- package/src/gallery-web/frame/renderers/registry.ts +260 -0
- package/src/gallery-web/frame/renderers/svg.ts +393 -0
- package/src/gallery-web/frame/renderers/tsx.ts +61 -0
- package/src/gallery-web/frame/runtime.ts +501 -0
- package/src/gallery-web/frame/styles/artifact.css +8424 -0
- package/src/gallery-web/frame/styles/frame.css +183 -0
- package/src/gallery-web/frame/styles/html-source.css +23 -0
- package/src/gallery-web/frame/view-box.ts +33 -0
- package/src/gallery-web/frame-html.ts +72 -0
- package/src/gallery-web/index.html +104 -0
- package/src/gallery-web/session.ts +107 -0
- package/src/gallery-web/sse-client.ts +212 -0
- package/src/gallery-web/styles/app.css +420 -0
- package/src/gallery-web/styles/tokens.css +112 -0
- package/src/gallery-web/styles/verdict.css +186 -0
- package/src/gallery-web/swap.ts +64 -0
- package/src/gallery-web/theme.ts +40 -0
- package/src/gallery-web/view-state.ts +93 -0
- package/src/harness-adapters/claude-code/README.md +10 -0
- package/src/harness-adapters/claude-code/facet.sh +4 -0
- package/src/harness-adapters/codex/README.md +10 -0
- package/src/harness-adapters/codex/facet.sh +4 -0
- package/src/harness-adapters/mcp/README.md +13 -0
- package/src/harness-adapters/mcp/cli-bridge.ts +216 -0
- package/src/harness-adapters/mcp/main.ts +15 -0
- package/src/harness-adapters/mcp/server.ts +164 -0
- package/src/harness-adapters/mcp/tool-schemas.ts +53 -0
- package/src/harness-adapters/opencode/README.md +10 -0
- package/src/harness-adapters/opencode/facet.sh +4 -0
- package/src/runtime/compiled-entrypoints.ts +69 -0
- package/src/service/dispatcher.ts +717 -0
- package/src/service/export.ts +218 -0
- package/src/service/http-utils.ts +55 -0
- package/src/service/lexical/expectations.ts +210 -0
- package/src/service/lifecycle/idle-controller.ts +125 -0
- package/src/service/lifecycle/orphan-cleanup.ts +128 -0
- package/src/service/lifecycle/process-lock.ts +235 -0
- package/src/service/main.ts +136 -0
- package/src/service/process.ts +240 -0
- package/src/service/router-guards.ts +239 -0
- package/src/service/router.ts +627 -0
- package/src/service/security/auth.ts +168 -0
- package/src/service/security/host-origin.ts +138 -0
- package/src/service/security/http-guards.ts +13 -0
- package/src/service/security/leases.ts +182 -0
- package/src/service/security/token-store.ts +138 -0
- package/src/service/server.ts +356 -0
- package/src/service/store/database.ts +61 -0
- package/src/service/store/evidence-retention.ts +234 -0
- package/src/service/store/migrations.ts +167 -0
- package/src/service/store/repository-lifecycle.ts +121 -0
- package/src/service/store/repository.ts +732 -0
- package/src/service/store/schema.ts +218 -0
- package/src/service/stored-verdict.ts +97 -0
- package/src/service/stream.ts +301 -0
- package/src/service/verdict-enrichment.ts +45 -0
- package/src/shared/build/frame-bundle-plugins.ts +61 -0
- package/src/shared/build-mode.ts +28 -0
- package/src/shared/config/evidence-read.ts +98 -0
- package/src/shared/config/limits.ts +56 -0
- package/src/shared/config/paths.ts +96 -0
- package/src/shared/contracts/artifact-types.ts +2 -0
- package/src/shared/contracts/artifact.ts +98 -0
- package/src/shared/contracts/commands/_shared.ts +59 -0
- package/src/shared/contracts/commands/guards.ts +86 -0
- package/src/shared/contracts/commands/index.ts +204 -0
- package/src/shared/contracts/commands/names.ts +35 -0
- package/src/shared/contracts/commands/requests.ts +149 -0
- package/src/shared/contracts/commands/results.ts +200 -0
- package/src/shared/contracts/envelope.ts +140 -0
- package/src/shared/contracts/events.ts +41 -0
- package/src/shared/contracts/observed-counts.ts +19 -0
- package/src/shared/contracts/renderers.ts +6 -0
- package/src/shared/contracts/validation.ts +296 -0
- package/src/shared/errors/facet-error.ts +127 -0
- package/src/shared/errors/store-error.ts +68 -0
- package/src/shared/evidence-image.ts +37 -0
- package/src/shared/export.ts +31 -0
- package/src/shared/html/policy.ts +108 -0
- package/src/shared/html/style-vocabulary.ts +352 -0
- package/src/shared/logging/logger.ts +108 -0
- package/src/shared/logging/redact.ts +49 -0
- package/src/shared/security/frozen-csp.ts +13 -0
- package/src/shared/storage-version.ts +2 -0
- package/src/shared/tsx/execution.ts +29 -0
- package/src/shared/tsx/import-policy.ts +94 -0
- package/src/shared/util/dir-permissions.ts +94 -0
- package/src/shared/util/mermaid-nodes.ts +230 -0
- package/src/shared/util/process.ts +67 -0
- package/src/shared/util/time.ts +21 -0
- package/src/shared/version.ts +3 -0
- package/src/validation/sandbox/limits.ts +41 -0
- package/src/validation/sandbox/netns.ts +177 -0
- package/src/validation/tier0/chart.ts +177 -0
- package/src/validation/tier0/dom-shim.ts +54 -0
- package/src/validation/tier0/html.ts +408 -0
- package/src/validation/tier0/markdown.ts +285 -0
- package/src/validation/tier0/mermaid.ts +98 -0
- package/src/validation/tier0/runner.ts +504 -0
- package/src/validation/tier0/svg.ts +321 -0
- package/src/validation/tier0/tsx/allowlist-resolver.ts +77 -0
- package/src/validation/tier0/tsx/ast-policy-capabilities.ts +238 -0
- package/src/validation/tier0/tsx/ast-policy-shared.ts +71 -0
- package/src/validation/tier0/tsx/ast-policy.ts +181 -0
- package/src/validation/tier0/tsx/compiler.ts +156 -0
- package/src/validation/tier0/worker-dispatch.ts +211 -0
- package/src/validation/tier0/worker-entry.ts +96 -0
- package/src/validation/tier0/worker-input.ts +75 -0
- package/src/validation/tier1/browser-process.ts +147 -0
- package/src/validation/tier1/cdp-pipe.ts +281 -0
- package/src/validation/tier1/entries/chart.ts +5 -0
- package/src/validation/tier1/entries/html.ts +6 -0
- package/src/validation/tier1/entries/markdown.ts +5 -0
- package/src/validation/tier1/entries/mermaid.ts +5 -0
- package/src/validation/tier1/entries/svg.ts +5 -0
- package/src/validation/tier1/entries/tsx.ts +5 -0
- package/src/validation/tier1/frame-target.ts +162 -0
- package/src/validation/tier1/harness-entry.ts +261 -0
- package/src/validation/tier1/harness.ts +215 -0
- package/src/validation/tier1/isolated-probe.ts +94 -0
- package/src/validation/tier1/launcher.ts +177 -0
- package/src/validation/tier1/limits.ts +80 -0
- package/src/validation/tier1/nonce.ts +17 -0
- package/src/validation/tier1/protocol-probe.ts +519 -0
- package/src/validation/tier1/runner.ts +1122 -0
- package/src/validation/tier1/verdict.ts +246 -0
- package/src/validation/tier1/webp.ts +69 -0
- package/templates/README.md +88 -0
- package/templates/bar-compare.vl.json +63 -0
- package/templates/capacity-report.tsx +102 -0
- package/templates/decision-record.md +24 -0
- package/templates/deployment-state.mmd +40 -0
- package/templates/exemplar.md +91 -0
- package/templates/facet-story.tsx +799 -0
- package/templates/fleet-dashboard.html +141 -0
- package/templates/html-release-ledger.html +91 -0
- package/templates/html-status-report.html +114 -0
- package/templates/incident-console.tsx +147 -0
- package/templates/legion-boundaries.mmd +23 -0
- package/templates/legion-flow.mmd +15 -0
- package/templates/legion-sequence.mmd +14 -0
- package/templates/legion-state.mmd +7 -0
- package/templates/metric-card.svg +29 -0
- package/templates/observability-map.svg +101 -0
- package/templates/pipeline-audit.md +108 -0
- package/templates/release-metrics.vl.json +98 -0
- package/templates/service-topology.mmd +47 -0
- package/templates/status-report.md +32 -0
- package/templates/system-map.svg +53 -0
- package/templates/timeseries.vl.json +71 -0
- package/templates/tsx-interactive-counter.tsx +19 -0
- package/templates/tsx-status-report.tsx +31 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AbstractMermaidTokenBuilder,
|
|
3
|
+
CommonValueConverter,
|
|
4
|
+
CynefinGrammarGeneratedModule,
|
|
5
|
+
EmptyFileSystem,
|
|
6
|
+
MermaidGeneratedSharedModule,
|
|
7
|
+
__name,
|
|
8
|
+
createDefaultCoreModule,
|
|
9
|
+
createDefaultSharedCoreModule,
|
|
10
|
+
inject
|
|
11
|
+
} from "./markdown-dz3z5w30.js";
|
|
12
|
+
|
|
13
|
+
// node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/chunk-OSBZ3O6U.mjs
|
|
14
|
+
var CynefinTokenBuilder = class extends AbstractMermaidTokenBuilder {
|
|
15
|
+
static {
|
|
16
|
+
__name(this, "CynefinTokenBuilder");
|
|
17
|
+
}
|
|
18
|
+
constructor() {
|
|
19
|
+
super(["cynefin-beta"]);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
var CynefinModule = {
|
|
23
|
+
parser: {
|
|
24
|
+
TokenBuilder: /* @__PURE__ */ __name(() => new CynefinTokenBuilder, "TokenBuilder"),
|
|
25
|
+
ValueConverter: /* @__PURE__ */ __name(() => new CommonValueConverter, "ValueConverter")
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
function createCynefinServices(context = EmptyFileSystem) {
|
|
29
|
+
const shared = inject(createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule);
|
|
30
|
+
const Cynefin = inject(createDefaultCoreModule({ shared }), CynefinGrammarGeneratedModule, CynefinModule);
|
|
31
|
+
shared.ServiceRegistry.register(Cynefin);
|
|
32
|
+
return { shared, Cynefin };
|
|
33
|
+
}
|
|
34
|
+
__name(createCynefinServices, "createCynefinServices");
|
|
35
|
+
|
|
36
|
+
export { CynefinModule, createCynefinServices };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__name
|
|
3
|
+
} from "./markdown-1s5vwkf2.js";
|
|
4
|
+
|
|
5
|
+
// node_modules/mermaid/dist/chunks/mermaid.core/chunk-JWPE2WC7.mjs
|
|
6
|
+
function populateCommonDb(ast, db) {
|
|
7
|
+
if (ast.accDescr) {
|
|
8
|
+
db.setAccDescription?.(ast.accDescr);
|
|
9
|
+
}
|
|
10
|
+
if (ast.accTitle) {
|
|
11
|
+
db.setAccTitle?.(ast.accTitle);
|
|
12
|
+
}
|
|
13
|
+
if (ast.title) {
|
|
14
|
+
db.setDiagramTitle?.(ast.title);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
__name(populateCommonDb, "populateCommonDb");
|
|
18
|
+
|
|
19
|
+
export { populateCommonDb };
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getConfig2
|
|
3
|
+
} from "./markdown-92n37gd4.js";
|
|
4
|
+
import {
|
|
5
|
+
__name
|
|
6
|
+
} from "./markdown-1s5vwkf2.js";
|
|
7
|
+
|
|
8
|
+
// node_modules/mermaid/dist/chunks/mermaid.core/chunk-W5SLKNZC.mjs
|
|
9
|
+
var solidStateFill = /* @__PURE__ */ __name((color) => {
|
|
10
|
+
const { handDrawnSeed } = getConfig2();
|
|
11
|
+
return {
|
|
12
|
+
fill: color,
|
|
13
|
+
hachureAngle: 120,
|
|
14
|
+
hachureGap: 4,
|
|
15
|
+
fillWeight: 2,
|
|
16
|
+
roughness: 0.7,
|
|
17
|
+
stroke: color,
|
|
18
|
+
seed: handDrawnSeed
|
|
19
|
+
};
|
|
20
|
+
}, "solidStateFill");
|
|
21
|
+
var compileStyles = /* @__PURE__ */ __name((node) => {
|
|
22
|
+
const stylesMap = styles2Map([
|
|
23
|
+
...node.cssCompiledStyles || [],
|
|
24
|
+
...node.cssStyles || [],
|
|
25
|
+
...node.labelStyle || []
|
|
26
|
+
]);
|
|
27
|
+
return { stylesMap, stylesArray: [...stylesMap] };
|
|
28
|
+
}, "compileStyles");
|
|
29
|
+
var styles2Map = /* @__PURE__ */ __name((styles) => {
|
|
30
|
+
const styleMap = /* @__PURE__ */ new Map;
|
|
31
|
+
styles.forEach((style) => {
|
|
32
|
+
const [key, value] = style.split(":");
|
|
33
|
+
styleMap.set(key.trim(), value?.trim());
|
|
34
|
+
});
|
|
35
|
+
return styleMap;
|
|
36
|
+
}, "styles2Map");
|
|
37
|
+
var isLabelStyle = /* @__PURE__ */ __name((key) => {
|
|
38
|
+
return key === "color" || key === "font-size" || key === "font-family" || key === "font-weight" || key === "font-style" || key === "text-decoration" || key === "text-align" || key === "text-transform" || key === "line-height" || key === "letter-spacing" || key === "word-spacing" || key === "text-shadow" || key === "text-overflow" || key === "white-space" || key === "word-wrap" || key === "word-break" || key === "overflow-wrap" || key === "hyphens";
|
|
39
|
+
}, "isLabelStyle");
|
|
40
|
+
var styles2String = /* @__PURE__ */ __name((node) => {
|
|
41
|
+
const { stylesArray } = compileStyles(node);
|
|
42
|
+
const labelStyles = [];
|
|
43
|
+
const nodeStyles = [];
|
|
44
|
+
const borderStyles = [];
|
|
45
|
+
const backgroundStyles = [];
|
|
46
|
+
stylesArray.forEach((style) => {
|
|
47
|
+
const key = style[0];
|
|
48
|
+
if (isLabelStyle(key)) {
|
|
49
|
+
labelStyles.push(style.join(":") + " !important");
|
|
50
|
+
} else {
|
|
51
|
+
nodeStyles.push(style.join(":") + " !important");
|
|
52
|
+
if (key.includes("stroke")) {
|
|
53
|
+
borderStyles.push(style.join(":") + " !important");
|
|
54
|
+
}
|
|
55
|
+
if (key === "fill") {
|
|
56
|
+
backgroundStyles.push(style.join(":") + " !important");
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
return {
|
|
61
|
+
labelStyles: labelStyles.join(";"),
|
|
62
|
+
nodeStyles: nodeStyles.join(";"),
|
|
63
|
+
stylesArray,
|
|
64
|
+
borderStyles,
|
|
65
|
+
backgroundStyles
|
|
66
|
+
};
|
|
67
|
+
}, "styles2String");
|
|
68
|
+
var userNodeOverrides = /* @__PURE__ */ __name((node, options) => {
|
|
69
|
+
const { themeVariables, handDrawnSeed } = getConfig2();
|
|
70
|
+
const { nodeBorder, mainBkg } = themeVariables;
|
|
71
|
+
const { stylesMap } = compileStyles(node);
|
|
72
|
+
const result = Object.assign({
|
|
73
|
+
roughness: 0.7,
|
|
74
|
+
fill: stylesMap.get("fill") || mainBkg,
|
|
75
|
+
fillStyle: "hachure",
|
|
76
|
+
fillWeight: 4,
|
|
77
|
+
hachureGap: 5.2,
|
|
78
|
+
stroke: stylesMap.get("stroke") || nodeBorder,
|
|
79
|
+
seed: handDrawnSeed,
|
|
80
|
+
strokeWidth: stylesMap.get("stroke-width")?.replace("px", "") || 1.3,
|
|
81
|
+
fillLineDash: [0, 0],
|
|
82
|
+
strokeLineDash: getStrokeDashArray(stylesMap.get("stroke-dasharray"))
|
|
83
|
+
}, options);
|
|
84
|
+
return result;
|
|
85
|
+
}, "userNodeOverrides");
|
|
86
|
+
var getStrokeDashArray = /* @__PURE__ */ __name((strokeDasharrayStyle) => {
|
|
87
|
+
if (!strokeDasharrayStyle) {
|
|
88
|
+
return [0, 0];
|
|
89
|
+
}
|
|
90
|
+
const dashArray = strokeDasharrayStyle.trim().split(/\s+/).map(Number);
|
|
91
|
+
if (dashArray.length === 1) {
|
|
92
|
+
const val = isNaN(dashArray[0]) ? 0 : dashArray[0];
|
|
93
|
+
return [val, val];
|
|
94
|
+
}
|
|
95
|
+
const first = isNaN(dashArray[0]) ? 0 : dashArray[0];
|
|
96
|
+
const second = isNaN(dashArray[1]) ? 0 : dashArray[1];
|
|
97
|
+
return [first, second];
|
|
98
|
+
}, "getStrokeDashArray");
|
|
99
|
+
|
|
100
|
+
export { solidStateFill, compileStyles, isLabelStyle, styles2String, userNodeOverrides };
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__name
|
|
3
|
+
} from "./markdown-dz3z5w30.js";
|
|
4
|
+
import {
|
|
5
|
+
__require
|
|
6
|
+
} from "./markdown-809k7q41.js";
|
|
7
|
+
|
|
8
|
+
// node_modules/@mermaid-js/parser/dist/mermaid-parser.core.mjs
|
|
9
|
+
var parsers = {};
|
|
10
|
+
var initializers = {
|
|
11
|
+
info: /* @__PURE__ */ __name(async () => {
|
|
12
|
+
const { createInfoServices: createInfoServices2 } = await import("./info-DKCQHKI2-mpt80jd3.js");
|
|
13
|
+
const parser = createInfoServices2().Info.parser.LangiumParser;
|
|
14
|
+
parsers.info = parser;
|
|
15
|
+
}, "info"),
|
|
16
|
+
packet: /* @__PURE__ */ __name(async () => {
|
|
17
|
+
const { createPacketServices: createPacketServices2 } = await import("./packet-7NZHBO7P-xppm5913.js");
|
|
18
|
+
const parser = createPacketServices2().Packet.parser.LangiumParser;
|
|
19
|
+
parsers.packet = parser;
|
|
20
|
+
}, "packet"),
|
|
21
|
+
pie: /* @__PURE__ */ __name(async () => {
|
|
22
|
+
const { createPieServices: createPieServices2 } = await import("./pie-RZYD4A2V-hnbxk152.js");
|
|
23
|
+
const parser = createPieServices2().Pie.parser.LangiumParser;
|
|
24
|
+
parsers.pie = parser;
|
|
25
|
+
}, "pie"),
|
|
26
|
+
treeView: /* @__PURE__ */ __name(async () => {
|
|
27
|
+
const { createTreeViewServices: createTreeViewServices2 } = await import("./treeView-QDETBFTQ-hcx7n0vt.js");
|
|
28
|
+
const parser = createTreeViewServices2().TreeView.parser.LangiumParser;
|
|
29
|
+
parsers.treeView = parser;
|
|
30
|
+
}, "treeView"),
|
|
31
|
+
architecture: /* @__PURE__ */ __name(async () => {
|
|
32
|
+
const { createArchitectureServices: createArchitectureServices2 } = await import("./architecture-TIHT7OUA-cvdjn7dt.js");
|
|
33
|
+
const parser = createArchitectureServices2().Architecture.parser.LangiumParser;
|
|
34
|
+
parsers.architecture = parser;
|
|
35
|
+
}, "architecture"),
|
|
36
|
+
gitGraph: /* @__PURE__ */ __name(async () => {
|
|
37
|
+
const { createGitGraphServices: createGitGraphServices2 } = await import("./gitGraph-TEB2WS4Q-j6kw0naa.js");
|
|
38
|
+
const parser = createGitGraphServices2().GitGraph.parser.LangiumParser;
|
|
39
|
+
parsers.gitGraph = parser;
|
|
40
|
+
}, "gitGraph"),
|
|
41
|
+
eventmodeling: /* @__PURE__ */ __name(async () => {
|
|
42
|
+
const { createEventModelingServices: createEventModelingServices2 } = await import("./eventmodeling-45OFAUF4-sg07qr0c.js");
|
|
43
|
+
const parser = createEventModelingServices2().EventModel.parser.LangiumParser;
|
|
44
|
+
parsers.eventmodeling = parser;
|
|
45
|
+
}, "eventmodeling"),
|
|
46
|
+
radar: /* @__PURE__ */ __name(async () => {
|
|
47
|
+
const { createRadarServices: createRadarServices2 } = await import("./radar-I7S5WNFK-ewqd27se.js");
|
|
48
|
+
const parser = createRadarServices2().Radar.parser.LangiumParser;
|
|
49
|
+
parsers.radar = parser;
|
|
50
|
+
}, "radar"),
|
|
51
|
+
railroad: /* @__PURE__ */ __name(async () => {
|
|
52
|
+
const { createRailroadServices: createRailroadServices2 } = await import("./railroad-3IZDKUUU-5hy4bdx3.js");
|
|
53
|
+
const parser = createRailroadServices2().Railroad.parser.LangiumParser;
|
|
54
|
+
parsers.railroad = parser;
|
|
55
|
+
}, "railroad"),
|
|
56
|
+
railroadEbnf: /* @__PURE__ */ __name(async () => {
|
|
57
|
+
const { createRailroadEbnfServices: createRailroadEbnfServices2 } = await import("./railroad-ebnf-EBAXGLYW-6b9c3zeh.js");
|
|
58
|
+
const parser = createRailroadEbnfServices2().RailroadEbnf.parser.LangiumParser;
|
|
59
|
+
parsers.railroadEbnf = parser;
|
|
60
|
+
}, "railroadEbnf"),
|
|
61
|
+
railroadAbnf: /* @__PURE__ */ __name(async () => {
|
|
62
|
+
const { createRailroadAbnfServices: createRailroadAbnfServices2 } = await import("./railroad-abnf-AHOZXSZD-bh5sxz0d.js");
|
|
63
|
+
const parser = createRailroadAbnfServices2().RailroadAbnf.parser.LangiumParser;
|
|
64
|
+
parsers.railroadAbnf = parser;
|
|
65
|
+
}, "railroadAbnf"),
|
|
66
|
+
railroadPeg: /* @__PURE__ */ __name(async () => {
|
|
67
|
+
const { createRailroadPegServices: createRailroadPegServices2 } = await import("./railroad-peg-LSFZ7HO6-avc8v39s.js");
|
|
68
|
+
const parser = createRailroadPegServices2().RailroadPeg.parser.LangiumParser;
|
|
69
|
+
parsers.railroadPeg = parser;
|
|
70
|
+
}, "railroadPeg"),
|
|
71
|
+
treemap: /* @__PURE__ */ __name(async () => {
|
|
72
|
+
const { createTreemapServices: createTreemapServices2 } = await import("./treemap-6X3UGDF4-av02skdw.js");
|
|
73
|
+
const parser = createTreemapServices2().Treemap.parser.LangiumParser;
|
|
74
|
+
parsers.treemap = parser;
|
|
75
|
+
}, "treemap"),
|
|
76
|
+
wardley: /* @__PURE__ */ __name(async () => {
|
|
77
|
+
const { createWardleyServices: createWardleyServices2 } = await import("./wardley-OPB4EBWU-njsp6e40.js");
|
|
78
|
+
const parser = createWardleyServices2().Wardley.parser.LangiumParser;
|
|
79
|
+
parsers.wardley = parser;
|
|
80
|
+
}, "wardley"),
|
|
81
|
+
cynefin: /* @__PURE__ */ __name(async () => {
|
|
82
|
+
const { createCynefinServices: createCynefinServices2 } = await import("./cynefin-VYW2F7L2-tqjv913d.js");
|
|
83
|
+
const parser = createCynefinServices2().Cynefin.parser.LangiumParser;
|
|
84
|
+
parsers.cynefin = parser;
|
|
85
|
+
}, "cynefin")
|
|
86
|
+
};
|
|
87
|
+
async function parse(diagramType, text) {
|
|
88
|
+
const initializer = initializers[diagramType];
|
|
89
|
+
if (!initializer) {
|
|
90
|
+
throw new Error(`Unknown diagram type: ${diagramType}`);
|
|
91
|
+
}
|
|
92
|
+
if (!parsers[diagramType]) {
|
|
93
|
+
await initializer();
|
|
94
|
+
}
|
|
95
|
+
const parser = parsers[diagramType];
|
|
96
|
+
const result = parser.parse(text);
|
|
97
|
+
if (result.lexerErrors.length > 0 || result.parserErrors.length > 0) {
|
|
98
|
+
throw new MermaidParseError(result);
|
|
99
|
+
}
|
|
100
|
+
return result.value;
|
|
101
|
+
}
|
|
102
|
+
__name(parse, "parse");
|
|
103
|
+
var MermaidParseError = class extends Error {
|
|
104
|
+
constructor(result) {
|
|
105
|
+
const lexerErrors = result.lexerErrors.map((err) => {
|
|
106
|
+
const line = err.line !== undefined && !isNaN(err.line) ? err.line : "?";
|
|
107
|
+
const column = err.column !== undefined && !isNaN(err.column) ? err.column : "?";
|
|
108
|
+
return `Lexer error on line ${line}, column ${column}: ${err.message}`;
|
|
109
|
+
}).join(`
|
|
110
|
+
`);
|
|
111
|
+
const parserErrors = result.parserErrors.map((err) => {
|
|
112
|
+
const line = err.token.startLine !== undefined && !isNaN(err.token.startLine) ? err.token.startLine : "?";
|
|
113
|
+
const column = err.token.startColumn !== undefined && !isNaN(err.token.startColumn) ? err.token.startColumn : "?";
|
|
114
|
+
return `Parse error on line ${line}, column ${column}: ${err.message}`;
|
|
115
|
+
}).join(`
|
|
116
|
+
`);
|
|
117
|
+
super(`Parsing failed: ${lexerErrors} ${parserErrors}`);
|
|
118
|
+
this.result = result;
|
|
119
|
+
}
|
|
120
|
+
static {
|
|
121
|
+
__name(this, "MermaidParseError");
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
export { parse, MermaidParseError };
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
// src/shared/contracts/renderers.ts
|
|
2
|
+
var RENDERERS = ["svg", "canvas"];
|
|
3
|
+
function isRenderer(value) {
|
|
4
|
+
return typeof value === "string" && RENDERERS.includes(value);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
// src/shared/html/policy.ts
|
|
8
|
+
var HTML_DENIED_ELEMENTS = [
|
|
9
|
+
"script",
|
|
10
|
+
"iframe",
|
|
11
|
+
"object",
|
|
12
|
+
"embed",
|
|
13
|
+
"form",
|
|
14
|
+
"link",
|
|
15
|
+
"meta",
|
|
16
|
+
"base",
|
|
17
|
+
"style"
|
|
18
|
+
];
|
|
19
|
+
var HTML_STRUCTURAL_GROUPS = {
|
|
20
|
+
headings: ["h1", "h2", "h3", "h4", "h5", "h6"],
|
|
21
|
+
tables: ["table"],
|
|
22
|
+
lists: ["ul", "ol"],
|
|
23
|
+
images: ["img"],
|
|
24
|
+
canvases: ["canvas"]
|
|
25
|
+
};
|
|
26
|
+
var HTML_URL_BEARING_ATTRIBUTES = {
|
|
27
|
+
img: ["src", "srcset"],
|
|
28
|
+
source: ["srcset"],
|
|
29
|
+
a: ["href"]
|
|
30
|
+
};
|
|
31
|
+
var HTML_ALLOWED_ANCHOR_SCHEMES = ["https:", "mailto:"];
|
|
32
|
+
var HTML_ALLOWED_IMAGE_SCHEMES = ["data:", "https:"];
|
|
33
|
+
function htmlUrlBearingElement(name) {
|
|
34
|
+
const normalized = name.toLowerCase();
|
|
35
|
+
return normalized in HTML_URL_BEARING_ATTRIBUTES ? normalized : null;
|
|
36
|
+
}
|
|
37
|
+
function isHtmlDeniedElement(name) {
|
|
38
|
+
return HTML_DENIED_ELEMENTS.includes(name.toLowerCase());
|
|
39
|
+
}
|
|
40
|
+
function isHtmlUrlBearingAttribute(elementName, attributeName) {
|
|
41
|
+
const element = htmlUrlBearingElement(elementName);
|
|
42
|
+
return element !== null && HTML_URL_BEARING_ATTRIBUTES[element].includes(attributeName.toLowerCase());
|
|
43
|
+
}
|
|
44
|
+
function isHtmlUrlAttributeName(attributeName) {
|
|
45
|
+
const normalized = attributeName.toLowerCase();
|
|
46
|
+
return Object.values(HTML_URL_BEARING_ATTRIBUTES).some((attributes) => attributes.includes(normalized));
|
|
47
|
+
}
|
|
48
|
+
function isHtmlEventHandlerAttribute(name) {
|
|
49
|
+
return name.toLowerCase().startsWith("on");
|
|
50
|
+
}
|
|
51
|
+
function isHtmlInlineStyleAttribute(name) {
|
|
52
|
+
return name.toLowerCase() === "style";
|
|
53
|
+
}
|
|
54
|
+
function isAllowedHtmlUrl(elementName, attributeName, value) {
|
|
55
|
+
const element = htmlUrlBearingElement(elementName);
|
|
56
|
+
if (element === null || !isHtmlUrlBearingAttribute(element, attributeName))
|
|
57
|
+
return false;
|
|
58
|
+
const trimmed = value.trim();
|
|
59
|
+
if (trimmed.startsWith("//"))
|
|
60
|
+
return false;
|
|
61
|
+
let url;
|
|
62
|
+
try {
|
|
63
|
+
url = new URL(trimmed, "https://facet.invalid/");
|
|
64
|
+
} catch {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
const scheme = url.protocol.toLowerCase();
|
|
68
|
+
switch (element) {
|
|
69
|
+
case "img":
|
|
70
|
+
case "source":
|
|
71
|
+
if (scheme === "data:")
|
|
72
|
+
return isImageDataUrl(url);
|
|
73
|
+
return HTML_ALLOWED_IMAGE_SCHEMES.includes(scheme);
|
|
74
|
+
case "a":
|
|
75
|
+
return HTML_ALLOWED_ANCHOR_SCHEMES.includes(scheme);
|
|
76
|
+
default: {
|
|
77
|
+
const _ = element;
|
|
78
|
+
return _;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function isImageDataUrl(url) {
|
|
83
|
+
const comma = url.pathname.indexOf(",");
|
|
84
|
+
if (comma < 0)
|
|
85
|
+
return false;
|
|
86
|
+
const metadata = url.pathname.slice(0, comma);
|
|
87
|
+
const separator = metadata.indexOf(";");
|
|
88
|
+
const encodedMediaType = (separator < 0 ? metadata : metadata.slice(0, separator)).trim();
|
|
89
|
+
let mediaType;
|
|
90
|
+
try {
|
|
91
|
+
mediaType = decodeURIComponent(encodedMediaType).toLowerCase();
|
|
92
|
+
} catch {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
const parts = mediaType.split("/");
|
|
96
|
+
return parts.length === 2 && parts[0] === "image" && parts[1].length > 0;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// src/shared/tsx/execution.ts
|
|
100
|
+
var TSX_EXECUTION_MODES = ["static", "interactive"];
|
|
101
|
+
function isTsxExecutionMode(value) {
|
|
102
|
+
return typeof value === "string" && TSX_EXECUTION_MODES.includes(value);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// src/gallery-web/frame/renderers/registry.ts
|
|
106
|
+
class FacetRenderError extends Error {
|
|
107
|
+
code;
|
|
108
|
+
constructor(message, code) {
|
|
109
|
+
super(message);
|
|
110
|
+
this.code = code;
|
|
111
|
+
this.name = "FacetRenderError";
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function decodeArtifactBytes(bytes) {
|
|
115
|
+
return new TextDecoder("utf-8", { fatal: false }).decode(bytes);
|
|
116
|
+
}
|
|
117
|
+
var RENDER_ERROR_ATTRIBUTE = "data-facet-error";
|
|
118
|
+
var RENDER_ERROR_ELEMENT = "facet-error";
|
|
119
|
+
function renderErrorMessage(value) {
|
|
120
|
+
if (value instanceof Error)
|
|
121
|
+
return value.message;
|
|
122
|
+
if (typeof value === "string")
|
|
123
|
+
return value;
|
|
124
|
+
if (typeof value === "object" && value !== null) {
|
|
125
|
+
const event = value;
|
|
126
|
+
for (const candidate of [event.reason, event.error, event.message]) {
|
|
127
|
+
if (candidate instanceof Error)
|
|
128
|
+
return candidate.message;
|
|
129
|
+
if (typeof candidate === "string")
|
|
130
|
+
return candidate;
|
|
131
|
+
if (typeof candidate === "object" && candidate !== null && "message" in candidate && typeof candidate.message === "string") {
|
|
132
|
+
return candidate.message;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return "interactive TSX runtime error";
|
|
137
|
+
}
|
|
138
|
+
function appendRenderError(container, value) {
|
|
139
|
+
const el = container.ownerDocument.createElement(RENDER_ERROR_ELEMENT);
|
|
140
|
+
el.setAttribute(RENDER_ERROR_ATTRIBUTE, "true");
|
|
141
|
+
el.textContent = renderErrorMessage(value);
|
|
142
|
+
container.appendChild(el);
|
|
143
|
+
}
|
|
144
|
+
var RENDERER_ROOT_SELECTOR = 'svg[data-facet-renderer-root="true"]';
|
|
145
|
+
var MARKED_ROOT_SELECTOR = '[data-facet-renderer-root="true"]';
|
|
146
|
+
var RENDERER_GRAPH_ATTRIBUTE = "data-facet-renderer-graph";
|
|
147
|
+
function safeSelectorElementsWithin(scope, selector) {
|
|
148
|
+
try {
|
|
149
|
+
return Array.from(scope.querySelectorAll(selector));
|
|
150
|
+
} catch {
|
|
151
|
+
return [];
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
function safeSelectorElements(selector) {
|
|
155
|
+
return safeSelectorElementsWithin(document, selector);
|
|
156
|
+
}
|
|
157
|
+
function hasMarkedRootAncestor(root, roots) {
|
|
158
|
+
let parent = root.parentElement;
|
|
159
|
+
while (parent !== null) {
|
|
160
|
+
if (roots.has(parent))
|
|
161
|
+
return true;
|
|
162
|
+
parent = parent.parentElement;
|
|
163
|
+
}
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
function nonDegenerateViewBox(svg) {
|
|
167
|
+
const parts = (svg.getAttribute("viewBox") ?? "").trim().split(/[\s,]+/).map((part) => Number.parseFloat(part));
|
|
168
|
+
if (parts.length !== 4)
|
|
169
|
+
return false;
|
|
170
|
+
const [, , width, height] = parts;
|
|
171
|
+
return Number.isFinite(width) && Number.isFinite(height) && width > 0 && height > 0;
|
|
172
|
+
}
|
|
173
|
+
function countPageShim() {
|
|
174
|
+
const markedCandidates = safeSelectorElements(RENDERER_ROOT_SELECTOR);
|
|
175
|
+
const candidateSet = new Set(markedCandidates);
|
|
176
|
+
const roots = markedCandidates.filter((root) => !hasMarkedRootAncestor(root, candidateSet));
|
|
177
|
+
const graphRoots = roots.filter((root) => root.getAttribute(RENDERER_GRAPH_ATTRIBUTE) === "true");
|
|
178
|
+
const allMarkedCandidates = safeSelectorElements(MARKED_ROOT_SELECTOR);
|
|
179
|
+
const markedSet = new Set(allMarkedCandidates);
|
|
180
|
+
const htmlRoots = allMarkedCandidates.filter((root) => root.nodeName.toLowerCase() !== "svg" && !hasMarkedRootAncestor(root, markedSet));
|
|
181
|
+
const html = htmlRoots.length === 0 ? undefined : {
|
|
182
|
+
rendererRootCount: htmlRoots.length,
|
|
183
|
+
headingCount: 0,
|
|
184
|
+
tableCount: 0,
|
|
185
|
+
listCount: 0,
|
|
186
|
+
imageCount: 0,
|
|
187
|
+
canvasCount: 0,
|
|
188
|
+
externalImageCount: 0
|
|
189
|
+
};
|
|
190
|
+
for (const root of htmlRoots) {
|
|
191
|
+
html.headingCount += safeSelectorElementsWithin(root, HTML_STRUCTURAL_GROUPS.headings.join(",")).length;
|
|
192
|
+
html.tableCount += safeSelectorElementsWithin(root, HTML_STRUCTURAL_GROUPS.tables.join(",")).length;
|
|
193
|
+
html.listCount += safeSelectorElementsWithin(root, HTML_STRUCTURAL_GROUPS.lists.join(",")).length;
|
|
194
|
+
const images = safeSelectorElementsWithin(root, HTML_STRUCTURAL_GROUPS.images.join(","));
|
|
195
|
+
html.imageCount += images.length;
|
|
196
|
+
html.externalImageCount += images.filter((image) => {
|
|
197
|
+
try {
|
|
198
|
+
return new URL(image.getAttribute("src") ?? "").protocol === "https:";
|
|
199
|
+
} catch {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
}).length;
|
|
203
|
+
html.canvasCount += safeSelectorElementsWithin(root, HTML_STRUCTURAL_GROUPS.canvases.join(",")).length;
|
|
204
|
+
}
|
|
205
|
+
const mermaidNodeCount = graphRoots.reduce((count, root) => count + safeSelectorElementsWithin(root, "g.node").length, 0);
|
|
206
|
+
const opaqueRegionCount = safeSelectorElements("*").filter((element) => element.nodeName.toLowerCase() === "canvas").length;
|
|
207
|
+
return {
|
|
208
|
+
rendererRootSvgCount: roots.length,
|
|
209
|
+
graphCount: graphRoots.length,
|
|
210
|
+
mermaidNodeCount,
|
|
211
|
+
visibleSvgCount: roots.filter(nonDegenerateViewBox).length,
|
|
212
|
+
opaqueRegionCount,
|
|
213
|
+
externalImageCount: html?.externalImageCount ?? 0,
|
|
214
|
+
errorCount: safeSelectorElements("[data-facet-error]").length,
|
|
215
|
+
...html === undefined ? {} : { html }
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
function createRendererRegistry(entries) {
|
|
219
|
+
const registry = new Map(entries);
|
|
220
|
+
return {
|
|
221
|
+
get(type) {
|
|
222
|
+
return registry.get(type);
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
async function dispatchRender(registry, ctx, payload) {
|
|
227
|
+
if (!isRenderer(payload.renderer)) {
|
|
228
|
+
throw new FacetRenderError(`Artifact renderer '${payload.renderer}' is not supported in this frame`, "invalid_request");
|
|
229
|
+
}
|
|
230
|
+
const renderer = registry.get(payload.artifactType);
|
|
231
|
+
if (renderer === undefined) {
|
|
232
|
+
throw new FacetRenderError(`Artifact type '${payload.artifactType}' has no renderer in this frame`, "unsupported_reserved_type");
|
|
233
|
+
}
|
|
234
|
+
if (payload.artifactType === "tsx" && !isTsxExecutionMode(payload.execution)) {
|
|
235
|
+
throw new FacetRenderError("TSX artifact payload is missing execution", "invalid_request");
|
|
236
|
+
}
|
|
237
|
+
if (payload.artifactType !== "tsx" && payload.execution === "interactive") {
|
|
238
|
+
throw new FacetRenderError("Interactive execution is only supported for TSX artifacts", "invalid_request");
|
|
239
|
+
}
|
|
240
|
+
await renderer(ctx, payload.bytes, payload.renderer, payload.execution);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
export { isTsxExecutionMode, isRenderer, isHtmlDeniedElement, isHtmlUrlBearingAttribute, isHtmlUrlAttributeName, isHtmlEventHandlerAttribute, isHtmlInlineStyleAttribute, isAllowedHtmlUrl, FacetRenderError, decodeArtifactBytes, RENDER_ERROR_ATTRIBUTE, appendRenderError, countPageShim, createRendererRegistry, dispatchRender };
|