@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/pert/monte-carlo.ts
DELETED
|
@@ -1,446 +0,0 @@
|
|
|
1
|
-
// ============================================================
|
|
2
|
-
// PERT — Monte Carlo simulation
|
|
3
|
-
// ============================================================
|
|
4
|
-
//
|
|
5
|
-
// Two entry points sharing one Beta-PERT sampler + one PRNG:
|
|
6
|
-
// simulateCanonical(N=10000) — for static export and "computing" runs
|
|
7
|
-
// simulateFast(N=300) — for the live duration scrubber
|
|
8
|
-
//
|
|
9
|
-
// Determinism: mulberry32 PRNG with explicit seed; same (seed, inputs)
|
|
10
|
-
// → same output across V8/JSC. CI tripwire snapshot pins the first
|
|
11
|
-
// 10 trials at seed=42.
|
|
12
|
-
|
|
13
|
-
import type {
|
|
14
|
-
ResolvedPert,
|
|
15
|
-
MonteCarloResult,
|
|
16
|
-
ResolvedActivity,
|
|
17
|
-
PertEdge,
|
|
18
|
-
} from './types';
|
|
19
|
-
import { unitToDays } from './internal';
|
|
20
|
-
import type { Duration } from '../gantt/types';
|
|
21
|
-
|
|
22
|
-
function lagDays(lag: Duration | null): number {
|
|
23
|
-
return lag === null ? 0 : lag.amount * unitToDays(lag.unit);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// ============================================================
|
|
27
|
-
// PRNG
|
|
28
|
-
// ============================================================
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* mulberry32: 32-bit seedable PRNG. Portable, deterministic, ~10 lines.
|
|
32
|
-
* Returns a function that yields [0, 1).
|
|
33
|
-
*/
|
|
34
|
-
export function mulberry32(seed: number): () => number {
|
|
35
|
-
let s = seed >>> 0;
|
|
36
|
-
return () => {
|
|
37
|
-
s = (s + 0x6d2b79f5) >>> 0;
|
|
38
|
-
let t = s;
|
|
39
|
-
t = Math.imul(t ^ (t >>> 15), t | 1);
|
|
40
|
-
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
|
|
41
|
-
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// ============================================================
|
|
46
|
-
// Beta-PERT sampler
|
|
47
|
-
// ============================================================
|
|
48
|
-
|
|
49
|
-
/** Box-Muller standard normal. */
|
|
50
|
-
function standardNormal(rng: () => number): number {
|
|
51
|
-
let u = 0;
|
|
52
|
-
let v = 0;
|
|
53
|
-
while (u === 0) u = rng();
|
|
54
|
-
while (v === 0) v = rng();
|
|
55
|
-
return Math.sqrt(-2 * Math.log(u)) * Math.cos(2 * Math.PI * v);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Marsaglia-Tsang gamma sampler. Valid for shape α ≥ 1; for α < 1 we
|
|
60
|
-
* boost via the standard `* U^(1/α)` trick. Beta-PERT always has
|
|
61
|
-
* α, β ≥ 1, so the boost path is rarely exercised in practice.
|
|
62
|
-
*/
|
|
63
|
-
function gamma(shape: number, rng: () => number): number {
|
|
64
|
-
if (shape < 1) {
|
|
65
|
-
const u = rng();
|
|
66
|
-
return gamma(shape + 1, rng) * Math.pow(u, 1 / shape);
|
|
67
|
-
}
|
|
68
|
-
const d = shape - 1 / 3;
|
|
69
|
-
const c = 1 / Math.sqrt(9 * d);
|
|
70
|
-
while (true) {
|
|
71
|
-
let x: number;
|
|
72
|
-
let v: number;
|
|
73
|
-
do {
|
|
74
|
-
x = standardNormal(rng);
|
|
75
|
-
v = 1 + c * x;
|
|
76
|
-
} while (v <= 0);
|
|
77
|
-
v = v * v * v;
|
|
78
|
-
const u = rng();
|
|
79
|
-
if (u < 1 - 0.0331 * x * x * x * x) return d * v;
|
|
80
|
-
if (Math.log(u) < (x * x) / 2 + d * (1 - v + Math.log(v))) return d * v;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function sampleBeta(alpha: number, beta: number, rng: () => number): number {
|
|
85
|
-
const x = gamma(alpha, rng);
|
|
86
|
-
const y = gamma(beta, rng);
|
|
87
|
-
return x / (x + y);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Sample one duration from a Beta-PERT distribution defined by (O, M, P).
|
|
92
|
-
* Zero-variance case (O = M = P) bypasses sampling deterministically.
|
|
93
|
-
*/
|
|
94
|
-
export function sampleBetaPert(
|
|
95
|
-
o: number,
|
|
96
|
-
m: number,
|
|
97
|
-
p: number,
|
|
98
|
-
rng: () => number
|
|
99
|
-
): number {
|
|
100
|
-
if (o === p) return m;
|
|
101
|
-
const range = p - o;
|
|
102
|
-
const alpha = 1 + (4 * (m - o)) / range;
|
|
103
|
-
const beta = 1 + (4 * (p - m)) / range;
|
|
104
|
-
return o + sampleBeta(alpha, beta, rng) * range;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// ============================================================
|
|
108
|
-
// Simulation
|
|
109
|
-
// ============================================================
|
|
110
|
-
|
|
111
|
-
interface ExpandedActivity {
|
|
112
|
-
id: string;
|
|
113
|
-
o: number;
|
|
114
|
-
m: number;
|
|
115
|
-
p: number;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
interface SimulationOptions {
|
|
119
|
-
trials: number;
|
|
120
|
-
seed: number;
|
|
121
|
-
/**
|
|
122
|
-
* When true, hard-error if any TBD activity blocks every path to the
|
|
123
|
-
* project end. When false (partial-graph mode), MC runs over the
|
|
124
|
-
* un-poisoned subgraph; downstream path samples treat poisoned
|
|
125
|
-
* activities as 0-duration.
|
|
126
|
-
*/
|
|
127
|
-
strict?: boolean;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Run N trials and accumulate per-activity criticality + completion
|
|
132
|
-
* percentiles + modal-longest-path.
|
|
133
|
-
*/
|
|
134
|
-
function simulate(
|
|
135
|
-
resolved: ResolvedPert,
|
|
136
|
-
expanded: ExpandedActivity[],
|
|
137
|
-
_predecessors: Map<string, string[]>,
|
|
138
|
-
_successors: Map<string, string[]>,
|
|
139
|
-
topo: string[],
|
|
140
|
-
terminals: string[],
|
|
141
|
-
poisoned: Set<string>,
|
|
142
|
-
opts: SimulationOptions
|
|
143
|
-
): MonteCarloResult {
|
|
144
|
-
const rng = mulberry32(opts.seed);
|
|
145
|
-
const expById = new Map<string, ExpandedActivity>();
|
|
146
|
-
for (const e of expanded) expById.set(e.id, e);
|
|
147
|
-
|
|
148
|
-
const completionTimes: number[] = new Array(opts.trials);
|
|
149
|
-
const criticalityCount = new Map<string, number>();
|
|
150
|
-
for (const id of topo) criticalityCount.set(id, 0);
|
|
151
|
-
|
|
152
|
-
// Modal-longest-path tracking — keyed by tuple-as-string for path identity.
|
|
153
|
-
const pathCount = new Map<string, number>();
|
|
154
|
-
const pathById = new Map<string, string[]>();
|
|
155
|
-
|
|
156
|
-
// Index incoming edges by target so the per-trial forward pass can
|
|
157
|
-
// honor each edge's dependency type and lag (FS/SS/FF/SF, ±lag).
|
|
158
|
-
// Without this the simulator would silently treat every edge as FS+0,
|
|
159
|
-
// producing percentile dates that disagree with the deterministic
|
|
160
|
-
// analyzer for any non-default schedule.
|
|
161
|
-
const incomingEdges = new Map<string, PertEdge[]>();
|
|
162
|
-
for (const id of topo) incomingEdges.set(id, []);
|
|
163
|
-
for (const e of resolved.edges) incomingEdges.get(e.target)?.push(e);
|
|
164
|
-
|
|
165
|
-
const es = new Map<string, number>();
|
|
166
|
-
const ef = new Map<string, number>();
|
|
167
|
-
const predOnLongestPath = new Map<string, string | null>();
|
|
168
|
-
|
|
169
|
-
for (let trial = 0; trial < opts.trials; trial++) {
|
|
170
|
-
// Sample a duration for each activity in topo order.
|
|
171
|
-
for (const id of topo) {
|
|
172
|
-
const exp = expById.get(id);
|
|
173
|
-
let duration: number;
|
|
174
|
-
if (!exp || poisoned.has(id)) {
|
|
175
|
-
duration = 0;
|
|
176
|
-
} else if (exp.o === exp.p) {
|
|
177
|
-
duration = exp.m;
|
|
178
|
-
} else {
|
|
179
|
-
duration = sampleBetaPert(exp.o, exp.m, exp.p, rng);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// Collect lower-bound constraints from each incoming edge per its
|
|
183
|
-
// type + lag. Mirrors the analyzer's deterministic forward pass:
|
|
184
|
-
// FS: ES ≥ src.EF + lag SS: ES ≥ src.ES + lag
|
|
185
|
-
// FF: EF ≥ src.EF + lag SF: EF ≥ src.ES + lag
|
|
186
|
-
// Track the predecessor whose constraint actually pinned the
|
|
187
|
-
// start time so the modal-path walk can attribute criticality
|
|
188
|
-
// to the right link.
|
|
189
|
-
let esLower = 0;
|
|
190
|
-
let efLower = -Infinity;
|
|
191
|
-
let bestPred: string | null = null;
|
|
192
|
-
let bestPredVal = -Infinity;
|
|
193
|
-
for (const edge of incomingEdges.get(id) ?? []) {
|
|
194
|
-
const aEs = es.get(edge.source) ?? 0;
|
|
195
|
-
const aEf = ef.get(edge.source) ?? 0;
|
|
196
|
-
const lag = lagDays(edge.lag);
|
|
197
|
-
let candES = -Infinity;
|
|
198
|
-
let candEF = -Infinity;
|
|
199
|
-
switch (edge.type) {
|
|
200
|
-
case 'FS':
|
|
201
|
-
candES = aEf + lag;
|
|
202
|
-
break;
|
|
203
|
-
case 'SS':
|
|
204
|
-
candES = aEs + lag;
|
|
205
|
-
break;
|
|
206
|
-
case 'FF':
|
|
207
|
-
candEF = aEf + lag;
|
|
208
|
-
break;
|
|
209
|
-
case 'SF':
|
|
210
|
-
candEF = aEs + lag;
|
|
211
|
-
break;
|
|
212
|
-
}
|
|
213
|
-
if (candES > esLower) esLower = candES;
|
|
214
|
-
if (candEF > efLower) efLower = candEF;
|
|
215
|
-
// For modal-path attribution, weight each edge by its contribution
|
|
216
|
-
// to this activity's effective start time.
|
|
217
|
-
const contribution = Math.max(candES, candEF - duration);
|
|
218
|
-
if (contribution > bestPredVal) {
|
|
219
|
-
bestPredVal = contribution;
|
|
220
|
-
bestPred = edge.source;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
let esVal = esLower;
|
|
224
|
-
let efVal = esVal + duration;
|
|
225
|
-
if (efLower > efVal) {
|
|
226
|
-
efVal = efLower;
|
|
227
|
-
esVal = efVal - duration;
|
|
228
|
-
}
|
|
229
|
-
es.set(id, esVal);
|
|
230
|
-
ef.set(id, efVal);
|
|
231
|
-
predOnLongestPath.set(id, bestPred);
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// Project end = max EF over ALL activities, not just terminals.
|
|
235
|
-
// SS/FF/SF edges break the FS-only invariant that EF is monotonic
|
|
236
|
-
// along edges, so a non-terminal predecessor can finish later than
|
|
237
|
-
// its successor (e.g. SS with small lag + long predecessor).
|
|
238
|
-
let endEf = 0;
|
|
239
|
-
let endId = terminals[0] ?? null;
|
|
240
|
-
for (const id of topo) {
|
|
241
|
-
const e = ef.get(id) ?? 0;
|
|
242
|
-
if (e > endEf) {
|
|
243
|
-
endEf = e;
|
|
244
|
-
endId = id;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
completionTimes[trial] = endEf;
|
|
248
|
-
|
|
249
|
-
// Walk back from endId to record this trial's longest-path tuple.
|
|
250
|
-
if (endId !== null) {
|
|
251
|
-
const path: string[] = [];
|
|
252
|
-
let cur: string | null = endId;
|
|
253
|
-
while (cur !== null) {
|
|
254
|
-
path.unshift(cur);
|
|
255
|
-
criticalityCount.set(cur, (criticalityCount.get(cur) ?? 0) + 1);
|
|
256
|
-
cur = predOnLongestPath.get(cur) ?? null;
|
|
257
|
-
}
|
|
258
|
-
const key = path.join('');
|
|
259
|
-
pathCount.set(key, (pathCount.get(key) ?? 0) + 1);
|
|
260
|
-
if (!pathById.has(key)) pathById.set(key, path);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// Percentiles via sort + index.
|
|
265
|
-
completionTimes.sort((a, b) => a - b);
|
|
266
|
-
const pct = (frac: number): number => {
|
|
267
|
-
const idx = Math.min(
|
|
268
|
-
completionTimes.length - 1,
|
|
269
|
-
Math.max(0, Math.floor(frac * completionTimes.length))
|
|
270
|
-
);
|
|
271
|
-
return completionTimes[idx] ?? 0;
|
|
272
|
-
};
|
|
273
|
-
// After sort, min/max are the endpoints. Backward-mode S-curve uses
|
|
274
|
-
// these to bound the candidate-start axis; forward-mode reads them
|
|
275
|
-
// for symmetric x-axis bounds.
|
|
276
|
-
const minDurationDays = completionTimes[0] ?? 0;
|
|
277
|
-
const maxDurationDays = completionTimes[completionTimes.length - 1] ?? 0;
|
|
278
|
-
|
|
279
|
-
// Modal critical path with deterministic tiebreak (count desc → variance sum desc → lex).
|
|
280
|
-
let modalKey = '';
|
|
281
|
-
let modalCount = -1;
|
|
282
|
-
for (const [key, count] of pathCount) {
|
|
283
|
-
if (count > modalCount) {
|
|
284
|
-
modalCount = count;
|
|
285
|
-
modalKey = key;
|
|
286
|
-
} else if (count === modalCount) {
|
|
287
|
-
// Tie-break: variance sum, then lex
|
|
288
|
-
const a = pathById.get(modalKey) ?? [];
|
|
289
|
-
const b = pathById.get(key) ?? [];
|
|
290
|
-
const va = pathVariance(a, expById);
|
|
291
|
-
const vb = pathVariance(b, expById);
|
|
292
|
-
if (vb > va) {
|
|
293
|
-
modalKey = key;
|
|
294
|
-
} else if (vb === va && key.localeCompare(modalKey) < 0) {
|
|
295
|
-
modalKey = key;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
const criticalityByActivity: Record<string, number> = {};
|
|
301
|
-
for (const id of topo) {
|
|
302
|
-
criticalityByActivity[id] = (criticalityCount.get(id) ?? 0) / opts.trials;
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
return {
|
|
306
|
-
trials: opts.trials,
|
|
307
|
-
seed: opts.seed,
|
|
308
|
-
p50: pct(0.5),
|
|
309
|
-
p80: pct(0.8),
|
|
310
|
-
p95: pct(0.95),
|
|
311
|
-
p16: pct(0.16),
|
|
312
|
-
p84: pct(0.84),
|
|
313
|
-
criticalityByActivity,
|
|
314
|
-
modalCriticalPath: pathById.get(modalKey) ?? [],
|
|
315
|
-
// Analyzer populates this after MC returns by running the
|
|
316
|
-
// deterministic per-activity tornado pass. Empty here so the
|
|
317
|
-
// type contract is satisfied even in scrubber/fast paths that
|
|
318
|
-
// never compute swings.
|
|
319
|
-
tornadoSwings: [],
|
|
320
|
-
minDurationDays,
|
|
321
|
-
maxDurationDays,
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
function pathVariance(
|
|
326
|
-
path: string[],
|
|
327
|
-
expById: Map<string, ExpandedActivity>
|
|
328
|
-
): number {
|
|
329
|
-
let sum = 0;
|
|
330
|
-
for (const id of path) {
|
|
331
|
-
const e = expById.get(id);
|
|
332
|
-
if (!e) continue;
|
|
333
|
-
const sigma = (e.p - e.o) / 6;
|
|
334
|
-
sum += sigma * sigma;
|
|
335
|
-
}
|
|
336
|
-
return sum;
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
// ============================================================
|
|
340
|
-
// Public entry points
|
|
341
|
-
// ============================================================
|
|
342
|
-
|
|
343
|
-
export interface SimulateOptions {
|
|
344
|
-
trials: number;
|
|
345
|
-
seed: number;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
/**
|
|
349
|
-
* Build a runnable simulation context from a `ResolvedPert`. The
|
|
350
|
-
* analyzer will call this then invoke `simulateCanonical` /
|
|
351
|
-
* `simulateFast` on the result.
|
|
352
|
-
*/
|
|
353
|
-
export function buildSimulationContext(resolved: ResolvedPert): {
|
|
354
|
-
predecessors: Map<string, string[]>;
|
|
355
|
-
successors: Map<string, string[]>;
|
|
356
|
-
topo: string[];
|
|
357
|
-
terminals: string[];
|
|
358
|
-
poisoned: Set<string>;
|
|
359
|
-
} {
|
|
360
|
-
const predecessors = new Map<string, string[]>();
|
|
361
|
-
const successors = new Map<string, string[]>();
|
|
362
|
-
for (const r of resolved.activities) {
|
|
363
|
-
predecessors.set(r.activity.id, []);
|
|
364
|
-
successors.set(r.activity.id, []);
|
|
365
|
-
}
|
|
366
|
-
for (const e of resolved.edges) {
|
|
367
|
-
successors.get(e.source)?.push(e.target);
|
|
368
|
-
predecessors.get(e.target)?.push(e.source);
|
|
369
|
-
}
|
|
370
|
-
const inDegree = new Map<string, number>();
|
|
371
|
-
for (const r of resolved.activities) {
|
|
372
|
-
inDegree.set(r.activity.id, predecessors.get(r.activity.id)!.length);
|
|
373
|
-
}
|
|
374
|
-
const queue: string[] = [];
|
|
375
|
-
for (const [id, deg] of inDegree) if (deg === 0) queue.push(id);
|
|
376
|
-
const topo: string[] = [];
|
|
377
|
-
while (queue.length > 0) {
|
|
378
|
-
const id = queue.shift()!;
|
|
379
|
-
topo.push(id);
|
|
380
|
-
for (const next of successors.get(id) ?? []) {
|
|
381
|
-
const deg = (inDegree.get(next) ?? 0) - 1;
|
|
382
|
-
inDegree.set(next, deg);
|
|
383
|
-
if (deg === 0) queue.push(next);
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
const terminals: string[] = [];
|
|
387
|
-
for (const r of resolved.activities) {
|
|
388
|
-
if ((successors.get(r.activity.id) ?? []).length === 0) {
|
|
389
|
-
terminals.push(r.activity.id);
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
const poisoned = new Set<string>();
|
|
393
|
-
for (const r of resolved.activities) {
|
|
394
|
-
if (r.activity.duration === null) {
|
|
395
|
-
const stack = [r.activity.id];
|
|
396
|
-
while (stack.length > 0) {
|
|
397
|
-
const id = stack.pop()!;
|
|
398
|
-
if (poisoned.has(id)) continue;
|
|
399
|
-
poisoned.add(id);
|
|
400
|
-
for (const next of successors.get(id) ?? []) stack.push(next);
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
return { predecessors, successors, topo, terminals, poisoned };
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
/**
|
|
408
|
-
* Canonical simulation — N=10000 by default. Used for static export
|
|
409
|
-
* and the "computing…" Worker job in the app.
|
|
410
|
-
*/
|
|
411
|
-
export function simulateCanonical(
|
|
412
|
-
resolved: ResolvedPert,
|
|
413
|
-
expanded: ExpandedActivity[],
|
|
414
|
-
opts: SimulateOptions
|
|
415
|
-
): MonteCarloResult {
|
|
416
|
-
const ctx = buildSimulationContext(resolved);
|
|
417
|
-
return simulate(
|
|
418
|
-
resolved,
|
|
419
|
-
expanded,
|
|
420
|
-
ctx.predecessors,
|
|
421
|
-
ctx.successors,
|
|
422
|
-
ctx.topo,
|
|
423
|
-
ctx.terminals,
|
|
424
|
-
ctx.poisoned,
|
|
425
|
-
{ trials: opts.trials, seed: opts.seed }
|
|
426
|
-
);
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
/**
|
|
430
|
-
* Fast simulation — N=300 by default. Used by the duration scrubber for
|
|
431
|
-
* sub-100ms re-analysis on each rAF tick.
|
|
432
|
-
*/
|
|
433
|
-
export function simulateFast(
|
|
434
|
-
resolved: ResolvedPert,
|
|
435
|
-
expanded: ExpandedActivity[],
|
|
436
|
-
opts: SimulateOptions
|
|
437
|
-
): MonteCarloResult {
|
|
438
|
-
return simulateCanonical(resolved, expanded, opts);
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
// Type-only export used by the analyzer to round-trip the per-activity
|
|
442
|
-
// expanded-estimate cache without leaking the analyzer's internal type.
|
|
443
|
-
export type { ExpandedActivity };
|
|
444
|
-
|
|
445
|
-
// Re-export ResolvedActivity to keep the import surface stable for callers.
|
|
446
|
-
export type { ResolvedActivity };
|