@diagrammo/dgmo 0.46.0 → 0.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/advanced.d.ts +3 -855
- package/dist/advanced.js +541 -70107
- package/dist/analyzer-UYKBXAKR.js +15 -0
- package/dist/auto.js +1 -1
- package/dist/auto.mjs +1 -1
- package/dist/block.js +83 -69417
- package/dist/calculator-LDYQCDDY.js +11 -0
- package/dist/charts-d3-QOZHKTCT.js +25 -0
- package/dist/chunk-2DXMZRWJ.js +800 -0
- package/dist/chunk-2LACINWN.js +786 -0
- package/dist/chunk-33LCUH4H.js +893 -0
- package/dist/chunk-3CIOJ5YJ.js +35 -0
- package/dist/chunk-3HDBAXF5.js +86 -0
- package/dist/chunk-3JLKYGBQ.js +290 -0
- package/dist/chunk-3MQQNXPD.js +415 -0
- package/dist/chunk-3R5POCTZ.js +967 -0
- package/dist/chunk-3SMGIJDD.js +112 -0
- package/dist/chunk-44CM72SQ.js +409 -0
- package/dist/chunk-4GRI7MEB.js +1604 -0
- package/dist/chunk-4OHACBGX.js +606 -0
- package/dist/chunk-5DH3KYFH.js +21 -0
- package/dist/chunk-5MLYVTYM.js +76 -0
- package/dist/chunk-5QXL4NYS.js +553 -0
- package/dist/chunk-5WRI5ZAA.js +31 -0
- package/dist/chunk-6EK55ART.js +117 -0
- package/dist/chunk-6FZYCKXB.js +2065 -0
- package/dist/chunk-6HO5ZTXK.js +277 -0
- package/dist/chunk-6KFWC4CO.js +7 -0
- package/dist/chunk-6MTWIQVO.js +121 -0
- package/dist/chunk-6NYWYNBI.js +329 -0
- package/dist/chunk-6SM5NJQH.js +620 -0
- package/dist/chunk-725LDASD.js +422 -0
- package/dist/chunk-76OWZ3BA.js +130 -0
- package/{src/block/parser.ts → dist/chunk-7JEGTRLD.js} +100 -189
- package/dist/chunk-A44USUV7.js +923 -0
- package/dist/chunk-A4GOY3PE.js +25 -0
- package/dist/chunk-A4VFQH5G.js +251 -0
- package/dist/chunk-AELOBFW5.js +375 -0
- package/dist/chunk-AN2MOO5T.js +522 -0
- package/dist/chunk-BMR4CIEO.js +41 -0
- package/dist/chunk-BS7SV7C3.js +51 -0
- package/dist/chunk-BUPDIHML.js +613 -0
- package/dist/chunk-BUVJFRPY.js +887 -0
- package/dist/chunk-C3Z4DX3V.js +112 -0
- package/dist/chunk-CI2G3OEB.js +1818 -0
- package/dist/chunk-CKNVO24D.js +54 -0
- package/dist/chunk-CUVHQHZ7.js +391 -0
- package/dist/chunk-CXK4DZH3.js +114 -0
- package/dist/{editor.cjs → chunk-DKEPS5LH.js} +14 -225
- package/dist/chunk-DU7W62N5.js +487 -0
- package/dist/chunk-DZAQBW35.js +751 -0
- package/dist/chunk-EB6FPQUP.js +316 -0
- package/dist/chunk-EMS2SK26.js +376 -0
- package/dist/chunk-ERLBPDGU.js +510 -0
- package/dist/chunk-EVCVDTXE.js +732 -0
- package/dist/chunk-FCIIHT24.js +384 -0
- package/dist/chunk-FFUN5D66.js +97 -0
- package/dist/chunk-FITOLXSX.js +714 -0
- package/dist/chunk-FMDSF3OV.js +68 -0
- package/dist/chunk-FNB3PNGF.js +410 -0
- package/dist/chunk-G2H74XJZ.js +2104 -0
- package/dist/chunk-GMR5MFHJ.js +339 -0
- package/dist/chunk-H6PI3KJT.js +305 -0
- package/dist/chunk-I46X5VUA.js +59 -0
- package/dist/chunk-I5IGB56C.js +255 -0
- package/dist/chunk-IH6ZMVQ5.js +3950 -0
- package/dist/chunk-IJZFN3HM.js +463 -0
- package/dist/chunk-IPWPWM6R.js +3079 -0
- package/dist/chunk-IYULMRBE.js +23 -0
- package/dist/chunk-IZMRON6C.js +167 -0
- package/dist/chunk-J5FIXQRT.js +813 -0
- package/dist/chunk-JED6ZDEE.js +73 -0
- package/dist/chunk-JEUJOX5X.js +136 -0
- package/dist/chunk-JM4LEPY3.js +436 -0
- package/dist/chunk-L3UHP6TD.js +101 -0
- package/dist/chunk-L66GEFB6.js +524 -0
- package/dist/chunk-LIOHW36Z.js +469 -0
- package/dist/chunk-LP7EC4MI.js +16 -0
- package/dist/chunk-MITI6NOL.js +548 -0
- package/dist/chunk-MO5YHHMQ.js +168 -0
- package/dist/chunk-MZSBFAPJ.js +885 -0
- package/dist/chunk-NNAAJVBU.js +9 -0
- package/dist/chunk-NOTA6TEI.js +47 -0
- package/dist/chunk-NURGB5Z4.js +335 -0
- package/dist/chunk-NX4EQS3U.js +1062 -0
- package/dist/chunk-NXMESY4J.js +1 -0
- package/dist/chunk-OJR3MQYV.js +1458 -0
- package/dist/chunk-OURHMODR.js +454 -0
- package/dist/chunk-P235SVAH.js +1057 -0
- package/dist/chunk-P4RH4OSP.js +1038 -0
- package/dist/chunk-P6T66CCZ.js +226 -0
- package/dist/chunk-PBAHEPLQ.js +223 -0
- package/dist/chunk-PBHE5UG6.js +1530 -0
- package/dist/chunk-PDKUANDZ.js +35 -0
- package/dist/chunk-PWIHZ6NJ.js +296 -0
- package/{src/c4/layout.ts → dist/chunk-QEBUY5NY.js} +384 -1140
- package/dist/chunk-QLCCJEJI.js +253 -0
- package/dist/chunk-QOOUC2J5.js +52 -0
- package/dist/chunk-QYTPPDAO.js +402 -0
- package/dist/chunk-R3XI2VC7.js +801 -0
- package/dist/chunk-RCERWOJR.js +154 -0
- package/dist/chunk-RJE5JTVK.js +362 -0
- package/dist/chunk-RTLBSQ3G.js +1155 -0
- package/dist/chunk-RUNNI6VE.js +448 -0
- package/dist/chunk-RVMRZAPB.js +354 -0
- package/dist/chunk-RYEGFMUO.js +955 -0
- package/dist/chunk-RZCF2VVM.js +528 -0
- package/dist/chunk-SML67VPV.js +1025 -0
- package/dist/chunk-SQ7IY53Q.js +44 -0
- package/dist/chunk-SQAG3UXH.js +161 -0
- package/dist/chunk-SRTU6HMQ.js +1851 -0
- package/dist/chunk-T2OE3YQB.js +550 -0
- package/dist/chunk-T3UBLACL.js +299 -0
- package/dist/chunk-TLVIHFRO.js +296 -0
- package/dist/chunk-TYS6CSS5.js +52 -0
- package/dist/chunk-U6EQI3U6.js +130 -0
- package/dist/chunk-UJ4FJLBF.js +86 -0
- package/dist/chunk-ULOEATBZ.js +347 -0
- package/dist/chunk-UNCCZ3NU.js +127 -0
- package/dist/chunk-USZW2HHU.js +197 -0
- package/dist/chunk-UWN33VNX.js +1610 -0
- package/dist/chunk-UZ7EZW3B.js +40 -0
- package/dist/chunk-VOKGH627.js +37 -0
- package/dist/chunk-WBRZJOEC.js +204 -0
- package/dist/chunk-WCSOJFU3.js +380 -0
- package/dist/chunk-WCT3NYCV.js +160 -0
- package/dist/chunk-WVAJFAIA.js +529 -0
- package/dist/chunk-X5LCYCL5.js +394 -0
- package/dist/chunk-XAKEUMEJ.js +1256 -0
- package/dist/chunk-Y2ZE3MSG.js +590 -0
- package/dist/chunk-Y3J7VR52.js +646 -0
- package/dist/chunk-Y5QGVTVC.js +33 -0
- package/dist/chunk-YAA6IID3.js +548 -0
- package/dist/chunk-YGJTDXVR.js +692 -0
- package/{src/utils/time-ticks.ts → dist/chunk-YRYKTYMQ.js} +45 -112
- package/dist/chunk-YYVTBZZC.js +61 -0
- package/dist/chunk-Z5CGSFJB.js +647 -0
- package/{src/gantt/calculator.ts → dist/chunk-Z72XRXD4.js} +236 -428
- package/dist/chunk-ZGR7ULFJ.js +978 -0
- package/dist/chunk-ZJEL4H2R.js +851 -0
- package/dist/chunk-ZO27FGJS.js +554 -0
- package/dist/collapse-CLPJD2RL.js +11 -0
- package/dist/collapse-SLINJQW6.js +9 -0
- package/dist/collapse-ZWUFFCK2.js +9 -0
- package/dist/compute-G55RG53N.js +8 -0
- package/dist/dgmo-router-DZCIDUO5.js +73 -0
- package/dist/dimensions-J3FHIMJ6.js +22 -0
- package/dist/element.js +1 -1
- package/dist/element.mjs +1 -1
- package/dist/flowchart-parser-ZNSKIBVR.js +21 -0
- package/dist/flowchart-renderer-ZAEOL4DX.js +35 -0
- package/dist/index.d.ts +3 -469
- package/dist/index.js +137 -69685
- package/dist/layout-46N4JJYK.js +17 -0
- package/dist/layout-5RA6QWR6.js +26 -0
- package/dist/layout-5T6RH5M6.js +14 -0
- package/dist/layout-7QXCNOVS.js +13 -0
- package/dist/layout-EE6GE46Y.js +17 -0
- package/dist/layout-G23F7LDH.js +9 -0
- package/dist/layout-HRBZPFCN.js +23 -0
- package/dist/layout-HWDSRX5E.js +20 -0
- package/dist/layout-HYZPWAK5.js +18 -0
- package/dist/layout-N76NR4ZO.js +19 -0
- package/dist/layout-OB3RI63S.js +14 -0
- package/dist/layout-S2QBYSK2.js +15 -0
- package/dist/layout-UM5F4DJB.js +15 -0
- package/dist/layout-search-OYV77HHS.js +1655 -0
- package/dist/load-data-EHDDZ5ZS.js +8 -0
- package/dist/palettes-PRJ2RI6D.js +56 -0
- package/dist/parser-2MFP2H2E.js +11 -0
- package/dist/parser-3STE62GB.js +21 -0
- package/dist/parser-4FL2CMDG.js +18 -0
- package/dist/parser-4OGOBJJ4.js +13 -0
- package/dist/parser-6BTRLKRZ.js +15 -0
- package/dist/parser-AQETEVRW.js +21 -0
- package/dist/parser-CFZD5IBL.js +12 -0
- package/dist/parser-FUSKFGZN.js +16 -0
- package/dist/parser-I6KXEYFK.js +13 -0
- package/dist/parser-IXSZZQHY.js +18 -0
- package/dist/parser-JAL2HD4I.js +13 -0
- package/dist/parser-KNSQSKQO.js +20 -0
- package/dist/parser-N5O4IHUN.js +13 -0
- package/dist/parser-NGU3ETO6.js +16 -0
- package/dist/parser-NRAI6O25.js +19 -0
- package/dist/parser-O5J4VBII.js +11 -0
- package/dist/parser-OV7NOBW6.js +21 -0
- package/dist/parser-PQ3POX45.js +23 -0
- package/dist/parser-TFZFBVWN.js +11 -0
- package/dist/parser-TRTHDFPP.js +18 -0
- package/dist/parser-VQP2UJ6W.js +11 -0
- package/dist/parser-XDVELHRK.js +13 -0
- package/dist/parser-XKRP7QKP.js +11 -0
- package/dist/parser-Y6WTBU76.js +14 -0
- package/dist/parser-ZSDPZYQP.js +12 -0
- package/dist/renderer-2XQQQ6QR.js +28 -0
- package/dist/renderer-5NDVNDAZ.js +26 -0
- package/dist/renderer-6EEZHMH4.js +26 -0
- package/dist/renderer-6W5462RB.js +43 -0
- package/dist/renderer-7MVLWWQD.js +22 -0
- package/dist/renderer-AWWAF6XD.js +33 -0
- package/dist/renderer-BYCNMBF7.js +34 -0
- package/dist/renderer-CLJHQPBJ.js +29 -0
- package/dist/renderer-GHPZMFU2.js +15 -0
- package/dist/renderer-JGBKUCZD.js +16 -0
- package/dist/renderer-KQB7UGDS.js +19 -0
- package/dist/renderer-PGX2TKVS.js +24 -0
- package/dist/renderer-QIWVHWZO.js +15 -0
- package/dist/renderer-RPOA5YPZ.js +35 -0
- package/dist/renderer-SMIBCRVB.js +24 -0
- package/dist/renderer-T7YKC5VP.js +28 -0
- package/dist/renderer-TOCOVLHS.js +37 -0
- package/dist/renderer-UWA5XS74.js +39 -0
- package/dist/renderer-VACVQYML.js +25 -0
- package/dist/renderer-W4M6QLIJ.js +37 -0
- package/dist/renderer-WZRREQ2P.js +23 -0
- package/dist/renderer-YY2OSF6E.js +27 -0
- package/dist/renderer-Z7I3W2PP.js +24 -0
- package/dist/renderer-ZGNTUWC4.js +22 -0
- package/dist/renderer-ZTR3DER3.js +19 -0
- package/dist/renderer-radial-C32GPJQ7.js +21 -0
- package/dist/resolver-NOAA7ID7.js +13 -0
- package/dist/state-collapse-HCGD6IVJ.js +8 -0
- package/dist/state-parser-Z2V23ATR.js +18 -0
- package/dist/state-renderer-RFYHSP4K.js +34 -0
- package/dist/themes-1-CuKpeH.d.ts +908 -0
- package/package.json +19 -70
- package/dist/advanced.cjs +0 -71648
- package/dist/advanced.d.cts +0 -6571
- package/dist/auto.cjs +0 -70648
- package/dist/auto.d.cts +0 -54
- package/dist/block.cjs +0 -70208
- package/dist/block.d.cts +0 -115
- package/dist/editor.d.cts +0 -26
- package/dist/element.cjs +0 -70530
- package/dist/element.d.cts +0 -62
- package/dist/highlight.cjs +0 -852
- package/dist/highlight.d.cts +0 -49
- package/dist/index.cjs +0 -70491
- package/dist/index.d.cts +0 -626
- package/dist/pert.cjs +0 -325
- package/dist/pert.d.cts +0 -559
- package/src/advanced.ts +0 -873
- package/src/arc/parser.ts +0 -15
- package/src/arc/renderer.ts +0 -633
- package/src/auto/index.ts +0 -621
- package/src/auto/shared.ts +0 -370
- package/src/auto/styles.ts +0 -73
- package/src/block/layout.ts +0 -198
- package/src/block/renderer.ts +0 -484
- package/src/block/types.ts +0 -67
- package/src/boxes-and-lines/collapse.ts +0 -96
- package/src/boxes-and-lines/focus.ts +0 -257
- package/src/boxes-and-lines/label-placement.ts +0 -339
- package/src/boxes-and-lines/layout-grouped.ts +0 -912
- package/src/boxes-and-lines/layout-layered.ts +0 -722
- package/src/boxes-and-lines/layout-search.ts +0 -1678
- package/src/boxes-and-lines/layout.ts +0 -398
- package/src/boxes-and-lines/parser.ts +0 -1181
- package/src/boxes-and-lines/renderer.ts +0 -1465
- package/src/boxes-and-lines/types.ts +0 -66
- package/src/c4/parser.ts +0 -1158
- package/src/c4/renderer.ts +0 -2008
- package/src/c4/types.ts +0 -89
- package/src/chart-type-registry.ts +0 -529
- package/src/chart-types.ts +0 -225
- package/src/chart.ts +0 -685
- package/src/charts-d3/bar.ts +0 -338
- package/src/charts-d3/chord.ts +0 -140
- package/src/charts-d3/function.ts +0 -147
- package/src/charts-d3/funnel.ts +0 -104
- package/src/charts-d3/heatmap.ts +0 -145
- package/src/charts-d3/index.ts +0 -337
- package/src/charts-d3/interactions.ts +0 -477
- package/src/charts-d3/line.ts +0 -344
- package/src/charts-d3/mount.ts +0 -151
- package/src/charts-d3/pie.ts +0 -117
- package/src/charts-d3/polar.ts +0 -89
- package/src/charts-d3/radar.ts +0 -0
- package/src/charts-d3/sankey.ts +0 -0
- package/src/charts-d3/scatter.ts +0 -185
- package/src/charts-d3/shared.ts +0 -208
- package/src/class/layout.ts +0 -326
- package/src/class/parser.ts +0 -635
- package/src/class/renderer.ts +0 -793
- package/src/class/types.ts +0 -58
- package/src/cli-banner.ts +0 -106
- package/src/cli.ts +0 -1080
- package/src/colors-diagnostics.ts +0 -35
- package/src/colors.ts +0 -379
- package/src/completion-types.ts +0 -27
- package/src/completion.ts +0 -2668
- package/src/cycle/layout.ts +0 -1026
- package/src/cycle/parser.ts +0 -387
- package/src/cycle/renderer.ts +0 -653
- package/src/cycle/types.ts +0 -101
- package/src/d3.ts +0 -1434
- package/src/data-chart-parser.ts +0 -1007
- package/src/dgmo-router.ts +0 -296
- package/src/diagnostics-registry.ts +0 -108
- package/src/diagnostics.ts +0 -0
- package/src/dimensions.ts +0 -20
- package/src/directives-registry.ts +0 -396
- package/src/editor/dgmo.grammar +0 -76
- package/src/editor/dgmo.grammar.d.ts +0 -2
- package/src/editor/dgmo.grammar.js +0 -18
- package/src/editor/dgmo.grammar.terms.d.ts +0 -5
- package/src/editor/dgmo.grammar.terms.js +0 -35
- package/src/editor/highlight-api.ts +0 -596
- package/src/editor/highlight.ts +0 -36
- package/src/editor/index.ts +0 -27
- package/src/editor/keywords.ts +0 -128
- package/src/editor/tokens.ts +0 -30
- package/src/element/index.ts +0 -432
- package/src/embed/css.ts +0 -312
- package/src/embed/escape.ts +0 -15
- package/src/embed/index.ts +0 -280
- package/src/er/classify.ts +0 -228
- package/src/er/layout.ts +0 -530
- package/src/er/parser.ts +0 -750
- package/src/er/renderer.ts +0 -725
- package/src/er/types.ts +0 -52
- package/src/error-card.ts +0 -269
- package/src/event-line/diagnostics.ts +0 -117
- package/src/event-line/parser.ts +0 -643
- package/src/event-line/renderer.ts +0 -1742
- package/src/event-line/types.ts +0 -74
- package/src/fonts.ts +0 -3
- package/src/gantt/parser.ts +0 -1641
- package/src/gantt/renderer.ts +0 -3787
- package/src/gantt/resolver.ts +0 -172
- package/src/gantt/types.ts +0 -206
- package/src/graph/diagnostics.ts +0 -64
- package/src/graph/edge-spline.ts +0 -29
- package/src/graph/flowchart-parser.ts +0 -759
- package/src/graph/flowchart-renderer.ts +0 -817
- package/src/graph/layout.ts +0 -472
- package/src/graph/notes.ts +0 -21
- package/src/graph/state-collapse.ts +0 -78
- package/src/graph/state-parser.ts +0 -574
- package/src/graph/state-renderer.ts +0 -653
- package/src/graph/types.ts +0 -65
- package/src/index.ts +0 -261
- package/src/infra/compute.ts +0 -1385
- package/src/infra/layout.ts +0 -888
- package/src/infra/parser.ts +0 -1234
- package/src/infra/renderer.ts +0 -2534
- package/src/infra/roles.ts +0 -75
- package/src/infra/types.ts +0 -216
- package/src/infra/validation.ts +0 -201
- package/src/journey-map/layout.ts +0 -490
- package/src/journey-map/parser.ts +0 -557
- package/src/journey-map/renderer.ts +0 -1580
- package/src/journey-map/types.ts +0 -47
- package/src/kanban/mutations.ts +0 -175
- package/src/kanban/parser.ts +0 -509
- package/src/kanban/renderer.ts +0 -1449
- package/src/kanban/types.ts +0 -39
- package/src/label-layout.ts +0 -368
- package/src/map/colorize.ts +0 -54
- package/src/map/completion.ts +0 -316
- package/src/map/context-labels.ts +0 -609
- package/src/map/data/PROVENANCE.json +0 -1
- package/src/map/data/README.md +0 -40
- package/src/map/data/airport-collisions.json +0 -1
- package/src/map/data/airports.json +0 -1
- package/src/map/data/gazetteer.json +0 -1
- package/src/map/data/lakes.json +0 -1
- package/src/map/data/mountain-ranges.json +0 -1
- package/src/map/data/na-lakes.json +0 -1
- package/src/map/data/na-land.json +0 -1
- package/src/map/data/region-names.json +0 -1
- package/src/map/data/rivers.json +0 -1
- package/src/map/data/types.ts +0 -121
- package/src/map/data/us-states.json +0 -1
- package/src/map/data/water-bodies.json +0 -1
- package/src/map/data/world-coarse.json +0 -1
- package/src/map/data/world-detail.json +0 -1
- package/src/map/diagnostics.ts +0 -134
- package/src/map/dimensions.ts +0 -150
- package/src/map/geo-query.ts +0 -295
- package/src/map/geo.ts +0 -438
- package/src/map/invert.ts +0 -111
- package/src/map/layout.ts +0 -5069
- package/src/map/legend-band.ts +0 -127
- package/src/map/load-data.ts +0 -186
- package/src/map/parser.ts +0 -783
- package/src/map/renderer.ts +0 -1445
- package/src/map/resolved-types.ts +0 -160
- package/src/map/resolver.ts +0 -1146
- package/src/map/types.ts +0 -194
- package/src/mindmap/collapse.ts +0 -67
- package/src/mindmap/layout.ts +0 -649
- package/src/mindmap/parser.ts +0 -430
- package/src/mindmap/renderer.ts +0 -637
- package/src/mindmap/text-wrap.ts +0 -218
- package/src/mindmap/types.ts +0 -56
- package/src/org/collapse.ts +0 -151
- package/src/org/layout.ts +0 -1262
- package/src/org/parser.ts +0 -519
- package/src/org/renderer.ts +0 -866
- package/src/org/resolver.ts +0 -636
- package/src/palettes/atlas.ts +0 -77
- package/src/palettes/blueprint.ts +0 -73
- package/src/palettes/catppuccin.ts +0 -84
- package/src/palettes/color-utils.ts +0 -443
- package/src/palettes/index.ts +0 -67
- package/src/palettes/nord.ts +0 -67
- package/src/palettes/registry.ts +0 -114
- package/src/palettes/slate.ts +0 -73
- package/src/palettes/tidewater.ts +0 -73
- package/src/palettes/tokyo-night.ts +0 -86
- package/src/palettes/types.ts +0 -88
- package/src/pert/analyzer.ts +0 -1183
- package/src/pert/diagnostics.ts +0 -110
- package/src/pert/index.ts +0 -43
- package/src/pert/internal.ts +0 -252
- package/src/pert/layout.ts +0 -971
- package/src/pert/monte-carlo.ts +0 -446
- package/src/pert/parser.ts +0 -1606
- package/src/pert/renderer.ts +0 -4009
- package/src/pert/share-normalize.ts +0 -62
- package/src/pert/types.ts +0 -604
- package/src/pyramid/parser.ts +0 -185
- package/src/pyramid/renderer.ts +0 -768
- package/src/pyramid/types.ts +0 -28
- package/src/quadrant/parser.ts +0 -18
- package/src/quadrant/renderer.ts +0 -638
- package/src/raci/diagnostics.ts +0 -213
- package/src/raci/index.ts +0 -23
- package/src/raci/mutations.ts +0 -321
- package/src/raci/parser.ts +0 -699
- package/src/raci/renderer.ts +0 -1627
- package/src/raci/types.ts +0 -82
- package/src/raci/variants.ts +0 -320
- package/src/render.ts +0 -268
- package/src/ring/parser.ts +0 -212
- package/src/ring/renderer.ts +0 -490
- package/src/ring/types.ts +0 -27
- package/src/sequence/collapse.ts +0 -174
- package/src/sequence/parser.ts +0 -1596
- package/src/sequence/participant-inference.ts +0 -152
- package/src/sequence/renderer.ts +0 -3168
- package/src/sequence/tag-resolution.ts +0 -164
- package/src/sharing.ts +0 -211
- package/src/sitemap/collapse.ts +0 -100
- package/src/sitemap/layout.ts +0 -925
- package/src/sitemap/parser.ts +0 -755
- package/src/sitemap/renderer.ts +0 -828
- package/src/sitemap/types.ts +0 -42
- package/src/slope/parser.ts +0 -18
- package/src/slope/renderer.ts +0 -378
- package/src/swimlane/diagnostics.ts +0 -94
- package/src/swimlane/layout.ts +0 -597
- package/src/swimlane/parser.ts +0 -613
- package/src/swimlane/renderer.ts +0 -681
- package/src/swimlane/types.ts +0 -151
- package/src/tech-radar/interactive.ts +0 -1129
- package/src/tech-radar/layout.ts +0 -197
- package/src/tech-radar/parser.ts +0 -436
- package/src/tech-radar/renderer.ts +0 -1239
- package/src/tech-radar/shared.ts +0 -151
- package/src/tech-radar/types.ts +0 -86
- package/src/themes.ts +0 -22
- package/src/timeline/parser.ts +0 -472
- package/src/timeline/renderer.ts +0 -3024
- package/src/timeline/types.ts +0 -33
- package/src/timeline/viz-parser.ts +0 -21
- package/src/treemap/diagnostics.ts +0 -62
- package/src/treemap/layout-radial.ts +0 -233
- package/src/treemap/layout.ts +0 -189
- package/src/treemap/parser.ts +0 -463
- package/src/treemap/renderer-radial.ts +0 -438
- package/src/treemap/renderer.ts +0 -572
- package/src/treemap/treemap-shared.ts +0 -309
- package/src/treemap/types.ts +0 -60
- package/src/utils/arrow-markers.ts +0 -51
- package/src/utils/arrows-diagnostics.ts +0 -62
- package/src/utils/arrows.ts +0 -227
- package/src/utils/brand.ts +0 -61
- package/src/utils/card.ts +0 -183
- package/src/utils/collapse-engine/tree-edges.ts +0 -115
- package/src/utils/collapse-engine/tree.ts +0 -117
- package/src/utils/d3-helpers.ts +0 -219
- package/src/utils/d3-types.ts +0 -9
- package/src/utils/description-helpers.ts +0 -38
- package/src/utils/duration.ts +0 -312
- package/src/utils/export-container.ts +0 -41
- package/src/utils/expr-eval.ts +0 -27
- package/src/utils/fit-canvas.ts +0 -64
- package/src/utils/hover-styles.ts +0 -673
- package/src/utils/inline-markdown.ts +0 -96
- package/src/utils/legend-constants.ts +0 -48
- package/src/utils/legend-d3.ts +0 -618
- package/src/utils/legend-integration.ts +0 -107
- package/src/utils/legend-layout.ts +0 -776
- package/src/utils/legend-svg.ts +0 -214
- package/src/utils/legend-types.ts +0 -272
- package/src/utils/name-normalize.ts +0 -163
- package/src/utils/note-box/constants.ts +0 -25
- package/src/utils/note-box/index.ts +0 -11
- package/src/utils/note-box/metrics.ts +0 -90
- package/src/utils/note-box/svg.ts +0 -331
- package/src/utils/notes/bounds.ts +0 -30
- package/src/utils/notes/build.ts +0 -131
- package/src/utils/notes/index.ts +0 -18
- package/src/utils/notes/model.ts +0 -19
- package/src/utils/notes/parse.ts +0 -131
- package/src/utils/notes/place.ts +0 -177
- package/src/utils/notes/resolve.ts +0 -88
- package/src/utils/number-format.ts +0 -36
- package/src/utils/parsing.ts +0 -953
- package/src/utils/reserved-key-registry.ts +0 -239
- package/src/utils/safe-href.ts +0 -38
- package/src/utils/scaling.ts +0 -97
- package/src/utils/svg-embed.ts +0 -251
- package/src/utils/tag-groups.ts +0 -607
- package/src/utils/text-measure.ts +0 -122
- package/src/utils/title-constants.ts +0 -24
- package/src/utils/visual-conventions.ts +0 -61
- package/src/utils/wrapped-desc.ts +0 -87
- package/src/venn/parser.ts +0 -18
- package/src/venn/renderer.ts +0 -1047
- package/src/version-control/diagnostics.ts +0 -67
- package/src/version-control/parser.ts +0 -544
- package/src/version-control/renderer.ts +0 -724
- package/src/version-control/types.ts +0 -100
- package/src/visualizations/parse.ts +0 -1560
- package/src/visualizations/types.ts +0 -262
- package/src/wireframe/layout.ts +0 -479
- package/src/wireframe/parser.ts +0 -1114
- package/src/wireframe/renderer.ts +0 -1318
- package/src/wireframe/types.ts +0 -110
- package/src/wordcloud/parser.ts +0 -18
- package/src/wordcloud/renderer.ts +0 -357
package/src/org/parser.ts
DELETED
|
@@ -1,519 +0,0 @@
|
|
|
1
|
-
import type { PaletteColors } from '../palettes';
|
|
2
|
-
import type { DgmoError } from '../diagnostics';
|
|
3
|
-
import {
|
|
4
|
-
formatDgmoError,
|
|
5
|
-
makeDgmoError,
|
|
6
|
-
makeFail,
|
|
7
|
-
suggest,
|
|
8
|
-
} from '../diagnostics';
|
|
9
|
-
import { ORG_REGISTRY, withTagAliases } from '../utils/reserved-key-registry';
|
|
10
|
-
import type { TagGroup } from '../utils/tag-groups';
|
|
11
|
-
import type { Writable } from '../utils/brand';
|
|
12
|
-
import {
|
|
13
|
-
isTagBlockHeading,
|
|
14
|
-
matchTagBlockHeading,
|
|
15
|
-
validateTagValues,
|
|
16
|
-
validateTagGroupNames,
|
|
17
|
-
stripDefaultModifier,
|
|
18
|
-
finalizeAutoTagColors,
|
|
19
|
-
AUTO_TAG_COLOR_SENTINEL,
|
|
20
|
-
tagAttrKey,
|
|
21
|
-
} from '../utils/tag-groups';
|
|
22
|
-
import {
|
|
23
|
-
measureIndent,
|
|
24
|
-
extractColor,
|
|
25
|
-
splitNameAndMeta,
|
|
26
|
-
parseFirstLine,
|
|
27
|
-
OPTION_NOCOLON_RE,
|
|
28
|
-
warnUnknownMetaKeys,
|
|
29
|
-
} from '../utils/parsing';
|
|
30
|
-
import { normalizeName } from '../utils/name-normalize';
|
|
31
|
-
|
|
32
|
-
// ============================================================
|
|
33
|
-
// Types
|
|
34
|
-
// ============================================================
|
|
35
|
-
|
|
36
|
-
export interface OrgNode {
|
|
37
|
-
readonly id: string;
|
|
38
|
-
readonly label: string;
|
|
39
|
-
readonly metadata: Readonly<Record<string, string>>;
|
|
40
|
-
readonly children: readonly OrgNode[];
|
|
41
|
-
readonly parentId: string | null;
|
|
42
|
-
readonly isContainer: boolean;
|
|
43
|
-
readonly lineNumber: number;
|
|
44
|
-
readonly color?: string;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export interface ParsedOrg {
|
|
48
|
-
readonly title: string | null;
|
|
49
|
-
readonly titleLineNumber: number | null;
|
|
50
|
-
readonly roots: readonly OrgNode[];
|
|
51
|
-
readonly tagGroups: readonly TagGroup[];
|
|
52
|
-
readonly options: Readonly<Record<string, string>>;
|
|
53
|
-
readonly diagnostics: readonly DgmoError[];
|
|
54
|
-
readonly error: string | null;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// ============================================================
|
|
58
|
-
// Helpers
|
|
59
|
-
// ============================================================
|
|
60
|
-
|
|
61
|
-
const CONTAINER_RE = /^\[([^\]]+)\]$/;
|
|
62
|
-
const METADATA_RE = /^([^:]+):\s*(.+)$/;
|
|
63
|
-
|
|
64
|
-
/** Known org chart options (key-value). */
|
|
65
|
-
const KNOWN_OPTIONS = new Set([
|
|
66
|
-
'sub-node-label',
|
|
67
|
-
'hide',
|
|
68
|
-
'show-sub-node-count',
|
|
69
|
-
'active-tag',
|
|
70
|
-
]);
|
|
71
|
-
/** Known org chart boolean options (bare keyword = on). */
|
|
72
|
-
const KNOWN_BOOLEANS = new Set([
|
|
73
|
-
'show-sub-node-count',
|
|
74
|
-
'direction-tb',
|
|
75
|
-
'solid-fill',
|
|
76
|
-
'no-title',
|
|
77
|
-
]);
|
|
78
|
-
|
|
79
|
-
// ============================================================
|
|
80
|
-
// Inference
|
|
81
|
-
// ============================================================
|
|
82
|
-
|
|
83
|
-
/** Returns true if content contains tag group headings (`tag …`), suggesting an org chart. */
|
|
84
|
-
export function looksLikeOrg(content: string): boolean {
|
|
85
|
-
for (const line of content.split('\n')) {
|
|
86
|
-
const trimmed = line.trim();
|
|
87
|
-
if (!trimmed || trimmed.startsWith('//')) continue;
|
|
88
|
-
if (isTagBlockHeading(trimmed)) return true;
|
|
89
|
-
}
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// ============================================================
|
|
94
|
-
// Parser
|
|
95
|
-
// ============================================================
|
|
96
|
-
|
|
97
|
-
export function parseOrg(content: string, palette?: PaletteColors): ParsedOrg {
|
|
98
|
-
const options: Record<string, string> = {};
|
|
99
|
-
const result: Writable<ParsedOrg> = {
|
|
100
|
-
title: null,
|
|
101
|
-
titleLineNumber: null,
|
|
102
|
-
roots: [],
|
|
103
|
-
tagGroups: [],
|
|
104
|
-
options,
|
|
105
|
-
diagnostics: [],
|
|
106
|
-
error: null,
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
const fail = makeFail(result);
|
|
110
|
-
|
|
111
|
-
/** Push a recoverable error and continue parsing. */
|
|
112
|
-
const pushError = (line: number, message: string): void => {
|
|
113
|
-
const diag = makeDgmoError(line, message);
|
|
114
|
-
result.diagnostics.push(diag);
|
|
115
|
-
if (!result.error) result.error = formatDgmoError(diag);
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
/** Push a non-fatal warning (does not set result.error). */
|
|
119
|
-
const pushWarning = (line: number, message: string): void => {
|
|
120
|
-
result.diagnostics.push(makeDgmoError(line, message, 'warning'));
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
if (!content?.trim()) {
|
|
124
|
-
return fail(0, 'No content provided');
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
const lines = content.split('\n');
|
|
128
|
-
let contentStarted = false;
|
|
129
|
-
let nodeCounter = 0;
|
|
130
|
-
let containerCounter = 0;
|
|
131
|
-
|
|
132
|
-
// Tag group parsing state
|
|
133
|
-
let currentTagGroup: Writable<TagGroup> | null = null;
|
|
134
|
-
|
|
135
|
-
// Alias map: alias (lowercased) → group name (lowercased)
|
|
136
|
-
// metaAliasMap: tag-group metadata-key aliases (e.g. `p` → `priority`).
|
|
137
|
-
// Distinct from nameAliasMap below per the A1 convention.
|
|
138
|
-
const metaAliasMap = new Map<string, string>();
|
|
139
|
-
// nameAliasMap: TD-18 entity-name aliases (e.g. `pm` → `Product Manager`).
|
|
140
|
-
// Per C8: per-parse, never persisted, fresh each parse.
|
|
141
|
-
const nameAliasMap = new Map<string, string>();
|
|
142
|
-
|
|
143
|
-
// Indent stack for hierarchy tracking
|
|
144
|
-
// Each entry: { node, indent }
|
|
145
|
-
const indentStack: { node: Writable<OrgNode>; indent: number }[] = [];
|
|
146
|
-
|
|
147
|
-
for (let i = 0; i < lines.length; i++) {
|
|
148
|
-
const line = lines[i]!; // In-bounds by loop guard.
|
|
149
|
-
const lineNumber = i + 1;
|
|
150
|
-
const trimmed = line.trim();
|
|
151
|
-
|
|
152
|
-
// Skip empty lines
|
|
153
|
-
if (!trimmed) {
|
|
154
|
-
// Empty line ends a tag group
|
|
155
|
-
if (currentTagGroup) {
|
|
156
|
-
currentTagGroup = null;
|
|
157
|
-
}
|
|
158
|
-
continue;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
// Skip comments
|
|
162
|
-
if (trimmed.startsWith('//')) continue;
|
|
163
|
-
|
|
164
|
-
// --- Header phase ---
|
|
165
|
-
|
|
166
|
-
// Extract chart type + title from first line (e.g. `org My Org Chart`)
|
|
167
|
-
if (!contentStarted) {
|
|
168
|
-
const firstLine = parseFirstLine(trimmed);
|
|
169
|
-
if (firstLine) {
|
|
170
|
-
if (firstLine.chartType !== 'org') {
|
|
171
|
-
const allTypes = [
|
|
172
|
-
'org',
|
|
173
|
-
'class',
|
|
174
|
-
'flowchart',
|
|
175
|
-
'sequence',
|
|
176
|
-
'er',
|
|
177
|
-
'bar',
|
|
178
|
-
'line',
|
|
179
|
-
'pie',
|
|
180
|
-
'scatter',
|
|
181
|
-
'sankey',
|
|
182
|
-
'venn',
|
|
183
|
-
'timeline',
|
|
184
|
-
'arc',
|
|
185
|
-
'slope',
|
|
186
|
-
];
|
|
187
|
-
let msg = `Expected chart type "org", got "${firstLine.chartType}"`;
|
|
188
|
-
const hint = suggest(firstLine.chartType, allTypes);
|
|
189
|
-
if (hint) msg += `. ${hint}`;
|
|
190
|
-
return fail(lineNumber, msg);
|
|
191
|
-
}
|
|
192
|
-
if (firstLine.title) {
|
|
193
|
-
result.title = firstLine.title;
|
|
194
|
-
result.titleLineNumber = lineNumber;
|
|
195
|
-
}
|
|
196
|
-
continue;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// Tag group heading — `tag Name as <alias>`.
|
|
201
|
-
// Must be checked BEFORE OPTION_RE to prevent `tag: Rank` being swallowed as option `tag=Rank`
|
|
202
|
-
const tagBlockMatch = matchTagBlockHeading(trimmed);
|
|
203
|
-
if (tagBlockMatch) {
|
|
204
|
-
if (contentStarted) {
|
|
205
|
-
pushError(lineNumber, 'Tag groups must appear before org content');
|
|
206
|
-
continue;
|
|
207
|
-
}
|
|
208
|
-
currentTagGroup = {
|
|
209
|
-
name: tagBlockMatch.name,
|
|
210
|
-
...(tagBlockMatch.alias !== undefined && {
|
|
211
|
-
alias: tagBlockMatch.alias,
|
|
212
|
-
}),
|
|
213
|
-
entries: [],
|
|
214
|
-
lineNumber,
|
|
215
|
-
};
|
|
216
|
-
if (tagBlockMatch.alias) {
|
|
217
|
-
metaAliasMap.set(
|
|
218
|
-
normalizeName(tagBlockMatch.alias),
|
|
219
|
-
tagAttrKey(tagBlockMatch.name)
|
|
220
|
-
);
|
|
221
|
-
}
|
|
222
|
-
// §1.4 dispatch: register canonical name so `<name>:` triggers
|
|
223
|
-
// the metadata cut even without an explicit `as <alias>`.
|
|
224
|
-
metaAliasMap.set(
|
|
225
|
-
normalizeName(tagBlockMatch.name),
|
|
226
|
-
tagAttrKey(tagBlockMatch.name)
|
|
227
|
-
);
|
|
228
|
-
result.tagGroups.push(currentTagGroup);
|
|
229
|
-
continue;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
// Generic header options (space-separated: `key value` or bare boolean `key`)
|
|
233
|
-
// Only match non-indented lines with known option keys
|
|
234
|
-
if (!contentStarted && !currentTagGroup && measureIndent(line) === 0) {
|
|
235
|
-
const optMatch = trimmed.match(OPTION_NOCOLON_RE);
|
|
236
|
-
if (optMatch) {
|
|
237
|
-
// Capture groups 1 and 2 guaranteed by OPTION_NOCOLON_RE match.
|
|
238
|
-
const key = optMatch[1]!.trim().toLowerCase();
|
|
239
|
-
if (KNOWN_OPTIONS.has(key)) {
|
|
240
|
-
options[key] = optMatch[2]!.trim();
|
|
241
|
-
continue;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
// Bare boolean option (single keyword, no value)
|
|
245
|
-
if (KNOWN_BOOLEANS.has(trimmed.toLowerCase())) {
|
|
246
|
-
options[trimmed.toLowerCase()] = 'on';
|
|
247
|
-
continue;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
// Tag group entries (indented Value color under tag heading)
|
|
252
|
-
// First entry is the default unless another is marked `default`
|
|
253
|
-
if (currentTagGroup && !contentStarted) {
|
|
254
|
-
const indent = measureIndent(line);
|
|
255
|
-
if (indent > 0) {
|
|
256
|
-
const { text: cleanEntry, isDefault } = stripDefaultModifier(trimmed);
|
|
257
|
-
const { label, color } = extractColor(
|
|
258
|
-
cleanEntry,
|
|
259
|
-
palette,
|
|
260
|
-
result.diagnostics,
|
|
261
|
-
lineNumber
|
|
262
|
-
);
|
|
263
|
-
// Bare value (no explicit color) → keep it; the post-parse
|
|
264
|
-
// finalize pass assigns a deterministic palette color.
|
|
265
|
-
if (isDefault) {
|
|
266
|
-
currentTagGroup.defaultValue = label;
|
|
267
|
-
} else if (currentTagGroup.entries.length === 0) {
|
|
268
|
-
currentTagGroup.defaultValue = label;
|
|
269
|
-
}
|
|
270
|
-
currentTagGroup.entries.push({
|
|
271
|
-
value: label,
|
|
272
|
-
color: color ?? AUTO_TAG_COLOR_SENTINEL,
|
|
273
|
-
lineNumber,
|
|
274
|
-
});
|
|
275
|
-
continue;
|
|
276
|
-
}
|
|
277
|
-
// Non-indented line after tag group — fall through to content parsing
|
|
278
|
-
currentTagGroup = null; // eslint-disable-line no-useless-assignment
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
// --- Org content phase ---
|
|
282
|
-
contentStarted = true;
|
|
283
|
-
currentTagGroup = null;
|
|
284
|
-
|
|
285
|
-
const indent = measureIndent(line);
|
|
286
|
-
|
|
287
|
-
// Check for container syntax: [Team Name]
|
|
288
|
-
const containerMatch = trimmed.match(CONTAINER_RE);
|
|
289
|
-
|
|
290
|
-
// Check for indented metadata syntax: `key: value` with key at start.
|
|
291
|
-
// A line like `Alice Park role: Senior` is a NODE with same-line
|
|
292
|
-
// metadata (§1.4), not indented metadata for the parent — distinguish
|
|
293
|
-
// by requiring the key (chars before the first `:`) to be a single
|
|
294
|
-
// identifier-shaped token. Anything with embedded spaces in the key
|
|
295
|
-
// region is a node line.
|
|
296
|
-
const metadataMatch = (() => {
|
|
297
|
-
if (trimmed.includes('|')) return null;
|
|
298
|
-
const m = trimmed.match(METADATA_RE);
|
|
299
|
-
if (!m) return null;
|
|
300
|
-
const keyRegion = m[1]!.trim();
|
|
301
|
-
// Bare-metadata key must be a single word (no embedded spaces).
|
|
302
|
-
// A node line has the label first, then the metadata key.
|
|
303
|
-
if (/\s/.test(keyRegion)) return null;
|
|
304
|
-
return m;
|
|
305
|
-
})();
|
|
306
|
-
|
|
307
|
-
if (containerMatch) {
|
|
308
|
-
// It's a container node — supports `as <alias>` postfix per TD-18.
|
|
309
|
-
// Capture group 1 guaranteed by CONTAINER_RE match.
|
|
310
|
-
const rawLabel = containerMatch[1]!.trim();
|
|
311
|
-
const asMatch = rawLabel.match(
|
|
312
|
-
/^(.*?)\s+as\s+([A-Za-z][A-Za-z0-9_]{0,11})\s*$/
|
|
313
|
-
);
|
|
314
|
-
// Capture groups 1 and 2 guaranteed by the regex above when asMatch is truthy.
|
|
315
|
-
const label = asMatch ? asMatch[1]!.trim() : rawLabel;
|
|
316
|
-
|
|
317
|
-
containerCounter++;
|
|
318
|
-
const containerId = `container-${containerCounter}`;
|
|
319
|
-
if (asMatch) nameAliasMap.set(asMatch[2]!, containerId);
|
|
320
|
-
const node: Writable<OrgNode> = {
|
|
321
|
-
id: containerId,
|
|
322
|
-
label,
|
|
323
|
-
metadata: {},
|
|
324
|
-
children: [],
|
|
325
|
-
parentId: null,
|
|
326
|
-
isContainer: true,
|
|
327
|
-
lineNumber,
|
|
328
|
-
};
|
|
329
|
-
|
|
330
|
-
attachNode(node, indent, indentStack, result);
|
|
331
|
-
} else if (metadataMatch && indentStack.length > 0) {
|
|
332
|
-
// It's a metadata line — attach to most recent node on stack at shallower indent
|
|
333
|
-
// Capture groups 1 and 2 guaranteed by METADATA_RE match.
|
|
334
|
-
const rawKey = metadataMatch[1]!.trim().toLowerCase();
|
|
335
|
-
const key = metaAliasMap.get(rawKey) ?? rawKey;
|
|
336
|
-
const value = metadataMatch[2]!.trim();
|
|
337
|
-
|
|
338
|
-
// Find the parent node: top of stack (the most recent node)
|
|
339
|
-
const parent = findMetadataParent(indent, indentStack);
|
|
340
|
-
if (!parent) {
|
|
341
|
-
pushError(
|
|
342
|
-
lineNumber,
|
|
343
|
-
"Metadata 'key: value' must be indented under a node — no node precedes it."
|
|
344
|
-
);
|
|
345
|
-
} else {
|
|
346
|
-
parent.metadata = { ...parent.metadata, [key]: value };
|
|
347
|
-
}
|
|
348
|
-
} else if (metadataMatch && indentStack.length === 0) {
|
|
349
|
-
// Metadata with no parent — could be a node label that happens to contain ':'
|
|
350
|
-
// Treat it as a node if it's at indent 0 and no nodes exist yet
|
|
351
|
-
// Otherwise it's an orphan metadata error
|
|
352
|
-
if (indent === 0) {
|
|
353
|
-
// Treat as a node label (e.g., "Dr. Smith: Surgeon" is a valid name)
|
|
354
|
-
const node = parseNodeLabel(
|
|
355
|
-
trimmed,
|
|
356
|
-
indent,
|
|
357
|
-
lineNumber,
|
|
358
|
-
palette,
|
|
359
|
-
++nodeCounter,
|
|
360
|
-
metaAliasMap,
|
|
361
|
-
result.diagnostics,
|
|
362
|
-
nameAliasMap
|
|
363
|
-
);
|
|
364
|
-
attachNode(node, indent, indentStack, result);
|
|
365
|
-
} else {
|
|
366
|
-
pushError(
|
|
367
|
-
lineNumber,
|
|
368
|
-
"Metadata 'key: value' must be indented under a node — no node precedes it."
|
|
369
|
-
);
|
|
370
|
-
}
|
|
371
|
-
} else {
|
|
372
|
-
// It's a node label — possibly with single-line metadata
|
|
373
|
-
const node = parseNodeLabel(
|
|
374
|
-
trimmed,
|
|
375
|
-
indent,
|
|
376
|
-
lineNumber,
|
|
377
|
-
palette,
|
|
378
|
-
++nodeCounter,
|
|
379
|
-
metaAliasMap,
|
|
380
|
-
result.diagnostics,
|
|
381
|
-
nameAliasMap
|
|
382
|
-
);
|
|
383
|
-
attachNode(node, indent, indentStack, result);
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
// Assign palette colors to bare (colorless) tag values before validation.
|
|
388
|
-
finalizeAutoTagColors(result.tagGroups as Writable<TagGroup>[], palette);
|
|
389
|
-
|
|
390
|
-
// Validate tag group values on nodes
|
|
391
|
-
if (result.tagGroups.length > 0) {
|
|
392
|
-
// Flatten all nodes for the shared validation utility
|
|
393
|
-
const allNodes: OrgNode[] = [];
|
|
394
|
-
const collectAll = (nodes: readonly OrgNode[]) => {
|
|
395
|
-
for (const node of nodes) {
|
|
396
|
-
allNodes.push(node);
|
|
397
|
-
collectAll(node.children);
|
|
398
|
-
}
|
|
399
|
-
};
|
|
400
|
-
collectAll(result.roots);
|
|
401
|
-
|
|
402
|
-
validateTagValues(allNodes, result.tagGroups, pushWarning, suggest);
|
|
403
|
-
validateTagGroupNames(result.tagGroups, pushWarning, pushError);
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
if (
|
|
407
|
-
result.roots.length === 0 &&
|
|
408
|
-
result.tagGroups.length === 0 &&
|
|
409
|
-
!result.error
|
|
410
|
-
) {
|
|
411
|
-
const diag = makeDgmoError(1, 'No nodes found in org chart');
|
|
412
|
-
result.diagnostics.push(diag);
|
|
413
|
-
result.error = formatDgmoError(diag);
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
return result;
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
// ============================================================
|
|
420
|
-
// Internal helpers
|
|
421
|
-
// ============================================================
|
|
422
|
-
|
|
423
|
-
function parseNodeLabel(
|
|
424
|
-
trimmed: string,
|
|
425
|
-
_indent: number,
|
|
426
|
-
lineNumber: number,
|
|
427
|
-
_palette: PaletteColors | undefined,
|
|
428
|
-
counter: number,
|
|
429
|
-
metaAliasMap: Map<string, string> = new Map(),
|
|
430
|
-
diagnostics?: DgmoError[],
|
|
431
|
-
nameAliasMap?: Map<string, string>
|
|
432
|
-
): Writable<OrgNode> {
|
|
433
|
-
// §1.4 unified metadata grammar — same-line cut.
|
|
434
|
-
const registry = withTagAliases(ORG_REGISTRY, new Set(metaAliasMap.keys()));
|
|
435
|
-
const id = `node-${counter}`;
|
|
436
|
-
const split = splitNameAndMeta(
|
|
437
|
-
trimmed,
|
|
438
|
-
registry,
|
|
439
|
-
metaAliasMap,
|
|
440
|
-
undefined,
|
|
441
|
-
diagnostics,
|
|
442
|
-
lineNumber
|
|
443
|
-
);
|
|
444
|
-
warnUnknownMetaKeys(
|
|
445
|
-
split.meta,
|
|
446
|
-
registry,
|
|
447
|
-
(msg) => diagnostics?.push(makeDgmoError(lineNumber, msg, 'warning')),
|
|
448
|
-
split.name
|
|
449
|
-
);
|
|
450
|
-
// Org labels do not use §1.5 trailing-token color (org uses an indented
|
|
451
|
-
// `color:` key). Restore the peeled color word back into the label so
|
|
452
|
-
// `Alice Park blue role: Senior` parses as label `Alice Park blue` with
|
|
453
|
-
// metadata only.
|
|
454
|
-
const label =
|
|
455
|
-
split.color !== undefined ? `${split.name} ${split.color}` : split.name;
|
|
456
|
-
if (split.alias) {
|
|
457
|
-
nameAliasMap?.set(normalizeName(split.alias), id);
|
|
458
|
-
}
|
|
459
|
-
const metadata: Record<string, string> = { ...split.meta };
|
|
460
|
-
|
|
461
|
-
return {
|
|
462
|
-
id,
|
|
463
|
-
label,
|
|
464
|
-
metadata,
|
|
465
|
-
children: [],
|
|
466
|
-
parentId: null,
|
|
467
|
-
isContainer: false,
|
|
468
|
-
lineNumber,
|
|
469
|
-
};
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
function attachNode(
|
|
473
|
-
node: Writable<OrgNode>,
|
|
474
|
-
indent: number,
|
|
475
|
-
indentStack: { node: Writable<OrgNode>; indent: number }[],
|
|
476
|
-
result: Writable<ParsedOrg>
|
|
477
|
-
): void {
|
|
478
|
-
// Pop stack entries with indent >= current indent
|
|
479
|
-
while (indentStack.length > 0) {
|
|
480
|
-
// In-bounds by while-loop length guard.
|
|
481
|
-
const top = indentStack[indentStack.length - 1]!;
|
|
482
|
-
if (top.indent < indent) break;
|
|
483
|
-
indentStack.pop();
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
if (indentStack.length > 0) {
|
|
487
|
-
// Stack top becomes parent — in-bounds by length guard.
|
|
488
|
-
const parent = indentStack[indentStack.length - 1]!.node;
|
|
489
|
-
node.parentId = parent.id;
|
|
490
|
-
parent.children.push(node);
|
|
491
|
-
} else {
|
|
492
|
-
// Top-level root
|
|
493
|
-
result.roots.push(node);
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
// Push new node onto stack
|
|
497
|
-
indentStack.push({ node, indent });
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
function findMetadataParent(
|
|
501
|
-
indent: number,
|
|
502
|
-
indentStack: { node: Writable<OrgNode>; indent: number }[]
|
|
503
|
-
): Writable<OrgNode> | null {
|
|
504
|
-
// Walk backward from the top of the stack to find the most recent node
|
|
505
|
-
// at a shallower indent than the metadata line
|
|
506
|
-
for (let i = indentStack.length - 1; i >= 0; i--) {
|
|
507
|
-
// In-bounds by reverse-for loop guard.
|
|
508
|
-
const entry = indentStack[i]!;
|
|
509
|
-
if (entry.indent < indent) {
|
|
510
|
-
return entry.node;
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
// If metadata is at same indent as top node, attach to top node
|
|
514
|
-
if (indentStack.length > 0) {
|
|
515
|
-
// In-bounds by length guard.
|
|
516
|
-
return indentStack[indentStack.length - 1]!.node;
|
|
517
|
-
}
|
|
518
|
-
return null;
|
|
519
|
-
}
|