@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/cli/commands/dev.ts +107 -48
- package/compiler/discovery/componentDiscovery.ts +75 -11
- package/compiler/output/types.ts +15 -1
- package/compiler/parse/parseTemplate.ts +29 -0
- package/compiler/runtime/dataExposure.ts +27 -12
- package/compiler/runtime/generateDOM.ts +12 -3
- package/compiler/runtime/transformIR.ts +36 -0
- package/compiler/runtime/wrapExpression.ts +32 -13
- package/compiler/runtime/wrapExpressionWithLoop.ts +24 -10
- package/compiler/ssg-build.ts +71 -7
- package/compiler/test/component-stacking.test.ts +365 -0
- package/compiler/transform/componentResolver.ts +42 -4
- package/compiler/transform/fragmentLowering.ts +153 -1
- package/compiler/transform/generateBindings.ts +31 -10
- package/compiler/transform/transformNode.ts +114 -1
- package/core/config/index.ts +5 -3
- package/core/config/types.ts +67 -37
- package/core/plugins/bridge.ts +193 -0
- package/core/plugins/registry.ts +51 -6
- package/dist/cli.js +8 -0
- package/dist/zen-build.js +482 -1802
- package/dist/zen-dev.js +482 -1802
- package/dist/zen-preview.js +482 -1802
- package/dist/zenith.js +482 -1802
- package/package.json +10 -2
- package/runtime/bundle-generator.ts +10 -1
- package/runtime/client-runtime.ts +21 -1
- package/cli/utils/content.ts +0 -112
- package/router/manifest.ts +0 -314
- package/router/navigation/ZenLink.zen +0 -231
- package/router/navigation/index.ts +0 -78
- package/router/navigation/zen-link.ts +0 -584
- package/router/runtime.ts +0 -458
- package/router/types.ts +0 -168
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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(
|
|
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 =
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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(
|
|
4216
|
-
const doctypeNode =
|
|
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(
|
|
4229
|
+
defaultTreeAdapter.appendChild(document2, node);
|
|
4230
4230
|
}
|
|
4231
4231
|
},
|
|
4232
|
-
setDocumentMode(
|
|
4233
|
-
|
|
4232
|
+
setDocumentMode(document2, mode) {
|
|
4233
|
+
document2.mode = mode;
|
|
4234
4234
|
},
|
|
4235
|
-
getDocumentMode(
|
|
4236
|
-
return
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
4660
|
+
// node_modules/parse5/dist/parser/index.js
|
|
4661
4661
|
class Parser {
|
|
4662
|
-
constructor(options,
|
|
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 =
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
|
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 ? `
|
|
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} = (
|
|
10027
|
-
|
|
10028
|
-
|
|
10029
|
-
|
|
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
|
-
}
|
|
10032
|
-
|
|
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} = (
|
|
10083
|
-
|
|
10084
|
-
|
|
10085
|
-
with (__ctx) {
|
|
10086
|
-
|
|
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
|
-
}
|
|
10089
|
-
|
|
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} = (
|
|
10110
|
-
|
|
10111
|
-
|
|
10112
|
-
|
|
10113
|
-
|
|
10114
|
-
|
|
10115
|
-
|
|
10116
|
-
|
|
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
|
-
}
|
|
10119
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
18236
|
-
import
|
|
18323
|
+
// core/config/loader.ts
|
|
18324
|
+
import fs5 from "fs";
|
|
18237
18325
|
import path5 from "path";
|
|
18238
|
-
|
|
18239
|
-
|
|
18240
|
-
|
|
18241
|
-
|
|
18242
|
-
|
|
18243
|
-
|
|
18244
|
-
|
|
18245
|
-
|
|
18246
|
-
|
|
18247
|
-
|
|
18248
|
-
|
|
18249
|
-
|
|
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
|
-
|
|
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 = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" };
|
|
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
|
-
|
|
18339
|
-
|
|
18340
|
-
|
|
18341
|
-
|
|
18342
|
-
|
|
18343
|
-
|
|
18344
|
-
|
|
18345
|
-
return
|
|
18346
|
-
}
|
|
18347
|
-
|
|
18348
|
-
|
|
18349
|
-
|
|
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
|
-
|
|
18374
|
-
|
|
18375
|
-
|
|
18376
|
-
|
|
18377
|
-
|
|
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
|
-
|
|
18408
|
-
|
|
18409
|
-
|
|
18410
|
-
|
|
18411
|
-
|
|
18412
|
-
|
|
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
|
-
|
|
18498
|
-
|
|
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
|
-
|
|
18571
|
-
|
|
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
|
-
|
|
18576
|
-
|
|
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
|
-
|
|
18583
|
-
|
|
18584
|
-
|
|
18585
|
-
|
|
18586
|
-
|
|
18587
|
-
|
|
18588
|
-
|
|
18589
|
-
|
|
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
|
-
|
|
18655
|
-
|
|
18656
|
-
|
|
18657
|
-
|
|
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
|
-
|
|
18666
|
-
|
|
18667
|
-
|
|
18668
|
-
|
|
18669
|
-
|
|
18670
|
-
|
|
18671
|
-
|
|
18672
|
-
|
|
18673
|
-
|
|
18674
|
-
|
|
18675
|
-
|
|
18676
|
-
|
|
18677
|
-
|
|
18678
|
-
|
|
18679
|
-
|
|
18680
|
-
|
|
18681
|
-
|
|
18682
|
-
|
|
18683
|
-
|
|
18684
|
-
|
|
18685
|
-
|
|
18686
|
-
|
|
18687
|
-
|
|
18688
|
-
|
|
18689
|
-
|
|
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
|
-
|
|
18695
|
-
|
|
18696
|
-
|
|
18697
|
-
|
|
18698
|
-
|
|
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
|
-
|
|
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
|
-
|
|
18719
|
-
|
|
18720
|
-
|
|
18721
|
-
|
|
18722
|
-
|
|
18723
|
-
|
|
18724
|
-
|
|
18725
|
-
|
|
18726
|
-
|
|
18727
|
-
|
|
18728
|
-
|
|
18729
|
-
|
|
18730
|
-
|
|
18731
|
-
|
|
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
|
-
|
|
18735
|
-
|
|
18736
|
-
if (
|
|
18737
|
-
|
|
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
|
-
|
|
18743
|
-
|
|
18744
|
-
|
|
18745
|
-
|
|
18746
|
-
|
|
18747
|
-
|
|
18748
|
-
|
|
18749
|
-
|
|
18750
|
-
|
|
18751
|
-
|
|
18752
|
-
|
|
18753
|
-
|
|
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:
|
|
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 =
|
|
18544
|
+
const globalsPath = path6.join(projectRoot, "src", "styles", "globals.css");
|
|
19806
18545
|
if (fs6.existsSync(globalsPath))
|
|
19807
18546
|
return globalsPath;
|
|
19808
|
-
const globalPath =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
19863
|
-
const
|
|
19864
|
-
|
|
19865
|
-
|
|
19866
|
-
|
|
19867
|
-
|
|
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:",
|
|
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 =
|
|
19915
|
-
const componentsDir =
|
|
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
|
-
|
|
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
|
|
19968
|
-
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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 =
|
|
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 ?
|
|
20075
|
-
const singleDynamicPath =
|
|
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 =
|
|
18877
|
+
const catchAllPath = path7.join(baseDir, "[...slug].zen");
|
|
20079
18878
|
if (fs7.existsSync(catchAllPath))
|
|
20080
18879
|
return catchAllPath;
|
|
20081
18880
|
}
|
|
20082
|
-
const rootCatchAll =
|
|
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
|
|
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 =
|
|
18918
|
+
const ext = path8.extname(pathname).toLowerCase();
|
|
20134
18919
|
if (STATIC_EXTENSIONS.has(ext)) {
|
|
20135
|
-
const filePath =
|
|
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 =
|
|
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
|
|
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 =
|
|
19006
|
+
const source = fs8.readFileSync(pagePath, "utf-8");
|
|
20345
19007
|
const analysis = analyzePageSource(source);
|
|
20346
|
-
const layoutsDir =
|
|
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 =
|
|
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,
|
|
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.
|
|
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 =
|
|
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
|
-
|
|
20455
|
-
|
|
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
|
-
|
|
20458
|
-
|
|
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 =
|
|
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:",
|
|
20489
|
-
const cssOutputPath =
|
|
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
|
-
|
|
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 =
|
|
20509
|
-
|
|
20510
|
-
const html = generatePageHTML(page, globalStyles,
|
|
20511
|
-
|
|
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
|
-
|
|
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 =
|
|
20520
|
-
if (
|
|
20521
|
-
|
|
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 =
|
|
20528
|
-
if (
|
|
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,
|
|
20532
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
|
20610
|
-
import
|
|
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
|
|
19297
|
+
return path10.join(root, PLUGINS_FILE);
|
|
20618
19298
|
}
|
|
20619
19299
|
function readPlugins() {
|
|
20620
19300
|
const pluginsPath = getPluginsPath();
|
|
20621
|
-
if (!
|
|
19301
|
+
if (!fs9.existsSync(pluginsPath)) {
|
|
20622
19302
|
return { plugins: [] };
|
|
20623
19303
|
}
|
|
20624
19304
|
try {
|
|
20625
|
-
return JSON.parse(
|
|
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
|
-
|
|
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
|
|
20707
|
-
import
|
|
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 =
|
|
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 =
|
|
20778
|
-
if (
|
|
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 =
|
|
19479
|
+
const targetDir = path11.resolve(process.cwd(), options.name);
|
|
20800
19480
|
const baseDir = options.directory;
|
|
20801
|
-
const appDir =
|
|
20802
|
-
|
|
20803
|
-
|
|
20804
|
-
|
|
20805
|
-
|
|
20806
|
-
|
|
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
|
-
|
|
20837
|
-
|
|
20838
|
-
|
|
20839
|
-
|
|
20840
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
20899
|
-
|
|
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
|
`);
|