@transitrix/diagrams 1.0.0 → 1.0.1
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 +21 -21
- package/README.md +47 -47
- package/dist/__tests__/edge-path.test.js +8 -0
- package/dist/activity-card/__tests__/example.test.js +20 -1
- package/dist/activity-card/__tests__/layout.test.js +102 -11
- package/dist/activity-card/__tests__/resolver.test.js +139 -6
- package/dist/activity-card/index.d.ts +1 -1
- package/dist/activity-card/layout.d.ts +1 -1
- package/dist/activity-card/layout.js +220 -103
- package/dist/activity-card/resolver.js +107 -26
- package/dist/activity-card/types.d.ts +150 -27
- package/dist/activity-card/validate.js +3 -0
- package/dist/actor/__tests__/validate.test.js +63 -31
- package/dist/actor/index.d.ts +1 -1
- package/dist/actor/index.js +1 -1
- package/dist/actor/types.d.ts +7 -3
- package/dist/actor/types.js +17 -3
- package/dist/actor/validate.js +55 -26
- package/dist/assertion/types.d.ts +3 -1
- package/dist/assertion/types.js +1 -1
- package/dist/change/__tests__/validate.test.js +40 -34
- package/dist/change/index.d.ts +1 -0
- package/dist/change/types.d.ts +1 -1
- package/dist/change/types.js +2 -2
- package/dist/change/validate.d.ts +6 -1
- package/dist/change/validate.js +68 -41
- package/dist/compliance/__tests__/classify.test.js +34 -0
- package/dist/compliance/__tests__/coverage-metric.test.js +146 -46
- package/dist/compliance/__tests__/html.test.js +2 -2
- package/dist/compliance/__tests__/impact.test.js +311 -6
- package/dist/compliance/classify.d.ts +6 -0
- package/dist/compliance/classify.js +9 -1
- package/dist/compliance/coverage-metric.d.ts +31 -11
- package/dist/compliance/coverage-metric.js +149 -39
- package/dist/compliance/html.js +77 -74
- package/dist/compliance/impact.d.ts +77 -16
- package/dist/compliance/impact.js +193 -25
- package/dist/compliance/index.d.ts +2 -2
- package/dist/compliance/index.js +1 -1
- package/dist/compliance/markdown.js +1 -0
- package/dist/compliance/types.d.ts +25 -6
- package/dist/edge-path.d.ts +8 -4
- package/dist/edge-path.js +11 -6
- package/dist/factor/__tests__/validate.test.js +74 -45
- package/dist/factor/index.d.ts +3 -2
- package/dist/factor/index.js +1 -1
- package/dist/factor/types.d.ts +4 -7
- package/dist/factor/types.js +10 -5
- package/dist/factor/validate.d.ts +6 -1
- package/dist/factor/validate.js +68 -50
- package/dist/fgca/__tests__/resolver.test.js +185 -0
- package/dist/fgca/index.d.ts +2 -0
- package/dist/fgca/index.js +1 -0
- package/dist/fgca/resolver.d.ts +49 -0
- package/dist/fgca/resolver.js +124 -0
- package/dist/goals/index.d.ts +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -0
- package/dist/process-blueprint/__tests__/layout.test.js +37 -0
- package/dist/process-blueprint/layout.js +5 -1
- package/dist/process-blueprint/types.d.ts +22 -1
- package/dist/stakeholder/__tests__/validate.test.js +49 -47
- package/dist/stakeholder/index.d.ts +1 -0
- package/dist/stakeholder/types.d.ts +3 -4
- package/dist/stakeholder/types.js +2 -3
- package/dist/stakeholder/validate.d.ts +6 -1
- package/dist/stakeholder/validate.js +71 -50
- package/dist/target-state/__tests__/validate.test.js +43 -27
- package/dist/target-state/index.d.ts +2 -0
- package/dist/target-state/index.js +1 -0
- package/dist/target-state/types.d.ts +6 -1
- package/dist/target-state/types.js +8 -7
- package/dist/target-state/validate.d.ts +6 -1
- package/dist/target-state/validate.js +69 -45
- package/dist/theme/themes.js +69 -69
- package/dist/webview/__tests__/entry.test.js +11 -11
- package/dist/webview/render-activities.d.ts +3 -1
- package/dist/webview/render-activities.js +2 -2
- package/dist/webview/render-activity-card.js +104 -77
- package/dist/webview/render-fgca.d.ts +4 -0
- package/dist/webview/render-fgca.js +2 -5
- package/dist/webview/render-goals.d.ts +1 -0
- package/dist/webview/render-goals.js +15 -15
- package/dist/webview/render-process-blueprint.js +10 -10
- package/package.json +40 -40
- package/src/__tests__/edge-path.test.ts +58 -46
- package/src/__tests__/scope.test.ts +27 -27
- package/src/__tests__/yaml-normalize.test.ts +158 -158
- package/src/activities/__tests__/cpm.test.ts +164 -164
- package/src/activities/__tests__/gantt.test.ts +245 -245
- package/src/activities/__tests__/layout.test.ts +112 -112
- package/src/activities/__tests__/validate.test.ts +409 -409
- package/src/activities/cpm.ts +95 -95
- package/src/activities/gantt.ts +276 -276
- package/src/activities/index.ts +28 -28
- package/src/activities/layout.ts +112 -112
- package/src/activities/types.ts +148 -148
- package/src/activities/validate.ts +357 -357
- package/src/activity-card/__tests__/example.test.ts +85 -66
- package/src/activity-card/__tests__/layout.test.ts +169 -63
- package/src/activity-card/__tests__/resolver.test.ts +307 -161
- package/src/activity-card/__tests__/validate.test.ts +131 -131
- package/src/activity-card/index.ts +38 -32
- package/src/activity-card/layout.ts +324 -194
- package/src/activity-card/resolver.ts +415 -337
- package/src/activity-card/types.ts +376 -237
- package/src/activity-card/validate.ts +162 -158
- package/src/actor/__tests__/validate.test.ts +70 -31
- package/src/actor/index.ts +1 -1
- package/src/actor/types.ts +21 -7
- package/src/actor/validate.ts +59 -27
- package/src/applications/__tests__/validate.test.ts +256 -256
- package/src/applications/index.ts +11 -11
- package/src/applications/types.ts +43 -43
- package/src/applications/validate.ts +131 -131
- package/src/assertion/__tests__/example.test.ts +37 -37
- package/src/assertion/__tests__/validate.test.ts +142 -142
- package/src/assertion/index.ts +12 -12
- package/src/assertion/types.ts +60 -58
- package/src/assertion/validate.ts +145 -145
- package/src/blocks/__tests__/layout.test.ts +169 -169
- package/src/blocks/__tests__/validate.test.ts +260 -260
- package/src/blocks/index.ts +17 -17
- package/src/blocks/layout.ts +186 -186
- package/src/blocks/types.ts +62 -62
- package/src/blocks/validate.ts +206 -206
- package/src/capability-map/__tests__/validate.test.ts +238 -238
- package/src/capability-map/index.ts +8 -8
- package/src/capability-map/types.ts +29 -29
- package/src/capability-map/validate.ts +127 -127
- package/src/change/__tests__/validate.test.ts +43 -34
- package/src/change/index.ts +1 -0
- package/src/change/types.ts +5 -3
- package/src/change/validate.ts +75 -43
- package/src/compliance/__tests__/classify.test.ts +64 -27
- package/src/compliance/__tests__/confidence.test.ts +98 -98
- package/src/compliance/__tests__/coverage-metric.test.ts +300 -188
- package/src/compliance/__tests__/demo-scenario.test.ts +273 -273
- package/src/compliance/__tests__/example.test.ts +57 -57
- package/src/compliance/__tests__/gap-report.test.ts +128 -128
- package/src/compliance/__tests__/html.test.ts +141 -141
- package/src/compliance/__tests__/impact.test.ts +840 -481
- package/src/compliance/__tests__/markdown.test.ts +94 -94
- package/src/compliance/__tests__/views.test.ts +64 -64
- package/src/compliance/classify.ts +100 -84
- package/src/compliance/confidence.ts +69 -69
- package/src/compliance/coverage-metric.ts +404 -263
- package/src/compliance/gap-report.ts +94 -94
- package/src/compliance/html.ts +298 -295
- package/src/compliance/impact.ts +861 -677
- package/src/compliance/index.ts +57 -56
- package/src/compliance/markdown.ts +136 -135
- package/src/compliance/reverse-index.ts +33 -33
- package/src/compliance/types.ts +136 -120
- package/src/compliance/views.ts +46 -46
- package/src/compliance-matrix/__tests__/build.test.ts +200 -200
- package/src/compliance-matrix/__tests__/example.test.ts +57 -57
- package/src/compliance-matrix/index.ts +11 -11
- package/src/compliance-matrix/types.ts +102 -102
- package/src/edge-path.ts +50 -44
- package/src/factor/__tests__/validate.test.ts +80 -45
- package/src/factor/index.ts +3 -7
- package/src/factor/types.ts +14 -18
- package/src/factor/validate.ts +77 -51
- package/src/fgca/__tests__/chain-table.test.ts +172 -172
- package/src/fgca/__tests__/layout.test.ts +179 -179
- package/src/fgca/__tests__/parse-canonical.test.ts +248 -248
- package/src/fgca/__tests__/preview-layout.test.ts +124 -124
- package/src/fgca/__tests__/resolver.test.ts +209 -0
- package/src/fgca/__tests__/validate.test.ts +142 -142
- package/src/fgca/chain-table.ts +225 -225
- package/src/fgca/index.ts +47 -45
- package/src/fgca/layout.ts +204 -204
- package/src/fgca/nodeTypes.ts +11 -11
- package/src/fgca/nodes/FGCAActivityNode.tsx +65 -65
- package/src/fgca/nodes/FGCAChangeNode.tsx +64 -64
- package/src/fgca/nodes/FGCAFactorNode.tsx +64 -64
- package/src/fgca/nodes/FGCAGoalNode.tsx +72 -72
- package/src/fgca/parse-canonical.ts +400 -400
- package/src/fgca/preview-layout.ts +217 -217
- package/src/fgca/resolver.ts +157 -0
- package/src/fgca/types.ts +50 -50
- package/src/fgca/validate.ts +126 -126
- package/src/geometry.ts +9 -9
- package/src/goals/__tests__/layout.test.ts +175 -175
- package/src/goals/__tests__/mutations.test.ts +111 -111
- package/src/goals/__tests__/parse-canonical.test.ts +145 -145
- package/src/goals/__tests__/validate.test.ts +202 -202
- package/src/goals/index.ts +20 -21
- package/src/goals/layout.ts +172 -172
- package/src/goals/mutations.ts +123 -123
- package/src/goals/parse-canonical.ts +286 -286
- package/src/goals/types.ts +85 -85
- package/src/goals/validate.ts +136 -136
- package/src/index.ts +28 -23
- package/src/process-blueprint/__tests__/compliance-lane.test.ts +320 -320
- package/src/process-blueprint/__tests__/layout.test.ts +240 -195
- package/src/process-blueprint/__tests__/validate.test.ts +310 -310
- package/src/process-blueprint/index.ts +31 -31
- package/src/process-blueprint/layout.ts +535 -531
- package/src/process-blueprint/types.ts +263 -242
- package/src/process-blueprint/validate.ts +181 -181
- package/src/process-map/__tests__/validate.test.ts +223 -223
- package/src/process-map/index.ts +10 -10
- package/src/process-map/types.ts +36 -36
- package/src/process-map/validate.ts +135 -135
- package/src/products/__tests__/validate.test.ts +239 -239
- package/src/products/index.ts +9 -9
- package/src/products/types.ts +31 -31
- package/src/products/validate.ts +112 -112
- package/src/repo-validate/__tests__/validate-repo.test.ts +149 -149
- package/src/repo-validate/index.ts +2 -2
- package/src/repo-validate/types.ts +50 -50
- package/src/repo-validate/validate-repo.ts +196 -196
- package/src/requirement/__tests__/example.test.ts +24 -24
- package/src/requirement/__tests__/validate.test.ts +96 -96
- package/src/requirement/index.ts +4 -4
- package/src/requirement/types.ts +35 -35
- package/src/requirement/validate.ts +92 -92
- package/src/scenarios/__tests__/validate.test.ts +209 -209
- package/src/scenarios/index.ts +15 -15
- package/src/scenarios/types.ts +37 -37
- package/src/scenarios/validate.ts +122 -122
- package/src/schema-version.ts +16 -16
- package/src/scope.ts +46 -46
- package/src/stakeholder/__tests__/validate.test.ts +51 -47
- package/src/stakeholder/index.ts +1 -0
- package/src/stakeholder/types.ts +7 -7
- package/src/stakeholder/validate.ts +79 -52
- package/src/target-state/__tests__/validate.test.ts +48 -27
- package/src/target-state/index.ts +2 -0
- package/src/target-state/types.ts +11 -7
- package/src/target-state/validate.ts +76 -46
- package/src/theme/index.ts +4 -4
- package/src/theme/themes.ts +237 -237
- package/src/theme/tokens.ts +133 -133
- package/src/typed-id.ts +56 -56
- package/src/validation-types.ts +36 -36
- package/src/webview/__tests__/entry-notations.test.ts +77 -77
- package/src/webview/__tests__/entry.test.ts +64 -64
- package/src/webview/__tests__/render-goals.test.ts +72 -72
- package/src/webview/entry.ts +292 -292
- package/src/webview/render-activities.ts +5 -3
- package/src/webview/render-activity-card.ts +266 -234
- package/src/webview/render-fgca.ts +6 -5
- package/src/webview/render-goals.ts +111 -110
- package/src/webview/render-process-blueprint.ts +207 -207
- package/src/webview/styles.css +322 -323
- package/src/yaml-normalize.ts +56 -56
- package/dist/element-envelope.d.ts +0 -15
- package/dist/element-envelope.js +0 -55
- package/dist/issues/__tests__/layout.test.js +0 -62
- package/dist/issues/__tests__/validate.test.d.ts +0 -1
- package/dist/issues/__tests__/validate.test.js +0 -82
- package/dist/issues/index.d.ts +0 -4
- package/dist/issues/index.js +0 -2
- package/dist/issues/layout.d.ts +0 -10
- package/dist/issues/layout.js +0 -82
- package/dist/issues/types.d.ts +0 -61
- package/dist/issues/types.js +0 -6
- package/dist/issues/validate.d.ts +0 -3
- package/dist/issues/validate.js +0 -143
- package/dist/webview/transitrix-render.css +0 -323
- package/dist/webview/transitrix-render.js +0 -6452
- package/dist/webview/transitrix-render.js.map +0 -7
- package/src/element-envelope.ts +0 -76
- /package/dist/{issues/__tests__/layout.test.d.ts → fgca/__tests__/resolver.test.d.ts} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/webview/entry.ts", "../../../../node_modules/js-yaml/dist/js-yaml.mjs", "../../src/activities/validate.ts", "../../src/activities/cpm.ts", "../../src/activities/layout.ts", "../../src/activity-card/validate.ts", "../../src/activity-card/layout.ts", "../../src/applications/validate.ts", "../../src/blocks/validate.ts", "../../src/blocks/layout.ts", "../../src/capability-map/validate.ts", "../../src/fgca/parse-canonical.ts", "../../src/goals/parse-canonical.ts", "../../src/process-blueprint/validate.ts", "../../src/process-blueprint/layout.ts", "../../src/process-map/validate.ts", "../../src/products/validate.ts", "../../src/scenarios/validate.ts", "../../src/yaml-normalize.ts", "../../src/edge-path.ts", "../../src/theme/tokens.ts", "../../src/theme/themes.ts", "../../src/webview/render-util.ts", "../../src/webview/render-activities.ts", "../../src/webview/render-activity-card.ts", "../../src/webview/render-applications.ts", "../../src/webview/render-blocks.ts", "../../src/webview/render-capability-map.ts", "../../src/fgca/preview-layout.ts", "../../src/webview/render-fgca.ts", "../../src/goals/layout.ts", "../../src/webview/render-goals.ts", "../../src/webview/render-process-blueprint.ts", "../../src/webview/render-process-map.ts", "../../src/webview/render-products.ts", "../../src/webview/render-scenarios.ts"],
|
|
4
|
-
"sourcesContent": ["/**\r\n * Browser-bundle entry point for the IntelliJ JCEF preview surface (and any\r\n * other host that wants the same in-browser API).\r\n *\r\n * Why: ADR 0001 picks JCEF + a bundled `@transitrix/diagrams` over a JVM-side\r\n * re-implementation. This module is the API contract between the JVM host\r\n * (which posts raw document text + the notation kind) and the rendering JS\r\n * (which parses, validates, and \u2014 Step 3+ \u2014 renders SVG). Centralising the\r\n * surface in one file means the JVM side only has to know about\r\n * `window.transitrix.render(kind, source)` regardless of which notation the\r\n * user opened.\r\n *\r\n * Step 2 scope: wire YAML parsing, dispatch to the right validator, surface\r\n * validation/parse errors in a structured JSON shape.\r\n * Step 3 scope: wire the `goals` SVG renderer so the bundle returns non-empty\r\n * `svg` for a valid goals document.\r\n * Step 4 scope (this PR): wire the remaining eleven notations \u2014 each one\r\n * validates the parsed YAML and, when valid, renders host-neutral markup\r\n * (SVG for the diagram notations, an HTML fragment for the catalogue\r\n * notations). The JVM host drops whatever `svg` carries into the DOM, so the\r\n * field name is historical \u2014 it transports any self-contained markup.\r\n */\r\nimport yaml from 'js-yaml';\r\n\r\nimport { validateActivities } from '../activities/index.js';\r\nimport type { ActivityDoc } from '../activities/index.js';\r\nimport { validateActivityCard } from '../activity-card/index.js';\r\nimport type { ActivityCardDoc } from '../activity-card/index.js';\r\nimport { validateApplicationsCatalogue } from '../applications/index.js';\r\nimport type { ApplicationsCatalogueFile } from '../applications/index.js';\r\nimport { validateNestedBlocks } from '../blocks/index.js';\r\nimport type { BlocksFile } from '../blocks/index.js';\r\nimport { validateCapabilityMap } from '../capability-map/index.js';\r\nimport type { CapabilityMapFile } from '../capability-map/index.js';\r\nimport { parseCanonicalFGCA, parseCanonicalFGA } from '../fgca/parse-canonical.js';\r\nimport { parseCanonicalGoals } from '../goals/parse-canonical.js';\r\nimport { validateProcessBlueprint } from '../process-blueprint/index.js';\r\nimport type { ProcessBlueprintFile } from '../process-blueprint/index.js';\r\nimport { validateProcessMap } from '../process-map/index.js';\r\nimport type { ProcessMapFile } from '../process-map/index.js';\r\nimport { validateProductsCatalogue } from '../products/index.js';\r\nimport type { ProductsCatalogueFile } from '../products/index.js';\r\nimport { validateScenario } from '../scenarios/index.js';\r\nimport type { ScenarioFile } from '../scenarios/index.js';\r\nimport { coerceDatesToIsoStrings } from '../yaml-normalize.js';\r\n\r\nimport { renderActivitiesSvg } from './render-activities.js';\r\nimport { renderActivityCardSvg } from './render-activity-card.js';\r\nimport { renderApplicationsHtml } from './render-applications.js';\r\nimport { renderBlocksSvg } from './render-blocks.js';\r\nimport { renderCapabilityMapHtml } from './render-capability-map.js';\r\nimport { renderFgcaSvg } from './render-fgca.js';\r\nimport { renderGoalsSvg } from './render-goals.js';\r\nimport { renderProcessBlueprintSvg } from './render-process-blueprint.js';\r\nimport { renderProcessMapHtml } from './render-process-map.js';\r\nimport { renderProductsHtml } from './render-products.js';\r\nimport { renderScenarioHtml } from './render-scenarios.js';\r\n\r\nexport interface RenderError {\r\n code: string;\r\n message: string;\r\n path?: string;\r\n}\r\n\r\nexport interface RenderWarning {\r\n code: string;\r\n message: string;\r\n path?: string;\r\n}\r\n\r\nexport type RenderStatus = 'ok' | 'error';\r\n\r\nexport interface RenderResult {\r\n status: RenderStatus;\r\n notation: string;\r\n /**\r\n * Self-contained markup for the rendered notation \u2014 an `<svg>` for the\r\n * diagram notations, an HTML `<section>` for the catalogue notations. Empty\r\n * on validation failure (the host shows the error panel instead). The field\r\n * name is historical; the JVM host injects whatever it carries into the DOM.\r\n */\r\n svg: string;\r\n errors: RenderError[];\r\n warnings: RenderWarning[];\r\n}\r\n\r\n/**\r\n * Notation kinds the host can request. Mirrors the `*.<kind>.<\u2026>` suffix\r\n * convention used by the VS Code extension's `activationEvents`. All twelve\r\n * are wired to their validator + renderer as of Step 4.\r\n */\r\nexport type NotationKind =\r\n | 'goals'\r\n | 'fgca'\r\n | 'fga'\r\n | 'activities'\r\n | 'activity-card'\r\n | 'applications'\r\n | 'products'\r\n | 'process-map'\r\n | 'process-blueprint'\r\n | 'scenarios'\r\n | 'capability-map'\r\n | 'blocks';\r\n\r\nconst SUPPORTED_KINDS: readonly NotationKind[] = [\r\n 'goals',\r\n 'fgca',\r\n 'fga',\r\n 'activities',\r\n 'activity-card',\r\n 'applications',\r\n 'products',\r\n 'process-map',\r\n 'process-blueprint',\r\n 'scenarios',\r\n 'capability-map',\r\n 'blocks',\r\n];\r\n\r\nconst VERSION = '0.1.0';\r\n\r\nfunction emptyResult(notation: string, status: RenderStatus): RenderResult {\r\n return { status, notation, svg: '', errors: [], warnings: [] };\r\n}\r\n\r\nfunction errorResult(notation: string, code: string, message: string, path?: string): RenderResult {\r\n const r = emptyResult(notation, 'error');\r\n r.errors.push(path !== undefined ? { code, message, path } : { code, message });\r\n return r;\r\n}\r\n\r\nfunction parseYaml(source: string): { doc?: unknown; error?: string } {\r\n try {\r\n // Coerce native `Date`s (bare `2026-06-01` per YAML 1.1) back to ISO\r\n // strings before validation \u2014 every notation validator expects string\r\n // dates, and the VS Code previews apply the same normalisation. Without\r\n // it the canonical-minus-quotes form would falsely fail shape checks.\r\n return { doc: coerceDatesToIsoStrings(yaml.load(source)) };\r\n } catch (e: unknown) {\r\n return { error: e instanceof Error ? e.message : String(e) };\r\n }\r\n}\r\n\r\ninterface ValidationLike {\r\n valid: boolean;\r\n errors: RenderError[];\r\n warnings: RenderWarning[];\r\n}\r\n\r\n/**\r\n * Shared shape for the validate-then-render notations: copy the validator's\r\n * errors/warnings into the result, and render markup only once the document is\r\n * valid. `renderMarkup` is a thunk so the (type-asserted) render call never\r\n * runs against a document the validator rejected.\r\n */\r\nfunction renderFromValidation(\r\n kind: NotationKind,\r\n result: ValidationLike,\r\n renderMarkup: () => string,\r\n): RenderResult {\r\n const r = emptyResult(kind, result.valid ? 'ok' : 'error');\r\n r.errors.push(...result.errors);\r\n r.warnings.push(...result.warnings);\r\n if (result.valid) {\r\n r.svg = renderMarkup();\r\n }\r\n return r;\r\n}\r\n\r\nfunction dispatchValidate(kind: NotationKind, doc: unknown): RenderResult {\r\n switch (kind) {\r\n case 'goals': {\r\n const v = parseCanonicalGoals(doc);\r\n const r = emptyResult('goals', v.valid ? 'ok' : 'error');\r\n r.errors.push(...v.errors);\r\n r.warnings.push(...v.warnings);\r\n if (v.valid && v.parsed) {\r\n const meta = (doc ?? {}) as { name?: unknown };\r\n const treeName = typeof meta.name === 'string' ? meta.name : '';\r\n r.svg = renderGoalsSvg(v.parsed, { treeName });\r\n }\r\n return r;\r\n }\r\n // FGCA and FGA share the canonical parse + renderer; only the layer\r\n // visibility differs (FGA collapses the Change column). Both carry the\r\n // parsed `FGCADoc` on the result's `parsed` field when valid.\r\n case 'fgca': {\r\n const v = parseCanonicalFGCA(doc);\r\n const r = emptyResult('fgca', v.valid ? 'ok' : 'error');\r\n r.errors.push(...v.errors);\r\n r.warnings.push(...v.warnings);\r\n if (v.valid && v.parsed) {\r\n r.svg = renderFgcaSvg(v.parsed, { variant: 'fgca' });\r\n }\r\n return r;\r\n }\r\n case 'fga': {\r\n const v = parseCanonicalFGA(doc);\r\n const r = emptyResult('fga', v.valid ? 'ok' : 'error');\r\n r.errors.push(...v.errors);\r\n r.warnings.push(...v.warnings);\r\n if (v.valid && v.parsed) {\r\n r.svg = renderFgcaSvg(v.parsed, { variant: 'fga' });\r\n }\r\n return r;\r\n }\r\n case 'activities':\r\n return renderFromValidation('activities', validateActivities(doc), () =>\r\n renderActivitiesSvg(doc as ActivityDoc),\r\n );\r\n case 'activity-card':\r\n return renderFromValidation('activity-card', validateActivityCard(doc), () =>\r\n renderActivityCardSvg(doc as ActivityCardDoc),\r\n );\r\n case 'process-blueprint':\r\n return renderFromValidation('process-blueprint', validateProcessBlueprint(doc), () =>\r\n renderProcessBlueprintSvg(doc as ProcessBlueprintFile),\r\n );\r\n case 'blocks':\r\n return renderFromValidation('blocks', validateNestedBlocks(doc), () =>\r\n renderBlocksSvg(doc as BlocksFile),\r\n );\r\n // Catalogue notations render an HTML fragment from the header nested under\r\n // their top-level wrapper key (`<thing>_catalogue` / `scenario` / \u2026).\r\n case 'applications':\r\n return renderFromValidation('applications', validateApplicationsCatalogue(doc), () =>\r\n renderApplicationsHtml((doc as ApplicationsCatalogueFile).applications_catalogue),\r\n );\r\n case 'products':\r\n return renderFromValidation('products', validateProductsCatalogue(doc), () =>\r\n renderProductsHtml((doc as ProductsCatalogueFile).products_catalogue),\r\n );\r\n case 'process-map':\r\n return renderFromValidation('process-map', validateProcessMap(doc), () =>\r\n renderProcessMapHtml((doc as ProcessMapFile).process_map),\r\n );\r\n case 'scenarios':\r\n return renderFromValidation('scenarios', validateScenario(doc), () =>\r\n renderScenarioHtml((doc as ScenarioFile).scenario),\r\n );\r\n case 'capability-map':\r\n return renderFromValidation('capability-map', validateCapabilityMap(doc), () =>\r\n renderCapabilityMapHtml((doc as CapabilityMapFile).capability_map),\r\n );\r\n default:\r\n return errorResult(\r\n kind,\r\n 'NOTATION-NOT-WIRED',\r\n `Notation '${kind}' is not wired into the IntelliJ bundle yet.`,\r\n );\r\n }\r\n}\r\n\r\nexport function render(notationKind: string, source: string): RenderResult {\r\n if (typeof notationKind !== 'string' || notationKind.length === 0) {\r\n return errorResult('', 'KIND-MISSING', 'notationKind is required');\r\n }\r\n if (typeof source !== 'string') {\r\n return errorResult(notationKind, 'SOURCE-INVALID', 'source must be a string');\r\n }\r\n if (!SUPPORTED_KINDS.includes(notationKind as NotationKind)) {\r\n return errorResult(\r\n notationKind,\r\n 'KIND-UNKNOWN',\r\n `Unknown notation kind: '${notationKind}'. Expected one of: ${SUPPORTED_KINDS.join(', ')}.`,\r\n );\r\n }\r\n const parsed = parseYaml(source);\r\n if (parsed.error !== undefined) {\r\n return errorResult(notationKind, 'YAML-PARSE', parsed.error);\r\n }\r\n return dispatchValidate(notationKind as NotationKind, parsed.doc);\r\n}\r\n\r\nexport const api = {\r\n version: VERSION,\r\n supportedKinds: SUPPORTED_KINDS,\r\n render,\r\n};\r\n\r\nexport type TransitrixWebviewApi = typeof api;\r\n\r\n// Install the API on `window.transitrix` when running in a browser-ish host\r\n// (JCEF qualifies). In a Node/Vitest context `window` is undefined and the\r\n// install is a no-op \u2014 the named exports remain available for unit tests.\r\ndeclare const window: { transitrix?: TransitrixWebviewApi } | undefined;\r\nif (typeof window !== 'undefined') {\r\n (window as { transitrix?: TransitrixWebviewApi }).transitrix = api;\r\n}\r\n\r\nexport default api;\r\n", "\n/*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT */\nfunction isNothing(subject) {\n return (typeof subject === 'undefined') || (subject === null);\n}\n\n\nfunction isObject(subject) {\n return (typeof subject === 'object') && (subject !== null);\n}\n\n\nfunction toArray(sequence) {\n if (Array.isArray(sequence)) return sequence;\n else if (isNothing(sequence)) return [];\n\n return [ sequence ];\n}\n\n\nfunction extend(target, source) {\n var index, length, key, sourceKeys;\n\n if (source) {\n sourceKeys = Object.keys(source);\n\n for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n key = sourceKeys[index];\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n\nfunction repeat(string, count) {\n var result = '', cycle;\n\n for (cycle = 0; cycle < count; cycle += 1) {\n result += string;\n }\n\n return result;\n}\n\n\nfunction isNegativeZero(number) {\n return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);\n}\n\n\nvar isNothing_1 = isNothing;\nvar isObject_1 = isObject;\nvar toArray_1 = toArray;\nvar repeat_1 = repeat;\nvar isNegativeZero_1 = isNegativeZero;\nvar extend_1 = extend;\n\nvar common = {\n\tisNothing: isNothing_1,\n\tisObject: isObject_1,\n\ttoArray: toArray_1,\n\trepeat: repeat_1,\n\tisNegativeZero: isNegativeZero_1,\n\textend: extend_1\n};\n\n// YAML error class. http://stackoverflow.com/questions/8458984\n\n\nfunction formatError(exception, compact) {\n var where = '', message = exception.reason || '(unknown reason)';\n\n if (!exception.mark) return message;\n\n if (exception.mark.name) {\n where += 'in \"' + exception.mark.name + '\" ';\n }\n\n where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')';\n\n if (!compact && exception.mark.snippet) {\n where += '\\n\\n' + exception.mark.snippet;\n }\n\n return message + ' ' + where;\n}\n\n\nfunction YAMLException$1(reason, mark) {\n // Super constructor\n Error.call(this);\n\n this.name = 'YAMLException';\n this.reason = reason;\n this.mark = mark;\n this.message = formatError(this, false);\n\n // Include stack trace in error object\n if (Error.captureStackTrace) {\n // Chrome and NodeJS\n Error.captureStackTrace(this, this.constructor);\n } else {\n // FF, IE 10+ and Safari 6+. Fallback for others\n this.stack = (new Error()).stack || '';\n }\n}\n\n\n// Inherit from Error\nYAMLException$1.prototype = Object.create(Error.prototype);\nYAMLException$1.prototype.constructor = YAMLException$1;\n\n\nYAMLException$1.prototype.toString = function toString(compact) {\n return this.name + ': ' + formatError(this, compact);\n};\n\n\nvar exception = YAMLException$1;\n\n// get snippet for a single line, respecting maxLength\nfunction getLine(buffer, lineStart, lineEnd, position, maxLineLength) {\n var head = '';\n var tail = '';\n var maxHalfLength = Math.floor(maxLineLength / 2) - 1;\n\n if (position - lineStart > maxHalfLength) {\n head = ' ... ';\n lineStart = position - maxHalfLength + head.length;\n }\n\n if (lineEnd - position > maxHalfLength) {\n tail = ' ...';\n lineEnd = position + maxHalfLength - tail.length;\n }\n\n return {\n str: head + buffer.slice(lineStart, lineEnd).replace(/\\t/g, '\u2192') + tail,\n pos: position - lineStart + head.length // relative position\n };\n}\n\n\nfunction padStart(string, max) {\n return common.repeat(' ', max - string.length) + string;\n}\n\n\nfunction makeSnippet(mark, options) {\n options = Object.create(options || null);\n\n if (!mark.buffer) return null;\n\n if (!options.maxLength) options.maxLength = 79;\n if (typeof options.indent !== 'number') options.indent = 1;\n if (typeof options.linesBefore !== 'number') options.linesBefore = 3;\n if (typeof options.linesAfter !== 'number') options.linesAfter = 2;\n\n var re = /\\r?\\n|\\r|\\0/g;\n var lineStarts = [ 0 ];\n var lineEnds = [];\n var match;\n var foundLineNo = -1;\n\n while ((match = re.exec(mark.buffer))) {\n lineEnds.push(match.index);\n lineStarts.push(match.index + match[0].length);\n\n if (mark.position <= match.index && foundLineNo < 0) {\n foundLineNo = lineStarts.length - 2;\n }\n }\n\n if (foundLineNo < 0) foundLineNo = lineStarts.length - 1;\n\n var result = '', i, line;\n var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;\n var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);\n\n for (i = 1; i <= options.linesBefore; i++) {\n if (foundLineNo - i < 0) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo - i],\n lineEnds[foundLineNo - i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),\n maxLineLength\n );\n result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n' + result;\n }\n\n line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);\n result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n';\n result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\\n';\n\n for (i = 1; i <= options.linesAfter; i++) {\n if (foundLineNo + i >= lineEnds.length) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo + i],\n lineEnds[foundLineNo + i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),\n maxLineLength\n );\n result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n';\n }\n\n return result.replace(/\\n$/, '');\n}\n\n\nvar snippet = makeSnippet;\n\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n 'kind',\n 'multi',\n 'resolve',\n 'construct',\n 'instanceOf',\n 'predicate',\n 'represent',\n 'representName',\n 'defaultStyle',\n 'styleAliases'\n];\n\nvar YAML_NODE_KINDS = [\n 'scalar',\n 'sequence',\n 'mapping'\n];\n\nfunction compileStyleAliases(map) {\n var result = {};\n\n if (map !== null) {\n Object.keys(map).forEach(function (style) {\n map[style].forEach(function (alias) {\n result[String(alias)] = style;\n });\n });\n }\n\n return result;\n}\n\nfunction Type$1(tag, options) {\n options = options || {};\n\n Object.keys(options).forEach(function (name) {\n if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n throw new exception('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n }\n });\n\n // TODO: Add tag format check.\n this.options = options; // keep original options in case user wants to extend this type later\n this.tag = tag;\n this.kind = options['kind'] || null;\n this.resolve = options['resolve'] || function () { return true; };\n this.construct = options['construct'] || function (data) { return data; };\n this.instanceOf = options['instanceOf'] || null;\n this.predicate = options['predicate'] || null;\n this.represent = options['represent'] || null;\n this.representName = options['representName'] || null;\n this.defaultStyle = options['defaultStyle'] || null;\n this.multi = options['multi'] || false;\n this.styleAliases = compileStyleAliases(options['styleAliases'] || null);\n\n if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n throw new exception('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n }\n}\n\nvar type = Type$1;\n\n/*eslint-disable max-len*/\n\n\n\n\n\nfunction compileList(schema, name) {\n var result = [];\n\n schema[name].forEach(function (currentType) {\n var newIndex = result.length;\n\n result.forEach(function (previousType, previousIndex) {\n if (previousType.tag === currentType.tag &&\n previousType.kind === currentType.kind &&\n previousType.multi === currentType.multi) {\n\n newIndex = previousIndex;\n }\n });\n\n result[newIndex] = currentType;\n });\n\n return result;\n}\n\n\nfunction compileMap(/* lists... */) {\n var result = {\n scalar: {},\n sequence: {},\n mapping: {},\n fallback: {},\n multi: {\n scalar: [],\n sequence: [],\n mapping: [],\n fallback: []\n }\n }, index, length;\n\n function collectType(type) {\n if (type.multi) {\n result.multi[type.kind].push(type);\n result.multi['fallback'].push(type);\n } else {\n result[type.kind][type.tag] = result['fallback'][type.tag] = type;\n }\n }\n\n for (index = 0, length = arguments.length; index < length; index += 1) {\n arguments[index].forEach(collectType);\n }\n return result;\n}\n\n\nfunction Schema$1(definition) {\n return this.extend(definition);\n}\n\n\nSchema$1.prototype.extend = function extend(definition) {\n var implicit = [];\n var explicit = [];\n\n if (definition instanceof type) {\n // Schema.extend(type)\n explicit.push(definition);\n\n } else if (Array.isArray(definition)) {\n // Schema.extend([ type1, type2, ... ])\n explicit = explicit.concat(definition);\n\n } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {\n // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] })\n if (definition.implicit) implicit = implicit.concat(definition.implicit);\n if (definition.explicit) explicit = explicit.concat(definition.explicit);\n\n } else {\n throw new exception('Schema.extend argument should be a Type, [ Type ], ' +\n 'or a schema definition ({ implicit: [...], explicit: [...] })');\n }\n\n implicit.forEach(function (type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n\n if (type$1.loadKind && type$1.loadKind !== 'scalar') {\n throw new exception('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.');\n }\n\n if (type$1.multi) {\n throw new exception('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.');\n }\n });\n\n explicit.forEach(function (type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n });\n\n var result = Object.create(Schema$1.prototype);\n\n result.implicit = (this.implicit || []).concat(implicit);\n result.explicit = (this.explicit || []).concat(explicit);\n\n result.compiledImplicit = compileList(result, 'implicit');\n result.compiledExplicit = compileList(result, 'explicit');\n result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);\n\n return result;\n};\n\n\nvar schema = Schema$1;\n\nvar str = new type('tag:yaml.org,2002:str', {\n kind: 'scalar',\n construct: function (data) { return data !== null ? data : ''; }\n});\n\nvar seq = new type('tag:yaml.org,2002:seq', {\n kind: 'sequence',\n construct: function (data) { return data !== null ? data : []; }\n});\n\nvar map = new type('tag:yaml.org,2002:map', {\n kind: 'mapping',\n construct: function (data) { return data !== null ? data : {}; }\n});\n\nvar failsafe = new schema({\n explicit: [\n str,\n seq,\n map\n ]\n});\n\nfunction resolveYamlNull(data) {\n if (data === null) return true;\n\n var max = data.length;\n\n return (max === 1 && data === '~') ||\n (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL'));\n}\n\nfunction constructYamlNull() {\n return null;\n}\n\nfunction isNull(object) {\n return object === null;\n}\n\nvar _null = new type('tag:yaml.org,2002:null', {\n kind: 'scalar',\n resolve: resolveYamlNull,\n construct: constructYamlNull,\n predicate: isNull,\n represent: {\n canonical: function () { return '~'; },\n lowercase: function () { return 'null'; },\n uppercase: function () { return 'NULL'; },\n camelcase: function () { return 'Null'; },\n empty: function () { return ''; }\n },\n defaultStyle: 'lowercase'\n});\n\nfunction resolveYamlBoolean(data) {\n if (data === null) return false;\n\n var max = data.length;\n\n return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) ||\n (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE'));\n}\n\nfunction constructYamlBoolean(data) {\n return data === 'true' ||\n data === 'True' ||\n data === 'TRUE';\n}\n\nfunction isBoolean(object) {\n return Object.prototype.toString.call(object) === '[object Boolean]';\n}\n\nvar bool = new type('tag:yaml.org,2002:bool', {\n kind: 'scalar',\n resolve: resolveYamlBoolean,\n construct: constructYamlBoolean,\n predicate: isBoolean,\n represent: {\n lowercase: function (object) { return object ? 'true' : 'false'; },\n uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; },\n camelcase: function (object) { return object ? 'True' : 'False'; }\n },\n defaultStyle: 'lowercase'\n});\n\nfunction isHexCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) ||\n ((0x41/* A */ <= c) && (c <= 0x46/* F */)) ||\n ((0x61/* a */ <= c) && (c <= 0x66/* f */));\n}\n\nfunction isOctCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */));\n}\n\nfunction isDecCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */));\n}\n\nfunction resolveYamlInteger(data) {\n if (data === null) return false;\n\n var max = data.length,\n index = 0,\n hasDigits = false,\n ch;\n\n if (!max) return false;\n\n ch = data[index];\n\n // sign\n if (ch === '-' || ch === '+') {\n ch = data[++index];\n }\n\n if (ch === '0') {\n // 0\n if (index + 1 === max) return true;\n ch = data[++index];\n\n // base 2, base 8, base 16\n\n if (ch === 'b') {\n // base 2\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (ch !== '0' && ch !== '1') return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'x') {\n // base 16\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isHexCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'o') {\n // base 8\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isOctCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n }\n\n // base 10 (except 0)\n\n // value should not start with `_`;\n if (ch === '_') return false;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isDecCode(data.charCodeAt(index))) {\n return false;\n }\n hasDigits = true;\n }\n\n // Should have digits and should not end with `_`\n if (!hasDigits || ch === '_') return false;\n\n return true;\n}\n\nfunction constructYamlInteger(data) {\n var value = data, sign = 1, ch;\n\n if (value.indexOf('_') !== -1) {\n value = value.replace(/_/g, '');\n }\n\n ch = value[0];\n\n if (ch === '-' || ch === '+') {\n if (ch === '-') sign = -1;\n value = value.slice(1);\n ch = value[0];\n }\n\n if (value === '0') return 0;\n\n if (ch === '0') {\n if (value[1] === 'b') return sign * parseInt(value.slice(2), 2);\n if (value[1] === 'x') return sign * parseInt(value.slice(2), 16);\n if (value[1] === 'o') return sign * parseInt(value.slice(2), 8);\n }\n\n return sign * parseInt(value, 10);\n}\n\nfunction isInteger(object) {\n return (Object.prototype.toString.call(object)) === '[object Number]' &&\n (object % 1 === 0 && !common.isNegativeZero(object));\n}\n\nvar int = new type('tag:yaml.org,2002:int', {\n kind: 'scalar',\n resolve: resolveYamlInteger,\n construct: constructYamlInteger,\n predicate: isInteger,\n represent: {\n binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); },\n octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); },\n decimal: function (obj) { return obj.toString(10); },\n /* eslint-disable max-len */\n hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); }\n },\n defaultStyle: 'decimal',\n styleAliases: {\n binary: [ 2, 'bin' ],\n octal: [ 8, 'oct' ],\n decimal: [ 10, 'dec' ],\n hexadecimal: [ 16, 'hex' ]\n }\n});\n\nvar YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +\n // .2e4, .2\n // special case, seems not from spec\n '|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' +\n // .inf\n '|[-+]?\\\\.(?:inf|Inf|INF)' +\n // .nan\n '|\\\\.(?:nan|NaN|NAN))$');\n\nfunction resolveYamlFloat(data) {\n if (data === null) return false;\n\n if (!YAML_FLOAT_PATTERN.test(data) ||\n // Quick hack to not allow integers end with `_`\n // Probably should update regexp & check speed\n data[data.length - 1] === '_') {\n return false;\n }\n\n return true;\n}\n\nfunction constructYamlFloat(data) {\n var value, sign;\n\n value = data.replace(/_/g, '').toLowerCase();\n sign = value[0] === '-' ? -1 : 1;\n\n if ('+-'.indexOf(value[0]) >= 0) {\n value = value.slice(1);\n }\n\n if (value === '.inf') {\n return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n\n } else if (value === '.nan') {\n return NaN;\n }\n return sign * parseFloat(value, 10);\n}\n\n\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\n\nfunction representYamlFloat(object, style) {\n var res;\n\n if (isNaN(object)) {\n switch (style) {\n case 'lowercase': return '.nan';\n case 'uppercase': return '.NAN';\n case 'camelcase': return '.NaN';\n }\n } else if (Number.POSITIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '.inf';\n case 'uppercase': return '.INF';\n case 'camelcase': return '.Inf';\n }\n } else if (Number.NEGATIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '-.inf';\n case 'uppercase': return '-.INF';\n case 'camelcase': return '-.Inf';\n }\n } else if (common.isNegativeZero(object)) {\n return '-0.0';\n }\n\n res = object.toString(10);\n\n // JS stringifier can build scientific format without dots: 5e-100,\n // while YAML requres dot: 5.e-100. Fix it with simple hack\n\n return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;\n}\n\nfunction isFloat(object) {\n return (Object.prototype.toString.call(object) === '[object Number]') &&\n (object % 1 !== 0 || common.isNegativeZero(object));\n}\n\nvar float = new type('tag:yaml.org,2002:float', {\n kind: 'scalar',\n resolve: resolveYamlFloat,\n construct: constructYamlFloat,\n predicate: isFloat,\n represent: representYamlFloat,\n defaultStyle: 'lowercase'\n});\n\nvar json = failsafe.extend({\n implicit: [\n _null,\n bool,\n int,\n float\n ]\n});\n\nvar core = json;\n\nvar YAML_DATE_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9])' + // [2] month\n '-([0-9][0-9])$'); // [3] day\n\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9]?)' + // [2] month\n '-([0-9][0-9]?)' + // [3] day\n '(?:[Tt]|[ \\\\t]+)' + // ...\n '([0-9][0-9]?)' + // [4] hour\n ':([0-9][0-9])' + // [5] minute\n ':([0-9][0-9])' + // [6] second\n '(?:\\\\.([0-9]*))?' + // [7] fraction\n '(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour\n '(?::([0-9][0-9]))?))?$'); // [11] tz_minute\n\nfunction resolveYamlTimestamp(data) {\n if (data === null) return false;\n if (YAML_DATE_REGEXP.exec(data) !== null) return true;\n if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;\n return false;\n}\n\nfunction constructYamlTimestamp(data) {\n var match, year, month, day, hour, minute, second, fraction = 0,\n delta = null, tz_hour, tz_minute, date;\n\n match = YAML_DATE_REGEXP.exec(data);\n if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);\n\n if (match === null) throw new Error('Date resolve error');\n\n // match: [1] year [2] month [3] day\n\n year = +(match[1]);\n month = +(match[2]) - 1; // JS month starts with 0\n day = +(match[3]);\n\n if (!match[4]) { // no hour\n return new Date(Date.UTC(year, month, day));\n }\n\n // match: [4] hour [5] minute [6] second [7] fraction\n\n hour = +(match[4]);\n minute = +(match[5]);\n second = +(match[6]);\n\n if (match[7]) {\n fraction = match[7].slice(0, 3);\n while (fraction.length < 3) { // milli-seconds\n fraction += '0';\n }\n fraction = +fraction;\n }\n\n // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute\n\n if (match[9]) {\n tz_hour = +(match[10]);\n tz_minute = +(match[11] || 0);\n delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds\n if (match[9] === '-') delta = -delta;\n }\n\n date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n\n if (delta) date.setTime(date.getTime() - delta);\n\n return date;\n}\n\nfunction representYamlTimestamp(object /*, style*/) {\n return object.toISOString();\n}\n\nvar timestamp = new type('tag:yaml.org,2002:timestamp', {\n kind: 'scalar',\n resolve: resolveYamlTimestamp,\n construct: constructYamlTimestamp,\n instanceOf: Date,\n represent: representYamlTimestamp\n});\n\nfunction resolveYamlMerge(data) {\n return data === '<<' || data === null;\n}\n\nvar merge = new type('tag:yaml.org,2002:merge', {\n kind: 'scalar',\n resolve: resolveYamlMerge\n});\n\n/*eslint-disable no-bitwise*/\n\n\n\n\n\n// [ 64, 65, 66 ] -> [ padding, CR, LF ]\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r';\n\n\nfunction resolveYamlBinary(data) {\n if (data === null) return false;\n\n var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;\n\n // Convert one by one.\n for (idx = 0; idx < max; idx++) {\n code = map.indexOf(data.charAt(idx));\n\n // Skip CR/LF\n if (code > 64) continue;\n\n // Fail on illegal characters\n if (code < 0) return false;\n\n bitlen += 6;\n }\n\n // If there are any bits left, source was corrupted\n return (bitlen % 8) === 0;\n}\n\nfunction constructYamlBinary(data) {\n var idx, tailbits,\n input = data.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n max = input.length,\n map = BASE64_MAP,\n bits = 0,\n result = [];\n\n // Collect by 6*4 bits (3 bytes)\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 4 === 0) && idx) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n }\n\n bits = (bits << 6) | map.indexOf(input.charAt(idx));\n }\n\n // Dump tail\n\n tailbits = (max % 4) * 6;\n\n if (tailbits === 0) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n } else if (tailbits === 18) {\n result.push((bits >> 10) & 0xFF);\n result.push((bits >> 2) & 0xFF);\n } else if (tailbits === 12) {\n result.push((bits >> 4) & 0xFF);\n }\n\n return new Uint8Array(result);\n}\n\nfunction representYamlBinary(object /*, style*/) {\n var result = '', bits = 0, idx, tail,\n max = object.length,\n map = BASE64_MAP;\n\n // Convert every three bytes to 4 ASCII characters.\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 3 === 0) && idx) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n }\n\n bits = (bits << 8) + object[idx];\n }\n\n // Dump tail\n\n tail = max % 3;\n\n if (tail === 0) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n } else if (tail === 2) {\n result += map[(bits >> 10) & 0x3F];\n result += map[(bits >> 4) & 0x3F];\n result += map[(bits << 2) & 0x3F];\n result += map[64];\n } else if (tail === 1) {\n result += map[(bits >> 2) & 0x3F];\n result += map[(bits << 4) & 0x3F];\n result += map[64];\n result += map[64];\n }\n\n return result;\n}\n\nfunction isBinary(obj) {\n return Object.prototype.toString.call(obj) === '[object Uint8Array]';\n}\n\nvar binary = new type('tag:yaml.org,2002:binary', {\n kind: 'scalar',\n resolve: resolveYamlBinary,\n construct: constructYamlBinary,\n predicate: isBinary,\n represent: representYamlBinary\n});\n\nvar _hasOwnProperty$3 = Object.prototype.hasOwnProperty;\nvar _toString$2 = Object.prototype.toString;\n\nfunction resolveYamlOmap(data) {\n if (data === null) return true;\n\n var objectKeys = [], index, length, pair, pairKey, pairHasKey,\n object = data;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n pairHasKey = false;\n\n if (_toString$2.call(pair) !== '[object Object]') return false;\n\n for (pairKey in pair) {\n if (_hasOwnProperty$3.call(pair, pairKey)) {\n if (!pairHasKey) pairHasKey = true;\n else return false;\n }\n }\n\n if (!pairHasKey) return false;\n\n if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n else return false;\n }\n\n return true;\n}\n\nfunction constructYamlOmap(data) {\n return data !== null ? data : [];\n}\n\nvar omap = new type('tag:yaml.org,2002:omap', {\n kind: 'sequence',\n resolve: resolveYamlOmap,\n construct: constructYamlOmap\n});\n\nvar _toString$1 = Object.prototype.toString;\n\nfunction resolveYamlPairs(data) {\n if (data === null) return true;\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n if (_toString$1.call(pair) !== '[object Object]') return false;\n\n keys = Object.keys(pair);\n\n if (keys.length !== 1) return false;\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return true;\n}\n\nfunction constructYamlPairs(data) {\n if (data === null) return [];\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n keys = Object.keys(pair);\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return result;\n}\n\nvar pairs = new type('tag:yaml.org,2002:pairs', {\n kind: 'sequence',\n resolve: resolveYamlPairs,\n construct: constructYamlPairs\n});\n\nvar _hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n\nfunction resolveYamlSet(data) {\n if (data === null) return true;\n\n var key, object = data;\n\n for (key in object) {\n if (_hasOwnProperty$2.call(object, key)) {\n if (object[key] !== null) return false;\n }\n }\n\n return true;\n}\n\nfunction constructYamlSet(data) {\n return data !== null ? data : {};\n}\n\nvar set = new type('tag:yaml.org,2002:set', {\n kind: 'mapping',\n resolve: resolveYamlSet,\n construct: constructYamlSet\n});\n\nvar _default = core.extend({\n implicit: [\n timestamp,\n merge\n ],\n explicit: [\n binary,\n omap,\n pairs,\n set\n ]\n});\n\n/*eslint-disable max-len,no-use-before-define*/\n\n\n\n\n\n\n\nvar _hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n\n\nvar CONTEXT_FLOW_IN = 1;\nvar CONTEXT_FLOW_OUT = 2;\nvar CONTEXT_BLOCK_IN = 3;\nvar CONTEXT_BLOCK_OUT = 4;\n\n\nvar CHOMPING_CLIP = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP = 3;\n\n\nvar PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction is_EOL(c) {\n return (c === 0x0A/* LF */) || (c === 0x0D/* CR */);\n}\n\nfunction is_WHITE_SPACE(c) {\n return (c === 0x09/* Tab */) || (c === 0x20/* Space */);\n}\n\nfunction is_WS_OR_EOL(c) {\n return (c === 0x09/* Tab */) ||\n (c === 0x20/* Space */) ||\n (c === 0x0A/* LF */) ||\n (c === 0x0D/* CR */);\n}\n\nfunction is_FLOW_INDICATOR(c) {\n return c === 0x2C/* , */ ||\n c === 0x5B/* [ */ ||\n c === 0x5D/* ] */ ||\n c === 0x7B/* { */ ||\n c === 0x7D/* } */;\n}\n\nfunction fromHexCode(c) {\n var lc;\n\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n /*eslint-disable no-bitwise*/\n lc = c | 0x20;\n\n if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) {\n return lc - 0x61 + 10;\n }\n\n return -1;\n}\n\nfunction escapedHexLen(c) {\n if (c === 0x78/* x */) { return 2; }\n if (c === 0x75/* u */) { return 4; }\n if (c === 0x55/* U */) { return 8; }\n return 0;\n}\n\nfunction fromDecimalCode(c) {\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n return -1;\n}\n\nfunction simpleEscapeSequence(c) {\n /* eslint-disable indent */\n return (c === 0x30/* 0 */) ? '\\x00' :\n (c === 0x61/* a */) ? '\\x07' :\n (c === 0x62/* b */) ? '\\x08' :\n (c === 0x74/* t */) ? '\\x09' :\n (c === 0x09/* Tab */) ? '\\x09' :\n (c === 0x6E/* n */) ? '\\x0A' :\n (c === 0x76/* v */) ? '\\x0B' :\n (c === 0x66/* f */) ? '\\x0C' :\n (c === 0x72/* r */) ? '\\x0D' :\n (c === 0x65/* e */) ? '\\x1B' :\n (c === 0x20/* Space */) ? ' ' :\n (c === 0x22/* \" */) ? '\\x22' :\n (c === 0x2F/* / */) ? '/' :\n (c === 0x5C/* \\ */) ? '\\x5C' :\n (c === 0x4E/* N */) ? '\\x85' :\n (c === 0x5F/* _ */) ? '\\xA0' :\n (c === 0x4C/* L */) ? '\\u2028' :\n (c === 0x50/* P */) ? '\\u2029' : '';\n}\n\nfunction charFromCodepoint(c) {\n if (c <= 0xFFFF) {\n return String.fromCharCode(c);\n }\n // Encode UTF-16 surrogate pair\n // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF\n return String.fromCharCode(\n ((c - 0x010000) >> 10) + 0xD800,\n ((c - 0x010000) & 0x03FF) + 0xDC00\n );\n}\n\n// set a property of a literal object, while protecting against prototype pollution,\n// see https://github.com/nodeca/js-yaml/issues/164 for more details\nfunction setProperty(object, key, value) {\n // used for this specific key only because Object.defineProperty is slow\n if (key === '__proto__') {\n Object.defineProperty(object, key, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: value\n });\n } else {\n object[key] = value;\n }\n}\n\nvar simpleEscapeCheck = new Array(256); // integer, for fast access\nvar simpleEscapeMap = new Array(256);\nfor (var i = 0; i < 256; i++) {\n simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\n\n\nfunction State$1(input, options) {\n this.input = input;\n\n this.filename = options['filename'] || null;\n this.schema = options['schema'] || _default;\n this.onWarning = options['onWarning'] || null;\n // (Hidden) Remove? makes the loader to expect YAML 1.1 documents\n // if such documents have no explicit %YAML directive\n this.legacy = options['legacy'] || false;\n\n this.json = options['json'] || false;\n this.listener = options['listener'] || null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.typeMap = this.schema.compiledTypeMap;\n\n this.length = input.length;\n this.position = 0;\n this.line = 0;\n this.lineStart = 0;\n this.lineIndent = 0;\n\n // position of first leading tab in the current line,\n // used to make sure there are no tabs in the indentation\n this.firstTabInLine = -1;\n\n this.documents = [];\n\n /*\n this.version;\n this.checkLineBreaks;\n this.tagMap;\n this.anchorMap;\n this.tag;\n this.anchor;\n this.kind;\n this.result;*/\n\n}\n\n\nfunction generateError(state, message) {\n var mark = {\n name: state.filename,\n buffer: state.input.slice(0, -1), // omit trailing \\0\n position: state.position,\n line: state.line,\n column: state.position - state.lineStart\n };\n\n mark.snippet = snippet(mark);\n\n return new exception(message, mark);\n}\n\nfunction throwError(state, message) {\n throw generateError(state, message);\n}\n\nfunction throwWarning(state, message) {\n if (state.onWarning) {\n state.onWarning.call(null, generateError(state, message));\n }\n}\n\n\nvar directiveHandlers = {\n\n YAML: function handleYamlDirective(state, name, args) {\n\n var match, major, minor;\n\n if (state.version !== null) {\n throwError(state, 'duplication of %YAML directive');\n }\n\n if (args.length !== 1) {\n throwError(state, 'YAML directive accepts exactly one argument');\n }\n\n match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n\n if (match === null) {\n throwError(state, 'ill-formed argument of the YAML directive');\n }\n\n major = parseInt(match[1], 10);\n minor = parseInt(match[2], 10);\n\n if (major !== 1) {\n throwError(state, 'unacceptable YAML version of the document');\n }\n\n state.version = args[0];\n state.checkLineBreaks = (minor < 2);\n\n if (minor !== 1 && minor !== 2) {\n throwWarning(state, 'unsupported YAML version of the document');\n }\n },\n\n TAG: function handleTagDirective(state, name, args) {\n\n var handle, prefix;\n\n if (args.length !== 2) {\n throwError(state, 'TAG directive accepts exactly two arguments');\n }\n\n handle = args[0];\n prefix = args[1];\n\n if (!PATTERN_TAG_HANDLE.test(handle)) {\n throwError(state, 'ill-formed tag handle (first argument) of the TAG directive');\n }\n\n if (_hasOwnProperty$1.call(state.tagMap, handle)) {\n throwError(state, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n }\n\n if (!PATTERN_TAG_URI.test(prefix)) {\n throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive');\n }\n\n try {\n prefix = decodeURIComponent(prefix);\n } catch (err) {\n throwError(state, 'tag prefix is malformed: ' + prefix);\n }\n\n state.tagMap[handle] = prefix;\n }\n};\n\n\nfunction captureSegment(state, start, end, checkJson) {\n var _position, _length, _character, _result;\n\n if (start < end) {\n _result = state.input.slice(start, end);\n\n if (checkJson) {\n for (_position = 0, _length = _result.length; _position < _length; _position += 1) {\n _character = _result.charCodeAt(_position);\n if (!(_character === 0x09 ||\n (0x20 <= _character && _character <= 0x10FFFF))) {\n throwError(state, 'expected valid JSON character');\n }\n }\n } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n throwError(state, 'the stream contains non-printable characters');\n }\n\n state.result += _result;\n }\n}\n\nfunction mergeMappings(state, destination, source, overridableKeys) {\n var sourceKeys, key, index, quantity;\n\n if (!common.isObject(source)) {\n throwError(state, 'cannot merge mappings; the provided source object is unacceptable');\n }\n\n sourceKeys = Object.keys(source);\n\n for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {\n key = sourceKeys[index];\n\n if (!_hasOwnProperty$1.call(destination, key)) {\n setProperty(destination, key, source[key]);\n overridableKeys[key] = true;\n }\n }\n}\n\nfunction storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode,\n startLine, startLineStart, startPos) {\n\n var index, quantity;\n\n // The output is a plain object here, so keys can only be strings.\n // We need to convert keyNode to a string, but doing so can hang the process\n // (deeply nested arrays that explode exponentially using aliases).\n if (Array.isArray(keyNode)) {\n keyNode = Array.prototype.slice.call(keyNode);\n\n for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {\n if (Array.isArray(keyNode[index])) {\n throwError(state, 'nested arrays are not supported inside keys');\n }\n\n if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') {\n keyNode[index] = '[object Object]';\n }\n }\n }\n\n // Avoid code execution in load() via toString property\n // (still use its own toString for arrays, timestamps,\n // and whatever user schema extensions happen to have @@toStringTag)\n if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') {\n keyNode = '[object Object]';\n }\n\n\n keyNode = String(keyNode);\n\n if (_result === null) {\n _result = {};\n }\n\n if (keyTag === 'tag:yaml.org,2002:merge') {\n if (Array.isArray(valueNode)) {\n for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {\n mergeMappings(state, _result, valueNode[index], overridableKeys);\n }\n } else {\n mergeMappings(state, _result, valueNode, overridableKeys);\n }\n } else {\n if (!state.json &&\n !_hasOwnProperty$1.call(overridableKeys, keyNode) &&\n _hasOwnProperty$1.call(_result, keyNode)) {\n state.line = startLine || state.line;\n state.lineStart = startLineStart || state.lineStart;\n state.position = startPos || state.position;\n throwError(state, 'duplicated mapping key');\n }\n\n setProperty(_result, keyNode, valueNode);\n delete overridableKeys[keyNode];\n }\n\n return _result;\n}\n\nfunction readLineBreak(state) {\n var ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x0A/* LF */) {\n state.position++;\n } else if (ch === 0x0D/* CR */) {\n state.position++;\n if (state.input.charCodeAt(state.position) === 0x0A/* LF */) {\n state.position++;\n }\n } else {\n throwError(state, 'a line break is expected');\n }\n\n state.line += 1;\n state.lineStart = state.position;\n state.firstTabInLine = -1;\n}\n\nfunction skipSeparationSpace(state, allowComments, checkIndent) {\n var lineBreaks = 0,\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) {\n state.firstTabInLine = state.position;\n }\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (allowComments && ch === 0x23/* # */) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0);\n }\n\n if (is_EOL(ch)) {\n readLineBreak(state);\n\n ch = state.input.charCodeAt(state.position);\n lineBreaks++;\n state.lineIndent = 0;\n\n while (ch === 0x20/* Space */) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n } else {\n break;\n }\n }\n\n if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {\n throwWarning(state, 'deficient indentation');\n }\n\n return lineBreaks;\n}\n\nfunction testDocumentSeparator(state) {\n var _position = state.position,\n ch;\n\n ch = state.input.charCodeAt(_position);\n\n // Condition state.position === state.lineStart is tested\n // in parent on each call, for efficiency. No needs to test here again.\n if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) &&\n ch === state.input.charCodeAt(_position + 1) &&\n ch === state.input.charCodeAt(_position + 2)) {\n\n _position += 3;\n\n ch = state.input.charCodeAt(_position);\n\n if (ch === 0 || is_WS_OR_EOL(ch)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction writeFoldedLines(state, count) {\n if (count === 1) {\n state.result += ' ';\n } else if (count > 1) {\n state.result += common.repeat('\\n', count - 1);\n }\n}\n\n\nfunction readPlainScalar(state, nodeIndent, withinFlowCollection) {\n var preceding,\n following,\n captureStart,\n captureEnd,\n hasPendingContent,\n _line,\n _lineStart,\n _lineIndent,\n _kind = state.kind,\n _result = state.result,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (is_WS_OR_EOL(ch) ||\n is_FLOW_INDICATOR(ch) ||\n ch === 0x23/* # */ ||\n ch === 0x26/* & */ ||\n ch === 0x2A/* * */ ||\n ch === 0x21/* ! */ ||\n ch === 0x7C/* | */ ||\n ch === 0x3E/* > */ ||\n ch === 0x27/* ' */ ||\n ch === 0x22/* \" */ ||\n ch === 0x25/* % */ ||\n ch === 0x40/* @ */ ||\n ch === 0x60/* ` */) {\n return false;\n }\n\n if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n return false;\n }\n }\n\n state.kind = 'scalar';\n state.result = '';\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n\n while (ch !== 0) {\n if (ch === 0x3A/* : */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n break;\n }\n\n } else if (ch === 0x23/* # */) {\n preceding = state.input.charCodeAt(state.position - 1);\n\n if (is_WS_OR_EOL(preceding)) {\n break;\n }\n\n } else if ((state.position === state.lineStart && testDocumentSeparator(state)) ||\n withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n break;\n\n } else if (is_EOL(ch)) {\n _line = state.line;\n _lineStart = state.lineStart;\n _lineIndent = state.lineIndent;\n skipSeparationSpace(state, false, -1);\n\n if (state.lineIndent >= nodeIndent) {\n hasPendingContent = true;\n ch = state.input.charCodeAt(state.position);\n continue;\n } else {\n state.position = captureEnd;\n state.line = _line;\n state.lineStart = _lineStart;\n state.lineIndent = _lineIndent;\n break;\n }\n }\n\n if (hasPendingContent) {\n captureSegment(state, captureStart, captureEnd, false);\n writeFoldedLines(state, state.line - _line);\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n }\n\n if (!is_WHITE_SPACE(ch)) {\n captureEnd = state.position + 1;\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, captureEnd, false);\n\n if (state.result) {\n return true;\n }\n\n state.kind = _kind;\n state.result = _result;\n return false;\n}\n\nfunction readSingleQuotedScalar(state, nodeIndent) {\n var ch,\n captureStart, captureEnd;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x27/* ' */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x27/* ' */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x27/* ' */) {\n captureStart = state.position;\n state.position++;\n captureEnd = state.position;\n } else {\n return true;\n }\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a single quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a single quoted scalar');\n}\n\nfunction readDoubleQuotedScalar(state, nodeIndent) {\n var captureStart,\n captureEnd,\n hexLength,\n hexResult,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x22/* \" */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x22/* \" */) {\n captureSegment(state, captureStart, state.position, true);\n state.position++;\n return true;\n\n } else if (ch === 0x5C/* \\ */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (is_EOL(ch)) {\n skipSeparationSpace(state, false, nodeIndent);\n\n // TODO: rework to inline fn with no type cast?\n } else if (ch < 256 && simpleEscapeCheck[ch]) {\n state.result += simpleEscapeMap[ch];\n state.position++;\n\n } else if ((tmp = escapedHexLen(ch)) > 0) {\n hexLength = tmp;\n hexResult = 0;\n\n for (; hexLength > 0; hexLength--) {\n ch = state.input.charCodeAt(++state.position);\n\n if ((tmp = fromHexCode(ch)) >= 0) {\n hexResult = (hexResult << 4) + tmp;\n\n } else {\n throwError(state, 'expected hexadecimal character');\n }\n }\n\n state.result += charFromCodepoint(hexResult);\n\n state.position++;\n\n } else {\n throwError(state, 'unknown escape sequence');\n }\n\n captureStart = captureEnd = state.position;\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a double quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a double quoted scalar');\n}\n\nfunction readFlowCollection(state, nodeIndent) {\n var readNext = true,\n _line,\n _lineStart,\n _pos,\n _tag = state.tag,\n _result,\n _anchor = state.anchor,\n following,\n terminator,\n isPair,\n isExplicitPair,\n isMapping,\n overridableKeys = Object.create(null),\n keyNode,\n keyTag,\n valueNode,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x5B/* [ */) {\n terminator = 0x5D;/* ] */\n isMapping = false;\n _result = [];\n } else if (ch === 0x7B/* { */) {\n terminator = 0x7D;/* } */\n isMapping = true;\n _result = {};\n } else {\n return false;\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n while (ch !== 0) {\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === terminator) {\n state.position++;\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = isMapping ? 'mapping' : 'sequence';\n state.result = _result;\n return true;\n } else if (!readNext) {\n throwError(state, 'missed comma between flow collection entries');\n } else if (ch === 0x2C/* , */) {\n // \"flow collection entries can never be completely empty\", as per YAML 1.2, section 7.4\n throwError(state, \"expected the node content, but found ','\");\n }\n\n keyTag = keyNode = valueNode = null;\n isPair = isExplicitPair = false;\n\n if (ch === 0x3F/* ? */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following)) {\n isPair = isExplicitPair = true;\n state.position++;\n skipSeparationSpace(state, true, nodeIndent);\n }\n }\n\n _line = state.line; // Save the current line.\n _lineStart = state.lineStart;\n _pos = state.position;\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n keyTag = state.tag;\n keyNode = state.result;\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) {\n isPair = true;\n ch = state.input.charCodeAt(++state.position);\n skipSeparationSpace(state, true, nodeIndent);\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n valueNode = state.result;\n }\n\n if (isMapping) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);\n } else if (isPair) {\n _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));\n } else {\n _result.push(keyNode);\n }\n\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x2C/* , */) {\n readNext = true;\n ch = state.input.charCodeAt(++state.position);\n } else {\n readNext = false;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a flow collection');\n}\n\nfunction readBlockScalar(state, nodeIndent) {\n var captureStart,\n folding,\n chomping = CHOMPING_CLIP,\n didReadContent = false,\n detectedIndent = false,\n textIndent = nodeIndent,\n emptyLines = 0,\n atMoreIndented = false,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x7C/* | */) {\n folding = false;\n } else if (ch === 0x3E/* > */) {\n folding = true;\n } else {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n\n while (ch !== 0) {\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n if (CHOMPING_CLIP === chomping) {\n chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP;\n } else {\n throwError(state, 'repeat of a chomping mode identifier');\n }\n\n } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n if (tmp === 0) {\n throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one');\n } else if (!detectedIndent) {\n textIndent = nodeIndent + tmp - 1;\n detectedIndent = true;\n } else {\n throwError(state, 'repeat of an indentation width identifier');\n }\n\n } else {\n break;\n }\n }\n\n if (is_WHITE_SPACE(ch)) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (is_WHITE_SPACE(ch));\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (!is_EOL(ch) && (ch !== 0));\n }\n }\n\n while (ch !== 0) {\n readLineBreak(state);\n state.lineIndent = 0;\n\n ch = state.input.charCodeAt(state.position);\n\n while ((!detectedIndent || state.lineIndent < textIndent) &&\n (ch === 0x20/* Space */)) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (!detectedIndent && state.lineIndent > textIndent) {\n textIndent = state.lineIndent;\n }\n\n if (is_EOL(ch)) {\n emptyLines++;\n continue;\n }\n\n // End of the scalar.\n if (state.lineIndent < textIndent) {\n\n // Perform the chomping.\n if (chomping === CHOMPING_KEEP) {\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n } else if (chomping === CHOMPING_CLIP) {\n if (didReadContent) { // i.e. only if the scalar is not empty.\n state.result += '\\n';\n }\n }\n\n // Break this `while` cycle and go to the funciton's epilogue.\n break;\n }\n\n // Folded style: use fancy rules to handle line breaks.\n if (folding) {\n\n // Lines starting with white space characters (more-indented lines) are not folded.\n if (is_WHITE_SPACE(ch)) {\n atMoreIndented = true;\n // except for the first content line (cf. Example 8.1)\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n\n // End of more-indented block.\n } else if (atMoreIndented) {\n atMoreIndented = false;\n state.result += common.repeat('\\n', emptyLines + 1);\n\n // Just one line break - perceive as the same line.\n } else if (emptyLines === 0) {\n if (didReadContent) { // i.e. only if we have already read some scalar content.\n state.result += ' ';\n }\n\n // Several line breaks - perceive as different lines.\n } else {\n state.result += common.repeat('\\n', emptyLines);\n }\n\n // Literal style: just add exact number of line breaks between content lines.\n } else {\n // Keep all line breaks except the header line break.\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n }\n\n didReadContent = true;\n detectedIndent = true;\n emptyLines = 0;\n captureStart = state.position;\n\n while (!is_EOL(ch) && (ch !== 0)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, state.position, false);\n }\n\n return true;\n}\n\nfunction readBlockSequence(state, nodeIndent) {\n var _line,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = [],\n following,\n detected = false,\n ch;\n\n // there is a leading tab before this token, so it can't be a block sequence/mapping;\n // it can still be flow sequence/mapping or a scalar\n if (state.firstTabInLine !== -1) return false;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n if (state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, 'tab characters must not be used in indentation');\n }\n\n if (ch !== 0x2D/* - */) {\n break;\n }\n\n following = state.input.charCodeAt(state.position + 1);\n\n if (!is_WS_OR_EOL(following)) {\n break;\n }\n\n detected = true;\n state.position++;\n\n if (skipSeparationSpace(state, true, -1)) {\n if (state.lineIndent <= nodeIndent) {\n _result.push(null);\n ch = state.input.charCodeAt(state.position);\n continue;\n }\n }\n\n _line = state.line;\n composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n _result.push(state.result);\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a sequence entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'sequence';\n state.result = _result;\n return true;\n }\n return false;\n}\n\nfunction readBlockMapping(state, nodeIndent, flowIndent) {\n var following,\n allowCompact,\n _line,\n _keyLine,\n _keyLineStart,\n _keyPos,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = {},\n overridableKeys = Object.create(null),\n keyTag = null,\n keyNode = null,\n valueNode = null,\n atExplicitKey = false,\n detected = false,\n ch;\n\n // there is a leading tab before this token, so it can't be a block sequence/mapping;\n // it can still be flow sequence/mapping or a scalar\n if (state.firstTabInLine !== -1) return false;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n if (!atExplicitKey && state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, 'tab characters must not be used in indentation');\n }\n\n following = state.input.charCodeAt(state.position + 1);\n _line = state.line; // Save the current line.\n\n //\n // Explicit notation case. There are two separate blocks:\n // first for the key (denoted by \"?\") and second for the value (denoted by \":\")\n //\n if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) {\n\n if (ch === 0x3F/* ? */) {\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = true;\n allowCompact = true;\n\n } else if (atExplicitKey) {\n // i.e. 0x3A/* : */ === character after the explicit key.\n atExplicitKey = false;\n allowCompact = true;\n\n } else {\n throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');\n }\n\n state.position += 1;\n ch = following;\n\n //\n // Implicit notation case. Flow-style node as the key first, then \":\", and the value.\n //\n } else {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n\n if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n // Neither implicit nor explicit notation.\n // Reading is done. Go to the epilogue.\n break;\n }\n\n if (state.line === _line) {\n ch = state.input.charCodeAt(state.position);\n\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x3A/* : */) {\n ch = state.input.charCodeAt(++state.position);\n\n if (!is_WS_OR_EOL(ch)) {\n throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');\n }\n\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = false;\n allowCompact = false;\n keyTag = state.tag;\n keyNode = state.result;\n\n } else if (detected) {\n throwError(state, 'can not read an implicit mapping pair; a colon is missed');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n\n } else if (detected) {\n throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n }\n\n //\n // Common reading code for both explicit and implicit notations.\n //\n if (state.line === _line || state.lineIndent > nodeIndent) {\n if (atExplicitKey) {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n }\n\n if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n if (atExplicitKey) {\n keyNode = state.result;\n } else {\n valueNode = state.result;\n }\n }\n\n if (!atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n skipSeparationSpace(state, true, -1);\n ch = state.input.charCodeAt(state.position);\n }\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a mapping entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n //\n // Epilogue.\n //\n\n // Special case: last mapping's node contains only the key in explicit notation.\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n }\n\n // Expose the resulting mapping.\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'mapping';\n state.result = _result;\n }\n\n return detected;\n}\n\nfunction readTagProperty(state) {\n var _position,\n isVerbatim = false,\n isNamed = false,\n tagHandle,\n tagName,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x21/* ! */) return false;\n\n if (state.tag !== null) {\n throwError(state, 'duplication of a tag property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x3C/* < */) {\n isVerbatim = true;\n ch = state.input.charCodeAt(++state.position);\n\n } else if (ch === 0x21/* ! */) {\n isNamed = true;\n tagHandle = '!!';\n ch = state.input.charCodeAt(++state.position);\n\n } else {\n tagHandle = '!';\n }\n\n _position = state.position;\n\n if (isVerbatim) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && ch !== 0x3E/* > */);\n\n if (state.position < state.length) {\n tagName = state.input.slice(_position, state.position);\n ch = state.input.charCodeAt(++state.position);\n } else {\n throwError(state, 'unexpected end of the stream within a verbatim tag');\n }\n } else {\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n\n if (ch === 0x21/* ! */) {\n if (!isNamed) {\n tagHandle = state.input.slice(_position - 1, state.position + 1);\n\n if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n throwError(state, 'named tag handle cannot contain such characters');\n }\n\n isNamed = true;\n _position = state.position + 1;\n } else {\n throwError(state, 'tag suffix cannot contain exclamation marks');\n }\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n tagName = state.input.slice(_position, state.position);\n\n if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n throwError(state, 'tag suffix cannot contain flow indicator characters');\n }\n }\n\n if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n throwError(state, 'tag name cannot contain such characters: ' + tagName);\n }\n\n try {\n tagName = decodeURIComponent(tagName);\n } catch (err) {\n throwError(state, 'tag name is malformed: ' + tagName);\n }\n\n if (isVerbatim) {\n state.tag = tagName;\n\n } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) {\n state.tag = state.tagMap[tagHandle] + tagName;\n\n } else if (tagHandle === '!') {\n state.tag = '!' + tagName;\n\n } else if (tagHandle === '!!') {\n state.tag = 'tag:yaml.org,2002:' + tagName;\n\n } else {\n throwError(state, 'undeclared tag handle \"' + tagHandle + '\"');\n }\n\n return true;\n}\n\nfunction readAnchorProperty(state) {\n var _position,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x26/* & */) return false;\n\n if (state.anchor !== null) {\n throwError(state, 'duplication of an anchor property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an anchor node must contain at least one character');\n }\n\n state.anchor = state.input.slice(_position, state.position);\n return true;\n}\n\nfunction readAlias(state) {\n var _position, alias,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x2A/* * */) return false;\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an alias node must contain at least one character');\n }\n\n alias = state.input.slice(_position, state.position);\n\n if (!_hasOwnProperty$1.call(state.anchorMap, alias)) {\n throwError(state, 'unidentified alias \"' + alias + '\"');\n }\n\n state.result = state.anchorMap[alias];\n skipSeparationSpace(state, true, -1);\n return true;\n}\n\nfunction composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {\n var allowBlockStyles,\n allowBlockScalars,\n allowBlockCollections,\n indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent\n atNewLine = false,\n hasContent = false,\n typeIndex,\n typeQuantity,\n typeList,\n type,\n flowIndent,\n blockIndent;\n\n if (state.listener !== null) {\n state.listener('open', state);\n }\n\n state.tag = null;\n state.anchor = null;\n state.kind = null;\n state.result = null;\n\n allowBlockStyles = allowBlockScalars = allowBlockCollections =\n CONTEXT_BLOCK_OUT === nodeContext ||\n CONTEXT_BLOCK_IN === nodeContext;\n\n if (allowToSeek) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n }\n }\n\n if (indentStatus === 1) {\n while (readTagProperty(state) || readAnchorProperty(state)) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n allowBlockCollections = allowBlockStyles;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n } else {\n allowBlockCollections = false;\n }\n }\n }\n\n if (allowBlockCollections) {\n allowBlockCollections = atNewLine || allowCompact;\n }\n\n if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n flowIndent = parentIndent;\n } else {\n flowIndent = parentIndent + 1;\n }\n\n blockIndent = state.position - state.lineStart;\n\n if (indentStatus === 1) {\n if (allowBlockCollections &&\n (readBlockSequence(state, blockIndent) ||\n readBlockMapping(state, blockIndent, flowIndent)) ||\n readFlowCollection(state, flowIndent)) {\n hasContent = true;\n } else {\n if ((allowBlockScalars && readBlockScalar(state, flowIndent)) ||\n readSingleQuotedScalar(state, flowIndent) ||\n readDoubleQuotedScalar(state, flowIndent)) {\n hasContent = true;\n\n } else if (readAlias(state)) {\n hasContent = true;\n\n if (state.tag !== null || state.anchor !== null) {\n throwError(state, 'alias node should not have any properties');\n }\n\n } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n hasContent = true;\n\n if (state.tag === null) {\n state.tag = '?';\n }\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n } else if (indentStatus === 0) {\n // Special case: block sequences are allowed to have same indentation level as the parent.\n // http://www.yaml.org/spec/1.2/spec.html#id2799784\n hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);\n }\n }\n\n if (state.tag === null) {\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n\n } else if (state.tag === '?') {\n // Implicit resolving is not allowed for non-scalar types, and '?'\n // non-specific tag is only automatically assigned to plain scalars.\n //\n // We only need to check kind conformity in case user explicitly assigns '?'\n // tag, for example like this: \"!<?> [0]\"\n //\n if (state.result !== null && state.kind !== 'scalar') {\n throwError(state, 'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"' + state.kind + '\"');\n }\n\n for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {\n type = state.implicitTypes[typeIndex];\n\n if (type.resolve(state.result)) { // `state.result` updated in resolver if matched\n state.result = type.construct(state.result);\n state.tag = type.tag;\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n break;\n }\n }\n } else if (state.tag !== '!') {\n if (_hasOwnProperty$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) {\n type = state.typeMap[state.kind || 'fallback'][state.tag];\n } else {\n // looking for multi type\n type = null;\n typeList = state.typeMap.multi[state.kind || 'fallback'];\n\n for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {\n if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {\n type = typeList[typeIndex];\n break;\n }\n }\n }\n\n if (!type) {\n throwError(state, 'unknown tag !<' + state.tag + '>');\n }\n\n if (state.result !== null && type.kind !== state.kind) {\n throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be \"' + type.kind + '\", not \"' + state.kind + '\"');\n }\n\n if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched\n throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');\n } else {\n state.result = type.construct(state.result, state.tag);\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n }\n\n if (state.listener !== null) {\n state.listener('close', state);\n }\n return state.tag !== null || state.anchor !== null || hasContent;\n}\n\nfunction readDocument(state) {\n var documentStart = state.position,\n _position,\n directiveName,\n directiveArgs,\n hasDirectives = false,\n ch;\n\n state.version = null;\n state.checkLineBreaks = state.legacy;\n state.tagMap = Object.create(null);\n state.anchorMap = Object.create(null);\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if (state.lineIndent > 0 || ch !== 0x25/* % */) {\n break;\n }\n\n hasDirectives = true;\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveName = state.input.slice(_position, state.position);\n directiveArgs = [];\n\n if (directiveName.length < 1) {\n throwError(state, 'directive name must not be less than one character in length');\n }\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && !is_EOL(ch));\n break;\n }\n\n if (is_EOL(ch)) break;\n\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveArgs.push(state.input.slice(_position, state.position));\n }\n\n if (ch !== 0) readLineBreak(state);\n\n if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {\n directiveHandlers[directiveName](state, directiveName, directiveArgs);\n } else {\n throwWarning(state, 'unknown document directive \"' + directiveName + '\"');\n }\n }\n\n skipSeparationSpace(state, true, -1);\n\n if (state.lineIndent === 0 &&\n state.input.charCodeAt(state.position) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 1) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 2) === 0x2D/* - */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n\n } else if (hasDirectives) {\n throwError(state, 'directives end mark is expected');\n }\n\n composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n skipSeparationSpace(state, true, -1);\n\n if (state.checkLineBreaks &&\n PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {\n throwWarning(state, 'non-ASCII line breaks are interpreted as content');\n }\n\n state.documents.push(state.result);\n\n if (state.position === state.lineStart && testDocumentSeparator(state)) {\n\n if (state.input.charCodeAt(state.position) === 0x2E/* . */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n }\n return;\n }\n\n if (state.position < (state.length - 1)) {\n throwError(state, 'end of the stream or a document separator is expected');\n } else {\n return;\n }\n}\n\n\nfunction loadDocuments(input, options) {\n input = String(input);\n options = options || {};\n\n if (input.length !== 0) {\n\n // Add tailing `\\n` if not exists\n if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ &&\n input.charCodeAt(input.length - 1) !== 0x0D/* CR */) {\n input += '\\n';\n }\n\n // Strip BOM\n if (input.charCodeAt(0) === 0xFEFF) {\n input = input.slice(1);\n }\n }\n\n var state = new State$1(input, options);\n\n var nullpos = input.indexOf('\\0');\n\n if (nullpos !== -1) {\n state.position = nullpos;\n throwError(state, 'null byte is not allowed in input');\n }\n\n // Use 0 as string terminator. That significantly simplifies bounds check.\n state.input += '\\0';\n\n while (state.input.charCodeAt(state.position) === 0x20/* Space */) {\n state.lineIndent += 1;\n state.position += 1;\n }\n\n while (state.position < (state.length - 1)) {\n readDocument(state);\n }\n\n return state.documents;\n}\n\n\nfunction loadAll$1(input, iterator, options) {\n if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') {\n options = iterator;\n iterator = null;\n }\n\n var documents = loadDocuments(input, options);\n\n if (typeof iterator !== 'function') {\n return documents;\n }\n\n for (var index = 0, length = documents.length; index < length; index += 1) {\n iterator(documents[index]);\n }\n}\n\n\nfunction load$1(input, options) {\n var documents = loadDocuments(input, options);\n\n if (documents.length === 0) {\n /*eslint-disable no-undefined*/\n return undefined;\n } else if (documents.length === 1) {\n return documents[0];\n }\n throw new exception('expected a single document in the stream, but found more');\n}\n\n\nvar loadAll_1 = loadAll$1;\nvar load_1 = load$1;\n\nvar loader = {\n\tloadAll: loadAll_1,\n\tload: load_1\n};\n\n/*eslint-disable no-use-before-define*/\n\n\n\n\n\nvar _toString = Object.prototype.toString;\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar CHAR_BOM = 0xFEFF;\nvar CHAR_TAB = 0x09; /* Tab */\nvar CHAR_LINE_FEED = 0x0A; /* LF */\nvar CHAR_CARRIAGE_RETURN = 0x0D; /* CR */\nvar CHAR_SPACE = 0x20; /* Space */\nvar CHAR_EXCLAMATION = 0x21; /* ! */\nvar CHAR_DOUBLE_QUOTE = 0x22; /* \" */\nvar CHAR_SHARP = 0x23; /* # */\nvar CHAR_PERCENT = 0x25; /* % */\nvar CHAR_AMPERSAND = 0x26; /* & */\nvar CHAR_SINGLE_QUOTE = 0x27; /* ' */\nvar CHAR_ASTERISK = 0x2A; /* * */\nvar CHAR_COMMA = 0x2C; /* , */\nvar CHAR_MINUS = 0x2D; /* - */\nvar CHAR_COLON = 0x3A; /* : */\nvar CHAR_EQUALS = 0x3D; /* = */\nvar CHAR_GREATER_THAN = 0x3E; /* > */\nvar CHAR_QUESTION = 0x3F; /* ? */\nvar CHAR_COMMERCIAL_AT = 0x40; /* @ */\nvar CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */\nvar CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */\nvar CHAR_GRAVE_ACCENT = 0x60; /* ` */\nvar CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */\nvar CHAR_VERTICAL_LINE = 0x7C; /* | */\nvar CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */\n\nvar ESCAPE_SEQUENCES = {};\n\nESCAPE_SEQUENCES[0x00] = '\\\\0';\nESCAPE_SEQUENCES[0x07] = '\\\\a';\nESCAPE_SEQUENCES[0x08] = '\\\\b';\nESCAPE_SEQUENCES[0x09] = '\\\\t';\nESCAPE_SEQUENCES[0x0A] = '\\\\n';\nESCAPE_SEQUENCES[0x0B] = '\\\\v';\nESCAPE_SEQUENCES[0x0C] = '\\\\f';\nESCAPE_SEQUENCES[0x0D] = '\\\\r';\nESCAPE_SEQUENCES[0x1B] = '\\\\e';\nESCAPE_SEQUENCES[0x22] = '\\\\\"';\nESCAPE_SEQUENCES[0x5C] = '\\\\\\\\';\nESCAPE_SEQUENCES[0x85] = '\\\\N';\nESCAPE_SEQUENCES[0xA0] = '\\\\_';\nESCAPE_SEQUENCES[0x2028] = '\\\\L';\nESCAPE_SEQUENCES[0x2029] = '\\\\P';\n\nvar DEPRECATED_BOOLEANS_SYNTAX = [\n 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON',\n 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF'\n];\n\nvar DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;\n\nfunction compileStyleMap(schema, map) {\n var result, keys, index, length, tag, style, type;\n\n if (map === null) return {};\n\n result = {};\n keys = Object.keys(map);\n\n for (index = 0, length = keys.length; index < length; index += 1) {\n tag = keys[index];\n style = String(map[tag]);\n\n if (tag.slice(0, 2) === '!!') {\n tag = 'tag:yaml.org,2002:' + tag.slice(2);\n }\n type = schema.compiledTypeMap['fallback'][tag];\n\n if (type && _hasOwnProperty.call(type.styleAliases, style)) {\n style = type.styleAliases[style];\n }\n\n result[tag] = style;\n }\n\n return result;\n}\n\nfunction encodeHex(character) {\n var string, handle, length;\n\n string = character.toString(16).toUpperCase();\n\n if (character <= 0xFF) {\n handle = 'x';\n length = 2;\n } else if (character <= 0xFFFF) {\n handle = 'u';\n length = 4;\n } else if (character <= 0xFFFFFFFF) {\n handle = 'U';\n length = 8;\n } else {\n throw new exception('code point within a string may not be greater than 0xFFFFFFFF');\n }\n\n return '\\\\' + handle + common.repeat('0', length - string.length) + string;\n}\n\n\nvar QUOTING_TYPE_SINGLE = 1,\n QUOTING_TYPE_DOUBLE = 2;\n\nfunction State(options) {\n this.schema = options['schema'] || _default;\n this.indent = Math.max(1, (options['indent'] || 2));\n this.noArrayIndent = options['noArrayIndent'] || false;\n this.skipInvalid = options['skipInvalid'] || false;\n this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']);\n this.styleMap = compileStyleMap(this.schema, options['styles'] || null);\n this.sortKeys = options['sortKeys'] || false;\n this.lineWidth = options['lineWidth'] || 80;\n this.noRefs = options['noRefs'] || false;\n this.noCompatMode = options['noCompatMode'] || false;\n this.condenseFlow = options['condenseFlow'] || false;\n this.quotingType = options['quotingType'] === '\"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE;\n this.forceQuotes = options['forceQuotes'] || false;\n this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.explicitTypes = this.schema.compiledExplicit;\n\n this.tag = null;\n this.result = '';\n\n this.duplicates = [];\n this.usedDuplicates = null;\n}\n\n// Indents every line in a string. Empty lines (\\n only) are not indented.\nfunction indentString(string, spaces) {\n var ind = common.repeat(' ', spaces),\n position = 0,\n next = -1,\n result = '',\n line,\n length = string.length;\n\n while (position < length) {\n next = string.indexOf('\\n', position);\n if (next === -1) {\n line = string.slice(position);\n position = length;\n } else {\n line = string.slice(position, next + 1);\n position = next + 1;\n }\n\n if (line.length && line !== '\\n') result += ind;\n\n result += line;\n }\n\n return result;\n}\n\nfunction generateNextLine(state, level) {\n return '\\n' + common.repeat(' ', state.indent * level);\n}\n\nfunction testImplicitResolving(state, str) {\n var index, length, type;\n\n for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {\n type = state.implicitTypes[index];\n\n if (type.resolve(str)) {\n return true;\n }\n }\n\n return false;\n}\n\n// [33] s-white ::= s-space | s-tab\nfunction isWhitespace(c) {\n return c === CHAR_SPACE || c === CHAR_TAB;\n}\n\n// Returns true if the character can be printed without escaping.\n// From YAML 1.2: \"any allowed characters known to be non-printable\n// should also be escaped. [However,] This isn\u2019t mandatory\"\n// Derived from nb-char - \\t - #x85 - #xA0 - #x2028 - #x2029.\nfunction isPrintable(c) {\n return (0x00020 <= c && c <= 0x00007E)\n || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029)\n || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM)\n || (0x10000 <= c && c <= 0x10FFFF);\n}\n\n// [34] ns-char ::= nb-char - s-white\n// [27] nb-char ::= c-printable - b-char - c-byte-order-mark\n// [26] b-char ::= b-line-feed | b-carriage-return\n// Including s-white (for some reason, examples doesn't match specs in this aspect)\n// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark\nfunction isNsCharOrWhitespace(c) {\n return isPrintable(c)\n && c !== CHAR_BOM\n // - b-char\n && c !== CHAR_CARRIAGE_RETURN\n && c !== CHAR_LINE_FEED;\n}\n\n// [127] ns-plain-safe(c) ::= c = flow-out \u21D2 ns-plain-safe-out\n// c = flow-in \u21D2 ns-plain-safe-in\n// c = block-key \u21D2 ns-plain-safe-out\n// c = flow-key \u21D2 ns-plain-safe-in\n// [128] ns-plain-safe-out ::= ns-char\n// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator\n// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - \u201C:\u201D - \u201C#\u201D )\n// | ( /* An ns-char preceding */ \u201C#\u201D )\n// | ( \u201C:\u201D /* Followed by an ns-plain-safe(c) */ )\nfunction isPlainSafe(c, prev, inblock) {\n var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c);\n var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c);\n return (\n // ns-plain-safe\n inblock ? // c = flow-in\n cIsNsCharOrWhitespace\n : cIsNsCharOrWhitespace\n // - c-flow-indicator\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n )\n // ns-plain-char\n && c !== CHAR_SHARP // false on '#'\n && !(prev === CHAR_COLON && !cIsNsChar) // false on ': '\n || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#'\n || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]'\n}\n\n// Simplified test for values allowed as the first character in plain style.\nfunction isPlainSafeFirst(c) {\n // Uses a subset of ns-char - c-indicator\n // where ns-char = nb-char - s-white.\n // No support of ( ( \u201C?\u201D | \u201C:\u201D | \u201C-\u201D ) /* Followed by an ns-plain-safe(c)) */ ) part\n return isPrintable(c) && c !== CHAR_BOM\n && !isWhitespace(c) // - s-white\n // - (c-indicator ::=\n // \u201C-\u201D | \u201C?\u201D | \u201C:\u201D | \u201C,\u201D | \u201C[\u201D | \u201C]\u201D | \u201C{\u201D | \u201C}\u201D\n && c !== CHAR_MINUS\n && c !== CHAR_QUESTION\n && c !== CHAR_COLON\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n // | \u201C#\u201D | \u201C&\u201D | \u201C*\u201D | \u201C!\u201D | \u201C|\u201D | \u201C=\u201D | \u201C>\u201D | \u201C'\u201D | \u201C\"\u201D\n && c !== CHAR_SHARP\n && c !== CHAR_AMPERSAND\n && c !== CHAR_ASTERISK\n && c !== CHAR_EXCLAMATION\n && c !== CHAR_VERTICAL_LINE\n && c !== CHAR_EQUALS\n && c !== CHAR_GREATER_THAN\n && c !== CHAR_SINGLE_QUOTE\n && c !== CHAR_DOUBLE_QUOTE\n // | \u201C%\u201D | \u201C@\u201D | \u201C`\u201D)\n && c !== CHAR_PERCENT\n && c !== CHAR_COMMERCIAL_AT\n && c !== CHAR_GRAVE_ACCENT;\n}\n\n// Simplified test for values allowed as the last character in plain style.\nfunction isPlainSafeLast(c) {\n // just not whitespace or colon, it will be checked to be plain character later\n return !isWhitespace(c) && c !== CHAR_COLON;\n}\n\n// Same as 'string'.codePointAt(pos), but works in older browsers.\nfunction codePointAt(string, pos) {\n var first = string.charCodeAt(pos), second;\n if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) {\n second = string.charCodeAt(pos + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n return first;\n}\n\n// Determines whether block indentation indicator is required.\nfunction needIndentIndicator(string) {\n var leadingSpaceRe = /^\\n* /;\n return leadingSpaceRe.test(string);\n}\n\nvar STYLE_PLAIN = 1,\n STYLE_SINGLE = 2,\n STYLE_LITERAL = 3,\n STYLE_FOLDED = 4,\n STYLE_DOUBLE = 5;\n\n// Determines which scalar styles are possible and returns the preferred style.\n// lineWidth = -1 => no limit.\n// Pre-conditions: str.length > 0.\n// Post-conditions:\n// STYLE_PLAIN or STYLE_SINGLE => no \\n are in the string.\n// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).\n// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).\nfunction chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth,\n testAmbiguousType, quotingType, forceQuotes, inblock) {\n\n var i;\n var char = 0;\n var prevChar = null;\n var hasLineBreak = false;\n var hasFoldableLine = false; // only checked if shouldTrackWidth\n var shouldTrackWidth = lineWidth !== -1;\n var previousLineBreak = -1; // count the first line correctly\n var plain = isPlainSafeFirst(codePointAt(string, 0))\n && isPlainSafeLast(codePointAt(string, string.length - 1));\n\n if (singleLineOnly || forceQuotes) {\n // Case: no block styles.\n // Check for disallowed characters to rule out plain and single.\n for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n } else {\n // Case: block styles permitted.\n for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (char === CHAR_LINE_FEED) {\n hasLineBreak = true;\n // Check if any line can be folded.\n if (shouldTrackWidth) {\n hasFoldableLine = hasFoldableLine ||\n // Foldable line = too long, and not more-indented.\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' ');\n previousLineBreak = i;\n }\n } else if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n // in case the end is missing a \\n\n hasFoldableLine = hasFoldableLine || (shouldTrackWidth &&\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' '));\n }\n // Although every style can represent \\n without escaping, prefer block styles\n // for multiline, since they're more readable and they don't add empty lines.\n // Also prefer folding a super-long line.\n if (!hasLineBreak && !hasFoldableLine) {\n // Strings interpretable as another type have to be quoted;\n // e.g. the string 'true' vs. the boolean true.\n if (plain && !forceQuotes && !testAmbiguousType(string)) {\n return STYLE_PLAIN;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n }\n // Edge case: block indentation indicator can only have one digit.\n if (indentPerLevel > 9 && needIndentIndicator(string)) {\n return STYLE_DOUBLE;\n }\n // At this point we know block styles are valid.\n // Prefer literal style unless we want to fold.\n if (!forceQuotes) {\n return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n}\n\n// Note: line breaking/folding is implemented for only the folded style.\n// NB. We drop the last trailing newline (if any) of a returned block scalar\n// since the dumper adds its own newline. This always works:\n// \u2022 No ending newline => unaffected; already using strip \"-\" chomping.\n// \u2022 Ending newline => removed then restored.\n// Importantly, this keeps the \"+\" chomp indicator from gaining an extra line.\nfunction writeScalar(state, string, level, iskey, inblock) {\n state.dump = (function () {\n if (string.length === 0) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? '\"\"' : \"''\";\n }\n if (!state.noCompatMode) {\n if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? ('\"' + string + '\"') : (\"'\" + string + \"'\");\n }\n }\n\n var indent = state.indent * Math.max(1, level); // no 0-indent scalars\n // As indentation gets deeper, let the width decrease monotonically\n // to the lower bound min(state.lineWidth, 40).\n // Note that this implies\n // state.lineWidth \u2264 40 + state.indent: width is fixed at the lower bound.\n // state.lineWidth > 40 + state.indent: width decreases until the lower bound.\n // This behaves better than a constant minimum width which disallows narrower options,\n // or an indent threshold which causes the width to suddenly increase.\n var lineWidth = state.lineWidth === -1\n ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);\n\n // Without knowing if keys are implicit/explicit, assume implicit for safety.\n var singleLineOnly = iskey\n // No block styles in flow mode.\n || (state.flowLevel > -1 && level >= state.flowLevel);\n function testAmbiguity(string) {\n return testImplicitResolving(state, string);\n }\n\n switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth,\n testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) {\n\n case STYLE_PLAIN:\n return string;\n case STYLE_SINGLE:\n return \"'\" + string.replace(/'/g, \"''\") + \"'\";\n case STYLE_LITERAL:\n return '|' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(string, indent));\n case STYLE_FOLDED:\n return '>' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(foldString(string, lineWidth), indent));\n case STYLE_DOUBLE:\n return '\"' + escapeString(string) + '\"';\n default:\n throw new exception('impossible error: invalid scalar style');\n }\n }());\n}\n\n// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.\nfunction blockHeader(string, indentPerLevel) {\n var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';\n\n // note the special case: the string '\\n' counts as a \"trailing\" empty line.\n var clip = string[string.length - 1] === '\\n';\n var keep = clip && (string[string.length - 2] === '\\n' || string === '\\n');\n var chomp = keep ? '+' : (clip ? '' : '-');\n\n return indentIndicator + chomp + '\\n';\n}\n\n// (See the note for writeScalar.)\nfunction dropEndingNewline(string) {\n return string[string.length - 1] === '\\n' ? string.slice(0, -1) : string;\n}\n\n// Note: a long line without a suitable break point will exceed the width limit.\n// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.\nfunction foldString(string, width) {\n // In folded style, $k$ consecutive newlines output as $k+1$ newlines\u2014\n // unless they're before or after a more-indented line, or at the very\n // beginning or end, in which case $k$ maps to $k$.\n // Therefore, parse each chunk as newline(s) followed by a content line.\n var lineRe = /(\\n+)([^\\n]*)/g;\n\n // first line (possibly an empty line)\n var result = (function () {\n var nextLF = string.indexOf('\\n');\n nextLF = nextLF !== -1 ? nextLF : string.length;\n lineRe.lastIndex = nextLF;\n return foldLine(string.slice(0, nextLF), width);\n }());\n // If we haven't reached the first content line yet, don't add an extra \\n.\n var prevMoreIndented = string[0] === '\\n' || string[0] === ' ';\n var moreIndented;\n\n // rest of the lines\n var match;\n while ((match = lineRe.exec(string))) {\n var prefix = match[1], line = match[2];\n moreIndented = (line[0] === ' ');\n result += prefix\n + (!prevMoreIndented && !moreIndented && line !== ''\n ? '\\n' : '')\n + foldLine(line, width);\n prevMoreIndented = moreIndented;\n }\n\n return result;\n}\n\n// Greedy line breaking.\n// Picks the longest line under the limit each time,\n// otherwise settles for the shortest line over the limit.\n// NB. More-indented lines *cannot* be folded, as that would add an extra \\n.\nfunction foldLine(line, width) {\n if (line === '' || line[0] === ' ') return line;\n\n // Since a more-indented line adds a \\n, breaks can't be followed by a space.\n var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.\n var match;\n // start is an inclusive index. end, curr, and next are exclusive.\n var start = 0, end, curr = 0, next = 0;\n var result = '';\n\n // Invariants: 0 <= start <= length-1.\n // 0 <= curr <= next <= max(0, length-2). curr - start <= width.\n // Inside the loop:\n // A match implies length >= 2, so curr and next are <= length-2.\n while ((match = breakRe.exec(line))) {\n next = match.index;\n // maintain invariant: curr - start <= width\n if (next - start > width) {\n end = (curr > start) ? curr : next; // derive end <= length-2\n result += '\\n' + line.slice(start, end);\n // skip the space that was output as \\n\n start = end + 1; // derive start <= length-1\n }\n curr = next;\n }\n\n // By the invariants, start <= length-1, so there is something left over.\n // It is either the whole string or a part starting from non-whitespace.\n result += '\\n';\n // Insert a break if the remainder is too long and there is a break available.\n if (line.length - start > width && curr > start) {\n result += line.slice(start, curr) + '\\n' + line.slice(curr + 1);\n } else {\n result += line.slice(start);\n }\n\n return result.slice(1); // drop extra \\n joiner\n}\n\n// Escapes a double-quoted string.\nfunction escapeString(string) {\n var result = '';\n var char = 0;\n var escapeSeq;\n\n for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n escapeSeq = ESCAPE_SEQUENCES[char];\n\n if (!escapeSeq && isPrintable(char)) {\n result += string[i];\n if (char >= 0x10000) result += string[i + 1];\n } else {\n result += escapeSeq || encodeHex(char);\n }\n }\n\n return result;\n}\n\nfunction writeFlowSequence(state, level, object) {\n var _result = '',\n _tag = state.tag,\n index,\n length,\n value;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n\n // Write only valid elements, put null instead of invalid elements.\n if (writeNode(state, level, value, false, false) ||\n (typeof value === 'undefined' &&\n writeNode(state, level, null, false, false))) {\n\n if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : '');\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = '[' + _result + ']';\n}\n\nfunction writeBlockSequence(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n index,\n length,\n value;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n\n // Write only valid elements, put null instead of invalid elements.\n if (writeNode(state, level + 1, value, true, true, false, true) ||\n (typeof value === 'undefined' &&\n writeNode(state, level + 1, null, true, true, false, true))) {\n\n if (!compact || _result !== '') {\n _result += generateNextLine(state, level);\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n _result += '-';\n } else {\n _result += '- ';\n }\n\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = _result || '[]'; // Empty sequence if no valid values.\n}\n\nfunction writeFlowMapping(state, level, object) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n pairBuffer;\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n\n pairBuffer = '';\n if (_result !== '') pairBuffer += ', ';\n\n if (state.condenseFlow) pairBuffer += '\"';\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n\n if (!writeNode(state, level, objectKey, false, false)) {\n continue; // Skip this pair because of invalid key;\n }\n\n if (state.dump.length > 1024) pairBuffer += '? ';\n\n pairBuffer += state.dump + (state.condenseFlow ? '\"' : '') + ':' + (state.condenseFlow ? '' : ' ');\n\n if (!writeNode(state, level, objectValue, false, false)) {\n continue; // Skip this pair because of invalid value.\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = '{' + _result + '}';\n}\n\nfunction writeBlockMapping(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n explicitPair,\n pairBuffer;\n\n // Allow sorting keys so that the output file is deterministic\n if (state.sortKeys === true) {\n // Default sorting\n objectKeyList.sort();\n } else if (typeof state.sortKeys === 'function') {\n // Custom sort function\n objectKeyList.sort(state.sortKeys);\n } else if (state.sortKeys) {\n // Something is wrong\n throw new exception('sortKeys must be a boolean or a function');\n }\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n pairBuffer = '';\n\n if (!compact || _result !== '') {\n pairBuffer += generateNextLine(state, level);\n }\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n\n if (!writeNode(state, level + 1, objectKey, true, true, true)) {\n continue; // Skip this pair because of invalid key.\n }\n\n explicitPair = (state.tag !== null && state.tag !== '?') ||\n (state.dump && state.dump.length > 1024);\n\n if (explicitPair) {\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += '?';\n } else {\n pairBuffer += '? ';\n }\n }\n\n pairBuffer += state.dump;\n\n if (explicitPair) {\n pairBuffer += generateNextLine(state, level);\n }\n\n if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {\n continue; // Skip this pair because of invalid value.\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += ':';\n } else {\n pairBuffer += ': ';\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = _result || '{}'; // Empty mapping if no valid pairs.\n}\n\nfunction detectType(state, object, explicit) {\n var _result, typeList, index, length, type, style;\n\n typeList = explicit ? state.explicitTypes : state.implicitTypes;\n\n for (index = 0, length = typeList.length; index < length; index += 1) {\n type = typeList[index];\n\n if ((type.instanceOf || type.predicate) &&\n (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) &&\n (!type.predicate || type.predicate(object))) {\n\n if (explicit) {\n if (type.multi && type.representName) {\n state.tag = type.representName(object);\n } else {\n state.tag = type.tag;\n }\n } else {\n state.tag = '?';\n }\n\n if (type.represent) {\n style = state.styleMap[type.tag] || type.defaultStyle;\n\n if (_toString.call(type.represent) === '[object Function]') {\n _result = type.represent(object, style);\n } else if (_hasOwnProperty.call(type.represent, style)) {\n _result = type.represent[style](object, style);\n } else {\n throw new exception('!<' + type.tag + '> tag resolver accepts not \"' + style + '\" style');\n }\n\n state.dump = _result;\n }\n\n return true;\n }\n }\n\n return false;\n}\n\n// Serializes `object` and writes it to global `result`.\n// Returns true on success, or false on invalid object.\n//\nfunction writeNode(state, level, object, block, compact, iskey, isblockseq) {\n state.tag = null;\n state.dump = object;\n\n if (!detectType(state, object, false)) {\n detectType(state, object, true);\n }\n\n var type = _toString.call(state.dump);\n var inblock = block;\n var tagStr;\n\n if (block) {\n block = (state.flowLevel < 0 || state.flowLevel > level);\n }\n\n var objectOrArray = type === '[object Object]' || type === '[object Array]',\n duplicateIndex,\n duplicate;\n\n if (objectOrArray) {\n duplicateIndex = state.duplicates.indexOf(object);\n duplicate = duplicateIndex !== -1;\n }\n\n if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) {\n compact = false;\n }\n\n if (duplicate && state.usedDuplicates[duplicateIndex]) {\n state.dump = '*ref_' + duplicateIndex;\n } else {\n if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {\n state.usedDuplicates[duplicateIndex] = true;\n }\n if (type === '[object Object]') {\n if (block && (Object.keys(state.dump).length !== 0)) {\n writeBlockMapping(state, level, state.dump, compact);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowMapping(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object Array]') {\n if (block && (state.dump.length !== 0)) {\n if (state.noArrayIndent && !isblockseq && level > 0) {\n writeBlockSequence(state, level - 1, state.dump, compact);\n } else {\n writeBlockSequence(state, level, state.dump, compact);\n }\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowSequence(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object String]') {\n if (state.tag !== '?') {\n writeScalar(state, state.dump, level, iskey, inblock);\n }\n } else if (type === '[object Undefined]') {\n return false;\n } else {\n if (state.skipInvalid) return false;\n throw new exception('unacceptable kind of an object to dump ' + type);\n }\n\n if (state.tag !== null && state.tag !== '?') {\n // Need to encode all characters except those allowed by the spec:\n //\n // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */\n // [36] ns-hex-digit ::= ns-dec-digit\n // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */\n // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */\n // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | \u201C-\u201D\n // [39] ns-uri-char ::= \u201C%\u201D ns-hex-digit ns-hex-digit | ns-word-char | \u201C#\u201D\n // | \u201C;\u201D | \u201C/\u201D | \u201C?\u201D | \u201C:\u201D | \u201C@\u201D | \u201C&\u201D | \u201C=\u201D | \u201C+\u201D | \u201C$\u201D | \u201C,\u201D\n // | \u201C_\u201D | \u201C.\u201D | \u201C!\u201D | \u201C~\u201D | \u201C*\u201D | \u201C'\u201D | \u201C(\u201D | \u201C)\u201D | \u201C[\u201D | \u201C]\u201D\n //\n // Also need to encode '!' because it has special meaning (end of tag prefix).\n //\n tagStr = encodeURI(\n state.tag[0] === '!' ? state.tag.slice(1) : state.tag\n ).replace(/!/g, '%21');\n\n if (state.tag[0] === '!') {\n tagStr = '!' + tagStr;\n } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') {\n tagStr = '!!' + tagStr.slice(18);\n } else {\n tagStr = '!<' + tagStr + '>';\n }\n\n state.dump = tagStr + ' ' + state.dump;\n }\n }\n\n return true;\n}\n\nfunction getDuplicateReferences(object, state) {\n var objects = [],\n duplicatesIndexes = [],\n index,\n length;\n\n inspectNode(object, objects, duplicatesIndexes);\n\n for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {\n state.duplicates.push(objects[duplicatesIndexes[index]]);\n }\n state.usedDuplicates = new Array(length);\n}\n\nfunction inspectNode(object, objects, duplicatesIndexes) {\n var objectKeyList,\n index,\n length;\n\n if (object !== null && typeof object === 'object') {\n index = objects.indexOf(object);\n if (index !== -1) {\n if (duplicatesIndexes.indexOf(index) === -1) {\n duplicatesIndexes.push(index);\n }\n } else {\n objects.push(object);\n\n if (Array.isArray(object)) {\n for (index = 0, length = object.length; index < length; index += 1) {\n inspectNode(object[index], objects, duplicatesIndexes);\n }\n } else {\n objectKeyList = Object.keys(object);\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);\n }\n }\n }\n }\n}\n\nfunction dump$1(input, options) {\n options = options || {};\n\n var state = new State(options);\n\n if (!state.noRefs) getDuplicateReferences(input, state);\n\n var value = input;\n\n if (state.replacer) {\n value = state.replacer.call({ '': value }, '', value);\n }\n\n if (writeNode(state, 0, value, true, true)) return state.dump + '\\n';\n\n return '';\n}\n\nvar dump_1 = dump$1;\n\nvar dumper = {\n\tdump: dump_1\n};\n\nfunction renamed(from, to) {\n return function () {\n throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' +\n 'Use yaml.' + to + ' instead, which is now safe by default.');\n };\n}\n\n\nvar Type = type;\nvar Schema = schema;\nvar FAILSAFE_SCHEMA = failsafe;\nvar JSON_SCHEMA = json;\nvar CORE_SCHEMA = core;\nvar DEFAULT_SCHEMA = _default;\nvar load = loader.load;\nvar loadAll = loader.loadAll;\nvar dump = dumper.dump;\nvar YAMLException = exception;\n\n// Re-export all types in case user wants to create custom schema\nvar types = {\n binary: binary,\n float: float,\n map: map,\n null: _null,\n pairs: pairs,\n set: set,\n timestamp: timestamp,\n bool: bool,\n int: int,\n merge: merge,\n omap: omap,\n seq: seq,\n str: str\n};\n\n// Removed functions from JS-YAML 3.0.x\nvar safeLoad = renamed('safeLoad', 'load');\nvar safeLoadAll = renamed('safeLoadAll', 'loadAll');\nvar safeDump = renamed('safeDump', 'dump');\n\nvar jsYaml = {\n\tType: Type,\n\tSchema: Schema,\n\tFAILSAFE_SCHEMA: FAILSAFE_SCHEMA,\n\tJSON_SCHEMA: JSON_SCHEMA,\n\tCORE_SCHEMA: CORE_SCHEMA,\n\tDEFAULT_SCHEMA: DEFAULT_SCHEMA,\n\tload: load,\n\tloadAll: loadAll,\n\tdump: dump,\n\tYAMLException: YAMLException,\n\ttypes: types,\n\tsafeLoad: safeLoad,\n\tsafeLoadAll: safeLoadAll,\n\tsafeDump: safeDump\n};\n\nexport { CORE_SCHEMA, DEFAULT_SCHEMA, FAILSAFE_SCHEMA, JSON_SCHEMA, Schema, Type, YAMLException, jsYaml as default, dump, load, loadAll, safeDump, safeLoad, safeLoadAll, types };\n", "import type {\r\n ActivityDoc,\r\n Activity,\r\n ActivityValidationResult,\r\n ActivityValidationError,\r\n ActivityValidationWarning,\r\n} from './types.js';\r\n\r\nconst DATE_RE = /^\\d{4}-\\d{2}-\\d{2}$/;\r\nconst VALID_WEEKDAYS = new Set(['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']);\r\n\r\nexport function validateActivities(input: unknown): ActivityValidationResult {\r\n const errors: ActivityValidationError[] = [];\r\n const warnings: ActivityValidationWarning[] = [];\r\n\r\n if (!input || typeof input !== 'object') {\r\n return { valid: false, errors: [{ code: 'ACT-001', message: 'Input must be an object' }], warnings };\r\n }\r\n\r\n const raw = input as Record<string, unknown>;\r\n\r\n // ACT-001: notation must equal \"activities\"\r\n if (raw.notation === undefined) {\r\n errors.push({ code: 'ACT-001', message: 'notation field is required' });\r\n return { valid: false, errors, warnings };\r\n }\r\n if (raw.notation !== 'activities') {\r\n errors.push({ code: 'ACT-001', message: `notation must be \"activities\", got \"${String(raw.notation)}\"` });\r\n return { valid: false, errors, warnings };\r\n }\r\n\r\n if (!Array.isArray(raw.activities)) {\r\n errors.push({ code: 'SCHEMA_INVALID', message: 'activities must be an array', path: 'activities' });\r\n return { valid: false, errors, warnings };\r\n }\r\n\r\n // ACT-014 / ACT-015: project.calendar validation (run before per-activity loop;\r\n // surfaces clearly even when activities also have issues).\r\n if (raw.project && typeof raw.project === 'object') {\r\n const project = raw.project as Record<string, unknown>;\r\n const cal = project.calendar;\r\n if (cal && typeof cal === 'object') {\r\n const calendar = cal as Record<string, unknown>;\r\n if (calendar.working_days !== undefined) {\r\n if (!Array.isArray(calendar.working_days)) {\r\n errors.push({ code: 'ACT-014', message: 'project.calendar.working_days must be an array of weekday names', path: 'project.calendar.working_days' });\r\n } else {\r\n const seen = new Set<string>();\r\n for (let i = 0; i < calendar.working_days.length; i++) {\r\n const raw = calendar.working_days[i];\r\n const day = typeof raw === 'string' ? raw.toLowerCase() : '';\r\n if (!VALID_WEEKDAYS.has(day)) {\r\n errors.push({\r\n code: 'ACT-014',\r\n message: `project.calendar.working_days[${i}] \"${String(raw)}\" must be one of: mon, tue, wed, thu, fri, sat, sun`,\r\n path: `project.calendar.working_days[${i}]`,\r\n });\r\n } else if (seen.has(day)) {\r\n errors.push({\r\n code: 'ACT-014',\r\n message: `project.calendar.working_days has duplicate entry \"${day}\"`,\r\n path: `project.calendar.working_days[${i}]`,\r\n });\r\n } else {\r\n seen.add(day);\r\n }\r\n }\r\n }\r\n }\r\n if (calendar.holidays !== undefined) {\r\n if (!Array.isArray(calendar.holidays)) {\r\n errors.push({ code: 'ACT-015', message: 'project.calendar.holidays must be an array of ISO 8601 dates', path: 'project.calendar.holidays' });\r\n } else {\r\n for (let i = 0; i < calendar.holidays.length; i++) {\r\n const h = calendar.holidays[i];\r\n if (typeof h !== 'string' || !DATE_RE.test(h)) {\r\n errors.push({\r\n code: 'ACT-015',\r\n message: `project.calendar.holidays[${i}] \"${String(h)}\" must be an ISO 8601 date (YYYY-MM-DD)`,\r\n path: `project.calendar.holidays[${i}]`,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const doc = raw as unknown as ActivityDoc;\r\n const idSet = new Set<string>();\r\n\r\n for (let i = 0; i < doc.activities.length; i++) {\r\n const a = doc.activities[i] as unknown as Record<string, unknown>;\r\n const path = `activities[${i}]`;\r\n\r\n // ACT-010: reject single-value forms\r\n if ('goal' in a) {\r\n errors.push({ code: 'ACT-010', message: `Use \"goals: []\" array form instead of \"goal:\" (activity at index ${i})`, path });\r\n }\r\n if ('predecessor' in a) {\r\n errors.push({ code: 'ACT-010', message: `Use \"predecessors: []\" array form instead of \"predecessor:\" (activity at index ${i})`, path });\r\n }\r\n if ('tag' in a) {\r\n errors.push({ code: 'ACT-010', message: `Use \"tags: []\" array form instead of \"tag:\" (activity at index ${i})`, path });\r\n }\r\n\r\n // ACT-002: non-empty id\r\n if (!a.id || typeof a.id !== 'string' || (a.id as string).trim() === '') {\r\n errors.push({ code: 'ACT-002', message: `Activity at index ${i} is missing a non-empty id`, path });\r\n continue;\r\n }\r\n const id = a.id as string;\r\n\r\n // ACT-003: non-empty name\r\n if (!a.name || typeof a.name !== 'string' || (a.name as string).trim() === '') {\r\n errors.push({ code: 'ACT-003', message: `Activity \"${id}\" is missing a non-empty name`, path });\r\n }\r\n\r\n // ACT-004: unique ids\r\n if (idSet.has(id)) {\r\n errors.push({ code: 'ACT-004', message: `Duplicate activity id: \"${id}\"`, path });\r\n } else {\r\n idSet.add(id);\r\n }\r\n\r\n // ACT-009: non-negative numeric fields\r\n const numericFields = ['duration', 'labor_cost', 'resources_cost', 'effort', 'score', 'sort'] as const;\r\n for (const field of numericFields) {\r\n const val = a[field];\r\n if (val !== undefined && val !== null) {\r\n if (typeof val !== 'number' || val < 0) {\r\n errors.push({ code: 'ACT-009', message: `Activity \"${id}\" field \"${field}\" must be a non-negative number, got ${String(val)}`, path });\r\n }\r\n }\r\n }\r\n\r\n // ACT-011: warn if no duration\r\n if (a.duration === undefined || a.duration === null) {\r\n warnings.push({ code: 'ACT-011', message: `Activity \"${id}\" has no duration \u2014 cannot participate in CPM analysis`, path });\r\n }\r\n }\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n // Second pass \u2014 checks that need the full id set\r\n for (let i = 0; i < doc.activities.length; i++) {\r\n const a = doc.activities[i];\r\n const path = `activities[${i}]`;\r\n\r\n // ACT-007: self-loop\r\n if (Array.isArray(a.predecessors) && a.predecessors.includes(a.id)) {\r\n errors.push({ code: 'ACT-007', message: `Activity \"${a.id}\" lists itself as a predecessor`, path });\r\n }\r\n\r\n // ACT-005: predecessor existence (intra-document)\r\n for (const predId of (a.predecessors ?? [])) {\r\n if (!idSet.has(predId)) {\r\n errors.push({ code: 'ACT-005', message: `Activity \"${a.id}\" references unknown predecessor \"${predId}\"`, path });\r\n }\r\n }\r\n\r\n // ACT-008: date format validation + end_date >= start_date.\r\n // The orchestrator's pre-release review flagged that the raw lexicographic\r\n // string compare is only correct for strict YYYY-MM-DD, with no format\r\n // check applied. Now we validate the format first; the order compare runs\r\n // only when both dates are valid (otherwise the comparison message would\r\n // be misleading).\r\n let startValid = true;\r\n let endValid = true;\r\n if (a.start_date !== undefined) {\r\n if (typeof a.start_date !== 'string' || !DATE_RE.test(a.start_date)) {\r\n errors.push({ code: 'ACT-008', message: `Activity \"${a.id}\" start_date \"${String(a.start_date)}\" must be ISO 8601 YYYY-MM-DD`, path });\r\n startValid = false;\r\n }\r\n }\r\n if (a.end_date !== undefined) {\r\n if (typeof a.end_date !== 'string' || !DATE_RE.test(a.end_date)) {\r\n errors.push({ code: 'ACT-008', message: `Activity \"${a.id}\" end_date \"${String(a.end_date)}\" must be ISO 8601 YYYY-MM-DD`, path });\r\n endValid = false;\r\n }\r\n }\r\n if (a.start_date && a.end_date && startValid && endValid) {\r\n if (a.end_date < a.start_date) {\r\n errors.push({ code: 'ACT-008', message: `Activity \"${a.id}\" end_date \"${a.end_date}\" is before start_date \"${a.start_date}\"`, path });\r\n }\r\n }\r\n }\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n // ACT-006: no cycles\r\n const cycleError = detectCycle(doc.activities);\r\n if (cycleError) errors.push(cycleError);\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n // ACT-012: date/duration consistency (warning only)\r\n for (let i = 0; i < doc.activities.length; i++) {\r\n const a = doc.activities[i];\r\n if (a.start_date && a.end_date && a.duration !== undefined) {\r\n const start = new Date(a.start_date).getTime();\r\n const end = new Date(a.end_date).getTime();\r\n const diffDays = Math.round((end - start) / 86400000);\r\n if (Math.abs(diffDays - a.duration) > 1) {\r\n warnings.push({\r\n code: 'ACT-012',\r\n message: `Activity \"${a.id}\" duration ${a.duration} is inconsistent with date range of ~${diffDays} days`,\r\n path: `activities[${i}]`,\r\n });\r\n }\r\n }\r\n }\r\n\r\n // ACT-013: orphan activities (warning only)\r\n const successorIds = new Set<string>();\r\n for (const a of doc.activities) {\r\n for (const pred of (a.predecessors ?? [])) successorIds.add(pred);\r\n }\r\n for (let i = 0; i < doc.activities.length; i++) {\r\n const a = doc.activities[i];\r\n const hasSuccessors = successorIds.has(a.id);\r\n const hasGoals = Array.isArray(a.goals) && a.goals.length > 0;\r\n const hasPredecessors = Array.isArray(a.predecessors) && a.predecessors.length > 0;\r\n if (doc.activities.length > 1 && !hasSuccessors && !hasGoals && !hasPredecessors) {\r\n warnings.push({\r\n code: 'ACT-013',\r\n message: `Activity \"${a.id}\" appears to be structurally orphan (no predecessors, successors, or goals)`,\r\n path: `activities[${i}]`,\r\n });\r\n }\r\n }\r\n\r\n // ACT-016: milestone (duration=0) with both pinned dates MUST have start == end.\r\n for (let i = 0; i < doc.activities.length; i++) {\r\n const a = doc.activities[i];\r\n if (a.duration === 0 && a.start_date && a.end_date && a.start_date !== a.end_date) {\r\n errors.push({\r\n code: 'ACT-016',\r\n message: `Milestone \"${a.id}\" has duration 0 but start_date \"${a.start_date}\" \u2260 end_date \"${a.end_date}\"`,\r\n path: `activities[${i}]`,\r\n });\r\n }\r\n }\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n // ACT-017 / ACT-018: phase warnings. A \"phase\" is an activity that is referenced\r\n // by another activity's `parent` field. ACT-017 warns when a phase carries its\r\n // own duration/dates (those roll up from children). ACT-018 warns when an\r\n // activity that looks like a phase (no duration, no pinned dates) has no\r\n // children \u2014 possibly an unused placeholder.\r\n const childCount = new Map<string, number>();\r\n for (const a of doc.activities) {\r\n if (typeof a.parent === 'string' && a.parent.length > 0) {\r\n childCount.set(a.parent, (childCount.get(a.parent) ?? 0) + 1);\r\n }\r\n }\r\n for (let i = 0; i < doc.activities.length; i++) {\r\n const a = doc.activities[i];\r\n const isReferencedAsParent = (childCount.get(a.id) ?? 0) > 0;\r\n if (isReferencedAsParent) {\r\n const carriesOwnTiming =\r\n (a.duration !== undefined && a.duration !== null) ||\r\n typeof a.start_date === 'string' ||\r\n typeof a.end_date === 'string';\r\n if (carriesOwnTiming) {\r\n warnings.push({\r\n code: 'ACT-017',\r\n message: `Phase \"${a.id}\" carries its own duration/dates \u2014 those should roll up from children, not be authored directly`,\r\n path: `activities[${i}]`,\r\n });\r\n }\r\n } else {\r\n // Not referenced as parent. ACT-018 only fires when the activity LOOKS\r\n // like a phase: no duration declared and no pinned dates. A leaf without\r\n // duration is already covered by ACT-011 \u2014 the same activity may surface\r\n // both warnings, which is correct (separate concerns: CPM-unfit vs\r\n // empty-phase).\r\n const looksLikePhase =\r\n (a.duration === undefined || a.duration === null) &&\r\n !a.start_date &&\r\n !a.end_date;\r\n if (looksLikePhase) {\r\n warnings.push({\r\n code: 'ACT-018',\r\n message: `Activity \"${a.id}\" has no duration and no children \u2014 may be an empty phase`,\r\n path: `activities[${i}]`,\r\n });\r\n }\r\n }\r\n }\r\n\r\n // ACT-019: Gantt view will not render when neither project.start_date nor\r\n // any per-activity pinned date pair is present. Network view is unaffected.\r\n const hasProjectStart = typeof doc.project?.start_date === 'string' && doc.project.start_date.length > 0;\r\n const hasPinnedActivity = doc.activities.some(\r\n (a) => typeof a.start_date === 'string' && typeof a.end_date === 'string',\r\n );\r\n if (!hasProjectStart && !hasPinnedActivity) {\r\n warnings.push({\r\n code: 'ACT-019',\r\n message: 'Gantt view will not render: project.start_date is absent and no activity has both start_date and end_date pinned. Network view is unaffected.',\r\n });\r\n }\r\n\r\n return { valid: errors.length === 0, errors, warnings };\r\n}\r\n\r\nfunction detectCycle(activities: Activity[]): ActivityValidationError | null {\r\n const successors = new Map<string, string[]>();\r\n for (const a of activities) {\r\n successors.set(a.id, []);\r\n }\r\n for (const a of activities) {\r\n for (const pred of (a.predecessors ?? [])) {\r\n const list = successors.get(pred);\r\n if (list) list.push(a.id);\r\n }\r\n }\r\n\r\n // Kahn's algorithm: if we can't process all nodes, there's a cycle\r\n const inDegree = new Map<string, number>();\r\n for (const a of activities) inDegree.set(a.id, 0);\r\n for (const a of activities) {\r\n for (const pred of (a.predecessors ?? [])) {\r\n inDegree.set(a.id, (inDegree.get(a.id) ?? 0) + 1);\r\n }\r\n }\r\n\r\n const queue: string[] = [];\r\n for (const [id, deg] of inDegree) {\r\n if (deg === 0) queue.push(id);\r\n }\r\n\r\n let processed = 0;\r\n while (queue.length > 0) {\r\n const id = queue.shift()!;\r\n processed++;\r\n for (const succ of (successors.get(id) ?? [])) {\r\n const newDeg = (inDegree.get(succ) ?? 1) - 1;\r\n inDegree.set(succ, newDeg);\r\n if (newDeg === 0) queue.push(succ);\r\n }\r\n }\r\n\r\n if (processed < activities.length) {\r\n const cycleNodes = activities.filter(a => (inDegree.get(a.id) ?? 0) > 0).map(a => a.id);\r\n return { code: 'ACT-006', message: `Cycle detected in activity dependency graph involving: ${cycleNodes.join(', ')}` };\r\n }\r\n return null;\r\n}\r\n", "import type { Activity, CpmResult, CpmValues } from './types.js';\r\n\r\nexport function computeCpm(activities: Activity[]): CpmResult {\r\n const result: CpmResult = new Map();\r\n\r\n if (activities.length === 0) return result;\r\n\r\n // Build successor map and in-degree for topological sort\r\n const successors = new Map<string, string[]>();\r\n const predecessors = new Map<string, string[]>();\r\n for (const a of activities) {\r\n successors.set(a.id, []);\r\n predecessors.set(a.id, a.predecessors?.filter(p => p !== a.id) ?? []);\r\n }\r\n for (const a of activities) {\r\n for (const pred of (predecessors.get(a.id) ?? [])) {\r\n successors.get(pred)?.push(a.id);\r\n }\r\n }\r\n\r\n // Topological sort (Kahn's)\r\n const inDegree = new Map<string, number>();\r\n for (const a of activities) {\r\n inDegree.set(a.id, (predecessors.get(a.id) ?? []).length);\r\n }\r\n const queue: string[] = [];\r\n for (const a of activities) {\r\n if ((inDegree.get(a.id) ?? 0) === 0) queue.push(a.id);\r\n }\r\n const topoOrder: string[] = [];\r\n while (queue.length > 0) {\r\n const id = queue.shift()!;\r\n topoOrder.push(id);\r\n for (const succ of (successors.get(id) ?? [])) {\r\n const newDeg = (inDegree.get(succ) ?? 1) - 1;\r\n inDegree.set(succ, newDeg);\r\n if (newDeg === 0) queue.push(succ);\r\n }\r\n }\r\n\r\n const actById = new Map(activities.map(a => [a.id, a]));\r\n\r\n // Forward pass\r\n const es = new Map<string, number>();\r\n const ef = new Map<string, number>();\r\n for (const id of topoOrder) {\r\n const a = actById.get(id)!;\r\n const dur = a.duration ?? 0;\r\n const maxPredEf = Math.max(0, ...(predecessors.get(id) ?? []).map(p => ef.get(p) ?? 0));\r\n es.set(id, maxPredEf);\r\n ef.set(id, maxPredEf + dur);\r\n }\r\n\r\n // Project finish\r\n const projectFinish = Math.max(0, ...[...ef.values()]);\r\n\r\n // Backward pass\r\n const ls = new Map<string, number>();\r\n const lf = new Map<string, number>();\r\n for (const id of [...topoOrder].reverse()) {\r\n const a = actById.get(id)!;\r\n const dur = a.duration ?? 0;\r\n const succs = successors.get(id) ?? [];\r\n const minSuccLs = succs.length === 0 ? projectFinish : Math.min(...succs.map(s => ls.get(s) ?? projectFinish));\r\n lf.set(id, minSuccLs);\r\n ls.set(id, minSuccLs - dur);\r\n }\r\n\r\n // Assemble result\r\n for (const id of topoOrder) {\r\n const esV = es.get(id) ?? 0;\r\n const efV = ef.get(id) ?? 0;\r\n const lsV = ls.get(id) ?? 0;\r\n const lfV = lf.get(id) ?? 0;\r\n const slack = lsV - esV;\r\n result.set(id, { es: esV, ef: efV, ls: lsV, lf: lfV, slack, isCritical: slack <= 0 });\r\n }\r\n\r\n // Cycle defence: Kahn's topo-order silently omits any activity that's part\r\n // of a cycle (its in-degree never reaches zero), and the forward/backward\r\n // passes above skip those nodes. The validator's ACT-006 is the\r\n // authoritative cycle error \u2014 but layoutActivities is reachable without\r\n // validation, so fill the omitted nodes with neutral CPM values so\r\n // downstream consumers don't see `undefined` entries. Cyclic activities\r\n // simply render without critical-path highlighting.\r\n if (topoOrder.length < activities.length) {\r\n for (const a of activities) {\r\n if (!result.has(a.id)) {\r\n result.set(a.id, { es: 0, ef: 0, ls: 0, lf: 0, slack: 0, isCritical: false });\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n", "import type { ActivityDoc, Activity, ActivitiesLayout, ActivitiesLayoutOptions, LayoutNode, LayoutEdge } from './types.js';\r\nimport { computeCpm } from './cpm.js';\r\n\r\nconst NODE_W = 200;\r\nconst NODE_H = 80;\r\nconst H_GAP = 80;\r\nconst V_GAP = 24;\r\n\r\nexport function layoutActivities(doc: ActivityDoc, options: ActivitiesLayoutOptions = {}): ActivitiesLayout {\r\n const { horizontalGap = H_GAP, verticalGap = V_GAP } = options;\r\n const activities = doc.activities;\r\n if (activities.length === 0) {\r\n return { nodes: [], edges: [], bounds: { x: 0, y: 0, width: 0, height: 0 } };\r\n }\r\n\r\n const cpm = computeCpm(activities);\r\n\r\n // Topological column assignment via Kahn's\r\n const successors = new Map<string, string[]>();\r\n const inDegree = new Map<string, number>();\r\n for (const a of activities) {\r\n successors.set(a.id, []);\r\n inDegree.set(a.id, 0);\r\n }\r\n for (const a of activities) {\r\n for (const pred of (a.predecessors ?? [])) {\r\n successors.get(pred)?.push(a.id);\r\n inDegree.set(a.id, (inDegree.get(a.id) ?? 0) + 1);\r\n }\r\n }\r\n\r\n const column = new Map<string, number>();\r\n const queue: string[] = [];\r\n for (const a of activities) {\r\n if ((inDegree.get(a.id) ?? 0) === 0) queue.push(a.id);\r\n }\r\n\r\n while (queue.length > 0) {\r\n const id = queue.shift()!;\r\n const col = column.get(id) ?? 0;\r\n for (const succ of (successors.get(id) ?? [])) {\r\n const newCol = Math.max(column.get(succ) ?? 0, col + 1);\r\n column.set(succ, newCol);\r\n const newDeg = (inDegree.get(succ) ?? 1) - 1;\r\n inDegree.set(succ, newDeg);\r\n if (newDeg === 0) queue.push(succ);\r\n }\r\n }\r\n\r\n // Group activities by column, sort within each column by `sort` then `id`\r\n const cols = new Map<number, Activity[]>();\r\n for (const a of activities) {\r\n const col = column.get(a.id) ?? 0;\r\n if (!cols.has(col)) cols.set(col, []);\r\n cols.get(col)!.push(a);\r\n }\r\n for (const list of cols.values()) {\r\n list.sort((a, b) => {\r\n const sortA = a.sort ?? Number.MAX_SAFE_INTEGER;\r\n const sortB = b.sort ?? Number.MAX_SAFE_INTEGER;\r\n if (sortA !== sortB) return sortA - sortB;\r\n return a.id.localeCompare(b.id);\r\n });\r\n }\r\n\r\n // Assign positions\r\n const nodeMap = new Map<string, LayoutNode>();\r\n const nodes: LayoutNode[] = [];\r\n const colCount = Math.max(0, ...[...cols.keys()]) + 1;\r\n\r\n for (let c = 0; c < colCount; c++) {\r\n const list = cols.get(c) ?? [];\r\n const x = c * (NODE_W + horizontalGap);\r\n let y = 0;\r\n for (const a of list) {\r\n const node: LayoutNode = {\r\n id: a.id,\r\n x,\r\n y,\r\n width: NODE_W,\r\n height: NODE_H,\r\n data: a,\r\n cpm: cpm.get(a.id),\r\n };\r\n nodes.push(node);\r\n nodeMap.set(a.id, node);\r\n y += NODE_H + verticalGap;\r\n }\r\n }\r\n\r\n // Build edges\r\n const edges: LayoutEdge[] = [];\r\n for (const a of activities) {\r\n for (const predId of (a.predecessors ?? [])) {\r\n if (nodeMap.has(predId)) {\r\n const predCpm = cpm.get(predId);\r\n const succCpm = cpm.get(a.id);\r\n const isCritical = (predCpm?.isCritical ?? false) && (succCpm?.isCritical ?? false);\r\n edges.push({ sourceId: predId, targetId: a.id, isCritical });\r\n }\r\n }\r\n }\r\n\r\n if (nodes.length === 0) return { nodes, edges, bounds: { x: 0, y: 0, width: 0, height: 0 } };\r\n\r\n const minX = Math.min(...nodes.map(n => n.x));\r\n const minY = Math.min(...nodes.map(n => n.y));\r\n const maxX = Math.max(...nodes.map(n => n.x + n.width));\r\n const maxY = Math.max(...nodes.map(n => n.y + n.height));\r\n\r\n return { nodes, edges, bounds: { x: minX, y: minY, width: maxX - minX, height: maxY - minY } };\r\n}\r\n", "// Activity Card \u2014 document-local structural validation.\r\n//\r\n// This validator checks only what can be known from the card document ALONE:\r\n// the header, the `activity_card` block shape, the project-reference grammar\r\n// (PC-001's \"missing or malformed\" half), and each milestone's shape.\r\n//\r\n// The cross-document rules \u2014 PC-001 \"does not resolve\", PC-002\r\n// (activity_type), PC-003 (milestone changes \u2286 project changes), PC-004\r\n// (milestone date within the project lifecycle window) and the LIFECYCLE-*\r\n// checks \u2014 require the sibling `*.activities.*` / `*.fgca.*` documents and so\r\n// live in `resolver.ts`. The preview merges both result sets.\r\n//\r\n// Codes:\r\n// AC-001 document structure (root object, `activity_card` block)\r\n// AC-002 `activity_card.id` grammar\r\n// AC-003 milestone structure (missing id / name / date)\r\n// AC-004 milestone id grammar / duplicate\r\n// AC-005 milestone date format\r\n// AC-006 milestone `delivers_changes` shape / grammar\r\n// HDR-001 missing `notation` (CONTRACT.md \u00A72)\r\n// HDR-002 wrong `notation` (CONTRACT.md \u00A72)\r\n// PC-001 `project` missing or malformed (the document-local half; the\r\n// \"does not resolve\" half is emitted by the resolver)\r\n\r\nimport type { ValidationError, ValidationWarning, ValidationResult } from '../validation-types.js';\r\n\r\nexport type { ValidationError, ValidationWarning, ValidationResult };\r\n\r\nconst ACTIVITY_CARD_ID_RE = /^ACTIVITY_CARD(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\nconst ACTIVITY_ID_RE = /^ACTIVITY(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\nconst MILESTONE_ID_RE = /^MILESTONE(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\nconst CHANGE_ID_RE = /^CHANGE(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\nconst DATE_RE = /^\\d{4}-\\d{2}-\\d{2}$/;\r\n\r\nfunction isNonEmptyString(v: unknown): v is string {\r\n return typeof v === 'string' && v.trim().length > 0;\r\n}\r\n\r\nexport function validateActivityCard(input: unknown): ValidationResult {\r\n const errors: ValidationError[] = [];\r\n const warnings: ValidationWarning[] = [];\r\n\r\n if (!input || typeof input !== 'object') {\r\n return { valid: false, errors: [{ code: 'AC-001', message: 'document root is not an object' }], warnings };\r\n }\r\n\r\n const raw = input as Record<string, unknown>;\r\n\r\n // \u2500\u2500 Header (CONTRACT.md \u00A72) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n if (!('notation' in raw)) {\r\n errors.push({ code: 'HDR-001', message: 'notation field is required' });\r\n } else if (raw['notation'] !== 'activity-card') {\r\n errors.push({\r\n code: 'HDR-002',\r\n message: `notation must be \"activity-card\", got \"${String(raw['notation'])}\"`,\r\n });\r\n }\r\n\r\n // \u2500\u2500 activity_card block \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n const block = raw['activity_card'];\r\n if (!block || typeof block !== 'object' || Array.isArray(block)) {\r\n errors.push({ code: 'AC-001', message: 'Missing required root key: activity_card (object)' });\r\n return { valid: false, errors, warnings };\r\n }\r\n const card = block as Record<string, unknown>;\r\n\r\n if (!isNonEmptyString(card['id'])) {\r\n errors.push({ code: 'AC-002', message: 'activity_card.id is required' });\r\n } else if (!ACTIVITY_CARD_ID_RE.test(card['id'])) {\r\n errors.push({\r\n code: 'AC-002',\r\n message: `activity_card.id \"${card['id']}\" must match ACTIVITY_CARD-[<middle>-]<INTEGER>`,\r\n });\r\n }\r\n\r\n // PC-001 (document-local half): project present + well-formed.\r\n if (!isNonEmptyString(card['project'])) {\r\n errors.push({ code: 'PC-001', message: 'activity_card.project is required (an ACTIVITY-\u2026 id)' });\r\n } else if (!ACTIVITY_ID_RE.test(card['project'])) {\r\n errors.push({\r\n code: 'PC-001',\r\n message: `activity_card.project \"${card['project']}\" is malformed; must match ACTIVITY-[<middle>-]<INTEGER>`,\r\n });\r\n }\r\n\r\n if (card['description'] !== undefined && typeof card['description'] !== 'string') {\r\n errors.push({ code: 'AC-001', message: 'activity_card.description must be a string' });\r\n }\r\n\r\n // \u2500\u2500 milestones[] (optional) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n const milestonesRaw = card['milestones'];\r\n if (milestonesRaw !== undefined) {\r\n if (!Array.isArray(milestonesRaw)) {\r\n errors.push({ code: 'AC-003', message: 'activity_card.milestones must be an array', path: 'milestones' });\r\n } else {\r\n const seenIds = new Set<string>();\r\n milestonesRaw.forEach((el, i) => {\r\n const p = `milestones[${i}]`;\r\n if (!el || typeof el !== 'object' || Array.isArray(el)) {\r\n errors.push({ code: 'AC-003', message: `${p} must be an object`, path: p });\r\n return;\r\n }\r\n const m = el as Record<string, unknown>;\r\n\r\n if (!isNonEmptyString(m['id'])) {\r\n errors.push({ code: 'AC-003', message: `${p}.id is required`, path: p });\r\n } else {\r\n const mid = m['id'].trim();\r\n if (!MILESTONE_ID_RE.test(mid)) {\r\n errors.push({ code: 'AC-004', message: `${p}.id \"${mid}\" must match MILESTONE-[<middle>-]<INTEGER>`, path: p });\r\n }\r\n if (seenIds.has(mid)) {\r\n errors.push({ code: 'AC-004', message: `Duplicate milestone id \"${mid}\"`, path: p });\r\n } else {\r\n seenIds.add(mid);\r\n }\r\n }\r\n\r\n if (!isNonEmptyString(m['name'])) {\r\n errors.push({ code: 'AC-003', message: `${p}.name is required`, path: p });\r\n }\r\n\r\n if (!isNonEmptyString(m['date'])) {\r\n errors.push({ code: 'AC-003', message: `${p}.date is required`, path: p });\r\n } else if (!DATE_RE.test(m['date'])) {\r\n errors.push({\r\n code: 'AC-005',\r\n message: `${p}.date \"${m['date']}\" must be a quoted ISO 8601 date (YYYY-MM-DD)`,\r\n path: p,\r\n });\r\n }\r\n\r\n if (m['description'] !== undefined && typeof m['description'] !== 'string') {\r\n errors.push({ code: 'AC-003', message: `${p}.description must be a string`, path: p });\r\n }\r\n\r\n const dc = m['delivers_changes'];\r\n if (dc !== undefined) {\r\n if (!Array.isArray(dc)) {\r\n errors.push({ code: 'AC-006', message: `${p}.delivers_changes must be an array of CHANGE-\u2026 ids`, path: p });\r\n } else {\r\n dc.forEach((c) => {\r\n if (typeof c !== 'string' || !CHANGE_ID_RE.test(c)) {\r\n errors.push({\r\n code: 'AC-006',\r\n message: `${p}.delivers_changes[] entry \"${String(c)}\" must match CHANGE-[<middle>-]<INTEGER>`,\r\n path: p,\r\n });\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n return { valid: errors.length === 0, errors, warnings };\r\n}\r\n", "// Activity Card \u2014 single-page layout (pure geometry; the preview paints SVG).\r\n//\r\n// Top-to-bottom card sections (spec \u00A74 / \u00A75):\r\n// 1. Title \u2014 project name\r\n// 2. Dates band \u2014 Initiation (valid_from) \u00B7 Planned start \u00B7 Planned end\r\n// 3. Milestones \u2014 narrative timeline, markers left\u2192right by date\r\n// 4. Motivation \u2014 Factors \u2192 Goals \u2192 Changes columns with F\u2192G\u2192C edges\r\n// 5. Child activities \u2014 activities whose parent = the project\r\n//\r\n// The \u00A75.1 ArchiMate-class convention (\"(Work Package)\", \"(Implementation\r\n// Event)\") is applied HERE, derived from element TYPE \u2014 there is no\r\n// archimate_class data field.\r\n\r\nimport type {\r\n ActivityCardLayout,\r\n ActivityCardLayoutOptions,\r\n ChainEdge,\r\n ChainNode,\r\n ChildActivityRow,\r\n DateField,\r\n MilestoneMarker,\r\n ResolvedActivityCard,\r\n SectionHeader,\r\n} from './types.js';\r\n\r\nconst DEFAULTS = {\r\n cardWidth: 780,\r\n columnGap: 28,\r\n rowGap: 12,\r\n} as const;\r\n\r\n// Fixed metrics (px). Kept local \u2014 the card has no user-tunable spacing yet.\r\nconst PAD = 20;\r\nconst TITLE_H = 38;\r\nconst DATES_H = 56;\r\nconst SECTION_HEADER_H = 26;\r\nconst SECTION_GAP = 16;\r\nconst MILESTONE_W = 168;\r\nconst MILESTONE_H = 64;\r\nconst MILESTONE_GAP = 16;\r\nconst CHAIN_NODE_H = 46;\r\nconst CHILD_ROW_H = 42;\r\n\r\n/** ArchiMate class per \u00A75.1 \u2014 derived from element TYPE, never stored. */\r\nexport const ARCHIMATE_CLASS = {\r\n ACTIVITY: 'Work Package',\r\n MILESTONE: 'Implementation Event',\r\n} as const;\r\n\r\nexport function layoutActivityCard(\r\n card: ResolvedActivityCard,\r\n options?: ActivityCardLayoutOptions,\r\n): ActivityCardLayout {\r\n const opts = { ...DEFAULTS, ...(options ?? {}) };\r\n const contentX = PAD;\r\n const contentW = opts.cardWidth - PAD * 2;\r\n\r\n let cursorY = PAD;\r\n\r\n // 1. Title\r\n const title = { name: card.project.name, x: contentX, y: cursorY + TITLE_H / 2 };\r\n cursorY += TITLE_H;\r\n\r\n // 2. Dates band \u2014 three equal cells.\r\n const dateDefs: Array<{ label: string; value: string }> = [\r\n { label: 'Initiation', value: card.project.valid_from ?? '\u2014' },\r\n { label: 'Planned start', value: card.project.start_date ?? '\u2014' },\r\n { label: 'Planned end', value: card.project.end_date ?? '\u2014' },\r\n ];\r\n const dateGap = 12;\r\n const dateCellW = (contentW - dateGap * (dateDefs.length - 1)) / dateDefs.length;\r\n const dateFields: DateField[] = dateDefs.map((d, i) => ({\r\n label: d.label,\r\n value: d.value,\r\n x: contentX + i * (dateCellW + dateGap),\r\n y: cursorY,\r\n width: dateCellW,\r\n height: DATES_H,\r\n }));\r\n cursorY += DATES_H + SECTION_GAP;\r\n\r\n const sectionHeaders: SectionHeader[] = [];\r\n const pushHeader = (label: string): void => {\r\n sectionHeaders.push({ label, x: contentX, y: cursorY, width: contentW, height: SECTION_HEADER_H });\r\n cursorY += SECTION_HEADER_H + 8;\r\n };\r\n\r\n // 3. Milestones \u2014 timeline markers, wrapped left\u2192right.\r\n const milestones: MilestoneMarker[] = [];\r\n if (card.milestones.length > 0) {\r\n pushHeader('Milestones');\r\n const perRow = Math.max(1, Math.floor((contentW + MILESTONE_GAP) / (MILESTONE_W + MILESTONE_GAP)));\r\n const rowStartY = cursorY;\r\n card.milestones.forEach((m, i) => {\r\n const col = i % perRow;\r\n const row = Math.floor(i / perRow);\r\n milestones.push({\r\n id: m.id,\r\n name: m.name,\r\n date: m.date,\r\n archimateClass: ARCHIMATE_CLASS.MILESTONE,\r\n x: contentX + col * (MILESTONE_W + MILESTONE_GAP),\r\n y: rowStartY + row * (MILESTONE_H + opts.rowGap),\r\n width: MILESTONE_W,\r\n height: MILESTONE_H,\r\n });\r\n });\r\n const rows = Math.ceil(card.milestones.length / perRow);\r\n cursorY = rowStartY + rows * (MILESTONE_H + opts.rowGap) - opts.rowGap + SECTION_GAP;\r\n }\r\n\r\n // 4. Motivation chain \u2014 Factors | Goals | Changes columns.\r\n const chainEdges: ChainEdge[] = [];\r\n const factorsCol: ChainNode[] = [];\r\n const goalsCol: ChainNode[] = [];\r\n const changesCol: ChainNode[] = [];\r\n const { factors, goals, changes } = card.motivation;\r\n if (factors.length + goals.length + changes.length > 0) {\r\n pushHeader('Motivation \u2014 Factors \u2192 Goals \u2192 Changes');\r\n const colW = (contentW - opts.columnGap * 2) / 3;\r\n const colX = [contentX, contentX + colW + opts.columnGap, contentX + (colW + opts.columnGap) * 2];\r\n const colStartY = cursorY;\r\n\r\n const stack = (items: { id: string; name: string }[], colIndex: number, into: ChainNode[]) => {\r\n items.forEach((it, i) => {\r\n into.push({\r\n id: it.id,\r\n name: it.name,\r\n x: colX[colIndex],\r\n y: colStartY + i * (CHAIN_NODE_H + opts.rowGap),\r\n width: colW,\r\n height: CHAIN_NODE_H,\r\n });\r\n });\r\n };\r\n stack(factors, 0, factorsCol);\r\n stack(goals, 1, goalsCol);\r\n stack(changes, 2, changesCol);\r\n\r\n // Edges: factor\u2192goal (goal.factorIds), goal\u2192change (change.goalIds).\r\n const factorIds = new Set(factorsCol.map((n) => n.id));\r\n const goalIds = new Set(goalsCol.map((n) => n.id));\r\n for (const g of goals) {\r\n for (const fid of g.factorIds) {\r\n if (factorIds.has(fid)) chainEdges.push({ sourceId: fid, targetId: g.id });\r\n }\r\n }\r\n for (const c of changes) {\r\n for (const gid of c.goalIds) {\r\n if (goalIds.has(gid)) chainEdges.push({ sourceId: gid, targetId: c.id });\r\n }\r\n }\r\n\r\n const tallest = Math.max(factorsCol.length, goalsCol.length, changesCol.length);\r\n cursorY = colStartY + tallest * (CHAIN_NODE_H + opts.rowGap) - opts.rowGap + SECTION_GAP;\r\n }\r\n\r\n // 5. Child activities \u2014 full-width rows.\r\n const childActivities: ChildActivityRow[] = [];\r\n if (card.childActivities.length > 0) {\r\n pushHeader('Child activities');\r\n const rowStartY = cursorY;\r\n card.childActivities.forEach((a, i) => {\r\n const metaBits: string[] = [];\r\n if (a.start_date || a.end_date) metaBits.push(`${a.start_date ?? '?'} \u2192 ${a.end_date ?? '?'}`);\r\n if (a.owner) metaBits.push(a.owner);\r\n childActivities.push({\r\n id: a.id,\r\n name: a.name,\r\n archimateClass: ARCHIMATE_CLASS.ACTIVITY,\r\n meta: metaBits.join(' \u00B7 '),\r\n x: contentX,\r\n y: rowStartY + i * (CHILD_ROW_H + opts.rowGap),\r\n width: contentW,\r\n height: CHILD_ROW_H,\r\n });\r\n });\r\n cursorY =\r\n rowStartY + card.childActivities.length * (CHILD_ROW_H + opts.rowGap) - opts.rowGap + SECTION_GAP;\r\n }\r\n\r\n const totalHeight = cursorY - SECTION_GAP + PAD;\r\n\r\n return {\r\n bounds: { x: 0, y: 0, width: opts.cardWidth, height: Math.max(totalHeight, PAD * 2 + TITLE_H) },\r\n title,\r\n dateFields,\r\n sectionHeaders,\r\n milestones,\r\n chainColumns: { factors: factorsCol, goals: goalsCol, changes: changesCol },\r\n chainEdges,\r\n childActivities,\r\n };\r\n}\r\n", "import type { ApplicationsCatalogueFile, ApplicationType, ApplicationStatus, IntegrationDirection } from './types.js';\r\nimport type { ValidationError, ValidationWarning, ValidationResult } from '../validation-types.js';\r\n\r\nexport type { ValidationError, ValidationWarning, ValidationResult };\r\n\r\nconst VALID_TYPES = new Set<ApplicationType>(['application', 'integration', 'platform', 'data_store']);\r\nconst VALID_STATUSES = new Set<ApplicationStatus>(['Draft', 'Active', 'Deprecated', 'Decommissioning']);\r\nconst VALID_DIRECTIONS = new Set<IntegrationDirection>(['inbound', 'outbound', 'bidirectional']);\r\nconst DATE_RE = /^\\d{4}-\\d{2}-\\d{2}$/;\r\n\r\nexport function validateApplicationsCatalogue(input: unknown): ValidationResult {\r\n const errors: ValidationError[] = [];\r\n const warnings: ValidationWarning[] = [];\r\n\r\n if (!input || typeof input !== 'object') {\r\n return { valid: false, errors: [{ code: 'APP-001', message: 'Input must be an object' }], warnings };\r\n }\r\n\r\n const raw = input as Record<string, unknown>;\r\n\r\n // APP-001: notation header\r\n if (!('notation' in raw)) {\r\n errors.push({ code: 'APP-001', message: 'Missing required field: notation' });\r\n } else if (raw['notation'] !== 'applications') {\r\n errors.push({ code: 'APP-001', message: `notation must be \"applications\", got \"${raw['notation']}\"` });\r\n }\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n // APP-002: catalogue header fields\r\n if (!raw['applications_catalogue'] || typeof raw['applications_catalogue'] !== 'object') {\r\n errors.push({ code: 'APP-002', message: 'Missing required field: applications_catalogue' });\r\n return { valid: false, errors, warnings };\r\n }\r\n\r\n const cat = raw['applications_catalogue'] as Record<string, unknown>;\r\n\r\n if (!cat['id'] || typeof cat['id'] !== 'string' || !(cat['id'] as string).trim()) {\r\n errors.push({ code: 'APP-002', message: 'applications_catalogue.id is required' });\r\n }\r\n if (!cat['name'] || typeof cat['name'] !== 'string' || !(cat['name'] as string).trim()) {\r\n errors.push({ code: 'APP-002', message: 'applications_catalogue.name is required' });\r\n }\r\n if (!cat['updated_at'] || typeof cat['updated_at'] !== 'string') {\r\n errors.push({ code: 'APP-002', message: 'applications_catalogue.updated_at is required' });\r\n }\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n // APP-007: updated_at format\r\n if (!DATE_RE.test(cat['updated_at'] as string)) {\r\n errors.push({ code: 'APP-007', message: `applications_catalogue.updated_at must be YYYY-MM-DD, got \"${cat['updated_at']}\"` });\r\n }\r\n\r\n const applications = cat['applications'];\r\n if (!Array.isArray(applications)) {\r\n errors.push({ code: 'APP-002', message: 'applications_catalogue.applications must be an array' });\r\n return { valid: false, errors, warnings };\r\n }\r\n\r\n // APP-008: unique app_id\r\n const seenIds = new Set<string>();\r\n\r\n for (let i = 0; i < applications.length; i++) {\r\n const rawApp = applications[i];\r\n const idx = `applications[${i}]`;\r\n\r\n if (!rawApp || typeof rawApp !== 'object') {\r\n errors.push({ code: 'APP-003', message: `${idx} must be an object` });\r\n continue;\r\n }\r\n const a = rawApp as Record<string, unknown>;\r\n\r\n // APP-003: required per-application fields\r\n if (!a['app_id'] || typeof a['app_id'] !== 'string' || !(a['app_id'] as string).trim()) {\r\n errors.push({ code: 'APP-003', message: `${idx}: app_id is required` });\r\n } else {\r\n const aid = a['app_id'] as string;\r\n if (seenIds.has(aid)) {\r\n errors.push({ code: 'APP-008', message: `Duplicate app_id: \"${aid}\"` });\r\n }\r\n seenIds.add(aid);\r\n }\r\n\r\n if (!a['name'] || typeof a['name'] !== 'string' || !(a['name'] as string).trim()) {\r\n errors.push({ code: 'APP-003', message: `${idx}: name is required` });\r\n }\r\n if (!a['type']) {\r\n errors.push({ code: 'APP-003', message: `${idx}: type is required` });\r\n }\r\n if (!a['status']) {\r\n errors.push({ code: 'APP-003', message: `${idx}: status is required` });\r\n }\r\n\r\n // APP-004: type enum\r\n if (a['type'] && !VALID_TYPES.has(a['type'] as ApplicationType)) {\r\n errors.push({ code: 'APP-004', message: `${idx}: type \"${a['type']}\" must be one of: application, integration, platform, data_store` });\r\n }\r\n\r\n // APP-005: status enum (4 values)\r\n if (a['status'] && !VALID_STATUSES.has(a['status'] as ApplicationStatus)) {\r\n errors.push({ code: 'APP-005', message: `${idx}: status \"${a['status']}\" must be one of: Draft, Active, Deprecated, Decommissioning` });\r\n }\r\n\r\n // APP-006: maturity range\r\n if (a['maturity'] !== undefined) {\r\n const m = a['maturity'];\r\n if (typeof m !== 'number' || !Number.isInteger(m) || m < 1 || m > 5) {\r\n errors.push({ code: 'APP-006', message: `${idx}: maturity must be an integer 1\u20135, got \"${m}\"` });\r\n }\r\n }\r\n\r\n // APP-009: integrations[].direction enum\r\n if (Array.isArray(a['integrations'])) {\r\n const integrations = a['integrations'] as unknown[];\r\n for (let j = 0; j < integrations.length; j++) {\r\n const rawIntg = integrations[j];\r\n if (!rawIntg || typeof rawIntg !== 'object') {\r\n errors.push({ code: 'APP-009', message: `${idx}.integrations[${j}] must be an object` });\r\n continue;\r\n }\r\n const intg = rawIntg as Record<string, unknown>;\r\n if (intg['direction'] !== undefined && !VALID_DIRECTIONS.has(intg['direction'] as IntegrationDirection)) {\r\n errors.push({ code: 'APP-009', message: `${idx}.integrations[${j}]: direction \"${intg['direction']}\" must be one of: inbound, outbound, bidirectional` });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return { valid: errors.length === 0, errors, warnings };\r\n}\r\n", "import type { Block } from './types.js';\r\nimport type { ValidationError, ValidationWarning, ValidationResult } from '../validation-types.js';\r\n\r\nexport type { ValidationError, ValidationWarning, ValidationResult };\r\n\r\n/** Document-level ID grammar: BLOCKS-[<middle>-]<INTEGER>. */\r\nconst BLOCKS_DOC_ID_RE = /^BLOCKS(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\n\r\n/**\r\n * Canonical cross-reference ID grammar \u2014 `<TYPE>-[<middle>-]<INTEGER>` with\r\n * an uppercase TYPE prefix and a positive-integer terminal.\r\n *\r\n * Block IDs that match this shape are treated as cross-references to an\r\n * organisational catalogue and must use a TYPE registered in\r\n * IDS_AND_REFERENCES.md \u00A73.1. IDs that do not match the shape (e.g.\r\n * `APPLICATION_LAYER`, `FRONTEND`) are notation-local labels and are\r\n * accepted as-is.\r\n */\r\nconst CANONICAL_ID_RE = /^[A-Z][A-Z0-9_]*(-[A-Z0-9][A-Z0-9_]*)+-\\d+$/;\r\n\r\n/**\r\n * `CAPABILITY` is the registered exception in IDS_AND_REFERENCES.md \u00A72 \u2014 its\r\n * terminal is a V/H diagram address (`V1`, `V1.2`, `V1.2.3`, `H1.2`), not a\r\n * plain integer. A capability ID never matches CANONICAL_ID_RE because of the\r\n * dot, so we recognise it separately.\r\n */\r\nconst CAPABILITY_ID_RE = /^CAPABILITY-[VH]\\d+(\\.\\d+){0,2}$/;\r\n\r\n/** Element-level TYPE registry \u2014 IDS_AND_REFERENCES.md \u00A73.1. */\r\nconst REGISTERED_ELEMENT_TYPES = new Set<string>([\r\n 'FACTOR',\r\n 'GOAL',\r\n 'CHANGE',\r\n 'ACTIVITY',\r\n 'CAPABILITY',\r\n 'PROCESS',\r\n 'PRODUCT',\r\n 'APPLICATION',\r\n 'INTEGRATION',\r\n 'ROLE',\r\n 'UNIT',\r\n 'EMPLOYEE',\r\n 'SCENARIO',\r\n 'ISSUE',\r\n 'STAGE',\r\n]);\r\n\r\n/**\r\n * Recommended maximum nesting depth (1-indexed). The spec warns at depth 6+;\r\n * deeper nesting tends to produce inner boxes too small to read.\r\n */\r\nconst RECOMMENDED_MAX_DEPTH = 5;\r\n\r\nfunction isNonEmptyString(v: unknown): v is string {\r\n return typeof v === 'string' && v.trim().length > 0;\r\n}\r\n\r\nfunction extractTypePrefix(id: string): string {\r\n const dash = id.indexOf('-');\r\n return dash >= 0 ? id.slice(0, dash) : id;\r\n}\r\n\r\nexport function validateNestedBlocks(input: unknown): ValidationResult {\r\n const errors: ValidationError[] = [];\r\n const warnings: ValidationWarning[] = [];\r\n\r\n if (!input || typeof input !== 'object') {\r\n return {\r\n valid: false,\r\n errors: [{ code: 'BL-001', message: 'Input must be an object' }],\r\n warnings,\r\n };\r\n }\r\n\r\n const raw = input as Record<string, unknown>;\r\n\r\n if ('notation' in raw && raw['notation'] !== 'blocks') {\r\n errors.push({\r\n code: 'BL-001',\r\n message: `notation must be \"blocks\", got \"${String(raw['notation'])}\"`,\r\n });\r\n }\r\n\r\n if (!('nested_blocks' in raw) || !raw['nested_blocks'] || typeof raw['nested_blocks'] !== 'object') {\r\n errors.push({ code: 'BL-001', message: 'Missing required root key: nested_blocks' });\r\n return { valid: false, errors, warnings };\r\n }\r\n\r\n const nb = raw['nested_blocks'] as Record<string, unknown>;\r\n\r\n if (!isNonEmptyString(nb['id'])) {\r\n errors.push({ code: 'BL-002', message: 'nested_blocks.id is required' });\r\n } else if (!BLOCKS_DOC_ID_RE.test(nb['id'])) {\r\n errors.push({\r\n code: 'BL-002',\r\n message: `nested_blocks.id \"${nb['id']}\" must match BLOCKS-[<middle>-]<INTEGER>`,\r\n });\r\n }\r\n\r\n if (!isNonEmptyString(nb['name'])) {\r\n errors.push({ code: 'BL-003', message: 'nested_blocks.name is required' });\r\n }\r\n\r\n const topLevel = nb['blocks'];\r\n if (!Array.isArray(topLevel) || topLevel.length === 0) {\r\n errors.push({ code: 'BL-004', message: 'nested_blocks.blocks must be a non-empty array' });\r\n return { valid: false, errors, warnings };\r\n }\r\n\r\n const seenIds = new Set<string>();\r\n let maxDepthSeen = 0;\r\n\r\n function walk(node: unknown, path: string, depth: number): void {\r\n if (depth > maxDepthSeen) maxDepthSeen = depth;\r\n\r\n if (!node || typeof node !== 'object') {\r\n errors.push({ code: 'BL-005', message: `${path} must be an object`, path });\r\n return;\r\n }\r\n const b = node as Record<string, unknown>;\r\n\r\n if (!isNonEmptyString(b['id'])) {\r\n errors.push({ code: 'BL-005', message: `${path}.id is required`, path });\r\n } else {\r\n const id = b['id'].trim();\r\n if (seenIds.has(id)) {\r\n errors.push({ code: 'BL-007', message: `Duplicate block id: \"${id}\"`, path });\r\n } else {\r\n seenIds.add(id);\r\n }\r\n\r\n // BL-006 \u2014 only enforce when the id LOOKS canonical (uppercase TYPE prefix\r\n // + dashed segments + integer terminal, or the CAPABILITY V/H exception).\r\n // Free-form local labels with whitespace, lowercase, etc. are accepted.\r\n const looksCanonical = CANONICAL_ID_RE.test(id) || CAPABILITY_ID_RE.test(id);\r\n if (looksCanonical) {\r\n const typePrefix = extractTypePrefix(id);\r\n if (!REGISTERED_ELEMENT_TYPES.has(typePrefix)) {\r\n errors.push({\r\n code: 'BL-006',\r\n message: `${path}.id \"${id}\" uses TYPE prefix \"${typePrefix}\" which is not in the registered element-type list. Use a registered TYPE (FACTOR, GOAL, CAPABILITY, APPLICATION, \u2026) or a free-form local label.`,\r\n path,\r\n });\r\n }\r\n } else if (/\\s/.test(id)) {\r\n errors.push({\r\n code: 'BL-005',\r\n message: `${path}.id \"${id}\" must not contain whitespace; use a slug-style local label or a canonical cross-reference id`,\r\n path,\r\n });\r\n }\r\n }\r\n\r\n if (!isNonEmptyString(b['name'])) {\r\n errors.push({ code: 'BL-005', message: `${path}.name is required`, path });\r\n }\r\n\r\n const children = b['children'];\r\n if (children === undefined) return;\r\n if (!Array.isArray(children)) {\r\n errors.push({ code: 'BL-005', message: `${path}.children must be an array when present`, path });\r\n return;\r\n }\r\n if (children.length === 0) {\r\n warnings.push({\r\n code: 'BL-009',\r\n message: `${path}.children is an empty array \u2014 omit the key for leaf blocks`,\r\n path,\r\n });\r\n return;\r\n }\r\n for (let i = 0; i < children.length; i++) {\r\n walk(children[i], `${path}.children[${i}]`, depth + 1);\r\n }\r\n }\r\n\r\n for (let i = 0; i < topLevel.length; i++) {\r\n walk(topLevel[i], `blocks[${i}]`, 1);\r\n }\r\n\r\n if (maxDepthSeen > RECOMMENDED_MAX_DEPTH) {\r\n warnings.push({\r\n code: 'BL-008',\r\n message: `Nesting depth ${maxDepthSeen} exceeds the recommended maximum of ${RECOMMENDED_MAX_DEPTH}; inner blocks may render too small to read`,\r\n });\r\n }\r\n\r\n return { valid: errors.length === 0, errors, warnings };\r\n}\r\n\r\n/**\r\n * Convenience: validate a single `Block` subtree. Used by tests and by\r\n * downstream consumers that need to check a sub-document.\r\n */\r\nexport function isWellFormedBlock(b: Block): boolean {\r\n if (!b || typeof b !== 'object') return false;\r\n if (typeof b.id !== 'string' || b.id.trim() === '') return false;\r\n if (typeof b.name !== 'string' || b.name.trim() === '') return false;\r\n if (b.children !== undefined) {\r\n if (!Array.isArray(b.children)) return false;\r\n for (const c of b.children) {\r\n if (!isWellFormedBlock(c)) return false;\r\n }\r\n }\r\n return true;\r\n}\r\n", "import type {\r\n Block,\r\n BlocksFile,\r\n BlocksLayout,\r\n BlocksLayoutOptions,\r\n LaidOutBlock,\r\n} from './types.js';\r\n\r\nconst DEFAULTS: Required<BlocksLayoutOptions> = {\r\n leafWidth: 160,\r\n leafHeight: 60,\r\n padding: 12,\r\n headerHeight: 28,\r\n childGap: 12,\r\n topLevelGap: 24,\r\n};\r\n\r\ninterface MeasuredBlock {\r\n width: number;\r\n height: number;\r\n cols: number;\r\n rows: number;\r\n colWidths: number[];\r\n rowHeights: number[];\r\n children: MeasuredBlock[];\r\n}\r\n\r\nfunction resolveOptions(options: BlocksLayoutOptions | undefined): Required<BlocksLayoutOptions> {\r\n return { ...DEFAULTS, ...(options ?? {}) };\r\n}\r\n\r\nfunction measure(b: Block, opts: Required<BlocksLayoutOptions>): MeasuredBlock {\r\n const children = Array.isArray(b.children) ? b.children : [];\r\n if (children.length === 0) {\r\n return {\r\n width: opts.leafWidth,\r\n height: opts.leafHeight,\r\n cols: 0,\r\n rows: 0,\r\n colWidths: [],\r\n rowHeights: [],\r\n children: [],\r\n };\r\n }\r\n\r\n const measuredChildren = children.map((c) => measure(c, opts));\r\n const N = measuredChildren.length;\r\n\r\n // Square-ish grid: cols = ceil(sqrt(N)), rows = ceil(N/cols).\r\n // Variable column widths and row heights so heterogeneous children pack\r\n // without forcing every cell to the largest size.\r\n const cols = Math.max(1, Math.ceil(Math.sqrt(N)));\r\n const rows = Math.ceil(N / cols);\r\n\r\n const colWidths = new Array<number>(cols).fill(0);\r\n const rowHeights = new Array<number>(rows).fill(0);\r\n\r\n for (let i = 0; i < N; i++) {\r\n const r = Math.floor(i / cols);\r\n const c = i % cols;\r\n const m = measuredChildren[i];\r\n if (m.width > colWidths[c]) colWidths[c] = m.width;\r\n if (m.height > rowHeights[r]) rowHeights[r] = m.height;\r\n }\r\n\r\n const contentWidth =\r\n colWidths.reduce((s, w) => s + w, 0) + (cols - 1) * opts.childGap;\r\n const contentHeight =\r\n rowHeights.reduce((s, h) => s + h, 0) + (rows - 1) * opts.childGap;\r\n\r\n // Outer block: padding on all four sides, plus a header strip on top that\r\n // carries the block's name. Header height is not part of the children grid.\r\n return {\r\n width: contentWidth + 2 * opts.padding,\r\n height: contentHeight + 2 * opts.padding + opts.headerHeight,\r\n cols,\r\n rows,\r\n colWidths,\r\n rowHeights,\r\n children: measuredChildren,\r\n };\r\n}\r\n\r\nfunction position(\r\n b: Block,\r\n m: MeasuredBlock,\r\n x: number,\r\n y: number,\r\n depth: number,\r\n opts: Required<BlocksLayoutOptions>,\r\n): LaidOutBlock {\r\n const node: LaidOutBlock = {\r\n id: b.id,\r\n name: b.name,\r\n description: b.description,\r\n depth,\r\n x,\r\n y,\r\n width: m.width,\r\n height: m.height,\r\n headerHeight: opts.headerHeight,\r\n children: [],\r\n };\r\n\r\n const children = Array.isArray(b.children) ? b.children : [];\r\n if (children.length === 0) return node;\r\n\r\n const innerX0 = x + opts.padding;\r\n const innerY0 = y + opts.headerHeight + opts.padding;\r\n\r\n let yCursor = innerY0;\r\n for (let r = 0; r < m.rows; r++) {\r\n let xCursor = innerX0;\r\n for (let c = 0; c < m.cols; c++) {\r\n const i = r * m.cols + c;\r\n if (i >= children.length) break;\r\n // Centre each child within its grid cell so heterogeneous sizes look\r\n // balanced (smaller blocks float in the middle of their cell rather\r\n // than left-aligning, which looks ragged when the cell is larger than\r\n // the child).\r\n const cellW = m.colWidths[c];\r\n const cellH = m.rowHeights[r];\r\n const childM = m.children[i];\r\n const cx = xCursor + (cellW - childM.width) / 2;\r\n const cy = yCursor + (cellH - childM.height) / 2;\r\n node.children.push(position(children[i], childM, cx, cy, depth + 1, opts));\r\n xCursor += cellW + opts.childGap;\r\n }\r\n yCursor += m.rowHeights[r] + opts.childGap;\r\n }\r\n\r\n return node;\r\n}\r\n\r\nfunction maxDepthOf(node: LaidOutBlock): number {\r\n let m = node.depth;\r\n for (const c of node.children) {\r\n const d = maxDepthOf(c);\r\n if (d > m) m = d;\r\n }\r\n return m;\r\n}\r\n\r\nexport function layoutNestedBlocks(\r\n file: BlocksFile,\r\n options?: BlocksLayoutOptions,\r\n): BlocksLayout {\r\n const opts = resolveOptions(options);\r\n\r\n const nb = file?.nested_blocks;\r\n const tops = Array.isArray(nb?.blocks) ? nb.blocks : [];\r\n\r\n // Top-level blocks stack vertically. They share a single x = 0 column;\r\n // their widths can differ. Total bounds = max child width, sum of heights\r\n // plus inter-block gaps.\r\n const measuredTops = tops.map((b) => measure(b, opts));\r\n\r\n let cursorY = 0;\r\n let maxWidth = 0;\r\n let maxDepth = 0;\r\n const blocks: LaidOutBlock[] = [];\r\n for (let i = 0; i < tops.length; i++) {\r\n const m = measuredTops[i];\r\n const laid = position(tops[i], m, 0, cursorY, 1, opts);\r\n blocks.push(laid);\r\n const d = maxDepthOf(laid);\r\n if (d > maxDepth) maxDepth = d;\r\n if (m.width > maxWidth) maxWidth = m.width;\r\n cursorY += m.height + (i < tops.length - 1 ? opts.topLevelGap : 0);\r\n }\r\n\r\n return {\r\n bounds: { x: 0, y: 0, width: maxWidth, height: cursorY },\r\n blocks,\r\n maxDepth,\r\n };\r\n}\r\n\r\n/** Iterate every laid-out block (including nested children) in pre-order. */\r\nexport function* iterateBlocks(layout: BlocksLayout): Iterable<LaidOutBlock> {\r\n function* walk(b: LaidOutBlock): Iterable<LaidOutBlock> {\r\n yield b;\r\n for (const c of b.children) yield* walk(c);\r\n }\r\n for (const b of layout.blocks) yield* walk(b);\r\n}\r\n", "import type { CapabilityType } from './types.js';\r\nimport type { ValidationError, ValidationWarning, ValidationResult } from '../validation-types.js';\r\n\r\nexport type { ValidationError, ValidationWarning, ValidationResult };\r\n\r\nconst VALID_TYPES = new Set<CapabilityType>(['domain', 'supporting']);\r\nconst DATE_RE = /^\\d{4}-\\d{2}-\\d{2}$/;\r\n// Canonical form per `IDS_AND_REFERENCES.md` \u00A72: `CAPABILITY-V\u2026` /\r\n// `CAPABILITY-H\u2026` with the dotted address (`V1`, `V1.2.1`, `H1`). The bare\r\n// legacy form (`V1`, `H1`) is still accepted so existing maps without the\r\n// canonical prefix do not break \u2014 migration is tracked under\r\n// vkgeorgia/strategy#36.\r\nconst CAP_ID_RE = /^(CAPABILITY-)?(V|H)\\d+(\\.\\d+)*$/;\r\n\r\nexport function validateCapabilityMap(input: unknown): ValidationResult {\r\n const errors: ValidationError[] = [];\r\n const warnings: ValidationWarning[] = [];\r\n\r\n if (!input || typeof input !== 'object') {\r\n return { valid: false, errors: [{ code: 'CMAP-001', message: 'Input must be an object' }], warnings };\r\n }\r\n const raw = input as Record<string, unknown>;\r\n\r\n if (!('notation' in raw)) {\r\n errors.push({ code: 'CMAP-001', message: 'Missing required field: notation' });\r\n } else if (raw['notation'] !== 'capability-map') {\r\n errors.push({ code: 'CMAP-001', message: `notation must be \"capability-map\", got \"${raw['notation']}\"` });\r\n }\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n const map = raw['capability_map'];\r\n if (!map || typeof map !== 'object') {\r\n errors.push({ code: 'CMAP-002', message: 'Missing required field: capability_map' });\r\n return { valid: false, errors, warnings };\r\n }\r\n const m = map as Record<string, unknown>;\r\n\r\n if (!m['id'] || typeof m['id'] !== 'string' || !(m['id'] as string).trim())\r\n errors.push({ code: 'CMAP-002', message: 'capability_map.id is required' });\r\n if (!m['name'] || typeof m['name'] !== 'string' || !(m['name'] as string).trim())\r\n errors.push({ code: 'CMAP-002', message: 'capability_map.name is required' });\r\n if (!m['assessment_date'] || typeof m['assessment_date'] !== 'string')\r\n errors.push({ code: 'CMAP-002', message: 'capability_map.assessment_date is required' });\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n if (!DATE_RE.test(m['assessment_date'] as string))\r\n errors.push({ code: 'CMAP-007', message: `capability_map.assessment_date must be YYYY-MM-DD, got \"${m['assessment_date']}\"` });\r\n\r\n const caps = m['capabilities'];\r\n if (!Array.isArray(caps)) {\r\n errors.push({ code: 'CMAP-002', message: 'capability_map.capabilities must be an array' });\r\n return { valid: false, errors, warnings };\r\n }\r\n\r\n const seenIds = new Set<string>();\r\n validateCapabilityTree(caps, 'capabilities', errors, seenIds);\r\n\r\n return { valid: errors.length === 0, errors, warnings };\r\n}\r\n\r\nfunction validateCapabilityTree(\r\n nodes: unknown[],\r\n pathPrefix: string,\r\n errors: ValidationError[],\r\n seenIds: Set<string>,\r\n): void {\r\n for (let i = 0; i < nodes.length; i++) {\r\n const rawNode = nodes[i];\r\n const nodePath = `${pathPrefix}[${i}]`;\r\n\r\n if (!rawNode || typeof rawNode !== 'object') {\r\n errors.push({ code: 'CMAP-003', message: `${nodePath} must be an object` });\r\n continue;\r\n }\r\n const node = rawNode as Record<string, unknown>;\r\n\r\n if (!node['id'] || typeof node['id'] !== 'string' || !(node['id'] as string).trim()) {\r\n errors.push({ code: 'CMAP-003', message: `${nodePath}: id is required` });\r\n } else {\r\n const id = node['id'] as string;\r\n if (seenIds.has(id)) {\r\n errors.push({ code: 'CMAP-008', message: `Duplicate capability id: \"${id}\"` });\r\n }\r\n seenIds.add(id);\r\n if (!CAP_ID_RE.test(id)) {\r\n errors.push({ code: 'CMAP-009', message: `${nodePath}: id \"${id}\" must match the canonical pattern CAPABILITY-V[n] or CAPABILITY-H[n] with optional .n segments (e.g. CAPABILITY-V1, CAPABILITY-V1.2, CAPABILITY-H1.3); the bare V[n] / H[n] form is also accepted for legacy compatibility` });\r\n }\r\n }\r\n\r\n if (!node['name'] || typeof node['name'] !== 'string' || !(node['name'] as string).trim())\r\n errors.push({ code: 'CMAP-003', message: `${nodePath}: name is required` });\r\n\r\n if (node['current_maturity'] === undefined) {\r\n errors.push({ code: 'CMAP-003', message: `${nodePath}: current_maturity is required` });\r\n } else {\r\n const cm = node['current_maturity'];\r\n if (typeof cm !== 'number' || !Number.isInteger(cm) || cm < 1 || cm > 5)\r\n errors.push({ code: 'CMAP-005', message: `${nodePath}: current_maturity must be an integer 1\u20135, got \"${cm}\"` });\r\n }\r\n\r\n if (node['target_maturity'] !== undefined) {\r\n const tm = node['target_maturity'];\r\n if (typeof tm !== 'number' || !Number.isInteger(tm) || tm < 1 || tm > 5)\r\n errors.push({ code: 'CMAP-006', message: `${nodePath}: target_maturity must be an integer 1\u20135, got \"${tm}\"` });\r\n }\r\n\r\n if (node['type'] !== undefined && !VALID_TYPES.has(node['type'] as CapabilityType))\r\n errors.push({ code: 'CMAP-004', message: `${nodePath}: type \"${node['type']}\" must be one of: domain, supporting` });\r\n\r\n if (node['target_date'] !== undefined) {\r\n if (typeof node['target_date'] !== 'string' || !DATE_RE.test(node['target_date'] as string))\r\n errors.push({ code: 'CMAP-007', message: `${nodePath}: target_date must be YYYY-MM-DD, got \"${node['target_date']}\"` });\r\n }\r\n\r\n if (node['applications'] !== undefined && !Array.isArray(node['applications']))\r\n errors.push({ code: 'CMAP-003', message: `${nodePath}: applications must be an array` });\r\n\r\n if (node['children'] !== undefined) {\r\n if (!Array.isArray(node['children'])) {\r\n errors.push({ code: 'CMAP-003', message: `${nodePath}: children must be an array` });\r\n } else {\r\n validateCapabilityTree(node['children'] as unknown[], `${nodePath}.children`, errors, seenIds);\r\n }\r\n }\r\n }\r\n}\r\n", "/**\r\n * Canonical-form FGCA parser + validator.\r\n *\r\n * Accepts the methodology's canonical FGCA YAML shape (see\r\n * `transitrix/methodology` `notations/02-fgca.md`):\r\n *\r\n * - Flat top-level arrays, no `fgca:` wrapper.\r\n * - Typed string IDs per `IDS_AND_REFERENCES.md` (`FACTOR-1`,\r\n * `GOAL-RET-1`, `CHANGE-1`, `ACTIVITY-ONBOARD-1`).\r\n * - Plural canonical-direction cross-references: `goal.factors`,\r\n * `change.goals`, `activity.changes`, `activity.goals`.\r\n * - Per-notation validation codes `FGCA-001 \u2026 FGCA-015`.\r\n *\r\n * Returns the validation result plus, on success, an internal `FGCADoc`\r\n * representation built from the canonical input \u2014 string IDs are kept\r\n * as strings; the existing `buildFGCALayout` consumes `id: number`\r\n * historically but the layout code only uses IDs as opaque keys, so\r\n * string IDs work fine.\r\n *\r\n * Strategy hub #63: this lives at the input boundary so the library's\r\n * internal types (currently using DSM-API form \u2014 numeric IDs and\r\n * singular cross-refs) can stay where they are. A follow-up task can\r\n * unify the internal types with the canonical form across all sister\r\n * modules.\r\n */\r\n\r\nimport type {\r\n ActivityItem,\r\n BdnChangeWithActivities,\r\n FactorItem,\r\n GoalItem,\r\n} from './types.js';\r\nimport type { FGCADoc } from './validate.js';\r\nimport type {\r\n ValidationError,\r\n ValidationWarning,\r\n ValidationResult,\r\n} from '../validation-types.js';\r\n\r\nexport interface CanonicalFGCAResult extends ValidationResult {\r\n /** On success, the internal-form FGCADoc derived from the canonical input. */\r\n parsed?: FGCADoc;\r\n}\r\n\r\n// Canonical ID grammars per IDS_AND_REFERENCES.md \u00A71. The TYPE prefix\r\n// is fixed per layer; middle segments are optional; the terminal is a\r\n// positive integer with no leading zeros.\r\nconst FACTOR_ID_RE = /^FACTOR(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\nconst GOAL_ID_RE = /^GOAL(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\nconst CHANGE_ID_RE = /^CHANGE(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\nconst ACTIVITY_ID_RE = /^ACTIVITY(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\nconst FGCA_DOC_ID_RE = /^FGCA(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\nconst CONSTRAINT_ID_RE = /^CONSTRAINT(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\n\r\nfunction isNonEmptyString(v: unknown): v is string {\r\n return typeof v === 'string' && v.trim().length > 0;\r\n}\r\n\r\nfunction asObjectArray(v: unknown): Array<Record<string, unknown>> | null {\r\n if (!Array.isArray(v)) return null;\r\n return v.map((el) => (el && typeof el === 'object' ? (el as Record<string, unknown>) : null) as Record<string, unknown>);\r\n}\r\n\r\ninterface InternalIdMap {\r\n /** Canonical typed-string ID \u2192 internal numeric ID for layout consumption. */\r\n toInternal: Map<string, number>;\r\n}\r\n\r\n/**\r\n * Validate canonical FGCA YAML and, on success, return an internal-form\r\n * `FGCADoc` ready for `buildFGCALayout`.\r\n */\r\nexport function parseCanonicalFGCA(input: unknown): CanonicalFGCAResult {\r\n const errors: ValidationError[] = [];\r\n const warnings: ValidationWarning[] = [];\r\n\r\n if (!input || typeof input !== 'object') {\r\n return {\r\n valid: false,\r\n errors: [{ code: 'FGCA-001', message: 'document root is not an object' }],\r\n warnings,\r\n };\r\n }\r\n\r\n const raw = input as Record<string, unknown>;\r\n\r\n if ('notation' in raw && raw['notation'] !== 'fgca') {\r\n return {\r\n valid: false,\r\n errors: [\r\n {\r\n code: 'FGCA-001',\r\n message: `notation must be \"fgca\", got \"${String(raw['notation'])}\"`,\r\n },\r\n ],\r\n warnings,\r\n };\r\n }\r\n\r\n // FGCA-002 \u2014 document id (optional in v1.4 per the canonical spec? \u2014 spec\r\n // says required; absence is FGCA-002).\r\n if (raw['id'] !== undefined) {\r\n if (!isNonEmptyString(raw['id']) || !FGCA_DOC_ID_RE.test(raw['id'])) {\r\n errors.push({\r\n code: 'FGCA-002',\r\n message: `id \"${String(raw['id'])}\" must match FGCA-[<middle>-]<INTEGER>`,\r\n });\r\n }\r\n } else {\r\n errors.push({ code: 'FGCA-002', message: 'document id is required' });\r\n }\r\n\r\n if (!isNonEmptyString(raw['name'])) {\r\n errors.push({ code: 'FGCA-003', message: 'name is required' });\r\n }\r\n\r\n const factorsRaw = asObjectArray(raw['factors']);\r\n const goalsRaw = asObjectArray(raw['goals']);\r\n const changesRaw = asObjectArray(raw['changes']);\r\n const activitiesRaw = asObjectArray(raw['activities']);\r\n\r\n if (factorsRaw === null) errors.push({ code: 'FGCA-004', message: 'factors must be an array', path: 'factors' });\r\n if (goalsRaw === null) errors.push({ code: 'FGCA-004', message: 'goals must be an array', path: 'goals' });\r\n if (changesRaw === null) errors.push({ code: 'FGCA-004', message: 'changes must be an array', path: 'changes' });\r\n if (activitiesRaw === null) errors.push({ code: 'FGCA-004', message: 'activities must be an array', path: 'activities' });\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n // From here we know all four arrays exist.\r\n const factors = factorsRaw!;\r\n const goals = goalsRaw!;\r\n const changes = changesRaw!;\r\n const activities = activitiesRaw!;\r\n\r\n // Per-layer ID maps + duplicate detection. (FGCA-006: unique within a layer.)\r\n const factorIds = new Set<string>();\r\n const goalIds = new Set<string>();\r\n const changeIds = new Set<string>();\r\n const activityIds = new Set<string>();\r\n\r\n function checkLayerElement(\r\n el: Record<string, unknown> | null,\r\n path: string,\r\n idRe: RegExp,\r\n seen: Set<string>,\r\n ): { id: string; name: string } | null {\r\n if (!el) {\r\n errors.push({ code: 'FGCA-005', message: `${path} must be an object`, path });\r\n return null;\r\n }\r\n const id = el['id'];\r\n const name = el['name'];\r\n if (!isNonEmptyString(id)) {\r\n errors.push({ code: 'FGCA-005', message: `${path}.id is required`, path });\r\n return null;\r\n }\r\n if (!isNonEmptyString(name)) {\r\n errors.push({ code: 'FGCA-005', message: `${path}.name is required`, path });\r\n }\r\n if (!idRe.test(id)) {\r\n errors.push({\r\n code: 'FGCA-007',\r\n message: `${path}.id \"${id}\" does not match the canonical grammar for its layer`,\r\n path,\r\n });\r\n return null;\r\n }\r\n if (seen.has(id)) {\r\n errors.push({ code: 'FGCA-006', message: `Duplicate id \"${id}\"`, path });\r\n } else {\r\n seen.add(id);\r\n }\r\n return { id, name: isNonEmptyString(name) ? name : '' };\r\n }\r\n\r\n factors.forEach((el, i) => checkLayerElement(el, `factors[${i}]`, FACTOR_ID_RE, factorIds));\r\n goals.forEach((el, i) => checkLayerElement(el, `goals[${i}]`, GOAL_ID_RE, goalIds));\r\n changes.forEach((el, i) => checkLayerElement(el, `changes[${i}]`, CHANGE_ID_RE, changeIds));\r\n activities.forEach((el, i) => checkLayerElement(el, `activities[${i}]`, ACTIVITY_ID_RE, activityIds));\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n // Cross-refs.\r\n function checkRefArray(\r\n el: Record<string, unknown>,\r\n field: string,\r\n targets: Set<string>,\r\n refRe: RegExp,\r\n code: string,\r\n path: string,\r\n ): string[] {\r\n const ref = el[field];\r\n if (ref === undefined || ref === null) return [];\r\n if (!Array.isArray(ref)) {\r\n errors.push({ code: 'FGCA-007', message: `${path}.${field} must be an array of IDs`, path });\r\n return [];\r\n }\r\n const out: string[] = [];\r\n for (const r of ref) {\r\n if (!isNonEmptyString(r)) {\r\n errors.push({ code: 'FGCA-007', message: `${path}.${field}[] entries must be non-empty strings`, path });\r\n continue;\r\n }\r\n if (!refRe.test(r)) {\r\n errors.push({ code: 'FGCA-007', message: `${path}.${field}[] entry \"${r}\" does not match the expected grammar`, path });\r\n continue;\r\n }\r\n if (!targets.has(r)) {\r\n errors.push({ code, message: `${path}.${field}[] references undeclared element \"${r}\"`, path });\r\n continue;\r\n }\r\n out.push(r);\r\n }\r\n return out;\r\n }\r\n\r\n // Build internal id-maps (canonical string ID \u2192 internal sequential number).\r\n const idMap: InternalIdMap = { toInternal: new Map() };\r\n const allCanonicalIds = [...factorIds, ...goalIds, ...changeIds, ...activityIds];\r\n allCanonicalIds.forEach((id, i) => idMap.toInternal.set(id, i + 1));\r\n\r\n function intId(canonical: string): number {\r\n const n = idMap.toInternal.get(canonical);\r\n if (n === undefined) {\r\n // Shouldn't happen \u2014 we built the map from the same sets.\r\n throw new Error(`internal: canonical id \"${canonical}\" not mapped`);\r\n }\r\n return n;\r\n }\r\n\r\n // Layer entries (internal form).\r\n const internalFactors: FactorItem[] = factors.map((el) => ({\r\n id: intId(String(el!['id'])),\r\n name: String(el!['name'] ?? ''),\r\n }));\r\n\r\n const internalGoals: GoalItem[] = goals.map((el, i) => {\r\n const refIds = checkRefArray(el!, 'factors', factorIds, FACTOR_ID_RE, 'FGCA-008', `goals[${i}]`);\r\n return {\r\n id: intId(String(el!['id'])),\r\n name: String(el!['name'] ?? ''),\r\n factor: refIds.map((r) => ({ id: intId(r) })),\r\n };\r\n });\r\n\r\n // Build a reverse mapping: which changes does each activity reference (via\r\n // canonical activity.changes)? Used to populate the internal `change.activity_ids`.\r\n const activityChangesByCanonicalActivityId = new Map<string, string[]>();\r\n activities.forEach((el, i) => {\r\n const refIds = checkRefArray(el!, 'changes', changeIds, CHANGE_ID_RE, 'FGCA-010', `activities[${i}]`);\r\n activityChangesByCanonicalActivityId.set(String(el!['id']), refIds);\r\n });\r\n\r\n // For each change, find the activities that reference it.\r\n const activitiesForChange = new Map<string, string[]>();\r\n for (const [actId, changeIdsForAct] of activityChangesByCanonicalActivityId.entries()) {\r\n for (const cid of changeIdsForAct) {\r\n const arr = activitiesForChange.get(cid) ?? [];\r\n arr.push(actId);\r\n activitiesForChange.set(cid, arr);\r\n }\r\n }\r\n\r\n const internalChanges: BdnChangeWithActivities[] = changes.map((el, i) => {\r\n const goalRefs = checkRefArray(el!, 'goals', goalIds, GOAL_ID_RE, 'FGCA-009', `changes[${i}]`);\r\n // Internal `change.goal_id` is singular; canonical `change.goals` is plural.\r\n // First goal wins for the singular field; warn (not error) if multiple.\r\n if (goalRefs.length > 1) {\r\n warnings.push({\r\n code: 'FGCA-009',\r\n message: `changes[${i}].goals lists ${goalRefs.length} goals; the internal layout uses the first one (${goalRefs[0]}). Multi-goal changes are not lossy for the canonical spec \u2014 only the layout linearises them.`,\r\n path: `changes[${i}].goals`,\r\n });\r\n }\r\n const canonicalChangeId = String(el!['id']);\r\n const linkedActivityIds = activitiesForChange.get(canonicalChangeId) ?? [];\r\n return {\r\n id: intId(canonicalChangeId),\r\n name: String(el!['name'] ?? ''),\r\n goal_id: goalRefs.length > 0 ? intId(goalRefs[0]) : 0,\r\n activity_ids: linkedActivityIds.map((aid) => intId(aid)),\r\n };\r\n });\r\n\r\n const internalActivities: ActivityItem[] = activities.map((el, i) => {\r\n const goalRefs = checkRefArray(el!, 'goals', goalIds, GOAL_ID_RE, 'FGCA-011', `activities[${i}]`);\r\n return {\r\n id: intId(String(el!['id'])),\r\n name: String(el!['name'] ?? ''),\r\n goal_id: goalRefs.length > 0 ? intId(goalRefs[0]) : null,\r\n };\r\n });\r\n\r\n // FACTOR.references_constraint grammar check (FGCA-015).\r\n factors.forEach((el, i) => {\r\n const rc = el!['references_constraint'];\r\n if (rc === undefined || rc === null) return;\r\n if (!Array.isArray(rc)) {\r\n errors.push({ code: 'FGCA-015', message: `factors[${i}].references_constraint must be an array of IDs`, path: `factors[${i}].references_constraint` });\r\n return;\r\n }\r\n for (const r of rc) {\r\n if (typeof r !== 'string' || !CONSTRAINT_ID_RE.test(r)) {\r\n errors.push({\r\n code: 'FGCA-015',\r\n message: `factors[${i}].references_constraint[] entry \"${String(r)}\" must match CONSTRAINT-[<middle>-]<INTEGER>`,\r\n path: `factors[${i}].references_constraint`,\r\n });\r\n }\r\n }\r\n });\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n const parsed: FGCADoc = {\r\n notation: 'fgca',\r\n spec_version: typeof raw['spec_version'] === 'string' ? (raw['spec_version'] as string) : undefined,\r\n factors: internalFactors,\r\n goals: internalGoals,\r\n changes: internalChanges,\r\n activities: internalActivities,\r\n };\r\n\r\n return { valid: true, errors, warnings, parsed };\r\n}\r\n\r\nconst FGA_DOC_ID_RE = /^FGA(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\n\r\n/** On success, the internal-form FGCADoc derived from canonical FGA input. */\r\nexport interface CanonicalFGAResult extends ValidationResult {\r\n parsed?: FGCADoc;\r\n}\r\n\r\n/**\r\n * Canonical-form FGA parser + validator.\r\n *\r\n * FGA is the canonical FGCA chain minus the `changes[]` layer \u2014 flat\r\n * top-level `factors[]` + `goals[]` + `activities[]`, with `activity.goals[]`\r\n * linking activities straight to goals (no intermediate change). It reuses\r\n * `parseCanonicalFGCA` by injecting an empty `changes` array and remapping\r\n * the FGCA-NNN codes to the FGA-NNN registry (`notations/03-fga.md`,\r\n * FGA-001..011). The resulting internal `FGCADoc` carries `activity.goal_id`,\r\n * which is exactly what the renderer needs to draw goal \u2192 activity edges \u2014\r\n * the field whose absence produced the \"FGA nodes render, no edges\" bug\r\n * (transitrix/methodology#65 / vkgeorgia/strategy#65).\r\n *\r\n * Lives beside `parseCanonicalFGCA` (rather than inline in the extension) so\r\n * the canonical FGA path is unit-testable and the library owns the single\r\n * canon shape \u2014 flat form only, no `fga:` wrapper.\r\n */\r\nexport function parseCanonicalFGA(input: unknown): CanonicalFGAResult {\r\n if (!input || typeof input !== 'object') {\r\n return { valid: false, errors: [{ code: 'FGA-001', message: 'document root is not an object' }], warnings: [] };\r\n }\r\n const raw = input as Record<string, unknown>;\r\n if ('notation' in raw && raw['notation'] !== 'fga') {\r\n return {\r\n valid: false,\r\n errors: [{ code: 'FGA-001', message: `notation must be \"fga\", got \"${String(raw['notation'])}\"` }],\r\n warnings: [],\r\n };\r\n }\r\n if (raw['id'] === undefined) {\r\n return { valid: false, errors: [{ code: 'FGA-002', message: 'document id is required' }], warnings: [] };\r\n }\r\n if (typeof raw['id'] !== 'string' || !FGA_DOC_ID_RE.test(raw['id'])) {\r\n return {\r\n valid: false,\r\n errors: [{ code: 'FGA-002', message: `id \"${String(raw['id'])}\" must match FGA-[<middle>-]<INTEGER>` }],\r\n warnings: [],\r\n };\r\n }\r\n\r\n // Forward to the FGCA parser with synthetic FGCA notation + doc id + empty\r\n // changes. Per-layer / per-ref checks all reuse the FGCA implementation;\r\n // codes are remapped on the way out. FGCA-009 / 010 / 014 (changes-related)\r\n // are unreachable here because `changes` is empty.\r\n const synth = { ...raw, notation: 'fgca', id: 'FGCA-FROM-FGA-1', changes: [] };\r\n const r = parseCanonicalFGCA(synth);\r\n const remap: Record<string, string> = {\r\n 'FGCA-001': 'FGA-001',\r\n 'FGCA-002': 'FGA-002',\r\n 'FGCA-003': 'FGA-003',\r\n 'FGCA-004': 'FGA-004',\r\n 'FGCA-005': 'FGA-005',\r\n 'FGCA-006': 'FGA-006',\r\n 'FGCA-007': 'FGA-007',\r\n 'FGCA-008': 'FGA-008',\r\n 'FGCA-011': 'FGA-009',\r\n 'FGCA-012': 'FGA-010',\r\n 'FGCA-015': 'FGA-007',\r\n };\r\n const remapCode = (c: string): string => remap[c] ?? c;\r\n return {\r\n valid: r.valid,\r\n errors: r.errors.map((e) => ({ ...e, code: remapCode(e.code) })),\r\n warnings: r.warnings.map((w) => ({ ...w, code: remapCode(w.code) })),\r\n parsed: r.parsed,\r\n };\r\n}\r\n", "/**\r\n * Canonical-form Goals parser + validator.\r\n *\r\n * Accepts the methodology's canonical Goals YAML shape (see\r\n * `transitrix/methodology` `notations/04-goals.md`):\r\n *\r\n * - Flat top-level: `notation`, `id`, `name`, `goal_types[]`, `goals[]`.\r\n * No `goals_tree:` wrapper, no `root.goal_id` / `children:` nesting.\r\n * - Typed string IDs (`GOAL-\u2026`); document id `GOALS-[<middle>-]<INTEGER>`.\r\n * - Hierarchy via `parent: GOAL-\u2026` on each goal; omit for root.\r\n * - Per-notation validation codes `GOALS-001 \u2026 GOALS-011`.\r\n *\r\n * Returns the validation result plus, on success, an internal `GoalTree`\r\n * built from the canonical input \u2014 canonical typed-string IDs are\r\n * mapped to internal sequential numbers, `parent: GOAL-X` becomes\r\n * `parent_id: <numeric>`, `parent_id: 0` denotes a root.\r\n *\r\n * Strategy hub #63: this lives at the input boundary so the library's\r\n * internal types (numeric IDs) stay where they are. Convergence on\r\n * canonical typed-string IDs across all sister modules is a follow-up\r\n * task.\r\n */\r\n\r\nimport type { GoalTree, GoalType, Goal } from './types.js';\r\nimport type {\r\n ValidationError,\r\n ValidationWarning,\r\n ValidationResult,\r\n} from '../validation-types.js';\r\n\r\nexport interface CanonicalGoalsResult extends ValidationResult {\r\n /** On success, the internal-form GoalTree derived from the canonical input. */\r\n parsed?: GoalTree;\r\n}\r\n\r\nconst GOAL_ID_RE = /^GOAL(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\nconst GOALS_DOC_ID_RE = /^GOALS(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\n\r\nfunction isNonEmptyString(v: unknown): v is string {\r\n return typeof v === 'string' && v.trim().length > 0;\r\n}\r\n\r\nexport function parseCanonicalGoals(input: unknown): CanonicalGoalsResult {\r\n const errors: ValidationError[] = [];\r\n const warnings: ValidationWarning[] = [];\r\n\r\n if (!input || typeof input !== 'object') {\r\n return {\r\n valid: false,\r\n errors: [{ code: 'GOALS-001', message: 'document root is not an object' }],\r\n warnings,\r\n };\r\n }\r\n\r\n const raw = input as Record<string, unknown>;\r\n\r\n if ('notation' in raw && raw['notation'] !== 'goals') {\r\n return {\r\n valid: false,\r\n errors: [\r\n {\r\n code: 'GOALS-001',\r\n message: `notation must be \"goals\", got \"${String(raw['notation'])}\"`,\r\n },\r\n ],\r\n warnings,\r\n };\r\n }\r\n\r\n // GOALS-002 \u2014 document id.\r\n if (raw['id'] !== undefined) {\r\n if (!isNonEmptyString(raw['id']) || !GOALS_DOC_ID_RE.test(raw['id'])) {\r\n errors.push({\r\n code: 'GOALS-002',\r\n message: `id \"${String(raw['id'])}\" must match GOALS-[<middle>-]<INTEGER>`,\r\n });\r\n }\r\n } else {\r\n errors.push({ code: 'GOALS-002', message: 'document id is required' });\r\n }\r\n\r\n if (!isNonEmptyString(raw['name'])) {\r\n errors.push({ code: 'GOALS-003', message: 'name is required' });\r\n }\r\n\r\n const goalTypesRaw = raw['goal_types'];\r\n const goalsRaw = raw['goals'];\r\n\r\n if (!Array.isArray(goalTypesRaw) || goalTypesRaw.length === 0) {\r\n errors.push({ code: 'GOALS-004', message: 'goal_types must be a non-empty array', path: 'goal_types' });\r\n }\r\n if (!Array.isArray(goalsRaw) || goalsRaw.length === 0) {\r\n errors.push({ code: 'GOALS-004', message: 'goals must be a non-empty array', path: 'goals' });\r\n }\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n const gtArr = goalTypesRaw as unknown[];\r\n const gArr = goalsRaw as unknown[];\r\n\r\n // GOALS-005 \u2014 goal_types entries.\r\n const typeByName = new Map<string, number>();\r\n const internalGoalTypes: GoalType[] = [];\r\n for (let i = 0; i < gtArr.length; i++) {\r\n const el = gtArr[i];\r\n const path = `goal_types[${i}]`;\r\n if (!el || typeof el !== 'object') {\r\n errors.push({ code: 'GOALS-005', message: `${path} must be an object`, path });\r\n continue;\r\n }\r\n const o = el as Record<string, unknown>;\r\n if (!isNonEmptyString(o['name'])) {\r\n errors.push({ code: 'GOALS-005', message: `${path}.name is required`, path });\r\n continue;\r\n }\r\n const lvl = o['level'];\r\n if (typeof lvl !== 'number' || !Number.isInteger(lvl) || lvl < 0) {\r\n errors.push({ code: 'GOALS-005', message: `${path}.level must be a non-negative integer`, path });\r\n continue;\r\n }\r\n if (typeByName.has(o['name'])) {\r\n errors.push({ code: 'GOALS-005', message: `${path}: duplicate goal_types name \"${o['name']}\"`, path });\r\n continue;\r\n }\r\n typeByName.set(o['name'], lvl);\r\n internalGoalTypes.push({ name: o['name'], level: lvl });\r\n }\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n // GOALS-006 / 007 \u2014 goals entries.\r\n const seenIds = new Set<string>();\r\n const goalById = new Map<string, Record<string, unknown>>();\r\n const checkedGoals: Array<{ raw: Record<string, unknown>; path: string }> = [];\r\n for (let i = 0; i < gArr.length; i++) {\r\n const el = gArr[i];\r\n const path = `goals[${i}]`;\r\n if (!el || typeof el !== 'object') {\r\n errors.push({ code: 'GOALS-006', message: `${path} must be an object`, path });\r\n continue;\r\n }\r\n const o = el as Record<string, unknown>;\r\n if (!isNonEmptyString(o['id'])) {\r\n errors.push({ code: 'GOALS-006', message: `${path}.id is required`, path });\r\n continue;\r\n }\r\n if (!isNonEmptyString(o['name'])) {\r\n errors.push({ code: 'GOALS-006', message: `${path}.name is required`, path });\r\n }\r\n if (!isNonEmptyString(o['type'])) {\r\n errors.push({ code: 'GOALS-006', message: `${path}.type is required`, path });\r\n }\r\n const lvl = o['level'];\r\n if (typeof lvl !== 'number' || !Number.isInteger(lvl) || lvl < 0) {\r\n errors.push({ code: 'GOALS-006', message: `${path}.level must be a non-negative integer`, path });\r\n }\r\n if (!GOAL_ID_RE.test(o['id'])) {\r\n errors.push({\r\n code: 'GOALS-007',\r\n message: `${path}.id \"${o['id']}\" must match GOAL-[<middle>-]<INTEGER>`,\r\n path,\r\n });\r\n continue;\r\n }\r\n if (seenIds.has(o['id'])) {\r\n errors.push({ code: 'GOALS-007', message: `${path}: duplicate goal id \"${o['id']}\"`, path });\r\n continue;\r\n }\r\n seenIds.add(o['id']);\r\n goalById.set(o['id'], o);\r\n checkedGoals.push({ raw: o, path });\r\n }\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n // GOALS-008 \u2014 type / level consistency.\r\n for (const { raw: o, path } of checkedGoals) {\r\n const t = o['type'] as string;\r\n const lvl = o['level'] as number;\r\n const expectedLvl = typeByName.get(t);\r\n if (expectedLvl === undefined) {\r\n errors.push({\r\n code: 'GOALS-008',\r\n message: `${path}.type \"${t}\" is not defined in goal_types[]`,\r\n path,\r\n });\r\n continue;\r\n }\r\n if (expectedLvl !== lvl) {\r\n errors.push({\r\n code: 'GOALS-008',\r\n message: `${path}.level ${lvl} does not match the level (${expectedLvl}) of goal_types entry \"${t}\"`,\r\n path,\r\n });\r\n }\r\n }\r\n\r\n // GOALS-009 / 010 \u2014 parent references + cycle detection.\r\n // Assign internal numeric ids (canonical \u2192 sequential).\r\n const idToInternal = new Map<string, number>();\r\n let counter = 0;\r\n for (const { raw: o } of checkedGoals) {\r\n counter += 1;\r\n idToInternal.set(o['id'] as string, counter);\r\n }\r\n\r\n // GOALS-009: broken parent ref \u2192 warn (per spec, \"treated as backlog\").\r\n // GOALS-011: non-root goal without parent \u2192 warn.\r\n for (const { raw: o, path } of checkedGoals) {\r\n const parent = o['parent'];\r\n const lvl = o['level'] as number;\r\n if (parent === undefined || parent === null) {\r\n if (lvl >= 1) {\r\n warnings.push({\r\n code: 'GOALS-011',\r\n message: `${path}: non-root goal (level ${lvl}) has no parent \u2014 orphan / backlog`,\r\n path,\r\n });\r\n }\r\n continue;\r\n }\r\n if (!isNonEmptyString(parent) || !GOAL_ID_RE.test(parent)) {\r\n errors.push({\r\n code: 'GOALS-007',\r\n message: `${path}.parent \"${String(parent)}\" must match GOAL-[<middle>-]<INTEGER>`,\r\n path,\r\n });\r\n continue;\r\n }\r\n if (!goalById.has(parent)) {\r\n warnings.push({\r\n code: 'GOALS-009',\r\n message: `${path}.parent \"${parent}\" references an undefined goal \u2014 treated as orphan / backlog`,\r\n path,\r\n });\r\n }\r\n }\r\n\r\n // GOALS-010 \u2014 cycle detection. Follow each goal's parent chain to a root\r\n // (parent missing or undefined). If we revisit, that's a cycle.\r\n for (const { raw: o } of checkedGoals) {\r\n const startId = o['id'] as string;\r\n let curId: string | undefined = startId;\r\n const visited = new Set<string>();\r\n while (curId) {\r\n if (visited.has(curId)) {\r\n errors.push({\r\n code: 'GOALS-010',\r\n message: `Cycle detected in parent chain involving goal \"${startId}\"`,\r\n });\r\n break;\r\n }\r\n visited.add(curId);\r\n const cur = goalById.get(curId);\r\n const p = cur?.['parent'];\r\n if (!isNonEmptyString(p)) break;\r\n if (!goalById.has(p)) break;\r\n curId = p;\r\n }\r\n }\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n // Build internal GoalTree.\r\n const internalGoals: Goal[] = checkedGoals.map(({ raw: o }) => {\r\n const parent = o['parent'];\r\n const parentId =\r\n isNonEmptyString(parent) && idToInternal.has(parent) ? idToInternal.get(parent)! : 0;\r\n return {\r\n id: idToInternal.get(o['id'] as string)!,\r\n name: o['name'] as string,\r\n type: o['type'] as string,\r\n level: o['level'] as number,\r\n parent_id: parentId,\r\n description: typeof o['description'] === 'string' ? (o['description'] as string) : undefined,\r\n link: typeof o['link'] === 'string' ? (o['link'] as string) : undefined,\r\n tag: typeof o['tag'] === 'string' ? (o['tag'] as string) : undefined,\r\n };\r\n });\r\n\r\n const parsed: GoalTree = {\r\n goal_types: internalGoalTypes,\r\n goals: internalGoals,\r\n };\r\n\r\n return { valid: true, errors, warnings, parsed };\r\n}\r\n", "import type { AspectCategory } from './types.js';\r\nimport type { ValidationError, ValidationWarning, ValidationResult } from '../validation-types.js';\r\n\r\nexport type { ValidationError, ValidationWarning, ValidationResult };\r\n\r\nconst ID_GRAMMAR_RE = /^[A-Z][A-Z_]*(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\nconst PROCESS_BLUEPRINT_ID_RE = /^PROCESS_BLUEPRINT(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\nconst STAGE_ID_RE = /^STAGE(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\nconst APPLICATION_ID_RE = /^APPLICATION(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\nconst ROLE_ID_RE = /^ROLE(-[A-Z0-9][A-Z0-9_]*)*-\\d+$/;\r\n\r\nconst ASPECT_CATEGORIES: AspectCategory[] = ['systems', 'actors', 'equipment', 'information_entities'];\r\n\r\nfunction isNonEmptyString(v: unknown): v is string {\r\n return typeof v === 'string' && v.trim().length > 0;\r\n}\r\n\r\nexport function validateProcessBlueprint(input: unknown): ValidationResult {\r\n const errors: ValidationError[] = [];\r\n const warnings: ValidationWarning[] = [];\r\n\r\n if (!input || typeof input !== 'object') {\r\n return {\r\n valid: false,\r\n errors: [{ code: 'BP-001', message: 'Input must be an object' }],\r\n warnings,\r\n };\r\n }\r\n\r\n const raw = input as Record<string, unknown>;\r\n\r\n if ('notation' in raw && raw['notation'] !== 'process-blueprint') {\r\n errors.push({\r\n code: 'BP-001',\r\n message: `notation must be \"process-blueprint\", got \"${String(raw['notation'])}\"`,\r\n });\r\n }\r\n\r\n if (!('process_blueprint' in raw) || !raw['process_blueprint'] || typeof raw['process_blueprint'] !== 'object') {\r\n errors.push({ code: 'BP-001', message: 'Missing required root key: process_blueprint' });\r\n return { valid: false, errors, warnings };\r\n }\r\n\r\n const pb = raw['process_blueprint'] as Record<string, unknown>;\r\n\r\n if (!isNonEmptyString(pb['id'])) {\r\n errors.push({ code: 'BP-002', message: 'process_blueprint.id is required' });\r\n } else if (!PROCESS_BLUEPRINT_ID_RE.test(pb['id'])) {\r\n errors.push({\r\n code: 'BP-002',\r\n message: `process_blueprint.id \"${pb['id']}\" must match PROCESS_BLUEPRINT-[<middle>-]<INTEGER>`,\r\n });\r\n }\r\n\r\n if (!isNonEmptyString(pb['name'])) {\r\n errors.push({ code: 'BP-003', message: 'process_blueprint.name is required' });\r\n }\r\n\r\n const stagesRaw = pb['stages'];\r\n if (!Array.isArray(stagesRaw) || stagesRaw.length === 0) {\r\n errors.push({ code: 'BP-004', message: 'process_blueprint.stages must be a non-empty array' });\r\n return { valid: false, errors, warnings };\r\n }\r\n\r\n const stageIds = new Set<string>();\r\n for (let i = 0; i < stagesRaw.length; i++) {\r\n const s = stagesRaw[i] as Record<string, unknown> | undefined;\r\n const path = `stages[${i}]`;\r\n if (!s || typeof s !== 'object') {\r\n errors.push({ code: 'BP-005', message: `${path} must be an object` });\r\n continue;\r\n }\r\n if (!isNonEmptyString(s['id'])) {\r\n errors.push({ code: 'BP-005', message: `${path}.id is required` });\r\n } else {\r\n const sid = s['id'].trim();\r\n if (stageIds.has(sid)) {\r\n errors.push({ code: 'BP-006', message: `Duplicate stage id: \"${sid}\"` });\r\n } else {\r\n stageIds.add(sid);\r\n }\r\n if (!STAGE_ID_RE.test(sid)) {\r\n errors.push({\r\n code: 'BP-006',\r\n message: `${path}.id \"${sid}\" must match STAGE-[<middle>-]<INTEGER>`,\r\n });\r\n }\r\n }\r\n if (!isNonEmptyString(s['name'])) {\r\n errors.push({ code: 'BP-005', message: `${path}.name is required` });\r\n }\r\n if (!isNonEmptyString(s['goal'])) {\r\n errors.push({ code: 'BP-005', message: `${path}.goal is required` });\r\n }\r\n if (!isNonEmptyString(s['result'])) {\r\n errors.push({ code: 'BP-005', message: `${path}.result is required` });\r\n }\r\n }\r\n\r\n const usedStageIds = new Set<string>();\r\n\r\n for (const category of ASPECT_CATEGORIES) {\r\n const arr = pb[category];\r\n if (arr === undefined) continue;\r\n if (!Array.isArray(arr)) {\r\n errors.push({ code: 'BP-007', message: `process_blueprint.${category} must be an array` });\r\n continue;\r\n }\r\n\r\n for (let i = 0; i < arr.length; i++) {\r\n const e = arr[i] as Record<string, unknown> | undefined;\r\n const path = `${category}[${i}]`;\r\n if (!e || typeof e !== 'object') {\r\n errors.push({ code: 'BP-007', message: `${path} must be an object` });\r\n continue;\r\n }\r\n\r\n if (!isNonEmptyString(e['name'])) {\r\n errors.push({ code: 'BP-007', message: `${path}.name is required` });\r\n }\r\n\r\n const entryStages = e['stages'];\r\n if (!Array.isArray(entryStages) || entryStages.length === 0) {\r\n errors.push({\r\n code: 'BP-007',\r\n message: `${path}.stages must be a non-empty array of STAGE-\u2026 ids`,\r\n });\r\n } else {\r\n for (let j = 0; j < entryStages.length; j++) {\r\n const ref = entryStages[j];\r\n if (typeof ref !== 'string') {\r\n errors.push({ code: 'BP-008', message: `${path}.stages[${j}] must be a string` });\r\n continue;\r\n }\r\n const refTrimmed = ref.trim();\r\n if (!stageIds.has(refTrimmed)) {\r\n errors.push({\r\n code: 'BP-008',\r\n message: `${path}.stages[${j}] references undeclared stage \"${ref}\"`,\r\n });\r\n } else {\r\n usedStageIds.add(refTrimmed);\r\n }\r\n }\r\n }\r\n\r\n const entryId = e['id'];\r\n if (entryId !== undefined) {\r\n if (typeof entryId !== 'string') {\r\n errors.push({ code: 'BP-009', message: `${path}.id must be a string` });\r\n } else if (!ID_GRAMMAR_RE.test(entryId)) {\r\n errors.push({\r\n code: 'BP-009',\r\n message: `${path}.id \"${entryId}\" must match <TYPE>-[<middle>-]<INTEGER>`,\r\n });\r\n } else if (category === 'systems' && !APPLICATION_ID_RE.test(entryId)) {\r\n errors.push({\r\n code: 'BP-010',\r\n message: `${path}.id \"${entryId}\" must use the APPLICATION- prefix`,\r\n });\r\n } else if (category === 'actors' && !ROLE_ID_RE.test(entryId)) {\r\n errors.push({\r\n code: 'BP-010',\r\n message: `${path}.id \"${entryId}\" must use the ROLE- prefix`,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const sid of stageIds) {\r\n if (!usedStageIds.has(sid)) {\r\n warnings.push({\r\n code: 'BP-011',\r\n message: `Stage \"${sid}\" has no aspect entries pointing at it \u2014 structurally empty`,\r\n });\r\n }\r\n }\r\n\r\n return { valid: errors.length === 0, errors, warnings };\r\n}\r\n", "import type {\r\n AspectCategory,\r\n AspectEntry,\r\n AspectPill,\r\n AspectRow,\r\n ProcessBlueprintLayoutOptions,\r\n LegendCell,\r\n ProcessBlueprintFile,\r\n ProcessBlueprintLayout,\r\n Stage,\r\n StageHeaderCell,\r\n StageTextCell,\r\n} from './types.js';\r\n\r\nconst ASPECT_CATEGORIES: AspectCategory[] = ['systems', 'actors', 'equipment', 'information_entities'];\r\n\r\nconst ASPECT_LABEL: Record<AspectCategory, string> = {\r\n systems: 'Systems',\r\n actors: 'Actors',\r\n equipment: 'Equipment',\r\n information_entities: 'Information',\r\n};\r\n\r\nconst DEFAULTS: Required<ProcessBlueprintLayoutOptions> = {\r\n legendColumnWidth: 140,\r\n stageColumnWidth: 220,\r\n stageHeaderHeight: 40,\r\n goalRowHeight: 56,\r\n resultRowHeight: 56,\r\n aspectRowMinHeight: 60,\r\n pillHeight: 28,\r\n pillGap: 4,\r\n cellPadding: 8,\r\n};\r\n\r\ninterface RawPill {\r\n category: AspectCategory;\r\n entryIndex: number;\r\n name: string;\r\n id?: string;\r\n startStageIndex: number;\r\n endStageIndex: number;\r\n}\r\n\r\nfunction resolveOptions(options: ProcessBlueprintLayoutOptions | undefined): Required<ProcessBlueprintLayoutOptions> {\r\n return { ...DEFAULTS, ...(options ?? {}) };\r\n}\r\n\r\nfunction buildStageIndex(stages: Stage[]): Map<string, number> {\r\n const idx = new Map<string, number>();\r\n for (let i = 0; i < stages.length; i++) {\r\n const sid = typeof stages[i]?.id === 'string' ? stages[i].id.trim() : '';\r\n if (sid.length > 0 && !idx.has(sid)) {\r\n idx.set(sid, i);\r\n }\r\n }\r\n return idx;\r\n}\r\n\r\nfunction pillsForEntry(\r\n category: AspectCategory,\r\n entryIndex: number,\r\n entry: AspectEntry,\r\n stageIndexById: Map<string, number>,\r\n): RawPill[] {\r\n if (!Array.isArray(entry.stages)) return [];\r\n\r\n const idxs: number[] = [];\r\n const seen = new Set<number>();\r\n for (const ref of entry.stages) {\r\n if (typeof ref !== 'string') continue;\r\n const i = stageIndexById.get(ref.trim());\r\n if (i === undefined) continue;\r\n if (seen.has(i)) continue;\r\n seen.add(i);\r\n idxs.push(i);\r\n }\r\n idxs.sort((a, b) => a - b);\r\n\r\n const pills: RawPill[] = [];\r\n let runStart: number | null = null;\r\n let runEnd: number | null = null;\r\n for (const i of idxs) {\r\n if (runStart === null || runEnd === null) {\r\n runStart = i;\r\n runEnd = i;\r\n continue;\r\n }\r\n if (i === runEnd + 1) {\r\n runEnd = i;\r\n } else {\r\n pills.push({\r\n category,\r\n entryIndex,\r\n name: entry.name,\r\n id: entry.id,\r\n startStageIndex: runStart,\r\n endStageIndex: runEnd,\r\n });\r\n runStart = i;\r\n runEnd = i;\r\n }\r\n }\r\n if (runStart !== null && runEnd !== null) {\r\n pills.push({\r\n category,\r\n entryIndex,\r\n name: entry.name,\r\n id: entry.id,\r\n startStageIndex: runStart,\r\n endStageIndex: runEnd,\r\n });\r\n }\r\n return pills;\r\n}\r\n\r\nfunction packPillsIntoSlots(pills: RawPill[]): { slot: number[]; maxSlot: number } {\r\n // Greedy interval scheduling: stable order by startStageIndex.\r\n const order = pills\r\n .map((_, i) => i)\r\n .sort((a, b) => {\r\n const ds = pills[a].startStageIndex - pills[b].startStageIndex;\r\n if (ds !== 0) return ds;\r\n return pills[a].endStageIndex - pills[b].endStageIndex;\r\n });\r\n\r\n const slotEndByLevel: number[] = []; // slotEndByLevel[s] = last endStageIndex placed in slot s\r\n const slot = new Array<number>(pills.length).fill(0);\r\n let maxSlot = 0;\r\n\r\n for (const i of order) {\r\n const p = pills[i];\r\n let placed = false;\r\n for (let s = 0; s < slotEndByLevel.length; s++) {\r\n if (slotEndByLevel[s] < p.startStageIndex) {\r\n slot[i] = s;\r\n slotEndByLevel[s] = p.endStageIndex;\r\n placed = true;\r\n break;\r\n }\r\n }\r\n if (!placed) {\r\n slot[i] = slotEndByLevel.length;\r\n slotEndByLevel.push(p.endStageIndex);\r\n }\r\n if (slot[i] > maxSlot) maxSlot = slot[i];\r\n }\r\n\r\n return { slot, maxSlot };\r\n}\r\n\r\nexport function layoutProcessBlueprint(\r\n file: ProcessBlueprintFile,\r\n options?: ProcessBlueprintLayoutOptions,\r\n): ProcessBlueprintLayout {\r\n const opts = resolveOptions(options);\r\n\r\n const pb = file.process_blueprint;\r\n const stages = Array.isArray(pb?.stages) ? pb.stages : [];\r\n const stageIndexById = buildStageIndex(stages);\r\n\r\n // Stage headers\r\n const stageHeaders: StageHeaderCell[] = stages.map((s, i) => ({\r\n stageIndex: i,\r\n id: s?.id ?? '',\r\n name: s?.name ?? '',\r\n x: opts.legendColumnWidth + i * opts.stageColumnWidth,\r\n y: 0,\r\n width: opts.stageColumnWidth,\r\n height: opts.stageHeaderHeight,\r\n }));\r\n\r\n // Goal + result rows\r\n const goalRowY = opts.stageHeaderHeight;\r\n const resultRowY = goalRowY + opts.goalRowHeight;\r\n\r\n const goalCells: StageTextCell[] = stages.map((s, i) => ({\r\n stageIndex: i,\r\n text: s?.goal ?? '',\r\n x: opts.legendColumnWidth + i * opts.stageColumnWidth,\r\n y: goalRowY,\r\n width: opts.stageColumnWidth,\r\n height: opts.goalRowHeight,\r\n }));\r\n\r\n const resultCells: StageTextCell[] = stages.map((s, i) => ({\r\n stageIndex: i,\r\n text: s?.result ?? '',\r\n x: opts.legendColumnWidth + i * opts.stageColumnWidth,\r\n y: resultRowY,\r\n width: opts.stageColumnWidth,\r\n height: opts.resultRowHeight,\r\n }));\r\n\r\n const aspectsStartY = resultRowY + opts.resultRowHeight;\r\n\r\n // Aspect rows: only categories with at least one entry, in fixed order.\r\n const aspectRows: AspectRow[] = [];\r\n let aspectCursorY = aspectsStartY;\r\n\r\n for (const category of ASPECT_CATEGORIES) {\r\n const arr = pb?.[category];\r\n if (!Array.isArray(arr) || arr.length === 0) continue;\r\n\r\n const rawPills: RawPill[] = [];\r\n for (let i = 0; i < arr.length; i++) {\r\n const entry = arr[i];\r\n if (!entry || typeof entry !== 'object') continue;\r\n rawPills.push(...pillsForEntry(category, i, entry as AspectEntry, stageIndexById));\r\n }\r\n\r\n // If every entry in this category had no resolvable stage refs, drop the row.\r\n if (rawPills.length === 0) continue;\r\n\r\n const { slot, maxSlot } = packPillsIntoSlots(rawPills);\r\n const contentHeight = (maxSlot + 1) * (opts.pillHeight + opts.pillGap) - opts.pillGap;\r\n const rowHeight = Math.max(\r\n opts.aspectRowMinHeight,\r\n contentHeight + 2 * opts.cellPadding,\r\n );\r\n\r\n const pills: AspectPill[] = rawPills.map((p, i) => {\r\n const x = opts.legendColumnWidth + p.startStageIndex * opts.stageColumnWidth + opts.cellPadding;\r\n const width =\r\n (p.endStageIndex - p.startStageIndex + 1) * opts.stageColumnWidth - 2 * opts.cellPadding;\r\n const y = aspectCursorY + opts.cellPadding + slot[i] * (opts.pillHeight + opts.pillGap);\r\n return {\r\n category: p.category,\r\n entryIndex: p.entryIndex,\r\n name: p.name,\r\n id: p.id,\r\n startStageIndex: p.startStageIndex,\r\n endStageIndex: p.endStageIndex,\r\n x,\r\n y,\r\n width,\r\n height: opts.pillHeight,\r\n };\r\n });\r\n\r\n aspectRows.push({\r\n category,\r\n y: aspectCursorY,\r\n height: rowHeight,\r\n pills,\r\n });\r\n\r\n aspectCursorY += rowHeight;\r\n }\r\n\r\n // Legend (left column labels): one entry per row.\r\n const legend: LegendCell[] = [\r\n { kind: 'goal', label: 'Goal', y: goalRowY, height: opts.goalRowHeight },\r\n { kind: 'result', label: 'Result', y: resultRowY, height: opts.resultRowHeight },\r\n ...aspectRows.map<LegendCell>(row => ({\r\n kind: 'aspect',\r\n category: row.category,\r\n label: ASPECT_LABEL[row.category],\r\n y: row.y,\r\n height: row.height,\r\n })),\r\n ];\r\n\r\n const totalWidth = opts.legendColumnWidth + stages.length * opts.stageColumnWidth;\r\n const totalHeight = aspectCursorY;\r\n\r\n return {\r\n bounds: { x: 0, y: 0, width: totalWidth, height: totalHeight },\r\n legendColumnWidth: opts.legendColumnWidth,\r\n stageColumnWidth: opts.stageColumnWidth,\r\n legend,\r\n stageHeaders,\r\n goalCells,\r\n resultCells,\r\n aspectRows,\r\n };\r\n}\r\n", "import type { ProcessGroupType, ProcessStatus } from './types.js';\r\nimport type { ValidationError, ValidationWarning, ValidationResult } from '../validation-types.js';\r\n\r\nexport type { ValidationError, ValidationWarning, ValidationResult };\r\n\r\nconst VALID_GROUP_TYPES = new Set<ProcessGroupType>(['operating', 'supporting', 'management']);\r\nconst VALID_STATUSES = new Set<ProcessStatus>(['Draft', 'Active', 'Deprecated']);\r\nconst DATE_RE = /^\\d{4}-\\d{2}-\\d{2}$/;\r\n\r\nexport function validateProcessMap(input: unknown): ValidationResult {\r\n const errors: ValidationError[] = [];\r\n const warnings: ValidationWarning[] = [];\r\n\r\n if (!input || typeof input !== 'object') {\r\n return { valid: false, errors: [{ code: 'PMAP-001', message: 'Input must be an object' }], warnings };\r\n }\r\n\r\n const raw = input as Record<string, unknown>;\r\n\r\n if (!('notation' in raw)) {\r\n errors.push({ code: 'PMAP-001', message: 'Missing required field: notation' });\r\n } else if (raw['notation'] !== 'process-map') {\r\n errors.push({ code: 'PMAP-001', message: `notation must be \"process-map\", got \"${raw['notation']}\"` });\r\n }\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n const map = raw['process_map'];\r\n if (!map || typeof map !== 'object') {\r\n errors.push({ code: 'PMAP-002', message: 'Missing required field: process_map' });\r\n return { valid: false, errors, warnings };\r\n }\r\n const m = map as Record<string, unknown>;\r\n\r\n if (!m['id'] || typeof m['id'] !== 'string' || !(m['id'] as string).trim()) {\r\n errors.push({ code: 'PMAP-002', message: 'process_map.id is required' });\r\n }\r\n if (!m['name'] || typeof m['name'] !== 'string' || !(m['name'] as string).trim()) {\r\n errors.push({ code: 'PMAP-002', message: 'process_map.name is required' });\r\n }\r\n if (!m['updated_at'] || typeof m['updated_at'] !== 'string') {\r\n errors.push({ code: 'PMAP-002', message: 'process_map.updated_at is required' });\r\n }\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n if (!DATE_RE.test(m['updated_at'] as string)) {\r\n errors.push({ code: 'PMAP-008', message: `process_map.updated_at must be YYYY-MM-DD, got \"${m['updated_at']}\"` });\r\n }\r\n\r\n const groups = m['groups'];\r\n if (!Array.isArray(groups)) {\r\n errors.push({ code: 'PMAP-002', message: 'process_map.groups must be an array' });\r\n return { valid: false, errors, warnings };\r\n }\r\n\r\n const seenGroupIds = new Set<string>();\r\n const seenProcessIds = new Set<string>();\r\n\r\n for (let gi = 0; gi < groups.length; gi++) {\r\n const rawGroup = groups[gi];\r\n const gIdx = `groups[${gi}]`;\r\n\r\n if (!rawGroup || typeof rawGroup !== 'object') {\r\n errors.push({ code: 'PMAP-003', message: `${gIdx} must be an object` });\r\n continue;\r\n }\r\n const g = rawGroup as Record<string, unknown>;\r\n\r\n if (!g['id'] || typeof g['id'] !== 'string' || !(g['id'] as string).trim()) {\r\n errors.push({ code: 'PMAP-003', message: `${gIdx}: id is required` });\r\n } else {\r\n const gid = g['id'] as string;\r\n if (seenGroupIds.has(gid)) {\r\n errors.push({ code: 'PMAP-010', message: `Duplicate group id: \"${gid}\"` });\r\n }\r\n seenGroupIds.add(gid);\r\n }\r\n\r\n if (!g['name'] || typeof g['name'] !== 'string' || !(g['name'] as string).trim()) {\r\n errors.push({ code: 'PMAP-003', message: `${gIdx}: name is required` });\r\n }\r\n if (!g['type']) {\r\n errors.push({ code: 'PMAP-003', message: `${gIdx}: type is required` });\r\n } else if (!VALID_GROUP_TYPES.has(g['type'] as ProcessGroupType)) {\r\n errors.push({ code: 'PMAP-004', message: `${gIdx}: type \"${g['type']}\" must be one of: operating, supporting, management` });\r\n }\r\n\r\n const processes = g['processes'];\r\n if (processes !== undefined && !Array.isArray(processes)) {\r\n errors.push({ code: 'PMAP-003', message: `${gIdx}: processes must be an array` });\r\n continue;\r\n }\r\n\r\n const list = (processes ?? []) as unknown[];\r\n for (let pi = 0; pi < list.length; pi++) {\r\n const rawProcess = list[pi];\r\n const pIdx = `${gIdx}.processes[${pi}]`;\r\n\r\n if (!rawProcess || typeof rawProcess !== 'object') {\r\n errors.push({ code: 'PMAP-005', message: `${pIdx} must be an object` });\r\n continue;\r\n }\r\n const p = rawProcess as Record<string, unknown>;\r\n\r\n if (!p['process_id'] || typeof p['process_id'] !== 'string' || !(p['process_id'] as string).trim()) {\r\n errors.push({ code: 'PMAP-005', message: `${pIdx}: process_id is required` });\r\n } else {\r\n const pid = p['process_id'] as string;\r\n if (seenProcessIds.has(pid)) {\r\n errors.push({ code: 'PMAP-009', message: `Duplicate process_id: \"${pid}\"` });\r\n }\r\n seenProcessIds.add(pid);\r\n }\r\n\r\n if (!p['name'] || typeof p['name'] !== 'string' || !(p['name'] as string).trim()) {\r\n errors.push({ code: 'PMAP-005', message: `${pIdx}: name is required` });\r\n }\r\n if (!p['status']) {\r\n errors.push({ code: 'PMAP-005', message: `${pIdx}: status is required` });\r\n } else if (!VALID_STATUSES.has(p['status'] as ProcessStatus)) {\r\n errors.push({ code: 'PMAP-006', message: `${pIdx}: status \"${p['status']}\" must be one of: Draft, Active, Deprecated` });\r\n }\r\n\r\n if (p['maturity'] !== undefined) {\r\n const mat = p['maturity'];\r\n if (typeof mat !== 'number' || !Number.isInteger(mat) || mat < 1 || mat > 5) {\r\n errors.push({ code: 'PMAP-007', message: `${pIdx}: maturity must be an integer 1\u20135, got \"${mat}\"` });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return { valid: errors.length === 0, errors, warnings };\r\n}\r\n", "import type { ProductsCatalogueFile, ProductType, ProductStatus } from './types.js';\r\nimport type { ValidationError, ValidationWarning, ValidationResult } from '../validation-types.js';\r\n\r\nexport type { ValidationError, ValidationWarning, ValidationResult };\r\n\r\nconst VALID_TYPES = new Set<ProductType>(['digital_product', 'service', 'platform', 'bundle']);\r\nconst VALID_STATUSES = new Set<ProductStatus>(['Draft', 'Active', 'Deprecated']);\r\nconst DATE_RE = /^\\d{4}-\\d{2}-\\d{2}$/;\r\n\r\nexport function validateProductsCatalogue(input: unknown): ValidationResult {\r\n const errors: ValidationError[] = [];\r\n const warnings: ValidationWarning[] = [];\r\n\r\n if (!input || typeof input !== 'object') {\r\n return { valid: false, errors: [{ code: 'PROD-001', message: 'Input must be an object' }], warnings };\r\n }\r\n\r\n const raw = input as Record<string, unknown>;\r\n\r\n // PROD-001: notation header\r\n if (!('notation' in raw)) {\r\n errors.push({ code: 'PROD-001', message: 'Missing required field: notation' });\r\n } else if (raw['notation'] !== 'products') {\r\n errors.push({ code: 'PROD-001', message: `notation must be \"products\", got \"${raw['notation']}\"` });\r\n }\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n // PROD-002: catalogue header fields\r\n const cat = (raw['products_catalogue'] ?? {}) as Record<string, unknown>;\r\n if (!raw['products_catalogue'] || typeof raw['products_catalogue'] !== 'object') {\r\n errors.push({ code: 'PROD-002', message: 'Missing required field: products_catalogue' });\r\n return { valid: false, errors, warnings };\r\n }\r\n if (!cat['id'] || typeof cat['id'] !== 'string' || !(cat['id'] as string).trim()) {\r\n errors.push({ code: 'PROD-002', message: 'products_catalogue.id is required' });\r\n }\r\n if (!cat['name'] || typeof cat['name'] !== 'string' || !(cat['name'] as string).trim()) {\r\n errors.push({ code: 'PROD-002', message: 'products_catalogue.name is required' });\r\n }\r\n if (!cat['updated_at'] || typeof cat['updated_at'] !== 'string') {\r\n errors.push({ code: 'PROD-002', message: 'products_catalogue.updated_at is required' });\r\n }\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n // PROD-007: updated_at format\r\n if (!DATE_RE.test(cat['updated_at'] as string)) {\r\n errors.push({ code: 'PROD-007', message: `products_catalogue.updated_at must be YYYY-MM-DD, got \"${cat['updated_at']}\"` });\r\n }\r\n\r\n const products = cat['products'];\r\n if (!Array.isArray(products)) {\r\n errors.push({ code: 'PROD-002', message: 'products_catalogue.products must be an array' });\r\n return { valid: false, errors, warnings };\r\n }\r\n\r\n // PROD-008: unique product_id\r\n const seenIds = new Set<string>();\r\n\r\n for (let i = 0; i < products.length; i++) {\r\n const rawProduct = products[i];\r\n const idx = `products[${i}]`;\r\n\r\n if (!rawProduct || typeof rawProduct !== 'object') {\r\n errors.push({ code: 'PROD-003', message: `${idx} must be an object` });\r\n continue;\r\n }\r\n const p = rawProduct as Record<string, unknown>;\r\n\r\n // PROD-003: required per-product fields\r\n if (!p['product_id'] || typeof p['product_id'] !== 'string' || !(p['product_id'] as string).trim()) {\r\n errors.push({ code: 'PROD-003', message: `${idx}: product_id is required` });\r\n } else {\r\n const pid = p['product_id'] as string;\r\n if (seenIds.has(pid)) {\r\n errors.push({ code: 'PROD-008', message: `Duplicate product_id: \"${pid}\"` });\r\n }\r\n seenIds.add(pid);\r\n }\r\n\r\n if (!p['name'] || typeof p['name'] !== 'string' || !(p['name'] as string).trim()) {\r\n errors.push({ code: 'PROD-003', message: `${idx}: name is required` });\r\n }\r\n if (!p['type']) {\r\n errors.push({ code: 'PROD-003', message: `${idx}: type is required` });\r\n }\r\n if (!p['status']) {\r\n errors.push({ code: 'PROD-003', message: `${idx}: status is required` });\r\n }\r\n\r\n // PROD-004: type enum\r\n if (p['type'] && !VALID_TYPES.has(p['type'] as ProductType)) {\r\n errors.push({ code: 'PROD-004', message: `${idx}: type \"${p['type']}\" must be one of: digital_product, service, platform, bundle` });\r\n }\r\n\r\n // PROD-005: status enum\r\n if (p['status'] && !VALID_STATUSES.has(p['status'] as ProductStatus)) {\r\n errors.push({ code: 'PROD-005', message: `${idx}: status \"${p['status']}\" must be one of: Draft, Active, Deprecated` });\r\n }\r\n\r\n // PROD-006: maturity range\r\n if (p['maturity'] !== undefined) {\r\n const m = p['maturity'];\r\n if (typeof m !== 'number' || !Number.isInteger(m) || m < 1 || m > 5) {\r\n errors.push({ code: 'PROD-006', message: `${idx}: maturity must be an integer 1\u20135, got \"${m}\"` });\r\n }\r\n }\r\n }\r\n\r\n return { valid: errors.length === 0, errors, warnings };\r\n}\r\n", "import type { ScenarioStatus, FactorRelevance } from './types.js';\r\nimport type { ValidationError, ValidationWarning, ValidationResult } from '../validation-types.js';\r\n\r\nexport type { ValidationError, ValidationWarning, ValidationResult };\r\n\r\nconst VALID_STATUSES = new Set<ScenarioStatus>(['Draft', 'Active', 'Archived']);\r\nconst VALID_RELEVANCE = new Set<FactorRelevance>(['High', 'Medium', 'Low']);\r\nconst DATE_RE = /^\\d{4}-\\d{2}-\\d{2}$/;\r\n\r\ninterface RefSpec {\r\n field: string;\r\n idField: string;\r\n errorCode: string;\r\n}\r\n\r\nconst REF_SPECS: RefSpec[] = [\r\n { field: 'goals', idField: 'goal_id', errorCode: 'SCN-007' },\r\n { field: 'capabilities', idField: 'capability_id', errorCode: 'SCN-008' },\r\n { field: 'activities', idField: 'activity_id', errorCode: 'SCN-009' },\r\n { field: 'products', idField: 'product_id', errorCode: 'SCN-010' },\r\n { field: 'processes', idField: 'process_id', errorCode: 'SCN-011' },\r\n { field: 'applications', idField: 'app_id', errorCode: 'SCN-012' },\r\n];\r\n\r\nexport function validateScenario(input: unknown): ValidationResult {\r\n const errors: ValidationError[] = [];\r\n const warnings: ValidationWarning[] = [];\r\n\r\n if (!input || typeof input !== 'object') {\r\n return { valid: false, errors: [{ code: 'SCN-001', message: 'Input must be an object' }], warnings };\r\n }\r\n const raw = input as Record<string, unknown>;\r\n\r\n if (!('notation' in raw)) {\r\n errors.push({ code: 'SCN-001', message: 'Missing required field: notation' });\r\n } else if (raw['notation'] !== 'scenarios') {\r\n errors.push({ code: 'SCN-001', message: `notation must be \"scenarios\", got \"${raw['notation']}\"` });\r\n }\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n const scn = raw['scenario'];\r\n if (!scn || typeof scn !== 'object') {\r\n errors.push({ code: 'SCN-002', message: 'Missing required field: scenario' });\r\n return { valid: false, errors, warnings };\r\n }\r\n const s = scn as Record<string, unknown>;\r\n\r\n if (!s['id'] || typeof s['id'] !== 'string' || !(s['id'] as string).trim())\r\n errors.push({ code: 'SCN-002', message: 'scenario.id is required' });\r\n if (!s['name'] || typeof s['name'] !== 'string' || !(s['name'] as string).trim())\r\n errors.push({ code: 'SCN-002', message: 'scenario.name is required' });\r\n if (!s['status']) {\r\n errors.push({ code: 'SCN-002', message: 'scenario.status is required' });\r\n } else if (!VALID_STATUSES.has(s['status'] as ScenarioStatus)) {\r\n errors.push({ code: 'SCN-003', message: `scenario.status \"${s['status']}\" must be one of: Draft, Active, Archived` });\r\n }\r\n\r\n if (errors.length > 0) return { valid: false, errors, warnings };\r\n\r\n if (s['created_at'] !== undefined) {\r\n if (typeof s['created_at'] !== 'string' || !DATE_RE.test(s['created_at'] as string)) {\r\n errors.push({ code: 'SCN-004', message: `scenario.created_at must be YYYY-MM-DD, got \"${s['created_at']}\"` });\r\n }\r\n }\r\n\r\n if (s['factors_view'] !== undefined) {\r\n if (!Array.isArray(s['factors_view'])) {\r\n errors.push({ code: 'SCN-005', message: 'scenario.factors_view must be an array' });\r\n } else {\r\n const seen = new Set<string>();\r\n const fv = s['factors_view'] as unknown[];\r\n for (let i = 0; i < fv.length; i++) {\r\n const rawFactor = fv[i];\r\n const idx = `factors_view[${i}]`;\r\n if (!rawFactor || typeof rawFactor !== 'object') {\r\n errors.push({ code: 'SCN-005', message: `${idx} must be an object` });\r\n continue;\r\n }\r\n const f = rawFactor as Record<string, unknown>;\r\n if (!f['factor_id'] || typeof f['factor_id'] !== 'string' || !(f['factor_id'] as string).trim()) {\r\n errors.push({ code: 'SCN-005', message: `${idx}: factor_id is required` });\r\n } else {\r\n const fid = f['factor_id'] as string;\r\n if (seen.has(fid)) errors.push({ code: 'SCN-013', message: `Duplicate factor_id: \"${fid}\"` });\r\n seen.add(fid);\r\n }\r\n if (f['relevance'] !== undefined && !VALID_RELEVANCE.has(f['relevance'] as FactorRelevance)) {\r\n errors.push({ code: 'SCN-006', message: `${idx}: relevance \"${f['relevance']}\" must be one of: High, Medium, Low` });\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const spec of REF_SPECS) {\r\n const list = s[spec.field];\r\n if (list === undefined) continue;\r\n if (!Array.isArray(list)) {\r\n errors.push({ code: spec.errorCode, message: `scenario.${spec.field} must be an array` });\r\n continue;\r\n }\r\n const seen = new Set<string>();\r\n for (let i = 0; i < list.length; i++) {\r\n const rawItem = list[i];\r\n const idx = `${spec.field}[${i}]`;\r\n if (!rawItem || typeof rawItem !== 'object') {\r\n errors.push({ code: spec.errorCode, message: `${idx} must be an object` });\r\n continue;\r\n }\r\n const item = rawItem as Record<string, unknown>;\r\n const id = item[spec.idField];\r\n if (!id || typeof id !== 'string' || !(id as string).trim()) {\r\n errors.push({ code: spec.errorCode, message: `${idx}: ${spec.idField} is required` });\r\n } else {\r\n const sid = id as string;\r\n if (seen.has(sid)) errors.push({ code: spec.errorCode, message: `${idx}: duplicate ${spec.idField} \"${sid}\"` });\r\n seen.add(sid);\r\n }\r\n }\r\n }\r\n\r\n return { valid: errors.length === 0, errors, warnings };\r\n}\r\n", "/**\r\n * Coerce native `Date` instances inside a parsed YAML document into ISO\r\n * `YYYY-MM-DD` strings.\r\n *\r\n * Background: per the YAML 1.1 timestamp tag, a bare `2026-06-01` is parsed\r\n * by `js-yaml` as a native `Date`, not a string. Every notation validator in\r\n * this package expects ISO date strings (`typeof === 'string'` +\r\n * `YYYY-MM-DD` regex), so a Date reaching validation would falsely fail\r\n * shape checks even though the user followed the spec, minus quotes.\r\n *\r\n * The canonical, methodology-correct form is the quoted ISO string. This\r\n * coercion is a backstop so the unquoted form does not silently bite.\r\n *\r\n * UTC-safe: uses `getUTC*` so the JS process timezone cannot drift the day.\r\n * A bare `2026-06-01` parses to midnight UTC and round-trips to\r\n * `\"2026-06-01\"` regardless of `process.env.TZ`.\r\n *\r\n * Walks in place and returns the same reference for convenience.\r\n */\r\nexport function coerceDatesToIsoStrings<T>(value: T): T {\r\n if (value === null || value === undefined) return value;\r\n if (value instanceof Date) {\r\n return dateToIsoYmd(value) as unknown as T;\r\n }\r\n if (typeof value !== 'object') return value;\r\n\r\n if (Array.isArray(value)) {\r\n for (let i = 0; i < value.length; i++) {\r\n const v = value[i];\r\n if (v instanceof Date) {\r\n value[i] = dateToIsoYmd(v) as unknown as typeof v;\r\n } else if (v !== null && typeof v === 'object') {\r\n coerceDatesToIsoStrings(v);\r\n }\r\n }\r\n return value;\r\n }\r\n\r\n const obj = value as Record<string, unknown>;\r\n for (const key of Object.keys(obj)) {\r\n const v = obj[key];\r\n if (v instanceof Date) {\r\n obj[key] = dateToIsoYmd(v);\r\n } else if (v !== null && typeof v === 'object') {\r\n coerceDatesToIsoStrings(v);\r\n }\r\n }\r\n return value;\r\n}\r\n\r\nfunction dateToIsoYmd(d: Date): string {\r\n const y = d.getUTCFullYear();\r\n const m = String(d.getUTCMonth() + 1).padStart(2, '0');\r\n const day = String(d.getUTCDate()).padStart(2, '0');\r\n return `${y}-${m}-${day}`;\r\n}\r\n", "// Shared edge geometry for the static notation previews (Goals, FGCA, FGA,\r\n// Activities). All four render dependency/relationship edges as a single cubic\r\n// B\u00E9zier with horizontal control handles: each control point shares its\r\n// endpoint's Y, so the tangent is horizontal at both ends and the marker-end\r\n// arrow reads as perpendicular to the node's vertical edge.\r\n//\r\n// Pulling the path math here (rather than duplicating it inline in each\r\n// preview) makes the configurable-curvature behaviour (vkgeorgia/strategy#76)\r\n// unit-testable \u2014 the extension has no test harness.\r\n\r\n/**\r\n * Base handle length floor + span factors. The handle grows with both the\r\n * horizontal and vertical span so the curve stays visibly horizontal long\r\n * enough for the arrowhead to sit flush against the line.\r\n */\r\nexport const EDGE_MIN_HANDLE = 64;\r\nconst DX_FACTOR = 0.5;\r\nconst DY_FACTOR = 0.8;\r\n\r\n/** Multiplier applied to the base handle length. 1 = historical appearance. */\r\nexport const DEFAULT_EDGE_CURVATURE = 1;\r\n\r\n/**\r\n * Builds the SVG `d` for a horizontal-tangent cubic B\u00E9zier from (sx,sy) to\r\n * (tx,ty).\r\n *\r\n * `curvature` scales the control-handle length:\r\n * - 0 \u2192 control points collapse onto the endpoints \u21D2 a straight line.\r\n * - 1 \u2192 the historical curve (no visual change from before #76).\r\n * - >1 \u2192 progressively stronger arc.\r\n */\r\nexport function horizontalCubicEdgePath(\r\n sx: number,\r\n sy: number,\r\n tx: number,\r\n ty: number,\r\n curvature: number = DEFAULT_EDGE_CURVATURE,\r\n): string {\r\n const dx = tx - sx;\r\n const dy = ty - sy;\r\n const baseHandle = Math.max(EDGE_MIN_HANDLE, Math.abs(dx) * DX_FACTOR, Math.abs(dy) * DY_FACTOR);\r\n const handle = baseHandle * curvature;\r\n return `M${sx},${sy} C${sx + handle},${sy} ${tx - handle},${ty} ${tx},${ty}`;\r\n}\r\n", "/** Transitrix brand palette. */\r\nexport const BRAND = {\r\n petrol: '#004d67',\r\n amber: '#ffaf00',\r\n orange: '#ff4d00',\r\n} as const;\r\n\r\n/** Functional status colors. */\r\nexport const FUNCTIONAL = {\r\n success: '#1a7f5c',\r\n warning: '#c07030',\r\n error: '#b91c1c',\r\n info: '#1d6fa8',\r\n} as const;\r\n\r\n/** Fill colors for FGCA notation columns. */\r\nexport const LAYER_COLORS = {\r\n factor: { light: '#fef3c7', dark: '#292108', hc: '#f59e0b' },\r\n goal: { light: '#e0e7ff', dark: '#1e1b4b', hc: '#818cf8' },\r\n change: { light: '#dbeafe', dark: '#0c2042', hc: '#60a5fa' },\r\n activity: { light: '#d4edda', dark: '#0a2414', hc: '#4ade80' },\r\n} as const;\r\n\r\n/** Level fill colors for Goals tree nodes \u2014 8 slots, cycled by level index. */\r\nexport const LEVEL_COLORS = {\r\n light: ['#dbeafe', '#e0e7ff', '#d4edda', '#fef3c7', '#fce7f3', '#e0f2fe', '#f3e8ff', '#fef9c3'],\r\n dark: ['#0c2042', '#1e1b4b', '#0a2414', '#292108', '#2a0c1f', '#071e2e', '#1a0c33', '#2a2107'],\r\n hc: ['#60a5fa', '#818cf8', '#4ade80', '#f59e0b', '#f472b6', '#38bdf8', '#a78bfa', '#facc15'],\r\n} as const;\r\n\r\n/** Structural diagram colors (nodes, edges, text). */\r\nexport const STRUCTURAL = {\r\n nodeStroke: { light: '#94a3b8', dark: '#475569', hc: '#e2e8f0' },\r\n edgeStroke: { light: '#94a3b8', dark: '#475569', hc: '#e2e8f0' },\r\n textPrimary: { light: '#1e293b', dark: '#f1f5f9', hc: '#ffffff' },\r\n textSecondary: { light: '#64748b', dark: '#94a3b8', hc: '#cbd5e1' },\r\n headerText: { light: '#374151', dark: '#e5e7eb', hc: '#ffffff' },\r\n} as const;\r\n\r\n/**\r\n * Maturity scale fill colors \u2014 Likert 1..5, danger\u2192success.\r\n * Used by Capability Map and any future maturity-based notation.\r\n */\r\nexport const MATURITY_COLORS = {\r\n light: ['#b91c1c', '#d97706', '#ca8a04', '#65a30d', '#15803d'],\r\n dark: ['#7f1d1d', '#92400e', '#854d0e', '#3f6212', '#14532d'],\r\n hc: ['#f87171', '#fb923c', '#facc15', '#a3e635', '#4ade80'],\r\n} as const;\r\n\r\n/**\r\n * Typography hierarchy. All previews resolve text styling from these roles\r\n * \u2014 never from inline font-* attributes on individual <text> elements.\r\n *\r\n * fontFamily threads through the VS Code font setting so the preview reads\r\n * as part of the editor; size + weight encode the visual hierarchy.\r\n */\r\nexport const TYPOGRAPHY = {\r\n fontFamily: 'var(--vscode-font-family, system-ui, -apple-system, sans-serif)',\r\n sizes: {\r\n header: 13, // stage/column headers, diagram captions\r\n primary: 12, // primary node/cell labels\r\n secondary: 11, // annotations, secondary lines, meta\r\n id: 10, // compact id/code chips\r\n pill: 11, // pill labels (process-blueprint aspects, badges)\r\n caption: 11, // figcaption under the canvas\r\n },\r\n weights: {\r\n header: 700,\r\n primary: 600,\r\n secondary: 400,\r\n id: 600,\r\n pill: 500,\r\n caption: 400,\r\n },\r\n} as const;\r\n\r\n/** Adaptive shell tokens (background, text, border, status). */\r\nexport interface AdaptiveTokens {\r\n bg: string;\r\n bgSurface: string;\r\n bgElevated: string;\r\n text: string;\r\n textMuted: string;\r\n textInverse: string;\r\n border: string;\r\n divider: string;\r\n statusSuccessBg: string;\r\n statusSuccessFg: string;\r\n statusWarningBg: string;\r\n statusWarningFg: string;\r\n statusInfoBg: string;\r\n statusInfoFg: string;\r\n statusErrorBg: string;\r\n statusErrorFg: string;\r\n}\r\n\r\n/** CSS custom property names for --ts-* variables. */\r\nexport const CSS_VAR = {\r\n bg: '--ts-bg',\r\n bgSurface: '--ts-bg-surface',\r\n bgElevated: '--ts-bg-elevated',\r\n text: '--ts-text',\r\n textMuted: '--ts-text-muted',\r\n textInverse: '--ts-text-inverse',\r\n border: '--ts-border',\r\n divider: '--ts-divider',\r\n statusSuccessBg: '--ts-status-success-bg',\r\n statusSuccessFg: '--ts-status-success-fg',\r\n statusWarningBg: '--ts-status-warning-bg',\r\n statusWarningFg: '--ts-status-warning-fg',\r\n statusInfoBg: '--ts-status-info-bg',\r\n statusInfoFg: '--ts-status-info-fg',\r\n statusErrorBg: '--ts-status-error-bg',\r\n statusErrorFg: '--ts-status-error-fg',\r\n layerFactor: '--ts-layer-factor',\r\n layerGoal: '--ts-layer-goal',\r\n layerChange: '--ts-layer-change',\r\n layerActivity: '--ts-layer-activity',\r\n nodeStroke: '--ts-node-stroke',\r\n edgeStroke: '--ts-edge-stroke',\r\n textPrimary: '--ts-text-primary',\r\n textSecondary: '--ts-text-secondary',\r\n headerText: '--ts-header-text',\r\n maturity1: '--ts-maturity-1',\r\n maturity2: '--ts-maturity-2',\r\n maturity3: '--ts-maturity-3',\r\n maturity4: '--ts-maturity-4',\r\n maturity5: '--ts-maturity-5',\r\n} as const;\r\n\r\nexport function getBaseResetCss(): string {\r\n return `*,*:before,*:after{box-sizing:border-box;}html,body{margin:0;padding:0;}`;\r\n}\r\n", "import {\r\n LAYER_COLORS,\r\n LEVEL_COLORS,\r\n MATURITY_COLORS,\r\n STRUCTURAL,\r\n TYPOGRAPHY,\r\n CSS_VAR,\r\n getBaseResetCss,\r\n type AdaptiveTokens,\r\n} from './tokens.js';\r\n\r\nexport type ThemeId = 'transitrix' | 'transitrix-dark' | 'vscode-adaptive';\r\n\r\nconst TRANSITRIX_LIGHT: AdaptiveTokens = {\r\n bg: '#ffffff',\r\n bgSurface: '#f8fafc',\r\n bgElevated: '#f1f5f9',\r\n text: '#0f172a',\r\n textMuted: '#64748b',\r\n textInverse: '#ffffff',\r\n border: '#e2e8f0',\r\n divider: '#cbd5e1',\r\n statusSuccessBg: '#d1fae5',\r\n statusSuccessFg: '#065f46',\r\n statusWarningBg: '#fef9c3',\r\n statusWarningFg: '#854d0e',\r\n statusInfoBg: '#e0f2fe',\r\n statusInfoFg: '#0c4a6e',\r\n statusErrorBg: '#fee2e2',\r\n statusErrorFg: '#991b1b',\r\n};\r\n\r\nconst TRANSITRIX_DARK: AdaptiveTokens = {\r\n bg: '#0a1628',\r\n bgSurface: '#0f1f3d',\r\n bgElevated: '#162544',\r\n text: '#f1f5f9',\r\n textMuted: '#94a3b8',\r\n textInverse: '#0f172a',\r\n border: '#1e3a5f',\r\n divider: '#1a3050',\r\n statusSuccessBg: '#022c22',\r\n statusSuccessFg: '#6ee7b7',\r\n statusWarningBg: '#1e1500',\r\n statusWarningFg: '#fcd34d',\r\n statusInfoBg: '#071e2e',\r\n statusInfoFg: '#7dd3fc',\r\n statusErrorBg: '#2c0a0a',\r\n statusErrorFg: '#fca5a5',\r\n};\r\n\r\nfunction adaptiveVars(t: AdaptiveTokens): string {\r\n return [\r\n `${CSS_VAR.bg}:${t.bg}`,\r\n `${CSS_VAR.bgSurface}:${t.bgSurface}`,\r\n `${CSS_VAR.bgElevated}:${t.bgElevated}`,\r\n `${CSS_VAR.text}:${t.text}`,\r\n `${CSS_VAR.textMuted}:${t.textMuted}`,\r\n `${CSS_VAR.textInverse}:${t.textInverse}`,\r\n `${CSS_VAR.border}:${t.border}`,\r\n `${CSS_VAR.divider}:${t.divider}`,\r\n `${CSS_VAR.statusSuccessBg}:${t.statusSuccessBg}`,\r\n `${CSS_VAR.statusSuccessFg}:${t.statusSuccessFg}`,\r\n `${CSS_VAR.statusWarningBg}:${t.statusWarningBg}`,\r\n `${CSS_VAR.statusWarningFg}:${t.statusWarningFg}`,\r\n `${CSS_VAR.statusInfoBg}:${t.statusInfoBg}`,\r\n `${CSS_VAR.statusInfoFg}:${t.statusInfoFg}`,\r\n `${CSS_VAR.statusErrorBg}:${t.statusErrorBg}`,\r\n `${CSS_VAR.statusErrorFg}:${t.statusErrorFg}`,\r\n ].join(';') + ';';\r\n}\r\n\r\nfunction diagramVars(variant: 'light' | 'dark' | 'hc'): string {\r\n const lc = LAYER_COLORS;\r\n const sc = STRUCTURAL;\r\n const lv = LEVEL_COLORS[variant];\r\n const mat = MATURITY_COLORS[variant];\r\n const levelVars = lv.map((c, i) => `--ts-level-${i}:${c}`).join(';') + ';';\r\n return [\r\n `${CSS_VAR.layerFactor}:${lc.factor[variant]}`,\r\n `${CSS_VAR.layerGoal}:${lc.goal[variant]}`,\r\n `${CSS_VAR.layerChange}:${lc.change[variant]}`,\r\n `${CSS_VAR.layerActivity}:${lc.activity[variant]}`,\r\n `${CSS_VAR.nodeStroke}:${sc.nodeStroke[variant]}`,\r\n `${CSS_VAR.edgeStroke}:${sc.edgeStroke[variant]}`,\r\n `${CSS_VAR.textPrimary}:${sc.textPrimary[variant]}`,\r\n `${CSS_VAR.textSecondary}:${sc.textSecondary[variant]}`,\r\n `${CSS_VAR.headerText}:${sc.headerText[variant]}`,\r\n `${CSS_VAR.maturity1}:${mat[0]}`,\r\n `${CSS_VAR.maturity2}:${mat[1]}`,\r\n `${CSS_VAR.maturity3}:${mat[2]}`,\r\n `${CSS_VAR.maturity4}:${mat[3]}`,\r\n `${CSS_VAR.maturity5}:${mat[4]}`,\r\n ].join(';') + ';' + levelVars;\r\n}\r\n\r\n/** CSS for the webview shell (toolbar, canvas). */\r\nfunction shellCss(): string {\r\n const cv = CSS_VAR;\r\n const t = TYPOGRAPHY;\r\n // Full-height flex chain lifted from blocks-preview / activities-preview\r\n // into the shared shell (per strategy hub #35). Body is a flex column\r\n // sized to the iframe; #canvas takes the remaining height with its own\r\n // scroll region. Without this, #canvas was content-height and any\r\n // overflow-x scrollbar landed mid-panel with empty space below it \u2014 the\r\n // \"two-page\" split flagged on goals, activities, and others.\r\n //\r\n // html bg + min-height are set per-theme in generateWebviewCss (literal\r\n // hex / VS Code var) so they don't depend on `--ts-bg` resolving on html \u2014\r\n // CSS custom properties only cascade DOWN, and `--ts-bg` is defined on the\r\n // body[data-theme] selector, so html itself can't read it. Without that\r\n // explicit html bg, the iframe's underlying VS Code editor background\r\n // showed through any uncovered area below short diagrams.\r\n return `html,body{height:100%;}\r\nbody{background:var(${cv.bg});color:var(${cv.text});display:flex;flex-direction:column;}\r\n#toolbar{position:sticky;top:0;z-index:10;padding:6px 12px;border-bottom:1px solid var(${cv.border});font-family:${t.fontFamily};font-size:${t.sizes.secondary}px;color:var(${cv.textMuted});background:var(${cv.bg});flex-shrink:0;}\r\n#canvas{flex:1;min-height:0;padding:16px;overflow:auto;}\r\nsvg{display:block;}`;\r\n}\r\n\r\n/** CSS for SVG diagram classes \u2014 all consume --ts-* variables. */\r\nfunction diagramClassCss(): string {\r\n const cv = CSS_VAR;\r\n const t = TYPOGRAPHY;\r\n const levelCount = LEVEL_COLORS.light.length;\r\n const levelRules = Array.from({ length: levelCount }, (_, i) =>\r\n `.level-${i}{fill:var(--ts-level-${i});}`\r\n ).join('');\r\n // Typography: every <text> in a preview SVG resolves font-family, size and\r\n // weight from these classes instead of inline attributes. That is the\r\n // contract every notation preview honours so the catalogue reads as one\r\n // visual family.\r\n return `.diagram-node{stroke:var(${cv.nodeStroke});stroke-width:1;}\r\n.layer-factor{fill:var(${cv.layerFactor});}\r\n.layer-goal{fill:var(${cv.layerGoal});}\r\n.layer-change{fill:var(${cv.layerChange});}\r\n.layer-activity{fill:var(${cv.layerActivity});}\r\n${levelRules}\r\n.diagram-edge{stroke:var(${cv.edgeStroke});stroke-width:1.5;fill:none;}\r\n.arrow-fill{fill:var(${cv.edgeStroke});}\r\n.text-header{fill:var(${cv.headerText});font-family:${t.fontFamily};font-size:${t.sizes.header}px;font-weight:${t.weights.header};}\r\n.text-primary{fill:var(${cv.textPrimary});font-family:${t.fontFamily};font-size:${t.sizes.primary}px;font-weight:${t.weights.primary};}\r\n.text-secondary{fill:var(${cv.textSecondary});font-family:${t.fontFamily};font-size:${t.sizes.secondary}px;font-weight:${t.weights.secondary};}\r\n.text-id{fill:var(${cv.textSecondary});font-family:${t.fontFamily};font-size:${t.sizes.id}px;font-weight:${t.weights.id};}\r\n.text-pill{fill:var(${cv.textPrimary});font-family:${t.fontFamily};font-size:${t.sizes.pill}px;font-weight:${t.weights.pill};}\r\n.maturity-1{fill:var(${cv.maturity1});}\r\n.maturity-2{fill:var(${cv.maturity2});}\r\n.maturity-3{fill:var(${cv.maturity3});}\r\n.maturity-4{fill:var(${cv.maturity4});}\r\n.maturity-5{fill:var(${cv.maturity5});}`;\r\n}\r\n\r\n/**\r\n * Generates a self-contained CSS block for embedding inside a standalone SVG file.\r\n * Defines all --ts-* custom properties on :root so diagram classes resolve correctly\r\n * when the SVG is opened outside of VS Code.\r\n * vscode-adaptive falls back to the light palette (runtime VS Code variables are unavailable).\r\n */\r\nexport function generateSvgEmbedCss(themeId: ThemeId): string {\r\n const variant = themeId === 'transitrix-dark' ? 'dark' : 'light';\r\n const adaptive = themeId === 'transitrix-dark' ? TRANSITRIX_DARK : TRANSITRIX_LIGHT;\r\n return `:root{${adaptiveVars(adaptive)}${diagramVars(variant)}}${diagramClassCss()}`;\r\n}\r\n\r\n/**\r\n * Generates complete CSS for a static SVG diagram webview.\r\n *\r\n * For transitrix/transitrix-dark: sets --ts-* vars with fixed brand colors.\r\n * For vscode-adaptive: maps --ts-* vars to --vscode-* CSS vars, with\r\n * body.vscode-dark / body.vscode-high-contrast overrides for diagram colors.\r\n */\r\nexport function generateWebviewCss(themeId: ThemeId): string {\r\n const base = getBaseResetCss();\r\n const shell = shellCss();\r\n const classes = diagramClassCss();\r\n\r\n if (themeId === 'transitrix') {\r\n return `${base}\r\nhtml{background:${TRANSITRIX_LIGHT.bg};min-height:100vh;}\r\nbody[data-theme=\"transitrix\"]{${adaptiveVars(TRANSITRIX_LIGHT)}${diagramVars('light')}}\r\n${shell}\r\n${classes}`;\r\n }\r\n\r\n if (themeId === 'transitrix-dark') {\r\n return `${base}\r\nhtml{background:${TRANSITRIX_DARK.bg};min-height:100vh;}\r\nbody[data-theme=\"transitrix-dark\"]{${adaptiveVars(TRANSITRIX_DARK)}${diagramVars('dark')}}\r\n${shell}\r\n${classes}`;\r\n }\r\n\r\n // vscode-adaptive: map --ts-shell vars to --vscode-* CSS variables;\r\n // layer/level/structural colors follow the VS Code theme body class.\r\n const cv = CSS_VAR;\r\n return `${base}\r\nhtml{background:var(--vscode-editor-background,${TRANSITRIX_LIGHT.bg});min-height:100vh;}\r\nbody[data-theme=\"vscode-adaptive\"]{\r\n ${cv.bg}:var(--vscode-editor-background);\r\n ${cv.bgSurface}:var(--vscode-sideBar-background,var(--vscode-editor-background));\r\n ${cv.bgElevated}:var(--vscode-editorHoverWidget-background,var(--vscode-editor-background));\r\n ${cv.text}:var(--vscode-foreground);\r\n ${cv.textMuted}:var(--vscode-descriptionForeground);\r\n ${cv.textInverse}:var(--vscode-editor-background);\r\n ${cv.border}:var(--vscode-panel-border);\r\n ${cv.divider}:var(--vscode-panel-border);\r\n ${cv.statusSuccessBg}:${TRANSITRIX_LIGHT.statusSuccessBg};\r\n ${cv.statusSuccessFg}:${TRANSITRIX_LIGHT.statusSuccessFg};\r\n ${cv.statusWarningBg}:${TRANSITRIX_LIGHT.statusWarningBg};\r\n ${cv.statusWarningFg}:${TRANSITRIX_LIGHT.statusWarningFg};\r\n ${cv.statusInfoBg}:${TRANSITRIX_LIGHT.statusInfoBg};\r\n ${cv.statusInfoFg}:${TRANSITRIX_LIGHT.statusInfoFg};\r\n ${cv.statusErrorBg}:${TRANSITRIX_LIGHT.statusErrorBg};\r\n ${cv.statusErrorFg}:${TRANSITRIX_LIGHT.statusErrorFg};\r\n ${diagramVars('light')}\r\n}\r\nbody[data-theme=\"vscode-adaptive\"].vscode-dark{\r\n ${cv.statusSuccessBg}:${TRANSITRIX_DARK.statusSuccessBg};\r\n ${cv.statusSuccessFg}:${TRANSITRIX_DARK.statusSuccessFg};\r\n ${cv.statusWarningBg}:${TRANSITRIX_DARK.statusWarningBg};\r\n ${cv.statusWarningFg}:${TRANSITRIX_DARK.statusWarningFg};\r\n ${cv.statusInfoBg}:${TRANSITRIX_DARK.statusInfoBg};\r\n ${cv.statusInfoFg}:${TRANSITRIX_DARK.statusInfoFg};\r\n ${cv.statusErrorBg}:${TRANSITRIX_DARK.statusErrorBg};\r\n ${cv.statusErrorFg}:${TRANSITRIX_DARK.statusErrorFg};\r\n ${diagramVars('dark')}\r\n}\r\nbody[data-theme=\"vscode-adaptive\"].vscode-high-contrast{${diagramVars('hc')}}\r\n${shell}\r\n${classes}`;\r\n}\r\n", "/**\n * Small set of host-neutral helpers shared by the `render-*.ts` modules.\n *\n * The webview bundle (ADR 0001) runs inside JCEF without access to any host\n * APIs, so all string/markup utilities must stay framework-free here.\n */\n\nexport function escXml(s: string): string {\n return s\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"');\n}\n\n/** Same encoding as `escXml`; aliased so HTML-table renderers read clearly. */\nexport const escHtml = escXml;\n\n/** Pull common frontmatter for the optional preview heading. */\nexport function readDocHeader(doc: unknown): {\n title?: string;\n subtitle?: string;\n version?: string;\n date?: string;\n} {\n if (!doc || typeof doc !== 'object') return {};\n const raw = doc as Record<string, unknown>;\n const out: { title?: string; subtitle?: string; version?: string; date?: string } = {};\n if (typeof raw['title'] === 'string') out.title = raw['title'];\n if (typeof raw['description'] === 'string') out.subtitle = raw['description'];\n if (raw['version'] !== undefined) out.version = String(raw['version']);\n if (typeof raw['date'] === 'string') out.date = raw['date'];\n return out;\n}\n", "/**\n * Browser-safe SVG renderer for the Activities notation (network / PSND view).\n *\n * Step 4 of the IntelliJ epic (ADR 0001): the webview bundle must turn a\n * validated ActivityDoc into renderable SVG so JCEF can drop it into the\n * preview panel. The VS Code path lives in `extension/src/activities-preview.ts`\n * and pulls in VS Code-specific concerns (themes, title block, Gantt tab\n * switcher, save dialogs); this module is the host-neutral subset \u2014 pure\n * layout \u2192 SVG with no VS Code APIs, no `node:fs`, no `node:path`.\n *\n * Only the DEFAULT network view (Project Schedule Network Diagram) is ported.\n * The Gantt view, the CSS-only tab switcher and the interactive spacing /\n * curvature controls stay in the VS Code preview.\n */\nimport { layoutActivities } from '../activities/layout.js';\nimport { computeCpm } from '../activities/cpm.js';\nimport type {\n ActivityDoc,\n ActivitiesLayout,\n ActivitiesLayoutOptions,\n} from '../activities/types.js';\nimport { horizontalCubicEdgePath, DEFAULT_EDGE_CURVATURE } from '../edge-path.js';\nimport { generateSvgEmbedCss } from '../theme/index.js';\nimport { escXml } from './render-util.js';\n\nconst N_NODE_W = 200;\nconst N_NODE_H = 80;\nconst N_PAD = 24;\n\n// Activities-specific diagram CSS. Mirrors `ACTIVITIES_DIAGRAM_CSS` from the\n// VS Code preview \u2014 the rules that shape the network diagram itself (critical\n// path, milestones, edge colours). Embedded alongside the shared theme CSS so\n// the SVG is self-contained for the JCEF host.\nconst ACTIVITIES_DIAGRAM_CSS = `\n .act-node { fill: var(--ts-bg-surface, #f8fafc); stroke: var(--ts-border, #94a3b8); stroke-width: 1.5; }\n .critical-node { fill: #fff7ed; stroke: var(--ts-brand-orange, #ff4d00); stroke-width: 2.5; }\n .milestone-node { fill: #ecfeff; stroke: var(--ts-text-muted, #64748b); stroke-dasharray: 4 2; }\n .critical-edge { stroke: var(--ts-brand-orange, #ff4d00); stroke-width: 2; }\n .arrow-fill-critical { fill: var(--ts-brand-orange, #ff4d00); }\n`;\n\nfunction truncate(s: string, maxLen: number): string {\n return s.length > maxLen ? s.slice(0, maxLen - 1) + '\u2026' : s;\n}\n\nexport interface RenderActivitiesOptions {\n /** Optional heading rendered as a `text-header` above the diagram. */\n title?: string;\n /** Network column / row gaps. Defaults match `layoutActivities`. */\n gaps?: ActivitiesLayoutOptions;\n /** Edge curvature; 1 = default, 0 = straight, higher = stronger arc. */\n curvature?: number;\n}\n\n/**\n * Render the network (PSND) view of an already-validated ActivityDoc to a\n * self-contained SVG string.\n *\n * The caller passes a doc cast from the yaml-parsed `unknown` after\n * `validateActivities` returns valid (the activities module has no parsed\n * field, so the dispatcher does `doc as ActivityDoc`).\n *\n * Cyclic graphs degrade gracefully: `layoutActivities` / `computeCpm` defend\n * against cycles internally (Kahn's topo-order omits cyclic nodes from the\n * critical-path computation, which `computeCpm` backfills with neutral CPM\n * values), so this renderer simply renders whatever the layout returns rather\n * than short-circuiting.\n */\nexport function renderActivitiesSvg(doc: ActivityDoc, options: RenderActivitiesOptions = {}): string {\n const { title = '', gaps = {}, curvature = DEFAULT_EDGE_CURVATURE } = options;\n\n const layout: ActivitiesLayout = layoutActivities(doc, gaps);\n\n if (layout.nodes.length === 0) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"0\" height=\"0\" viewBox=\"0 0 0 0\"></svg>`;\n }\n\n const cpm = computeCpm(doc.activities ?? []);\n const titleH = title ? 24 : 0;\n const w = layout.bounds.width + N_PAD * 2;\n const h = layout.bounds.height + N_PAD * 2 + titleH;\n const ox = -layout.bounds.x + N_PAD;\n const oy = -layout.bounds.y + N_PAD + titleH;\n\n const nodeMap = new Map(layout.nodes.map((n) => [n.id, n]));\n\n // SVG paints later siblings over earlier ones. Sort non-critical first so the\n // bright orange critical-path edges land on top \u2014 a gray edge crossing an\n // orange one shouldn't bury the critical signal.\n const orderedEdges = [...layout.edges].sort(\n (a, b) => Number(Boolean(a.isCritical)) - Number(Boolean(b.isCritical)),\n );\n\n // Edge path = a single cubic B\u00E9zier with horizontal control handles (shared\n // geometry in `edge-path.js`), so the curve meets the vertical node edge at a\n // right angle and the marker-end arrow reads as perpendicular.\n const edgeSvg = orderedEdges\n .map((e) => {\n const s = nodeMap.get(e.sourceId);\n const t = nodeMap.get(e.targetId);\n if (!s || !t) return '';\n const sx = s.x + ox + s.width;\n const sy = s.y + oy + s.height / 2;\n const tx = t.x + ox;\n const ty = t.y + oy + t.height / 2;\n const cls = e.isCritical ? 'diagram-edge critical-edge' : 'diagram-edge';\n const marker = `url(#${e.isCritical ? 'arrow-crit' : 'arrow'})`;\n return `<path d=\"${horizontalCubicEdgePath(sx, sy, tx, ty, curvature)}\" class=\"${cls}\" marker-end=\"${marker}\"/>`;\n })\n .join('\\n');\n\n const nodeSvg = layout.nodes\n .map((n) => {\n const x = n.x + ox;\n const y = n.y + oy;\n const isCritical = cpm.get(n.id)?.isCritical ?? false;\n const isMilestone = (n.data.duration ?? -1) === 0;\n const cls = `diagram-node act-node ${isCritical ? 'critical-node' : ''} ${isMilestone ? 'milestone-node' : ''}`.trim();\n const idLabel = escXml(n.id);\n const nameLabel = escXml(truncate(n.data.name, 24));\n const durLabel = n.data.duration !== undefined ? `${n.data.duration}d` : '\u2014';\n return [\n `<rect class=\"${cls}\" x=\"${x}\" y=\"${y}\" width=\"${N_NODE_W}\" height=\"${N_NODE_H}\" rx=\"6\"/>`,\n `<text class=\"text-id\" x=\"${x + 8}\" y=\"${y + 18}\">${idLabel}</text>`,\n `<text class=\"text-primary\" x=\"${x + N_NODE_W / 2}\" y=\"${y + N_NODE_H / 2}\" text-anchor=\"middle\" dominant-baseline=\"central\">${nameLabel}</text>`,\n `<text class=\"text-secondary\" x=\"${x + N_NODE_W - 8}\" y=\"${y + N_NODE_H - 10}\" text-anchor=\"end\">${escXml(durLabel)}</text>`,\n ].join('\\n');\n })\n .join('\\n');\n\n const titleSvg = title\n ? `<text class=\"text-header\" x=\"${N_PAD}\" y=\"${N_PAD - 6}\">${escXml(title)}</text>`\n : '';\n\n // Embed the shared theme CSS plus the activities-specific diagram CSS inside\n // the SVG so the rendered output is self-contained \u2014 the JCEF host page only\n // needs to drop the SVG into the DOM and styling resolves without any\n // cooperation from the host stylesheet. Matches what the VS Code path\n // produces via `prepareSvgForExport`.\n const embedCss = generateSvgEmbedCss('transitrix') + ACTIVITIES_DIAGRAM_CSS;\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w}\" height=\"${h}\" viewBox=\"0 0 ${w} ${h}\">\n<style>${embedCss}</style>\n<defs>\n <marker id=\"arrow\" markerWidth=\"8\" markerHeight=\"8\" refX=\"8\" refY=\"3\" orient=\"auto\">\n <path d=\"M0,0 L0,6 L8,3 z\" class=\"arrow-fill\"/>\n </marker>\n <marker id=\"arrow-crit\" markerWidth=\"8\" markerHeight=\"8\" refX=\"8\" refY=\"3\" orient=\"auto\">\n <path d=\"M0,0 L0,6 L8,3 z\" class=\"arrow-fill-critical\"/>\n </marker>\n</defs>\n${titleSvg}\n${nodeSvg}\n${edgeSvg}\n</svg>`;\n}\n", "/**\n * Host-neutral SVG renderer for the Activity Card notation.\n *\n * Step 4 of the IntelliJ epic (ADR 0001): the webview bundle must turn a\n * validated Activity Card document into renderable SVG so JCEF can drop it into\n * the preview panel. The VS Code path lives in\n * `extension/src/activity-card-preview.ts` and pulls in VS Code-specific\n * concerns (themes, title block, save dialogs, sibling-document discovery on\n * the filesystem); this module is the host-neutral subset \u2014 pure layout \u2192 SVG\n * with no VS Code APIs, no `node:fs`, no `node:path`.\n *\n * CROSS-DOCUMENT RESOLUTION CAVEAT\n * The Activity Card is the only MULTI-DOCUMENT Studio notation: the card YAML\n * names a project Activity, and the project's name, dates, motivation chain\n * (Factors \u2192 Goals \u2192 Changes) and child activities are pulled BY REFERENCE from\n * sibling `*.activities.*` / `*.fgca.*` documents in the same directory (see\n * `../activity-card/resolver.ts`). That resolution requires reading those\n * sibling files from disk, which is NOT available inside the JCEF host. We\n * therefore resolve from the single in-memory card document ONLY: we synthesise\n * a minimal `ResolvedActivityCard` whose project carries just the referenced\n * project id (no resolved name/dates), whose milestones come straight from the\n * card's own `milestones[]`, and whose motivation chain + child activities are\n * empty (those cannot resolve without the siblings). The SVG layout is shared\n * with the VS Code path via `layoutActivityCard`, so a single-document card\n * still renders its title, dates band and milestone timeline.\n */\nimport { layoutActivityCard, ARCHIMATE_CLASS } from '../activity-card/layout.js';\nimport type {\n ActivityCardDoc,\n ActivityCardLayout,\n ResolvedActivityCard,\n ResolvedMilestone,\n} from '../activity-card/types.js';\nimport { generateSvgEmbedCss } from '../theme/index.js';\nimport { escXml } from './render-util.js';\n\nconst PAD = 24;\n\nconst EMPTY_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"0\" height=\"0\" viewBox=\"0 0 0 0\"></svg>`;\n\nexport interface RenderActivityCardOptions {\n title?: string;\n}\n\nfunction truncate(text: string, maxChars: number): string {\n if (text.length <= maxChars) return text;\n return text.slice(0, Math.max(0, maxChars - 1)) + '\u2026';\n}\n\n/**\n * Build a single-document resolution of the card: everything that can be read\n * straight off the card YAML, with the cross-document fields left empty. This\n * mirrors what `resolveActivityCard` produces, minus the parts that need the\n * sibling `*.activities.*` / `*.fgca.*` documents (project name/dates,\n * motivation chain, child activities).\n */\nfunction resolveSingleDoc(doc: ActivityCardDoc): ResolvedActivityCard {\n const card = doc.activity_card;\n const rawMilestones = Array.isArray(card?.milestones) ? card.milestones : [];\n\n const milestones: ResolvedMilestone[] = rawMilestones\n .filter((m): m is NonNullable<typeof m> => !!m && typeof m === 'object')\n .map((m) => ({\n id: m.id,\n name: m.name,\n date: m.date,\n description: m.description,\n deliversChanges: Array.isArray(m.delivers_changes) ? m.delivers_changes : [],\n }))\n .sort((a, b) => (a.date < b.date ? -1 : a.date > b.date ? 1 : 0));\n\n return {\n cardId: card?.id ?? '',\n cardDescription: card?.description,\n // No sibling docs in the host-neutral path: the project resolves to its id\n // only. The layout falls back to '\u2014' for the unknown date fields.\n project: { id: card?.project ?? '', name: card?.project ?? '' },\n milestones,\n motivation: { factors: [], goals: [], changes: [] },\n childActivities: [],\n };\n}\n\nfunction buildBody(layout: ActivityCardLayout, ox: number, oy: number): string {\n const parts: string[] = [];\n\n // Outer card.\n parts.push(\n `<rect class=\"diagram-node level-0\" x=\"${ox}\" y=\"${oy}\" width=\"${layout.bounds.width}\" height=\"${layout.bounds.height}\" rx=\"8\"/>`,\n );\n\n // Title (project name / id).\n parts.push(\n `<text class=\"text-header\" x=\"${layout.title.x + ox}\" y=\"${layout.title.y + oy}\" dominant-baseline=\"central\" font-size=\"18\">${escXml(truncate(layout.title.name, 70))}</text>`,\n );\n\n // Dates band.\n for (const d of layout.dateFields) {\n parts.push(\n `<rect class=\"diagram-node level-2\" x=\"${d.x + ox}\" y=\"${d.y + oy}\" width=\"${d.width}\" height=\"${d.height}\" rx=\"6\"/>`,\n );\n parts.push(\n `<text class=\"text-secondary\" x=\"${d.x + ox + 12}\" y=\"${d.y + oy + 18}\" dominant-baseline=\"central\">${escXml(d.label)}</text>`,\n );\n parts.push(\n `<text class=\"text-primary\" x=\"${d.x + ox + 12}\" y=\"${d.y + oy + 40}\" dominant-baseline=\"central\">${escXml(d.value)}</text>`,\n );\n }\n\n // Section headers.\n for (const s of layout.sectionHeaders) {\n parts.push(\n `<text class=\"text-header\" x=\"${s.x + ox}\" y=\"${s.y + oy + s.height / 2}\" dominant-baseline=\"central\">${escXml(s.label)}</text>`,\n );\n }\n\n // Milestones.\n for (const m of layout.milestones) {\n parts.push(\n `<rect class=\"diagram-node level-3\" x=\"${m.x + ox}\" y=\"${m.y + oy}\" width=\"${m.width}\" height=\"${m.height}\" rx=\"6\"/>`,\n );\n parts.push(\n `<text class=\"text-secondary\" x=\"${m.x + ox + 10}\" y=\"${m.y + oy + 16}\" dominant-baseline=\"central\">${escXml(m.date)}</text>`,\n );\n parts.push(\n `<text class=\"text-primary\" x=\"${m.x + ox + 10}\" y=\"${m.y + oy + 36}\" dominant-baseline=\"central\">${escXml(truncate(m.name, 22))}</text>`,\n );\n parts.push(\n `<text class=\"text-secondary\" x=\"${m.x + ox + 10}\" y=\"${m.y + oy + 52}\" dominant-baseline=\"central\" font-style=\"italic\">(${escXml(m.archimateClass)})</text>`,\n );\n }\n\n // Motivation chain \u2014 edges first (under nodes).\n const nodeById = new Map<string, { x: number; y: number; width: number; height: number }>();\n for (const col of [\n layout.chainColumns.factors,\n layout.chainColumns.goals,\n layout.chainColumns.changes,\n ]) {\n for (const n of col) nodeById.set(n.id, n);\n }\n for (const e of layout.chainEdges) {\n const s = nodeById.get(e.sourceId);\n const t = nodeById.get(e.targetId);\n if (!s || !t) continue;\n const x1 = s.x + s.width + ox;\n const y1 = s.y + s.height / 2 + oy;\n const x2 = t.x + ox;\n const y2 = t.y + t.height / 2 + oy;\n const mx = (x1 + x2) / 2;\n parts.push(\n `<path class=\"diagram-edge\" d=\"M${x1},${y1} C${mx},${y1} ${mx},${y2} ${x2},${y2}\" fill=\"none\" marker-end=\"url(#ac-arrow)\"/>`,\n );\n }\n const chainLevels: Array<[typeof layout.chainColumns.factors, number]> = [\n [layout.chainColumns.factors, 4],\n [layout.chainColumns.goals, 5],\n [layout.chainColumns.changes, 6],\n ];\n for (const [col, level] of chainLevels) {\n for (const n of col) {\n parts.push(\n `<rect class=\"diagram-node level-${level}\" x=\"${n.x + ox}\" y=\"${n.y + oy}\" width=\"${n.width}\" height=\"${n.height}\" rx=\"6\"/>`,\n );\n parts.push(\n `<text class=\"text-pill\" x=\"${n.x + ox + n.width / 2}\" y=\"${n.y + oy + n.height / 2}\" text-anchor=\"middle\" dominant-baseline=\"central\">${escXml(truncate(n.name, Math.floor(n.width / 7)))}</text>`,\n );\n }\n }\n\n // Child activities.\n for (const a of layout.childActivities) {\n parts.push(\n `<rect class=\"diagram-node level-1\" x=\"${a.x + ox}\" y=\"${a.y + oy}\" width=\"${a.width}\" height=\"${a.height}\" rx=\"6\"/>`,\n );\n parts.push(\n `<text class=\"text-primary\" x=\"${a.x + ox + 12}\" y=\"${a.y + oy + a.height / 2}\" dominant-baseline=\"central\">${escXml(truncate(a.name, 48))} <tspan class=\"text-secondary\" font-style=\"italic\">(${escXml(a.archimateClass)})</tspan></text>`,\n );\n if (a.meta) {\n parts.push(\n `<text class=\"text-secondary\" x=\"${a.x + a.width + ox - 12}\" y=\"${a.y + oy + a.height / 2}\" text-anchor=\"end\" dominant-baseline=\"central\">${escXml(truncate(a.meta, 40))}</text>`,\n );\n }\n }\n\n return parts.join('\\n');\n}\n\nexport function renderActivityCardSvg(\n doc: ActivityCardDoc,\n options: RenderActivityCardOptions = {},\n): string {\n // `ARCHIMATE_CLASS` is referenced so the host-neutral module pins the same\n // \u00A75.1 class convention the layout applies; keeps the import meaningful.\n void ARCHIMATE_CLASS;\n\n const { title = '' } = options;\n\n const resolved = resolveSingleDoc(doc);\n const layout = layoutActivityCard(resolved);\n\n if (layout.bounds.width <= 0 || layout.bounds.height <= 0) {\n return EMPTY_SVG;\n }\n\n const titleH = title ? 28 : 0;\n const w = layout.bounds.width + PAD * 2;\n const h = layout.bounds.height + PAD * 2 + titleH;\n const ox = PAD;\n const oy = PAD + titleH;\n\n const body = buildBody(layout, ox, oy);\n\n const titleSvg = title\n ? `<text class=\"text-header\" x=\"${PAD}\" y=\"${PAD + 14}\">${escXml(`Activity Card \u2014 ${title}`)}</text>`\n : '';\n\n // Embed the shared theme CSS inside the SVG so the rendered output is\n // self-contained \u2014 the JCEF host page only needs to drop the SVG into the\n // DOM and styling resolves without any cooperation from the host stylesheet.\n const embedCss = generateSvgEmbedCss('transitrix');\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w}\" height=\"${h}\" viewBox=\"0 0 ${w} ${h}\">\n<style>${embedCss}</style>\n<defs>\n <marker id=\"ac-arrow\" markerWidth=\"8\" markerHeight=\"8\" refX=\"8\" refY=\"3\" orient=\"auto\">\n <path d=\"M0,0 L0,6 L8,3 z\" class=\"arrow-fill\"/>\n </marker>\n</defs>\n${titleSvg}\n${body}\n</svg>`;\n}\n", "/**\n * Host-neutral renderer for the Applications catalogue notation.\n *\n * Mirrors the VS Code preview (`extension/src/applications-preview.ts`) but\n * strips the VS Code-specific concerns (theme lookup, command URIs, fix-prompt\n * scaffolding). The output is a self-contained HTML fragment \u2014 a `<section>`\n * carrying its own `<style>` block \u2014 that the JCEF host can drop into\n * `#transitrix-root` exactly the way it drops the goals SVG (Step 3 contract).\n */\nimport type {\n Application,\n ApplicationIntegration,\n ApplicationsCatalogueHeader,\n} from '../applications/types.js';\nimport { escHtml } from './render-util.js';\n\nconst TYPE_LABEL: Record<string, string> = {\n application: 'Application',\n integration: 'Integration',\n platform: 'Platform',\n data_store: 'Data Store',\n};\n\nconst STATUS_BADGE: Record<string, string> = {\n Active: 'badge-active',\n Draft: 'badge-draft',\n Deprecated: 'badge-deprecated',\n Decommissioning: 'badge-decommissioning',\n};\n\nfunction maturityDots(m: number | undefined): string {\n if (m === undefined) return '<span class=\"cell-empty\">\u2014</span>';\n const filled = '\u25CF'.repeat(Math.max(0, Math.min(5, m)));\n const empty = '\u25CB'.repeat(5 - Math.max(0, Math.min(5, m)));\n return `<span class=\"maturity-dots\">${filled}${empty}</span>`;\n}\n\nfunction disclosureList(label: string, items: string[] | undefined): string {\n if (!items || items.length === 0) return '';\n const lis = items.map((i) => `<li>${escHtml(i)}</li>`).join('');\n return `<details><summary>${escHtml(label)} (${items.length})</summary><ul>${lis}</ul></details>`;\n}\n\nfunction renderIntegrations(integrations: ApplicationIntegration[] | undefined): string {\n if (!integrations || integrations.length === 0) return '';\n const items = integrations\n .map((intg) => {\n const parts = [\n intg.target ? escHtml(intg.target) : '?',\n intg.direction ? `<span class=\"intg-dir\">${escHtml(intg.direction)}</span>` : '',\n intg.protocol ? `<span class=\"intg-proto\">${escHtml(intg.protocol)}</span>` : '',\n ]\n .filter(Boolean)\n .join(' ');\n const desc = intg.description ? `<span class=\"intg-desc\">${escHtml(intg.description)}</span>` : '';\n return `<li>${parts}${desc ? ' \u2014 ' + desc : ''}</li>`;\n })\n .join('');\n return `<details><summary>Integrations (${integrations.length})</summary><ul>${items}</ul></details>`;\n}\n\nfunction renderRow(a: Application): string {\n const extras = [\n renderIntegrations(a.integrations),\n disclosureList('Capabilities', a.capabilities),\n disclosureList('Products', a.products),\n ]\n .filter(Boolean)\n .join('');\n const vendorCell = a.vendor\n ? `<span class=\"${a.vendor === 'Internal' ? 'vendor-internal' : 'vendor-external'}\">${escHtml(a.vendor)}</span>`\n : '<span class=\"cell-empty\">\u2014</span>';\n return `<tr>\n <td class=\"col-name\">\n <div class=\"catalogue-name\">${escHtml(a.name)}</div>\n <div class=\"catalogue-id\">${escHtml(a.app_id)}</div>\n ${a.description ? `<div class=\"catalogue-desc\">${escHtml(a.description)}</div>` : ''}\n ${extras}\n </td>\n <td class=\"col-type\"><span class=\"type-tag\">${escHtml(TYPE_LABEL[a.type] ?? a.type)}</span></td>\n <td class=\"col-status\"><span class=\"tx-badge ${escHtml(STATUS_BADGE[a.status] ?? '')}\">${escHtml(a.status)}</span></td>\n <td class=\"col-maturity\">${maturityDots(a.maturity)}</td>\n <td class=\"col-domain\">${a.domain ? escHtml(a.domain) : '<span class=\"cell-empty\">\u2014</span>'}</td>\n <td class=\"col-vendor\">${vendorCell}</td>\n <td class=\"col-owner\">${a.owner_role ? escHtml(a.owner_role) : '<span class=\"cell-empty\">\u2014</span>'}</td>\n</tr>`;\n}\n\nexport function renderApplicationsHtml(catalogue: ApplicationsCatalogueHeader): string {\n const rows = catalogue.applications.map(renderRow).join('\\n');\n const emptyRow = catalogue.applications.length === 0\n ? `<tr><td colspan=\"7\" class=\"empty-catalogue\">No applications defined.</td></tr>`\n : '';\n const header = `<header class=\"catalogue-header\">\n <div class=\"catalogue-title\">${escHtml(catalogue.name)}</div>\n <div class=\"catalogue-meta\">\n <span class=\"catalogue-id-tag\">${escHtml(catalogue.id)}</span>\n <span class=\"catalogue-updated\">Updated ${escHtml(catalogue.updated_at)}</span>\n ${catalogue.version ? `<span class=\"catalogue-version\">v${escHtml(catalogue.version)}</span>` : ''}\n </div>\n ${catalogue.description ? `<div class=\"catalogue-subtitle\">${escHtml(catalogue.description)}</div>` : ''}\n </header>`;\n return `<section class=\"tx-catalogue tx-applications\">\n${header}\n<table class=\"catalogue-table\">\n <thead>\n <tr>\n <th>Name / ID</th>\n <th>Type</th>\n <th>Status</th>\n <th>Maturity</th>\n <th>Domain</th>\n <th>Vendor</th>\n <th>Owner Role</th>\n </tr>\n </thead>\n <tbody>\n ${rows}\n ${emptyRow}\n </tbody>\n</table>\n</section>`;\n}\n", "/**\n * Browser-safe SVG renderer for the Nested Blocks notation.\n *\n * Step 4 of the IntelliJ epic (ADR 0001): the webview bundle must turn a\n * validated BlocksFile into renderable SVG so JCEF can drop it into the\n * preview panel. The VS Code path lives in `extension/src/blocks-preview.ts`\n * and pulls in VS Code-specific concerns (themes, title block, save dialogs);\n * this module is the host-neutral subset \u2014 pure `layoutNestedBlocks` \u2192 SVG\n * with no VS Code APIs, no `node:*`, and no svgbob subprocess.\n *\n * Follows the same shape as `render-goals.ts`: a self-contained `<svg>` with\n * the shared theme CSS embedded in a `<style>` element and a simple optional\n * title `<text>`.\n */\nimport { layoutNestedBlocks } from '../blocks/layout.js';\nimport type { BlocksFile, BlocksLayout, LaidOutBlock } from '../blocks/types.js';\nimport { generateSvgEmbedCss } from '../theme/index.js';\nimport { escXml } from './render-util.js';\n\nconst PAD = 24;\n\nexport interface RenderBlocksOptions {\n title?: string;\n}\n\n/**\n * Pick the diagram-frame level class for a block at the given depth.\n *\n * `level-0` is the lightest fill in the brand colour ramp; deeper levels are\n * progressively darker. The methodology spec mandates \"outermost lightest\"\n * (08-blocks.md \u00A77), so depth 1 (top-level) maps to `level-0`. The theme CSS\n * defines `level-0` \u2026 `level-6`; deeper blocks reuse `level-6`.\n */\nfunction levelClassForDepth(depth: number): string {\n const idx = Math.min(Math.max(depth - 1, 0), 6);\n return `level-${idx}`;\n}\n\nfunction truncate(text: string, maxChars: number): string {\n if (text.length <= maxChars) return text;\n return text.slice(0, Math.max(0, maxChars - 1)) + '\u2026';\n}\n\nfunction emitBlockSvg(b: LaidOutBlock, ox: number, oy: number, parts: string[]): void {\n const cls = levelClassForDepth(b.depth);\n parts.push(\n `<rect class=\"diagram-node ${cls}\" x=\"${b.x + ox}\" y=\"${b.y + oy}\" width=\"${b.width}\" height=\"${b.height}\" rx=\"6\"/>`,\n );\n\n // Header label, centred horizontally within the block's header strip.\n const headerY = b.y + oy + b.headerHeight / 2;\n const maxChars = Math.max(4, Math.floor(b.width / 8));\n parts.push(\n `<text class=\"text-header\" x=\"${b.x + ox + b.width / 2}\" y=\"${headerY}\" text-anchor=\"middle\" dominant-baseline=\"central\">${escXml(truncate(b.name, maxChars))}</text>`,\n );\n\n for (const c of b.children) emitBlockSvg(c, ox, oy, parts);\n}\n\nexport function renderBlocksSvg(doc: BlocksFile, options: RenderBlocksOptions = {}): string {\n const { title = '' } = options;\n\n const layout: BlocksLayout = layoutNestedBlocks(doc);\n\n if (layout.blocks.length === 0) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"0\" height=\"0\" viewBox=\"0 0 0 0\"></svg>`;\n }\n\n const w = layout.bounds.width + PAD * 2;\n const h = layout.bounds.height + PAD * 2;\n const ox = -layout.bounds.x + PAD;\n const oy = -layout.bounds.y + PAD;\n\n const parts: string[] = [];\n for (const top of layout.blocks) emitBlockSvg(top, ox, oy, parts);\n\n const titleSvg = title\n ? `<text class=\"text-header\" x=\"${PAD}\" y=\"${PAD - 6}\">${escXml(`Nested Blocks \u2014 ${title}`)}</text>`\n : '';\n\n // Embed the shared theme CSS inside the SVG so the rendered output is\n // self-contained \u2014 the JCEF host page only needs to drop the SVG into the\n // DOM and styling resolves without any cooperation from the host stylesheet.\n const embedCss = generateSvgEmbedCss('transitrix');\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w}\" height=\"${h}\" viewBox=\"0 0 ${w} ${h}\">\n<style>${embedCss}</style>\n${titleSvg}\n${parts.join('\\n')}\n</svg>`;\n}\n", "/**\n * Host-neutral renderer for the Capability Map notation.\n * Mirrors `extension/src/capability-map-preview.ts`; emits a self-contained\n * HTML fragment for the JCEF host (Step 4 of ADR 0001).\n */\nimport type { CapabilityMapHeader, CapabilityNode } from '../capability-map/types.js';\nimport { escHtml } from './render-util.js';\n\nconst MATURITY_LABEL: Record<number, string> = {\n 1: 'Initial',\n 2: 'Managed',\n 3: 'Defined',\n 4: 'Quantitatively Managed',\n 5: 'Optimising',\n};\n\nfunction maturityBadge(level: number, kind: 'current' | 'target'): string {\n const safe = Math.max(1, Math.min(5, level | 0));\n const label = kind === 'current' ? 'Current' : 'Target';\n return `<span class=\"maturity-pill maturity-${safe}\" title=\"${label}: Level ${safe} \u2014 ${escHtml(MATURITY_LABEL[safe] ?? '')}\">L${safe}</span>`;\n}\n\nfunction isHorizontal(id: string): boolean {\n return id.startsWith('H');\n}\n\nfunction renderCapabilityCard(node: CapabilityNode, depth: number): string {\n const cls = ['capability-card', `depth-${Math.min(depth, 3)}`];\n if (node.type) cls.push(`cap-type-${node.type}`);\n if (isHorizontal(node.id)) cls.push('cap-horizontal');\n\n const current = maturityBadge(node.current_maturity, 'current');\n const target = node.target_maturity !== undefined ? maturityBadge(node.target_maturity, 'target') : '';\n const arrow = target ? '<span class=\"maturity-arrow\">\u2192</span>' : '';\n\n const meta: string[] = [];\n if (node.type) meta.push(`<span class=\"cap-tag cap-tag-${escHtml(node.type)}\">${escHtml(node.type)}</span>`);\n if (node.owner_role) meta.push(`<span class=\"cap-meta\">Owner: ${escHtml(node.owner_role)}</span>`);\n if (node.business_process) meta.push(`<span class=\"cap-meta\">Process: ${escHtml(node.business_process)}</span>`);\n if (node.target_date) meta.push(`<span class=\"cap-meta\">By ${escHtml(node.target_date)}</span>`);\n\n const apps = node.applications && node.applications.length > 0\n ? `<div class=\"cap-apps\"><span class=\"cap-apps-label\">Apps:</span> ${node.applications.map((a) => `<code>${escHtml(a)}</code>`).join(' ')}</div>`\n : '';\n\n const childBlock = node.children && node.children.length > 0\n ? `<div class=\"cap-children\">${node.children.map((c) => renderCapabilityCard(c, depth + 1)).join('')}</div>`\n : '';\n\n return `<div class=\"${cls.join(' ')}\">\n <div class=\"capability-head\">\n <div class=\"capability-maturity\">${current}${arrow}${target}</div>\n <div class=\"capability-titles\">\n <div class=\"capability-name\">${escHtml(node.name)}</div>\n <div class=\"capability-id\">${escHtml(node.id)}</div>\n </div>\n </div>\n ${meta.length > 0 ? `<div class=\"cap-meta-row\">${meta.join('')}</div>` : ''}\n ${node.description ? `<div class=\"cap-desc\">${escHtml(node.description)}</div>` : ''}\n ${apps}\n ${childBlock}\n</div>`;\n}\n\nexport function renderCapabilityMapHtml(map: CapabilityMapHeader): string {\n const header = `<header class=\"catalogue-header\">\n <div class=\"catalogue-title\">${escHtml(map.name)}</div>\n <div class=\"catalogue-meta\">\n <span class=\"catalogue-id-tag\">${escHtml(map.id)}</span>\n <span class=\"catalogue-updated\">Assessed ${escHtml(map.assessment_date)}</span>\n </div>\n ${map.description ? `<div class=\"catalogue-subtitle\">${escHtml(map.description)}</div>` : ''}\n </header>`;\n if (map.capabilities.length === 0) {\n return `<section class=\"tx-catalogue tx-capability-map\">\n${header}\n<div class=\"empty-map\">No capabilities defined.</div>\n</section>`;\n }\n const verticals = map.capabilities.filter((c) => !isHorizontal(c.id));\n const horizontals = map.capabilities.filter((c) => isHorizontal(c.id));\n const vBlock = verticals.length > 0\n ? `<section class=\"cap-axis cap-axis-v\">\n <h2 class=\"cap-axis-title\">Vertical capabilities (domains)</h2>\n <div class=\"cap-axis-list\">${verticals.map((c) => renderCapabilityCard(c, 0)).join('')}</div>\n</section>`\n : '';\n const hBlock = horizontals.length > 0\n ? `<section class=\"cap-axis cap-axis-h\">\n <h2 class=\"cap-axis-title\">Horizontal capabilities (cross-cutting)</h2>\n <div class=\"cap-axis-list\">${horizontals.map((c) => renderCapabilityCard(c, 0)).join('')}</div>\n</section>`\n : '';\n return `<section class=\"tx-catalogue tx-capability-map\">\n${header}\n${vBlock}${hBlock}\n</section>`;\n}\n", "// Pure column-layout geometry for the static FGCA / FGA previews.\r\n//\r\n// This is the layout the Studio extension's `fgca-preview.ts` renders to SVG\r\n// (NOT the ReactFlow `buildFGCALayout` in `./layout.ts`, which targets the\r\n// interactive web UI). It lives here \u2014 rather than inline in the extension \u2014\r\n// so the gap geometry is unit-testable: the extension has no test harness.\r\n//\r\n// No React, no DOM, no vscode. Safe to call in Node.js or a test environment.\r\n\r\nimport type { Scope } from '../scope.js';\r\n\r\nexport type FGCAPreviewColumn = 'factor' | 'goal' | 'change' | 'activity';\r\n\r\nexport interface FGCAPreviewFactor {\r\n id: number | string;\r\n name: string;\r\n}\r\nexport interface FGCAPreviewGoal {\r\n id: number | string;\r\n name: string;\r\n level?: number;\r\n factor?: Array<{ id: number | string }>;\r\n}\r\nexport interface FGCAPreviewChange {\r\n id: number | string;\r\n name: string;\r\n goal_id: number | string;\r\n activity_ids: Array<number | string>;\r\n}\r\nexport interface FGCAPreviewActivity {\r\n id: number | string;\r\n name: string;\r\n goal_id?: number | string | null;\r\n}\r\n\r\n/** Structural input the preview layout needs \u2014 a subset of the parsed FGCA/FGA doc. */\r\nexport interface FGCAPreviewDoc {\r\n factors: FGCAPreviewFactor[];\r\n goals: FGCAPreviewGoal[];\r\n changes?: FGCAPreviewChange[];\r\n activities: FGCAPreviewActivity[];\r\n}\r\n\r\nexport interface FGCAPreviewLayoutOptions {\r\n /** FGA hides the Changes column and links Goal \u2192 Activity directly. */\r\n hideChanges?: boolean;\r\n /** Horizontal gap (px) between columns. Default matches the historical hardcoded value. */\r\n colGap?: number;\r\n /** Vertical gap (px) between stacked nodes within a column. Default matches the historical hardcoded value. */\r\n rowGap?: number;\r\n /** Trim to a level cap or a single root goal (vkgeorgia/strategy#77). Defaults to 'all'. */\r\n scope?: Scope;\r\n}\r\n\r\n/**\r\n * Trims an FGCA/FGA doc to a scope (vkgeorgia/strategy#77).\r\n *\r\n * FGCA/FGA goals are flat (no parent_id), so:\r\n * - 'level' \u2192 goals with `(level ?? 0) <= maxLevel`.\r\n * - 'root' \u2192 the single goal whose id matches `rootGoalId` (empty when absent).\r\n *\r\n * Factors, changes and activities are then kept only when they touch a visible\r\n * goal: a factor referenced by a visible goal, a change whose `goal_id` is\r\n * visible, an activity bound to a visible goal directly or via a visible\r\n * change. Pure and exported so an access-control layer can reuse it.\r\n */\r\nexport function selectScopedFGCA(doc: FGCAPreviewDoc, scope: Scope): FGCAPreviewDoc {\r\n if (scope.mode === 'all') return doc;\r\n\r\n const visibleGoals =\r\n scope.mode === 'level'\r\n ? doc.goals.filter(g => (g.level ?? 0) <= scope.maxLevel)\r\n : doc.goals.filter(g => String(g.id) === scope.rootGoalId);\r\n\r\n const visibleGoalIds = new Set(visibleGoals.map(g => g.id));\r\n\r\n const changes = doc.changes ?? [];\r\n const visibleChanges = changes.filter(c => visibleGoalIds.has(c.goal_id));\r\n const activityIdsViaChange = new Set(visibleChanges.flatMap(c => c.activity_ids));\r\n\r\n const visibleActivities = doc.activities.filter(\r\n a => (a.goal_id != null && visibleGoalIds.has(a.goal_id)) || activityIdsViaChange.has(a.id),\r\n );\r\n\r\n const factorIds = new Set(visibleGoals.flatMap(g => (g.factor ?? []).map(f => f.id)));\r\n const visibleFactors = doc.factors.filter(f => factorIds.has(f.id));\r\n\r\n return {\r\n factors: visibleFactors,\r\n goals: visibleGoals,\r\n changes: doc.changes === undefined ? undefined : visibleChanges,\r\n activities: visibleActivities,\r\n };\r\n}\r\n\r\nexport interface FGCAPreviewNode {\r\n id: string;\r\n x: number;\r\n y: number;\r\n label: string;\r\n col: FGCAPreviewColumn;\r\n}\r\nexport interface FGCAPreviewEdge {\r\n sx: number;\r\n sy: number;\r\n tx: number;\r\n ty: number;\r\n}\r\n/** Per-column header anchor \u2014 lets the renderer draw column headers without recomputing the stride. */\r\nexport interface FGCAPreviewColumnPos {\r\n col: FGCAPreviewColumn;\r\n x: number;\r\n}\r\nexport interface FGCAPreviewLayout {\r\n nodes: FGCAPreviewNode[];\r\n edges: FGCAPreviewEdge[];\r\n columns: FGCAPreviewColumnPos[];\r\n width: number;\r\n height: number;\r\n}\r\n\r\n// Fixed node + frame geometry. Only the inter-node gaps are user-configurable\r\n// (vkgeorgia/strategy#75); node size and padding stay constant.\r\nexport const FGCA_NODE_W = 220;\r\nexport const FGCA_NODE_H = 72;\r\nexport const FGCA_HEADER_H = 32;\r\nexport const FGCA_PAD = 20;\r\nexport const FGCA_DEFAULT_COL_GAP = 160;\r\nexport const FGCA_DEFAULT_ROW_GAP = 20;\r\n\r\nexport function layoutFGCAPreview(\r\n inputDoc: FGCAPreviewDoc,\r\n options: FGCAPreviewLayoutOptions = {},\r\n): FGCAPreviewLayout {\r\n const {\r\n hideChanges = false,\r\n colGap = FGCA_DEFAULT_COL_GAP,\r\n rowGap = FGCA_DEFAULT_ROW_GAP,\r\n scope = { mode: 'all' },\r\n } = options;\r\n\r\n // Trim to scope first; everything below lays out the visible subset only.\r\n const doc = selectScopedFGCA(inputDoc, scope);\r\n\r\n const colStride = FGCA_NODE_W + colGap;\r\n const cols: FGCAPreviewColumn[] = hideChanges\r\n ? ['factor', 'goal', 'activity']\r\n : ['factor', 'goal', 'change', 'activity'];\r\n const changes = doc.changes ?? [];\r\n const colItems: Record<FGCAPreviewColumn, Array<{ id: string; label: string }>> = {\r\n factor: doc.factors.map(f => ({ id: `factor_${f.id}`, label: f.name })),\r\n goal: doc.goals.map(g => ({ id: `goal_${g.id}`, label: g.name })),\r\n change: changes.map(c => ({ id: `change_${c.id}`, label: c.name })),\r\n activity: doc.activities.map(a => ({ id: `activity_${a.id}`, label: a.name })),\r\n };\r\n\r\n const nodeMap = new Map<string, FGCAPreviewNode>();\r\n const nodes: FGCAPreviewNode[] = [];\r\n const columns: FGCAPreviewColumnPos[] = [];\r\n\r\n for (let ci = 0; ci < cols.length; ci++) {\r\n const col = cols[ci];\r\n const x = FGCA_PAD + ci * colStride;\r\n columns.push({ col, x });\r\n let y = FGCA_PAD + FGCA_HEADER_H + rowGap;\r\n for (const item of colItems[col]) {\r\n const node: FGCAPreviewNode = { id: item.id, x, y, label: item.label, col };\r\n nodes.push(node);\r\n nodeMap.set(item.id, node);\r\n y += FGCA_NODE_H + rowGap;\r\n }\r\n }\r\n\r\n const edges: FGCAPreviewEdge[] = [];\r\n function addEdge(sourceId: string, targetId: string): void {\r\n const s = nodeMap.get(sourceId);\r\n const t = nodeMap.get(targetId);\r\n if (!s || !t) return;\r\n edges.push({ sx: s.x + FGCA_NODE_W, sy: s.y + FGCA_NODE_H / 2, tx: t.x, ty: t.y + FGCA_NODE_H / 2 });\r\n }\r\n\r\n for (const g of doc.goals) {\r\n for (const f of (g.factor ?? [])) addEdge(`factor_${f.id}`, `goal_${g.id}`);\r\n }\r\n if (hideChanges) {\r\n const connectedViaChange = new Set<number | string>();\r\n for (const c of changes) {\r\n for (const aid of c.activity_ids) {\r\n addEdge(`goal_${c.goal_id}`, `activity_${aid}`);\r\n connectedViaChange.add(aid);\r\n }\r\n }\r\n for (const a of doc.activities) {\r\n if (a.goal_id != null && !connectedViaChange.has(a.id)) {\r\n addEdge(`goal_${a.goal_id}`, `activity_${a.id}`);\r\n }\r\n }\r\n } else {\r\n for (const c of changes) addEdge(`goal_${c.goal_id}`, `change_${c.id}`);\r\n for (const c of changes) for (const aid of c.activity_ids) addEdge(`change_${c.id}`, `activity_${aid}`);\r\n const coveredActivities = new Set(changes.flatMap(c => c.activity_ids));\r\n for (const a of doc.activities) {\r\n if (a.goal_id != null && !coveredActivities.has(a.id)) {\r\n addEdge(`goal_${a.goal_id}`, `activity_${a.id}`);\r\n }\r\n }\r\n }\r\n\r\n const maxNodeBottom = nodes.reduce(\r\n (m, n) => Math.max(m, n.y + FGCA_NODE_H),\r\n FGCA_PAD + FGCA_HEADER_H + rowGap + FGCA_NODE_H,\r\n );\r\n const width = FGCA_PAD * 2 + cols.length * colStride - colGap;\r\n const height = maxNodeBottom + FGCA_PAD;\r\n\r\n return { nodes, edges, columns, width, height };\r\n}\r\n", "/**\n * Browser-safe SVG renderer for the canonical FGCA and FGA notations.\n *\n * Step 4 of the IntelliJ epic (ADR 0001): the webview bundle must turn a\n * validated FGCA/FGA document into renderable SVG so JCEF can drop it into the\n * preview panel. The VS Code path lives in `extension/src/fgca-preview.ts` and\n * pulls in VS Code-specific concerns (themes, title block, save dialogs,\n * spacing/scope controls); this module is the host-neutral subset \u2014 pure\n * column layout \u2192 SVG with no VS Code APIs, no `node:fs`, no `node:path`.\n *\n * FGCA and FGA share the same renderer; FGA only differs by hiding the\n * `change` column (`hideChanges` / the layout's Goal \u2192 Activity collapse),\n * exactly as the extension preview does.\n */\nimport {\n layoutFGCAPreview,\n FGCA_NODE_W as NODE_W,\n FGCA_NODE_H as NODE_H,\n FGCA_HEADER_H as HEADER_H,\n FGCA_PAD as PAD,\n type FGCAPreviewColumn,\n} from '../fgca/preview-layout.js';\nimport type { FGCADoc } from '../fgca/validate.js';\nimport { horizontalCubicEdgePath, DEFAULT_EDGE_CURVATURE } from '../edge-path.js';\nimport { generateSvgEmbedCss } from '../theme/index.js';\nimport { escXml } from './render-util.js';\n\nconst COL_LABELS: Record<FGCAPreviewColumn, string> = {\n factor: 'Factors (F)',\n goal: 'Goals (G)',\n change: 'Changes (C)',\n activity: 'Activities (A)',\n};\n\nexport interface RenderFgcaOptions {\n /** `'fga'` hides the Changes column; defaults to `'fgca'`. */\n variant?: 'fgca' | 'fga';\n /** Optional heading rendered as a left-anchored `text-header` line. */\n title?: string;\n}\n\nexport function renderFgcaSvg(doc: FGCADoc, options: RenderFgcaOptions = {}): string {\n const { variant = 'fgca', title = '' } = options;\n const hideChanges = variant === 'fga';\n\n const { nodes, edges, columns, width, height } = layoutFGCAPreview(doc, { hideChanges });\n\n if (nodes.length === 0) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"0\" height=\"0\" viewBox=\"0 0 0 0\"></svg>`;\n }\n\n const headerSvg = columns\n .map(({ col, x }) =>\n [\n `<rect class=\"diagram-node layer-${col}\" x=\"${x}\" y=\"${PAD}\" width=\"${NODE_W}\" height=\"${HEADER_H}\" rx=\"6\"/>`,\n `<text class=\"text-header\" x=\"${x + NODE_W / 2}\" y=\"${PAD + HEADER_H / 2}\" text-anchor=\"middle\" dominant-baseline=\"central\">${escXml(COL_LABELS[col])}</text>`,\n ].join('\\n'),\n )\n .join('\\n');\n\n // Cubic bezier with horizontal control handles (shared geometry in\n // @transitrix/diagrams). Uses the package default curvature \u2014 the\n // interactive curvature control is a VS Code-only concern.\n const edgeSvg = edges\n .map(\n (e) =>\n `<path d=\"${horizontalCubicEdgePath(e.sx, e.sy, e.tx, e.ty, DEFAULT_EDGE_CURVATURE)}\" class=\"diagram-edge\" marker-end=\"url(#arrow)\"/>`,\n )\n .join('\\n');\n\n const nodeSvg = nodes\n .map((n) => {\n const words = n.label.split(' ');\n let line1 = '';\n let line2 = '';\n for (const w of words) {\n if ((line1 + ' ' + w).trim().length <= 26) {\n line1 = (line1 + ' ' + w).trim();\n } else if ((line2 + ' ' + w).trim().length <= 26) {\n line2 = (line2 + ' ' + w).trim();\n } else if (!line2) {\n line2 = w.slice(0, 24) + '\u2026';\n break;\n }\n }\n const twoLines = line2.length > 0;\n const y1 = twoLines ? n.y + NODE_H / 2 - 8 : n.y + NODE_H / 2 + 5;\n const y2 = y1 + 18;\n return [\n `<rect class=\"diagram-node layer-${n.col}\" x=\"${n.x}\" y=\"${n.y}\" width=\"${NODE_W}\" height=\"${NODE_H}\" rx=\"8\"/>`,\n `<text class=\"text-primary\" x=\"${n.x + NODE_W / 2}\" y=\"${y1}\" text-anchor=\"middle\">${escXml(line1)}</text>`,\n twoLines\n ? `<text class=\"text-secondary\" x=\"${n.x + NODE_W / 2}\" y=\"${y2}\" text-anchor=\"middle\">${escXml(line2)}</text>`\n : '',\n ]\n .filter(Boolean)\n .join('\\n');\n })\n .join('\\n');\n\n const titleSvg = title\n ? `<text class=\"text-header\" x=\"${PAD}\" y=\"${PAD - 6}\">${escXml(title)}</text>`\n : '';\n\n // Embed the shared theme CSS inside the SVG so the rendered output is\n // self-contained \u2014 the JCEF host page only needs to drop the SVG into the\n // DOM and styling resolves without any cooperation from the host stylesheet.\n const embedCss = generateSvgEmbedCss('transitrix');\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\" viewBox=\"0 0 ${width} ${height}\">\n<style>${embedCss}</style>\n<defs>\n <marker id=\"arrow\" markerWidth=\"8\" markerHeight=\"8\" refX=\"8\" refY=\"3\" orient=\"auto\">\n <path d=\"M0,0 L0,6 L8,3 z\" class=\"arrow-fill\"/>\n </marker>\n</defs>\n${titleSvg}\n${headerSvg}\n${nodeSvg}\n${edgeSvg}\n</svg>`;\n}\n", "import type { Goal, GoalTree, LayoutOptions, GoalTreeLayout, LaidOutNode, LaidOutEdge } from './types.js';\r\nimport type { Scope } from '../scope.js';\r\n\r\nconst DEFAULT_NODE_WIDTH = 250;\r\nconst DEFAULT_NODE_HEIGHT = 80;\r\nconst DEFAULT_RANK_SEP = 80;\r\nconst DEFAULT_NODE_SEP = 40;\r\n\r\n/**\r\n * Trims a flat goal list to a scope (vkgeorgia/strategy#77).\r\n * - 'level' \u2192 goals with `level <= maxLevel`.\r\n * - 'root' \u2192 the root goal (matched by string id) plus all its descendants\r\n * via `parent_id`; an empty list when the root is absent.\r\n * Pure and exported so a future access-control layer can reuse it.\r\n */\r\nexport function selectScopedGoals(goals: Goal[], scope: Scope): Goal[] {\r\n if (scope.mode === 'all') return goals;\r\n if (scope.mode === 'level') return goals.filter(g => g.level <= scope.maxLevel);\r\n\r\n // root mode: collect the subtree rooted at rootGoalId (descendants via parent_id).\r\n const children = new Map<number, number[]>();\r\n for (const g of goals) {\r\n if (!children.has(g.parent_id)) children.set(g.parent_id, []);\r\n children.get(g.parent_id)!.push(g.id);\r\n }\r\n const root = goals.find(g => String(g.id) === scope.rootGoalId);\r\n if (!root) return [];\r\n const keep = new Set<number>();\r\n const stack = [root.id];\r\n while (stack.length > 0) {\r\n const id = stack.pop()!;\r\n if (keep.has(id)) continue; // guard against malformed cycles\r\n keep.add(id);\r\n for (const c of children.get(id) ?? []) stack.push(c);\r\n }\r\n return goals.filter(g => keep.has(g.id));\r\n}\r\n\r\nexport function layoutGoalTree(tree: GoalTree, options: LayoutOptions = {}): GoalTreeLayout {\r\n const {\r\n nodeWidth = DEFAULT_NODE_WIDTH,\r\n nodeHeight = DEFAULT_NODE_HEIGHT,\r\n rankSep = DEFAULT_RANK_SEP,\r\n nodeSep = DEFAULT_NODE_SEP,\r\n hideCollapsed = [],\r\n viewDepth = null,\r\n scope = { mode: 'all' },\r\n } = options;\r\n\r\n const hiddenSet = new Set(hideCollapsed);\r\n const goals = selectScopedGoals(tree.goals, scope);\r\n\r\n // Build parent\u2192children map\r\n const children = new Map<number, number[]>();\r\n const goalById = new Map<number, Goal>();\r\n for (const g of goals) {\r\n goalById.set(g.id, g);\r\n if (!children.has(g.parent_id)) children.set(g.parent_id, []);\r\n children.get(g.parent_id)!.push(g.id);\r\n }\r\n\r\n // Compress the levels actually used into contiguous column ranks. The\r\n // canonical N+1 rule (GOALS-013) keeps `level` contiguous from 0, so for\r\n // conforming input this is the identity map. It only rescues legacy /\r\n // non-canonical documents whose `goal_types` skip levels (e.g. 0, 2, 4):\r\n // without it those gaps open phantom empty columns and double the\r\n // horizontal spacing between rendered tiers.\r\n const usedLevels = Array.from(new Set(goals.map(g => g.level))).sort((a, b) => a - b);\r\n const levelToCol = new Map<number, number>();\r\n usedLevels.forEach((lvl, i) => levelToCol.set(lvl, i));\r\n\r\n // Find effective roots: level 0 or parent_id === 0 or broken ref\r\n const allIds = new Set(goals.map(g => g.id));\r\n const roots = goals.filter(g => g.parent_id === 0 || !allIds.has(g.parent_id));\r\n\r\n // Determine hidden subtrees (collapsed or beyond viewDepth)\r\n const hiddenSubtrees = new Set<number>();\r\n function markHidden(id: number): void {\r\n for (const child of children.get(id) ?? []) {\r\n hiddenSubtrees.add(child);\r\n markHidden(child);\r\n }\r\n }\r\n for (const id of hiddenSet) markHidden(id);\r\n if (viewDepth !== null) {\r\n for (const g of goals) {\r\n if (g.level > viewDepth) hiddenSubtrees.add(g.id);\r\n }\r\n }\r\n\r\n const nodes: LaidOutNode[] = [];\r\n const edges: LaidOutEdge[] = [];\r\n\r\n // Recursive layout: assign y by counting vertical slots per column\r\n const columnNextY = new Map<number, number>();\r\n\r\n function getNextY(col: number): number {\r\n return columnNextY.get(col) ?? 0;\r\n }\r\n function advanceY(col: number, delta: number): void {\r\n columnNextY.set(col, (columnNextY.get(col) ?? 0) + delta);\r\n }\r\n\r\n const placed = new Set<number>();\r\n\r\n function placeSubtree(id: number): { top: number; bottom: number } {\r\n const goal = goalById.get(id);\r\n if (!goal || hiddenSubtrees.has(id)) return { top: 0, bottom: 0 };\r\n // Guard against cycles (parent-of-itself, mutual parenting). Without\r\n // validateGoalTree() upstream, layoutGoalTree must not stack-overflow on\r\n // malformed input \u2014 drop any subtree we've already placed.\r\n if (placed.has(id)) return { top: 0, bottom: 0 };\r\n placed.add(id);\r\n\r\n const col = levelToCol.get(goal.level) ?? 0;\r\n const childIds = (children.get(id) ?? []).filter(c => !hiddenSubtrees.has(c) && !placed.has(c));\r\n const isCollapsedRoot = hiddenSet.has(id) && childIds.length > 0;\r\n const hasHiddenChildren = childIds.length < (children.get(id) ?? []).length;\r\n\r\n if (childIds.length === 0) {\r\n // Leaf: place at current column Y\r\n const y = getNextY(col);\r\n advanceY(col, nodeHeight + nodeSep);\r\n nodes.push({ id, x: col * (nodeWidth + rankSep), y, width: nodeWidth, height: nodeHeight, data: goal, isCollapsedRoot, hasHiddenChildren });\r\n return { top: y, bottom: y + nodeHeight };\r\n }\r\n\r\n // Place children first to get their span\r\n const spans: Array<{ top: number; bottom: number }> = [];\r\n for (const cid of childIds) {\r\n spans.push(placeSubtree(cid));\r\n }\r\n\r\n const spanTop = Math.min(...spans.map(s => s.top));\r\n const spanBottom = Math.max(...spans.map(s => s.bottom));\r\n const parentY = spanTop + (spanBottom - spanTop) / 2 - nodeHeight / 2;\r\n\r\n // Make sure parent column is at least this far\r\n const curColY = getNextY(col);\r\n const finalY = Math.max(parentY, curColY);\r\n advanceY(col, finalY - curColY + nodeHeight + nodeSep);\r\n\r\n nodes.push({ id, x: col * (nodeWidth + rankSep), y: finalY, width: nodeWidth, height: nodeHeight, data: goal, isCollapsedRoot, hasHiddenChildren });\r\n\r\n for (const cid of childIds) {\r\n edges.push({ source: id, target: cid });\r\n }\r\n\r\n return { top: Math.min(finalY, spanTop), bottom: Math.max(finalY + nodeHeight, spanBottom) };\r\n }\r\n\r\n for (const root of roots) {\r\n if (!hiddenSubtrees.has(root.id) && !placed.has(root.id)) {\r\n placeSubtree(root.id);\r\n // Add inter-root gap\r\n for (const [col, y] of columnNextY) {\r\n columnNextY.set(col, y + nodeSep);\r\n }\r\n }\r\n }\r\n\r\n if (nodes.length === 0) {\r\n return { nodes: [], edges: [], bounds: { x: 0, y: 0, width: 0, height: 0 } };\r\n }\r\n\r\n const minX = Math.min(...nodes.map(n => n.x));\r\n const minY = Math.min(...nodes.map(n => n.y));\r\n const maxX = Math.max(...nodes.map(n => n.x + n.width));\r\n const maxY = Math.max(...nodes.map(n => n.y + n.height));\r\n\r\n return { nodes, edges, bounds: { x: minX, y: minY, width: maxX - minX, height: maxY - minY } };\r\n}\r\n", "/**\r\n * Browser-safe SVG renderer for the canonical Goals notation.\r\n *\r\n * Step 3 of the IntelliJ epic (ADR 0001): the webview bundle must turn a\r\n * validated GoalTree into renderable SVG so JCEF can drop it into the preview\r\n * panel. The VS Code path lives in `extension/src/goals-preview.ts` and pulls\r\n * in VS Code-specific concerns (themes, title block, save dialogs); this\r\n * module is the host-neutral subset \u2014 pure layout \u2192 SVG with no VS Code APIs,\r\n * no `node:fs`, no `node:path`.\r\n *\r\n * Step 4 will follow the same shape for the remaining ten notations.\r\n */\r\nimport { layoutGoalTree } from '../goals/layout.js';\r\nimport type { GoalTree, GoalTreeLayout, LaidOutEdge } from '../goals/types.js';\r\nimport { horizontalCubicEdgePath, DEFAULT_EDGE_CURVATURE } from '../edge-path.js';\r\nimport { generateSvgEmbedCss } from '../theme/index.js';\r\n\r\nconst NODE_W = 250;\r\nconst NODE_H = 60;\r\nconst RANK_SEP = 100;\r\nconst NODE_SEP = 24;\r\nconst PAD = 24;\r\nconst LABEL_MAX = 36;\r\nconst LABEL_TRIM = 34;\r\n\r\nfunction escXml(s: string): string {\r\n return s\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\"/g, '"');\r\n}\r\n\r\nexport interface RenderGoalsOptions {\r\n treeName?: string;\r\n curvature?: number;\r\n}\r\n\r\nexport function renderGoalsSvg(tree: GoalTree, options: RenderGoalsOptions = {}): string {\r\n const { treeName = '', curvature = DEFAULT_EDGE_CURVATURE } = options;\r\n\r\n const layout: GoalTreeLayout = layoutGoalTree(tree, {\r\n nodeWidth: NODE_W,\r\n nodeHeight: NODE_H,\r\n rankSep: RANK_SEP,\r\n nodeSep: NODE_SEP,\r\n });\r\n\r\n if (layout.nodes.length === 0) {\r\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"0\" height=\"0\" viewBox=\"0 0 0 0\"></svg>`;\r\n }\r\n\r\n const w = layout.bounds.width + PAD * 2;\r\n const h = layout.bounds.height + PAD * 2;\r\n const ox = -layout.bounds.x + PAD;\r\n const oy = -layout.bounds.y + PAD;\r\n\r\n const nodeMap = new Map(layout.nodes.map((n) => [n.id, n]));\r\n\r\n function edgePath(e: LaidOutEdge): string {\r\n const s = nodeMap.get(e.source);\r\n const t = nodeMap.get(e.target);\r\n if (!s || !t) return '';\r\n const sx = s.x + ox + s.width;\r\n const sy = s.y + oy + s.height / 2;\r\n const tx = t.x + ox;\r\n const ty = t.y + oy + t.height / 2;\r\n return horizontalCubicEdgePath(sx, sy, tx, ty, curvature);\r\n }\r\n\r\n const edgeSvg = layout.edges\r\n .map((e) => `<path d=\"${edgePath(e)}\" class=\"diagram-edge\" marker-end=\"url(#arrow)\"/>`)\r\n .join('\\n');\r\n\r\n const nodeSvg = layout.nodes\r\n .map((n) => {\r\n const x = n.x + ox;\r\n const y = n.y + oy;\r\n const level = n.data.level % 8;\r\n const labelText = n.data.name ?? String(n.id);\r\n const label = labelText.length > LABEL_MAX ? labelText.slice(0, LABEL_TRIM) + '\u2026' : labelText;\r\n return `<g>\r\n <rect class=\"diagram-node level-${level}\" x=\"${x}\" y=\"${y}\" width=\"${n.width}\" height=\"${n.height}\" rx=\"8\"/>\r\n <text class=\"text-primary\" x=\"${x + n.width / 2}\" y=\"${y + n.height / 2}\" text-anchor=\"middle\" dominant-baseline=\"central\">${escXml(label)}</text>\r\n</g>`;\r\n })\r\n .join('\\n');\r\n\r\n const titleSvg = treeName\r\n ? `<text class=\"text-header\" x=\"${PAD}\" y=\"${PAD - 6}\">${escXml(`Goal tree \u2014 ${treeName}`)}</text>`\r\n : '';\r\n\r\n // Embed the shared theme CSS inside the SVG so the rendered output is\r\n // self-contained \u2014 the JCEF host page only needs to drop the SVG into the\r\n // DOM and styling resolves without any cooperation from the host stylesheet.\r\n // Matches what the VS Code path produces via `prepareSvgForExport`.\r\n const embedCss = generateSvgEmbedCss('transitrix');\r\n\r\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w}\" height=\"${h}\" viewBox=\"0 0 ${w} ${h}\">\r\n<style>${embedCss}</style>\r\n<defs>\r\n <marker id=\"arrow\" markerWidth=\"8\" markerHeight=\"8\" refX=\"8\" refY=\"3\" orient=\"auto\">\r\n <path d=\"M0,0 L0,6 L8,3 z\" class=\"arrow-fill\"/>\r\n </marker>\r\n</defs>\r\n${titleSvg}\r\n${nodeSvg}\r\n${edgeSvg}\r\n</svg>`;\r\n}\r\n", "/**\n * Host-neutral SVG renderer for the Process Blueprint notation.\n *\n * Step 4 of the IntelliJ epic (ADR 0001): ported from the pure SVG core of\n * `extension/src/process-blueprint-preview.ts` (`layoutToSvg`). The VS Code\n * title block (`svg-title-block.ts`) is intentionally dropped \u2014 JCEF has no\n * VS Code APIs \u2014 and replaced with `render-goals.ts`' simple optional\n * `<text class=\"text-header\">` heading. No `vscode`, no `node:*`, no host APIs;\n * the shared theme CSS is embedded inside the `<svg>` so the output is\n * self-contained.\n */\nimport { layoutProcessBlueprint } from '../process-blueprint/layout.js';\nimport type {\n ProcessBlueprintFile,\n ProcessBlueprintLayout,\n} from '../process-blueprint/types.js';\nimport { generateSvgEmbedCss } from '../theme/index.js';\nimport { escXml } from './render-util.js';\n\nconst PAD = 24;\n\nfunction truncate(text: string, maxChars: number): string {\n if (text.length <= maxChars) return text;\n return text.slice(0, Math.max(0, maxChars - 1)) + '\u2026';\n}\n\nexport interface RenderProcessBlueprintOptions {\n title?: string;\n}\n\nexport function renderProcessBlueprintSvg(\n doc: ProcessBlueprintFile,\n options: RenderProcessBlueprintOptions = {},\n): string {\n const { title = '' } = options;\n\n const layout: ProcessBlueprintLayout = layoutProcessBlueprint(doc);\n\n if (layout.bounds.width === 0 || layout.bounds.height === 0) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"0\" height=\"0\" viewBox=\"0 0 0 0\"></svg>`;\n }\n\n const titleH = title ? PAD : 0;\n const w = layout.bounds.width + PAD * 2;\n const h = layout.bounds.height + PAD * 2 + titleH;\n const ox = PAD;\n const oy = PAD + titleH;\n\n const parts: string[] = [];\n\n parts.push(\n `<rect class=\"diagram-node level-0\" x=\"${ox}\" y=\"${oy}\" width=\"${layout.bounds.width}\" height=\"${layout.bounds.height}\" rx=\"6\"/>`,\n );\n\n for (const s of layout.stageHeaders) {\n parts.push(\n `<rect class=\"diagram-node level-1\" x=\"${s.x + ox}\" y=\"${s.y + oy}\" width=\"${s.width}\" height=\"${s.height}\"/>`,\n );\n parts.push(\n `<text class=\"text-header\" x=\"${s.x + ox + s.width / 2}\" y=\"${s.y + oy + s.height / 2}\" text-anchor=\"middle\" dominant-baseline=\"central\">${escXml(truncate(s.name, 28))}</text>`,\n );\n }\n\n for (const l of layout.legend) {\n parts.push(\n `<rect class=\"diagram-node level-2\" x=\"${ox}\" y=\"${l.y + oy}\" width=\"${layout.legendColumnWidth}\" height=\"${l.height}\"/>`,\n );\n parts.push(\n `<text class=\"text-primary\" x=\"${ox + 12}\" y=\"${l.y + oy + l.height / 2}\" dominant-baseline=\"central\">${escXml(l.label)}</text>`,\n );\n }\n\n for (const c of layout.goalCells) {\n parts.push(\n `<rect class=\"diagram-node level-3\" x=\"${c.x + ox}\" y=\"${c.y + oy}\" width=\"${c.width}\" height=\"${c.height}\"/>`,\n );\n parts.push(\n `<text class=\"text-secondary\" x=\"${c.x + ox + 10}\" y=\"${c.y + oy + c.height / 2}\" dominant-baseline=\"central\">${escXml(truncate(c.text, 32))}</text>`,\n );\n }\n for (const c of layout.resultCells) {\n parts.push(\n `<rect class=\"diagram-node level-4\" x=\"${c.x + ox}\" y=\"${c.y + oy}\" width=\"${c.width}\" height=\"${c.height}\"/>`,\n );\n parts.push(\n `<text class=\"text-secondary\" x=\"${c.x + ox + 10}\" y=\"${c.y + oy + c.height / 2}\" dominant-baseline=\"central\">${escXml(truncate(c.text, 32))}</text>`,\n );\n }\n\n for (let r = 0; r < layout.aspectRows.length; r++) {\n const row = layout.aspectRows[r];\n const level = 5 + (r % 3);\n parts.push(\n `<rect class=\"diagram-node level-${level}\" x=\"${layout.legendColumnWidth + ox}\" y=\"${row.y + oy}\" width=\"${layout.bounds.width - layout.legendColumnWidth}\" height=\"${row.height}\" opacity=\"0.15\"/>`,\n );\n for (let i = 1; i < layout.stageHeaders.length; i++) {\n const x = layout.legendColumnWidth + i * layout.stageColumnWidth + ox;\n parts.push(\n `<line class=\"diagram-edge\" x1=\"${x}\" y1=\"${row.y + oy}\" x2=\"${x}\" y2=\"${row.y + row.height + oy}\" opacity=\"0.3\"/>`,\n );\n }\n for (const p of row.pills) {\n parts.push(\n `<rect class=\"diagram-node level-${level}\" x=\"${p.x + ox}\" y=\"${p.y + oy}\" width=\"${p.width}\" height=\"${p.height}\" rx=\"6\"/>`,\n );\n const label = p.id ? `${p.name} \u00B7 ${p.id}` : p.name;\n parts.push(\n `<text class=\"text-pill\" x=\"${p.x + ox + p.width / 2}\" y=\"${p.y + oy + p.height / 2}\" text-anchor=\"middle\" dominant-baseline=\"central\">${escXml(truncate(label, Math.floor(p.width / 8)))}</text>`,\n );\n }\n }\n\n const titleSvg = title\n ? `<text class=\"text-header\" x=\"${PAD}\" y=\"${PAD - 6}\">${escXml(title)}</text>`\n : '';\n\n // Embed the shared theme CSS inside the SVG so the rendered output is\n // self-contained for the JCEF host \u2014 matches render-goals.ts.\n const embedCss = generateSvgEmbedCss('transitrix');\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w}\" height=\"${h}\" viewBox=\"0 0 ${w} ${h}\">\n<style>${embedCss}</style>\n${titleSvg}\n${parts.join('\\n')}\n</svg>`;\n}\n", "/**\n * Host-neutral renderer for the Process Map notation.\n * Mirrors `extension/src/process-map-preview.ts`; emits a self-contained HTML\n * fragment for the JCEF host (Step 4 of ADR 0001).\n */\nimport type { MapProcess, ProcessGroup, ProcessMapHeader } from '../process-map/types.js';\nimport { escHtml } from './render-util.js';\n\nconst STATUS_BADGE: Record<string, string> = {\n Active: 'badge-active',\n Draft: 'badge-draft',\n Deprecated: 'badge-deprecated',\n};\n\nconst GROUP_LABEL: Record<string, string> = {\n operating: 'Operating',\n supporting: 'Supporting',\n management: 'Management',\n};\n\nfunction maturityDots(m: number | undefined): string {\n if (m === undefined) return '<span class=\"cell-empty\">\u2014</span>';\n const filled = '\u25CF'.repeat(Math.max(0, Math.min(5, m)));\n const empty = '\u25CB'.repeat(5 - Math.max(0, Math.min(5, m)));\n return `<span class=\"maturity-dots\">${filled}${empty}</span>`;\n}\n\nfunction renderProcessRow(p: MapProcess): string {\n return `<tr>\n <td class=\"col-name\">\n <div class=\"catalogue-name\">${escHtml(p.name)}</div>\n <div class=\"catalogue-id\">${escHtml(p.process_id)}</div>\n ${p.description ? `<div class=\"catalogue-desc\">${escHtml(p.description)}</div>` : ''}\n </td>\n <td class=\"col-status\"><span class=\"tx-badge ${escHtml(STATUS_BADGE[p.status] ?? '')}\">${escHtml(p.status)}</span></td>\n <td class=\"col-maturity\">${maturityDots(p.maturity)}</td>\n <td class=\"col-owner\">${p.owner_role ? escHtml(p.owner_role) : '<span class=\"cell-empty\">\u2014</span>'}</td>\n <td class=\"col-capability\">${p.capability ? `<span class=\"cap-tag\">${escHtml(p.capability)}</span>` : '<span class=\"cell-empty\">\u2014</span>'}</td>\n <td class=\"col-bpmn\">${p.bpmn_file ? `<span class=\"bpmn-link\" title=\"${escHtml(p.bpmn_file)}\">\uD83D\uDCC4 BPMN</span>` : '<span class=\"cell-empty\">\u2014</span>'}</td>\n</tr>`;\n}\n\nfunction renderGroup(g: ProcessGroup): string {\n const processes = g.processes ?? [];\n const rows = processes.length === 0\n ? `<tr><td colspan=\"6\" class=\"empty-group\">No processes in this group.</td></tr>`\n : processes.map(renderProcessRow).join('\\n');\n const typeKey = String(g.type ?? '');\n return `<section class=\"group-section group-${escHtml(typeKey)}\">\n <header class=\"group-header\">\n <div class=\"group-meta\">\n <span class=\"group-tag group-tag-${escHtml(typeKey)}\">${escHtml(GROUP_LABEL[typeKey] ?? typeKey)}</span>\n <span class=\"group-id\">${escHtml(g.id)}</span>\n </div>\n <h2 class=\"group-title\">${escHtml(g.name)}</h2>\n ${g.description ? `<p class=\"group-desc\">${escHtml(g.description)}</p>` : ''}\n </header>\n <table class=\"catalogue-table\">\n <thead>\n <tr>\n <th>Process</th>\n <th>Status</th>\n <th>Maturity</th>\n <th>Owner</th>\n <th>Capability</th>\n <th>BPMN</th>\n </tr>\n </thead>\n <tbody>\n ${rows}\n </tbody>\n </table>\n</section>`;\n}\n\nexport function renderProcessMapHtml(map: ProcessMapHeader): string {\n const header = `<header class=\"catalogue-header\">\n <div class=\"catalogue-title\">${escHtml(map.name)}</div>\n <div class=\"catalogue-meta\">\n <span class=\"catalogue-id-tag\">${escHtml(map.id)}</span>\n <span class=\"catalogue-updated\">Updated ${escHtml(map.updated_at)}</span>\n ${map.version ? `<span class=\"catalogue-version\">v${escHtml(map.version)}</span>` : ''}\n </div>\n ${map.description ? `<div class=\"catalogue-subtitle\">${escHtml(map.description)}</div>` : ''}\n </header>`;\n const body = map.groups.length === 0\n ? '<div class=\"empty-map\">No groups defined.</div>'\n : map.groups.map(renderGroup).join('\\n');\n return `<section class=\"tx-catalogue tx-process-map\">\n${header}\n${body}\n</section>`;\n}\n", "/**\n * Host-neutral renderer for the Products catalogue notation.\n * Mirrors `extension/src/products-preview.ts`; emits a self-contained HTML\n * fragment for the JCEF host (Step 4 of ADR 0001).\n */\nimport type { Product, ProductsCatalogueHeader } from '../products/types.js';\nimport { escHtml } from './render-util.js';\n\nconst TYPE_LABEL: Record<string, string> = {\n digital_product: 'Digital Product',\n service: 'Service',\n platform: 'Platform',\n bundle: 'Bundle',\n};\n\nconst STATUS_BADGE: Record<string, string> = {\n Active: 'badge-active',\n Draft: 'badge-draft',\n Deprecated: 'badge-deprecated',\n};\n\nfunction maturityDots(m: number | undefined): string {\n if (m === undefined) return '<span class=\"cell-empty\">\u2014</span>';\n const filled = '\u25CF'.repeat(Math.max(0, Math.min(5, m)));\n const empty = '\u25CB'.repeat(5 - Math.max(0, Math.min(5, m)));\n return `<span class=\"maturity-dots\">${filled}${empty}</span>`;\n}\n\nfunction disclosureList(label: string, items: string[] | undefined): string {\n if (!items || items.length === 0) return '';\n const lis = items.map((i) => `<li>${escHtml(i)}</li>`).join('');\n return `<details><summary>${escHtml(label)} (${items.length})</summary><ul>${lis}</ul></details>`;\n}\n\nfunction renderRow(p: Product): string {\n const extras = [\n disclosureList('Capabilities', p.capabilities),\n disclosureList('Processes', p.processes),\n disclosureList('Apps', p.supporting_apps),\n ]\n .filter(Boolean)\n .join('');\n return `<tr>\n <td class=\"col-name\">\n <div class=\"catalogue-name\">${escHtml(p.name)}</div>\n <div class=\"catalogue-id\">${escHtml(p.product_id)}</div>\n ${p.description ? `<div class=\"catalogue-desc\">${escHtml(p.description)}</div>` : ''}\n ${extras}\n </td>\n <td class=\"col-type\"><span class=\"type-tag\">${escHtml(TYPE_LABEL[p.type] ?? p.type)}</span></td>\n <td class=\"col-status\"><span class=\"tx-badge ${escHtml(STATUS_BADGE[p.status] ?? '')}\">${escHtml(p.status)}</span></td>\n <td class=\"col-maturity\">${maturityDots(p.maturity)}</td>\n <td class=\"col-domain\">${p.domain ? escHtml(p.domain) : '<span class=\"cell-empty\">\u2014</span>'}</td>\n <td class=\"col-owner\">${p.owner_role ? escHtml(p.owner_role) : '<span class=\"cell-empty\">\u2014</span>'}</td>\n</tr>`;\n}\n\nexport function renderProductsHtml(catalogue: ProductsCatalogueHeader): string {\n const rows = catalogue.products.map(renderRow).join('\\n');\n const emptyRow = catalogue.products.length === 0\n ? `<tr><td colspan=\"6\" class=\"empty-catalogue\">No products defined.</td></tr>`\n : '';\n const header = `<header class=\"catalogue-header\">\n <div class=\"catalogue-title\">${escHtml(catalogue.name)}</div>\n <div class=\"catalogue-meta\">\n <span class=\"catalogue-id-tag\">${escHtml(catalogue.id)}</span>\n <span class=\"catalogue-updated\">Updated ${escHtml(catalogue.updated_at)}</span>\n ${catalogue.version ? `<span class=\"catalogue-version\">v${escHtml(catalogue.version)}</span>` : ''}\n </div>\n ${catalogue.description ? `<div class=\"catalogue-subtitle\">${escHtml(catalogue.description)}</div>` : ''}\n </header>`;\n return `<section class=\"tx-catalogue tx-products\">\n${header}\n<table class=\"catalogue-table\">\n <thead>\n <tr>\n <th>Name / ID</th>\n <th>Type</th>\n <th>Status</th>\n <th>Maturity</th>\n <th>Domain</th>\n <th>Owner Role</th>\n </tr>\n </thead>\n <tbody>\n ${rows}\n ${emptyRow}\n </tbody>\n</table>\n</section>`;\n}\n", "/**\n * Host-neutral renderer for the Scenarios notation.\n * Mirrors `extension/src/scenarios-preview.ts`; emits a self-contained HTML\n * fragment for the JCEF host (Step 4 of ADR 0001).\n */\nimport type { FactorView, ScenarioHeader } from '../scenarios/types.js';\nimport { escHtml } from './render-util.js';\n\nconst STATUS_BADGE: Record<string, string> = {\n Active: 'badge-active',\n Draft: 'badge-draft',\n Archived: 'badge-archived',\n};\n\nconst RELEVANCE_BADGE: Record<string, string> = {\n High: 'badge-high',\n Medium: 'badge-medium',\n Low: 'badge-low',\n};\n\nfunction buildFactorsTable(factors: FactorView[] | undefined): string {\n if (!factors || factors.length === 0) return '';\n const rows = factors\n .map(\n (f) => `<tr>\n <td class=\"col-factor-id\">${escHtml(f.factor_id)}</td>\n <td class=\"col-relevance\">${\n f.relevance\n ? `<span class=\"tx-badge ${escHtml(RELEVANCE_BADGE[f.relevance] ?? '')}\">${escHtml(f.relevance)}</span>`\n : '<span class=\"cell-empty\">\u2014</span>'\n }</td>\n <td class=\"col-impact\">${f.impact ? escHtml(f.impact) : '<span class=\"cell-empty\">\u2014</span>'}</td>\n</tr>`,\n )\n .join('\\n');\n return `<section class=\"scn-section\">\n <h2 class=\"scn-section-title\">Factors view <span class=\"scn-count\">${factors.length}</span></h2>\n <table class=\"catalogue-table\">\n <thead><tr><th>Factor ID</th><th>Relevance</th><th>Impact</th></tr></thead>\n <tbody>${rows}</tbody>\n </table>\n</section>`;\n}\n\nfunction buildRefSection(label: string, items: string[]): string {\n if (items.length === 0) return '';\n const lis = items.map((id) => `<li><code>${escHtml(id)}</code></li>`).join('');\n return `<section class=\"scn-section\">\n <h2 class=\"scn-section-title\">${escHtml(label)} <span class=\"scn-count\">${items.length}</span></h2>\n <ul class=\"scn-ref-list\">${lis}</ul>\n</section>`;\n}\n\nfunction extractIds(list: readonly unknown[] | undefined, key: string): string[] {\n return (list ?? []).map((x) => String((x as Record<string, unknown>)[key] ?? ''));\n}\n\nexport function renderScenarioHtml(scn: ScenarioHeader): string {\n const blocks: string[] = [];\n if (scn.vision) {\n blocks.push(`<section class=\"scn-section scn-vision\">\n <h2 class=\"scn-section-title\">Vision</h2>\n <p class=\"scn-vision-text\">${escHtml(scn.vision)}</p>\n</section>`);\n }\n blocks.push(buildFactorsTable(scn.factors_view));\n blocks.push(buildRefSection('Goals', extractIds(scn.goals, 'goal_id')));\n blocks.push(buildRefSection('Capabilities', extractIds(scn.capabilities, 'capability_id')));\n blocks.push(buildRefSection('Activities', extractIds(scn.activities, 'activity_id')));\n blocks.push(buildRefSection('Products', extractIds(scn.products, 'product_id')));\n blocks.push(buildRefSection('Processes', extractIds(scn.processes, 'process_id')));\n blocks.push(buildRefSection('Applications', extractIds(scn.applications, 'app_id')));\n const content = blocks.filter(Boolean).join('\\n');\n\n const statusBadge = `<span class=\"tx-badge ${escHtml(STATUS_BADGE[scn.status] ?? '')}\">${escHtml(scn.status)}</span>`;\n const header = `<header class=\"catalogue-header\">\n <div class=\"catalogue-title\">${escHtml(scn.name)}</div>\n <div class=\"catalogue-meta\">\n ${statusBadge}\n <span class=\"catalogue-id-tag\">${escHtml(scn.id)}</span>\n ${scn.created_at ? `<span class=\"catalogue-updated\">Created ${escHtml(scn.created_at)}</span>` : ''}\n </div>\n ${scn.description ? `<div class=\"catalogue-subtitle\">${escHtml(scn.description)}</div>` : ''}\n </header>`;\n const body = content || '<div class=\"empty-scenario\">Scenario has no content yet (no vision, factors, or references).</div>';\n return `<section class=\"tx-catalogue tx-scenarios\">\n${header}\n${body}\n</section>`;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["exception", "position", "map", "schema", "type", "extend", "str", "string", "raw", "DATE_RE", "DATE_RE", "isNonEmptyString", "DEFAULTS", "VALID_TYPES", "DATE_RE", "map", "CHANGE_ID_RE", "ACTIVITY_ID_RE", "isNonEmptyString", "GOAL_ID_RE", "isNonEmptyString", "isNonEmptyString", "ASPECT_CATEGORIES", "DEFAULTS", "resolveOptions", "VALID_STATUSES", "DATE_RE", "map", "VALID_TYPES", "VALID_STATUSES", "DATE_RE", "VALID_STATUSES", "DATE_RE", "PAD", "truncate", "PAD", "truncate", "map", "NODE_W", "NODE_H", "PAD", "escXml", "PAD", "truncate", "STATUS_BADGE", "maturityDots", "map", "TYPE_LABEL", "STATUS_BADGE", "maturityDots", "disclosureList", "renderRow", "STATUS_BADGE"]
|
|
7
|
-
}
|