@zenithbuild/core 0.6.3 → 1.1.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/zen-build.js CHANGED
@@ -43,7 +43,7 @@ var __export = (target, all) => {
43
43
  };
44
44
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
45
45
 
46
- // ../node_modules/.bun/picocolors@1.1.1/node_modules/picocolors/picocolors.js
46
+ // node_modules/picocolors/picocolors.js
47
47
  var require_picocolors = __commonJS((exports, module) => {
48
48
  var p = process || {};
49
49
  var argv = p.argv || [];
@@ -113,7 +113,7 @@ var require_picocolors = __commonJS((exports, module) => {
113
113
  module.exports.createColors = createColors;
114
114
  });
115
115
 
116
- // ../node_modules/.bun/parse5@8.0.0/node_modules/parse5/dist/common/unicode.js
116
+ // node_modules/parse5/dist/common/unicode.js
117
117
  function isSurrogate(cp) {
118
118
  return cp >= 55296 && cp <= 57343;
119
119
  }
@@ -205,7 +205,7 @@ var init_unicode = __esm(() => {
205
205
  };
206
206
  });
207
207
 
208
- // ../node_modules/.bun/parse5@8.0.0/node_modules/parse5/dist/common/error-codes.js
208
+ // node_modules/parse5/dist/common/error-codes.js
209
209
  var ERR;
210
210
  var init_error_codes = __esm(() => {
211
211
  (function(ERR2) {
@@ -272,7 +272,7 @@ var init_error_codes = __esm(() => {
272
272
  })(ERR || (ERR = {}));
273
273
  });
274
274
 
275
- // ../node_modules/.bun/parse5@8.0.0/node_modules/parse5/dist/tokenizer/preprocessor.js
275
+ // node_modules/parse5/dist/tokenizer/preprocessor.js
276
276
  class Preprocessor {
277
277
  constructor(handler) {
278
278
  this.handler = handler;
@@ -445,7 +445,7 @@ var init_preprocessor = __esm(() => {
445
445
  DEFAULT_BUFFER_WATERLINE = 1 << 16;
446
446
  });
447
447
 
448
- // ../node_modules/.bun/parse5@8.0.0/node_modules/parse5/dist/common/token.js
448
+ // node_modules/parse5/dist/common/token.js
449
449
  function getTokenAttr(token, attrName) {
450
450
  for (let i = token.attrs.length - 1;i >= 0; i--) {
451
451
  if (token.attrs[i].name === attrName) {
@@ -469,13 +469,13 @@ var init_token = __esm(() => {
469
469
  })(TokenType || (TokenType = {}));
470
470
  });
471
471
 
472
- // ../node_modules/.bun/entities@6.0.1/node_modules/entities/dist/esm/generated/decode-data-html.js
472
+ // node_modules/entities/dist/esm/generated/decode-data-html.js
473
473
  var htmlDecodeTree;
474
474
  var init_decode_data_html = __esm(() => {
475
475
  htmlDecodeTree = /* @__PURE__ */ new Uint16Array(/* @__PURE__ */ "\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\x00\x00\x00\x00\x00\x00\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\uD835\uDD04rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\uD835\uDD38plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\uD835\uDC9Cign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\uD835\uDD05pf;\uC000\uD835\uDD39eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\uD835\uDC9Ep\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\uD835\uDD07\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\x00\x00\x00\u0342\u0354\x00\u0405f;\uC000\uD835\uDD3B\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\x00\x00\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\x00\x00\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\x00\u0446\x00\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\x00\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\uD835\uDC9Frok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\uD835\uDD08rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\x00\x00\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\uD835\uDD3Csilon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\uD835\uDD09lled\u0253\u0597\x00\x00\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\x00\u05BF\x00\x00\u05C4f;\uC000\uD835\uDD3DAll;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\uD835\uDD0A;\u62D9pf;\uC000\uD835\uDD3Eeater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\uD835\uDCA2;\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\x00\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\x00\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\uD835\uDD40a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\x00\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\uD835\uDD0Dpf;\uC000\uD835\uDD41\u01E3\u07C7\x00\u07CCr;\uC000\uD835\uDCA5rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\uD835\uDD0Epf;\uC000\uD835\uDD42cr;\uC000\uD835\uDCA6\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\x00\u08C3bleBracket;\u67E6n\u01D4\u08C8\x00\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\uD835\uDD0F\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\uD835\uDD43er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\uD835\uDD10nusPlus;\u6213pf;\uC000\uD835\uDD44c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\uD835\uDD11\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\uD835\uDCA9ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\uD835\uDD12rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\uD835\uDD46enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\uD835\uDCAAash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\uD835\uDD13i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\uD835\uDCAB;\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B\"\u4022r;\uC000\uD835\uDD14pf;\u611Acr;\uC000\uD835\uDCAC\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\x00\u1005bleBracket;\u67E7n\u01D4\u100A\x00\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\uD835\uDD16ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\uD835\uDD4A\u0272\u116D\x00\x00\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\uD835\uDCAEar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\uD835\uDD17\u0100ei\u127B\u1289\u01F2\u1280\x00\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\uD835\uDD4BipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\uD835\uDCAFrok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\x00\u132C\u1331\x00\x00\x00\x00\x00\u1338\u133D\u1377\u1385\x00\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\x00\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\uD835\uDD18rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\uD835\uDD4C\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\uD835\uDCB0ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\uD835\uDD19pf;\uC000\uD835\uDD4Dcr;\uC000\uD835\uDCB1dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\uD835\uDD1Apf;\uC000\uD835\uDD4Ecr;\uC000\uD835\uDCB2\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\uD835\uDD1B;\u439Epf;\uC000\uD835\uDD4Fcr;\uC000\uD835\uDCB3\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\uD835\uDD1Cpf;\uC000\uD835\uDD50cr;\uC000\uD835\uDCB4ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\x00\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\uD835\uDCB5\u0BE1\u1583\u158A\u1590\x00\u15B0\u15B6\u15BF\x00\x00\x00\x00\u15C6\u15DB\u15EB\u165F\u166D\x00\u1695\u169B\u16B2\u16B9\x00\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\uD835\uDD1Erave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\x00\x00\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\uD835\uDD52\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\uD835\uDCB6;\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\uD835\uDD1Fg\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\x00\x00\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\x00\u1833\u01B2\u182F\x00\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\uD835\uDD53\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\uD835\uDCB7mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\x00\u19E8\u1A11\u1A15\u1A32\x00\u1A37\u1A50\x00\x00\u1AB4\x00\x00\u1AC1\x00\x00\u1B21\u1B2E\u1B4D\u1B52\x00\u1BFD\x00\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\x00\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\uD835\uDD20\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\x00\x00\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\x00\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\x00\x00\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\x00\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\uD835\uDD54o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\uD835\uDCB8\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\x00\x00\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\x00\x00\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\uD835\uDD21ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\x00\x00\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\uD835\uDD55\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\x00\x00\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\uD835\uDCB9;\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\uD835\uDD22\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\uD835\uDD56\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\x00\x00\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\x00\u1F9E\x00\u1FA1\u1FA7\x00\x00\u1FC6\u1FCC\x00\u1FD3\x00\u1FE6\u1FEA\u2000\x00\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\x00\x00\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\uD835\uDD23lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\x00\u1FF3f;\uC000\uD835\uDD57\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\x00\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\x00\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\x00\u2036;\u6154;\u6156\u02B4\u203E\u2041\x00\x00\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\x00\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\uD835\uDCBB\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\uD835\uDD24\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\uD835\uDD58\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\x00\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\uD835\uDD25s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\uD835\uDD59bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\uD835\uDCBDas\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\x00\u22AA\x00\u22B8\u22C5\u22CE\x00\u22D5\u22F3\x00\x00\u22F8\u2322\u2367\u2362\u237F\x00\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\uD835\uDD26rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\uD835\uDD5Aa;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\uD835\uDCBEn\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\x00\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\uD835\uDD27ath;\u4237pf;\uC000\uD835\uDD5B\u01E3\u23EC\x00\u23F1r;\uC000\uD835\uDCBFrcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\uD835\uDD28reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\uD835\uDD5Ccr;\uC000\uD835\uDCC0\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\x00\u24AA\x00\u24B1\x00\x00\x00\x00\x00\u24B5\u24BA\x00\u24C6\u24C8\u24CD\x00\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\uD835\uDD29\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\uD835\uDD5Dus;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\uD835\uDCC1m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\uD835\uDD2Ao;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\uD835\uDD5E\u0100ct\u28F8\u28FDr;\uC000\uD835\uDCC2pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\x00\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\x00\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\uD835\uDD2B\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\uD835\uDD5F\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\uD835\uDCC3ort\u026D\u2B05\x00\x00\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\u2D2D\x00\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\x00\x00\u2D8D\u2DAB\x00\u2DC8\u2DCE\x00\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\uD835\uDD2C\u036F\u2D79\x00\x00\u2D7C\x00\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\uD835\uDD60\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\x00\u2E7D\x00\u2E80\u2E9D\x00\u2EA2\u2EB9\x00\x00\u2ECB\u0E9C\x00\u2F13\x00\x00\u2F2B\u2FBC\x00\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\x00\x00\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\uD835\uDD2D\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\uD835\uDD61nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\uD835\uDCC5;\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\uD835\uDD2Epf;\uC000\uD835\uDD62rime;\u6057cr;\uC000\uD835\uDCC6\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\uD835\uDD2F\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\uD835\uDD63us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\uD835\uDCC7\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\x00\u337A\u33A4\x00\x00\u33EC\u33F0\x00\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\x00\u3616\x00\x00\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\x00\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\uD835\uDD30\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\x00\x00\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\uD835\uDD64a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\uD835\uDCC8tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\x00\u367E\u36C2\x00\x00\x00\x00\x00\u36DB\u3703\x00\u3709\u376C\x00\x00\x00\u3787\u0272\u3656\x00\x00\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\uD835\uDD31\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\x00\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\uD835\uDD65rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\uD835\uDCC9;\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\x00\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\uD835\uDD32rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\x00\x00\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\uD835\uDD66\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\x00\x00\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\uD835\uDCCA\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\uD835\uDD33tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\uD835\uDD67ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\uD835\uDCCB\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\uD835\uDD34pf;\uC000\uD835\uDD68\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\uD835\uDCCC\u0AE3\u178E\u3A87\x00\u3A8B\x00\u3A90\u3A9B\x00\x00\u3A9D\u3AA8\u3AAB\u3AAF\x00\x00\u3AC3\u3ACE\x00\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\uD835\uDD35\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\uD835\uDD69im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\uD835\uDCCD\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\uD835\uDD36cy;\u4457pf;\uC000\uD835\uDD6Acr;\uC000\uD835\uDCCE\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\uD835\uDD37cy;\u4436grarr;\u61DDpf;\uC000\uD835\uDD6Bcr;\uC000\uD835\uDCCF\u0100jn\u3B85\u3B87;\u600Dj;\u600C".split("").map((c) => c.charCodeAt(0)));
476
476
  });
477
477
 
478
- // ../node_modules/.bun/entities@6.0.1/node_modules/entities/dist/esm/decode-codepoint.js
478
+ // node_modules/entities/dist/esm/decode-codepoint.js
479
479
  function replaceCodePoint(codePoint) {
480
480
  var _a2;
481
481
  if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
@@ -527,7 +527,7 @@ var init_decode_codepoint = __esm(() => {
527
527
  };
528
528
  });
529
529
 
530
- // ../node_modules/.bun/entities@6.0.1/node_modules/entities/dist/esm/decode.js
530
+ // node_modules/entities/dist/esm/decode.js
531
531
  function isNumber(code) {
532
532
  return code >= CharCodes.ZERO && code <= CharCodes.NINE;
533
533
  }
@@ -778,7 +778,7 @@ var init_decode = __esm(() => {
778
778
  })(DecodingMode || (DecodingMode = {}));
779
779
  });
780
780
 
781
- // ../node_modules/.bun/parse5@8.0.0/node_modules/parse5/dist/common/html.js
781
+ // node_modules/parse5/dist/common/html.js
782
782
  function getTagID(tagName) {
783
783
  var _a2;
784
784
  return (_a2 = TAG_NAME_TO_ID.get(tagName)) !== null && _a2 !== undefined ? _a2 : TAG_ID.UNKNOWN;
@@ -1287,7 +1287,7 @@ var init_html = __esm(() => {
1287
1287
  ]);
1288
1288
  });
1289
1289
 
1290
- // ../node_modules/.bun/parse5@8.0.0/node_modules/parse5/dist/tokenizer/index.js
1290
+ // node_modules/parse5/dist/tokenizer/index.js
1291
1291
  function isAsciiDigit(cp) {
1292
1292
  return cp >= CODE_POINTS.DIGIT_0 && cp <= CODE_POINTS.DIGIT_9;
1293
1293
  }
@@ -3744,12 +3744,12 @@ var init_tokenizer = __esm(() => {
3744
3744
  };
3745
3745
  });
3746
3746
 
3747
- // ../node_modules/.bun/parse5@8.0.0/node_modules/parse5/dist/parser/open-element-stack.js
3747
+ // node_modules/parse5/dist/parser/open-element-stack.js
3748
3748
  class OpenElementStack {
3749
3749
  get currentTmplContentOrNode() {
3750
3750
  return this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : this.current;
3751
3751
  }
3752
- constructor(document, treeAdapter, handler) {
3752
+ constructor(document2, treeAdapter, handler) {
3753
3753
  this.treeAdapter = treeAdapter;
3754
3754
  this.handler = handler;
3755
3755
  this.items = [];
@@ -3757,7 +3757,7 @@ class OpenElementStack {
3757
3757
  this.stackTop = -1;
3758
3758
  this.tmplCount = 0;
3759
3759
  this.currentTagId = TAG_ID.UNKNOWN;
3760
- this.current = document;
3760
+ this.current = document2;
3761
3761
  }
3762
3762
  _indexOf(element) {
3763
3763
  return this.items.lastIndexOf(element, this.stackTop);
@@ -4059,7 +4059,7 @@ var init_open_element_stack = __esm(() => {
4059
4059
  TABLE_CELLS = new Set([TAG_ID.TD, TAG_ID.TH]);
4060
4060
  });
4061
4061
 
4062
- // ../node_modules/.bun/parse5@8.0.0/node_modules/parse5/dist/parser/formatting-element-list.js
4062
+ // node_modules/parse5/dist/parser/formatting-element-list.js
4063
4063
  class FormattingElementList {
4064
4064
  constructor(treeAdapter) {
4065
4065
  this.treeAdapter = treeAdapter;
@@ -4155,7 +4155,7 @@ var init_formatting_element_list = __esm(() => {
4155
4155
  MARKER = { type: EntryType.Marker };
4156
4156
  });
4157
4157
 
4158
- // ../node_modules/.bun/parse5@8.0.0/node_modules/parse5/dist/tree-adapters/default.js
4158
+ // node_modules/parse5/dist/tree-adapters/default.js
4159
4159
  var defaultTreeAdapter;
4160
4160
  var init_default = __esm(() => {
4161
4161
  init_html();
@@ -4212,8 +4212,8 @@ var init_default = __esm(() => {
4212
4212
  getTemplateContent(templateElement) {
4213
4213
  return templateElement.content;
4214
4214
  },
4215
- setDocumentType(document, name, publicId, systemId) {
4216
- const doctypeNode = document.childNodes.find((node) => node.nodeName === "#documentType");
4215
+ setDocumentType(document2, name, publicId, systemId) {
4216
+ const doctypeNode = document2.childNodes.find((node) => node.nodeName === "#documentType");
4217
4217
  if (doctypeNode) {
4218
4218
  doctypeNode.name = name;
4219
4219
  doctypeNode.publicId = publicId;
@@ -4226,14 +4226,14 @@ var init_default = __esm(() => {
4226
4226
  systemId,
4227
4227
  parentNode: null
4228
4228
  };
4229
- defaultTreeAdapter.appendChild(document, node);
4229
+ defaultTreeAdapter.appendChild(document2, node);
4230
4230
  }
4231
4231
  },
4232
- setDocumentMode(document, mode) {
4233
- document.mode = mode;
4232
+ setDocumentMode(document2, mode) {
4233
+ document2.mode = mode;
4234
4234
  },
4235
- getDocumentMode(document) {
4236
- return document.mode;
4235
+ getDocumentMode(document2) {
4236
+ return document2.mode;
4237
4237
  },
4238
4238
  detachNode(node) {
4239
4239
  if (node.parentNode) {
@@ -4325,7 +4325,7 @@ var init_default = __esm(() => {
4325
4325
  };
4326
4326
  });
4327
4327
 
4328
- // ../node_modules/.bun/parse5@8.0.0/node_modules/parse5/dist/common/doctype.js
4328
+ // node_modules/parse5/dist/common/doctype.js
4329
4329
  function hasPrefix(publicId, prefixes) {
4330
4330
  return prefixes.some((prefix) => publicId.startsWith(prefix));
4331
4331
  }
@@ -4435,7 +4435,7 @@ var init_doctype = __esm(() => {
4435
4435
  ];
4436
4436
  });
4437
4437
 
4438
- // ../node_modules/.bun/parse5@8.0.0/node_modules/parse5/dist/common/foreign-content.js
4438
+ // node_modules/parse5/dist/common/foreign-content.js
4439
4439
  function causesExit(startTagToken) {
4440
4440
  const tn = startTagToken.tagID;
4441
4441
  const isFontWithAttrs = tn === TAG_ID.FONT && startTagToken.attrs.some(({ name }) => name === ATTRS.COLOR || name === ATTRS.SIZE || name === ATTRS.FACE);
@@ -4657,9 +4657,9 @@ var init_foreign_content = __esm(() => {
4657
4657
  ]);
4658
4658
  });
4659
4659
 
4660
- // ../node_modules/.bun/parse5@8.0.0/node_modules/parse5/dist/parser/index.js
4660
+ // node_modules/parse5/dist/parser/index.js
4661
4661
  class Parser {
4662
- constructor(options, document, fragmentContext = null, scriptHandler = null) {
4662
+ constructor(options, document2, fragmentContext = null, scriptHandler = null) {
4663
4663
  this.fragmentContext = fragmentContext;
4664
4664
  this.scriptHandler = scriptHandler;
4665
4665
  this.currentToken = null;
@@ -4684,7 +4684,7 @@ class Parser {
4684
4684
  if (this.onParseError) {
4685
4685
  this.options.sourceCodeLocationInfo = true;
4686
4686
  }
4687
- this.document = document !== null && document !== undefined ? document : this.treeAdapter.createDocument();
4687
+ this.document = document2 !== null && document2 !== undefined ? document2 : this.treeAdapter.createDocument();
4688
4688
  this.tokenizer = new Tokenizer(this.options, this);
4689
4689
  this.activeFormattingElements = new FormattingElementList(this.treeAdapter);
4690
4690
  this.fragmentContextID = fragmentContext ? getTagID(this.treeAdapter.getTagName(fragmentContext)) : TAG_ID.UNKNOWN;
@@ -7614,7 +7614,7 @@ var init_parser = __esm(() => {
7614
7614
  TABLE_VOID_ELEMENTS = new Set([TAG_ID.CAPTION, TAG_ID.COL, TAG_ID.COLGROUP, TAG_ID.TBODY, TAG_ID.TD, TAG_ID.TFOOT, TAG_ID.TH, TAG_ID.THEAD, TAG_ID.TR]);
7615
7615
  });
7616
7616
 
7617
- // ../node_modules/.bun/parse5@8.0.0/node_modules/parse5/dist/serializer/index.js
7617
+ // node_modules/parse5/dist/serializer/index.js
7618
7618
  var VOID_ELEMENTS;
7619
7619
  var init_serializer = __esm(() => {
7620
7620
  init_html();
@@ -7641,7 +7641,7 @@ var init_serializer = __esm(() => {
7641
7641
  ]);
7642
7642
  });
7643
7643
 
7644
- // ../node_modules/.bun/parse5@8.0.0/node_modules/parse5/dist/index.js
7644
+ // node_modules/parse5/dist/index.js
7645
7645
  function parseFragment(fragmentContext, html, options) {
7646
7646
  if (typeof fragmentContext === "string") {
7647
7647
  options = html;
@@ -9283,7 +9283,7 @@ var init_componentResolver = __esm(() => {
9283
9283
  import process2 from "process";
9284
9284
 
9285
9285
  // cli/commands/dev.ts
9286
- import path8 from "path";
9286
+ import path7 from "path";
9287
9287
  import fs7 from "fs";
9288
9288
  var {serve } = globalThis.Bun;
9289
9289
 
@@ -10010,11 +10010,11 @@ function generateExplicitExpressionWrapper(expr, dependencies) {
10010
10010
  if (dependencies.usesState) {
10011
10011
  contextParts.push("state");
10012
10012
  }
10013
- const contextCode = contextParts.length > 0 ? `const __ctx = Object.assign({}, ${contextParts.join(", ")});
10014
- with (__ctx) {` : "with (state) {";
10013
+ const contextCode = contextParts.length > 0 ? `var __ctx = Object.assign({}, ${contextParts.join(", ")});` : "var __ctx = state || {};";
10015
10014
  const commentCode = code.replace(/[\r\n]+/g, " ").replace(/\s+/g, " ").substring(0, 100);
10016
10015
  const jsonEscapedCode = JSON.stringify(code);
10017
10016
  const transformedCode = transformExpressionJSX(code);
10017
+ const escapedTransformedCode = transformedCode.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/\n/g, "\\n").replace(/\r/g, "\\r");
10018
10018
  return `
10019
10019
  // Expression: ${commentCode}${code.length > 100 ? "..." : ""}
10020
10020
  // Dependencies: ${JSON.stringify({
@@ -10023,16 +10023,24 @@ function generateExplicitExpressionWrapper(expr, dependencies) {
10023
10023
  stores: dependencies.usesStores,
10024
10024
  state: dependencies.usesState
10025
10025
  })}
10026
- const ${id} = (${paramList}) => {
10027
- try {
10028
- ${contextCode}
10029
- return ${transformedCode};
10026
+ const ${id} = (function() {
10027
+ // Create the evaluator function once (with 'with' support in sloppy mode)
10028
+ var evalFn = new Function('__ctx',
10029
+ 'with (__ctx) { return (' + '${escapedTransformedCode}' + '); }'
10030
+ );
10031
+
10032
+ return function(${paramList}) {
10033
+ try {
10034
+ // Merge window globals with context (for script-level variables)
10035
+ var __baseCtx = Object.assign({}, window);
10036
+ ${contextCode.replace("var __ctx", "var __ctx").replace("= Object.assign({},", "= Object.assign(__baseCtx,")}
10037
+ return evalFn(__ctx);
10038
+ } catch (e) {
10039
+ console.warn('[Zenith] Expression evaluation error:', ${jsonEscapedCode}, e);
10040
+ return undefined;
10030
10041
  }
10031
- } catch (e) {
10032
- console.warn('[Zenith] Expression evaluation error:', ${jsonEscapedCode}, e);
10033
- return undefined;
10034
- }
10035
- };`;
10042
+ };
10043
+ })();`;
10036
10044
  }
10037
10045
  function analyzeAllExpressions(expressions, filePath, declaredLoaderProps = [], declaredProps = [], declaredStores = []) {
10038
10046
  const dependencies = expressions.map((expr) => analyzeExpressionDependencies(expr, declaredLoaderProps, declaredProps, declaredStores));
@@ -10076,20 +10084,28 @@ function wrapExpressionWithLoopContext(expr, loopContext, dependencies) {
10076
10084
  contextMerge.push("loopContext");
10077
10085
  const contextObject = contextMerge.length > 0 ? `const __ctx = Object.assign({}, ${contextMerge.join(", ")});` : `const __ctx = loopContext || {};`;
10078
10086
  const transformedCode = transformExpressionJSX(code);
10087
+ const escapedTransformedCode = transformedCode.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/\n/g, "\\n").replace(/\r/g, "\\r");
10079
10088
  return `
10080
10089
  // Expression with loop context: ${escapedCode}
10081
10090
  // Loop variables: ${loopContext.variables.join(", ")}
10082
- const ${id} = (${argsStr}) => {
10083
- try {
10084
- ${contextObject}
10085
- with (__ctx) {
10086
- return ${transformedCode};
10091
+ const ${id} = (function() {
10092
+ // Create the evaluator function once (with 'with' support in sloppy mode)
10093
+ var evalFn = new Function('__ctx',
10094
+ 'with (__ctx) { return (' + '${escapedTransformedCode}' + '); }'
10095
+ );
10096
+
10097
+ return function(${argsStr}) {
10098
+ try {
10099
+ // Merge window globals with context (for script-level variables)
10100
+ var __baseCtx = Object.assign({}, window);
10101
+ ${contextObject.replace("const __ctx", "var __ctx").replace("= Object.assign({},", "= Object.assign(__baseCtx,")}
10102
+ return evalFn(__ctx);
10103
+ } catch (e) {
10104
+ console.warn('[Zenith] Expression evaluation error for "${escapedCode}":', e);
10105
+ return undefined;
10087
10106
  }
10088
- } catch (e) {
10089
- console.warn('[Zenith] Expression evaluation error for "${escapedCode}":', e);
10090
- return undefined;
10091
- }
10092
- };`;
10107
+ };
10108
+ })();`;
10093
10109
  }
10094
10110
 
10095
10111
  // compiler/runtime/wrapExpression.ts
@@ -10104,22 +10120,32 @@ function wrapExpression(expr, dependencies, loopContext) {
10104
10120
  const transformedCode = transformExpressionJSX(code);
10105
10121
  const commentCode = code.replace(/[\r\n]+/g, " ").replace(/\s+/g, " ").substring(0, 100);
10106
10122
  const jsonEscapedCode = JSON.stringify(code);
10123
+ const escapedTransformedCode = transformedCode.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/\n/g, "\\n").replace(/\r/g, "\\r");
10107
10124
  return `
10108
10125
  // Expression: ${commentCode}${code.length > 100 ? "..." : ""}
10109
- const ${id} = (state) => {
10110
- try {
10111
- // Expose zenith helpers for JSX and content
10112
- const __zenith = window.__zenith || {};
10113
- const zenCollection = __zenith.zenCollection || ((name) => ({ get: () => [] }));
10114
-
10115
- with (state) {
10116
- return ${transformedCode};
10126
+ const ${id} = (function() {
10127
+ // Create the evaluator function once (with 'with' support in sloppy mode)
10128
+ var evalFn = new Function('__ctx',
10129
+ 'with (__ctx) { return (' + '${escapedTransformedCode}' + '); }'
10130
+ );
10131
+
10132
+ return function(state) {
10133
+ try {
10134
+ var __zenith = window.__zenith || {};
10135
+ var zenCollection = __zenith.zenCollection || function(name) { return { get: function() { return []; } }; };
10136
+ var createZenOrder = __zenith.createZenOrder || function(sections) { return { sections: [], getSectionBySlug: function() { return null; }, getDocBySlug: function() { return null; } }; };
10137
+
10138
+ // Merge window globals (script variables) with state
10139
+ // State takes precedence over window globals
10140
+ var __ctx = Object.assign({}, window, { zenCollection: zenCollection, createZenOrder: createZenOrder }, state || {});
10141
+
10142
+ return evalFn(__ctx);
10143
+ } catch (e) {
10144
+ console.warn('[Zenith] Expression evaluation error:', ${jsonEscapedCode}, e);
10145
+ return undefined;
10117
10146
  }
10118
- } catch (e) {
10119
- console.warn('[Zenith] Expression evaluation error:', ${jsonEscapedCode}, e);
10120
- return undefined;
10121
- }
10122
- };`;
10147
+ };
10148
+ })();`;
10123
10149
  }
10124
10150
  function generateExpressionWrappers(expressions, dependencies, loopContexts) {
10125
10151
  if (expressions.length === 0) {
@@ -10218,7 +10244,10 @@ ${indent}}
10218
10244
  const conditionId = `cond_${varCounter.count++}`;
10219
10245
  let code = `${indent}const ${containerVar} = document.createDocumentFragment();
10220
10246
  `;
10221
- code += `${indent}const ${conditionId}_result = (function() { with (state) { return ${condNode.condition}; } })();
10247
+ const escapedCondition = condNode.condition.replace(/\\/g, "\\\\").replace(/'/g, "\\'");
10248
+ code += `${indent}const ${conditionId}_evalFn = new Function('state', 'with (state) { return (' + '${escapedCondition}' + '); }');
10249
+ `;
10250
+ code += `${indent}const ${conditionId}_result = (function() { try { return ${conditionId}_evalFn(state); } catch(e) { return false; } })();
10222
10251
  `;
10223
10252
  code += `${indent}if (${conditionId}_result) {
10224
10253
  `;
@@ -10248,7 +10277,10 @@ ${indent}}
10248
10277
  const conditionId = `opt_${varCounter.count++}`;
10249
10278
  let code = `${indent}const ${containerVar} = document.createDocumentFragment();
10250
10279
  `;
10251
- code += `${indent}const ${conditionId}_result = (function() { with (state) { return ${optNode.condition}; } })();
10280
+ const escapedCondition = optNode.condition.replace(/\\/g, "\\\\").replace(/'/g, "\\'");
10281
+ code += `${indent}const ${conditionId}_evalFn = new Function('state', 'with (state) { return (' + '${escapedCondition}' + '); }');
10282
+ `;
10283
+ code += `${indent}const ${conditionId}_result = (function() { try { return ${conditionId}_evalFn(state); } catch(e) { return false; } })();
10252
10284
  `;
10253
10285
  code += `${indent}if (${conditionId}_result) {
10254
10286
  `;
@@ -10269,7 +10301,10 @@ ${indent}}
10269
10301
  const loopId = `loop_${varCounter.count++}`;
10270
10302
  let code = `${indent}const ${containerVar} = document.createDocumentFragment();
10271
10303
  `;
10272
- code += `${indent}const ${loopId}_items = (function() { with (state) { return ${loopNode.source}; } })() || [];
10304
+ const escapedSource = loopNode.source.replace(/\\/g, "\\\\").replace(/'/g, "\\'");
10305
+ code += `${indent}const ${loopId}_evalFn = new Function('state', 'with (state) { return (' + '${escapedSource}' + '); }');
10306
+ `;
10307
+ code += `${indent}const ${loopId}_items = (function() { try { return ${loopId}_evalFn(state); } catch(e) { return []; } })() || [];
10273
10308
  `;
10274
10309
  const itemVar = loopNode.itemVar;
10275
10310
  const indexVar = loopNode.indexVar || `${loopId}_idx`;
@@ -10753,7 +10788,7 @@ function transformStateDeclarations(script) {
10753
10788
  return transformed.trim();
10754
10789
  }
10755
10790
 
10756
- // ../node_modules/.bun/acorn@8.15.0/node_modules/acorn/dist/acorn.mjs
10791
+ // node_modules/acorn/dist/acorn.mjs
10757
10792
  var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 7, 9, 32, 4, 318, 1, 80, 3, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 68, 8, 2, 0, 3, 0, 2, 3, 2, 4, 2, 0, 15, 1, 83, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 7, 19, 58, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 343, 9, 54, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 10, 5350, 0, 7, 14, 11465, 27, 2343, 9, 87, 9, 39, 4, 60, 6, 26, 9, 535, 9, 470, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4178, 9, 519, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 245, 1, 2, 9, 726, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
10758
10793
  var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 4, 51, 13, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 39, 27, 10, 22, 251, 41, 7, 1, 17, 2, 60, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 31, 9, 2, 0, 3, 0, 2, 37, 2, 0, 26, 0, 2, 0, 45, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 200, 32, 32, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 26, 3994, 6, 582, 6842, 29, 1763, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 433, 44, 212, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 42, 9, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 229, 29, 3, 0, 496, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 4191];
10759
10794
  var nonASCIIidentifierChars = "\u200C\u200D\xB7\u0300-\u036F\u0387\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u0669\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u06F0-\u06F9\u0711\u0730-\u074A\u07A6-\u07B0\u07C0-\u07C9\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u0897-\u089F\u08CA-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0966-\u096F\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09E6-\u09EF\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A66-\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AE6-\u0AEF\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B66-\u0B6F\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE6-\u0BEF\u0C00-\u0C04\u0C3C\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0CE6-\u0CEF\u0CF3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D66-\u0D6F\u0D81-\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0E50-\u0E59\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECE\u0ED0-\u0ED9\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1040-\u1049\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F-\u109D\u135D-\u135F\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u17E0-\u17E9\u180B-\u180D\u180F-\u1819\u18A9\u1920-\u192B\u1930-\u193B\u1946-\u194F\u19D0-\u19DA\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AB0-\u1ABD\u1ABF-\u1ACE\u1B00-\u1B04\u1B34-\u1B44\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BB0-\u1BB9\u1BE6-\u1BF3\u1C24-\u1C37\u1C40-\u1C49\u1C50-\u1C59\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DFF\u200C\u200D\u203F\u2040\u2054\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\u30FB\uA620-\uA629\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA82C\uA880\uA881\uA8B4-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F1\uA8FF-\uA909\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9D0-\uA9D9\uA9E5\uA9F0-\uA9F9\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA50-\uAA59\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uABF0-\uABF9\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFF10-\uFF19\uFF3F\uFF65";
@@ -16354,6 +16389,7 @@ async function transformIR(ir) {
16354
16389
  }
16355
16390
  function generateRuntimeBundle(parts) {
16356
16391
  const functionRegistrations = extractFunctionRegistrations(parts.scriptCode);
16392
+ const variableRegistrations = extractVariableRegistrations(parts.scriptCode);
16357
16393
  const npmImportsHeader = parts.npmImports.length > 0 ? `// NPM Imports (hoisted from component scripts)
16358
16394
  ${emitImports(parts.npmImports)}
16359
16395
 
@@ -16377,6 +16413,8 @@ ${parts.scriptCode ? parts.scriptCode : ""}
16377
16413
 
16378
16414
  ${functionRegistrations}
16379
16415
 
16416
+ ${variableRegistrations}
16417
+
16380
16418
  ${parts.stateInitCode ? `// State initialization
16381
16419
  ${parts.stateInitCode}` : ""}
16382
16420
 
@@ -16487,6 +16525,25 @@ function extractFunctionRegistrations(scriptCode) {
16487
16525
  return `// Register functions on window for event handlers
16488
16526
  ${registrations}`;
16489
16527
  }
16528
+ function extractVariableRegistrations(scriptCode) {
16529
+ if (!scriptCode)
16530
+ return "";
16531
+ const varPattern = /(?:const|let)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=/g;
16532
+ const varNames = [];
16533
+ let match;
16534
+ while ((match = varPattern.exec(scriptCode)) !== null) {
16535
+ if (match[1]) {
16536
+ varNames.push(match[1]);
16537
+ }
16538
+ }
16539
+ if (varNames.length === 0) {
16540
+ return "";
16541
+ }
16542
+ const registrations = varNames.map((name) => ` if (typeof ${name} !== 'undefined') window.${name} = ${name};`).join(`
16543
+ `);
16544
+ return `// Register script variables on window for expression access
16545
+ ${registrations}`;
16546
+ }
16490
16547
  function generateHydrateFunction() {
16491
16548
  return `function hydrate(root, state) {
16492
16549
  if (!root) {
@@ -16903,8 +16960,8 @@ ${mergedStyles}
16903
16960
  </style>
16904
16961
  `.trim();
16905
16962
  }
16906
-
16907
- // router/manifest.ts
16963
+ // node_modules/@zenithbuild/router/src/manifest.ts
16964
+ import fs4 from "fs";
16908
16965
  import path4 from "path";
16909
16966
  var SEGMENT_SCORES = {
16910
16967
  ["static" /* STATIC */]: 10,
@@ -16912,6 +16969,24 @@ var SEGMENT_SCORES = {
16912
16969
  ["catch_all" /* CATCH_ALL */]: 1,
16913
16970
  ["optional_catch_all" /* OPTIONAL_CATCH_ALL */]: 0
16914
16971
  };
16972
+ function discoverPages(pagesDir) {
16973
+ const pages = [];
16974
+ function walk(dir) {
16975
+ if (!fs4.existsSync(dir))
16976
+ return;
16977
+ const entries = fs4.readdirSync(dir, { withFileTypes: true });
16978
+ for (const entry of entries) {
16979
+ const fullPath = path4.join(dir, entry.name);
16980
+ if (entry.isDirectory()) {
16981
+ walk(fullPath);
16982
+ } else if (entry.isFile() && entry.name.endsWith(".zen")) {
16983
+ pages.push(fullPath);
16984
+ }
16985
+ }
16986
+ }
16987
+ walk(pagesDir);
16988
+ return pages;
16989
+ }
16915
16990
  function filePathToRoutePath(filePath, pagesDir) {
16916
16991
  const relativePath = path4.relative(pagesDir, filePath);
16917
16992
  const withoutExt = relativePath.replace(/\.zen$/, "");
@@ -17007,7 +17082,11 @@ function generateRouteDefinition(filePath, pagesDir) {
17007
17082
  filePath
17008
17083
  };
17009
17084
  }
17010
-
17085
+ // node_modules/@zenithbuild/router/src/runtime.ts
17086
+ var routeListeners = new Set;
17087
+ var prefetchedRoutes = new Set;
17088
+ // node_modules/@zenithbuild/router/src/navigation/zen-link.ts
17089
+ var prefetchedRoutes2 = new Set;
17011
17090
  // runtime/bundle-generator.ts
17012
17091
  function generateBundleJS() {
17013
17092
  return `/*!
@@ -17633,7 +17712,16 @@ function generateBundleJS() {
17633
17712
  function defineSchema(name, schema) { schemaRegistry.set(name, schema); }
17634
17713
 
17635
17714
  function zenCollection(collectionName) {
17636
- const data = (global.__ZENITH_CONTENT__ && global.__ZENITH_CONTENT__[collectionName]) || [];
17715
+ // Access plugin data from the neutral envelope
17716
+ // Content plugin stores all items under 'content' namespace
17717
+ const pluginData = global.__ZENITH_PLUGIN_DATA__ || {};
17718
+ const contentItems = pluginData.content || [];
17719
+
17720
+ // Filter by collection name (plugin owns data structure, runtime just filters)
17721
+ const data = Array.isArray(contentItems)
17722
+ ? contentItems.filter(item => item && item.collection === collectionName)
17723
+ : [];
17724
+
17637
17725
  return new ZenCollection(data);
17638
17726
  }
17639
17727
 
@@ -18232,1516 +18320,167 @@ function generateBundleJS() {
18232
18320
  `;
18233
18321
  }
18234
18322
 
18235
- // cli/utils/content.ts
18236
- import fs4 from "fs";
18323
+ // core/config/loader.ts
18324
+ import fs5 from "fs";
18237
18325
  import path5 from "path";
18238
-
18239
- // ../node_modules/.bun/marked@17.0.1/node_modules/marked/lib/marked.esm.js
18240
- function L() {
18241
- return { async: false, breaks: false, extensions: null, gfm: true, hooks: null, pedantic: false, renderer: null, silent: false, tokenizer: null, walkTokens: null };
18242
- }
18243
- var T = L();
18244
- function Z(u) {
18245
- T = u;
18246
- }
18247
- var C = { exec: () => null };
18248
- function k(u, e = "") {
18249
- let t = typeof u == "string" ? u : u.source, n = { replace: (r, i2) => {
18250
- let s = typeof i2 == "string" ? i2 : i2.source;
18251
- return s = s.replace(m.caret, "$1"), t = t.replace(r, s), n;
18252
- }, getRegex: () => new RegExp(t, e) };
18253
- return n;
18254
- }
18255
- var me = (() => {
18256
- try {
18257
- return !!new RegExp("(?<=1)(?<!1)");
18258
- } catch {
18259
- return false;
18326
+ async function loadZenithConfig(projectRoot) {
18327
+ const configPaths = [
18328
+ path5.join(projectRoot, "zenith.config.ts"),
18329
+ path5.join(projectRoot, "zenith.config.js"),
18330
+ path5.join(projectRoot, "zenith.config.mjs")
18331
+ ];
18332
+ let configPath = null;
18333
+ for (const p of configPaths) {
18334
+ if (fs5.existsSync(p)) {
18335
+ configPath = p;
18336
+ break;
18337
+ }
18260
18338
  }
18261
- })();
18262
- var m = { codeRemoveIndent: /^(?: {1,4}| {0,3}\t)/gm, outputLinkReplace: /\\([\[\]])/g, indentCodeCompensation: /^(\s+)(?:```)/, beginningSpace: /^\s+/, endingHash: /#$/, startingSpaceChar: /^ /, endingSpaceChar: / $/, nonSpaceChar: /[^ ]/, newLineCharGlobal: /\n/g, tabCharGlobal: /\t/g, multipleSpaceGlobal: /\s+/g, blankLine: /^[ \t]*$/, doubleBlankLine: /\n[ \t]*\n[ \t]*$/, blockquoteStart: /^ {0,3}>/, blockquoteSetextReplace: /\n {0,3}((?:=+|-+) *)(?=\n|$)/g, blockquoteSetextReplace2: /^ {0,3}>[ \t]?/gm, listReplaceTabs: /^\t+/, listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g, listIsTask: /^\[[ xX]\] +\S/, listReplaceTask: /^\[[ xX]\] +/, listTaskCheckbox: /\[[ xX]\]/, anyLine: /\n.*\n/, hrefBrackets: /^<(.*)>$/, tableDelimiter: /[:|]/, tableAlignChars: /^\||\| *$/g, tableRowBlankLine: /\n[ \t]*$/, tableAlignRight: /^ *-+: *$/, tableAlignCenter: /^ *:-+: *$/, tableAlignLeft: /^ *:-+ *$/, startATag: /^<a /i, endATag: /^<\/a>/i, startPreScriptTag: /^<(pre|code|kbd|script)(\s|>)/i, endPreScriptTag: /^<\/(pre|code|kbd|script)(\s|>)/i, startAngleBracket: /^</, endAngleBracket: />$/, pedanticHrefTitle: /^([^'"]*[^\s])\s+(['"])(.*)\2/, unicodeAlphaNumeric: /[\p{L}\p{N}]/u, escapeTest: /[&<>"']/, escapeReplace: /[&<>"']/g, escapeTestNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/, escapeReplaceNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g, unescapeTest: /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, caret: /(^|[^\[])\^/g, percentDecode: /%25/g, findPipe: /\|/g, splitPipe: / \|/, slashPipe: /\\\|/g, carriageReturn: /\r\n|\r/g, spaceLine: /^ +$/gm, notSpaceStart: /^\S*/, endingNewline: /\n$/, listItemRegex: (u) => new RegExp(`^( {0,3}${u})((?:[ ][^\\n]*)?(?:\\n|$))`), nextBulletRegex: (u) => new RegExp(`^ {0,${Math.min(3, u - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`), hrRegex: (u) => new RegExp(`^ {0,${Math.min(3, u - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`), fencesBeginRegex: (u) => new RegExp(`^ {0,${Math.min(3, u - 1)}}(?:\`\`\`|~~~)`), headingBeginRegex: (u) => new RegExp(`^ {0,${Math.min(3, u - 1)}}#`), htmlBeginRegex: (u) => new RegExp(`^ {0,${Math.min(3, u - 1)}}<(?:[a-z].*>|!--)`, "i") };
18263
- var xe = /^(?:[ \t]*(?:\n|$))+/;
18264
- var be = /^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/;
18265
- var Re = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/;
18266
- var I = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/;
18267
- var Te = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/;
18268
- var N = /(?:[*+-]|\d{1,9}[.)])/;
18269
- var re = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/;
18270
- var se = k(re).replace(/bull/g, N).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/\|table/g, "").getRegex();
18271
- var Oe = k(re).replace(/bull/g, N).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/table/g, / {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex();
18272
- var Q = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/;
18273
- var we = /^[^\n]+/;
18274
- var F = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/;
18275
- var ye = k(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", F).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex();
18276
- var Pe = k(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g, N).getRegex();
18277
- var v = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul";
18278
- var j = /<!--(?:-?>|[\s\S]*?(?:-->|$))/;
18279
- var Se = k("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$))", "i").replace("comment", j).replace("tag", v).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();
18280
- var ie = k(Q).replace("hr", I).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex();
18281
- var $e = k(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", ie).getRegex();
18282
- var U = { blockquote: $e, code: be, def: ye, fences: Re, heading: Te, hr: I, html: Se, lheading: se, list: Pe, newline: xe, paragraph: ie, table: C, text: we };
18283
- var te = k("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", I).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3}\t)[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex();
18284
- var _e = { ...U, lheading: Oe, table: te, paragraph: k(Q).replace("hr", I).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", te).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex() };
18285
- var Le = { ...U, html: k(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment", j).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(), def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, heading: /^(#{1,6})(.*)(?:\n+|$)/, fences: C, lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, paragraph: k(Q).replace("hr", I).replace("heading", ` *#{1,6} *[^
18286
- ]`).replace("lheading", se).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex() };
18287
- var Me = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/;
18288
- var ze = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/;
18289
- var oe = /^( {2,}|\\)\n(?!\s*$)/;
18290
- var Ae = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/;
18291
- var D = /[\p{P}\p{S}]/u;
18292
- var K = /[\s\p{P}\p{S}]/u;
18293
- var ae = /[^\s\p{P}\p{S}]/u;
18294
- var Ce = k(/^((?![*_])punctSpace)/, "u").replace(/punctSpace/g, K).getRegex();
18295
- var le = /(?!~)[\p{P}\p{S}]/u;
18296
- var Ie = /(?!~)[\s\p{P}\p{S}]/u;
18297
- var Ee = /(?:[^\s\p{P}\p{S}]|~)/u;
18298
- var Be = k(/link|precode-code|html/, "g").replace("link", /\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-", me ? "(?<!`)()" : "(^^|[^`])").replace("code", /(?<b>`+)[^`]+\k<b>(?!`)/).replace("html", /<(?! )[^<>]*?>/).getRegex();
18299
- var ue = /^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/;
18300
- var qe = k(ue, "u").replace(/punct/g, D).getRegex();
18301
- var ve = k(ue, "u").replace(/punct/g, le).getRegex();
18302
- var pe = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)";
18303
- var De = k(pe, "gu").replace(/notPunctSpace/g, ae).replace(/punctSpace/g, K).replace(/punct/g, D).getRegex();
18304
- var He = k(pe, "gu").replace(/notPunctSpace/g, Ee).replace(/punctSpace/g, Ie).replace(/punct/g, le).getRegex();
18305
- var Ze = k("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)", "gu").replace(/notPunctSpace/g, ae).replace(/punctSpace/g, K).replace(/punct/g, D).getRegex();
18306
- var Ge = k(/\\(punct)/, "gu").replace(/punct/g, D).getRegex();
18307
- var Ne = k(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();
18308
- var Qe = k(j).replace("(?:-->|$)", "-->").getRegex();
18309
- var Fe = k("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment", Qe).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex();
18310
- var q = /(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/;
18311
- var je = k(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label", q).replace("href", /<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex();
18312
- var ce = k(/^!?\[(label)\]\[(ref)\]/).replace("label", q).replace("ref", F).getRegex();
18313
- var he = k(/^!?\[(ref)\](?:\[\])?/).replace("ref", F).getRegex();
18314
- var Ue = k("reflink|nolink(?!\\()", "g").replace("reflink", ce).replace("nolink", he).getRegex();
18315
- var ne = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;
18316
- var W = { _backpedal: C, anyPunctuation: Ge, autolink: Ne, blockSkip: Be, br: oe, code: ze, del: C, emStrongLDelim: qe, emStrongRDelimAst: De, emStrongRDelimUnd: Ze, escape: Me, link: je, nolink: he, punctuation: Ce, reflink: ce, reflinkSearch: Ue, tag: Fe, text: Ae, url: C };
18317
- var Ke = { ...W, link: k(/^!?\[(label)\]\((.*?)\)/).replace("label", q).getRegex(), reflink: k(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", q).getRegex() };
18318
- var G = { ...W, emStrongRDelimAst: He, emStrongLDelim: ve, url: k(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol", ne).replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(), _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/, del: /^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/, text: k(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol", ne).getRegex() };
18319
- var We = { ...G, br: k(oe).replace("{2,}", "*").getRegex(), text: k(G.text).replace("\\b_", "\\b_| {2,}\\n").replace(/\{2,\}/g, "*").getRegex() };
18320
- var E = { normal: U, gfm: _e, pedantic: Le };
18321
- var M = { normal: W, gfm: G, breaks: We, pedantic: Ke };
18322
- var Xe = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" };
18323
- var ke = (u) => Xe[u];
18324
- function w(u, e) {
18325
- if (e) {
18326
- if (m.escapeTest.test(u))
18327
- return u.replace(m.escapeReplace, ke);
18328
- } else if (m.escapeTestNoEncode.test(u))
18329
- return u.replace(m.escapeReplaceNoEncode, ke);
18330
- return u;
18331
- }
18332
- function X(u) {
18333
- try {
18334
- u = encodeURI(u).replace(m.percentDecode, "%");
18335
- } catch {
18336
- return null;
18339
+ if (!configPath) {
18340
+ return { plugins: [] };
18337
18341
  }
18338
- return u;
18339
- }
18340
- function J(u, e) {
18341
- let t = u.replace(m.findPipe, (i2, s, a) => {
18342
- let o = false, l = s;
18343
- for (;--l >= 0 && a[l] === "\\"; )
18344
- o = !o;
18345
- return o ? "|" : " |";
18346
- }), n = t.split(m.splitPipe), r = 0;
18347
- if (n[0].trim() || n.shift(), n.length > 0 && !n.at(-1)?.trim() && n.pop(), e)
18348
- if (n.length > e)
18349
- n.splice(e);
18350
- else
18351
- for (;n.length < e; )
18352
- n.push("");
18353
- for (;r < n.length; r++)
18354
- n[r] = n[r].trim().replace(m.slashPipe, "|");
18355
- return n;
18356
- }
18357
- function z(u, e, t) {
18358
- let n = u.length;
18359
- if (n === 0)
18360
- return "";
18361
- let r = 0;
18362
- for (;r < n; ) {
18363
- let i2 = u.charAt(n - r - 1);
18364
- if (i2 === e && !t)
18365
- r++;
18366
- else if (i2 !== e && t)
18367
- r++;
18368
- else
18369
- break;
18342
+ try {
18343
+ const configModule = await import(configPath);
18344
+ const config = configModule.default || configModule;
18345
+ if (typeof config !== "object" || config === null) {
18346
+ console.warn(`[Zenith] Invalid config format in ${configPath}`);
18347
+ return { plugins: [] };
18348
+ }
18349
+ return config;
18350
+ } catch (error3) {
18351
+ const message = error3 instanceof Error ? error3.message : String(error3);
18352
+ console.error(`[Zenith] Failed to load config from ${configPath}:`, message);
18353
+ return { plugins: [] };
18370
18354
  }
18371
- return u.slice(0, n - r);
18372
18355
  }
18373
- function de(u, e) {
18374
- if (u.indexOf(e[1]) === -1)
18375
- return -1;
18376
- let t = 0;
18377
- for (let n = 0;n < u.length; n++)
18378
- if (u[n] === "\\")
18379
- n++;
18380
- else if (u[n] === e[0])
18381
- t++;
18382
- else if (u[n] === e[1] && (t--, t < 0))
18383
- return n;
18384
- return t > 0 ? -2 : -1;
18385
- }
18386
- function ge(u, e, t, n, r) {
18387
- let i2 = e.href, s = e.title || null, a = u[1].replace(r.other.outputLinkReplace, "$1");
18388
- n.state.inLink = true;
18389
- let o = { type: u[0].charAt(0) === "!" ? "image" : "link", raw: t, href: i2, title: s, text: a, tokens: n.inlineTokens(a) };
18390
- return n.state.inLink = false, o;
18391
- }
18392
- function Je(u, e, t) {
18393
- let n = u.match(t.other.indentCodeCompensation);
18394
- if (n === null)
18395
- return e;
18396
- let r = n[1];
18397
- return e.split(`
18398
- `).map((i2) => {
18399
- let s = i2.match(t.other.beginningSpace);
18400
- if (s === null)
18401
- return i2;
18402
- let [a] = s;
18403
- return a.length >= r.length ? i2.slice(r.length) : i2;
18404
- }).join(`
18405
- `);
18356
+
18357
+ // core/plugins/registry.ts
18358
+ var pluginDataStore = {};
18359
+ function getPluginDataByNamespace(namespace) {
18360
+ return pluginDataStore[namespace] || [];
18406
18361
  }
18407
- var y = class {
18408
- options;
18409
- rules;
18410
- lexer;
18411
- constructor(e) {
18412
- this.options = e || T;
18413
- }
18414
- space(e) {
18415
- let t = this.rules.block.newline.exec(e);
18416
- if (t && t[0].length > 0)
18417
- return { type: "space", raw: t[0] };
18418
- }
18419
- code(e) {
18420
- let t = this.rules.block.code.exec(e);
18421
- if (t) {
18422
- let n = t[0].replace(this.rules.other.codeRemoveIndent, "");
18423
- return { type: "code", raw: t[0], codeBlockStyle: "indented", text: this.options.pedantic ? n : z(n, `
18424
- `) };
18425
- }
18426
- }
18427
- fences(e) {
18428
- let t = this.rules.block.fences.exec(e);
18429
- if (t) {
18430
- let n = t[0], r = Je(n, t[3] || "", this.rules);
18431
- return { type: "code", raw: n, lang: t[2] ? t[2].trim().replace(this.rules.inline.anyPunctuation, "$1") : t[2], text: r };
18432
- }
18433
- }
18434
- heading(e) {
18435
- let t = this.rules.block.heading.exec(e);
18436
- if (t) {
18437
- let n = t[2].trim();
18438
- if (this.rules.other.endingHash.test(n)) {
18439
- let r = z(n, "#");
18440
- (this.options.pedantic || !r || this.rules.other.endingSpaceChar.test(r)) && (n = r.trim());
18441
- }
18442
- return { type: "heading", raw: t[0], depth: t[1].length, text: n, tokens: this.lexer.inline(n) };
18443
- }
18444
- }
18445
- hr(e) {
18446
- let t = this.rules.block.hr.exec(e);
18447
- if (t)
18448
- return { type: "hr", raw: z(t[0], `
18449
- `) };
18450
- }
18451
- blockquote(e) {
18452
- let t = this.rules.block.blockquote.exec(e);
18453
- if (t) {
18454
- let n = z(t[0], `
18455
- `).split(`
18456
- `), r = "", i2 = "", s = [];
18457
- for (;n.length > 0; ) {
18458
- let a = false, o = [], l;
18459
- for (l = 0;l < n.length; l++)
18460
- if (this.rules.other.blockquoteStart.test(n[l]))
18461
- o.push(n[l]), a = true;
18462
- else if (!a)
18463
- o.push(n[l]);
18464
- else
18465
- break;
18466
- n = n.slice(l);
18467
- let p = o.join(`
18468
- `), c = p.replace(this.rules.other.blockquoteSetextReplace, `
18469
- $1`).replace(this.rules.other.blockquoteSetextReplace2, "");
18470
- r = r ? `${r}
18471
- ${p}` : p, i2 = i2 ? `${i2}
18472
- ${c}` : c;
18473
- let g = this.lexer.state.top;
18474
- if (this.lexer.state.top = true, this.lexer.blockTokens(c, s, true), this.lexer.state.top = g, n.length === 0)
18475
- break;
18476
- let h = s.at(-1);
18477
- if (h?.type === "code")
18478
- break;
18479
- if (h?.type === "blockquote") {
18480
- let R = h, f = R.raw + `
18481
- ` + n.join(`
18482
- `), O = this.blockquote(f);
18483
- s[s.length - 1] = O, r = r.substring(0, r.length - R.raw.length) + O.raw, i2 = i2.substring(0, i2.length - R.text.length) + O.text;
18484
- break;
18485
- } else if (h?.type === "list") {
18486
- let R = h, f = R.raw + `
18487
- ` + n.join(`
18488
- `), O = this.list(f);
18489
- s[s.length - 1] = O, r = r.substring(0, r.length - h.raw.length) + O.raw, i2 = i2.substring(0, i2.length - R.raw.length) + O.raw, n = f.substring(s.at(-1).raw.length).split(`
18490
- `);
18491
- continue;
18492
- }
18493
- }
18494
- return { type: "blockquote", raw: r, tokens: s, text: i2 };
18362
+
18363
+ class PluginRegistry {
18364
+ plugins = new Map;
18365
+ register(plugin) {
18366
+ if (this.plugins.has(plugin.name)) {
18367
+ console.warn(`[Zenith] Plugin "${plugin.name}" is already registered. Overwriting.`);
18495
18368
  }
18369
+ this.plugins.set(plugin.name, plugin);
18496
18370
  }
18497
- list(e) {
18498
- let t = this.rules.block.list.exec(e);
18499
- if (t) {
18500
- let n = t[1].trim(), r = n.length > 1, i2 = { type: "list", raw: "", ordered: r, start: r ? +n.slice(0, -1) : "", loose: false, items: [] };
18501
- n = r ? `\\d{1,9}\\${n.slice(-1)}` : `\\${n}`, this.options.pedantic && (n = r ? n : "[*+-]");
18502
- let s = this.rules.other.listItemRegex(n), a = false;
18503
- for (;e; ) {
18504
- let l = false, p = "", c = "";
18505
- if (!(t = s.exec(e)) || this.rules.block.hr.test(e))
18506
- break;
18507
- p = t[0], e = e.substring(p.length);
18508
- let g = t[2].split(`
18509
- `, 1)[0].replace(this.rules.other.listReplaceTabs, (O) => " ".repeat(3 * O.length)), h = e.split(`
18510
- `, 1)[0], R = !g.trim(), f = 0;
18511
- if (this.options.pedantic ? (f = 2, c = g.trimStart()) : R ? f = t[1].length + 1 : (f = t[2].search(this.rules.other.nonSpaceChar), f = f > 4 ? 1 : f, c = g.slice(f), f += t[1].length), R && this.rules.other.blankLine.test(h) && (p += h + `
18512
- `, e = e.substring(h.length + 1), l = true), !l) {
18513
- let O = this.rules.other.nextBulletRegex(f), V = this.rules.other.hrRegex(f), Y = this.rules.other.fencesBeginRegex(f), ee = this.rules.other.headingBeginRegex(f), fe = this.rules.other.htmlBeginRegex(f);
18514
- for (;e; ) {
18515
- let H = e.split(`
18516
- `, 1)[0], A;
18517
- if (h = H, this.options.pedantic ? (h = h.replace(this.rules.other.listReplaceNesting, " "), A = h) : A = h.replace(this.rules.other.tabCharGlobal, " "), Y.test(h) || ee.test(h) || fe.test(h) || O.test(h) || V.test(h))
18518
- break;
18519
- if (A.search(this.rules.other.nonSpaceChar) >= f || !h.trim())
18520
- c += `
18521
- ` + A.slice(f);
18522
- else {
18523
- if (R || g.replace(this.rules.other.tabCharGlobal, " ").search(this.rules.other.nonSpaceChar) >= 4 || Y.test(g) || ee.test(g) || V.test(g))
18524
- break;
18525
- c += `
18526
- ` + h;
18527
- }
18528
- !R && !h.trim() && (R = true), p += H + `
18529
- `, e = e.substring(H.length + 1), g = A.slice(f);
18530
- }
18531
- }
18532
- i2.loose || (a ? i2.loose = true : this.rules.other.doubleBlankLine.test(p) && (a = true)), i2.items.push({ type: "list_item", raw: p, task: !!this.options.gfm && this.rules.other.listIsTask.test(c), loose: false, text: c, tokens: [] }), i2.raw += p;
18533
- }
18534
- let o = i2.items.at(-1);
18535
- if (o)
18536
- o.raw = o.raw.trimEnd(), o.text = o.text.trimEnd();
18537
- else
18538
- return;
18539
- i2.raw = i2.raw.trimEnd();
18540
- for (let l of i2.items) {
18541
- if (this.lexer.state.top = false, l.tokens = this.lexer.blockTokens(l.text, []), l.task) {
18542
- if (l.text = l.text.replace(this.rules.other.listReplaceTask, ""), l.tokens[0]?.type === "text" || l.tokens[0]?.type === "paragraph") {
18543
- l.tokens[0].raw = l.tokens[0].raw.replace(this.rules.other.listReplaceTask, ""), l.tokens[0].text = l.tokens[0].text.replace(this.rules.other.listReplaceTask, "");
18544
- for (let c = this.lexer.inlineQueue.length - 1;c >= 0; c--)
18545
- if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[c].src)) {
18546
- this.lexer.inlineQueue[c].src = this.lexer.inlineQueue[c].src.replace(this.rules.other.listReplaceTask, "");
18547
- break;
18548
- }
18549
- }
18550
- let p = this.rules.other.listTaskCheckbox.exec(l.raw);
18551
- if (p) {
18552
- let c = { type: "checkbox", raw: p[0] + " ", checked: p[0] !== "[ ]" };
18553
- l.checked = c.checked, i2.loose ? l.tokens[0] && ["paragraph", "text"].includes(l.tokens[0].type) && "tokens" in l.tokens[0] && l.tokens[0].tokens ? (l.tokens[0].raw = c.raw + l.tokens[0].raw, l.tokens[0].text = c.raw + l.tokens[0].text, l.tokens[0].tokens.unshift(c)) : l.tokens.unshift({ type: "paragraph", raw: c.raw, text: c.raw, tokens: [c] }) : l.tokens.unshift(c);
18554
- }
18555
- }
18556
- if (!i2.loose) {
18557
- let p = l.tokens.filter((g) => g.type === "space"), c = p.length > 0 && p.some((g) => this.rules.other.anyLine.test(g.raw));
18558
- i2.loose = c;
18559
- }
18560
- }
18561
- if (i2.loose)
18562
- for (let l of i2.items) {
18563
- l.loose = true;
18564
- for (let p of l.tokens)
18565
- p.type === "text" && (p.type = "paragraph");
18566
- }
18567
- return i2;
18568
- }
18371
+ get(name) {
18372
+ return this.plugins.get(name);
18569
18373
  }
18570
- html(e) {
18571
- let t = this.rules.block.html.exec(e);
18572
- if (t)
18573
- return { type: "html", block: true, raw: t[0], pre: t[1] === "pre" || t[1] === "script" || t[1] === "style", text: t[0] };
18374
+ has(name) {
18375
+ return this.plugins.has(name);
18574
18376
  }
18575
- def(e) {
18576
- let t = this.rules.block.def.exec(e);
18577
- if (t) {
18578
- let n = t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, " "), r = t[2] ? t[2].replace(this.rules.other.hrefBrackets, "$1").replace(this.rules.inline.anyPunctuation, "$1") : "", i2 = t[3] ? t[3].substring(1, t[3].length - 1).replace(this.rules.inline.anyPunctuation, "$1") : t[3];
18579
- return { type: "def", tag: n, raw: t[0], href: r, title: i2 };
18580
- }
18377
+ all() {
18378
+ return Array.from(this.plugins.values());
18581
18379
  }
18582
- table(e) {
18583
- let t = this.rules.block.table.exec(e);
18584
- if (!t || !this.rules.other.tableDelimiter.test(t[2]))
18585
- return;
18586
- let n = J(t[1]), r = t[2].replace(this.rules.other.tableAlignChars, "").split("|"), i2 = t[3]?.trim() ? t[3].replace(this.rules.other.tableRowBlankLine, "").split(`
18587
- `) : [], s = { type: "table", raw: t[0], header: [], align: [], rows: [] };
18588
- if (n.length === r.length) {
18589
- for (let a of r)
18590
- this.rules.other.tableAlignRight.test(a) ? s.align.push("right") : this.rules.other.tableAlignCenter.test(a) ? s.align.push("center") : this.rules.other.tableAlignLeft.test(a) ? s.align.push("left") : s.align.push(null);
18591
- for (let a = 0;a < n.length; a++)
18592
- s.header.push({ text: n[a], tokens: this.lexer.inline(n[a]), header: true, align: s.align[a] });
18593
- for (let a of i2)
18594
- s.rows.push(J(a, s.header.length).map((o, l) => ({ text: o, tokens: this.lexer.inline(o), header: false, align: s.align[l] })));
18595
- return s;
18596
- }
18597
- }
18598
- lheading(e) {
18599
- let t = this.rules.block.lheading.exec(e);
18600
- if (t)
18601
- return { type: "heading", raw: t[0], depth: t[2].charAt(0) === "=" ? 1 : 2, text: t[1], tokens: this.lexer.inline(t[1]) };
18602
- }
18603
- paragraph(e) {
18604
- let t = this.rules.block.paragraph.exec(e);
18605
- if (t) {
18606
- let n = t[1].charAt(t[1].length - 1) === `
18607
- ` ? t[1].slice(0, -1) : t[1];
18608
- return { type: "paragraph", raw: t[0], text: n, tokens: this.lexer.inline(n) };
18609
- }
18610
- }
18611
- text(e) {
18612
- let t = this.rules.block.text.exec(e);
18613
- if (t)
18614
- return { type: "text", raw: t[0], text: t[0], tokens: this.lexer.inline(t[0]) };
18615
- }
18616
- escape(e) {
18617
- let t = this.rules.inline.escape.exec(e);
18618
- if (t)
18619
- return { type: "escape", raw: t[0], text: t[1] };
18620
- }
18621
- tag(e) {
18622
- let t = this.rules.inline.tag.exec(e);
18623
- if (t)
18624
- return !this.lexer.state.inLink && this.rules.other.startATag.test(t[0]) ? this.lexer.state.inLink = true : this.lexer.state.inLink && this.rules.other.endATag.test(t[0]) && (this.lexer.state.inLink = false), !this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(t[0]) ? this.lexer.state.inRawBlock = true : this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(t[0]) && (this.lexer.state.inRawBlock = false), { type: "html", raw: t[0], inLink: this.lexer.state.inLink, inRawBlock: this.lexer.state.inRawBlock, block: false, text: t[0] };
18625
- }
18626
- link(e) {
18627
- let t = this.rules.inline.link.exec(e);
18628
- if (t) {
18629
- let n = t[2].trim();
18630
- if (!this.options.pedantic && this.rules.other.startAngleBracket.test(n)) {
18631
- if (!this.rules.other.endAngleBracket.test(n))
18632
- return;
18633
- let s = z(n.slice(0, -1), "\\");
18634
- if ((n.length - s.length) % 2 === 0)
18635
- return;
18636
- } else {
18637
- let s = de(t[2], "()");
18638
- if (s === -2)
18639
- return;
18640
- if (s > -1) {
18641
- let o = (t[0].indexOf("!") === 0 ? 5 : 4) + t[1].length + s;
18642
- t[2] = t[2].substring(0, s), t[0] = t[0].substring(0, o).trim(), t[3] = "";
18643
- }
18380
+ async initAll(ctx) {
18381
+ for (const plugin of this.plugins.values()) {
18382
+ try {
18383
+ await plugin.setup(ctx);
18384
+ console.log(`[Zenith] Plugin "${plugin.name}" initialized`);
18385
+ } catch (error3) {
18386
+ const message = error3 instanceof Error ? error3.message : String(error3);
18387
+ console.error(`[Zenith] Failed to initialize plugin "${plugin.name}":`, message);
18644
18388
  }
18645
- let r = t[2], i2 = "";
18646
- if (this.options.pedantic) {
18647
- let s = this.rules.other.pedanticHrefTitle.exec(r);
18648
- s && (r = s[1], i2 = s[3]);
18649
- } else
18650
- i2 = t[3] ? t[3].slice(1, -1) : "";
18651
- return r = r.trim(), this.rules.other.startAngleBracket.test(r) && (this.options.pedantic && !this.rules.other.endAngleBracket.test(n) ? r = r.slice(1) : r = r.slice(1, -1)), ge(t, { href: r && r.replace(this.rules.inline.anyPunctuation, "$1"), title: i2 && i2.replace(this.rules.inline.anyPunctuation, "$1") }, t[0], this.lexer, this.rules);
18652
18389
  }
18653
18390
  }
18654
- reflink(e, t) {
18655
- let n;
18656
- if ((n = this.rules.inline.reflink.exec(e)) || (n = this.rules.inline.nolink.exec(e))) {
18657
- let r = (n[2] || n[1]).replace(this.rules.other.multipleSpaceGlobal, " "), i2 = t[r.toLowerCase()];
18658
- if (!i2) {
18659
- let s = n[0].charAt(0);
18660
- return { type: "text", raw: s, text: s };
18661
- }
18662
- return ge(n, i2, n[0], this.lexer, this.rules);
18391
+ clear() {
18392
+ this.plugins.clear();
18393
+ for (const key of Object.keys(pluginDataStore)) {
18394
+ delete pluginDataStore[key];
18663
18395
  }
18664
18396
  }
18665
- emStrong(e, t, n = "") {
18666
- let r = this.rules.inline.emStrongLDelim.exec(e);
18667
- if (!r || r[3] && n.match(this.rules.other.unicodeAlphaNumeric))
18668
- return;
18669
- if (!(r[1] || r[2] || "") || !n || this.rules.inline.punctuation.exec(n)) {
18670
- let s = [...r[0]].length - 1, a, o, l = s, p = 0, c = r[0][0] === "*" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;
18671
- for (c.lastIndex = 0, t = t.slice(-1 * e.length + s);(r = c.exec(t)) != null; ) {
18672
- if (a = r[1] || r[2] || r[3] || r[4] || r[5] || r[6], !a)
18673
- continue;
18674
- if (o = [...a].length, r[3] || r[4]) {
18675
- l += o;
18676
- continue;
18677
- } else if ((r[5] || r[6]) && s % 3 && !((s + o) % 3)) {
18678
- p += o;
18679
- continue;
18680
- }
18681
- if (l -= o, l > 0)
18682
- continue;
18683
- o = Math.min(o, o + l + p);
18684
- let g = [...r[0]][0].length, h = e.slice(0, s + r.index + g + o);
18685
- if (Math.min(s, o) % 2) {
18686
- let f = h.slice(1, -1);
18687
- return { type: "em", raw: h, text: f, tokens: this.lexer.inlineTokens(f) };
18688
- }
18689
- let R = h.slice(2, -2);
18690
- return { type: "strong", raw: h, text: R, tokens: this.lexer.inlineTokens(R) };
18691
- }
18692
- }
18397
+ }
18398
+ function createPluginContext(projectRoot) {
18399
+ return {
18400
+ projectRoot,
18401
+ setPluginData: (namespace, data2) => {
18402
+ pluginDataStore[namespace] = data2;
18403
+ },
18404
+ options: {}
18405
+ };
18406
+ }
18407
+
18408
+ // compiler/css/index.ts
18409
+ import { spawn, spawnSync } from "child_process";
18410
+ import path6 from "path";
18411
+ import fs6 from "fs";
18412
+ function compileCss(options) {
18413
+ const startTime = performance.now();
18414
+ const { input, output, minify = false } = options;
18415
+ if (!fs6.existsSync(input)) {
18416
+ return {
18417
+ css: "",
18418
+ duration: 0,
18419
+ success: false,
18420
+ error: `CSS input file not found: ${input}`
18421
+ };
18693
18422
  }
18694
- codespan(e) {
18695
- let t = this.rules.inline.code.exec(e);
18696
- if (t) {
18697
- let n = t[2].replace(this.rules.other.newLineCharGlobal, " "), r = this.rules.other.nonSpaceChar.test(n), i2 = this.rules.other.startingSpaceChar.test(n) && this.rules.other.endingSpaceChar.test(n);
18698
- return r && i2 && (n = n.substring(1, n.length - 1)), { type: "codespan", raw: t[0], text: n };
18423
+ try {
18424
+ const args = [
18425
+ "@tailwindcss/cli",
18426
+ "-i",
18427
+ input
18428
+ ];
18429
+ const useStdout = output === ":memory:";
18430
+ if (!useStdout) {
18431
+ args.push("-o", output);
18699
18432
  }
18700
- }
18701
- br(e) {
18702
- let t = this.rules.inline.br.exec(e);
18703
- if (t)
18704
- return { type: "br", raw: t[0] };
18705
- }
18706
- del(e) {
18707
- let t = this.rules.inline.del.exec(e);
18708
- if (t)
18709
- return { type: "del", raw: t[0], text: t[2], tokens: this.lexer.inlineTokens(t[2]) };
18710
- }
18711
- autolink(e) {
18712
- let t = this.rules.inline.autolink.exec(e);
18713
- if (t) {
18714
- let n, r;
18715
- return t[2] === "@" ? (n = t[1], r = "mailto:" + n) : (n = t[1], r = n), { type: "link", raw: t[0], text: n, href: r, tokens: [{ type: "text", raw: n, text: n }] };
18433
+ if (minify) {
18434
+ args.push("--minify");
18716
18435
  }
18717
- }
18718
- url(e) {
18719
- let t;
18720
- if (t = this.rules.inline.url.exec(e)) {
18721
- let n, r;
18722
- if (t[2] === "@")
18723
- n = t[0], r = "mailto:" + n;
18724
- else {
18725
- let i2;
18726
- do
18727
- i2 = t[0], t[0] = this.rules.inline._backpedal.exec(t[0])?.[0] ?? "";
18728
- while (i2 !== t[0]);
18729
- n = t[0], t[1] === "www." ? r = "http://" + t[0] : r = t[0];
18730
- }
18731
- return { type: "link", raw: t[0], text: n, href: r, tokens: [{ type: "text", raw: n, text: n }] };
18436
+ const result = spawnSync("bunx", args, {
18437
+ cwd: path6.dirname(input),
18438
+ encoding: "utf-8",
18439
+ stdio: useStdout ? ["pipe", "pipe", "pipe"] : ["pipe", "inherit", "pipe"],
18440
+ env: { ...process.env }
18441
+ });
18442
+ const duration = Math.round(performance.now() - startTime);
18443
+ if (result.status !== 0) {
18444
+ const errorMsg = result.stderr?.toString() || "Unknown compilation error";
18445
+ return {
18446
+ css: "",
18447
+ duration,
18448
+ success: false,
18449
+ error: `Tailwind compilation failed: ${errorMsg}`
18450
+ };
18732
18451
  }
18733
- }
18734
- inlineText(e) {
18735
- let t = this.rules.inline.text.exec(e);
18736
- if (t) {
18737
- let n = this.lexer.state.inRawBlock;
18738
- return { type: "text", raw: t[0], text: t[0], escaped: n };
18452
+ let css = "";
18453
+ if (useStdout) {
18454
+ css = result.stdout?.toString() || "";
18455
+ } else if (fs6.existsSync(output)) {
18456
+ css = fs6.readFileSync(output, "utf-8");
18739
18457
  }
18458
+ return {
18459
+ css,
18460
+ duration,
18461
+ success: true
18462
+ };
18463
+ } catch (error3) {
18464
+ return {
18465
+ css: "",
18466
+ duration: Math.round(performance.now() - startTime),
18467
+ success: false,
18468
+ error: error3.message
18469
+ };
18740
18470
  }
18741
- };
18742
- var x = class u {
18743
- tokens;
18744
- options;
18745
- state;
18746
- inlineQueue;
18747
- tokenizer;
18748
- constructor(e) {
18749
- this.tokens = [], this.tokens.links = Object.create(null), this.options = e || T, this.options.tokenizer = this.options.tokenizer || new y, this.tokenizer = this.options.tokenizer, this.tokenizer.options = this.options, this.tokenizer.lexer = this, this.inlineQueue = [], this.state = { inLink: false, inRawBlock: false, top: true };
18750
- let t = { other: m, block: E.normal, inline: M.normal };
18751
- this.options.pedantic ? (t.block = E.pedantic, t.inline = M.pedantic) : this.options.gfm && (t.block = E.gfm, this.options.breaks ? t.inline = M.breaks : t.inline = M.gfm), this.tokenizer.rules = t;
18752
- }
18753
- static get rules() {
18754
- return { block: E, inline: M };
18755
- }
18756
- static lex(e, t) {
18757
- return new u(t).lex(e);
18758
- }
18759
- static lexInline(e, t) {
18760
- return new u(t).inlineTokens(e);
18761
- }
18762
- lex(e) {
18763
- e = e.replace(m.carriageReturn, `
18764
- `), this.blockTokens(e, this.tokens);
18765
- for (let t = 0;t < this.inlineQueue.length; t++) {
18766
- let n = this.inlineQueue[t];
18767
- this.inlineTokens(n.src, n.tokens);
18768
- }
18769
- return this.inlineQueue = [], this.tokens;
18770
- }
18771
- blockTokens(e, t = [], n = false) {
18772
- for (this.options.pedantic && (e = e.replace(m.tabCharGlobal, " ").replace(m.spaceLine, ""));e; ) {
18773
- let r;
18774
- if (this.options.extensions?.block?.some((s) => (r = s.call({ lexer: this }, e, t)) ? (e = e.substring(r.raw.length), t.push(r), true) : false))
18775
- continue;
18776
- if (r = this.tokenizer.space(e)) {
18777
- e = e.substring(r.raw.length);
18778
- let s = t.at(-1);
18779
- r.raw.length === 1 && s !== undefined ? s.raw += `
18780
- ` : t.push(r);
18781
- continue;
18782
- }
18783
- if (r = this.tokenizer.code(e)) {
18784
- e = e.substring(r.raw.length);
18785
- let s = t.at(-1);
18786
- s?.type === "paragraph" || s?.type === "text" ? (s.raw += (s.raw.endsWith(`
18787
- `) ? "" : `
18788
- `) + r.raw, s.text += `
18789
- ` + r.text, this.inlineQueue.at(-1).src = s.text) : t.push(r);
18790
- continue;
18791
- }
18792
- if (r = this.tokenizer.fences(e)) {
18793
- e = e.substring(r.raw.length), t.push(r);
18794
- continue;
18795
- }
18796
- if (r = this.tokenizer.heading(e)) {
18797
- e = e.substring(r.raw.length), t.push(r);
18798
- continue;
18799
- }
18800
- if (r = this.tokenizer.hr(e)) {
18801
- e = e.substring(r.raw.length), t.push(r);
18802
- continue;
18803
- }
18804
- if (r = this.tokenizer.blockquote(e)) {
18805
- e = e.substring(r.raw.length), t.push(r);
18806
- continue;
18807
- }
18808
- if (r = this.tokenizer.list(e)) {
18809
- e = e.substring(r.raw.length), t.push(r);
18810
- continue;
18811
- }
18812
- if (r = this.tokenizer.html(e)) {
18813
- e = e.substring(r.raw.length), t.push(r);
18814
- continue;
18815
- }
18816
- if (r = this.tokenizer.def(e)) {
18817
- e = e.substring(r.raw.length);
18818
- let s = t.at(-1);
18819
- s?.type === "paragraph" || s?.type === "text" ? (s.raw += (s.raw.endsWith(`
18820
- `) ? "" : `
18821
- `) + r.raw, s.text += `
18822
- ` + r.raw, this.inlineQueue.at(-1).src = s.text) : this.tokens.links[r.tag] || (this.tokens.links[r.tag] = { href: r.href, title: r.title }, t.push(r));
18823
- continue;
18824
- }
18825
- if (r = this.tokenizer.table(e)) {
18826
- e = e.substring(r.raw.length), t.push(r);
18827
- continue;
18828
- }
18829
- if (r = this.tokenizer.lheading(e)) {
18830
- e = e.substring(r.raw.length), t.push(r);
18831
- continue;
18832
- }
18833
- let i2 = e;
18834
- if (this.options.extensions?.startBlock) {
18835
- let s = 1 / 0, a = e.slice(1), o;
18836
- this.options.extensions.startBlock.forEach((l) => {
18837
- o = l.call({ lexer: this }, a), typeof o == "number" && o >= 0 && (s = Math.min(s, o));
18838
- }), s < 1 / 0 && s >= 0 && (i2 = e.substring(0, s + 1));
18839
- }
18840
- if (this.state.top && (r = this.tokenizer.paragraph(i2))) {
18841
- let s = t.at(-1);
18842
- n && s?.type === "paragraph" ? (s.raw += (s.raw.endsWith(`
18843
- `) ? "" : `
18844
- `) + r.raw, s.text += `
18845
- ` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = s.text) : t.push(r), n = i2.length !== e.length, e = e.substring(r.raw.length);
18846
- continue;
18847
- }
18848
- if (r = this.tokenizer.text(e)) {
18849
- e = e.substring(r.raw.length);
18850
- let s = t.at(-1);
18851
- s?.type === "text" ? (s.raw += (s.raw.endsWith(`
18852
- `) ? "" : `
18853
- `) + r.raw, s.text += `
18854
- ` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = s.text) : t.push(r);
18855
- continue;
18856
- }
18857
- if (e) {
18858
- let s = "Infinite loop on byte: " + e.charCodeAt(0);
18859
- if (this.options.silent) {
18860
- console.error(s);
18861
- break;
18862
- } else
18863
- throw new Error(s);
18864
- }
18865
- }
18866
- return this.state.top = true, t;
18867
- }
18868
- inline(e, t = []) {
18869
- return this.inlineQueue.push({ src: e, tokens: t }), t;
18870
- }
18871
- inlineTokens(e, t = []) {
18872
- let n = e, r = null;
18873
- if (this.tokens.links) {
18874
- let o = Object.keys(this.tokens.links);
18875
- if (o.length > 0)
18876
- for (;(r = this.tokenizer.rules.inline.reflinkSearch.exec(n)) != null; )
18877
- o.includes(r[0].slice(r[0].lastIndexOf("[") + 1, -1)) && (n = n.slice(0, r.index) + "[" + "a".repeat(r[0].length - 2) + "]" + n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex));
18878
- }
18879
- for (;(r = this.tokenizer.rules.inline.anyPunctuation.exec(n)) != null; )
18880
- n = n.slice(0, r.index) + "++" + n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);
18881
- let i2;
18882
- for (;(r = this.tokenizer.rules.inline.blockSkip.exec(n)) != null; )
18883
- i2 = r[2] ? r[2].length : 0, n = n.slice(0, r.index + i2) + "[" + "a".repeat(r[0].length - i2 - 2) + "]" + n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
18884
- n = this.options.hooks?.emStrongMask?.call({ lexer: this }, n) ?? n;
18885
- let s = false, a = "";
18886
- for (;e; ) {
18887
- s || (a = ""), s = false;
18888
- let o;
18889
- if (this.options.extensions?.inline?.some((p) => (o = p.call({ lexer: this }, e, t)) ? (e = e.substring(o.raw.length), t.push(o), true) : false))
18890
- continue;
18891
- if (o = this.tokenizer.escape(e)) {
18892
- e = e.substring(o.raw.length), t.push(o);
18893
- continue;
18894
- }
18895
- if (o = this.tokenizer.tag(e)) {
18896
- e = e.substring(o.raw.length), t.push(o);
18897
- continue;
18898
- }
18899
- if (o = this.tokenizer.link(e)) {
18900
- e = e.substring(o.raw.length), t.push(o);
18901
- continue;
18902
- }
18903
- if (o = this.tokenizer.reflink(e, this.tokens.links)) {
18904
- e = e.substring(o.raw.length);
18905
- let p = t.at(-1);
18906
- o.type === "text" && p?.type === "text" ? (p.raw += o.raw, p.text += o.text) : t.push(o);
18907
- continue;
18908
- }
18909
- if (o = this.tokenizer.emStrong(e, n, a)) {
18910
- e = e.substring(o.raw.length), t.push(o);
18911
- continue;
18912
- }
18913
- if (o = this.tokenizer.codespan(e)) {
18914
- e = e.substring(o.raw.length), t.push(o);
18915
- continue;
18916
- }
18917
- if (o = this.tokenizer.br(e)) {
18918
- e = e.substring(o.raw.length), t.push(o);
18919
- continue;
18920
- }
18921
- if (o = this.tokenizer.del(e)) {
18922
- e = e.substring(o.raw.length), t.push(o);
18923
- continue;
18924
- }
18925
- if (o = this.tokenizer.autolink(e)) {
18926
- e = e.substring(o.raw.length), t.push(o);
18927
- continue;
18928
- }
18929
- if (!this.state.inLink && (o = this.tokenizer.url(e))) {
18930
- e = e.substring(o.raw.length), t.push(o);
18931
- continue;
18932
- }
18933
- let l = e;
18934
- if (this.options.extensions?.startInline) {
18935
- let p = 1 / 0, c = e.slice(1), g;
18936
- this.options.extensions.startInline.forEach((h) => {
18937
- g = h.call({ lexer: this }, c), typeof g == "number" && g >= 0 && (p = Math.min(p, g));
18938
- }), p < 1 / 0 && p >= 0 && (l = e.substring(0, p + 1));
18939
- }
18940
- if (o = this.tokenizer.inlineText(l)) {
18941
- e = e.substring(o.raw.length), o.raw.slice(-1) !== "_" && (a = o.raw.slice(-1)), s = true;
18942
- let p = t.at(-1);
18943
- p?.type === "text" ? (p.raw += o.raw, p.text += o.text) : t.push(o);
18944
- continue;
18945
- }
18946
- if (e) {
18947
- let p = "Infinite loop on byte: " + e.charCodeAt(0);
18948
- if (this.options.silent) {
18949
- console.error(p);
18950
- break;
18951
- } else
18952
- throw new Error(p);
18953
- }
18954
- }
18955
- return t;
18956
- }
18957
- };
18958
- var P = class {
18959
- options;
18960
- parser;
18961
- constructor(e) {
18962
- this.options = e || T;
18963
- }
18964
- space(e) {
18965
- return "";
18966
- }
18967
- code({ text: e, lang: t, escaped: n }) {
18968
- let r = (t || "").match(m.notSpaceStart)?.[0], i2 = e.replace(m.endingNewline, "") + `
18969
- `;
18970
- return r ? '<pre><code class="language-' + w(r) + '">' + (n ? i2 : w(i2, true)) + `</code></pre>
18971
- ` : "<pre><code>" + (n ? i2 : w(i2, true)) + `</code></pre>
18972
- `;
18973
- }
18974
- blockquote({ tokens: e }) {
18975
- return `<blockquote>
18976
- ${this.parser.parse(e)}</blockquote>
18977
- `;
18978
- }
18979
- html({ text: e }) {
18980
- return e;
18981
- }
18982
- def(e) {
18983
- return "";
18984
- }
18985
- heading({ tokens: e, depth: t }) {
18986
- return `<h${t}>${this.parser.parseInline(e)}</h${t}>
18987
- `;
18988
- }
18989
- hr(e) {
18990
- return `<hr>
18991
- `;
18992
- }
18993
- list(e) {
18994
- let { ordered: t, start: n } = e, r = "";
18995
- for (let a = 0;a < e.items.length; a++) {
18996
- let o = e.items[a];
18997
- r += this.listitem(o);
18998
- }
18999
- let i2 = t ? "ol" : "ul", s = t && n !== 1 ? ' start="' + n + '"' : "";
19000
- return "<" + i2 + s + `>
19001
- ` + r + "</" + i2 + `>
19002
- `;
19003
- }
19004
- listitem(e) {
19005
- return `<li>${this.parser.parse(e.tokens)}</li>
19006
- `;
19007
- }
19008
- checkbox({ checked: e }) {
19009
- return "<input " + (e ? 'checked="" ' : "") + 'disabled="" type="checkbox"> ';
19010
- }
19011
- paragraph({ tokens: e }) {
19012
- return `<p>${this.parser.parseInline(e)}</p>
19013
- `;
19014
- }
19015
- table(e) {
19016
- let t = "", n = "";
19017
- for (let i2 = 0;i2 < e.header.length; i2++)
19018
- n += this.tablecell(e.header[i2]);
19019
- t += this.tablerow({ text: n });
19020
- let r = "";
19021
- for (let i2 = 0;i2 < e.rows.length; i2++) {
19022
- let s = e.rows[i2];
19023
- n = "";
19024
- for (let a = 0;a < s.length; a++)
19025
- n += this.tablecell(s[a]);
19026
- r += this.tablerow({ text: n });
19027
- }
19028
- return r && (r = `<tbody>${r}</tbody>`), `<table>
19029
- <thead>
19030
- ` + t + `</thead>
19031
- ` + r + `</table>
19032
- `;
19033
- }
19034
- tablerow({ text: e }) {
19035
- return `<tr>
19036
- ${e}</tr>
19037
- `;
19038
- }
19039
- tablecell(e) {
19040
- let t = this.parser.parseInline(e.tokens), n = e.header ? "th" : "td";
19041
- return (e.align ? `<${n} align="${e.align}">` : `<${n}>`) + t + `</${n}>
19042
- `;
19043
- }
19044
- strong({ tokens: e }) {
19045
- return `<strong>${this.parser.parseInline(e)}</strong>`;
19046
- }
19047
- em({ tokens: e }) {
19048
- return `<em>${this.parser.parseInline(e)}</em>`;
19049
- }
19050
- codespan({ text: e }) {
19051
- return `<code>${w(e, true)}</code>`;
19052
- }
19053
- br(e) {
19054
- return "<br>";
19055
- }
19056
- del({ tokens: e }) {
19057
- return `<del>${this.parser.parseInline(e)}</del>`;
19058
- }
19059
- link({ href: e, title: t, tokens: n }) {
19060
- let r = this.parser.parseInline(n), i2 = X(e);
19061
- if (i2 === null)
19062
- return r;
19063
- e = i2;
19064
- let s = '<a href="' + e + '"';
19065
- return t && (s += ' title="' + w(t) + '"'), s += ">" + r + "</a>", s;
19066
- }
19067
- image({ href: e, title: t, text: n, tokens: r }) {
19068
- r && (n = this.parser.parseInline(r, this.parser.textRenderer));
19069
- let i2 = X(e);
19070
- if (i2 === null)
19071
- return w(n);
19072
- e = i2;
19073
- let s = `<img src="${e}" alt="${n}"`;
19074
- return t && (s += ` title="${w(t)}"`), s += ">", s;
19075
- }
19076
- text(e) {
19077
- return "tokens" in e && e.tokens ? this.parser.parseInline(e.tokens) : ("escaped" in e) && e.escaped ? e.text : w(e.text);
19078
- }
19079
- };
19080
- var $2 = class {
19081
- strong({ text: e }) {
19082
- return e;
19083
- }
19084
- em({ text: e }) {
19085
- return e;
19086
- }
19087
- codespan({ text: e }) {
19088
- return e;
19089
- }
19090
- del({ text: e }) {
19091
- return e;
19092
- }
19093
- html({ text: e }) {
19094
- return e;
19095
- }
19096
- text({ text: e }) {
19097
- return e;
19098
- }
19099
- link({ text: e }) {
19100
- return "" + e;
19101
- }
19102
- image({ text: e }) {
19103
- return "" + e;
19104
- }
19105
- br() {
19106
- return "";
19107
- }
19108
- checkbox({ raw: e }) {
19109
- return e;
19110
- }
19111
- };
19112
- var b = class u2 {
19113
- options;
19114
- renderer;
19115
- textRenderer;
19116
- constructor(e) {
19117
- this.options = e || T, this.options.renderer = this.options.renderer || new P, this.renderer = this.options.renderer, this.renderer.options = this.options, this.renderer.parser = this, this.textRenderer = new $2;
19118
- }
19119
- static parse(e, t) {
19120
- return new u2(t).parse(e);
19121
- }
19122
- static parseInline(e, t) {
19123
- return new u2(t).parseInline(e);
19124
- }
19125
- parse(e) {
19126
- let t = "";
19127
- for (let n = 0;n < e.length; n++) {
19128
- let r = e[n];
19129
- if (this.options.extensions?.renderers?.[r.type]) {
19130
- let s = r, a = this.options.extensions.renderers[s.type].call({ parser: this }, s);
19131
- if (a !== false || !["space", "hr", "heading", "code", "table", "blockquote", "list", "html", "def", "paragraph", "text"].includes(s.type)) {
19132
- t += a || "";
19133
- continue;
19134
- }
19135
- }
19136
- let i2 = r;
19137
- switch (i2.type) {
19138
- case "space": {
19139
- t += this.renderer.space(i2);
19140
- break;
19141
- }
19142
- case "hr": {
19143
- t += this.renderer.hr(i2);
19144
- break;
19145
- }
19146
- case "heading": {
19147
- t += this.renderer.heading(i2);
19148
- break;
19149
- }
19150
- case "code": {
19151
- t += this.renderer.code(i2);
19152
- break;
19153
- }
19154
- case "table": {
19155
- t += this.renderer.table(i2);
19156
- break;
19157
- }
19158
- case "blockquote": {
19159
- t += this.renderer.blockquote(i2);
19160
- break;
19161
- }
19162
- case "list": {
19163
- t += this.renderer.list(i2);
19164
- break;
19165
- }
19166
- case "checkbox": {
19167
- t += this.renderer.checkbox(i2);
19168
- break;
19169
- }
19170
- case "html": {
19171
- t += this.renderer.html(i2);
19172
- break;
19173
- }
19174
- case "def": {
19175
- t += this.renderer.def(i2);
19176
- break;
19177
- }
19178
- case "paragraph": {
19179
- t += this.renderer.paragraph(i2);
19180
- break;
19181
- }
19182
- case "text": {
19183
- t += this.renderer.text(i2);
19184
- break;
19185
- }
19186
- default: {
19187
- let s = 'Token with "' + i2.type + '" type was not found.';
19188
- if (this.options.silent)
19189
- return console.error(s), "";
19190
- throw new Error(s);
19191
- }
19192
- }
19193
- }
19194
- return t;
19195
- }
19196
- parseInline(e, t = this.renderer) {
19197
- let n = "";
19198
- for (let r = 0;r < e.length; r++) {
19199
- let i2 = e[r];
19200
- if (this.options.extensions?.renderers?.[i2.type]) {
19201
- let a = this.options.extensions.renderers[i2.type].call({ parser: this }, i2);
19202
- if (a !== false || !["escape", "html", "link", "image", "strong", "em", "codespan", "br", "del", "text"].includes(i2.type)) {
19203
- n += a || "";
19204
- continue;
19205
- }
19206
- }
19207
- let s = i2;
19208
- switch (s.type) {
19209
- case "escape": {
19210
- n += t.text(s);
19211
- break;
19212
- }
19213
- case "html": {
19214
- n += t.html(s);
19215
- break;
19216
- }
19217
- case "link": {
19218
- n += t.link(s);
19219
- break;
19220
- }
19221
- case "image": {
19222
- n += t.image(s);
19223
- break;
19224
- }
19225
- case "checkbox": {
19226
- n += t.checkbox(s);
19227
- break;
19228
- }
19229
- case "strong": {
19230
- n += t.strong(s);
19231
- break;
19232
- }
19233
- case "em": {
19234
- n += t.em(s);
19235
- break;
19236
- }
19237
- case "codespan": {
19238
- n += t.codespan(s);
19239
- break;
19240
- }
19241
- case "br": {
19242
- n += t.br(s);
19243
- break;
19244
- }
19245
- case "del": {
19246
- n += t.del(s);
19247
- break;
19248
- }
19249
- case "text": {
19250
- n += t.text(s);
19251
- break;
19252
- }
19253
- default: {
19254
- let a = 'Token with "' + s.type + '" type was not found.';
19255
- if (this.options.silent)
19256
- return console.error(a), "";
19257
- throw new Error(a);
19258
- }
19259
- }
19260
- }
19261
- return n;
19262
- }
19263
- };
19264
- var S = class {
19265
- options;
19266
- block;
19267
- constructor(e) {
19268
- this.options = e || T;
19269
- }
19270
- static passThroughHooks = new Set(["preprocess", "postprocess", "processAllTokens", "emStrongMask"]);
19271
- static passThroughHooksRespectAsync = new Set(["preprocess", "postprocess", "processAllTokens"]);
19272
- preprocess(e) {
19273
- return e;
19274
- }
19275
- postprocess(e) {
19276
- return e;
19277
- }
19278
- processAllTokens(e) {
19279
- return e;
19280
- }
19281
- emStrongMask(e) {
19282
- return e;
19283
- }
19284
- provideLexer() {
19285
- return this.block ? x.lex : x.lexInline;
19286
- }
19287
- provideParser() {
19288
- return this.block ? b.parse : b.parseInline;
19289
- }
19290
- };
19291
- var B = class {
19292
- defaults = L();
19293
- options = this.setOptions;
19294
- parse = this.parseMarkdown(true);
19295
- parseInline = this.parseMarkdown(false);
19296
- Parser = b;
19297
- Renderer = P;
19298
- TextRenderer = $2;
19299
- Lexer = x;
19300
- Tokenizer = y;
19301
- Hooks = S;
19302
- constructor(...e) {
19303
- this.use(...e);
19304
- }
19305
- walkTokens(e, t) {
19306
- let n = [];
19307
- for (let r of e)
19308
- switch (n = n.concat(t.call(this, r)), r.type) {
19309
- case "table": {
19310
- let i2 = r;
19311
- for (let s of i2.header)
19312
- n = n.concat(this.walkTokens(s.tokens, t));
19313
- for (let s of i2.rows)
19314
- for (let a of s)
19315
- n = n.concat(this.walkTokens(a.tokens, t));
19316
- break;
19317
- }
19318
- case "list": {
19319
- let i2 = r;
19320
- n = n.concat(this.walkTokens(i2.items, t));
19321
- break;
19322
- }
19323
- default: {
19324
- let i2 = r;
19325
- this.defaults.extensions?.childTokens?.[i2.type] ? this.defaults.extensions.childTokens[i2.type].forEach((s) => {
19326
- let a = i2[s].flat(1 / 0);
19327
- n = n.concat(this.walkTokens(a, t));
19328
- }) : i2.tokens && (n = n.concat(this.walkTokens(i2.tokens, t)));
19329
- }
19330
- }
19331
- return n;
19332
- }
19333
- use(...e) {
19334
- let t = this.defaults.extensions || { renderers: {}, childTokens: {} };
19335
- return e.forEach((n) => {
19336
- let r = { ...n };
19337
- if (r.async = this.defaults.async || r.async || false, n.extensions && (n.extensions.forEach((i2) => {
19338
- if (!i2.name)
19339
- throw new Error("extension name required");
19340
- if ("renderer" in i2) {
19341
- let s = t.renderers[i2.name];
19342
- s ? t.renderers[i2.name] = function(...a) {
19343
- let o = i2.renderer.apply(this, a);
19344
- return o === false && (o = s.apply(this, a)), o;
19345
- } : t.renderers[i2.name] = i2.renderer;
19346
- }
19347
- if ("tokenizer" in i2) {
19348
- if (!i2.level || i2.level !== "block" && i2.level !== "inline")
19349
- throw new Error("extension level must be 'block' or 'inline'");
19350
- let s = t[i2.level];
19351
- s ? s.unshift(i2.tokenizer) : t[i2.level] = [i2.tokenizer], i2.start && (i2.level === "block" ? t.startBlock ? t.startBlock.push(i2.start) : t.startBlock = [i2.start] : i2.level === "inline" && (t.startInline ? t.startInline.push(i2.start) : t.startInline = [i2.start]));
19352
- }
19353
- "childTokens" in i2 && i2.childTokens && (t.childTokens[i2.name] = i2.childTokens);
19354
- }), r.extensions = t), n.renderer) {
19355
- let i2 = this.defaults.renderer || new P(this.defaults);
19356
- for (let s in n.renderer) {
19357
- if (!(s in i2))
19358
- throw new Error(`renderer '${s}' does not exist`);
19359
- if (["options", "parser"].includes(s))
19360
- continue;
19361
- let a = s, o = n.renderer[a], l = i2[a];
19362
- i2[a] = (...p) => {
19363
- let c = o.apply(i2, p);
19364
- return c === false && (c = l.apply(i2, p)), c || "";
19365
- };
19366
- }
19367
- r.renderer = i2;
19368
- }
19369
- if (n.tokenizer) {
19370
- let i2 = this.defaults.tokenizer || new y(this.defaults);
19371
- for (let s in n.tokenizer) {
19372
- if (!(s in i2))
19373
- throw new Error(`tokenizer '${s}' does not exist`);
19374
- if (["options", "rules", "lexer"].includes(s))
19375
- continue;
19376
- let a = s, o = n.tokenizer[a], l = i2[a];
19377
- i2[a] = (...p) => {
19378
- let c = o.apply(i2, p);
19379
- return c === false && (c = l.apply(i2, p)), c;
19380
- };
19381
- }
19382
- r.tokenizer = i2;
19383
- }
19384
- if (n.hooks) {
19385
- let i2 = this.defaults.hooks || new S;
19386
- for (let s in n.hooks) {
19387
- if (!(s in i2))
19388
- throw new Error(`hook '${s}' does not exist`);
19389
- if (["options", "block"].includes(s))
19390
- continue;
19391
- let a = s, o = n.hooks[a], l = i2[a];
19392
- S.passThroughHooks.has(s) ? i2[a] = (p) => {
19393
- if (this.defaults.async && S.passThroughHooksRespectAsync.has(s))
19394
- return (async () => {
19395
- let g = await o.call(i2, p);
19396
- return l.call(i2, g);
19397
- })();
19398
- let c = o.call(i2, p);
19399
- return l.call(i2, c);
19400
- } : i2[a] = (...p) => {
19401
- if (this.defaults.async)
19402
- return (async () => {
19403
- let g = await o.apply(i2, p);
19404
- return g === false && (g = await l.apply(i2, p)), g;
19405
- })();
19406
- let c = o.apply(i2, p);
19407
- return c === false && (c = l.apply(i2, p)), c;
19408
- };
19409
- }
19410
- r.hooks = i2;
19411
- }
19412
- if (n.walkTokens) {
19413
- let i2 = this.defaults.walkTokens, s = n.walkTokens;
19414
- r.walkTokens = function(a) {
19415
- let o = [];
19416
- return o.push(s.call(this, a)), i2 && (o = o.concat(i2.call(this, a))), o;
19417
- };
19418
- }
19419
- this.defaults = { ...this.defaults, ...r };
19420
- }), this;
19421
- }
19422
- setOptions(e) {
19423
- return this.defaults = { ...this.defaults, ...e }, this;
19424
- }
19425
- lexer(e, t) {
19426
- return x.lex(e, t ?? this.defaults);
19427
- }
19428
- parser(e, t) {
19429
- return b.parse(e, t ?? this.defaults);
19430
- }
19431
- parseMarkdown(e) {
19432
- return (n, r) => {
19433
- let i2 = { ...r }, s = { ...this.defaults, ...i2 }, a = this.onError(!!s.silent, !!s.async);
19434
- if (this.defaults.async === true && i2.async === false)
19435
- return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));
19436
- if (typeof n > "u" || n === null)
19437
- return a(new Error("marked(): input parameter is undefined or null"));
19438
- if (typeof n != "string")
19439
- return a(new Error("marked(): input parameter is of type " + Object.prototype.toString.call(n) + ", string expected"));
19440
- if (s.hooks && (s.hooks.options = s, s.hooks.block = e), s.async)
19441
- return (async () => {
19442
- let o = s.hooks ? await s.hooks.preprocess(n) : n, p = await (s.hooks ? await s.hooks.provideLexer() : e ? x.lex : x.lexInline)(o, s), c = s.hooks ? await s.hooks.processAllTokens(p) : p;
19443
- s.walkTokens && await Promise.all(this.walkTokens(c, s.walkTokens));
19444
- let h = await (s.hooks ? await s.hooks.provideParser() : e ? b.parse : b.parseInline)(c, s);
19445
- return s.hooks ? await s.hooks.postprocess(h) : h;
19446
- })().catch(a);
19447
- try {
19448
- s.hooks && (n = s.hooks.preprocess(n));
19449
- let l = (s.hooks ? s.hooks.provideLexer() : e ? x.lex : x.lexInline)(n, s);
19450
- s.hooks && (l = s.hooks.processAllTokens(l)), s.walkTokens && this.walkTokens(l, s.walkTokens);
19451
- let c = (s.hooks ? s.hooks.provideParser() : e ? b.parse : b.parseInline)(l, s);
19452
- return s.hooks && (c = s.hooks.postprocess(c)), c;
19453
- } catch (o) {
19454
- return a(o);
19455
- }
19456
- };
19457
- }
19458
- onError(e, t) {
19459
- return (n) => {
19460
- if (n.message += `
19461
- Please report this to https://github.com/markedjs/marked.`, e) {
19462
- let r = "<p>An error occurred:</p><pre>" + w(n.message + "", true) + "</pre>";
19463
- return t ? Promise.resolve(r) : r;
19464
- }
19465
- if (t)
19466
- return Promise.reject(n);
19467
- throw n;
19468
- };
19469
- }
19470
- };
19471
- var _ = new B;
19472
- function d(u3, e) {
19473
- return _.parse(u3, e);
19474
- }
19475
- d.options = d.setOptions = function(u3) {
19476
- return _.setOptions(u3), d.defaults = _.defaults, Z(d.defaults), d;
19477
- };
19478
- d.getDefaults = L;
19479
- d.defaults = T;
19480
- d.use = function(...u3) {
19481
- return _.use(...u3), d.defaults = _.defaults, Z(d.defaults), d;
19482
- };
19483
- d.walkTokens = function(u3, e) {
19484
- return _.walkTokens(u3, e);
19485
- };
19486
- d.parseInline = _.parseInline;
19487
- d.Parser = b;
19488
- d.parser = b.parse;
19489
- d.Renderer = P;
19490
- d.TextRenderer = $2;
19491
- d.Lexer = x;
19492
- d.lexer = x.lex;
19493
- d.Tokenizer = y;
19494
- d.Hooks = S;
19495
- d.parse = d;
19496
- var Dt = d.options;
19497
- var Ht = d.setOptions;
19498
- var Zt = d.use;
19499
- var Gt = d.walkTokens;
19500
- var Nt = d.parseInline;
19501
- var Ft = b.parse;
19502
- var jt = x.lex;
19503
-
19504
- // cli/utils/content.ts
19505
- function loadContent(contentDir) {
19506
- if (!fs4.existsSync(contentDir)) {
19507
- return {};
19508
- }
19509
- const collections = {};
19510
- const files = getAllFiles(contentDir);
19511
- for (const filePath of files) {
19512
- const ext = path5.extname(filePath).toLowerCase();
19513
- const relativePath = path5.relative(contentDir, filePath);
19514
- const collection = relativePath.split(path5.sep)[0];
19515
- if (!collection)
19516
- continue;
19517
- const slug = relativePath.replace(/\.(md|mdx|json)$/, "").replace(/\\/g, "/");
19518
- const id = slug;
19519
- const rawContent = fs4.readFileSync(filePath, "utf-8");
19520
- if (!collections[collection]) {
19521
- collections[collection] = [];
19522
- }
19523
- if (ext === ".json") {
19524
- try {
19525
- const data2 = JSON.parse(rawContent);
19526
- collections[collection].push({
19527
- id,
19528
- slug,
19529
- collection,
19530
- content: "",
19531
- ...data2
19532
- });
19533
- } catch (e) {
19534
- console.error(`Error parsing JSON file ${filePath}:`, e);
19535
- }
19536
- } else if (ext === ".md" || ext === ".mdx") {
19537
- const { metadata, content } = parseMarkdown(rawContent);
19538
- collections[collection].push({
19539
- id,
19540
- slug,
19541
- collection,
19542
- content,
19543
- ...metadata
19544
- });
19545
- }
19546
- }
19547
- return collections;
19548
- }
19549
- function getAllFiles(dir, fileList = []) {
19550
- const files = fs4.readdirSync(dir);
19551
- files.forEach((file) => {
19552
- const name = path5.join(dir, file);
19553
- if (fs4.statSync(name).isDirectory()) {
19554
- getAllFiles(name, fileList);
19555
- } else {
19556
- fileList.push(name);
19557
- }
19558
- });
19559
- return fileList;
19560
- }
19561
- function parseMarkdown(content) {
19562
- const frontmatterRegex = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/;
19563
- const match = content.match(frontmatterRegex);
19564
- if (!match) {
19565
- return { metadata: {}, content: content.trim() };
19566
- }
19567
- const [, yamlStr, body] = match;
19568
- const metadata = {};
19569
- if (yamlStr) {
19570
- yamlStr.split(`
19571
- `).forEach((line) => {
19572
- const [key, ...values] = line.split(":");
19573
- if (key && values.length > 0) {
19574
- const value = values.join(":").trim();
19575
- if (value === "true")
19576
- metadata[key.trim()] = true;
19577
- else if (value === "false")
19578
- metadata[key.trim()] = false;
19579
- else if (!isNaN(Number(value)))
19580
- metadata[key.trim()] = Number(value);
19581
- else if (value.startsWith("[") && value.endsWith("]")) {
19582
- metadata[key.trim()] = value.slice(1, -1).split(",").map((v2) => v2.trim().replace(/^['"]|['"]$/g, ""));
19583
- } else
19584
- metadata[key.trim()] = value.replace(/^['"]|['"]$/g, "");
19585
- }
19586
- });
19587
- }
19588
- return {
19589
- metadata,
19590
- content: d.parse((body || "").trim())
19591
- };
19592
- }
19593
-
19594
- // core/config/loader.ts
19595
- import fs5 from "fs";
19596
- import path6 from "path";
19597
- async function loadZenithConfig(projectRoot) {
19598
- const configPaths = [
19599
- path6.join(projectRoot, "zenith.config.ts"),
19600
- path6.join(projectRoot, "zenith.config.js"),
19601
- path6.join(projectRoot, "zenith.config.mjs")
19602
- ];
19603
- let configPath = null;
19604
- for (const p of configPaths) {
19605
- if (fs5.existsSync(p)) {
19606
- configPath = p;
19607
- break;
19608
- }
19609
- }
19610
- if (!configPath) {
19611
- return { plugins: [] };
19612
- }
19613
- try {
19614
- const configModule = await import(configPath);
19615
- const config = configModule.default || configModule;
19616
- if (typeof config !== "object" || config === null) {
19617
- console.warn(`[Zenith] Invalid config format in ${configPath}`);
19618
- return { plugins: [] };
19619
- }
19620
- return config;
19621
- } catch (error3) {
19622
- const message = error3 instanceof Error ? error3.message : String(error3);
19623
- console.error(`[Zenith] Failed to load config from ${configPath}:`, message);
19624
- return { plugins: [] };
19625
- }
19626
- }
19627
-
19628
- // core/plugins/registry.ts
19629
- class PluginRegistry {
19630
- plugins = new Map;
19631
- register(plugin) {
19632
- if (this.plugins.has(plugin.name)) {
19633
- console.warn(`[Zenith] Plugin "${plugin.name}" is already registered. Overwriting.`);
19634
- }
19635
- this.plugins.set(plugin.name, plugin);
19636
- }
19637
- get(name) {
19638
- return this.plugins.get(name);
19639
- }
19640
- has(name) {
19641
- return this.plugins.has(name);
19642
- }
19643
- all() {
19644
- return Array.from(this.plugins.values());
19645
- }
19646
- async initAll(ctx) {
19647
- for (const plugin of this.plugins.values()) {
19648
- try {
19649
- await plugin.setup(ctx);
19650
- console.log(`[Zenith] Plugin "${plugin.name}" initialized`);
19651
- } catch (error3) {
19652
- const message = error3 instanceof Error ? error3.message : String(error3);
19653
- console.error(`[Zenith] Failed to initialize plugin "${plugin.name}":`, message);
19654
- }
19655
- }
19656
- }
19657
- clear() {
19658
- this.plugins.clear();
19659
- }
19660
- }
19661
- function createPluginContext(projectRoot, contentSetter) {
19662
- return {
19663
- projectRoot,
19664
- setContentData: contentSetter,
19665
- options: {}
19666
- };
19667
- }
19668
-
19669
- // compiler/css/index.ts
19670
- import { spawn, spawnSync } from "child_process";
19671
- import path7 from "path";
19672
- import fs6 from "fs";
19673
- function compileCss(options) {
19674
- const startTime = performance.now();
19675
- const { input, output, minify = false } = options;
19676
- if (!fs6.existsSync(input)) {
19677
- return {
19678
- css: "",
19679
- duration: 0,
19680
- success: false,
19681
- error: `CSS input file not found: ${input}`
19682
- };
19683
- }
19684
- try {
19685
- const args = [
19686
- "@tailwindcss/cli",
19687
- "-i",
19688
- input
19689
- ];
19690
- const useStdout = output === ":memory:";
19691
- if (!useStdout) {
19692
- args.push("-o", output);
19693
- }
19694
- if (minify) {
19695
- args.push("--minify");
19696
- }
19697
- const result = spawnSync("bunx", args, {
19698
- cwd: path7.dirname(input),
19699
- encoding: "utf-8",
19700
- stdio: useStdout ? ["pipe", "pipe", "pipe"] : ["pipe", "inherit", "pipe"],
19701
- env: { ...process.env }
19702
- });
19703
- const duration = Math.round(performance.now() - startTime);
19704
- if (result.status !== 0) {
19705
- const errorMsg = result.stderr?.toString() || "Unknown compilation error";
19706
- return {
19707
- css: "",
19708
- duration,
19709
- success: false,
19710
- error: `Tailwind compilation failed: ${errorMsg}`
19711
- };
19712
- }
19713
- let css = "";
19714
- if (useStdout) {
19715
- css = result.stdout?.toString() || "";
19716
- } else if (fs6.existsSync(output)) {
19717
- css = fs6.readFileSync(output, "utf-8");
19718
- }
19719
- return {
19720
- css,
19721
- duration,
19722
- success: true
19723
- };
19724
- } catch (error3) {
19725
- return {
19726
- css: "",
19727
- duration: Math.round(performance.now() - startTime),
19728
- success: false,
19729
- error: error3.message
19730
- };
19731
- }
19732
- }
19733
- async function compileCssAsync(options) {
19734
- return new Promise((resolve) => {
19735
- const startTime = performance.now();
19736
- const { input, output, minify = false } = options;
19737
- if (!fs6.existsSync(input)) {
19738
- resolve({
19739
- css: "",
19740
- duration: 0,
19741
- success: false,
19742
- error: `CSS input file not found: ${input}`
19743
- });
19744
- return;
18471
+ }
18472
+ async function compileCssAsync(options) {
18473
+ return new Promise((resolve) => {
18474
+ const startTime = performance.now();
18475
+ const { input, output, minify = false } = options;
18476
+ if (!fs6.existsSync(input)) {
18477
+ resolve({
18478
+ css: "",
18479
+ duration: 0,
18480
+ success: false,
18481
+ error: `CSS input file not found: ${input}`
18482
+ });
18483
+ return;
19745
18484
  }
19746
18485
  const args = ["@tailwindcss/cli", "-i", input];
19747
18486
  const useStdout = output === ":memory:";
@@ -19752,7 +18491,7 @@ async function compileCssAsync(options) {
19752
18491
  args.push("--minify");
19753
18492
  }
19754
18493
  const child = spawn("bunx", args, {
19755
- cwd: path7.dirname(input),
18494
+ cwd: path6.dirname(input),
19756
18495
  stdio: useStdout ? ["pipe", "pipe", "pipe"] : ["pipe", "inherit", "pipe"],
19757
18496
  env: { ...process.env }
19758
18497
  });
@@ -19802,26 +18541,75 @@ async function compileCssAsync(options) {
19802
18541
  });
19803
18542
  }
19804
18543
  function resolveGlobalsCss(projectRoot) {
19805
- const globalsPath = path7.join(projectRoot, "src", "styles", "globals.css");
18544
+ const globalsPath = path6.join(projectRoot, "src", "styles", "globals.css");
19806
18545
  if (fs6.existsSync(globalsPath))
19807
18546
  return globalsPath;
19808
- const globalPath = path7.join(projectRoot, "src", "styles", "global.css");
18547
+ const globalPath = path6.join(projectRoot, "src", "styles", "global.css");
19809
18548
  if (fs6.existsSync(globalPath))
19810
18549
  return globalPath;
19811
18550
  return null;
19812
18551
  }
19813
18552
 
18553
+ // core/plugins/bridge.ts
18554
+ var hookRegistry = new Map;
18555
+ function registerHook(hook, handler) {
18556
+ if (!hookRegistry.has(hook)) {
18557
+ hookRegistry.set(hook, []);
18558
+ }
18559
+ hookRegistry.get(hook).push(handler);
18560
+ }
18561
+ function clearHooks() {
18562
+ hookRegistry.clear();
18563
+ }
18564
+ async function runPluginHooks(hook, ctx) {
18565
+ const handlers = hookRegistry.get(hook) || [];
18566
+ for (const handler of handlers) {
18567
+ try {
18568
+ await handler(ctx);
18569
+ } catch (error3) {
18570
+ console.error(`[Zenith] Hook "${hook}" error:`, error3);
18571
+ }
18572
+ }
18573
+ }
18574
+ async function collectHookReturns(hook, ctx) {
18575
+ const handlers = hookRegistry.get(hook) || [];
18576
+ const results = [];
18577
+ for (const handler of handlers) {
18578
+ try {
18579
+ const result = await handler(ctx);
18580
+ if (result && typeof result === "object" && "namespace" in result && "payload" in result && typeof result.namespace === "string") {
18581
+ results.push(result);
18582
+ }
18583
+ } catch (error3) {
18584
+ console.error(`[Zenith] Hook "${hook}" collection error:`, error3);
18585
+ }
18586
+ }
18587
+ return results;
18588
+ }
18589
+ function buildRuntimeEnvelope(payloads) {
18590
+ const envelope = {};
18591
+ for (const { namespace, payload } of payloads) {
18592
+ envelope[namespace] = payload;
18593
+ }
18594
+ return envelope;
18595
+ }
18596
+ function createBridgeAPI() {
18597
+ return {
18598
+ on: registerHook
18599
+ };
18600
+ }
18601
+
19814
18602
  // cli/commands/dev.ts
19815
18603
  var pageCache = new Map;
19816
18604
  async function bundlePageScript(script, projectRoot) {
19817
18605
  if (!script.includes("import ")) {
19818
18606
  return script;
19819
18607
  }
19820
- const tempDir = path8.join(projectRoot, ".zenith-cache");
18608
+ const tempDir = path7.join(projectRoot, ".zenith-cache");
19821
18609
  if (!fs7.existsSync(tempDir)) {
19822
18610
  fs7.mkdirSync(tempDir, { recursive: true });
19823
18611
  }
19824
- const tempFile = path8.join(tempDir, `bundle-${Date.now()}.js`);
18612
+ const tempFile = path7.join(tempDir, `bundle-${Date.now()}.js`);
19825
18613
  try {
19826
18614
  fs7.writeFileSync(tempFile, script, "utf-8");
19827
18615
  const result = await Bun.build({
@@ -19851,31 +18639,28 @@ async function dev(options = {}) {
19851
18639
  const port = options.port || parseInt(process.env.PORT || "3000", 10);
19852
18640
  const pagesDir = project.pagesDir;
19853
18641
  const rootDir = project.root;
19854
- const contentDir = path8.join(rootDir, "content");
19855
18642
  const config = await loadZenithConfig(rootDir);
19856
18643
  const registry = new PluginRegistry;
18644
+ const bridgeAPI = createBridgeAPI();
18645
+ clearHooks();
19857
18646
  console.log("[Zenith] Config plugins:", config.plugins?.length ?? 0);
19858
18647
  for (const plugin of config.plugins || []) {
19859
18648
  console.log("[Zenith] Registering plugin:", plugin.name);
19860
18649
  registry.register(plugin);
18650
+ if (plugin.registerCLI) {
18651
+ plugin.registerCLI(bridgeAPI);
18652
+ }
19861
18653
  }
19862
- let contentData = {};
19863
- const hasContentPlugin = registry.has("zenith-content");
19864
- console.log("[Zenith] Has zenith-content plugin:", hasContentPlugin);
19865
- if (hasContentPlugin) {
19866
- await registry.initAll(createPluginContext(rootDir, (data2) => {
19867
- console.log("[Zenith] Content plugin set data, collections:", Object.keys(data2));
19868
- contentData = data2;
19869
- }));
19870
- } else {
19871
- console.log("[Zenith] Using legacy content loading from:", contentDir);
19872
- contentData = loadContent(contentDir);
19873
- }
19874
- console.log("[Zenith] Content collections loaded:", Object.keys(contentData));
18654
+ await registry.initAll(createPluginContext(rootDir));
18655
+ const hookCtx = {
18656
+ projectRoot: rootDir,
18657
+ getPluginData: getPluginDataByNamespace
18658
+ };
18659
+ await runPluginHooks("cli:dev:start", hookCtx);
19875
18660
  const globalsCssPath = resolveGlobalsCss(rootDir);
19876
18661
  let compiledCss = "";
19877
18662
  if (globalsCssPath) {
19878
- console.log("[Zenith] Compiling CSS:", path8.relative(rootDir, globalsCssPath));
18663
+ console.log("[Zenith] Compiling CSS:", path7.relative(rootDir, globalsCssPath));
19879
18664
  const cssResult = await compileCssAsync({ input: globalsCssPath, output: ":memory:" });
19880
18665
  if (cssResult.success) {
19881
18666
  compiledCss = cssResult.css;
@@ -19911,8 +18696,8 @@ async function dev(options = {}) {
19911
18696
  ]);
19912
18697
  async function compilePageInMemory(pagePath) {
19913
18698
  try {
19914
- const layoutsDir = path8.join(pagesDir, "../layouts");
19915
- const componentsDir = path8.join(pagesDir, "../components");
18699
+ const layoutsDir = path7.join(pagesDir, "../layouts");
18700
+ const componentsDir = path7.join(pagesDir, "../components");
19916
18701
  const layouts = discoverLayouts(layoutsDir);
19917
18702
  const source = fs7.readFileSync(pagePath, "utf-8");
19918
18703
  let processedSource = source;
@@ -19938,9 +18723,30 @@ async function dev(options = {}) {
19938
18723
  return null;
19939
18724
  }
19940
18725
  }
19941
- const watcher = fs7.watch(path8.join(pagesDir, ".."), { recursive: true }, async (event, filename) => {
18726
+ async function generateDevHTML(page) {
18727
+ const payloads = await collectHookReturns("cli:runtime:collect", hookCtx);
18728
+ const envelope = buildRuntimeEnvelope(payloads);
18729
+ const envelopeJson = JSON.stringify(envelope).replace(/<\//g, "<\\/");
18730
+ const runtimeTag = `<script src="/runtime.js"></script>`;
18731
+ const pluginDataTag = `<script>window.__ZENITH_PLUGIN_DATA__ = ${envelopeJson};</script>`;
18732
+ const scriptTag = `<script type="module">
18733
+ ${page.script}
18734
+ </script>`;
18735
+ const allScripts = `${runtimeTag}
18736
+ ${pluginDataTag}
18737
+ ${scriptTag}`;
18738
+ return page.html.includes("</body>") ? page.html.replace("</body>", `${allScripts}
18739
+ </body>`) : `${page.html}
18740
+ ${allScripts}`;
18741
+ }
18742
+ const watcher = fs7.watch(path7.join(pagesDir, ".."), { recursive: true }, async (event, filename) => {
19942
18743
  if (!filename)
19943
18744
  return;
18745
+ await runPluginHooks("cli:dev:file-change", {
18746
+ ...hookCtx,
18747
+ filename,
18748
+ event
18749
+ });
19944
18750
  if (filename.endsWith(".zen")) {
19945
18751
  hmr("Page", filename);
19946
18752
  pageCache.clear();
@@ -19964,15 +18770,8 @@ async function dev(options = {}) {
19964
18770
  for (const client of clients) {
19965
18771
  client.send(JSON.stringify({ type: "style-update", url: "/assets/styles.css" }));
19966
18772
  }
19967
- } else if (filename.startsWith("content") || filename.includes("zenith-docs")) {
19968
- hmr("Content", filename);
19969
- if (registry.has("zenith-content")) {
19970
- registry.initAll(createPluginContext(rootDir, (data2) => {
19971
- contentData = data2;
19972
- }));
19973
- } else {
19974
- contentData = loadContent(contentDir);
19975
- }
18773
+ } else {
18774
+ await registry.initAll(createPluginContext(rootDir));
19976
18775
  for (const client of clients) {
19977
18776
  client.send(JSON.stringify({ type: "reload" }));
19978
18777
  }
@@ -19984,7 +18783,7 @@ async function dev(options = {}) {
19984
18783
  const startTime = performance.now();
19985
18784
  const url = new URL(req.url);
19986
18785
  const pathname = url.pathname;
19987
- const ext = path8.extname(pathname).toLowerCase();
18786
+ const ext = path7.extname(pathname).toLowerCase();
19988
18787
  if (pathname === "/hmr") {
19989
18788
  const upgraded = server2.upgrade(req);
19990
18789
  if (upgraded)
@@ -20012,7 +18811,7 @@ async function dev(options = {}) {
20012
18811
  return response;
20013
18812
  }
20014
18813
  if (STATIC_EXTENSIONS.has(ext)) {
20015
- const publicPath = path8.join(pagesDir, "../public", pathname);
18814
+ const publicPath = path7.join(pagesDir, "../public", pathname);
20016
18815
  if (fs7.existsSync(publicPath)) {
20017
18816
  const response = new Response(Bun.file(publicPath));
20018
18817
  route("GET", pathname, 200, Math.round(performance.now() - startTime), 0, Math.round(performance.now() - startTime));
@@ -20032,7 +18831,7 @@ async function dev(options = {}) {
20032
18831
  const compileEnd = performance.now();
20033
18832
  if (cached) {
20034
18833
  const renderStart = performance.now();
20035
- const html = generateDevHTML(cached, contentData);
18834
+ const html = await generateDevHTML(cached);
20036
18835
  const renderEnd = performance.now();
20037
18836
  const totalTime = Math.round(performance.now() - startTime);
20038
18837
  const compileTime = Math.round(compileEnd - compileStart);
@@ -20062,45 +18861,31 @@ async function dev(options = {}) {
20062
18861
  await new Promise(() => {});
20063
18862
  }
20064
18863
  function findPageForRoute(route2, pagesDir) {
20065
- const exactPath = path8.join(pagesDir, route2 === "/" ? "index.zen" : `${route2.slice(1)}.zen`);
18864
+ const exactPath = path7.join(pagesDir, route2 === "/" ? "index.zen" : `${route2.slice(1)}.zen`);
20066
18865
  if (fs7.existsSync(exactPath))
20067
18866
  return exactPath;
20068
- const indexPath = path8.join(pagesDir, route2 === "/" ? "index.zen" : `${route2.slice(1)}/index.zen`);
18867
+ const indexPath = path7.join(pagesDir, route2 === "/" ? "index.zen" : `${route2.slice(1)}/index.zen`);
20069
18868
  if (fs7.existsSync(indexPath))
20070
18869
  return indexPath;
20071
18870
  const segments = route2 === "/" ? [] : route2.slice(1).split("/").filter(Boolean);
20072
18871
  for (let i2 = segments.length - 1;i2 >= 0; i2--) {
20073
18872
  const staticPart = segments.slice(0, i2).join("/");
20074
- const baseDir = staticPart ? path8.join(pagesDir, staticPart) : pagesDir;
20075
- const singleDynamicPath = path8.join(baseDir, "[slug].zen");
18873
+ const baseDir = staticPart ? path7.join(pagesDir, staticPart) : pagesDir;
18874
+ const singleDynamicPath = path7.join(baseDir, "[slug].zen");
20076
18875
  if (fs7.existsSync(singleDynamicPath))
20077
18876
  return singleDynamicPath;
20078
- const catchAllPath = path8.join(baseDir, "[...slug].zen");
18877
+ const catchAllPath = path7.join(baseDir, "[...slug].zen");
20079
18878
  if (fs7.existsSync(catchAllPath))
20080
18879
  return catchAllPath;
20081
18880
  }
20082
- const rootCatchAll = path8.join(pagesDir, "[...slug].zen");
18881
+ const rootCatchAll = path7.join(pagesDir, "[...slug].zen");
20083
18882
  if (fs7.existsSync(rootCatchAll))
20084
18883
  return rootCatchAll;
20085
18884
  return null;
20086
18885
  }
20087
- function generateDevHTML(page, contentData = {}) {
20088
- const runtimeTag = `<script src="/runtime.js"></script>`;
20089
- const contentJson = JSON.stringify(contentData).replace(/<\//g, "<\\/");
20090
- const contentTag = `<script>window.__ZENITH_CONTENT__ = ${contentJson};</script>`;
20091
- const scriptTag = `<script type="module">
20092
- ${page.script}
20093
- </script>`;
20094
- const allScripts = `${runtimeTag}
20095
- ${contentTag}
20096
- ${scriptTag}`;
20097
- return page.html.includes("</body>") ? page.html.replace("</body>", `${allScripts}
20098
- </body>`) : `${page.html}
20099
- ${allScripts}`;
20100
- }
20101
18886
 
20102
18887
  // cli/commands/preview.ts
20103
- import path9 from "path";
18888
+ import path8 from "path";
20104
18889
  var {serve: serve2 } = globalThis.Bun;
20105
18890
  async function preview(options = {}) {
20106
18891
  const project = requireProject();
@@ -20130,16 +18915,16 @@ async function preview(options = {}) {
20130
18915
  async fetch(req) {
20131
18916
  const url = new URL(req.url);
20132
18917
  const pathname = url.pathname;
20133
- const ext = path9.extname(pathname).toLowerCase();
18918
+ const ext = path8.extname(pathname).toLowerCase();
20134
18919
  if (STATIC_EXTENSIONS.has(ext)) {
20135
- const filePath = path9.join(distDir, pathname);
18920
+ const filePath = path8.join(distDir, pathname);
20136
18921
  const file = Bun.file(filePath);
20137
18922
  if (await file.exists()) {
20138
18923
  return new Response(file);
20139
18924
  }
20140
18925
  return new Response("Not found", { status: 404 });
20141
18926
  }
20142
- const indexPath = path9.join(distDir, "index.html");
18927
+ const indexPath = path8.join(distDir, "index.html");
20143
18928
  const indexFile = Bun.file(indexPath);
20144
18929
  if (await indexFile.exists()) {
20145
18930
  return new Response(indexFile, {
@@ -20155,131 +18940,8 @@ async function preview(options = {}) {
20155
18940
  }
20156
18941
 
20157
18942
  // compiler/ssg-build.ts
20158
- import fs9 from "fs";
20159
- import path11 from "path";
20160
-
20161
- // ../node_modules/.bun/@zenithbuild+router@0.1.1+1fb4c65d43e298b9/node_modules/@zenithbuild/router/src/manifest.ts
20162
18943
  import fs8 from "fs";
20163
- import path10 from "path";
20164
- var SEGMENT_SCORES2 = {
20165
- ["static" /* STATIC */]: 10,
20166
- ["dynamic" /* DYNAMIC */]: 5,
20167
- ["catch_all" /* CATCH_ALL */]: 1,
20168
- ["optional_catch_all" /* OPTIONAL_CATCH_ALL */]: 0
20169
- };
20170
- function discoverPages(pagesDir) {
20171
- const pages = [];
20172
- function walk(dir) {
20173
- if (!fs8.existsSync(dir))
20174
- return;
20175
- const entries = fs8.readdirSync(dir, { withFileTypes: true });
20176
- for (const entry of entries) {
20177
- const fullPath = path10.join(dir, entry.name);
20178
- if (entry.isDirectory()) {
20179
- walk(fullPath);
20180
- } else if (entry.isFile() && entry.name.endsWith(".zen")) {
20181
- pages.push(fullPath);
20182
- }
20183
- }
20184
- }
20185
- walk(pagesDir);
20186
- return pages;
20187
- }
20188
- function filePathToRoutePath2(filePath, pagesDir) {
20189
- const relativePath = path10.relative(pagesDir, filePath);
20190
- const withoutExt = relativePath.replace(/\.zen$/, "");
20191
- const segments = withoutExt.split(path10.sep);
20192
- const routeSegments = [];
20193
- for (const segment of segments) {
20194
- if (segment === "index") {
20195
- continue;
20196
- }
20197
- const optionalCatchAllMatch = segment.match(/^\[\[\.\.\.(\w+)\]\]$/);
20198
- if (optionalCatchAllMatch) {
20199
- routeSegments.push(`*${optionalCatchAllMatch[1]}?`);
20200
- continue;
20201
- }
20202
- const catchAllMatch = segment.match(/^\[\.\.\.(\w+)\]$/);
20203
- if (catchAllMatch) {
20204
- routeSegments.push(`*${catchAllMatch[1]}`);
20205
- continue;
20206
- }
20207
- const dynamicMatch = segment.match(/^\[(\w+)\]$/);
20208
- if (dynamicMatch) {
20209
- routeSegments.push(`:${dynamicMatch[1]}`);
20210
- continue;
20211
- }
20212
- routeSegments.push(segment);
20213
- }
20214
- const routePath = "/" + routeSegments.join("/");
20215
- return routePath === "/" ? "/" : routePath.replace(/\/$/, "");
20216
- }
20217
- function parseRouteSegments2(routePath) {
20218
- if (routePath === "/") {
20219
- return [];
20220
- }
20221
- const segments = routePath.slice(1).split("/");
20222
- const parsed = [];
20223
- for (const segment of segments) {
20224
- if (segment.startsWith("*") && segment.endsWith("?")) {
20225
- parsed.push({
20226
- type: "optional_catch_all" /* OPTIONAL_CATCH_ALL */,
20227
- paramName: segment.slice(1, -1),
20228
- raw: segment
20229
- });
20230
- continue;
20231
- }
20232
- if (segment.startsWith("*")) {
20233
- parsed.push({
20234
- type: "catch_all" /* CATCH_ALL */,
20235
- paramName: segment.slice(1),
20236
- raw: segment
20237
- });
20238
- continue;
20239
- }
20240
- if (segment.startsWith(":")) {
20241
- parsed.push({
20242
- type: "dynamic" /* DYNAMIC */,
20243
- paramName: segment.slice(1),
20244
- raw: segment
20245
- });
20246
- continue;
20247
- }
20248
- parsed.push({
20249
- type: "static" /* STATIC */,
20250
- raw: segment
20251
- });
20252
- }
20253
- return parsed;
20254
- }
20255
- function calculateRouteScore2(segments) {
20256
- if (segments.length === 0) {
20257
- return 100;
20258
- }
20259
- let score = 0;
20260
- for (const segment of segments) {
20261
- score += SEGMENT_SCORES2[segment.type];
20262
- }
20263
- const staticCount = segments.filter((s) => s.type === "static" /* STATIC */).length;
20264
- score += staticCount * 2;
20265
- return score;
20266
- }
20267
- function extractParamNames2(segments) {
20268
- return segments.filter((s) => s.paramName !== undefined).map((s) => s.paramName);
20269
- }
20270
- function generateRouteDefinition2(filePath, pagesDir) {
20271
- const routePath = filePathToRoutePath2(filePath, pagesDir);
20272
- const segments = parseRouteSegments2(routePath);
20273
- const paramNames = extractParamNames2(segments);
20274
- const score = calculateRouteScore2(segments);
20275
- return {
20276
- path: routePath,
20277
- segments,
20278
- paramNames,
20279
- score,
20280
- filePath
20281
- };
20282
- }
18944
+ import path9 from "path";
20283
18945
 
20284
18946
  // compiler/build-analyzer.ts
20285
18947
  function analyzePageSource(source) {
@@ -20341,9 +19003,9 @@ function getBuildOutputType(analysis) {
20341
19003
 
20342
19004
  // compiler/ssg-build.ts
20343
19005
  async function compilePage(pagePath, pagesDir, baseDir = process.cwd()) {
20344
- const source = fs9.readFileSync(pagePath, "utf-8");
19006
+ const source = fs8.readFileSync(pagePath, "utf-8");
20345
19007
  const analysis = analyzePageSource(source);
20346
- const layoutsDir = path11.join(baseDir, "layouts");
19008
+ const layoutsDir = path9.join(baseDir, "layouts");
20347
19009
  const layouts = discoverLayouts(layoutsDir);
20348
19010
  let processedSource = source;
20349
19011
  const layoutToUse = layouts.get("DefaultLayout");
@@ -20357,7 +19019,7 @@ async function compilePage(pagePath, pagesDir, baseDir = process.cwd()) {
20357
19019
  const html = result.finalized.html;
20358
19020
  const js = result.finalized.js || "";
20359
19021
  const styles = result.finalized.styles || [];
20360
- const routeDef = generateRouteDefinition2(pagePath, pagesDir);
19022
+ const routeDef = generateRouteDefinition(pagePath, pagesDir);
20361
19023
  let outputDir = routeDef.path === "/" ? "index" : routeDef.path.replace(/^\//, "");
20362
19024
  outputDir = outputDir.replace(/\[([^\]]+)\]/g, "_$1_");
20363
19025
  return {
@@ -20372,7 +19034,7 @@ async function compilePage(pagePath, pagesDir, baseDir = process.cwd()) {
20372
19034
  outputDir
20373
19035
  };
20374
19036
  }
20375
- function generatePageHTML(page, globalStyles, contentData) {
19037
+ function generatePageHTML(page, globalStyles, pluginEnvelope) {
20376
19038
  const { html, styles, analysis, routePath, pageScript } = page;
20377
19039
  const pageStyles = styles.join(`
20378
19040
  `);
@@ -20380,8 +19042,9 @@ function generatePageHTML(page, globalStyles, contentData) {
20380
19042
  ` + pageStyles;
20381
19043
  let scriptTags = "";
20382
19044
  if (analysis.needsHydration) {
19045
+ const envelopeJson = JSON.stringify(pluginEnvelope).replace(/<\//g, "<\\/");
20383
19046
  scriptTags = `
20384
- <script>window.__ZENITH_CONTENT__ = ${JSON.stringify(contentData)};</script>
19047
+ <script>window.__ZENITH_PLUGIN_DATA__ = ${envelopeJson};</script>
20385
19048
  <script src="/assets/bundle.js"></script>`;
20386
19049
  if (pageScript) {
20387
19050
  const pageJsName = routePath === "/" ? "page_index.js" : `page_${routePath.replace(/^\//, "").replace(/\//g, "_")}.js`;
@@ -20444,18 +19107,35 @@ ${page.pageScript}
20444
19107
  `;
20445
19108
  }
20446
19109
  async function buildSSG(options) {
20447
- const { pagesDir, outDir, baseDir = path11.dirname(pagesDir) } = options;
20448
- const contentDir = path11.join(baseDir, "content");
20449
- const contentData = loadContent(contentDir);
19110
+ const { pagesDir, outDir, baseDir = path9.dirname(pagesDir) } = options;
20450
19111
  console.log("\uD83D\uDD28 Zenith SSG Build");
20451
19112
  console.log(` Pages: ${pagesDir}`);
20452
19113
  console.log(` Output: ${outDir}`);
20453
19114
  console.log("");
20454
- if (fs9.existsSync(outDir)) {
20455
- fs9.rmSync(outDir, { recursive: true, force: true });
19115
+ const config = await loadZenithConfig(baseDir);
19116
+ const registry = new PluginRegistry;
19117
+ const bridgeAPI = createBridgeAPI();
19118
+ clearHooks();
19119
+ for (const plugin of config.plugins || []) {
19120
+ console.log(` Plugin: ${plugin.name}`);
19121
+ registry.register(plugin);
19122
+ if (plugin.registerCLI) {
19123
+ plugin.registerCLI(bridgeAPI);
19124
+ }
19125
+ }
19126
+ await registry.initAll(createPluginContext(baseDir));
19127
+ const hookCtx = {
19128
+ projectRoot: baseDir,
19129
+ getPluginData: getPluginDataByNamespace
19130
+ };
19131
+ const payloads = await collectHookReturns("cli:runtime:collect", hookCtx);
19132
+ const pluginEnvelope = buildRuntimeEnvelope(payloads);
19133
+ console.log("");
19134
+ if (fs8.existsSync(outDir)) {
19135
+ fs8.rmSync(outDir, { recursive: true, force: true });
20456
19136
  }
20457
- fs9.mkdirSync(outDir, { recursive: true });
20458
- fs9.mkdirSync(path11.join(outDir, "assets"), { recursive: true });
19137
+ fs8.mkdirSync(outDir, { recursive: true });
19138
+ fs8.mkdirSync(path9.join(outDir, "assets"), { recursive: true });
20459
19139
  const pageFiles = discoverPages(pagesDir);
20460
19140
  if (pageFiles.length === 0) {
20461
19141
  console.warn("\u26A0\uFE0F No pages found in", pagesDir);
@@ -20465,7 +19145,7 @@ async function buildSSG(options) {
20465
19145
  const compiledPages = [];
20466
19146
  let hasHydratedPages = false;
20467
19147
  for (const pageFile of pageFiles) {
20468
- const relativePath = path11.relative(pagesDir, pageFile);
19148
+ const relativePath = path9.relative(pagesDir, pageFile);
20469
19149
  console.log(` Compiling: ${relativePath}`);
20470
19150
  try {
20471
19151
  const compiled = await compilePage(pageFile, pagesDir, baseDir);
@@ -20485,8 +19165,8 @@ async function buildSSG(options) {
20485
19165
  let globalStyles = "";
20486
19166
  const globalsCssPath = resolveGlobalsCss(baseDir);
20487
19167
  if (globalsCssPath) {
20488
- console.log("\uD83D\uDCE6 Compiling CSS:", path11.relative(baseDir, globalsCssPath));
20489
- const cssOutputPath = path11.join(outDir, "assets", "styles.css");
19168
+ console.log("\uD83D\uDCE6 Compiling CSS:", path9.relative(baseDir, globalsCssPath));
19169
+ const cssOutputPath = path9.join(outDir, "assets", "styles.css");
20490
19170
  const result = compileCss({
20491
19171
  input: globalsCssPath,
20492
19172
  output: cssOutputPath,
@@ -20501,40 +19181,40 @@ async function buildSSG(options) {
20501
19181
  }
20502
19182
  if (hasHydratedPages) {
20503
19183
  const bundleJS = generateBundleJS();
20504
- fs9.writeFileSync(path11.join(outDir, "assets", "bundle.js"), bundleJS);
19184
+ fs8.writeFileSync(path9.join(outDir, "assets", "bundle.js"), bundleJS);
20505
19185
  console.log("\uD83D\uDCE6 Generated assets/bundle.js");
20506
19186
  }
20507
19187
  for (const page of compiledPages) {
20508
- const pageOutDir = path11.join(outDir, page.outputDir);
20509
- fs9.mkdirSync(pageOutDir, { recursive: true });
20510
- const html = generatePageHTML(page, globalStyles, contentData);
20511
- fs9.writeFileSync(path11.join(pageOutDir, "index.html"), html);
19188
+ const pageOutDir = path9.join(outDir, page.outputDir);
19189
+ fs8.mkdirSync(pageOutDir, { recursive: true });
19190
+ const html = generatePageHTML(page, globalStyles, pluginEnvelope);
19191
+ fs8.writeFileSync(path9.join(pageOutDir, "index.html"), html);
20512
19192
  if (page.pageScript) {
20513
19193
  const pageJsName = page.routePath === "/" ? "page_index.js" : `page_${page.routePath.replace(/^\//, "").replace(/\//g, "_")}.js`;
20514
19194
  const pageJS = generatePageJS(page);
20515
- fs9.writeFileSync(path11.join(outDir, "assets", pageJsName), pageJS);
19195
+ fs8.writeFileSync(path9.join(outDir, "assets", pageJsName), pageJS);
20516
19196
  }
20517
19197
  console.log(`\u2705 ${page.outputDir}/index.html`);
20518
19198
  }
20519
- const faviconPath = path11.join(baseDir, "favicon.ico");
20520
- if (fs9.existsSync(faviconPath)) {
20521
- fs9.copyFileSync(faviconPath, path11.join(outDir, "favicon.ico"));
19199
+ const faviconPath = path9.join(baseDir, "favicon.ico");
19200
+ if (fs8.existsSync(faviconPath)) {
19201
+ fs8.copyFileSync(faviconPath, path9.join(outDir, "favicon.ico"));
20522
19202
  console.log("\uD83D\uDCE6 Copied favicon.ico");
20523
19203
  }
20524
19204
  const custom404Candidates = ["404.zen", "+404.zen", "not-found.zen"];
20525
19205
  let has404 = false;
20526
19206
  for (const candidate of custom404Candidates) {
20527
- const custom404Path = path11.join(pagesDir, candidate);
20528
- if (fs9.existsSync(custom404Path)) {
19207
+ const custom404Path = path9.join(pagesDir, candidate);
19208
+ if (fs8.existsSync(custom404Path)) {
20529
19209
  try {
20530
19210
  const compiled = await compilePage(custom404Path, pagesDir, baseDir);
20531
- const html = generatePageHTML(compiled, globalStyles, contentData);
20532
- fs9.writeFileSync(path11.join(outDir, "404.html"), html);
19211
+ const html = generatePageHTML(compiled, globalStyles, pluginEnvelope);
19212
+ fs8.writeFileSync(path9.join(outDir, "404.html"), html);
20533
19213
  console.log("\uD83D\uDCE6 Generated 404.html (custom)");
20534
19214
  has404 = true;
20535
19215
  if (compiled.pageScript) {
20536
19216
  const pageJS = generatePageJS(compiled);
20537
- fs9.writeFileSync(path11.join(outDir, "assets", "page_404.js"), pageJS);
19217
+ fs8.writeFileSync(path9.join(outDir, "assets", "page_404.js"), pageJS);
20538
19218
  }
20539
19219
  } catch (error3) {
20540
19220
  console.warn(` \u26A0\uFE0F Could not compile ${candidate}: ${error3.message}`);
@@ -20568,7 +19248,7 @@ async function buildSSG(options) {
20568
19248
  </div>
20569
19249
  </body>
20570
19250
  </html>`;
20571
- fs9.writeFileSync(path11.join(outDir, "404.html"), default404HTML);
19251
+ fs8.writeFileSync(path9.join(outDir, "404.html"), default404HTML);
20572
19252
  console.log("\uD83D\uDCE6 Generated 404.html (default)");
20573
19253
  }
20574
19254
  console.log("");
@@ -20578,7 +19258,7 @@ async function buildSSG(options) {
20578
19258
  console.log(` SSR pages: ${compiledPages.filter((p) => p.analysis.needsSSR).length}`);
20579
19259
  console.log("");
20580
19260
  console.log("\uD83D\uDCCD Routes:");
20581
- for (const page of compiledPages.sort((a, b2) => b2.score - a.score)) {
19261
+ for (const page of compiledPages.sort((a, b) => b.score - a.score)) {
20582
19262
  const type = getBuildOutputType(page.analysis);
20583
19263
  console.log(` ${page.routePath.padEnd(20)} \u2192 ${page.outputDir}/index.html (${type})`);
20584
19264
  }
@@ -20606,30 +19286,30 @@ async function build(options = {}) {
20606
19286
  }
20607
19287
 
20608
19288
  // cli/utils/plugin-manager.ts
20609
- import fs10 from "fs";
20610
- import path12 from "path";
19289
+ import fs9 from "fs";
19290
+ import path10 from "path";
20611
19291
  var PLUGINS_FILE = "zenith.plugins.json";
20612
19292
  function getPluginsPath() {
20613
19293
  const root = findProjectRoot();
20614
19294
  if (!root) {
20615
19295
  throw new Error("Not in a Zenith project");
20616
19296
  }
20617
- return path12.join(root, PLUGINS_FILE);
19297
+ return path10.join(root, PLUGINS_FILE);
20618
19298
  }
20619
19299
  function readPlugins() {
20620
19300
  const pluginsPath = getPluginsPath();
20621
- if (!fs10.existsSync(pluginsPath)) {
19301
+ if (!fs9.existsSync(pluginsPath)) {
20622
19302
  return { plugins: [] };
20623
19303
  }
20624
19304
  try {
20625
- return JSON.parse(fs10.readFileSync(pluginsPath, "utf-8"));
19305
+ return JSON.parse(fs9.readFileSync(pluginsPath, "utf-8"));
20626
19306
  } catch {
20627
19307
  return { plugins: [] };
20628
19308
  }
20629
19309
  }
20630
19310
  function writePlugins(data2) {
20631
19311
  const pluginsPath = getPluginsPath();
20632
- fs10.writeFileSync(pluginsPath, JSON.stringify(data2, null, 2));
19312
+ fs9.writeFileSync(pluginsPath, JSON.stringify(data2, null, 2));
20633
19313
  }
20634
19314
  function addPlugin(name, options) {
20635
19315
  const data2 = readPlugins();
@@ -20703,8 +19383,8 @@ async function remove(pluginName) {
20703
19383
  }
20704
19384
 
20705
19385
  // cli/commands/create.ts
20706
- import fs11 from "fs";
20707
- import path13 from "path";
19386
+ import fs10 from "fs";
19387
+ import path11 from "path";
20708
19388
  import { execSync } from "child_process";
20709
19389
  import readline from "readline";
20710
19390
  async function prompt(question, defaultValue) {
@@ -20743,7 +19423,7 @@ async function create(appName) {
20743
19423
  configSpinner.succeed("Configurations generated");
20744
19424
  const installSpinner = new Spinner("Installing dependencies...");
20745
19425
  installSpinner.start();
20746
- const targetDir = path13.resolve(process.cwd(), options.name);
19426
+ const targetDir = path11.resolve(process.cwd(), options.name);
20747
19427
  process.chdir(targetDir);
20748
19428
  try {
20749
19429
  execSync("bun install", { stdio: "pipe" });
@@ -20774,8 +19454,8 @@ async function gatherOptions(providedName) {
20774
19454
  process.exit(1);
20775
19455
  }
20776
19456
  }
20777
- const targetDir = path13.resolve(process.cwd(), name);
20778
- if (fs11.existsSync(targetDir)) {
19457
+ const targetDir = path11.resolve(process.cwd(), name);
19458
+ if (fs10.existsSync(targetDir)) {
20779
19459
  error2(`Directory "${name}" already exists`);
20780
19460
  process.exit(1);
20781
19461
  }
@@ -20796,14 +19476,14 @@ async function gatherOptions(providedName) {
20796
19476
  };
20797
19477
  }
20798
19478
  async function createProject(options) {
20799
- const targetDir = path13.resolve(process.cwd(), options.name);
19479
+ const targetDir = path11.resolve(process.cwd(), options.name);
20800
19480
  const baseDir = options.directory;
20801
- const appDir = path13.join(targetDir, baseDir);
20802
- fs11.mkdirSync(targetDir, { recursive: true });
20803
- fs11.mkdirSync(path13.join(appDir, "pages"), { recursive: true });
20804
- fs11.mkdirSync(path13.join(appDir, "layouts"), { recursive: true });
20805
- fs11.mkdirSync(path13.join(appDir, "components"), { recursive: true });
20806
- fs11.mkdirSync(path13.join(appDir, "styles"), { recursive: true });
19481
+ const appDir = path11.join(targetDir, baseDir);
19482
+ fs10.mkdirSync(targetDir, { recursive: true });
19483
+ fs10.mkdirSync(path11.join(appDir, "pages"), { recursive: true });
19484
+ fs10.mkdirSync(path11.join(appDir, "layouts"), { recursive: true });
19485
+ fs10.mkdirSync(path11.join(appDir, "components"), { recursive: true });
19486
+ fs10.mkdirSync(path11.join(appDir, "styles"), { recursive: true });
20807
19487
  const pkg = {
20808
19488
  name: options.name,
20809
19489
  version: "0.1.0",
@@ -20833,14 +19513,14 @@ async function createProject(options) {
20833
19513
  devDeps["prettier"] = "^3.0.0";
20834
19514
  pkg.scripts = { ...pkg.scripts, format: "prettier --write ." };
20835
19515
  }
20836
- fs11.writeFileSync(path13.join(targetDir, "package.json"), JSON.stringify(pkg, null, 4));
20837
- fs11.writeFileSync(path13.join(targetDir, baseDir, "pages", "index.zen"), generateIndexPage());
20838
- fs11.writeFileSync(path13.join(targetDir, baseDir, "layouts", "DefaultLayout.zen"), generateDefaultLayout());
20839
- fs11.writeFileSync(path13.join(appDir, "styles", "global.css"), generateGlobalCSS());
20840
- fs11.writeFileSync(path13.join(targetDir, ".gitignore"), generateGitignore());
19516
+ fs10.writeFileSync(path11.join(targetDir, "package.json"), JSON.stringify(pkg, null, 4));
19517
+ fs10.writeFileSync(path11.join(targetDir, baseDir, "pages", "index.zen"), generateIndexPage());
19518
+ fs10.writeFileSync(path11.join(targetDir, baseDir, "layouts", "DefaultLayout.zen"), generateDefaultLayout());
19519
+ fs10.writeFileSync(path11.join(appDir, "styles", "global.css"), generateGlobalCSS());
19520
+ fs10.writeFileSync(path11.join(targetDir, ".gitignore"), generateGitignore());
20841
19521
  }
20842
19522
  async function generateConfigs(options) {
20843
- const targetDir = path13.resolve(process.cwd(), options.name);
19523
+ const targetDir = path11.resolve(process.cwd(), options.name);
20844
19524
  const tsconfig = {
20845
19525
  compilerOptions: {
20846
19526
  target: "ESNext",
@@ -20864,7 +19544,7 @@ async function generateConfigs(options) {
20864
19544
  "@/*": [`./${options.directory}/*`]
20865
19545
  };
20866
19546
  }
20867
- fs11.writeFileSync(path13.join(targetDir, "tsconfig.json"), JSON.stringify(tsconfig, null, 4));
19547
+ fs10.writeFileSync(path11.join(targetDir, "tsconfig.json"), JSON.stringify(tsconfig, null, 4));
20868
19548
  if (options.eslint) {
20869
19549
  const eslintConfig = {
20870
19550
  root: true,
@@ -20885,7 +19565,7 @@ async function generateConfigs(options) {
20885
19565
  },
20886
19566
  ignorePatterns: ["dist", "node_modules"]
20887
19567
  };
20888
- fs11.writeFileSync(path13.join(targetDir, ".eslintrc.json"), JSON.stringify(eslintConfig, null, 4));
19568
+ fs10.writeFileSync(path11.join(targetDir, ".eslintrc.json"), JSON.stringify(eslintConfig, null, 4));
20889
19569
  }
20890
19570
  if (options.prettier) {
20891
19571
  const prettierConfig = {
@@ -20895,8 +19575,8 @@ async function generateConfigs(options) {
20895
19575
  trailingComma: "es5",
20896
19576
  printWidth: 100
20897
19577
  };
20898
- fs11.writeFileSync(path13.join(targetDir, ".prettierrc"), JSON.stringify(prettierConfig, null, 4));
20899
- fs11.writeFileSync(path13.join(targetDir, ".prettierignore"), `dist
19578
+ fs10.writeFileSync(path11.join(targetDir, ".prettierrc"), JSON.stringify(prettierConfig, null, 4));
19579
+ fs10.writeFileSync(path11.join(targetDir, ".prettierignore"), `dist
20900
19580
  node_modules
20901
19581
  bun.lock
20902
19582
  `);