@vesk/vesk-cli 0.2.50-canary.10 → 0.2.50-canary.11

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.
Files changed (2) hide show
  1. package/dist/cli.js +268 -48
  2. package/package.json +5 -5
package/dist/cli.js CHANGED
@@ -25890,8 +25890,8 @@ function isPublicMarkdownPath(v) {
25890
25890
  const c = s.charCodeAt(i);
25891
25891
  if (c === 63 || c === 35 || c === 92) return false;
25892
25892
  }
25893
- const lower = s.toLowerCase();
25894
- return stringEndsWith(lower, ".md") || stringEndsWith(lower, ".markdown");
25893
+ const lower2 = s.toLowerCase();
25894
+ return stringEndsWith(lower2, ".md") || stringEndsWith(lower2, ".markdown");
25895
25895
  }
25896
25896
  function getMdPathCell(path) {
25897
25897
  let cell = mdPathCells.get(path);
@@ -26563,9 +26563,9 @@ function toDomNode(value) {
26563
26563
  }
26564
26564
  if (typeof value !== "string") return value;
26565
26565
  if (value === "") return document.createDocumentFragment();
26566
- const template = document.createElement("template");
26567
- template.innerHTML = value;
26568
- const { content } = template;
26566
+ const template2 = document.createElement("template");
26567
+ template2.innerHTML = value;
26568
+ const { content } = template2;
26569
26569
  if (content.childNodes.length === 1) {
26570
26570
  const only = content.firstChild;
26571
26571
  content.removeChild(only);
@@ -26758,7 +26758,7 @@ function resolveTitle(meta, child) {
26758
26758
  }
26759
26759
  function mergeMetadata(...sources) {
26760
26760
  const out = {};
26761
- let template;
26761
+ let template2;
26762
26762
  let sawTemplate = false;
26763
26763
  for (const source of sources) {
26764
26764
  if (!source) continue;
@@ -26771,7 +26771,7 @@ function mergeMetadata(...sources) {
26771
26771
  if (key === "title") {
26772
26772
  if (value && typeof value === "object" && value.template) {
26773
26773
  sawTemplate = true;
26774
- template = value.template || template;
26774
+ template2 = value.template || template2;
26775
26775
  }
26776
26776
  out.title = value;
26777
26777
  continue;
@@ -26783,9 +26783,9 @@ function mergeMetadata(...sources) {
26783
26783
  const own = out.title;
26784
26784
  if (typeof own === "string") out.title = { absolute: own };
26785
26785
  else if (own && typeof own === "object" && own.template) {
26786
- out.title = { default: own.default, template: own.template || template };
26786
+ out.title = { default: own.default, template: own.template || template2 };
26787
26787
  } else if (own && typeof own === "object") {
26788
- out.title = { ...own, template };
26788
+ out.title = { ...own, template: template2 };
26789
26789
  }
26790
26790
  }
26791
26791
  return out;
@@ -29289,8 +29289,8 @@ function looksLikeMarkdownPath(value) {
29289
29289
  const v = value.trim();
29290
29290
  if (v.length === 0 || v.length > 4096) return false;
29291
29291
  if (v.includes("\n") || v.includes("\r")) return false;
29292
- const lower = v.toLowerCase();
29293
- return lower.endsWith(MD_EXT_MARKER) || lower.endsWith(".markdown");
29292
+ const lower2 = v.toLowerCase();
29293
+ return lower2.endsWith(MD_EXT_MARKER) || lower2.endsWith(".markdown");
29294
29294
  }
29295
29295
  function isRelativeSpecifier(v) {
29296
29296
  return v.startsWith("./") || v.startsWith("../");
@@ -31863,7 +31863,202 @@ var init_server_head = __esm({
31863
31863
  }
31864
31864
  });
31865
31865
 
31866
+ // ../compiler/src/server-jsx-lowering.ts
31867
+ function containsJsx2(node, depth = 0) {
31868
+ if (!node || typeof node !== "object" || depth > 40) return false;
31869
+ if (Array.isArray(node)) {
31870
+ for (const item of node) if (containsJsx2(item, depth + 1)) return true;
31871
+ return false;
31872
+ }
31873
+ const type = node.type;
31874
+ if (type === "JSXElement" || type === "JSXFragment") return true;
31875
+ for (const key of Object.keys(node)) {
31876
+ const value = node[key];
31877
+ if (value && typeof value === "object" && containsJsx2(value, depth + 1)) return true;
31878
+ }
31879
+ return false;
31880
+ }
31881
+ function normalizeJsxText(value) {
31882
+ const lines = value.split(/\r\n|\n|\r/);
31883
+ let lastNonEmpty = -1;
31884
+ for (let i = 0; i < lines.length; i++) {
31885
+ if (/[^ \t]/.test(lines[i])) lastNonEmpty = i;
31886
+ }
31887
+ let out = "";
31888
+ for (let i = 0; i < lines.length; i++) {
31889
+ let line = lines[i].replace(/\t/g, " ");
31890
+ if (i !== 0) line = line.replace(/^ +/, "");
31891
+ if (i !== lines.length - 1) line = line.replace(/ +$/, "");
31892
+ if (line) {
31893
+ if (i !== lastNonEmpty) line += " ";
31894
+ out += line;
31895
+ }
31896
+ }
31897
+ return out;
31898
+ }
31899
+ function lower(node, ctx2) {
31900
+ if (Array.isArray(node)) return node.map((n2) => lower(n2, ctx2));
31901
+ if (!node || typeof node !== "object") return node;
31902
+ const n = node;
31903
+ if (n.type === "JSXElement") {
31904
+ const opening = n.openingElement;
31905
+ const name = jsxTagName(opening.name);
31906
+ const attrs = lowerAttributes(opening.attributes, ctx2);
31907
+ const children = lowerChildren(n.children, ctx2);
31908
+ const statics = [`<${name}`, ...attrs.statics.slice(1)];
31909
+ statics[statics.length - 1] += ">";
31910
+ const quasis = [...statics, `</${name}>`];
31911
+ const expressions = [...attrs.exprs, ...children];
31912
+ return template(quasis, expressions);
31913
+ }
31914
+ if (n.type === "JSXFragment") {
31915
+ return template(["", ""], lowerChildren(n.children, ctx2));
31916
+ }
31917
+ const out = {};
31918
+ for (const key of Object.keys(n)) {
31919
+ if (key === "type" || key === "start" || key === "end" || key === "loc" || key === "range") {
31920
+ out[key] = n[key];
31921
+ continue;
31922
+ }
31923
+ const value = n[key];
31924
+ out[key] = value && typeof value === "object" ? lower(value, ctx2) : value;
31925
+ }
31926
+ return out;
31927
+ }
31928
+ function jsxTagName(nameNode) {
31929
+ const n = nameNode;
31930
+ if (!n) return "div";
31931
+ if (n.type === "JSXIdentifier") return String(n.name);
31932
+ if (n.type === "JSXMemberExpression") {
31933
+ const object = jsxTagName(n.object);
31934
+ const property = n.property;
31935
+ return `${object}.${String(property?.name)}`;
31936
+ }
31937
+ if (n.type === "JSXNamespacedName") {
31938
+ const ns = n.namespace;
31939
+ const name = n.name;
31940
+ return `${String(ns?.name)}:${String(name?.name)}`;
31941
+ }
31942
+ return "div";
31943
+ }
31944
+ function lowerAttributes(attrs, ctx2) {
31945
+ const statics = [""];
31946
+ const exprs = [];
31947
+ const push = (text, expr) => {
31948
+ if (expr === void 0) {
31949
+ statics[statics.length - 1] += text;
31950
+ return;
31951
+ }
31952
+ statics[statics.length - 1] += text;
31953
+ statics.push("");
31954
+ exprs.push(expr);
31955
+ };
31956
+ for (const attr of attrs || []) {
31957
+ const a = attr;
31958
+ if (a.type === "JSXSpreadAttribute") {
31959
+ console.error("[vesk] a spread attribute in a JSX expression is not supported yet (dropped):", String(a.argument ?? "").slice(0, 60));
31960
+ continue;
31961
+ }
31962
+ const name = jsxAttrName(a.name);
31963
+ const value = a.value;
31964
+ if (value === null || value === void 0) {
31965
+ push(` ${name}`);
31966
+ continue;
31967
+ }
31968
+ if (value.type === "StringLiteral") {
31969
+ push(` ${name}="${escapeAttrText(String(value.value))}"`);
31970
+ continue;
31971
+ }
31972
+ if (value.type === "JSXExpressionContainer") {
31973
+ const inner = value.expression;
31974
+ if (!inner || inner.type === "JSXEmptyExpression") {
31975
+ push(` ${name}="true"`);
31976
+ continue;
31977
+ }
31978
+ push(` ${name}="`, callNode(ATTR, [literal3(name), coerceString(lower(inner, ctx2))]));
31979
+ push('"');
31980
+ continue;
31981
+ }
31982
+ push(` ${name}="`, callNode(ATTR, [literal3(name), coerceString(lower(value, ctx2))]));
31983
+ push('"');
31984
+ }
31985
+ return { statics, exprs };
31986
+ }
31987
+ function jsxAttrName(nameNode) {
31988
+ const n = nameNode;
31989
+ if (!n) return "data";
31990
+ if (n.type === "JSXIdentifier") return String(n.name);
31991
+ return jsxTagName(n);
31992
+ }
31993
+ function lowerChildren(children, ctx2) {
31994
+ const out = [];
31995
+ for (const child of children || []) {
31996
+ const c = child;
31997
+ if (c.type === "JSXText") {
31998
+ const text = normalizeJsxText(String(c.value ?? ""));
31999
+ if (text) out.push(literal3(text));
32000
+ continue;
32001
+ }
32002
+ if (c.type === "JSXExpressionContainer") {
32003
+ const inner = c.expression;
32004
+ if (!inner || inner.type === "JSXEmptyExpression") continue;
32005
+ const lowered2 = lower(inner, ctx2);
32006
+ out.push(coerceString(lowered2));
32007
+ continue;
32008
+ }
32009
+ const lowered = lower(c, ctx2);
32010
+ out.push(coerceString(lowered));
32011
+ }
32012
+ return out;
32013
+ }
32014
+ function coerceString(node) {
32015
+ if (!node || typeof node !== "object") return callNode(ESCAPE, [literal3(String(node))]);
32016
+ const n = node;
32017
+ if (n.type === "TemplateLiteral") return n;
32018
+ if (n.type === "Literal" || n.type === "StringLiteral") return callNode(ESCAPE, [node]);
32019
+ return callNode(ESCAPE, [callNode("String", [node])]);
32020
+ }
32021
+ function template(statics, expressions) {
32022
+ const quasis = statics.map((raw2, i) => ({
32023
+ type: "TemplateElement",
32024
+ value: { raw: raw2 },
32025
+ tail: i === statics.length - 1
32026
+ }));
32027
+ return { type: "TemplateLiteral", quasis, expressions };
32028
+ }
32029
+ function literal3(value) {
32030
+ return { type: "Literal", value };
32031
+ }
32032
+ function callNode(callee, args2) {
32033
+ return {
32034
+ type: "CallExpression",
32035
+ callee: { type: "Identifier", name: callee },
32036
+ arguments: args2,
32037
+ optional: false
32038
+ };
32039
+ }
32040
+ function escapeAttrText(value) {
32041
+ return value.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;");
32042
+ }
32043
+ function lowerJsxInExpression(ast) {
32044
+ if (!containsJsx2(ast)) return ast;
32045
+ return lower(ast, { track: false });
32046
+ }
32047
+ var ESCAPE, ATTR;
32048
+ var init_server_jsx_lowering = __esm({
32049
+ "../compiler/src/server-jsx-lowering.ts"() {
32050
+ "use strict";
32051
+ ESCAPE = "__escape";
32052
+ ATTR = "__attr";
32053
+ }
32054
+ });
32055
+
31866
32056
  // ../compiler/src/server-jsgen.ts
32057
+ import { print as print6 } from "esrap";
32058
+ import tsPrinter from "esrap/languages/ts";
32059
+ function printLoweredTs(ast) {
32060
+ return print6(ast, tsPrinter()).code;
32061
+ }
31867
32062
  function sanitizeMarkerName(name) {
31868
32063
  return String(name).split("--").join("-").split("<").join("").split(">").join("");
31869
32064
  }
@@ -31914,7 +32109,19 @@ function irNodeToJS(node, importedNames, isAsync = false, tracked2) {
31914
32109
  `})();`
31915
32110
  ].join("\n");
31916
32111
  }
31917
- if (node instanceof RuntimeStatement) return semicolonizeStatement(transformTracked(node, tracked2 || /* @__PURE__ */ new Map()));
32112
+ if (node instanceof RuntimeStatement) {
32113
+ const stmt = node;
32114
+ const lowered = stmt.ast ? lowerJsxInExpression(stmt.ast) : null;
32115
+ if (lowered && lowered !== stmt.ast && (tracked2?.size ?? 0) === 0) {
32116
+ return semicolonizeStatement(printLoweredTs(lowered));
32117
+ }
32118
+ if (lowered && lowered !== stmt.ast) {
32119
+ return semicolonizeStatement(
32120
+ transformTracked({ ...node, ast: lowered }, tracked2 || /* @__PURE__ */ new Map())
32121
+ );
32122
+ }
32123
+ return semicolonizeStatement(transformTracked(node, tracked2 || /* @__PURE__ */ new Map()));
32124
+ }
31918
32125
  if (node instanceof SlotNode) {
31919
32126
  if (__vskMarkerless) return `__out.push(props.children || '');`;
31920
32127
  const sid = `s${nextVskId()}`;
@@ -31931,7 +32138,12 @@ function isEvent(target) {
31931
32138
  return !!target && target.startsWith("on") && target.length > 2;
31932
32139
  }
31933
32140
  function exprJSX(node, tracked2) {
31934
- return exprJS(transformTracked(node, tracked2 || /* @__PURE__ */ new Map()));
32141
+ const lowered = node.ast ? lowerJsxInExpression(node.ast) : null;
32142
+ const didLower = lowered !== node.ast;
32143
+ if (didLower && (tracked2?.size ?? 0) === 0) {
32144
+ return exprJS(printLoweredTs(lowered));
32145
+ }
32146
+ return exprJS(transformTracked({ ...node, ast: lowered }, tracked2 || /* @__PURE__ */ new Map()));
31935
32147
  }
31936
32148
  function staticNodeToJS(node, isAsync = false, tracked2) {
31937
32149
  const lines = [];
@@ -32079,13 +32291,13 @@ function mapRegionToJS(node, isAsync = false, tracked2) {
32079
32291
  }
32080
32292
  function keyedItemTemplate(node) {
32081
32293
  if (!node.keyExpr) return node.bodyTemplate;
32082
- const template = node.bodyTemplate;
32083
- const idx = template.findIndex((n) => n instanceof StaticNode);
32084
- if (idx === -1) return template;
32085
- const root3 = template[idx];
32294
+ const template2 = node.bodyTemplate;
32295
+ const idx = template2.findIndex((n) => n instanceof StaticNode);
32296
+ if (idx === -1) return template2;
32297
+ const root3 = template2[idx];
32086
32298
  const copy = new StaticNode(root3.tag, root3.attributes, [...root3.children, new DynamicBinding(node.keyExpr, "attribute", "data-vsk-key")], root3.keyExpr);
32087
32299
  copy.selfClosing = root3.selfClosing;
32088
- const out = template.slice();
32300
+ const out = template2.slice();
32089
32301
  out[idx] = copy;
32090
32302
  return out;
32091
32303
  }
@@ -32197,18 +32409,24 @@ function componentCallToJS(node, importedNames, isAsync = false, tracked2) {
32197
32409
  }
32198
32410
  }
32199
32411
  if (regularChildren.length > 0) {
32200
- const childLines = [];
32201
- for (const child of regularChildren) {
32202
- const code = irNodeToJS(child, importedNames, isAsync, tracked2);
32203
- if (code) childLines.push(code);
32204
- }
32205
- if (childLines.length > 0) {
32206
- const childrenVar = `__ch${nextVskId()}`;
32207
- propsEntries.push(`children: ${childrenVar}`);
32208
- lines.push(`const ${childrenVar} = ${isAsync ? "await (async " : "("}() => {`);
32209
- lines.push(`const __out = [];`);
32210
- lines.push(indent(childLines.join("\n")));
32211
- lines.push(`return __out.join(''); })();`);
32412
+ const fnType = regularChildren.length === 1 && regularChildren[0] instanceof DynamicBinding && regularChildren[0].kind === "text" ? regularChildren[0].expression.ast?.type : null;
32413
+ const isFnChild = fnType === "ArrowFunctionExpression" || fnType === "FunctionExpression" || fnType === "Identifier" || fnType === "MemberExpression";
32414
+ if (isFnChild) {
32415
+ propsEntries.push(`children: ${exprJSX(regularChildren[0].expression, tracked2)}`);
32416
+ } else {
32417
+ const childLines = [];
32418
+ for (const child of regularChildren) {
32419
+ const code = irNodeToJS(child, importedNames, isAsync, tracked2);
32420
+ if (code) childLines.push(code);
32421
+ }
32422
+ if (childLines.length > 0) {
32423
+ const childrenVar = `__ch${nextVskId()}`;
32424
+ propsEntries.push(`children: ${childrenVar}`);
32425
+ lines.push(`const ${childrenVar} = ${isAsync ? "await (async " : "("}() => {`);
32426
+ lines.push(`const __out = [];`);
32427
+ lines.push(indent(childLines.join("\n")));
32428
+ lines.push(`return __out.join(''); })();`);
32429
+ }
32212
32430
  }
32213
32431
  }
32214
32432
  const propsObj = `{ ${propsEntries.join(", ")} }`;
@@ -32225,9 +32443,9 @@ function componentCallToJS(node, importedNames, isAsync = false, tracked2) {
32225
32443
  }
32226
32444
  const callExpr3 = `${awaitKw}${calleeVar}(${propsObj}, __registry, (${calleeVar}.__veskScope || __vesk))`;
32227
32445
  if (__vskHydrate && !__vskMarkerless) {
32228
- lines.push(`__out.push(${JSON.stringify(componentMarker(compName))} + (${callExpr3} || ''));`);
32446
+ lines.push(`__out.push(${JSON.stringify(componentMarker(compName))} + __flat(${callExpr3}));`);
32229
32447
  } else {
32230
- lines.push(`__out.push(${callExpr3} || '');`);
32448
+ lines.push(`__out.push(__flat(${callExpr3}));`);
32231
32449
  }
32232
32450
  return lines.join("\n");
32233
32451
  }
@@ -32245,6 +32463,7 @@ function generateFunctionBody(comp, importedNames) {
32245
32463
  lines.push(`const __styleText = (v) => { if (typeof v === 'string') return v; if (v && typeof v === 'object') { let s = ''; for (const k in v) { const x = v[k]; if (x == null || x === false) continue; s += k.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase()) + ':' + x + ';'; } return s; } return String(v); };`);
32246
32464
  lines.push(`const __attr = (n, v) => (v == null || v === false) ? '' : ' ' + n + '="' + __escape(n === 'style' ? __styleText(v) : String(v)) + '"';`);
32247
32465
  lines.push(`const raw = (s) => s == null ? '' : String(s);`);
32466
+ lines.push(`const __flat = (v) => Array.isArray(v) ? v.join('') : (v == null ? '' : String(v));`);
32248
32467
  lines.push(`const __tk = globalThis.__vsk_ssr_token || '';`);
32249
32468
  if (asyncMode) {
32250
32469
  lines.push(`const __pk = __tk ? '__vsk_ssr_promises_' + __tk : '__vsk_ssr_promises';`);
@@ -32390,6 +32609,7 @@ var init_server_jsgen = __esm({
32390
32609
  init_scan();
32391
32610
  init_server_utils();
32392
32611
  init_module_imports();
32612
+ init_server_jsx_lowering();
32393
32613
  init_vsk_imports();
32394
32614
  __currentCompName = "";
32395
32615
  }
@@ -33154,8 +33374,8 @@ function installMdReadHook(publicDirs) {
33154
33374
  while (rel.length > 0 && rel.charCodeAt(0) === 47) rel = rel.slice(1);
33155
33375
  const abs = resolveWithin(dir, rel);
33156
33376
  if (!abs) continue;
33157
- const lower = abs.toLowerCase();
33158
- if (!lower.endsWith(".md") && !lower.endsWith(".markdown")) continue;
33377
+ const lower2 = abs.toLowerCase();
33378
+ if (!lower2.endsWith(".md") && !lower2.endsWith(".markdown")) continue;
33159
33379
  if (existsSync12(abs) && statSync4(abs).isFile()) return readFileSync12(abs, "utf8");
33160
33380
  } catch {
33161
33381
  }
@@ -37582,8 +37802,8 @@ function isPublicMarkdownPath2(v) {
37582
37802
  if (c === 63 || c === 35 || c === 92)
37583
37803
  return false;
37584
37804
  }
37585
- const lower = s.toLowerCase();
37586
- return stringEndsWith2(lower, ".md") || stringEndsWith2(lower, ".markdown");
37805
+ const lower2 = s.toLowerCase();
37806
+ return stringEndsWith2(lower2, ".md") || stringEndsWith2(lower2, ".markdown");
37587
37807
  }
37588
37808
  function getMdPathCell2(path) {
37589
37809
  let cell = mdPathCells2.get(path);
@@ -50155,7 +50375,7 @@ import { WebSocketServer as WebSocketServer2 } from "ws";
50155
50375
  // ../compiler/dist/strip-ts.js
50156
50376
  init_parser();
50157
50377
  import { walk as walk6 } from "zimmerframe";
50158
- import { print as print6 } from "esrap";
50378
+ import { print as print7 } from "esrap";
50159
50379
  import ts6 from "esrap/languages/ts";
50160
50380
  var TS_NODE_TYPES2 = /* @__PURE__ */ new Set([
50161
50381
  "TSAsExpression",
@@ -50352,7 +50572,7 @@ function stripCodeTypes2(code) {
50352
50572
  stripped.body = stripped.body.filter((n) => !isTypeOnlyStatement2(n));
50353
50573
  }
50354
50574
  try {
50355
- return print6(stripped, ts6()).code;
50575
+ return print7(stripped, ts6()).code;
50356
50576
  } catch {
50357
50577
  return code;
50358
50578
  }
@@ -50491,7 +50711,7 @@ init_vsk_imports();
50491
50711
  init_md_inline();
50492
50712
  init_strip_ts();
50493
50713
  import { walk as walk7 } from "zimmerframe";
50494
- import { print as print7 } from "esrap";
50714
+ import { print as print8 } from "esrap";
50495
50715
  import ts7 from "esrap/languages/ts";
50496
50716
  import tsx2 from "esrap/languages/tsx";
50497
50717
  function callExpr2(callee, args2 = []) {
@@ -50558,12 +50778,12 @@ function semicolonizeStatement2(code) {
50558
50778
  return code;
50559
50779
  return code + ";";
50560
50780
  }
50561
- function containsJsx2(node, depth = 0) {
50781
+ function containsJsx3(node, depth = 0) {
50562
50782
  if (!node || typeof node !== "object" || depth > 40)
50563
50783
  return false;
50564
50784
  if (Array.isArray(node)) {
50565
50785
  for (const item of node) {
50566
- if (containsJsx2(item, depth + 1))
50786
+ if (containsJsx3(item, depth + 1))
50567
50787
  return true;
50568
50788
  }
50569
50789
  return false;
@@ -50572,13 +50792,13 @@ function containsJsx2(node, depth = 0) {
50572
50792
  return true;
50573
50793
  for (const key of Object.keys(node)) {
50574
50794
  const v = node[key];
50575
- if (v && typeof v === "object" && containsJsx2(v, depth + 1))
50795
+ if (v && typeof v === "object" && containsJsx3(v, depth + 1))
50576
50796
  return true;
50577
50797
  }
50578
50798
  return false;
50579
50799
  }
50580
50800
  function printAst2(ast) {
50581
- return print7(ast, containsJsx2(ast) ? tsx2() : ts7()).code;
50801
+ return print8(ast, containsJsx3(ast) ? tsx2() : ts7()).code;
50582
50802
  }
50583
50803
  function effectBlockToHandlerExpr2(eff) {
50584
50804
  try {
@@ -50699,7 +50919,7 @@ function transformTracked2(irNode, tracked2) {
50699
50919
  return context.next();
50700
50920
  }
50701
50921
  });
50702
- return print7(transformed, containsJsx2(transformed) ? tsx2() : ts7()).code;
50922
+ return print8(transformed, containsJsx3(transformed) ? tsx2() : ts7()).code;
50703
50923
  }
50704
50924
  function collectTrackedNames2(body) {
50705
50925
  const names = /* @__PURE__ */ new Map();
@@ -53834,8 +54054,8 @@ function looksLikeMarkdownPath2(value) {
53834
54054
  return false;
53835
54055
  if (v.includes("\n") || v.includes("\r"))
53836
54056
  return false;
53837
- const lower = v.toLowerCase();
53838
- return lower.endsWith(MD_EXT_MARKER2) || lower.endsWith(".markdown");
54057
+ const lower2 = v.toLowerCase();
54058
+ return lower2.endsWith(MD_EXT_MARKER2) || lower2.endsWith(".markdown");
53839
54059
  }
53840
54060
  function isRelativeSpecifier2(v) {
53841
54061
  return v.startsWith("./") || v.startsWith("../");
@@ -55041,8 +55261,8 @@ function installMdReadHook2(publicDirs) {
55041
55261
  const abs = resolveWithin2(dir, rel);
55042
55262
  if (!abs)
55043
55263
  continue;
55044
- const lower = abs.toLowerCase();
55045
- if (!lower.endsWith(".md") && !lower.endsWith(".markdown"))
55264
+ const lower2 = abs.toLowerCase();
55265
+ if (!lower2.endsWith(".md") && !lower2.endsWith(".markdown"))
55046
55266
  continue;
55047
55267
  if (existsSync29(abs) && statSync15(abs).isFile())
55048
55268
  return readFileSync25(abs, "utf8");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vesk/vesk-cli",
3
- "version": "0.2.50-canary.10",
3
+ "version": "0.2.50-canary.11",
4
4
  "type": "module",
5
5
  "description": "Vesk — compiler-first framework for the post-VDOM web. vesk dev, vesk build.",
6
6
  "bin": {
@@ -8,10 +8,10 @@
8
8
  },
9
9
  "main": "./dist/cli.js",
10
10
  "dependencies": {
11
- "@vesk/adapter": "^0.2.50-canary.10",
12
- "@vesk/compiler": "^0.2.50-canary.10",
13
- "@vesk/plugin-tailwind": "^0.2.50-canary.10",
14
- "@vesk/runtime": "^0.2.50-canary.10",
11
+ "@vesk/adapter": "^0.2.50-canary.11",
12
+ "@vesk/compiler": "^0.2.50-canary.11",
13
+ "@vesk/plugin-tailwind": "^0.2.50-canary.11",
14
+ "@vesk/runtime": "^0.2.50-canary.11",
15
15
  "esrap": "^2.3.0",
16
16
  "typescript": "^5.8.0",
17
17
  "ws": "^8.18.0",