vitepress 2.0.0-alpha.3 → 2.0.0-alpha.4

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.
@@ -32,7 +32,7 @@ import require$$0$1 from 'tty';
32
32
  import require$$0$2 from 'constants';
33
33
  import require$$5 from 'assert';
34
34
  import { transformerNotationDiff, transformerNotationFocus, transformerNotationHighlight, transformerNotationErrorLevel, transformerCompactLineOptions } from '@shikijs/transformers';
35
- import { createHighlighter, guessEmbeddedLanguages } from 'shiki';
35
+ import { createHighlighter, isSpecialLang, guessEmbeddedLanguages } from 'shiki';
36
36
  import MiniSearch from 'minisearch';
37
37
 
38
38
  const defaultIconDimensions = Object.freeze(
@@ -4569,9 +4569,10 @@ function findUpSync(name, {
4569
4569
  let directory = path$1.resolve(toPath(cwd) ?? '');
4570
4570
  const {root} = path$1.parse(directory);
4571
4571
  stopAt = path$1.resolve(directory, toPath(stopAt) ?? root);
4572
+ const isAbsoluteName = path$1.isAbsolute(name);
4572
4573
 
4573
- while (directory && directory !== stopAt && directory !== root) {
4574
- const filePath = path$1.isAbsolute(name) ? name : path$1.join(directory, name);
4574
+ while (directory) {
4575
+ const filePath = isAbsoluteName ? name : path$1.join(directory, name);
4575
4576
 
4576
4577
  try {
4577
4578
  const stats = fs__default.statSync(filePath, {throwIfNoEntry: false});
@@ -4580,6 +4581,10 @@ function findUpSync(name, {
4580
4581
  }
4581
4582
  } catch {}
4582
4583
 
4584
+ if (directory === stopAt || directory === root) {
4585
+ break;
4586
+ }
4587
+
4583
4588
  directory = path$1.dirname(directory);
4584
4589
  }
4585
4590
  }
@@ -17339,7 +17344,11 @@ let moduleGraph = new ModuleGraph();
17339
17344
  function defineRoutes(loader) {
17340
17345
  return loader;
17341
17346
  }
17342
- async function resolvePages(srcDir, userConfig, logger) {
17347
+ async function resolvePages(srcDir, userConfig, logger, rebuildCache = false) {
17348
+ if (rebuildCache) {
17349
+ moduleGraph = new ModuleGraph();
17350
+ routeModuleCache.clear();
17351
+ }
17343
17352
  const allMarkdownFiles = (await glob(["**/*.md"], {
17344
17353
  cwd: srcDir,
17345
17354
  ignore: [
@@ -17412,10 +17421,16 @@ const dynamicRoutesPlugin = async (config) => {
17412
17421
  }
17413
17422
  }
17414
17423
  let watchedFileChanged = false;
17415
- for (const [, route] of routeModuleCache) {
17424
+ for (const [file2, route] of routeModuleCache) {
17416
17425
  if (route.watch && picomatchExports.isMatch(normalizedFile, route.watch)) {
17417
17426
  route.routes = void 0;
17418
17427
  watchedFileChanged = true;
17428
+ for (const id of moduleGraph.delete(file2)) {
17429
+ const mod = this.environment.moduleGraph.getModuleById(id);
17430
+ if (mod) {
17431
+ modules.push(mod);
17432
+ }
17433
+ }
17419
17434
  }
17420
17435
  }
17421
17436
  if (modules.length && !normalizedFile.endsWith(".md") || watchedFileChanged || pathLoaderRE.test(normalizedFile)) {
@@ -17730,7 +17745,7 @@ async function resolveConfig(root = process.cwd(), command = "serve", mode = "de
17730
17745
  userConfig,
17731
17746
  sitemap: userConfig.sitemap,
17732
17747
  buildConcurrency: userConfig.buildConcurrency ?? 64,
17733
- ...await resolvePages(srcDir, userConfig, logger)
17748
+ ...await resolvePages(srcDir, userConfig, logger, true)
17734
17749
  };
17735
17750
  global.VITEPRESS_CONFIG = config;
17736
17751
  return config;
@@ -23586,6 +23601,8 @@ const tocPlugin = (md, {
23586
23601
  );
23587
23602
  };
23588
23603
 
23604
+ var e=false,n={false:"push",true:"unshift",after:"push",before:"unshift"},t={isPermalinkSymbol:true};function r$1(r,a,i,l){var o;if(!e){var c="Using deprecated markdown-it-anchor permalink option, see https://github.com/valeriangalliat/markdown-it-anchor#permalinks";"object"==typeof process&&process&&process.emitWarning?process.emitWarning(c):console.warn(c),e=true;}var s=[Object.assign(new i.Token("link_open","a",1),{attrs:[].concat(a.permalinkClass?[["class",a.permalinkClass]]:[],[["href",a.permalinkHref(r,i)]],Object.entries(a.permalinkAttrs(r,i)))}),Object.assign(new i.Token("html_block","",0),{content:a.permalinkSymbol,meta:t}),new i.Token("link_close","a",-1)];a.permalinkSpace&&i.tokens[l+1].children[n[a.permalinkBefore]](Object.assign(new i.Token("text","",0),{content:" "})),(o=i.tokens[l+1].children)[n[a.permalinkBefore]].apply(o,s);}function a(e){return "#"+e}function i(e){return {}}var l={class:"header-anchor",symbol:"#",renderHref:a,renderAttrs:i};function o$1(e){function n(t){return t=Object.assign({},n.defaults,t),function(n,r,a,i){return e(n,t,r,a,i)}}return n.defaults=Object.assign({},l),n.renderPermalinkImpl=e,n}function c$1(e){var n=[],t=e.filter(function(e){if("class"!==e[0])return true;n.push(e[1]);});return n.length>0&&t.unshift(["class",n.join(" ")]),t}var s=o$1(function(e,r,a,i,l){var o,s=[Object.assign(new i.Token("link_open","a",1),{attrs:c$1([].concat(r.class?[["class",r.class]]:[],[["href",r.renderHref(e,i)]],r.ariaHidden?[["aria-hidden","true"]]:[],Object.entries(r.renderAttrs(e,i))))}),Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}),new i.Token("link_close","a",-1)];if(r.space){var u="string"==typeof r.space?r.space:" ";i.tokens[l+1].children[n[r.placement]](Object.assign(new i.Token("string"==typeof r.space?"html_inline":"text","",0),{content:u}));}(o=i.tokens[l+1].children)[n[r.placement]].apply(o,s);});Object.assign(s.defaults,{space:true,placement:"after",ariaHidden:false});var u$1=o$1(s.renderPermalinkImpl);u$1.defaults=Object.assign({},s.defaults,{ariaHidden:true});var d$2=o$1(function(e,n,t,r,a){var i=[Object.assign(new r.Token("link_open","a",1),{attrs:c$1([].concat(n.class?[["class",n.class]]:[],[["href",n.renderHref(e,r)]],Object.entries(n.renderAttrs(e,r))))})].concat(n.safariReaderFix?[new r.Token("span_open","span",1)]:[],r.tokens[a+1].children,n.safariReaderFix?[new r.Token("span_close","span",-1)]:[],[new r.Token("link_close","a",-1)]);r.tokens[a+1]=Object.assign(new r.Token("inline","",0),{children:i});});Object.assign(d$2.defaults,{safariReaderFix:false});var f=o$1(function(e,r,a,i,l){var o;if(!["visually-hidden","aria-label","aria-describedby","aria-labelledby"].includes(r.style))throw new Error("`permalink.linkAfterHeader` called with unknown style option `"+r.style+"`");if(!["aria-describedby","aria-labelledby"].includes(r.style)&&!r.assistiveText)throw new Error("`permalink.linkAfterHeader` called without the `assistiveText` option in `"+r.style+"` style");if("visually-hidden"===r.style&&!r.visuallyHiddenClass)throw new Error("`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style");var s=i.tokens[l+1].children.filter(function(e){return "text"===e.type||"code_inline"===e.type}).reduce(function(e,n){return e+n.content},""),u=[],d=[];if(r.class&&d.push(["class",r.class]),d.push(["href",r.renderHref(e,i)]),d.push.apply(d,Object.entries(r.renderAttrs(e,i))),"visually-hidden"===r.style){if(u.push(Object.assign(new i.Token("span_open","span",1),{attrs:[["class",r.visuallyHiddenClass]]}),Object.assign(new i.Token("text","",0),{content:r.assistiveText(s)}),new i.Token("span_close","span",-1)),r.space){var f="string"==typeof r.space?r.space:" ";u[n[r.placement]](Object.assign(new i.Token("string"==typeof r.space?"html_inline":"text","",0),{content:f}));}u[n[r.placement]](Object.assign(new i.Token("span_open","span",1),{attrs:[["aria-hidden","true"]]}),Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}),new i.Token("span_close","span",-1));}else u.push(Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}));"aria-label"===r.style?d.push(["aria-label",r.assistiveText(s)]):["aria-describedby","aria-labelledby"].includes(r.style)&&d.push([r.style,e]);var p=[Object.assign(new i.Token("link_open","a",1),{attrs:c$1(d)})].concat(u,[new i.Token("link_close","a",-1)]);(o=i.tokens).splice.apply(o,[l+3,0].concat(p)),r.wrapper&&(i.tokens.splice(l,0,Object.assign(new i.Token("html_block","",0),{content:r.wrapper[0]+"\n"})),i.tokens.splice(l+3+p.length+1,0,Object.assign(new i.Token("html_block","",0),{content:r.wrapper[1]+"\n"})));});function p(e,n,t,r){var a=e,i=r;if(t&&Object.prototype.hasOwnProperty.call(n,a))throw new Error("User defined `id` attribute `"+e+"` is not unique. Please fix it in your Markdown to continue.");for(;Object.prototype.hasOwnProperty.call(n,a);)a=e+"-"+i,i+=1;return n[a]=true,a}function b(e,n){n=Object.assign({},b.defaults,n),e.core.ruler.push("anchor",function(e){for(var t,a={},i=e.tokens,l=Array.isArray(n.level)?(t=n.level,function(e){return t.includes(e)}):function(e){return function(n){return n>=e}}(n.level),o=0;o<i.length;o++){var c=i[o];if("heading_open"===c.type&&l(Number(c.tag.substr(1)))){var s=n.getTokensText(i[o+1].children),u=c.attrGet("id");u=null==u?p(u=n.slugifyWithState?n.slugifyWithState(s,e):n.slugify(s),a,false,n.uniqueSlugStartIndex):p(u,a,true,n.uniqueSlugStartIndex),c.attrSet("id",u),false!==n.tabIndex&&c.attrSet("tabindex",""+n.tabIndex),"function"==typeof n.permalink?n.permalink(u,n,e,o):(n.permalink||n.renderPermalink&&n.renderPermalink!==r$1)&&n.renderPermalink(u,n,e,o),o=i.indexOf(c),n.callback&&n.callback(c,{slug:u,title:s});}}});}Object.assign(f.defaults,{style:"visually-hidden",space:true,placement:"after",wrapper:null}),b.permalink={__proto__:null,legacy:r$1,renderHref:a,renderAttrs:i,makePermalink:o$1,linkInsideHeader:s,ariaHidden:u$1,headerLink:d$2,linkAfterHeader:f},b.defaults={level:1,slugify:function(e){return encodeURIComponent(String(e).trim().toLowerCase().replace(/\s+/g,"-"))},uniqueSlugStartIndex:1,tabIndex:"-1",getTokensText:function(e){return e.filter(function(e){return ["text","code_inline"].includes(e.type)}).map(function(e){return e.content}).join("")},permalink:false,renderPermalink:r$1,permalinkClass:u$1.defaults.class,permalinkSpace:u$1.defaults.space,permalinkSymbol:"¶",permalinkBefore:"before"===u$1.defaults.placement,permalinkHref:u$1.defaults.renderHref,permalinkAttrs:u$1.defaults.renderAttrs},b.default=b;
23605
+
23589
23606
  /* eslint-disable no-bitwise */
23590
23607
 
23591
23608
  const decodeCache = {};
@@ -32014,7 +32031,7 @@ function escapeHtml(unsafe) {
32014
32031
  }
32015
32032
  function wrapHightlight(highlight, map) {
32016
32033
  if (!highlight)
32017
- return undefined;
32034
+ return void 0;
32018
32035
  if (wrappedSet.has(highlight))
32019
32036
  return highlight;
32020
32037
  const wrapped = (str, lang, attrs) => {
@@ -32033,8 +32050,6 @@ function wrapHightlight(highlight, map) {
32033
32050
  return wrapped;
32034
32051
  }
32035
32052
 
32036
- var e=false,n={false:"push",true:"unshift",after:"push",before:"unshift"},t={isPermalinkSymbol:true};function r$1(r,a,i,l){var o;if(!e){var c="Using deprecated markdown-it-anchor permalink option, see https://github.com/valeriangalliat/markdown-it-anchor#permalinks";"object"==typeof process&&process&&process.emitWarning?process.emitWarning(c):console.warn(c),e=true;}var s=[Object.assign(new i.Token("link_open","a",1),{attrs:[].concat(a.permalinkClass?[["class",a.permalinkClass]]:[],[["href",a.permalinkHref(r,i)]],Object.entries(a.permalinkAttrs(r,i)))}),Object.assign(new i.Token("html_block","",0),{content:a.permalinkSymbol,meta:t}),new i.Token("link_close","a",-1)];a.permalinkSpace&&i.tokens[l+1].children[n[a.permalinkBefore]](Object.assign(new i.Token("text","",0),{content:" "})),(o=i.tokens[l+1].children)[n[a.permalinkBefore]].apply(o,s);}function a(e){return "#"+e}function i(e){return {}}var l={class:"header-anchor",symbol:"#",renderHref:a,renderAttrs:i};function o$1(e){function n(t){return t=Object.assign({},n.defaults,t),function(n,r,a,i){return e(n,t,r,a,i)}}return n.defaults=Object.assign({},l),n.renderPermalinkImpl=e,n}function c$1(e){var n=[],t=e.filter(function(e){if("class"!==e[0])return true;n.push(e[1]);});return n.length>0&&t.unshift(["class",n.join(" ")]),t}var s=o$1(function(e,r,a,i,l){var o,s=[Object.assign(new i.Token("link_open","a",1),{attrs:c$1([].concat(r.class?[["class",r.class]]:[],[["href",r.renderHref(e,i)]],r.ariaHidden?[["aria-hidden","true"]]:[],Object.entries(r.renderAttrs(e,i))))}),Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}),new i.Token("link_close","a",-1)];if(r.space){var u="string"==typeof r.space?r.space:" ";i.tokens[l+1].children[n[r.placement]](Object.assign(new i.Token("string"==typeof r.space?"html_inline":"text","",0),{content:u}));}(o=i.tokens[l+1].children)[n[r.placement]].apply(o,s);});Object.assign(s.defaults,{space:true,placement:"after",ariaHidden:false});var u$1=o$1(s.renderPermalinkImpl);u$1.defaults=Object.assign({},s.defaults,{ariaHidden:true});var d$2=o$1(function(e,n,t,r,a){var i=[Object.assign(new r.Token("link_open","a",1),{attrs:c$1([].concat(n.class?[["class",n.class]]:[],[["href",n.renderHref(e,r)]],Object.entries(n.renderAttrs(e,r))))})].concat(n.safariReaderFix?[new r.Token("span_open","span",1)]:[],r.tokens[a+1].children,n.safariReaderFix?[new r.Token("span_close","span",-1)]:[],[new r.Token("link_close","a",-1)]);r.tokens[a+1]=Object.assign(new r.Token("inline","",0),{children:i});});Object.assign(d$2.defaults,{safariReaderFix:false});var f=o$1(function(e,r,a,i,l){var o;if(!["visually-hidden","aria-label","aria-describedby","aria-labelledby"].includes(r.style))throw new Error("`permalink.linkAfterHeader` called with unknown style option `"+r.style+"`");if(!["aria-describedby","aria-labelledby"].includes(r.style)&&!r.assistiveText)throw new Error("`permalink.linkAfterHeader` called without the `assistiveText` option in `"+r.style+"` style");if("visually-hidden"===r.style&&!r.visuallyHiddenClass)throw new Error("`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style");var s=i.tokens[l+1].children.filter(function(e){return "text"===e.type||"code_inline"===e.type}).reduce(function(e,n){return e+n.content},""),u=[],d=[];if(r.class&&d.push(["class",r.class]),d.push(["href",r.renderHref(e,i)]),d.push.apply(d,Object.entries(r.renderAttrs(e,i))),"visually-hidden"===r.style){if(u.push(Object.assign(new i.Token("span_open","span",1),{attrs:[["class",r.visuallyHiddenClass]]}),Object.assign(new i.Token("text","",0),{content:r.assistiveText(s)}),new i.Token("span_close","span",-1)),r.space){var f="string"==typeof r.space?r.space:" ";u[n[r.placement]](Object.assign(new i.Token("string"==typeof r.space?"html_inline":"text","",0),{content:f}));}u[n[r.placement]](Object.assign(new i.Token("span_open","span",1),{attrs:[["aria-hidden","true"]]}),Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}),new i.Token("span_close","span",-1));}else u.push(Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}));"aria-label"===r.style?d.push(["aria-label",r.assistiveText(s)]):["aria-describedby","aria-labelledby"].includes(r.style)&&d.push([r.style,e]);var p=[Object.assign(new i.Token("link_open","a",1),{attrs:c$1(d)})].concat(u,[new i.Token("link_close","a",-1)]);(o=i.tokens).splice.apply(o,[l+3,0].concat(p)),r.wrapper&&(i.tokens.splice(l,0,Object.assign(new i.Token("html_block","",0),{content:r.wrapper[0]+"\n"})),i.tokens.splice(l+3+p.length+1,0,Object.assign(new i.Token("html_block","",0),{content:r.wrapper[1]+"\n"})));});function p(e,n,t,r){var a=e,i=r;if(t&&Object.prototype.hasOwnProperty.call(n,a))throw new Error("User defined `id` attribute `"+e+"` is not unique. Please fix it in your Markdown to continue.");for(;Object.prototype.hasOwnProperty.call(n,a);)a=e+"-"+i,i+=1;return n[a]=true,a}function b(e,n){n=Object.assign({},b.defaults,n),e.core.ruler.push("anchor",function(e){for(var t,a={},i=e.tokens,l=Array.isArray(n.level)?(t=n.level,function(e){return t.includes(e)}):function(e){return function(n){return n>=e}}(n.level),o=0;o<i.length;o++){var c=i[o];if("heading_open"===c.type&&l(Number(c.tag.substr(1)))){var s=n.getTokensText(i[o+1].children),u=c.attrGet("id");u=null==u?p(u=n.slugifyWithState?n.slugifyWithState(s,e):n.slugify(s),a,false,n.uniqueSlugStartIndex):p(u,a,true,n.uniqueSlugStartIndex),c.attrSet("id",u),false!==n.tabIndex&&c.attrSet("tabindex",""+n.tabIndex),"function"==typeof n.permalink?n.permalink(u,n,e,o):(n.permalink||n.renderPermalink&&n.renderPermalink!==r$1)&&n.renderPermalink(u,n,e,o),o=i.indexOf(c),n.callback&&n.callback(c,{slug:u,title:s});}}});}Object.assign(f.defaults,{style:"visually-hidden",space:true,placement:"after",wrapper:null}),b.permalink={__proto__:null,legacy:r$1,renderHref:a,renderAttrs:i,makePermalink:o$1,linkInsideHeader:s,ariaHidden:u$1,headerLink:d$2,linkAfterHeader:f},b.defaults={level:1,slugify:function(e){return encodeURIComponent(String(e).trim().toLowerCase().replace(/\s+/g,"-"))},uniqueSlugStartIndex:1,tabIndex:"-1",getTokensText:function(e){return e.filter(function(e){return ["text","code_inline"].includes(e.type)}).map(function(e){return e.content}).join("")},permalink:false,renderPermalink:r$1,permalinkClass:u$1.defaults.class,permalinkSpace:u$1.defaults.space,permalinkSymbol:"¶",permalinkBefore:"before"===u$1.defaults.placement,permalinkHref:u$1.defaults.renderHref,permalinkAttrs:u$1.defaults.renderAttrs},b.default=b;
32037
-
32038
32053
  var utils$1 = {};
32039
32054
 
32040
32055
  /**
@@ -35440,16 +35455,17 @@ function createContainer(klass, defaultTitle, md) {
35440
35455
  {
35441
35456
  render(tokens, idx, _options, env) {
35442
35457
  const token = tokens[idx];
35443
- const info = token.info.trim().slice(klass.length).trim();
35444
- const attrs = md.renderer.renderAttrs(token);
35445
35458
  if (token.nesting === 1) {
35459
+ token.attrJoin("class", `${klass} custom-block`);
35460
+ const attrs = md.renderer.renderAttrs(token);
35461
+ const info = token.info.trim().slice(klass.length).trim();
35446
35462
  const title = md.renderInline(info || defaultTitle, {
35447
35463
  references: env.references
35448
35464
  });
35449
35465
  if (klass === "details")
35450
- return `<details class="${klass} custom-block"${attrs}><summary>${title}</summary>
35466
+ return `<details ${attrs}><summary>${title}</summary>
35451
35467
  `;
35452
- return `<div class="${klass} custom-block"${attrs}><p class="custom-block-title">${title}</p>
35468
+ return `<div ${attrs}><p class="custom-block-title">${title}</p>
35453
35469
  `;
35454
35470
  } else return klass === "details" ? `</details>
35455
35471
  ` : `</div>
@@ -35643,7 +35659,9 @@ async function highlight(theme, options, logger = console) {
35643
35659
  const vPre = vueRE.test(lang) ? "" : "v-pre";
35644
35660
  lang = lang.replace(lineNoStartRE, "").replace(lineNoRE, "").replace(vueRE, "").toLowerCase() || defaultLang;
35645
35661
  try {
35646
- await highlighter.loadLanguage(lang);
35662
+ if (!isSpecialLang(lang) && !highlighter.getLoadedLanguages().includes(lang)) {
35663
+ await highlighter.loadLanguage(lang);
35664
+ }
35647
35665
  } catch {
35648
35666
  logger.warn(
35649
35667
  c$2.yellow(
@@ -35907,40 +35925,61 @@ function dedent(text) {
35907
35925
  }
35908
35926
  return text;
35909
35927
  }
35910
- function testLine(line, regexp, regionName, end = false) {
35911
- const [full, tag, name] = regexp.exec(line.trim()) || [];
35912
- return full && tag && name === regionName && tag.match(end ? /^[Ee]nd ?[rR]egion$/ : /^[rR]egion$/);
35913
- }
35928
+ const markers = [
35929
+ {
35930
+ start: /^\s*\/\/\s*#?region\b\s*(.*?)\s*$/,
35931
+ end: /^\s*\/\/\s*#?endregion\b\s*(.*?)\s*$/
35932
+ },
35933
+ {
35934
+ start: /^\s*<!--\s*#?region\b\s*(.*?)\s*-->/,
35935
+ end: /^\s*<!--\s*#?endregion\b\s*(.*?)\s*-->/
35936
+ },
35937
+ {
35938
+ start: /^\s*\/\*\s*#region\b\s*(.*?)\s*\*\//,
35939
+ end: /^\s*\/\*\s*#endregion\b\s*(.*?)\s*\*\//
35940
+ },
35941
+ {
35942
+ start: /^\s*#[rR]egion\b\s*(.*?)\s*$/,
35943
+ end: /^\s*#[eE]nd ?[rR]egion\b\s*(.*?)\s*$/
35944
+ },
35945
+ {
35946
+ start: /^\s*#\s*#?region\b\s*(.*?)\s*$/,
35947
+ end: /^\s*#\s*#?endregion\b\s*(.*?)\s*$/
35948
+ },
35949
+ {
35950
+ start: /^\s*(?:--|::|@?REM)\s*#region\b\s*(.*?)\s*$/,
35951
+ end: /^\s*(?:--|::|@?REM)\s*#endregion\b\s*(.*?)\s*$/
35952
+ },
35953
+ {
35954
+ start: /^\s*#pragma\s+region\b\s*(.*?)\s*$/,
35955
+ end: /^\s*#pragma\s+endregion\b\s*(.*?)\s*$/
35956
+ },
35957
+ {
35958
+ start: /^\s*\(\*\s*#region\b\s*(.*?)\s*\*\)/,
35959
+ end: /^\s*\(\*\s*#endregion\b\s*(.*?)\s*\*\)/
35960
+ }
35961
+ ];
35914
35962
  function findRegion(lines, regionName) {
35915
- const regionRegexps = [
35916
- /^\/\/ ?#?((?:end)?region) ([\w*-]+)$/,
35917
- // javascript, typescript, java
35918
- /^\/\* ?#((?:end)?region) ([\w*-]+) ?\*\/$/,
35919
- // css, less, scss
35920
- /^#pragma ((?:end)?region) ([\w*-]+)$/,
35921
- // C, C++
35922
- /^<!-- #?((?:end)?region) ([\w*-]+) -->$/,
35923
- // HTML, markdown
35924
- /^#((?:End )Region) ([\w*-]+)$/,
35925
- // Visual Basic
35926
- /^::#((?:end)region) ([\w*-]+)$/,
35927
- // Bat
35928
- /^# ?((?:end)?region) ([\w*-]+)$/
35929
- // C#, PHP, Powershell, Python, perl & misc
35930
- ];
35931
- let regexp = null;
35932
- let start = -1;
35933
- for (const [lineId, line] of lines.entries()) {
35934
- if (regexp === null) {
35935
- for (const reg of regionRegexps) {
35936
- if (testLine(line, reg, regionName)) {
35937
- start = lineId + 1;
35938
- regexp = reg;
35939
- break;
35940
- }
35963
+ let chosen = null;
35964
+ for (let i = 0; i < lines.length; i++) {
35965
+ for (const re of markers) {
35966
+ if (re.start.exec(lines[i])?.[1] === regionName) {
35967
+ chosen = { re, start: i + 1 };
35968
+ break;
35941
35969
  }
35942
- } else if (testLine(line, regexp, regionName, true)) {
35943
- return { start, end: lineId, regexp };
35970
+ }
35971
+ if (chosen) break;
35972
+ }
35973
+ if (!chosen) return null;
35974
+ let counter = 1;
35975
+ for (let i = chosen.start; i < lines.length; i++) {
35976
+ if (chosen.re.start.exec(lines[i])?.[1] === regionName) {
35977
+ counter++;
35978
+ continue;
35979
+ }
35980
+ const endRegion = chosen.re.end.exec(lines[i])?.[1];
35981
+ if (endRegion === regionName || endRegion === "") {
35982
+ if (--counter === 0) return { ...chosen, end: i };
35944
35983
  }
35945
35984
  }
35946
35985
  return null;
@@ -35995,7 +36034,7 @@ const snippetPlugin = (md, srcDir) => {
35995
36034
  const region = findRegion(lines, regionName);
35996
36035
  if (region) {
35997
36036
  content = dedent(
35998
- lines.slice(region.start, region.end).filter((line) => !region.regexp.test(line.trim())).join("\n")
36037
+ lines.slice(region.start, region.end).filter((l) => !(region.re.start.test(l) || region.re.end.test(l))).join("\n")
35999
36038
  );
36000
36039
  }
36001
36040
  }
@@ -36032,8 +36071,11 @@ async function createMarkdownRenderer(srcDir, options = {}, base = "/", logger =
36032
36071
  { target: "_blank", rel: "noreferrer", ...options.externalLinks },
36033
36072
  base
36034
36073
  ).use(lineNumberPlugin, options.lineNumbers);
36074
+ const tableOpen = md.renderer.rules.table_open;
36035
36075
  md.renderer.rules.table_open = function(tokens, idx, options2, env, self) {
36036
- return '<table tabindex="0">\n';
36076
+ const token = tokens[idx];
36077
+ if (token.attrIndex("tabindex") < 0) token.attrPush(["tabindex", "0"]);
36078
+ return tableOpen ? tableOpen(tokens, idx, options2, env, self) : self.renderToken(tokens, idx, options2);
36037
36079
  };
36038
36080
  if (options.gfmAlerts !== false) {
36039
36081
  md.use(gitHubAlertsPlugin);
@@ -36047,20 +36089,25 @@ async function createMarkdownRenderer(srcDir, options = {}, base = "/", logger =
36047
36089
  getTokensText: (tokens) => {
36048
36090
  return tokens.filter((t) => !["html_inline", "emoji"].includes(t.type)).map((t) => t.content).join("");
36049
36091
  },
36050
- permalink: b.permalink.linkInsideHeader({
36051
- symbol: "&ZeroWidthSpace;",
36052
- renderAttrs: (slug, state) => {
36053
- const idx = state.tokens.findIndex((token) => {
36054
- const attrs = token.attrs;
36055
- const id = attrs?.find((attr) => attr[0] === "id");
36056
- return id && slug === id[1];
36057
- });
36058
- const title = state.tokens[idx + 1].content;
36059
- return {
36060
- "aria-label": `Permalink to "${title}"`
36061
- };
36062
- }
36063
- }),
36092
+ permalink: (slug, _, state, idx) => {
36093
+ const title = state.tokens[idx + 1]?.children?.filter((token) => ["text", "code_inline"].includes(token.type)).reduce((acc, t) => acc + t.content, "").trim() || "";
36094
+ const linkTokens = [
36095
+ Object.assign(new state.Token("text", "", 0), { content: " " }),
36096
+ Object.assign(new state.Token("link_open", "a", 1), {
36097
+ attrs: [
36098
+ ["class", "header-anchor"],
36099
+ ["href", `#${slug}`],
36100
+ ["aria-label", `Permalink to \u201C${title}\u201D`]
36101
+ ]
36102
+ }),
36103
+ Object.assign(new state.Token("html_inline", "", 0), {
36104
+ content: "&#8203;",
36105
+ meta: { isPermalinkSymbol: true }
36106
+ }),
36107
+ new state.Token("link_close", "a", -1)
36108
+ ];
36109
+ state.tokens[idx + 1].children?.push(...linkTokens);
36110
+ },
36064
36111
  ...options.anchor
36065
36112
  }).use(frontmatterPlugin, {
36066
36113
  ...options.frontmatter
@@ -36849,9 +36896,9 @@ function getGitTimestamp(file) {
36849
36896
  });
36850
36897
  }
36851
36898
 
36852
- function processIncludes(srcDir, src, file, includes) {
36899
+ function processIncludes(md, srcDir, src, file, includes, cleanUrls) {
36853
36900
  const includesRE = /<!--\s*@include:\s*(.*?)\s*-->/g;
36854
- const regionRE = /(#[\w-]+)/;
36901
+ const regionRE = /(#[^\s\{]+)/;
36855
36902
  const rangeRE = /\{(\d*),(\d*)\}$/;
36856
36903
  return src.replace(includesRE, (m, m1) => {
36857
36904
  if (!m1.length) return m;
@@ -36869,22 +36916,50 @@ function processIncludes(srcDir, src, file, includes) {
36869
36916
  if (region) {
36870
36917
  const [regionName] = region;
36871
36918
  const lines = content.split(/\r?\n/);
36872
- const regionLines = findRegion(lines, regionName.slice(1));
36873
- content = lines.slice(regionLines?.start, regionLines?.end).join("\n");
36919
+ let { start, end } = findRegion(lines, regionName.slice(1)) ?? {};
36920
+ if (start === void 0) {
36921
+ const tokens = md.parse(content, {
36922
+ path: includePath,
36923
+ relativePath: slash(path$1.relative(srcDir, includePath)),
36924
+ cleanUrls
36925
+ }).filter((t) => t.type === "heading_open" && t.map);
36926
+ const idx = tokens.findIndex(
36927
+ (t) => t.attrGet("id") === regionName.slice(1)
36928
+ );
36929
+ const token = tokens[idx];
36930
+ if (token) {
36931
+ start = token.map[1];
36932
+ const level = parseInt(token.tag.slice(1));
36933
+ for (let i = idx + 1; i < tokens.length; i++) {
36934
+ if (parseInt(tokens[i].tag.slice(1)) <= level) {
36935
+ end = tokens[i].map[0];
36936
+ break;
36937
+ }
36938
+ }
36939
+ }
36940
+ }
36941
+ content = lines.slice(start, end).join("\n");
36874
36942
  }
36875
36943
  if (range) {
36876
36944
  const [, startLine, endLine] = range;
36877
36945
  const lines = content.split(/\r?\n/);
36878
36946
  content = lines.slice(
36879
- startLine ? parseInt(startLine, 10) - 1 : void 0,
36880
- endLine ? parseInt(endLine, 10) : void 0
36947
+ startLine ? parseInt(startLine) - 1 : void 0,
36948
+ endLine ? parseInt(endLine) : void 0
36881
36949
  ).join("\n");
36882
36950
  }
36883
36951
  if (!hasMeta && path$1.extname(includePath) === ".md") {
36884
36952
  content = matter(content).content;
36885
36953
  }
36886
36954
  includes.push(slash(includePath));
36887
- return processIncludes(srcDir, content, includePath, includes);
36955
+ return processIncludes(
36956
+ md,
36957
+ srcDir,
36958
+ content,
36959
+ includePath,
36960
+ includes,
36961
+ cleanUrls
36962
+ );
36888
36963
  } catch (error) {
36889
36964
  if (process.env.DEBUG) {
36890
36965
  process.stderr.write(c$2.yellow(`
@@ -36974,7 +37049,7 @@ async function createMarkdownToVueRenderFn(srcDir, options = {}, isBuild = false
36974
37049
  }
36975
37050
  );
36976
37051
  let includes = [];
36977
- src = processIncludes(srcDir, src, fileOrig, includes);
37052
+ src = processIncludes(md, srcDir, src, fileOrig, includes, cleanUrls);
36978
37053
  const localeIndex = getLocaleForPath(siteConfig?.site, relativePath);
36979
37054
  const env = {
36980
37055
  path: file,
@@ -40763,7 +40838,7 @@ async function localSearchPlugin(siteConfig) {
40763
40838
  const relativePath = slash(path$1.relative(srcDir, file));
40764
40839
  const env = { path: file, relativePath, cleanUrls };
40765
40840
  const md_raw = await fs.promises.readFile(file, "utf-8");
40766
- const md_src = processIncludes(srcDir, md_raw, file, []);
40841
+ const md_src = processIncludes(md, srcDir, md_raw, file, [], cleanUrls);
40767
40842
  if (options._render) {
40768
40843
  return await options._render(md_src, env, md);
40769
40844
  } else {
@@ -41020,7 +41095,7 @@ const staticDataPlugin = {
41020
41095
  const loader = idToLoaderModulesMap[id];
41021
41096
  if (loader && loader.watch && picomatchExports.isMatch(normalizedFile, loader.watch)) {
41022
41097
  const mod = this.environment.moduleGraph.getModuleById(id);
41023
- if (mod && !modules.includes(mod)) {
41098
+ if (mod) {
41024
41099
  modules.push(mod);
41025
41100
  }
41026
41101
  }
@@ -41131,8 +41206,9 @@ async function createVitePressPlugin(siteConfig, ssr = false, pageToHashMap, cli
41131
41206
  include: [
41132
41207
  "vue",
41133
41208
  "vitepress > @vue/devtools-api",
41134
- "vitepress > @vueuse/core"
41135
- ],
41209
+ "vitepress > @vueuse/core",
41210
+ siteConfig.themeDir === DEFAULT_THEME_PATH ? "@theme/index" : void 0
41211
+ ].filter((d) => d != null),
41136
41212
  exclude: ["@docsearch/js", "vitepress"]
41137
41213
  },
41138
41214
  server: {
@@ -45537,7 +45613,7 @@ async function generateSitemap(siteConfig) {
45537
45613
  });
45538
45614
  }
45539
45615
 
45540
- var version = "2.0.0-alpha.3";
45616
+ var version = "2.0.0-alpha.4";
45541
45617
 
45542
45618
  async function renderPage(render, config, page, result, appChunk, cssChunk, assets, pageToHashMap, metadataScript, additionalHeadTags, usedIcons) {
45543
45619
  const routePath = `/${page.replace(/\.md$/, "")}`;
package/dist/node/cli.js CHANGED
@@ -1,4 +1,4 @@
1
- import { u as getDefaultExportFromCjs, v as c, w as clearCache, o as disposeMdItInstance, n as init, b as build, q as serve, t as createServer, x as version } from './chunk-BSCyYv44.js';
1
+ import { u as getDefaultExportFromCjs, v as c, w as clearCache, o as disposeMdItInstance, n as init, b as build, q as serve, t as createServer, x as version } from './chunk-BBDUp32J.js';
2
2
  import { createLogger } from 'vite';
3
3
  import 'node:path';
4
4
  import '@shikijs/transformers';
@@ -2105,15 +2105,15 @@ type ThemeOptions = ThemeRegistrationAny | BuiltinTheme | {
2105
2105
  light: ThemeRegistrationAny | BuiltinTheme;
2106
2106
  dark: ThemeRegistrationAny | BuiltinTheme;
2107
2107
  };
2108
- interface MarkdownOptions extends Options$2 {
2108
+ interface MarkdownOptions extends MarkdownItAsyncOptions {
2109
2109
  /**
2110
2110
  * Setup markdown-it instance before applying plugins
2111
2111
  */
2112
- preConfig?: (md: MarkdownItAsync) => Awaited<void>;
2112
+ preConfig?: (md: MarkdownItAsync) => Awaitable<void>;
2113
2113
  /**
2114
2114
  * Setup markdown-it instance
2115
2115
  */
2116
- config?: (md: MarkdownItAsync) => Awaited<void>;
2116
+ config?: (md: MarkdownItAsync) => Awaitable<void>;
2117
2117
  /**
2118
2118
  * Disable cache (experimental)
2119
2119
  */
@@ -2277,7 +2277,7 @@ interface RouteModule {
2277
2277
  * Helper for defining routes with type inference
2278
2278
  */
2279
2279
  declare function defineRoutes(loader: RouteModule): RouteModule;
2280
- declare function resolvePages(srcDir: string, userConfig: UserConfig, logger: Logger): Promise<Pick<SiteConfig, 'pages' | 'dynamicRoutes' | 'rewrites'>>;
2280
+ declare function resolvePages(srcDir: string, userConfig: UserConfig, logger: Logger, rebuildCache?: boolean): Promise<Pick<SiteConfig, 'pages' | 'dynamicRoutes' | 'rewrites'>>;
2281
2281
 
2282
2282
  type RawConfigExports<ThemeConfig = any> = Awaitable<UserConfig<ThemeConfig>> | (() => Awaitable<UserConfig<ThemeConfig>>);
2283
2283
  interface TransformContext {
@@ -1,7 +1,7 @@
1
1
  import { normalizePath } from 'vite';
2
2
  export { loadEnv } from 'vite';
3
- import { g as glob, c as createMarkdownRenderer, f as fs, m as matter, p as postcssPrefixSelector } from './chunk-BSCyYv44.js';
4
- export { S as ScaffoldThemeType, b as build, t as createServer, e as defineConfig, h as defineConfigWithTheme, d as defineLoader, a as defineRoutes, o as disposeMdItInstance, n as init, j as mergeConfig, r as resolveConfig, l as resolvePages, k as resolveSiteData, i as resolveUserConfig, s as scaffold, q as serve } from './chunk-BSCyYv44.js';
3
+ import { g as glob, c as createMarkdownRenderer, f as fs, m as matter, p as postcssPrefixSelector } from './chunk-BBDUp32J.js';
4
+ export { S as ScaffoldThemeType, b as build, t as createServer, e as defineConfig, h as defineConfigWithTheme, d as defineLoader, a as defineRoutes, o as disposeMdItInstance, n as init, j as mergeConfig, r as resolveConfig, l as resolvePages, k as resolveSiteData, i as resolveUserConfig, s as scaffold, q as serve } from './chunk-BBDUp32J.js';
5
5
  import path from 'node:path';
6
6
  import 'node:crypto';
7
7
  import 'node:module';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vitepress",
3
- "version": "2.0.0-alpha.3",
3
+ "version": "2.0.0-alpha.4",
4
4
  "description": "Vite & Vue powered static site generator",
5
5
  "keywords": [
6
6
  "vite",
@@ -59,20 +59,20 @@
59
59
  "dependencies": {
60
60
  "@docsearch/css": "^3.9.0",
61
61
  "@docsearch/js": "^3.9.0",
62
- "@iconify-json/simple-icons": "^1.2.26",
63
- "@shikijs/core": "^3.0.0",
64
- "@shikijs/transformers": "^3.0.0",
65
- "@shikijs/types": "^3.0.0",
62
+ "@iconify-json/simple-icons": "^1.2.27",
63
+ "@shikijs/core": "^3.1.0",
64
+ "@shikijs/transformers": "^3.1.0",
65
+ "@shikijs/types": "^3.1.0",
66
66
  "@vitejs/plugin-vue": "^5.2.1",
67
67
  "@vue/devtools-api": "^7.7.2",
68
68
  "@vue/shared": "^3.5.13",
69
- "@vueuse/core": "^12.7.0",
70
- "@vueuse/integrations": "^12.7.0",
69
+ "@vueuse/core": "^12.8.2",
70
+ "@vueuse/integrations": "^12.8.2",
71
71
  "focus-trap": "^7.6.4",
72
72
  "mark.js": "8.11.1",
73
73
  "minisearch": "^7.1.2",
74
- "shiki": "^3.0.0",
75
- "vite": "^6.1.1",
74
+ "shiki": "^3.1.0",
75
+ "vite": "^6.2.1",
76
76
  "vue": "^3.5.13"
77
77
  },
78
78
  "devDependencies": {
@@ -87,7 +87,7 @@
87
87
  "@mdit-vue/shared": "^2.1.3",
88
88
  "@polka/compression": "^1.0.0-next.28",
89
89
  "@rollup/plugin-alias": "^5.1.1",
90
- "@rollup/plugin-commonjs": "^28.0.2",
90
+ "@rollup/plugin-commonjs": "^28.0.3",
91
91
  "@rollup/plugin-json": "^6.1.0",
92
92
  "@rollup/plugin-node-resolve": "^16.0.0",
93
93
  "@rollup/plugin-replace": "^6.0.2",
@@ -101,7 +101,7 @@
101
101
  "@types/markdown-it-container": "^2.0.10",
102
102
  "@types/markdown-it-emoji": "^3.0.1",
103
103
  "@types/minimist": "^1.2.5",
104
- "@types/node": "^22.13.5",
104
+ "@types/node": "^22.13.9",
105
105
  "@types/picomatch": "^3.0.2",
106
106
  "@types/postcss-prefix-selector": "^1.16.3",
107
107
  "@types/prompts": "^2.4.9",
@@ -119,37 +119,37 @@
119
119
  "lru-cache": "^11.0.2",
120
120
  "markdown-it": "^14.1.0",
121
121
  "markdown-it-anchor": "^9.2.0",
122
- "markdown-it-async": "^2.0.0",
122
+ "markdown-it-async": "^2.2.0",
123
123
  "markdown-it-attrs": "^4.3.1",
124
124
  "markdown-it-container": "^4.0.0",
125
125
  "markdown-it-emoji": "^3.0.0",
126
126
  "markdown-it-mathjax3": "^4.3.2",
127
127
  "minimist": "^1.2.8",
128
- "nanoid": "^5.1.2",
128
+ "nanoid": "^5.1.3",
129
129
  "ora": "^8.2.0",
130
130
  "p-map": "^7.0.3",
131
131
  "path-to-regexp": "^6.3.0",
132
132
  "picocolors": "^1.1.1",
133
133
  "picomatch": "^4.0.2",
134
134
  "pkg-dir": "^8.0.0",
135
- "playwright-chromium": "^1.50.1",
135
+ "playwright-chromium": "^1.51.0",
136
136
  "polka": "^1.0.0-next.28",
137
137
  "postcss-prefix-selector": "^2.1.0",
138
- "prettier": "^3.5.2",
138
+ "prettier": "^3.5.3",
139
139
  "prompts": "^2.4.2",
140
140
  "punycode": "^2.3.1",
141
141
  "rimraf": "^6.0.1",
142
- "rollup": "^4.34.8",
142
+ "rollup": "^4.34.9",
143
143
  "rollup-plugin-dts": "^6.1.1",
144
- "rollup-plugin-esbuild": "^6.2.0",
144
+ "rollup-plugin-esbuild": "^6.2.1",
145
145
  "semver": "^7.7.1",
146
146
  "simple-git-hooks": "^2.11.1",
147
147
  "sirv": "^3.0.1",
148
148
  "sitemap": "^8.0.0",
149
149
  "tinyglobby": "^0.2.12",
150
- "typescript": "^5.7.3",
151
- "vitest": "^3.0.7",
152
- "vue-tsc": "2.2.0",
150
+ "typescript": "^5.8.2",
151
+ "vitest": "^3.0.8",
152
+ "vue-tsc": "^2.2.8",
153
153
  "wait-on": "^8.0.2"
154
154
  },
155
155
  "peerDependencies": {