{"version":3,"sources":["../src/stringify.ts","../src/ast.ts"],"names":[],"mappings":";;;;;;AAKA,SAAS,WAAA,CAAY,KAAA,EAAgB,MAAA,GAAiB,CAAA,EAAW;AAC/D,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAEjC,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW;AAC9B,IAAA,OAAO,QAAQ,MAAA,GAAS,OAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAE7B,IAAA,IACE,KAAA,KAAU,EAAA,IACV,KAAA,KAAU,MAAA,IACV,KAAA,KAAU,OAAA,IACV,KAAA,KAAU,MAAA,IACV,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,IAClB,MAAM,QAAA,CAAS,GAAG,CAAA,IAClB,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,IACnB,KAAA,CAAM,WAAW,GAAG,CAAA,IACpB,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,IAClB,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA,EACrB;AAEA,MAAA,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,IACtC;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,MAAM,SAAA,GAAY,MAAM,KAAA,CAAM,CAAC,MAAM,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,IAAI,CAAA;AAExE,IAAA,IAAI,SAAA,IAAa,KAAA,CAAM,MAAA,IAAU,CAAA,EAAG;AAElC,MAAA,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,WAAA,CAAY,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,IACxD;AAGA,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AAAA,EAAK,MAAM,CAAA,EAAA,EAAK,WAAA,CAAY,IAAA,EAAM,MAAA,GAAS,CAAC,CAAA,CAAE,SAAA,EAAW,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAAA,EACjG;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,KAAgC,CAAA;AAC/D,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,QAAQ,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM;AAAA,EAAK,MAAM,CAAA,EAAG,CAAC,CAAA,EAAA,EAAK,YAAY,CAAA,EAAG,MAAA,GAAS,CAAC,CAAA,CAAE,SAAA,EAAW,CAAA,CAAE,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,EACtG;AAEA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAKA,SAAS,WAAW,IAAA,EAAyB;AAC3C,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AACnC,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,OAAA,EAAS;AAClC,IAAA,MAAM,SAAA,GAAY,WAAA,CAAY,KAAA,EAAO,CAAC,CAAA;AAEtC,IAAA,IAAI,SAAA,CAAU,UAAA,CAAW,IAAI,CAAA,EAAG;AAE9B,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAA;AAAA,IAClC,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,SAAS,CAAA,CAAE,CAAA;AAAA,IACnC;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAKA,SAAS,kBAAkB,GAAA,EAA+B;AACxD,EAAA,MAAM,SAAoB,EAAC;AAE3B,EAAA,IAAI,GAAA,CAAI,OAAO,MAAA,EAAW;AACxB,IAAA,MAAA,CAAO,MAAM,GAAA,CAAI,EAAA;AAAA,EACnB;AACA,EAAA,IAAI,GAAA,CAAI,SAAS,MAAA,EAAW;AAC1B,IAAA,MAAA,CAAO,QAAQ,GAAA,CAAI,IAAA;AAAA,EACrB;AACA,EAAA,IAAI,GAAA,CAAI,YAAY,MAAA,EAAW;AAC7B,IAAA,MAAA,CAAO,WAAW,GAAA,CAAI,OAAA;AAAA,EACxB;AAEA,EAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,GAAG,IAAI,IAAA,EAAK;AAClC;AA4BO,SAAS,SAAA,CAAU,GAAA,EAAoB,OAAA,GAA4B,EAAC,EAAW;AACpF,EAAA,MAAM,EAAE,IAAA,GAAO,UAAA,EAAW,GAAI,OAAA;AAE9B,EAAA,IAAI,IAAA;AAEJ,EAAA,IAAI,SAAS,MAAA,EAAQ;AAEnB,IAAA,IAAA,GAAO,GAAA,CAAI,IAAA;AAAA,EACb,CAAA,MAAO;AAEL,IAAA,IAAA,GAAO,kBAAkB,GAAG,CAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,IAAA,GAAO,WAAW,IAAI,CAAA;AAC5B,EAAA,MAAM,UAAU,GAAA,CAAI,OAAA;AAEpB,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,OAAA;AAAA,EACT;AAGA,EAAA,MAAM,kBAAA,GAAqB,OAAA,CAAQ,UAAA,CAAW,IAAI,IAAI,OAAA,GAAU;AAAA,EAAK,OAAO,CAAA,CAAA;AAE5E,EAAA,OAAO,CAAA;AAAA,EAAQ,IAAI;AAAA,GAAA,EAAQ,kBAAkB,CAAA,CAAA;AAC/C;;;AC5JA,SAAS,cAAc,WAAA,EAAmC;AACxD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AACF;AAKA,SAAS,YAAY,IAAA,EAA8B;AACjD,EAAA,MAAM,QAAwB,EAAC;AAC/B,EAAA,IAAI,SAAA,GAAY,IAAA;AAEhB,EAAA,OAAO,SAAA,CAAU,SAAS,CAAA,EAAG;AAE3B,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,YAAY,CAAA;AAC9C,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,YAAA,EAAc,OAAO,SAAA,CAAU,CAAC,GAAG,CAAA;AACtD,MAAA,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,SAAA,CAAU,CAAC,EAAE,MAAM,CAAA;AAC/C,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,cAAc,SAAA,CAAU,KAAA,CAAM,kBAAkB,CAAA,IAAK,SAAA,CAAU,MAAM,cAAc,CAAA;AACzF,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,UAAU,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,WAAA,CAAY,CAAC,CAAA,EAAG,GAAG,CAAA;AAClF,MAAA,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,WAAA,CAAY,CAAC,EAAE,MAAM,CAAA;AACjD,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,UAAU,SAAA,CAAU,KAAA,CAAM,cAAc,CAAA,IAAK,SAAA,CAAU,MAAM,YAAY,CAAA;AAC/E,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,UAAA,EAAY,UAAU,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,OAAA,CAAQ,CAAC,CAAA,EAAG,GAAG,CAAA;AAChF,MAAA,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,OAAA,CAAQ,CAAC,EAAE,MAAM,CAAA;AAC7C,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,0BAA0B,CAAA;AAC5D,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,IAAA,EAAM,MAAA;AAAA,QACN,GAAA,EAAK,UAAU,CAAC,CAAA;AAAA,QAChB,QAAA,EAAU,CAAC,EAAE,IAAA,EAAM,QAAQ,KAAA,EAAO,SAAA,CAAU,CAAC,CAAA,EAAG;AAAA,OACjD,CAAA;AACD,MAAA,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,SAAA,CAAU,CAAC,EAAE,MAAM,CAAA;AAC/C,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,UAAA,GAAa,SAAA,CAAU,KAAA,CAAM,2BAA2B,CAAA;AAC9D,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,IAAA,EAAM,OAAA;AAAA,QACN,GAAA,EAAK,WAAW,CAAC,CAAA;AAAA,QACjB,GAAA,EAAK,WAAW,CAAC;AAAA,OAClB,CAAA;AACD,MAAA,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,UAAA,CAAW,CAAC,EAAE,MAAM,CAAA;AAChD,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,aAAa,CAAA;AAC/C,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,SAAA,CAAU,CAAC,GAAG,CAAA;AAChD,MAAA,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,SAAA,CAAU,CAAC,EAAE,MAAM,CAAA;AAC/C,MAAA;AAAA,IACF;AAGA,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,SAAA,CAAU,CAAC,GAAG,CAAA;AAChD,IAAA,SAAA,GAAY,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,KAAA;AACT;AAKA,SAAS,aAAa,OAAA,EAAiC;AACrD,EAAA,MAAM,QAAwB,EAAC;AAC/B,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAChC,EAAA,IAAI,CAAA,GAAI,CAAA;AAER,EAAA,OAAO,CAAA,GAAI,MAAM,MAAA,EAAQ;AACvB,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AAGpB,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,KAAM,EAAA,EAAI;AACtB,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,mBAAmB,CAAA;AACnD,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,IAAA,EAAM,SAAA;AAAA,QACN,KAAA,EAAO,YAAA,CAAa,CAAC,CAAA,CAAG,MAAA;AAAA,QACxB,QAAA,EAAU,WAAA,CAAY,YAAA,CAAa,CAAC,CAAE;AAAA,OACvC,CAAA;AACD,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,EAAE,IAAA,EAAK;AAChC,MAAA,MAAM,YAAsB,EAAC;AAC7B,MAAA,CAAA,EAAA;AAEA,MAAA,OAAO,CAAA,GAAI,MAAM,MAAA,IAAU,CAAC,MAAM,CAAC,CAAA,CAAG,UAAA,CAAW,KAAK,CAAA,EAAG;AACvD,QAAA,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM,CAAC,CAAE,CAAA;AACxB,QAAA,CAAA,EAAA;AAAA,MACF;AAEA,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,IAAA,EAAM,MAAA;AAAA,QACN,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,KAAA,EAAO,SAAA,CAAU,IAAA,CAAK,IAAI;AAAA,OAC3B,CAAA;AACD,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,wBAAA,CAAyB,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG;AAC9C,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,eAAA,EAAiB,CAAA;AACpC,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACxB,MAAA,MAAM,aAAuB,EAAC;AAC9B,MAAA,OAAO,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,CAAC,EAAG,UAAA,CAAW,GAAG,CAAA,IAAM,KAAA,CAAM,CAAC,CAAA,CAAG,IAAA,OAAW,EAAA,IAAM,UAAA,CAAW,SAAS,CAAA,CAAA,EAAK;AAC5G,QAAA,UAAA,CAAW,KAAK,KAAA,CAAM,CAAC,EAAG,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAC,CAAA;AAC9C,QAAA,CAAA,EAAA;AAAA,MACF;AACA,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,IAAA,EAAM,YAAA;AAAA,QACN,QAAA,EAAU,YAAA,CAAa,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC;AAAA,OAC7C,CAAA;AACD,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EAAG;AACzB,MAAA,MAAM,YAA4B,EAAC;AACnC,MAAA,OAAO,CAAA,GAAI,MAAM,MAAA,IAAU,UAAA,CAAW,KAAK,KAAA,CAAM,CAAC,CAAE,CAAA,EAAG;AACrD,QAAA,MAAM,cAAc,KAAA,CAAM,CAAC,CAAA,CAAG,OAAA,CAAQ,YAAY,EAAE,CAAA;AACpD,QAAA,SAAA,CAAU,IAAA,CAAK;AAAA,UACb,IAAA,EAAM,UAAA;AAAA,UACN,QAAA,EAAU,CAAC,EAAE,IAAA,EAAM,aAAa,QAAA,EAAU,WAAA,CAAY,WAAW,CAAA,EAAG;AAAA,SACrE,CAAA;AACD,QAAA,CAAA,EAAA;AAAA,MACF;AACA,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,KAAA;AAAA,QACT,QAAA,EAAU;AAAA,OACX,CAAA;AACD,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EAAG;AACzB,MAAA,MAAM,YAA4B,EAAC;AACnC,MAAA,OAAO,CAAA,GAAI,MAAM,MAAA,IAAU,UAAA,CAAW,KAAK,KAAA,CAAM,CAAC,CAAE,CAAA,EAAG;AACrD,QAAA,MAAM,cAAc,KAAA,CAAM,CAAC,CAAA,CAAG,OAAA,CAAQ,YAAY,EAAE,CAAA;AACpD,QAAA,SAAA,CAAU,IAAA,CAAK;AAAA,UACb,IAAA,EAAM,UAAA;AAAA,UACN,QAAA,EAAU,CAAC,EAAE,IAAA,EAAM,aAAa,QAAA,EAAU,WAAA,CAAY,WAAW,CAAA,EAAG;AAAA,SACrE,CAAA;AACD,QAAA,CAAA,EAAA;AAAA,MACF;AACA,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,IAAA;AAAA,QACT,QAAA,EAAU;AAAA,OACX,CAAA;AACD,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,UAAA,CAAW,GAAG,CAAA,IAAK,CAAC,IAAA,CAAK,IAAA,EAAK,CAAE,UAAA,CAAW,IAAI,CAAA,EAAG;AAChE,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,iBAAiB,CAAA;AAC7C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,OAAA,GAAU,SAAS,CAAC,CAAA;AAC1B,QAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,CAAC,CAAA,EAAG,IAAA,EAAK;AAGhC,QAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9B,UAAA,KAAA,CAAM,IAAA,CAAK;AAAA,YACT,IAAA,EAAM,mBAAA;AAAA,YACN,IAAA,EAAM,OAAA;AAAA,YACN,UAAA,EAAY,KAAA,GAAQ,kBAAA,CAAmB,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,IAAA,EAAM,CAAA,GAAI,EAAC;AAAA,YAC3E,UAAU;AAAC,WACZ,CAAA;AACD,UAAA,CAAA,EAAA;AACA,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,QAAA,GAAqB,CAAC,IAAI,CAAA;AAChC,QAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,QAAA,CAAA,EAAA;AAEA,QAAA,OAAO,CAAA,GAAI,KAAA,CAAM,MAAA,IAAU,KAAA,GAAQ,CAAA,EAAG;AACpC,UAAA,MAAM,WAAA,GAAc,MAAM,CAAC,CAAA;AAC3B,UAAA,QAAA,CAAS,KAAK,WAAW,CAAA;AAEzB,UAAA,IAAI,WAAA,CAAY,QAAA,CAAS,CAAA,CAAA,EAAI,OAAO,EAAE,CAAA,EAAG,KAAA,EAAA;AACzC,UAAA,IAAI,WAAA,CAAY,QAAA,CAAS,CAAA,EAAA,EAAK,OAAO,GAAG,CAAA,EAAG,KAAA,EAAA;AAE3C,UAAA,CAAA,EAAA;AAAA,QACF;AAEA,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,IAAA,EAAM,mBAAA;AAAA,UACN,IAAA,EAAM,OAAA;AAAA,UACN,UAAA,EAAY,KAAA,GAAQ,kBAAA,CAAmB,KAAK,IAAI,EAAC;AAAA,UACjD,QAAA,EAAU,aAAa,QAAA,CAAS,KAAA,CAAM,GAAG,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC;AAAA,SACxD,CAAA;AACD,QAAA;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,UAAA,CAAW,GAAG,CAAA,IAAK,IAAA,CAAK,IAAA,EAAK,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AAC5D,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,IAAA,EAAM,mBAAA;AAAA,QACN,OAAO,IAAA,CAAK,IAAA,EAAK,CAAE,KAAA,CAAM,GAAG,EAAE;AAAA,OAC/B,CAAA;AACD,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,KAAK,UAAA,CAAW,SAAS,KAAK,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA,EAAG;AAC5D,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,IAAA,EAAM,UAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,OAAO,CAAA,GAAI,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,CAAC,CAAA,CAAG,IAAA,EAAK,KAAM,EAAA,IAAM,CAAC,YAAA,CAAa,KAAA,CAAM,CAAC,CAAE,CAAA,EAAG;AAC9E,MAAA,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM,CAAC,CAAE,CAAA;AACxB,MAAA,CAAA,EAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,IAAA,EAAM,WAAA;AAAA,QACN,QAAA,EAAU,WAAA,CAAY,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC;AAAA,OAC3C,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAKA,SAAS,aAAa,IAAA,EAAuB;AAC3C,EAAA,OACE,WAAA,CAAY,KAAK,IAAI,CAAA,IACrB,KAAK,UAAA,CAAW,KAAK,KACrB,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,IACpB,UAAA,CAAW,KAAK,IAAI,CAAA,IACpB,KAAK,UAAA,CAAW,GAAG,KACnB,IAAA,CAAK,IAAA,GAAO,UAAA,CAAW,GAAG,KACzB,IAAA,CAAK,IAAA,GAAO,UAAA,CAAW,GAAG,KAAK,IAAA,CAAK,IAAA,GAAO,QAAA,CAAS,GAAG,KACxD,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA,IACzB,IAAA,CAAK,WAAW,SAAS,CAAA;AAE7B;AAKA,SAAS,mBAAmB,UAAA,EAA8D;AACxF,EAAA,MAAM,QAAkD,EAAC;AACzD,EAAA,MAAM,KAAA,GAAQ,iDAAA;AACd,EAAA,IAAI,KAAA;AAEJ,EAAA,OAAA,CAAQ,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,UAAU,OAAO,IAAA,EAAM;AAChD,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA,IAAK,MAAM,CAAC,CAAA,IAAK,MAAM,CAAC,CAAA;AAC7C,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,KAAA;AACT;AAyHO,SAAS,MAAM,GAAA,EAA8B;AAClD,EAAA,MAAM,WAA2B,EAAC;AAGlC,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,CAAE,MAAA,GAAS,CAAA,IAAK,GAAA,CAAI,EAAA,IAAM,GAAA,CAAI,IAAA,IAAQ,GAAA,CAAI,OAAA,EAAS;AACzE,IAAA,QAAA,CAAS,IAAA,CAAK,aAAA,CAAc,SAAA,CAAkB,GAAG,CAAA,CAAE,KAAA,CAAM,uBAAuB,CAAA,GAAI,CAAC,CAAA,IAAK,EAAE,CAAC,CAAA;AAAA,EAC/F;AAGA,EAAA,MAAM,YAAA,GAAe,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAC7C,EAAA,QAAA,CAAS,IAAA,CAAK,GAAG,YAAY,CAAA;AAE7B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN;AAAA,GACF;AACF","file":"index.cjs","sourcesContent":["import type { MDXLDDocument, MDXLDData, StringifyOptions } from './types.js'\n\n/**\n * Convert a value to YAML string representation\n */\nfunction valueToYaml(value: unknown, indent: number = 0): string {\n  const spaces = '  '.repeat(indent)\n\n  if (value === null || value === undefined) {\n    return 'null'\n  }\n\n  if (typeof value === 'boolean') {\n    return value ? 'true' : 'false'\n  }\n\n  if (typeof value === 'number') {\n    return String(value)\n  }\n\n  if (typeof value === 'string') {\n    // Check if string needs quoting\n    if (\n      value === '' ||\n      value === 'true' ||\n      value === 'false' ||\n      value === 'null' ||\n      value.includes(':') ||\n      value.includes('#') ||\n      value.includes('\\n') ||\n      value.startsWith(' ') ||\n      value.endsWith(' ') ||\n      /^[\\d.]+$/.test(value)\n    ) {\n      // Use single quotes, escape internal single quotes\n      return `'${value.replace(/'/g, \"''\")}'`\n    }\n    return value\n  }\n\n  if (Array.isArray(value)) {\n    if (value.length === 0) {\n      return '[]'\n    }\n\n    // Check if all items are simple values (not objects)\n    const allSimple = value.every((v) => typeof v !== 'object' || v === null)\n\n    if (allSimple && value.length <= 5) {\n      // Inline array for short simple arrays\n      return `[${value.map((v) => valueToYaml(v)).join(', ')}]`\n    }\n\n    // Multi-line array\n    return value.map((item) => `\\n${spaces}- ${valueToYaml(item, indent + 1).trimStart()}`).join('')\n  }\n\n  if (typeof value === 'object') {\n    const entries = Object.entries(value as Record<string, unknown>)\n    if (entries.length === 0) {\n      return '{}'\n    }\n\n    return entries.map(([k, v]) => `\\n${spaces}${k}: ${valueToYaml(v, indent + 1).trimStart()}`).join('')\n  }\n\n  return String(value)\n}\n\n/**\n * Convert data object to YAML frontmatter string\n */\nfunction dataToYaml(data: MDXLDData): string {\n  const entries = Object.entries(data)\n  if (entries.length === 0) {\n    return ''\n  }\n\n  const lines: string[] = []\n\n  for (const [key, value] of entries) {\n    const yamlValue = valueToYaml(value, 1)\n\n    if (yamlValue.startsWith('\\n')) {\n      // Multi-line value\n      lines.push(`${key}:${yamlValue}`)\n    } else {\n      lines.push(`${key}: ${yamlValue}`)\n    }\n  }\n\n  return lines.join('\\n')\n}\n\n/**\n * Merge LD properties into data object for flat mode output\n */\nfunction mergeLDProperties(doc: MDXLDDocument): MDXLDData {\n  const result: MDXLDData = {}\n\n  if (doc.id !== undefined) {\n    result.$id = doc.id\n  }\n  if (doc.type !== undefined) {\n    result.$type = doc.type\n  }\n  if (doc.context !== undefined) {\n    result.$context = doc.context\n  }\n\n  return { ...result, ...doc.data }\n}\n\n/**\n * Stringify an MDXLD document back to string\n *\n * @param doc - MDXLD document to stringify\n * @param options - Stringify options\n * @returns String representation with YAML frontmatter and MDX content\n *\n * @example\n * ```ts\n * const content = stringify({\n *   id: 'https://example.com/doc',\n *   type: 'Article',\n *   data: { title: 'Hello World' },\n *   content: '# Hello World\\n'\n * })\n *\n * // Output:\n * // ---\n * // $id: https://example.com/doc\n * // $type: Article\n * // title: Hello World\n * // ---\n * //\n * // # Hello World\n * ```\n */\nexport function stringify(doc: MDXLDDocument, options: StringifyOptions = {}): string {\n  const { mode = 'expanded' } = options\n\n  let data: MDXLDData\n\n  if (mode === 'flat') {\n    // In flat mode, just use the data as-is\n    data = doc.data\n  } else {\n    // In expanded mode, merge root LD properties back into data with $ prefix\n    data = mergeLDProperties(doc)\n  }\n\n  const yaml = dataToYaml(data)\n  const content = doc.content\n\n  if (!yaml) {\n    return content\n  }\n\n  // Ensure content starts with newline for proper formatting\n  const contentWithNewline = content.startsWith('\\n') ? content : `\\n${content}`\n\n  return `---\\n${yaml}\\n---${contentWithNewline}`\n}\n","import type { MDXLDDocument, MDXLDDocumentWithAST, MDXLDAst, MDXLDAstNode, ParseOptions } from './types.js'\nimport { parse as parseDocument } from './parse.js'\nimport { stringify as stringifyDocument } from './stringify.js'\n\n/**\n * Simple YAML to AST node converter\n */\nfunction yamlToAstNode(yamlContent: string): MDXLDAstNode {\n  return {\n    type: 'yaml',\n    value: yamlContent,\n  }\n}\n\n/**\n * Parse inline content into AST nodes (simplified)\n */\nfunction parseInline(text: string): MDXLDAstNode[] {\n  const nodes: MDXLDAstNode[] = []\n  let remaining = text\n\n  while (remaining.length > 0) {\n    // Check for inline code\n    const codeMatch = remaining.match(/^`([^`]+)`/)\n    if (codeMatch) {\n      nodes.push({ type: 'inlineCode', value: codeMatch[1] })\n      remaining = remaining.slice(codeMatch[0].length)\n      continue\n    }\n\n    // Check for strong (bold)\n    const strongMatch = remaining.match(/^\\*\\*([^*]+)\\*\\*/) || remaining.match(/^__([^_]+)__/)\n    if (strongMatch) {\n      nodes.push({ type: 'strong', children: [{ type: 'text', value: strongMatch[1] }] })\n      remaining = remaining.slice(strongMatch[0].length)\n      continue\n    }\n\n    // Check for emphasis (italic)\n    const emMatch = remaining.match(/^\\*([^*]+)\\*/) || remaining.match(/^_([^_]+)_/)\n    if (emMatch) {\n      nodes.push({ type: 'emphasis', children: [{ type: 'text', value: emMatch[1] }] })\n      remaining = remaining.slice(emMatch[0].length)\n      continue\n    }\n\n    // Check for links\n    const linkMatch = remaining.match(/^\\[([^\\]]+)\\]\\(([^)]+)\\)/)\n    if (linkMatch) {\n      nodes.push({\n        type: 'link',\n        url: linkMatch[2],\n        children: [{ type: 'text', value: linkMatch[1] }],\n      })\n      remaining = remaining.slice(linkMatch[0].length)\n      continue\n    }\n\n    // Check for images\n    const imageMatch = remaining.match(/^!\\[([^\\]]*)\\]\\(([^)]+)\\)/)\n    if (imageMatch) {\n      nodes.push({\n        type: 'image',\n        alt: imageMatch[1],\n        url: imageMatch[2],\n      })\n      remaining = remaining.slice(imageMatch[0].length)\n      continue\n    }\n\n    // Plain text - consume until next special character or end\n    const textMatch = remaining.match(/^[^`*_\\[!]+/)\n    if (textMatch) {\n      nodes.push({ type: 'text', value: textMatch[0] })\n      remaining = remaining.slice(textMatch[0].length)\n      continue\n    }\n\n    // Single special character as text\n    nodes.push({ type: 'text', value: remaining[0] })\n    remaining = remaining.slice(1)\n  }\n\n  return nodes\n}\n\n/**\n * Parse MDX content into AST\n */\nfunction contentToAst(content: string): MDXLDAstNode[] {\n  const nodes: MDXLDAstNode[] = []\n  const lines = content.split('\\n')\n  let i = 0\n\n  while (i < lines.length) {\n    const line = lines[i]!\n\n    // Empty line\n    if (line.trim() === '') {\n      i++\n      continue\n    }\n\n    // Headings\n    const headingMatch = line.match(/^(#{1,6})\\s+(.+)$/)\n    if (headingMatch) {\n      nodes.push({\n        type: 'heading',\n        depth: headingMatch[1]!.length,\n        children: parseInline(headingMatch[2]!),\n      })\n      i++\n      continue\n    }\n\n    // Code blocks\n    if (line.startsWith('```')) {\n      const lang = line.slice(3).trim()\n      const codeLines: string[] = []\n      i++\n\n      while (i < lines.length && !lines[i]!.startsWith('```')) {\n        codeLines.push(lines[i]!)\n        i++\n      }\n\n      nodes.push({\n        type: 'code',\n        lang: lang || undefined,\n        value: codeLines.join('\\n'),\n      })\n      i++ // Skip closing ```\n      continue\n    }\n\n    // Thematic break\n    if (/^(-{3,}|\\*{3,}|_{3,})$/.test(line.trim())) {\n      nodes.push({ type: 'thematicBreak' })\n      i++\n      continue\n    }\n\n    // Blockquote\n    if (line.startsWith('>')) {\n      const quoteLines: string[] = []\n      while (i < lines.length && (lines[i]!.startsWith('>') || (lines[i]!.trim() !== '' && quoteLines.length > 0))) {\n        quoteLines.push(lines[i]!.replace(/^>\\s?/, ''))\n        i++\n      }\n      nodes.push({\n        type: 'blockquote',\n        children: contentToAst(quoteLines.join('\\n')),\n      })\n      continue\n    }\n\n    // Unordered list\n    if (/^[-*+]\\s/.test(line)) {\n      const listItems: MDXLDAstNode[] = []\n      while (i < lines.length && /^[-*+]\\s/.test(lines[i]!)) {\n        const itemContent = lines[i]!.replace(/^[-*+]\\s/, '')\n        listItems.push({\n          type: 'listItem',\n          children: [{ type: 'paragraph', children: parseInline(itemContent) }],\n        })\n        i++\n      }\n      nodes.push({\n        type: 'list',\n        ordered: false,\n        children: listItems,\n      })\n      continue\n    }\n\n    // Ordered list\n    if (/^\\d+\\.\\s/.test(line)) {\n      const listItems: MDXLDAstNode[] = []\n      while (i < lines.length && /^\\d+\\.\\s/.test(lines[i]!)) {\n        const itemContent = lines[i]!.replace(/^\\d+\\.\\s/, '')\n        listItems.push({\n          type: 'listItem',\n          children: [{ type: 'paragraph', children: parseInline(itemContent) }],\n        })\n        i++\n      }\n      nodes.push({\n        type: 'list',\n        ordered: true,\n        children: listItems,\n      })\n      continue\n    }\n\n    // MDX JSX elements\n    if (line.trim().startsWith('<') && !line.trim().startsWith('</')) {\n      const jsxMatch = line.match(/^<(\\w+)([^>]*)>/)\n      if (jsxMatch) {\n        const tagName = jsxMatch[1]\n        const attrs = jsxMatch[2]?.trim()\n\n        // Self-closing\n        if (line.trim().endsWith('/>')) {\n          nodes.push({\n            type: 'mdxJsxFlowElement',\n            name: tagName,\n            attributes: attrs ? parseJsxAttributes(attrs.replace(/\\/$/, '').trim()) : [],\n            children: [],\n          })\n          i++\n          continue\n        }\n\n        // Opening tag - find closing\n        const jsxLines: string[] = [line]\n        let depth = 1\n        i++\n\n        while (i < lines.length && depth > 0) {\n          const currentLine = lines[i]!\n          jsxLines.push(currentLine)\n\n          if (currentLine.includes(`<${tagName}`)) depth++\n          if (currentLine.includes(`</${tagName}>`)) depth--\n\n          i++\n        }\n\n        nodes.push({\n          type: 'mdxJsxFlowElement',\n          name: tagName,\n          attributes: attrs ? parseJsxAttributes(attrs) : [],\n          children: contentToAst(jsxLines.slice(1, -1).join('\\n')),\n        })\n        continue\n      }\n    }\n\n    // MDX expressions\n    if (line.trim().startsWith('{') && line.trim().endsWith('}')) {\n      nodes.push({\n        type: 'mdxFlowExpression',\n        value: line.trim().slice(1, -1),\n      })\n      i++\n      continue\n    }\n\n    // ESM imports/exports\n    if (line.startsWith('import ') || line.startsWith('export ')) {\n      nodes.push({\n        type: 'mdxjsEsm',\n        value: line,\n      })\n      i++\n      continue\n    }\n\n    // Paragraph - collect consecutive non-empty lines\n    const paraLines: string[] = []\n    while (i < lines.length && lines[i]!.trim() !== '' && !isBlockStart(lines[i]!)) {\n      paraLines.push(lines[i]!)\n      i++\n    }\n\n    if (paraLines.length > 0) {\n      nodes.push({\n        type: 'paragraph',\n        children: parseInline(paraLines.join('\\n')),\n      })\n    }\n  }\n\n  return nodes\n}\n\n/**\n * Check if a line starts a new block element\n */\nfunction isBlockStart(line: string): boolean {\n  return (\n    /^#{1,6}\\s/.test(line) ||\n    line.startsWith('```') ||\n    /^[-*+]\\s/.test(line) ||\n    /^\\d+\\.\\s/.test(line) ||\n    line.startsWith('>') ||\n    line.trim().startsWith('<') ||\n    (line.trim().startsWith('{') && line.trim().endsWith('}')) ||\n    line.startsWith('import ') ||\n    line.startsWith('export ')\n  )\n}\n\n/**\n * Parse JSX attributes string into array of attribute objects\n */\nfunction parseJsxAttributes(attrString: string): Array<{ name: string; value?: unknown }> {\n  const attrs: Array<{ name: string; value?: unknown }> = []\n  const regex = /(\\w+)(?:=(?:\"([^\"]*)\"|'([^']*)'|\\{([^}]*)\\}))?/g\n  let match\n\n  while ((match = regex.exec(attrString)) !== null) {\n    const name = match[1]!\n    const value = match[2] ?? match[3] ?? match[4]\n    attrs.push({ name, value })\n  }\n\n  return attrs\n}\n\n/**\n * Convert AST back to content string\n */\nfunction astToContent(nodes: MDXLDAstNode[]): string {\n  return nodes.map((node) => nodeToString(node)).join('\\n\\n')\n}\n\n/**\n * Convert a single AST node to string\n */\nfunction nodeToString(node: MDXLDAstNode): string {\n  switch (node.type) {\n    case 'yaml':\n      return '' // YAML is handled separately\n\n    case 'heading':\n      return `${'#'.repeat(node.depth as number)} ${childrenToString(node.children || [])}`\n\n    case 'paragraph':\n      return childrenToString(node.children || [])\n\n    case 'text':\n      return node.value || ''\n\n    case 'emphasis':\n      return `*${childrenToString(node.children || [])}*`\n\n    case 'strong':\n      return `**${childrenToString(node.children || [])}**`\n\n    case 'inlineCode':\n      return `\\`${node.value || ''}\\``\n\n    case 'code':\n      return `\\`\\`\\`${node.lang || ''}\\n${node.value || ''}\\n\\`\\`\\``\n\n    case 'link':\n      return `[${childrenToString(node.children || [])}](${node.url || ''})`\n\n    case 'image':\n      return `![${node.alt || ''}](${node.url || ''})`\n\n    case 'list': {\n      const items = (node.children || []).map((item, i) => {\n        const prefix = node.ordered ? `${i + 1}. ` : '- '\n        const content = childrenToString(item.children || [])\n        return `${prefix}${content}`\n      })\n      return items.join('\\n')\n    }\n\n    case 'listItem':\n      return childrenToString(node.children || [])\n\n    case 'blockquote': {\n      const content = astToContent(node.children || [])\n      return content\n        .split('\\n')\n        .map((line) => `> ${line}`)\n        .join('\\n')\n    }\n\n    case 'thematicBreak':\n      return '---'\n\n    case 'mdxJsxFlowElement': {\n      const attrs = (node.attributes as Array<{ name: string; value?: unknown }>) || []\n      const attrStr = attrs.map((a) => (a.value !== undefined ? `${a.name}=\"${a.value}\"` : a.name)).join(' ')\n      const openTag = attrStr ? `<${node.name} ${attrStr}>` : `<${node.name}>`\n      const children = node.children || []\n\n      if (children.length === 0) {\n        return `<${node.name}${attrStr ? ` ${attrStr}` : ''} />`\n      }\n\n      return `${openTag}\\n${astToContent(children)}\\n</${node.name}>`\n    }\n\n    case 'mdxFlowExpression':\n      return `{${node.value || ''}}`\n\n    case 'mdxjsEsm':\n      return node.value || ''\n\n    default:\n      return node.value || childrenToString(node.children || [])\n  }\n}\n\n/**\n * Convert children nodes to string\n */\nfunction childrenToString(children: MDXLDAstNode[]): string {\n  return children.map((child) => nodeToString(child)).join('')\n}\n\n/**\n * Parse MDXLD content and include AST\n *\n * @param content - Raw MDXLD string content\n * @param options - Parse options\n * @returns MDXLD document with AST property\n */\nexport function parseWithAst(content: string, options: ParseOptions = {}): MDXLDDocumentWithAST {\n  const doc = parseDocument(content, options)\n  const ast = toAst(doc)\n\n  return {\n    ...doc,\n    ast,\n  }\n}\n\n/**\n * Convert an MDXLD document to AST\n *\n * @param doc - MDXLD document\n * @returns AST representation\n */\nexport function toAst(doc: MDXLDDocument): MDXLDAst {\n  const children: MDXLDAstNode[] = []\n\n  // Add YAML node if there's data\n  if (Object.keys(doc.data).length > 0 || doc.id || doc.type || doc.context) {\n    children.push(yamlToAstNode(stringifyDocument(doc).match(/^---\\n([\\s\\S]*?)\\n---/)?.[1] || ''))\n  }\n\n  // Parse content into AST nodes\n  const contentNodes = contentToAst(doc.content)\n  children.push(...contentNodes)\n\n  return {\n    type: 'root',\n    children,\n  }\n}\n\n/**\n * Convert AST back to MDXLD document\n *\n * @param ast - AST representation\n * @param options - Parse options for interpreting YAML\n * @returns MDXLD document\n */\nexport function fromAst(ast: MDXLDAst, options: ParseOptions = {}): MDXLDDocument {\n  const yamlNode = ast.children.find((n) => n.type === 'yaml')\n  const contentNodes = ast.children.filter((n) => n.type !== 'yaml')\n\n  let content = astToContent(contentNodes)\n\n  // Reconstruct full document string if we have YAML\n  if (yamlNode && yamlNode.value) {\n    const fullContent = `---\\n${yamlNode.value}\\n---\\n\\n${content}`\n    return parseDocument(fullContent, options)\n  }\n\n  return {\n    data: {},\n    content,\n  }\n}\n\n/**\n * Stringify AST back to MDXLD string\n *\n * @param ast - AST representation\n * @returns String representation\n */\nexport function stringifyAst(ast: MDXLDAst): string {\n  const yamlNode = ast.children.find((n) => n.type === 'yaml')\n  const contentNodes = ast.children.filter((n) => n.type !== 'yaml')\n\n  const content = astToContent(contentNodes)\n\n  if (yamlNode && yamlNode.value) {\n    return `---\\n${yamlNode.value}\\n---\\n\\n${content}`\n  }\n\n  return content\n}\n"]}