@miragon/wardley-dsl 0.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lexer.ts","../src/parser.ts","../src/serializer.ts"],"names":["text","CURRENT_SCHEMA_VERSION","validateMap"],"mappings":";;;;;;;AAYA,IAAM,SAAA,GAAY,qCAAA;AAGX,SAAS,YAAY,IAAA,EAAmC;AAC7D,EAAA,MAAM,CAAA,GAAI,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AAC7B,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,EAAA,MAAM,CAAA,GAAI,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AACrB,EAAA,MAAM,CAAA,GAAI,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AACrB,EAAA,IAAI,MAAA,CAAO,MAAM,CAAC,CAAA,IAAK,OAAO,KAAA,CAAM,CAAC,GAAG,OAAO,IAAA;AAC/C,EAAA,OAAO,EAAE,GAAG,CAAA,EAAE;AAChB;AAEO,SAAS,YAAY,IAAA,EAAsB;AAChD,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,GAAG,CAAA;AACpC;AASA,IAAM,QAAA,GAAW,cAAA;AACjB,IAAM,0BAA+B,IAAI,GAAA,CAAI,CAAC,OAAA,EAAS,KAAA,EAAO,WAAW,CAAC,CAAA;AAQnE,SAAS,gBAAgB,IAAA,EAA8D;AAC5F,EAAA,MAAM,MAKF,EAAC;AACL,EAAA,IAAI,IAAA,GAAO,IAAA;AAEX,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,CAAC,OAAO,KAAA,KAAkB;AACtD,IAAA,KAAA,MAAW,QAAA,IAAY,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,EAAG;AACvC,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,EAAK,CAAE,WAAA,EAAY;AAC1C,MAAA,IAAI,KAAA,KAAU,QAAA,EAAU,GAAA,CAAI,MAAA,GAAS,IAAA;AAAA,WAAA,IAC5B,KAAA,KAAU,WAAA,EAAa,GAAA,CAAI,SAAA,GAAY,IAAA;AAAA,WAAA,IACvC,KAAA,KAAU,SAAA,EAAW,GAAA,CAAI,OAAA,GAAU,IAAA;AAAA,WAAA,IACnC,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,MAAO,MAAA,GAAS,KAAA;AAAA,IAC5C;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AAGD,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,cAAA,EAAgB,MAAM;AACxC,IAAA,GAAA,CAAI,OAAA,GAAU,IAAA;AACd,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO,EAAE,UAAA,EAAY,GAAA,EAAK,IAAA,EAAK;AACjC;AAKA,IAAM,QAAA,GAAW,uDAAA;AAEV,SAAS,WAAW,IAAA,EAAgD;AACzE,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC5B,EAAA,IAAI,CAAC,KAAK,CAAC,CAAA,CAAE,CAAC,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,IAAA,EAAK;AACrC,EAAA,OAAO,EAAE,KAAA,EAAO,CAAA,CAAE,CAAC,CAAA,EAAG,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,EAAE;AAC1D;AAOA,IAAM,eAAA,GAAkB,gDAAA;AAGjB,SAAS,iBAAiB,IAAA,EAG/B;AACA,EAAA,MAAM,CAAA,GAAI,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AACnC,EAAA,IAAI,CAAC,CAAA,EAAG,OAAO,EAAE,WAAA,EAAa,IAAA,EAAM,MAAM,IAAA,EAAK;AAC/C,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AACtB,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AACtB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,eAAA,EAAiB,GAAG,CAAA;AAC9C,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,EAAE,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,EAAE,CAAA,EAAG,OAAO,EAAE,WAAA,EAAa,IAAA,EAAM,IAAA,EAAK;AAC3E,EAAA,OAAO,EAAE,WAAA,EAAa,EAAE,EAAA,EAAI,EAAA,IAAM,IAAA,EAAK;AACzC;AAGO,SAAS,UAAU,IAAA,EAAsB;AAC9C,EAAA,MAAM,CAAA,GAAI,sBAAA,CAAuB,IAAA,CAAK,IAAI,CAAA;AAC1C,EAAA,OAAO,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,CAAG,aAAY,GAAI,EAAA;AACnC;AAEO,SAAS,KAAK,KAAA,EAAuB;AAC1C,EAAA,OACE,KAAA,CACG,IAAA,EAAK,CACL,WAAA,EAAY,CACZ,OAAA,CAAQ,aAAA,EAAe,GAAG,CAAA,CAC1B,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA,IAAK,GAAA;AAElC;;;ACxFA,IAAM,MAAA,GAAS,qBAAA;AAEf,IAAM,OAAA,GAAU,2CAAA;AAGhB,IAAM,iBAAA,uBAA6C,GAAA,CAAI;AAAA,EACrD,OAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAC,CAAA;AACD,IAAM,YAAA,uBAAwC,GAAA,CAAI,CAAC,WAAW,aAAA,EAAe,QAAA,EAAU,MAAM,CAAC,CAAA;AA4B9F,SAAS,QAA2C,GAAA,EAAW;AAC7D,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG,IAAI,CAAA,KAAM,MAAA,EAAW,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AACxE,EAAA,OAAO,GAAA;AACT;AAEA,IAAM,cAAN,MAAkB;AAAA,EACC,IAAA,uBAAW,GAAA,EAAY;AAAA,EACxC,KAAA,CAAM,QAAgB,KAAA,EAAuB;AAC3C,IAAA,MAAM,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA;AACrC,IAAA,IAAI,EAAA,GAAK,IAAA;AACT,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,OAAO,IAAA,CAAK,KAAK,GAAA,CAAI,EAAE,GAAG,EAAA,GAAK,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,CAAA,EAAG,CAAA,CAAA;AAC7C,IAAA,IAAA,CAAK,IAAA,CAAK,IAAI,EAAE,CAAA;AAChB,IAAA,OAAO,EAAA;AAAA,EACT;AACF,CAAA;AAMO,SAAS,SAAS,IAAA,EAA0B;AACjD,EAAA,MAAM,GAAA,GAAM,IAAI,WAAA,EAAY;AAC5B,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAoB;AACzC,EAAA,MAAM,WAAyB,EAAC;AAChC,EAAA,MAAM,iBAA2B,EAAC;AAClC,EAAA,MAAM,eAA8B,EAAC;AACrC,EAAA,MAAM,gBAAiC,EAAC;AACxC,EAAA,MAAM,kBAAqC,EAAC;AAE5C,EAAA,IAAI,MAAA,GAAoB,EAAE,KAAA,EAAO,cAAA,EAAe;AAChD,EAAA,IAAI,WAAA,GAAc,CAAA;AAElB,EAAA,MAAM,QAAA,GAAW,CAAC,IAAA,EAAc,EAAA,KAAe;AAC7C,IAAA,IAAI,CAAC,SAAS,GAAA,CAAI,IAAI,GAAG,QAAA,CAAS,GAAA,CAAI,MAAM,EAAE,CAAA;AAAA,EAChD,CAAA;AAGA,EAAA,MAAM,QAAA,GAAW,CAAC,IAAA,EAAc,GAAA,KAAyB;AACvD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC7B,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAA,GAAI,IAAA,CAAK,MAAM,CAAA,EAAG,IAAI,CAAA,CAAE,IAAA,EAAK,GAAI,IAAA;AACtD,IAAA,MAAM,SAAA,GAAY,QAAQ,CAAA,GAAI,IAAA,CAAK,MAAM,IAAA,GAAO,CAAC,CAAA,CAAE,IAAA,EAAK,GAAI,EAAA;AAC5D,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAC5B,IAAA,MAAM,IAAA,GAAO,GAAA,GAAM,IAAA,GAAO,OAAA,CAAQ,KAAK,IAAI,CAAA;AAC3C,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,YAAA,CAAa,IAAA,CAAK;AAAA,QAChB,IAAA,EAAM,GAAA,CAAI,CAAC,CAAA,CAAG,IAAA,EAAK;AAAA,QACnB,KAAA,EAAO,GAAA,CAAI,CAAC,CAAA,CAAG,IAAA,EAAK;AAAA,QACpB,IAAA,EAAM,YAAA;AAAA,QACN,GAAI,SAAA,GAAY,EAAE,KAAA,EAAO,SAAA,KAAc,EAAC;AAAA,QACxC;AAAA,OACD,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,MAAA,YAAA,CAAa,IAAA,CAAK;AAAA,QAChB,IAAA,EAAM,IAAA,CAAK,CAAC,CAAA,CAAG,IAAA,EAAK;AAAA,QACpB,KAAA,EAAO,IAAA,CAAK,CAAC,CAAA,CAAG,IAAA,EAAK;AAAA,QACrB,IAAA,EAAM,MAAA;AAAA,QACN,eAAe,EAAA,KAAO,IAAA;AAAA,QACtB,SAAS,EAAA,KAAO,GAAA;AAAA,QAChB,GAAI,IAAA,CAAK,CAAC,CAAA,GAAI,EAAE,WAAW,IAAA,CAAK,CAAC,CAAA,EAAE,GAAI,EAAC;AAAA,QACxC,GAAI,SAAA,GAAY,EAAE,KAAA,EAAO,SAAA,KAAc,EAAC;AAAA,QACxC;AAAA,OACD,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,EAAG;AACrC,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,EAAK;AACtB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,EAAA,GAAK,UAAU,IAAI,CAAA;AACzB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,MAAM,EAAE,IAAA,EAAK;AAOzC,IAAA,IAAI,CAAC,iBAAA,CAAkB,GAAA,CAAI,EAAE,CAAA,IAAK,CAAC,WAAA,CAAY,IAAI,CAAA,IAAK,QAAA,CAAS,IAAA,EAAM,GAAG,CAAA,EAAG;AAC3E,MAAA;AAAA,IACF;AAEA,IAAA,QAAQ,EAAA;AAAI,MACV,KAAK,OAAA;AACH,QAAA,MAAA,GAAS,EAAE,GAAG,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAM;AACnC,QAAA;AAAA,MAEF,KAAK,QAAA,EAAU;AACb,QAAA,MAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA,cAAA,CAAe,KAAK,GAAG,CAAA;AACvB,UAAA;AAAA,QACF;AACA,QAAA,MAAM,EAAA,GAAK,GAAA,CAAI,KAAA,CAAM,QAAA,EAAU,KAAK,IAAI,CAAA;AACxC,QAAA,MAAM,SAAwB,OAAA,CAAQ;AAAA,UACpC,EAAA;AAAA,UACA,WAAA,EAAa,QAAA;AAAA,UACb,OAAO,IAAA,CAAK,IAAA;AAAA,UACZ,QAAA,EAAU,EAAE,UAAA,EAAY,IAAA,CAAK,OAAO,CAAA,EAAG,SAAA,EAAW,IAAA,CAAK,MAAA,CAAO,CAAA,EAAE;AAAA,UAChE,aAAa,IAAA,CAAK;AAAA,SACnB,CAAA;AACD,QAAA,QAAA,CAAS,KAAK,MAAM,CAAA;AACpB,QAAA,QAAA,CAAS,IAAA,CAAK,MAAM,EAAE,CAAA;AACtB,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,WAAA;AAAA,MACL,KAAK,QAAA;AAAA,MACL,KAAK,WAAA,EAAa;AAChB,QAAA,MAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA,cAAA,CAAe,KAAK,GAAG,CAAA;AACvB,UAAA;AAAA,QACF;AACA,QAAA,MAAM,UAAA,GAAa,WAAA,CAAY,EAAA,EAAI,IAAA,CAAK,UAAU,CAAA;AAClD,QAAA,MAAM,EAAA,GAAK,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,KAAK,IAAI,CAAA;AACrC,QAAA,MAAM,YAA8B,OAAA,CAAQ;AAAA,UAC1C,EAAA;AAAA,UACA,WAAA,EAAa,WAAA;AAAA,UACb,OAAO,IAAA,CAAK,IAAA;AAAA,UACZ,QAAA,EAAU,EAAE,UAAA,EAAY,IAAA,CAAK,OAAO,CAAA,EAAG,SAAA,EAAW,IAAA,CAAK,MAAA,CAAO,CAAA,EAAE;AAAA,UAChE,aAAa,IAAA,CAAK,WAAA;AAAA,UAClB,YAAY,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,CAAE,SAAS,UAAA,GAAa;AAAA,SAC3D,CAAA;AACD,QAAA,QAAA,CAAS,KAAK,SAAS,CAAA;AACvB,QAAA,QAAA,CAAS,IAAA,CAAK,MAAM,EAAE,CAAA;AACtB,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,MAAA,EAAQ;AACX,QAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,WAAW,KAAK,CAAA;AACxC,QAAA,MAAM,MAAA,GAAS,YAAY,IAAI,CAAA;AAE/B,QAAA,MAAM,QAAA,GAAW,YAAY,IAAI,CAAA,CAAE,MAAK,CAAE,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAC9D,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,cAAA,CAAe,KAAK,GAAG,CAAA;AACvB,UAAA;AAAA,QACF;AACA,QAAA,MAAM,EAAA,GAAK,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,YAAY,MAAM,CAAA;AAC/C,QAAA,MAAM,OAAoB,OAAA,CAAQ;AAAA,UAChC,EAAA;AAAA,UACA,WAAA,EAAa,MAAA;AAAA,UACb,KAAA,EAAO,QAAA;AAAA,UACP,UAAU,EAAE,UAAA,EAAY,OAAO,CAAA,EAAG,SAAA,EAAW,OAAO,CAAA,EAAE;AAAA,UACtD;AAAA,SACD,CAAA;AACD,QAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAClB,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,UAAA,EAAY;AACf,QAAA,MAAM,MAAA,GAAS,YAAY,KAAK,CAAA;AAChC,QAAA,MAAM,IAAA,GAAO,WAAA,CAAY,KAAK,CAAA,CAAE,IAAA,EAAK;AACrC,QAAA,IAAI,CAAC,MAAA,IAAU,CAAC,IAAA,EAAM;AACpB,UAAA,cAAA,CAAe,KAAK,GAAG,CAAA;AACvB,UAAA;AAAA,QACF;AACA,QAAA,eAAA,CAAgB,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,MAAA,CAAO,GAAG,GAAA,EAAK,MAAA,CAAO,CAAA,EAAG,GAAA,EAAK,CAAA;AAClE,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,QAAA,EAAU;AACb,QAAA,MAAM,EAAA,GAAK,YAAY,KAAK,CAAA;AAC5B,QAAA,IAAI,CAAC,EAAA,EAAI;AACP,UAAA,cAAA,CAAe,KAAK,GAAG,CAAA;AACvB,UAAA;AAAA,QACF;AACA,QAAA,aAAA,CAAc,IAAA,CAAK,EAAE,GAAG,EAAA,EAAI,KAAK,CAAA;AACjC,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,OAAA,EAAS;AACZ,QAAA,MAAM,CAAA,GAAI,MAAM,WAAA,EAAY;AAC5B,QAAA,IAAI,YAAA,CAAa,IAAI,CAAC,CAAA,WAAY,EAAE,GAAG,MAAA,EAAQ,KAAA,EAAO,CAAA,EAAc;AAAA,aAC/D,cAAA,CAAe,KAAK,GAAG,CAAA;AAC5B,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,MAAA,EAAQ;AACX,QAAA,MAAM,MAAA,GAAS,YAAY,KAAK,CAAA;AAChC,QAAA,IAAI,MAAA,EAAQ,MAAA,GAAS,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,EAAE,KAAA,EAAO,MAAA,CAAO,CAAA,EAAG,MAAA,EAAQ,MAAA,CAAO,GAAE,EAAE;AAAA,aACzE,cAAA,CAAe,KAAK,GAAG,CAAA;AAC5B,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,WAAA,EAAa;AAIhB,QAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AACnD,QAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,UAAA,MAAA,GAAS,EAAE,GAAG,MAAA,EAAQ,eAAA,EAAiB,CAAC,MAAM,CAAC,CAAA,EAAI,KAAA,CAAM,CAAC,GAAI,KAAA,CAAM,CAAC,GAAI,KAAA,CAAM,CAAC,CAAE,CAAA,EAAE;AAAA,QACtF,CAAA,MAAO,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA;AAC9B,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,QAAA,EAAU;AACb,QAAA,MAAM,KAAA,GAAQ,KAAA,CACX,KAAA,CAAM,IAAI,CAAA,CACV,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,OAAO,OAAO,CAAA;AACjB,QAAA,IAAI,KAAA,CAAM,QAAQ,MAAA,GAAS,EAAE,GAAG,MAAA,EAAQ,UAAA,EAAY,KAAA,CAAM,CAAC,CAAA,EAAG;AAAA,aACzD,cAAA,CAAe,KAAK,GAAG,CAAA;AAC5B,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,aAAA,EAAe;AAClB,QAAA,MAAM,MAAA,GAAS,YAAY,KAAK,CAAA;AAChC,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,MAAA,GAAS;AAAA,YACP,GAAG,MAAA;AAAA,YACH,wBAAwB,EAAE,UAAA,EAAY,OAAO,CAAA,EAAG,SAAA,EAAW,OAAO,CAAA;AAAE,WACtE;AAAA,QACF,CAAA,MAAO,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA;AAC9B,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,MAAA,GAAS,YAAY,KAAK,CAAA;AAChC,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,cAAA,CAAe,KAAK,GAAG,CAAA;AACvB,UAAA;AAAA,QACF;AACA,QAAA,MAAM,QAAA,GAAW,WAAA,CAAY,IAAA,CAAK,KAAK,CAAA;AACvC,QAAA,MAAM,SAAS,QAAA,GAAW,MAAA,CAAO,SAAS,CAAC,CAAC,IAAI,EAAE,WAAA;AAClD,QAAA,MAAMA,KAAAA,GAAO,YAAY,KAAA,CAAM,OAAA,CAAQ,cAAc,EAAE,CAAC,EAAE,IAAA,EAAK;AAC/D,QAAA,MAAM,WAAW,EAAE,UAAA,EAAY,OAAO,CAAA,EAAG,SAAA,EAAW,OAAO,CAAA,EAAE;AAC7D,QAAA,MAAM,UAAA,GAAgC;AAAA,UACpC,IAAI,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,UACpC,WAAA,EAAa,YAAA;AAAA,UACb,KAAA,EAAOA,KAAAA;AAAA,UACP,QAAA;AAAA,UACA,MAAA;AAAA,UACA,SAAA,EAAW,CAAC,QAAQ,CAAA;AAAA,UACpB,IAAA,EAAAA;AAAA,SACF;AACA,QAAA,QAAA,CAAS,KAAK,UAAU,CAAA;AACxB,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,UAAA;AAAA,MACL,KAAK,UAAA;AAAA,MACL,KAAK,cAAA,EAAgB;AAEnB,QAAA,MAAM,MAAA,GAAS,YAAY,KAAK,CAAA;AAChC,QAAA,MAAM,QAAA,GAAW,WAAA,CAAY,KAAK,CAAA,CAAE,IAAA,GAAO,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AACtE,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,QAAA,CAAS,CAAC,CAAC,CAAA;AAChC,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,CAAC,CAAC,CAAA;AACjC,QAAA,IAAI,CAAC,UAAU,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,EAAG;AAC1D,UAAA,cAAA,CAAe,KAAK,GAAG,CAAA;AACvB,UAAA;AAAA,QACF;AACA,QAAA,MAAM,QAAA,GAA4B;AAAA,UAChC,EAAA,EAAI,GAAA,CAAI,KAAA,CAAM,UAAA,EAAY,EAAE,CAAA;AAAA,UAC5B,WAAA,EAAa,UAAA;AAAA,UACb,IAAA,EAAM,EAAA;AAAA,UACN,KAAA,EAAO,EAAA;AAAA,UACP,UAAU,EAAE,UAAA,EAAY,OAAO,CAAA,EAAG,SAAA,EAAW,OAAO,CAAA,EAAE;AAAA,UACtD,KAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,QAAA,CAAS,KAAK,QAAQ,CAAA;AACtB,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,aAAA;AAAA,MACL,KAAK,eAAA,EAAiB;AACpB,QAAA,MAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA,cAAA,CAAe,KAAK,GAAG,CAAA;AACvB,UAAA;AAAA,QACF;AACA,QAAA,MAAM,EAAA,GAAK,GAAA,CAAI,KAAA,CAAM,OAAA,EAAS,KAAK,IAAI,CAAA;AACvC,QAAA,MAAM,WAAA,GAAkC;AAAA,UACtC,EAAA;AAAA,UACA,WAAA,EAAa,aAAA;AAAA,UACb,SAAA,EAAW,EAAA,KAAO,eAAA,GAAkB,cAAA,GAAiB,YAAA;AAAA,UACrD,OAAO,IAAA,CAAK,IAAA;AAAA,UACZ,QAAA,EAAU,EAAE,UAAA,EAAY,IAAA,CAAK,OAAO,CAAA,EAAG,SAAA,EAAW,IAAA,CAAK,MAAA,CAAO,CAAA;AAAE,SAClE;AACA,QAAA,QAAA,CAAS,KAAK,WAAW,CAAA;AACzB,QAAA,QAAA,CAAS,IAAA,CAAK,MAAM,EAAE,CAAA;AACtB,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,QAAA,EAAU;AACb,QAAA,MAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA,cAAA,CAAe,KAAK,GAAG,CAAA;AACvB,UAAA;AAAA,QACF;AACA,QAAA,MAAM,EAAA,GAAK,GAAA,CAAI,KAAA,CAAM,QAAA,EAAU,KAAK,IAAI,CAAA;AACxC,QAAA,MAAM,MAAA,GAAwB;AAAA,UAC5B,EAAA;AAAA,UACA,WAAA,EAAa,QAAA;AAAA,UACb,OAAO,IAAA,CAAK,IAAA;AAAA,UACZ,QAAA,EAAU,EAAE,UAAA,EAAY,IAAA,CAAK,OAAO,CAAA,EAAG,SAAA,EAAW,IAAA,CAAK,MAAA,CAAO,CAAA;AAAE,SAClE;AACA,QAAA,QAAA,CAAS,KAAK,MAAM,CAAA;AACpB,QAAA,QAAA,CAAS,IAAA,CAAK,MAAM,EAAE,CAAA;AACtB,QAAA;AAAA,MACF;AAAA,MAEA,SAAS;AAEP,QAAA,IAAI,CAAC,QAAA,CAAS,IAAA,EAAM,GAAG,CAAA,EAAG,cAAA,CAAe,KAAK,GAAG,CAAA;AAAA,MACnD;AAAA;AACF,EACF;AAEA,EAAA,KAAA,MAAW,MAAM,aAAA,EAAe;AAC9B,IAAA,MAAM,EAAA,GAAK,QAAA,CAAS,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA;AAC/B,IAAA,MAAM,MAAM,QAAA,CAAS,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AACjD,IAAA,IAAI,MAAM,CAAA,IAAK,QAAA,CAAS,GAAG,CAAA,CAAG,gBAAgB,WAAA,EAAa;AACzD,MAAA,cAAA,CAAe,IAAA,CAAK,GAAG,GAAG,CAAA;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,WAAW,OAAA,CAAQ;AAAA,MACvB,iBAAiB,EAAA,CAAG,MAAA;AAAA,MACpB,UAAU,EAAA,CAAG,QAAA;AAAA,MACb,QAAQ,EAAA,CAAG;AAAA,KACZ,CAAA;AACD,IAAA,QAAA,CAAS,GAAG,CAAA,GAAI,EAAE,GAAI,QAAA,CAAS,GAAG,GAAwB,QAAA,EAAS;AAAA,EACrE;AAGA,EAAA,KAAA,MAAW,KAAK,eAAA,EAAiB;AAC/B,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AACjC,IAAA,MAAM,MAAM,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AAC/C,IAAA,MAAM,UAAA,GAAa,GAAA,GAAM,GAAA,CAAI,QAAA,CAAS,UAAA,GAAa,GAAA;AACnD,IAAA,MAAM,EAAA,GAAK,GAAA,CAAI,KAAA,CAAM,UAAA,EAAY,EAAE,IAAI,CAAA;AACvC,IAAA,MAAM,QAAA,GAA4B;AAAA,MAChC,EAAA;AAAA,MACA,WAAA,EAAa,UAAA;AAAA,MACb,OAAO,CAAA,CAAE,IAAA;AAAA,MACT,QAAA,EAAU,EAAE,UAAA,EAAY,SAAA,EAAA,CAAY,EAAE,KAAA,GAAQ,CAAA,CAAE,OAAO,CAAA,EAAE;AAAA,MACzD,gBAAgB,CAAA,CAAE,KAAA;AAAA,MAClB,cAAc,CAAA,CAAE,GAAA;AAAA,MAChB,UAAU;AAAC,KACb;AACA,IAAA,QAAA,CAAS,KAAK,QAAQ,CAAA;AAAA,EACxB;AAEA,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,MAAM,QAAmB,EAAC;AAC1B,EAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC/B,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AACrC,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AACpC,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,IAAA,EAAM;AACpB,MAAA,cAAA,CAAe,IAAA,CAAK,KAAK,GAAG,CAAA;AAC5B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,SAAS,YAAA,EAAc;AAC9B,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,OAAA,CAAQ;AAAA,UACN,EAAA,EAAI,CAAA,IAAA,EAAO,EAAE,IAAI,CAAA,CAAA;AAAA,UACjB,QAAA,EAAU,YAAA;AAAA,UACV,IAAA,EAAM,MAAA;AAAA,UACN,EAAA,EAAI,IAAA;AAAA,UACJ,OAAO,IAAA,CAAK;AAAA,SACb;AAAA,OACH;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,MAAM,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,IAAA,CAAK,OAAA,GAAU,CAAC,IAAA,EAAM,MAAM,CAAA,GAAI,CAAC,MAAA,EAAQ,IAAI,CAAA;AAC5D,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,OAAA,CAAQ;AAAA,UACN,EAAA,EAAI,CAAA,KAAA,EAAQ,EAAE,KAAK,CAAA,CAAA;AAAA,UACnB,QAAA,EAAU,MAAA;AAAA,UACV,IAAA,EAAM,CAAA;AAAA,UACN,EAAA,EAAI,CAAA;AAAA,UACJ,aAAA,EAAe,IAAA,CAAK,aAAA,GAAgB,IAAA,GAAO,MAAA;AAAA,UAC3C,WAAW,IAAA,CAAK,SAAA;AAAA,UAChB,OAAO,IAAA,CAAK;AAAA,SACb;AAAA,OACH;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,MAAM,OAAA,CAAQ;AAAA,IAClB,aAAA,EAAeC,yCAAA;AAAA,IACf,MAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,cAAA,EAAgB,cAAA,CAAe,MAAA,GAAS,cAAA,GAAiB;AAAA,GAC1D,CAAA;AAED,EAAA,OAAOC,+BAAY,GAAG,CAAA;AACxB;AAUA,SAAS,UAAU,KAAA,EAAkC;AACnD,EAAA,MAAM,EAAA,GAAK,iBAAiB,KAAK,CAAA;AACjC,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,EAAA,CAAG,IAAI,CAAA;AACnC,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AACnC,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,GAAA,CAAI,IAAI,EAAE,IAAA,EAAK;AACxC,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,OAAO,OAAA,CAAQ;AAAA,IACb,IAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAY,GAAA,CAAI,UAAA;AAAA,IAChB,WAAA,EAAa,GAAG,WAAA,IAAe;AAAA,GAChC,CAAA;AACH;AAEA,SAAS,WAAA,CAAY,IAAY,GAAA,EAA4C;AAC3E,EAAA,MAAM,MAAA,GAAkC,EAAE,GAAG,GAAA,EAAI;AACjD,EAAA,IAAI,EAAA,KAAO,QAAA,EAAU,MAAA,CAAO,QAAQ,CAAA,GAAI,IAAA;AACxC,EAAA,IAAI,EAAA,KAAO,WAAA,EAAa,MAAA,CAAO,WAAW,CAAA,GAAI,IAAA;AAC9C,EAAA,OAAO,QAAQ,MAAM,CAAA;AACvB;AAEA,SAAS,YAAY,KAAA,EAAkD;AACrE,EAAA,MAAM,GAAA,GAAM,gBAAgB,KAAK,CAAA;AACjC,EAAA,MAAM,SAAS,GAAA,CAAI,IAAA,CAAK,IAAA,EAAK,CAAE,MAAM,KAAK,CAAA;AAC1C,EAAA,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,OAAO,IAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AACrC,EAAA,MAAM,MAAA,GAAS,OAAO,IAAI,CAAA;AAC1B,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,EAAG,OAAO,IAAA;AACjC,EAAA,MAAM,QAAA,GAAW,OAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,EAAK;AACpD,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,aAAa,CAAA,GAAI,QAAA,CAAS,MAAM,CAAA,EAAG,SAAS,CAAA,CAAE,IAAA,EAAK,GAAI,QAAA;AACpE,EAAA,MAAM,QAAA,GAAW,aAAa,CAAA,GAAI,QAAA,CAAS,MAAM,SAAA,GAAY,CAAC,CAAA,CAAE,IAAA,EAAK,GAAI,MAAA;AACzE,EAAA,OAAO,OAAA,CAAQ;AAAA,IACb,IAAA;AAAA,IACA,UAAU,QAAA,IAAY,MAAA;AAAA,IACtB,MAAA;AAAA,IACA,MAAA,EAAQ,IAAI,UAAA,CAAW;AAAA,GACxB,CAAA;AACH;;;AC9fA,SAAS,EAAE,CAAA,EAAmB;AAC5B,EAAA,OAAO,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAI,IAAI,GAAI,CAAA;AAC3C;AAGA,IAAM,WAAA,uBAAuC,GAAA,CAAI,CAAC,UAAU,WAAA,EAAa,aAAA,EAAe,QAAQ,CAAC,CAAA;AAEjG,SAAS,YAAY,IAAA,EAAsB;AACzC,EAAA,OAAO,IAAA,KAAS,WACZ,MAAA,GACA,IAAA,KAAS,gBACP,aAAA,GACA,IAAA,KAAS,WACP,QAAA,GACA,WAAA;AACV;AASA,SAAS,YAAY,GAAA,EAAsC;AACzD,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAoB;AACrC,EAAA,KAAA,MAAW,EAAA,IAAM,IAAI,QAAA,EAAU;AAC7B,IAAA,IAAI,CAAC,WAAA,CAAY,GAAA,CAAI,EAAA,CAAG,WAAW,CAAA,EAAG;AACtC,IAAA,MAAM,IAAA,GAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAK,CAAE,OAAA,CAAQ,KAAA,EAAO,QAAG,CAAA,IAAK,WAAA,CAAY,EAAA,CAAG,WAAW,CAAA;AAC9E,IAAA,IAAI,IAAA,GAAO,IAAA;AACX,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,OAAO,IAAA,CAAK,IAAI,IAAI,CAAA,SAAU,CAAA,EAAG,IAAI,IAAI,CAAA,EAAG,CAAA,CAAA;AAC5C,IAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AACb,IAAA,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,EAAA,EAAI,IAAI,CAAA;AAAA,EACtB;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,aAAa,EAAA,EAAqC;AACzD,EAAA,OAAO,EAAA,GAAK,CAAA,QAAA,EAAW,CAAA,CAAE,EAAA,CAAG,EAAE,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,EAAA,CAAG,EAAE,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AACpD;AAEA,SAAS,gBAAgB,GAAA,EAA8C;AACrE,EAAA,IAAI,CAAC,KAAK,OAAO,EAAA;AACjB,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,GAAA,CAAI,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AACnC,EAAA,IAAI,GAAA,CAAI,SAAA,EAAW,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA;AACzC,EAAA,IAAI,GAAA,CAAI,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,IAAI,MAAM,CAAA;AACrC,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,MAAM,MAAA,EAAQ,GAAA,IAAO,KAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAC9C,EAAA,IAAI,GAAA,CAAI,SAAS,GAAA,IAAO,UAAA;AACxB,EAAA,OAAO,GAAA;AACT;AAQO,SAAS,aAAa,GAAA,EAAyB;AACpD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,KAAA,GAAQ,YAAY,GAAG,CAAA;AAC7B,EAAA,MAAM,MAAA,GAAS,CAAC,EAAA,KAA2B,KAAA,CAAM,IAAI,EAAA,CAAG,EAAE,KAAK,EAAA,CAAG,KAAA;AAElE,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,MAAA,EAAS,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AACtC,EAAA,IAAI,GAAA,CAAI,OAAO,KAAA,EAAO,KAAA,CAAM,KAAK,CAAA,MAAA,EAAS,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAC5D,EAAA,IAAI,IAAI,MAAA,CAAO,IAAA;AACb,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,MAAA,EAAS,CAAA,CAAE,GAAA,CAAI,OAAO,IAAA,CAAK,KAAK,CAAC,CAAA,EAAA,EAAK,EAAE,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA;AAC/E,EAAA,IAAI,GAAA,CAAI,MAAA,CAAO,eAAA,EAAiB,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,GAAA,CAAI,MAAA,CAAO,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC/F,EAAA,IAAI,GAAA,CAAI,OAAO,UAAA,EAAY,KAAA,CAAM,KAAK,CAAA,OAAA,EAAU,GAAA,CAAI,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AACvE,EAAA,IAAI,GAAA,CAAI,OAAO,sBAAA,EAAwB;AACrC,IAAA,MAAM,CAAA,GAAI,IAAI,MAAA,CAAO,sBAAA;AACrB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,CAAA,CAAE,CAAA,CAAE,UAAU,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,CAAA,CAAE,SAAS,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EAClE;AAEA,EAAA,MAAM,cAAwB,EAAC;AAE/B,EAAA,KAAA,MAAW,EAAA,IAAM,IAAI,QAAA,EAAU;AAC7B,IAAA,KAAA,CAAM,KAAK,WAAA,CAAY,EAAA,EAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AACtC,IAAA,IAAI,EAAA,CAAG,WAAA,KAAgB,WAAA,IAAe,EAAA,CAAG,QAAA,EAAU;AACjD,MAAA,WAAA,CAAY,KAAK,UAAA,CAAW,EAAA,EAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AAAA,IAC7C;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,IAAA,IAAQ,WAAA,EAAa,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAE/C,EAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,KAAA,EAAO;AAC5B,IAAA,MAAM,OAAO,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAI,KAAK,IAAA,CAAK,IAAA;AAC1C,IAAA,MAAM,KAAK,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,EAAE,KAAK,IAAA,CAAK,EAAA;AACtC,IAAA,MAAM,aAAa,IAAA,CAAK,KAAA,GAAQ,CAAA,EAAA,EAAK,IAAA,CAAK,KAAK,CAAA,CAAA,GAAK,EAAA;AACpD,IAAA,IAAI,IAAA,CAAK,aAAa,YAAA,EAAc;AAClC,MAAA,KAAA,CAAM,KAAK,CAAA,EAAG,IAAI,OAAO,EAAE,CAAA,EAAG,UAAU,CAAA,CAAE,CAAA;AAAA,IAC5C,CAAA,MAAO;AACL,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,SAAA,GACZ,CAAA,EAAA,EAAK,KAAK,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,aAAA,GAAgB,IAAA,GAAO,GAAG,CAAA,CAAA,GACtD,IAAA,CAAK,gBACH,KAAA,GACA,IAAA;AACN,MAAA,KAAA,CAAM,IAAA,CAAK,GAAG,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,EAAG,UAAU,CAAA,CAAE,CAAA;AAAA,IAC/C;AAAA,EACF;AAKA,EAAA,IAAI,IAAI,cAAA,EAAgB;AACtB,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,IAAA,IAAI,GAAA,CAAI,MAAA,CAAO,eAAA,EAAiB,OAAA,CAAQ,IAAI,WAAW,CAAA;AACvD,IAAA,IAAI,GAAA,CAAI,MAAA,CAAO,UAAA,EAAY,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAC/C,IAAA,KAAA,MAAW,GAAA,IAAO,IAAI,cAAA,EAAgB;AACpC,MAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,IAAA,EAAK,CAAE,MAAM,KAAK,CAAA,CAAE,CAAC,CAAE,CAAA,EAAG;AAC9C,MAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAC5B;AAEA,SAAS,WAAA,CAAY,IAAgB,IAAA,EAAsB;AACzD,EAAA,MAAM,IAAI,EAAA,CAAG,QAAA;AACb,EAAA,QAAQ,GAAG,WAAA;AAAa,IACtB,KAAK,QAAA;AACH,MAAA,OAAO,UAAU,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,CAAA,CAAE,UAAU,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,CAAA,CAAE,SAAS,CAAC,CAAA,CAAA,EAAI,YAAA,CAAa,EAAA,CAAG,WAAW,CAAC,CAAA,CAAA;AAAA,IAC9F,KAAK,WAAA;AACH,MAAA,OAAO,CAAA,UAAA,EAAa,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,EAAE,UAAU,CAAC,KAAK,CAAA,CAAE,CAAA,CAAE,SAAS,CAAC,CAAA,CAAA,EAAI,gBAAgB,EAAA,CAAG,UAAU,CAAC,CAAA,EAAG,YAAA,CAAa,EAAA,CAAG,WAAW,CAAC,CAAA,CAAA;AAAA,IAClI,KAAK,MAAA;AAEH,MAAA,OAAO,CAAA,KAAA,EAAQ,KAAK,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,CAAA,CAAE,UAAU,CAAC,KAAK,CAAA,CAAE,CAAA,CAAE,SAAS,CAAC,CAAA,CAAA,EAAI,EAAA,CAAG,QAAQ,CAAA,QAAA,EAAW,EAAA,CAAG,KAAK,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CAAA;AAAA,IAC5H,KAAK,UAAA;AACH,MAAA,OAAO,CAAA,SAAA,EAAY,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,EAAA,CAAG,cAAc,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,EAAA,CAAG,YAAY,CAAC,CAAA,CAAA,CAAA;AAAA,IACzE,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,OAAA,EAAU,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,CAAA,CAAE,UAAU,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,CAAA,CAAE,SAAS,CAAC,CAAA,CAAA,CAAA;AAAA,IAC9D,KAAK,YAAA;AACH,MAAA,OAAO,CAAA,WAAA,EAAc,EAAA,CAAG,MAAM,CAAA,EAAA,EAAK,EAAE,CAAA,CAAE,UAAU,CAAC,CAAA,EAAA,EAAK,EAAE,CAAA,CAAE,SAAS,CAAC,CAAA,EAAA,EAAK,GAAG,IAAI,CAAA,CAAA;AAAA,IACnF,KAAK,aAAA;AACH,MAAA,OAAO,GAAG,EAAA,CAAG,SAAA,KAAc,cAAA,GAAiB,eAAA,GAAkB,aAAa,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,EAAE,UAAU,CAAC,KAAK,CAAA,CAAE,CAAA,CAAE,SAAS,CAAC,CAAA,CAAA,CAAA;AAAA,IAC5H,KAAK,UAAA;AACH,MAAA,OAAO,CAAA,EAAG,GAAG,IAAI,CAAA,EAAA,EAAK,EAAE,CAAA,CAAE,UAAU,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,CAAA,CAAE,SAAS,CAAC,CAAA,EAAA,EAAK,EAAE,EAAA,CAAG,KAAK,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,EAAA,CAAG,MAAM,CAAC,CAAA,CAAA;AAAA;AAE9F;AAEA,SAAS,UAAA,CAAW,IAAsB,IAAA,EAAsB;AAC9D,EAAA,MAAM,KAAK,EAAA,CAAG,QAAA;AACd,EAAA,MAAM,KAAA,GAAQ,GAAG,QAAA,GAAW,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,EAAA,CAAG,QAAQ,CAAA,CAAA,GAAK,IAAA;AACxD,EAAA,MAAM,SAAS,EAAA,CAAG,MAAA,GAAS,CAAA,EAAA,EAAK,EAAA,CAAG,MAAM,CAAA,CAAA,CAAA,GAAM,EAAA;AAC/C,EAAA,OAAO,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA,EAAI,CAAA,CAAE,GAAG,eAAe,CAAC,GAAG,MAAM,CAAA,CAAA;AAC1D","file":"index.cjs","sourcesContent":["/**\n * Small, line-oriented helpers for the OWM DSL (concept doc §7.4).\n * The DSL is line-based; a full tokenizer/generator is not needed.\n */\n\nimport type { Method } from '@miragon/wardley-schema-model';\n\nexport interface ParsedCoords {\n readonly a: number;\n readonly b: number;\n}\n\nconst COORDS_RE = /\\[\\s*([-\\d.]+)\\s*,\\s*([-\\d.]+)\\s*\\]/;\n\n/** Order stays raw (a, b). */\nexport function parseCoords(line: string): ParsedCoords | null {\n const m = COORDS_RE.exec(line);\n if (!m) return null;\n const a = Number(m[1]);\n const b = Number(m[2]);\n if (Number.isNaN(a) || Number.isNaN(b)) return null;\n return { a, b };\n}\n\nexport function stripCoords(line: string): string {\n return line.replace(COORDS_RE, ' ');\n}\n\nexport interface InlineDecorators {\n readonly market?: boolean;\n readonly ecosystem?: boolean;\n readonly inertia?: boolean;\n readonly method?: Method;\n}\n\nconst PAREN_RE = /\\(([^)]*)\\)/g;\nconst METHODS: ReadonlySet<string> = new Set(['build', 'buy', 'outsource']);\n\n/**\n * Reads the inline decorators of a component line:\n * - parenthesized: `(market)`, `(ecosystem)`, `(build|buy|outsource)`, combined `(market, outsource)`\n * - trailing keyword: `inertia`\n * Returns the decorators found and the line stripped of them.\n */\nexport function parseDecorators(line: string): { decorators: InlineDecorators; rest: string } {\n const dec: {\n market?: boolean;\n ecosystem?: boolean;\n inertia?: boolean;\n method?: Method;\n } = {};\n let rest = line;\n\n rest = rest.replace(PAREN_RE, (_full, group: string) => {\n for (const rawToken of group.split(',')) {\n const token = rawToken.trim().toLowerCase();\n if (token === 'market') dec.market = true;\n else if (token === 'ecosystem') dec.ecosystem = true;\n else if (token === 'inertia') dec.inertia = true;\n else if (METHODS.has(token)) dec.method = token as Method;\n }\n return ' ';\n });\n\n // trailing keyword `inertia` (unparenthesized)\n rest = rest.replace(/\\binertia\\b/i, () => {\n dec.inertia = true;\n return ' ';\n });\n\n return { decorators: dec, rest };\n}\n\n// Note color as an (OWM-backwards-compatible) extension: `(color #rrggbb)` OR `(color green)`.\n// Deliberately placed after the coordinates -> the OWM parser ignores the rest instead of pulling\n// it into the note text. Accepts hex or CSS color names.\nconst COLOR_RE = /\\(\\s*color\\s+(#[0-9a-fA-F]{3,8}|[a-zA-Z][\\w-]*)\\s*\\)/i;\n\nexport function parseColor(line: string): { color?: string; rest: string } {\n const m = COLOR_RE.exec(line);\n if (!m || !m[1]) return { rest: line };\n return { color: m[1], rest: line.replace(COLOR_RE, ' ') };\n}\n\nexport interface LabelOffsetToken {\n readonly dx: number;\n readonly dy: number;\n}\n\nconst LABEL_OFFSET_RE = /\\blabel\\s*\\[\\s*([-\\d.]+)\\s*,\\s*([-\\d.]+)\\s*\\]/i;\n\n/** Reads an optional `label [dx, dy]` (pixel offset) and returns it plus the stripped line. */\nexport function parseLabelOffset(line: string): {\n labelOffset: LabelOffsetToken | null;\n rest: string;\n} {\n const m = LABEL_OFFSET_RE.exec(line);\n if (!m) return { labelOffset: null, rest: line };\n const dx = Number(m[1]);\n const dy = Number(m[2]);\n const rest = line.replace(LABEL_OFFSET_RE, ' ');\n if (Number.isNaN(dx) || Number.isNaN(dy)) return { labelOffset: null, rest };\n return { labelOffset: { dx, dy }, rest };\n}\n\n/** First word (keyword) of a line, lowercased. */\nexport function keywordOf(line: string): string {\n const m = /^\\s*([A-Za-z][\\w-]*)/.exec(line);\n return m ? m[1]!.toLowerCase() : '';\n}\n\nexport function slug(label: string): string {\n return (\n label\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_+|_+$/g, '') || 'x'\n );\n}\n","import {\n CURRENT_SCHEMA_VERSION,\n validateMap,\n type AcceleratorElement,\n type AnchorElement,\n type AnnotationElement,\n type AttitudeElement,\n type AttitudeKind,\n type ComponentDecorators,\n type ComponentElement,\n type MapConfig,\n type MapEdge,\n type MapElement,\n type MapStyle,\n type Movement,\n type NoteElement,\n type PipelineElement,\n type SubmapElement,\n type WardleyMap,\n} from '@miragon/wardley-schema-model';\nimport {\n keywordOf,\n parseColor,\n parseCoords,\n parseDecorators,\n parseLabelOffset,\n slug,\n stripCoords,\n type InlineDecorators,\n} from './lexer.js';\n\nconst DEP_RE = /^(.+?)\\s*->\\s*(.+)$/;\n// Flow: A +> B, A +<> B, A +< B (reverse), A +'120ms'> B, A +'120ms'<> B\nconst FLOW_RE = /^(.+?)\\s*\\+(?:'([^']*)')?(<>|>|<)\\s*(.+)$/;\n// Config/special keywords that must NOT be (pre-)detected as an edge — `evolution`/`evolve`/\n// `y-axis`/`title` can themselves contain `->` and have their own handling in the switch.\nconst NON_LINK_KEYWORDS: ReadonlySet<string> = new Set([\n 'title',\n 'style',\n 'size',\n 'evolution',\n 'y-axis',\n 'annotations',\n 'annotation',\n 'evolve',\n]);\nconst KNOWN_STYLES: ReadonlySet<string> = new Set(['wardley', 'handwritten', 'colour', 'dark']);\n\ninterface PendingLink {\n readonly left: string;\n readonly right: string;\n readonly kind: 'dependency' | 'flow';\n readonly bidirectional?: boolean;\n /** `+<` — flow direction reversed (right -> left). */\n readonly reverse?: boolean;\n readonly flowValue?: string;\n /** Annotation text after `;`. */\n readonly label?: string;\n readonly raw: string;\n}\ninterface PendingEvolve {\n readonly name: string;\n readonly newLabel?: string;\n readonly target: number;\n readonly method?: Movement['method'];\n readonly raw: string;\n}\ninterface PendingPipeline {\n readonly name: string;\n readonly start: number;\n readonly end: number;\n readonly raw: string;\n}\n\nfunction compact<T extends Record<string, unknown>>(obj: T): T {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) if (v !== undefined) out[k] = v;\n return out as T;\n}\n\nclass IdAllocator {\n private readonly used = new Set<string>();\n alloc(prefix: string, label: string): string {\n const base = `${prefix}_${slug(label)}`;\n let id = base;\n let i = 2;\n while (this.used.has(id)) id = `${base}_${i++}`;\n this.used.add(id);\n return id;\n }\n}\n\n/**\n * Keyword-differentiated coordinates (component/anchor/note = [visibility, maturity];\n * pipeline = [maturityStart, maturityEnd]). Unknown lines land in `rawPassthrough`.\n */\nexport function parseDSL(text: string): WardleyMap {\n const ids = new IdAllocator();\n const nameToId = new Map<string, string>();\n const elements: MapElement[] = [];\n const rawPassthrough: string[] = [];\n const pendingLinks: PendingLink[] = [];\n const pendingEvolve: PendingEvolve[] = [];\n const pendingPipeline: PendingPipeline[] = [];\n\n let config: MapConfig = { title: 'Untitled Map' };\n let annoCounter = 0;\n\n const register = (name: string, id: string) => {\n if (!nameToId.has(name)) nameToId.set(name, id);\n };\n\n /** Tries to capture a line as a dependency/flow. Returns true when consumed. */\n const pushLink = (line: string, raw: string): boolean => {\n const semi = line.indexOf(';');\n const core = semi >= 0 ? line.slice(0, semi).trim() : line;\n const linkLabel = semi >= 0 ? line.slice(semi + 1).trim() : '';\n const dep = DEP_RE.exec(core);\n const flow = dep ? null : FLOW_RE.exec(core);\n if (dep) {\n pendingLinks.push({\n left: dep[1]!.trim(),\n right: dep[2]!.trim(),\n kind: 'dependency',\n ...(linkLabel ? { label: linkLabel } : {}),\n raw,\n });\n return true;\n }\n if (flow) {\n const op = flow[3]!;\n pendingLinks.push({\n left: flow[1]!.trim(),\n right: flow[4]!.trim(),\n kind: 'flow',\n bidirectional: op === '<>',\n reverse: op === '<',\n ...(flow[2] ? { flowValue: flow[2] } : {}),\n ...(linkLabel ? { label: linkLabel } : {}),\n raw,\n });\n return true;\n }\n return false;\n };\n\n for (const raw of text.split(/\\r?\\n/)) {\n const line = raw.trim();\n if (!line) continue;\n const kw = keywordOf(line);\n const after = line.slice(kw.length).trim();\n\n // Edges/flows FIRST: element NAMES may begin with a keyword word (the default\n // component is named \"Component\" -> edge `Component -> X`). Declarations ALWAYS carry\n // coordinates `[...]`, edges never do. Without this pre-detection `Component -> X` would be\n // misread as a (broken) `component` declaration and vanish on re-import. Config/\n // special keywords (title/evolution/y-axis/evolve …) are exempt — they use `->` themselves.\n if (!NON_LINK_KEYWORDS.has(kw) && !parseCoords(line) && pushLink(line, raw)) {\n continue;\n }\n\n switch (kw) {\n case 'title':\n config = { ...config, title: after };\n break;\n\n case 'anchor': {\n const node = parseNode(after);\n if (!node) {\n rawPassthrough.push(raw);\n break;\n }\n const id = ids.alloc('anchor', node.name);\n const anchor: AnchorElement = compact({\n id,\n elementType: 'anchor',\n label: node.name,\n position: { visibility: node.coords.a, evolution: node.coords.b },\n labelOffset: node.labelOffset,\n }) as AnchorElement;\n elements.push(anchor);\n register(node.name, id);\n break;\n }\n\n case 'component':\n case 'market':\n case 'ecosystem': {\n const node = parseNode(after);\n if (!node) {\n rawPassthrough.push(raw);\n break;\n }\n const decorators = mergeLegacy(kw, node.decorators);\n const id = ids.alloc('cmp', node.name);\n const component: ComponentElement = compact({\n id,\n elementType: 'component',\n label: node.name,\n position: { visibility: node.coords.a, evolution: node.coords.b },\n labelOffset: node.labelOffset,\n decorators: Object.keys(decorators).length ? decorators : undefined,\n }) as ComponentElement;\n elements.push(component);\n register(node.name, id);\n break;\n }\n\n case 'note': {\n const { color, rest } = parseColor(after);\n const coords = parseCoords(rest);\n // Literal `\\n` back into real line breaks (multi-line notes).\n const textPart = stripCoords(rest).trim().replace(/\\\\n/g, '\\n');\n if (!coords) {\n rawPassthrough.push(raw);\n break;\n }\n const id = ids.alloc('note', textPart || 'note');\n const note: NoteElement = compact({\n id,\n elementType: 'note',\n label: textPart,\n position: { visibility: coords.a, evolution: coords.b },\n color,\n }) as NoteElement;\n elements.push(note);\n break;\n }\n\n case 'pipeline': {\n const coords = parseCoords(after);\n const name = stripCoords(after).trim();\n if (!coords || !name) {\n rawPassthrough.push(raw);\n break;\n }\n pendingPipeline.push({ name, start: coords.a, end: coords.b, raw });\n break;\n }\n\n case 'evolve': {\n const ev = parseEvolve(after);\n if (!ev) {\n rawPassthrough.push(raw);\n break;\n }\n pendingEvolve.push({ ...ev, raw });\n break;\n }\n\n case 'style': {\n const s = after.toLowerCase();\n if (KNOWN_STYLES.has(s)) config = { ...config, style: s as MapStyle };\n else rawPassthrough.push(raw);\n break;\n }\n\n case 'size': {\n const coords = parseCoords(after);\n if (coords) config = { ...config, size: { width: coords.a, height: coords.b } };\n else rawPassthrough.push(raw);\n break;\n }\n\n case 'evolution': {\n // Exactly four positions (the serializer always writes four). Do NOT filter out\n // empty segments, otherwise an empty stage label is lost (the whole line would fall\n // out of the 4-slot grid and land in rawPassthrough -> axis snaps back to default).\n const parts = after.split('->').map((s) => s.trim());\n if (parts.length === 4) {\n config = { ...config, evolutionLabels: [parts[0]!, parts[1]!, parts[2]!, parts[3]!] };\n } else rawPassthrough.push(raw);\n break;\n }\n\n case 'y-axis': {\n const parts = after\n .split('->')\n .map((s) => s.trim())\n .filter(Boolean);\n if (parts.length) config = { ...config, yAxisLabel: parts[0]! };\n else rawPassthrough.push(raw);\n break;\n }\n\n case 'annotations': {\n const coords = parseCoords(after);\n if (coords) {\n config = {\n ...config,\n annotationsBoxPosition: { visibility: coords.a, evolution: coords.b },\n };\n } else rawPassthrough.push(raw);\n break;\n }\n\n case 'annotation': {\n const coords = parseCoords(after);\n if (!coords) {\n rawPassthrough.push(raw);\n break;\n }\n const numMatch = /^\\s*(\\d+)/.exec(after);\n const number = numMatch ? Number(numMatch[1]) : ++annoCounter;\n const text = stripCoords(after.replace(/^\\s*\\d+\\s*/, '')).trim();\n const position = { visibility: coords.a, evolution: coords.b };\n const annotation: AnnotationElement = {\n id: ids.alloc('anno', String(number)),\n elementType: 'annotation',\n label: text,\n position,\n number,\n positions: [position],\n text,\n };\n elements.push(annotation);\n break;\n }\n\n case 'pioneers':\n case 'settlers':\n case 'townplanners': {\n // OWM: `<kind> [visibility, maturity] width height`\n const coords = parseCoords(after);\n const trailing = stripCoords(after).trim().split(/\\s+/).filter(Boolean);\n const width = Number(trailing[0]);\n const height = Number(trailing[1]);\n if (!coords || Number.isNaN(width) || Number.isNaN(height)) {\n rawPassthrough.push(raw);\n break;\n }\n const attitude: AttitudeElement = {\n id: ids.alloc('attitude', kw),\n elementType: 'attitude',\n kind: kw as AttitudeKind,\n label: '',\n position: { visibility: coords.a, evolution: coords.b },\n width,\n height,\n };\n elements.push(attitude);\n break;\n }\n\n case 'accelerator':\n case 'deaccelerator': {\n const node = parseNode(after);\n if (!node) {\n rawPassthrough.push(raw);\n break;\n }\n const id = ids.alloc('accel', node.name);\n const accelerator: AcceleratorElement = {\n id,\n elementType: 'accelerator',\n direction: kw === 'deaccelerator' ? 'deaccelerate' : 'accelerate',\n label: node.name,\n position: { visibility: node.coords.a, evolution: node.coords.b },\n };\n elements.push(accelerator);\n register(node.name, id);\n break;\n }\n\n case 'submap': {\n const node = parseNode(after);\n if (!node) {\n rawPassthrough.push(raw);\n break;\n }\n const id = ids.alloc('submap', node.name);\n const submap: SubmapElement = {\n id,\n elementType: 'submap',\n label: node.name,\n position: { visibility: node.coords.a, evolution: node.coords.b },\n };\n elements.push(submap);\n register(node.name, id);\n break;\n }\n\n default: {\n // Unknown keyword: try as a link (e.g. `A -> B; limited by`), otherwise keep raw.\n if (!pushLink(line, raw)) rawPassthrough.push(raw);\n }\n }\n }\n\n for (const ev of pendingEvolve) {\n const id = nameToId.get(ev.name);\n const idx = elements.findIndex((e) => e.id === id);\n if (idx < 0 || elements[idx]!.elementType !== 'component') {\n rawPassthrough.push(ev.raw);\n continue;\n }\n const movement = compact({\n targetEvolution: ev.target,\n newLabel: ev.newLabel,\n method: ev.method,\n }) as Movement;\n elements[idx] = { ...(elements[idx] as ComponentElement), movement };\n }\n\n // Derives visibility from the component of the same name.\n for (const p of pendingPipeline) {\n const refId = nameToId.get(p.name);\n const ref = elements.find((e) => e.id === refId);\n const visibility = ref ? ref.position.visibility : 0.5;\n const id = ids.alloc('pipeline', p.name);\n const pipeline: PipelineElement = {\n id,\n elementType: 'pipeline',\n label: p.name,\n position: { visibility, evolution: (p.start + p.end) / 2 },\n evolutionStart: p.start,\n evolutionEnd: p.end,\n childIds: [],\n };\n elements.push(pipeline);\n }\n\n let depN = 0;\n let flowN = 0;\n const edges: MapEdge[] = [];\n for (const link of pendingLinks) {\n const fromId = nameToId.get(link.left);\n const toId = nameToId.get(link.right);\n if (!fromId || !toId) {\n rawPassthrough.push(link.raw);\n continue;\n }\n if (link.kind === 'dependency') {\n edges.push(\n compact({\n id: `dep_${++depN}`,\n edgeType: 'dependency',\n from: fromId,\n to: toId,\n label: link.label,\n }) as MapEdge,\n );\n } else {\n // `+<` reverses the flow direction (right -> left).\n const [f, t] = link.reverse ? [toId, fromId] : [fromId, toId];\n edges.push(\n compact({\n id: `flow_${++flowN}`,\n edgeType: 'flow',\n from: f,\n to: t,\n bidirectional: link.bidirectional ? true : undefined,\n flowValue: link.flowValue,\n label: link.label,\n }) as MapEdge,\n );\n }\n }\n\n const map = compact({\n schemaVersion: CURRENT_SCHEMA_VERSION,\n config,\n elements,\n edges,\n rawPassthrough: rawPassthrough.length ? rawPassthrough : undefined,\n }) as WardleyMap;\n\n return validateMap(map);\n}\n\ninterface ParsedNode {\n readonly name: string;\n readonly coords: { a: number; b: number };\n readonly decorators: InlineDecorators;\n readonly labelOffset?: { dx: number; dy: number };\n}\n\n/** Parses `<name> [a, b] <decorators> [label [dx,dy]]` (the stripping order matters). */\nfunction parseNode(after: string): ParsedNode | null {\n const lo = parseLabelOffset(after);\n const dec = parseDecorators(lo.rest);\n const coords = parseCoords(dec.rest);\n if (!coords) return null;\n const name = stripCoords(dec.rest).trim();\n if (!name) return null;\n return compact({\n name,\n coords,\n decorators: dec.decorators,\n labelOffset: lo.labelOffset ?? undefined,\n }) as ParsedNode;\n}\n\nfunction mergeLegacy(kw: string, dec: InlineDecorators): ComponentDecorators {\n const merged: Record<string, unknown> = { ...dec };\n if (kw === 'market') merged['market'] = true;\n if (kw === 'ecosystem') merged['ecosystem'] = true;\n return compact(merged) as ComponentDecorators;\n}\n\nfunction parseEvolve(after: string): Omit<PendingEvolve, 'raw'> | null {\n const dec = parseDecorators(after);\n const tokens = dec.rest.trim().split(/\\s+/);\n if (tokens.length < 2) return null;\n const last = tokens[tokens.length - 1]!;\n const target = Number(last);\n if (Number.isNaN(target)) return null;\n const namePart = tokens.slice(0, -1).join(' ').trim();\n if (!namePart) return null;\n const renameIdx = namePart.indexOf('->');\n const name = renameIdx >= 0 ? namePart.slice(0, renameIdx).trim() : namePart;\n const newLabel = renameIdx >= 0 ? namePart.slice(renameIdx + 2).trim() : undefined;\n return compact({\n name,\n newLabel: newLabel || undefined,\n target,\n method: dec.decorators.method,\n }) as Omit<PendingEvolve, 'raw'>;\n}\n","import type {\n ComponentDecorators,\n ComponentElement,\n LabelOffset,\n MapElement,\n WardleyMap,\n} from '@miragon/wardley-schema-model';\n\nfunction r(n: number): string {\n return String(Math.round(n * 1000) / 1000);\n}\n\n/** Types referenced BY THEIR NAME in the OWM DSL (edge endpoints + namespace). */\nconst NAMED_TYPES: ReadonlySet<string> = new Set(['anchor', 'component', 'accelerator', 'submap']);\n\nfunction defaultName(type: string): string {\n return type === 'anchor'\n ? 'User'\n : type === 'accelerator'\n ? 'Accelerator'\n : type === 'submap'\n ? 'Submap'\n : 'Component';\n}\n\n/**\n * Returns a name per element ID that is UNIQUE within the DSL for the referenceable types\n * (component/anchor/…). Because edges are serialized by name (`A -> B`), duplicate or empty\n * labels would collapse onto the same node on re-import and make arrows disappear. So on\n * collision a suffix (`Name 2`) is assigned and on an empty label a default — consistently for\n * BOTH sides (node line AND edge reference). Unique names stay unchanged.\n */\nfunction uniqueNames(map: WardleyMap): Map<string, string> {\n const used = new Set<string>();\n const byId = new Map<string, string>();\n for (const el of map.elements) {\n if (!NAMED_TYPES.has(el.elementType)) continue;\n const base = el.label.trim().replace(/->/g, '→') || defaultName(el.elementType);\n let name = base;\n let i = 2;\n while (used.has(name)) name = `${base} ${i++}`;\n used.add(name);\n byId.set(el.id, name);\n }\n return byId;\n}\n\nfunction offsetSuffix(lo: LabelOffset | undefined): string {\n return lo ? ` label [${r(lo.dx)}, ${r(lo.dy)}]` : '';\n}\n\nfunction decoratorSuffix(dec: ComponentDecorators | undefined): string {\n if (!dec) return '';\n const paren: string[] = [];\n if (dec.market) paren.push('market');\n if (dec.ecosystem) paren.push('ecosystem');\n if (dec.method) paren.push(dec.method);\n let out = '';\n if (paren.length) out += ` (${paren.join(', ')})`;\n if (dec.inertia) out += ' inertia';\n return out;\n}\n\n/**\n * Serializes a WardleyMap into Online-Wardley-Maps text. Deterministic; writes only\n * syntax the OWM parser reads back. `rawPassthrough` is appended unchanged.\n * Coordinates are keyword-differentiated (component/anchor/note = [visibility, maturity];\n * pipeline = [maturityStart, maturityEnd]).\n */\nexport function serializeDSL(map: WardleyMap): string {\n const lines: string[] = [];\n const names = uniqueNames(map);\n const nameOf = (el: MapElement): string => names.get(el.id) ?? el.label;\n\n lines.push(`title ${map.config.title}`);\n if (map.config.style) lines.push(`style ${map.config.style}`);\n if (map.config.size)\n lines.push(`size [${r(map.config.size.width)}, ${r(map.config.size.height)}]`);\n if (map.config.evolutionLabels) lines.push(`evolution ${map.config.evolutionLabels.join('->')}`);\n if (map.config.yAxisLabel) lines.push(`y-axis ${map.config.yAxisLabel}`);\n if (map.config.annotationsBoxPosition) {\n const b = map.config.annotationsBoxPosition;\n lines.push(`annotations [${r(b.visibility)}, ${r(b.evolution)}]`);\n }\n\n const evolveLines: string[] = [];\n\n for (const el of map.elements) {\n lines.push(elementLine(el, nameOf(el)));\n if (el.elementType === 'component' && el.movement) {\n evolveLines.push(evolveLine(el, nameOf(el)));\n }\n }\n\n for (const line of evolveLines) lines.push(line);\n\n for (const edge of map.edges) {\n const from = names.get(edge.from) ?? edge.from;\n const to = names.get(edge.to) ?? edge.to;\n const annotation = edge.label ? `; ${edge.label}` : '';\n if (edge.edgeType === 'dependency') {\n lines.push(`${from} -> ${to}${annotation}`);\n } else {\n const op = edge.flowValue\n ? `+'${edge.flowValue}'${edge.bidirectional ? '<>' : '>'}`\n : edge.bidirectional\n ? '+<>'\n : '+>';\n lines.push(`${from} ${op} ${to}${annotation}`);\n }\n }\n\n // Config keywords were already emitted from the map above. A rawPassthrough entry with the\n // same keyword (e.g. an unparsable `evolution` line from externally-authored DSL) would\n // otherwise produce a contradictory duplicate line — drop it (config is the truth).\n if (map.rawPassthrough) {\n const emitted = new Set<string>();\n if (map.config.evolutionLabels) emitted.add('evolution');\n if (map.config.yAxisLabel) emitted.add('y-axis');\n for (const raw of map.rawPassthrough) {\n if (emitted.has(raw.trim().split(/\\s+/)[0]!)) continue;\n lines.push(raw);\n }\n }\n\n return lines.join('\\n') + '\\n';\n}\n\nfunction elementLine(el: MapElement, name: string): string {\n const p = el.position;\n switch (el.elementType) {\n case 'anchor':\n return `anchor ${name} [${r(p.visibility)}, ${r(p.evolution)}]${offsetSuffix(el.labelOffset)}`;\n case 'component':\n return `component ${name} [${r(p.visibility)}, ${r(p.evolution)}]${decoratorSuffix(el.decorators)}${offsetSuffix(el.labelOffset)}`;\n case 'note':\n // Encode line breaks as literal `\\n` -> the line-based DSL stays single-line.\n return `note ${name.replace(/\\n/g, '\\\\n')} [${r(p.visibility)}, ${r(p.evolution)}]${el.color ? ` (color ${el.color})` : ''}`;\n case 'pipeline':\n return `pipeline ${name} [${r(el.evolutionStart)}, ${r(el.evolutionEnd)}]`;\n case 'submap':\n return `submap ${name} [${r(p.visibility)}, ${r(p.evolution)}]`;\n case 'annotation':\n return `annotation ${el.number} [${r(p.visibility)}, ${r(p.evolution)}] ${el.text}`;\n case 'accelerator':\n return `${el.direction === 'deaccelerate' ? 'deaccelerator' : 'accelerator'} ${name} [${r(p.visibility)}, ${r(p.evolution)}]`;\n case 'attitude':\n return `${el.kind} [${r(p.visibility)}, ${r(p.evolution)}] ${r(el.width)} ${r(el.height)}`;\n }\n}\n\nfunction evolveLine(el: ComponentElement, name: string): string {\n const mv = el.movement!;\n const label = mv.newLabel ? `${name}->${mv.newLabel}` : name;\n const method = mv.method ? ` (${mv.method})` : '';\n return `evolve ${label} ${r(mv.targetEvolution)}${method}`;\n}\n"]}
@@ -0,0 +1,58 @@
1
+ import { WardleyMap, Method } from '@miragon/wardley-schema-model';
2
+ export { loadMap, parseMapJSON as mapFromJSON, serializeMap as mapToJSON } from '@miragon/wardley-schema-model';
3
+
4
+ /**
5
+ * Keyword-differentiated coordinates (component/anchor/note = [visibility, maturity];
6
+ * pipeline = [maturityStart, maturityEnd]). Unknown lines land in `rawPassthrough`.
7
+ */
8
+ declare function parseDSL(text: string): WardleyMap;
9
+
10
+ /**
11
+ * Serializes a WardleyMap into Online-Wardley-Maps text. Deterministic; writes only
12
+ * syntax the OWM parser reads back. `rawPassthrough` is appended unchanged.
13
+ * Coordinates are keyword-differentiated (component/anchor/note = [visibility, maturity];
14
+ * pipeline = [maturityStart, maturityEnd]).
15
+ */
16
+ declare function serializeDSL(map: WardleyMap): string;
17
+
18
+ /**
19
+ * Small, line-oriented helpers for the OWM DSL (concept doc §7.4).
20
+ * The DSL is line-based; a full tokenizer/generator is not needed.
21
+ */
22
+
23
+ interface ParsedCoords {
24
+ readonly a: number;
25
+ readonly b: number;
26
+ }
27
+ /** Order stays raw (a, b). */
28
+ declare function parseCoords(line: string): ParsedCoords | null;
29
+ interface InlineDecorators {
30
+ readonly market?: boolean;
31
+ readonly ecosystem?: boolean;
32
+ readonly inertia?: boolean;
33
+ readonly method?: Method;
34
+ }
35
+ /**
36
+ * Reads the inline decorators of a component line:
37
+ * - parenthesized: `(market)`, `(ecosystem)`, `(build|buy|outsource)`, combined `(market, outsource)`
38
+ * - trailing keyword: `inertia`
39
+ * Returns the decorators found and the line stripped of them.
40
+ */
41
+ declare function parseDecorators(line: string): {
42
+ decorators: InlineDecorators;
43
+ rest: string;
44
+ };
45
+ interface LabelOffsetToken {
46
+ readonly dx: number;
47
+ readonly dy: number;
48
+ }
49
+ /** Reads an optional `label [dx, dy]` (pixel offset) and returns it plus the stripped line. */
50
+ declare function parseLabelOffset(line: string): {
51
+ labelOffset: LabelOffsetToken | null;
52
+ rest: string;
53
+ };
54
+ /** First word (keyword) of a line, lowercased. */
55
+ declare function keywordOf(line: string): string;
56
+ declare function slug(label: string): string;
57
+
58
+ export { type InlineDecorators, type LabelOffsetToken, type ParsedCoords, keywordOf, parseCoords, parseDSL, parseDecorators, parseLabelOffset, serializeDSL, slug };
@@ -0,0 +1,58 @@
1
+ import { WardleyMap, Method } from '@miragon/wardley-schema-model';
2
+ export { loadMap, parseMapJSON as mapFromJSON, serializeMap as mapToJSON } from '@miragon/wardley-schema-model';
3
+
4
+ /**
5
+ * Keyword-differentiated coordinates (component/anchor/note = [visibility, maturity];
6
+ * pipeline = [maturityStart, maturityEnd]). Unknown lines land in `rawPassthrough`.
7
+ */
8
+ declare function parseDSL(text: string): WardleyMap;
9
+
10
+ /**
11
+ * Serializes a WardleyMap into Online-Wardley-Maps text. Deterministic; writes only
12
+ * syntax the OWM parser reads back. `rawPassthrough` is appended unchanged.
13
+ * Coordinates are keyword-differentiated (component/anchor/note = [visibility, maturity];
14
+ * pipeline = [maturityStart, maturityEnd]).
15
+ */
16
+ declare function serializeDSL(map: WardleyMap): string;
17
+
18
+ /**
19
+ * Small, line-oriented helpers for the OWM DSL (concept doc §7.4).
20
+ * The DSL is line-based; a full tokenizer/generator is not needed.
21
+ */
22
+
23
+ interface ParsedCoords {
24
+ readonly a: number;
25
+ readonly b: number;
26
+ }
27
+ /** Order stays raw (a, b). */
28
+ declare function parseCoords(line: string): ParsedCoords | null;
29
+ interface InlineDecorators {
30
+ readonly market?: boolean;
31
+ readonly ecosystem?: boolean;
32
+ readonly inertia?: boolean;
33
+ readonly method?: Method;
34
+ }
35
+ /**
36
+ * Reads the inline decorators of a component line:
37
+ * - parenthesized: `(market)`, `(ecosystem)`, `(build|buy|outsource)`, combined `(market, outsource)`
38
+ * - trailing keyword: `inertia`
39
+ * Returns the decorators found and the line stripped of them.
40
+ */
41
+ declare function parseDecorators(line: string): {
42
+ decorators: InlineDecorators;
43
+ rest: string;
44
+ };
45
+ interface LabelOffsetToken {
46
+ readonly dx: number;
47
+ readonly dy: number;
48
+ }
49
+ /** Reads an optional `label [dx, dy]` (pixel offset) and returns it plus the stripped line. */
50
+ declare function parseLabelOffset(line: string): {
51
+ labelOffset: LabelOffsetToken | null;
52
+ rest: string;
53
+ };
54
+ /** First word (keyword) of a line, lowercased. */
55
+ declare function keywordOf(line: string): string;
56
+ declare function slug(label: string): string;
57
+
58
+ export { type InlineDecorators, type LabelOffsetToken, type ParsedCoords, keywordOf, parseCoords, parseDSL, parseDecorators, parseLabelOffset, serializeDSL, slug };