vitepress 1.0.0-draft.1 → 1.0.0-draft.2

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 (101) hide show
  1. package/dist/client/index.d.ts +5 -0
  2. package/dist/client/shared.js +1 -0
  3. package/dist/client/theme-default/Layout.vue +18 -1
  4. package/dist/client/theme-default/components/VPBackdrop.vue +1 -1
  5. package/dist/client/theme-default/components/VPBox.vue +59 -0
  6. package/dist/client/theme-default/components/VPButton.vue +123 -0
  7. package/dist/client/theme-default/components/VPContent.vue +35 -5
  8. package/dist/client/theme-default/components/{VPContentDoc.vue → VPDoc.vue} +13 -13
  9. package/dist/client/theme-default/components/{VPContentDocFooter.vue → VPDocFooter.vue} +3 -2
  10. package/dist/client/theme-default/components/{VPContentDocOutline.vue → VPDocOutline.vue} +2 -2
  11. package/dist/client/theme-default/components/VPFooter.vue +53 -0
  12. package/dist/client/theme-default/components/VPHero.vue +144 -0
  13. package/dist/client/theme-default/components/VPHome.vue +33 -0
  14. package/dist/client/theme-default/components/VPHomeFeatures.vue +96 -0
  15. package/dist/client/theme-default/components/VPHomeHero.vue +17 -0
  16. package/dist/client/theme-default/components/VPHomeSponsors.vue +97 -0
  17. package/dist/client/theme-default/components/VPNavBar.vue +1 -0
  18. package/dist/client/theme-default/components/VPNavBarAppearance.vue +4 -1
  19. package/dist/client/theme-default/components/VPNavBarExtra.vue +2 -2
  20. package/dist/client/theme-default/components/VPNavBarSearch.vue +3 -3
  21. package/dist/client/theme-default/components/VPNavBarTitle.vue +26 -13
  22. package/dist/client/theme-default/components/VPNavScreenAppearance.vue +4 -1
  23. package/dist/client/theme-default/components/VPPage.vue +5 -0
  24. package/dist/client/theme-default/components/VPSponsors.vue +77 -0
  25. package/dist/client/theme-default/components/VPSponsorsGrid.vue +32 -0
  26. package/dist/client/theme-default/components/VPSwitchAppearance.vue +3 -3
  27. package/dist/client/theme-default/components/icons/VPIconHeart.vue +5 -0
  28. package/dist/client/theme-default/composables/outline.js +1 -19
  29. package/dist/client/theme-default/composables/sponsor-grid.js +92 -0
  30. package/dist/client/theme-default/composables/sponsor.js +87 -0
  31. package/dist/client/theme-default/index.js +4 -0
  32. package/dist/client/theme-default/styles/base.css +3 -0
  33. package/dist/client/theme-default/styles/vars.css +86 -1
  34. package/dist/client/theme-default/styles/vp-doc.css +8 -2
  35. package/dist/client/theme-default/styles/vp-sponsor.css +86 -0
  36. package/dist/client/theme-default/support/utils.js +19 -0
  37. package/dist/node/alias.js +60 -0
  38. package/dist/node/alias.js.map +1 -0
  39. package/dist/node/build/build.js +57 -0
  40. package/dist/node/build/build.js.map +1 -0
  41. package/dist/node/build/buildMPAClient.js +44 -0
  42. package/dist/node/build/buildMPAClient.js.map +1 -0
  43. package/dist/node/build/bundle.js +163 -0
  44. package/dist/node/build/bundle.js.map +1 -0
  45. package/dist/node/build/render.js +185 -0
  46. package/dist/node/build/render.js.map +1 -0
  47. package/dist/node/cli.js +37 -294
  48. package/dist/node/cli.js.map +1 -0
  49. package/dist/node/config.js +176 -0
  50. package/dist/node/config.js.map +1 -0
  51. package/dist/node/index.d.ts +19 -1
  52. package/dist/node/index.js +22 -37
  53. package/dist/node/index.js.map +1 -0
  54. package/dist/node/markdown/markdown.js +75 -0
  55. package/dist/node/markdown/markdown.js.map +1 -0
  56. package/dist/node/markdown/plugins/component.js +86 -0
  57. package/dist/node/markdown/plugins/component.js.map +1 -0
  58. package/dist/node/markdown/plugins/containers.js +41 -0
  59. package/dist/node/markdown/plugins/containers.js.map +1 -0
  60. package/dist/node/markdown/plugins/headings.js +25 -0
  61. package/dist/node/markdown/plugins/headings.js.map +1 -0
  62. package/dist/node/markdown/plugins/highlight.js +53 -0
  63. package/dist/node/markdown/plugins/highlight.js.map +1 -0
  64. package/dist/node/markdown/plugins/highlightLines.js +48 -0
  65. package/dist/node/markdown/plugins/highlightLines.js.map +1 -0
  66. package/dist/node/markdown/plugins/hoist.js +22 -0
  67. package/dist/node/markdown/plugins/hoist.js.map +1 -0
  68. package/dist/node/markdown/plugins/image.js +17 -0
  69. package/dist/node/markdown/plugins/image.js.map +1 -0
  70. package/dist/node/markdown/plugins/lineNumbers.js +23 -0
  71. package/dist/node/markdown/plugins/lineNumbers.js.map +1 -0
  72. package/dist/node/markdown/plugins/link.js +85 -0
  73. package/dist/node/markdown/plugins/link.js.map +1 -0
  74. package/dist/node/markdown/plugins/preWrapper.js +22 -0
  75. package/dist/node/markdown/plugins/preWrapper.js.map +1 -0
  76. package/dist/node/markdown/plugins/slugify.js +26 -0
  77. package/dist/node/markdown/plugins/slugify.js.map +1 -0
  78. package/dist/node/markdown/plugins/snippet.js +146 -0
  79. package/dist/node/markdown/plugins/snippet.js.map +1 -0
  80. package/dist/node/markdownToVue.js +166 -0
  81. package/dist/node/markdownToVue.js.map +1 -0
  82. package/dist/node/plugin.js +227 -0
  83. package/dist/node/plugin.js.map +1 -0
  84. package/dist/node/serve/serve.js +59 -0
  85. package/dist/node/serve/serve.js.map +1 -0
  86. package/dist/node/{serve-428d4610.js → serve-b5dc02b2.js} +26 -2
  87. package/dist/node/server.js +18 -0
  88. package/dist/node/server.js.map +1 -0
  89. package/dist/node/shared.js +72 -0
  90. package/dist/node/shared.js.map +1 -0
  91. package/dist/node/staticDataPlugin.js +99 -0
  92. package/dist/node/staticDataPlugin.js.map +1 -0
  93. package/dist/node/utils/getGitTimestamp.js +17 -0
  94. package/dist/node/utils/getGitTimestamp.js.map +1 -0
  95. package/dist/node/utils/parseHeader.js +57 -0
  96. package/dist/node/utils/parseHeader.js.map +1 -0
  97. package/dist/node/utils/slash.js +8 -0
  98. package/dist/node/utils/slash.js.map +1 -0
  99. package/package.json +4 -2
  100. package/types/default-theme.d.ts +12 -0
  101. package/types/shared.d.ts +11 -6
@@ -12249,6 +12249,7 @@ globby$2.exports.gitignore = gitignore;
12249
12249
  var globby = globby$2.exports;
12250
12250
 
12251
12251
  const EXTERNAL_URL_RE = /^https?:/i;
12252
+ const APPEARANCE_KEY = "vitepress-theme-appearance";
12252
12253
  const inBrowser = typeof window !== "undefined";
12253
12254
  function findMatchRoot(route, roots) {
12254
12255
  roots.sort((a, b) => {
@@ -13449,19 +13450,41 @@ function isObject$3(value) {
13449
13450
  return Object.prototype.toString.call(value) === "[object Object]";
13450
13451
  }
13451
13452
  async function resolveSiteData(root, userConfig, command = "serve", mode = "development") {
13453
+ var _a;
13452
13454
  userConfig = userConfig || (await resolveUserConfig(root, command, mode))[0];
13453
13455
  return {
13454
13456
  lang: userConfig.lang || "en-US",
13455
13457
  title: userConfig.title || "VitePress",
13456
13458
  description: userConfig.description || "A VitePress site",
13457
13459
  base: userConfig.base ? userConfig.base.replace(/([^/])$/, "$1/") : "/",
13458
- head: userConfig.head || [],
13460
+ head: resolveSiteDataHead(userConfig),
13461
+ appearance: (_a = userConfig.appearance) != null ? _a : true,
13459
13462
  themeConfig: userConfig.themeConfig || {},
13460
13463
  locales: userConfig.locales || {},
13461
13464
  langs: createLangDictionary(userConfig),
13462
13465
  scrollOffset: userConfig.scrollOffset || 90
13463
13466
  };
13464
13467
  }
13468
+ function resolveSiteDataHead(userConfig) {
13469
+ var _a, _b;
13470
+ const head = (_a = userConfig == null ? void 0 : userConfig.head) != null ? _a : [];
13471
+ if ((_b = userConfig == null ? void 0 : userConfig.appearance) != null ? _b : true) {
13472
+ head.push([
13473
+ "script",
13474
+ {},
13475
+ `
13476
+ ;(() => {
13477
+ const saved = localStorage.getItem('${APPEARANCE_KEY}')
13478
+ const prefereDark = window.matchMedia('(prefers-color-scheme: dark)').matches
13479
+ if (!saved || saved === 'auto' ? prefereDark : saved === 'dark') {
13480
+ document.documentElement.classList.add('dark')
13481
+ }
13482
+ })()
13483
+ `
13484
+ ]);
13485
+ }
13486
+ return head;
13487
+ }
13465
13488
 
13466
13489
  var toString = Object.prototype.toString;
13467
13490
 
@@ -40929,6 +40952,7 @@ async function renderPage(config, page, result, appChunk, cssChunk, pageToHashMa
40929
40952
  }).join("\n ");
40930
40953
  const stylesheetLink = cssChunk ? `<link rel="stylesheet" href="${siteData.base}${cssChunk.fileName}">` : "";
40931
40954
  const title = pageData.title && pageData.title !== "Home" ? `${pageData.title} | ${siteData.title}` : siteData.title;
40955
+ const description = pageData.description || siteData.description;
40932
40956
  const head = addSocialTags(title, ...siteData.head, ...filterOutHeadDescription(pageData.frontmatter.head));
40933
40957
  let inlinedScript = "";
40934
40958
  if (config.mpa && result) {
@@ -40949,7 +40973,7 @@ async function renderPage(config, page, result, appChunk, cssChunk, pageToHashMa
40949
40973
  <meta charset="utf-8">
40950
40974
  <meta name="viewport" content="width=device-width,initial-scale=1">
40951
40975
  <title>${title}</title>
40952
- <meta name="description" content="${pageData.description || siteData.description}">
40976
+ <meta name="description" content="${description}">
40953
40977
  ${stylesheetLink}
40954
40978
  ${preloadLinksString}
40955
40979
  ${prefetchLinkString}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createServer = void 0;
4
+ const vite_1 = require("vite");
5
+ const config_1 = require("./config");
6
+ const plugin_1 = require("./plugin");
7
+ async function createServer(root = process.cwd(), serverOptions = {}) {
8
+ const config = await (0, config_1.resolveConfig)(root);
9
+ return (0, vite_1.createServer)({
10
+ root: config.srcDir,
11
+ base: config.site.base,
12
+ // logLevel: 'warn',
13
+ plugins: (0, plugin_1.createVitePressPlugin)(root, config),
14
+ server: serverOptions
15
+ });
16
+ }
17
+ exports.createServer = createServer;
18
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/node/server.ts"],"names":[],"mappings":";;;AAAA,+BAAsE;AACtE,qCAAwC;AACxC,qCAAgD;AAEzC,KAAK,UAAU,YAAY,CAChC,OAAe,OAAO,CAAC,GAAG,EAAE,EAC5B,gBAA+B,EAAE;IAEjC,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAa,EAAC,IAAI,CAAC,CAAA;IAExC,OAAO,IAAA,mBAAgB,EAAC;QACtB,IAAI,EAAE,MAAM,CAAC,MAAM;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;QACtB,oBAAoB;QACpB,OAAO,EAAE,IAAA,8BAAqB,EAAC,IAAI,EAAE,MAAM,CAAC;QAC5C,MAAM,EAAE,aAAa;KACtB,CAAC,CAAA;AACJ,CAAC;AAbD,oCAaC"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveSiteDataByRoute = exports.createLangDictionary = exports.inBrowser = exports.APPEARANCE_KEY = exports.EXTERNAL_URL_RE = void 0;
4
+ exports.EXTERNAL_URL_RE = /^https?:/i;
5
+ exports.APPEARANCE_KEY = 'vitepress-theme-appearance';
6
+ // @ts-ignore
7
+ exports.inBrowser = typeof window !== 'undefined';
8
+ function findMatchRoot(route, roots) {
9
+ // first match to the routes with the most deep level.
10
+ roots.sort((a, b) => {
11
+ const levelDelta = b.split('/').length - a.split('/').length;
12
+ if (levelDelta !== 0) {
13
+ return levelDelta;
14
+ }
15
+ else {
16
+ return b.length - a.length;
17
+ }
18
+ });
19
+ for (const r of roots) {
20
+ if (route.startsWith(r))
21
+ return r;
22
+ }
23
+ }
24
+ function resolveLocales(locales, route) {
25
+ const localeRoot = findMatchRoot(route, Object.keys(locales));
26
+ return localeRoot ? locales[localeRoot] : undefined;
27
+ }
28
+ function createLangDictionary(siteData) {
29
+ const { locales } = siteData.themeConfig || {};
30
+ const siteLocales = siteData.locales;
31
+ return locales && siteLocales
32
+ ? Object.keys(locales).reduce((langs, path) => {
33
+ langs[path] = {
34
+ label: locales[path].label,
35
+ lang: siteLocales[path].lang
36
+ };
37
+ return langs;
38
+ }, {})
39
+ : {};
40
+ }
41
+ exports.createLangDictionary = createLangDictionary;
42
+ // this merges the locales data to the main data by the route
43
+ function resolveSiteDataByRoute(siteData, route) {
44
+ route = cleanRoute(siteData, route);
45
+ const localeData = resolveLocales(siteData.locales || {}, route);
46
+ const localeThemeConfig = resolveLocales(siteData.themeConfig.locales || {}, route);
47
+ // avoid object rest spread since this is going to run in the browser
48
+ // and spread is going to result in polyfill code
49
+ return Object.assign({}, siteData, localeData, {
50
+ themeConfig: Object.assign({}, siteData.themeConfig, localeThemeConfig, {
51
+ // clean the locales to reduce the bundle size
52
+ locales: {}
53
+ }),
54
+ lang: (localeData || siteData).lang,
55
+ // clean the locales to reduce the bundle size
56
+ locales: {},
57
+ langs: createLangDictionary(siteData)
58
+ });
59
+ }
60
+ exports.resolveSiteDataByRoute = resolveSiteDataByRoute;
61
+ /**
62
+ * Clean up the route by removing the `base` path if it's set in config.
63
+ */
64
+ function cleanRoute(siteData, route) {
65
+ if (!exports.inBrowser) {
66
+ return route;
67
+ }
68
+ const base = siteData.base;
69
+ const baseWithoutSuffix = base.endsWith('/') ? base.slice(0, -1) : base;
70
+ return route.slice(baseWithoutSuffix.length);
71
+ }
72
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/node/shared.ts"],"names":[],"mappings":";;;AAWa,QAAA,eAAe,GAAG,WAAW,CAAA;AAC7B,QAAA,cAAc,GAAG,4BAA4B,CAAA;AAE1D,aAAa;AACA,QAAA,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,CAAA;AAEtD,SAAS,aAAa,CAAC,KAAa,EAAE,KAAe;IACnD,sDAAsD;IACtD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAClB,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA;QAC5D,IAAI,UAAU,KAAK,CAAC,EAAE;YACpB,OAAO,UAAU,CAAA;SAClB;aAAM;YACL,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAA;SAC3B;IACH,CAAC,CAAC,CAAA;IAEF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;QACrB,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAA;KAClC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,OAA0B,EAC1B,KAAa;IAEb,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IAC7D,OAAO,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AACrD,CAAC;AAED,SAAgB,oBAAoB,CAAC,QAGpC;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAA;IAC9C,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAA;IACpC,OAAO,OAAO,IAAI,WAAW;QAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAC1C,KAAK,CAAC,IAAI,CAAC,GAAG;gBACZ,KAAK,EAAE,OAAQ,CAAC,IAAI,CAAC,CAAC,KAAK;gBAC3B,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI;aAC7B,CAAA;YACD,OAAO,KAAK,CAAA;QACd,CAAC,EAAE,EAAqD,CAAC;QAC3D,CAAC,CAAC,EAAE,CAAA;AACR,CAAC;AAfD,oDAeC;AAED,6DAA6D;AAC7D,SAAgB,sBAAsB,CACpC,QAAkB,EAClB,KAAa;IAEb,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IAEnC,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC,CAAA;IAChE,MAAM,iBAAiB,GAAG,cAAc,CACtC,QAAQ,CAAC,WAAW,CAAC,OAAO,IAAI,EAAE,EAClC,KAAK,CACN,CAAA;IAED,qEAAqE;IACrE,iDAAiD;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE;QAC7C,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,WAAW,EAAE,iBAAiB,EAAE;YACtE,8CAA8C;YAC9C,OAAO,EAAE,EAAE;SACZ,CAAC;QACF,IAAI,EAAE,CAAC,UAAU,IAAI,QAAQ,CAAC,CAAC,IAAI;QACnC,8CAA8C;QAC9C,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC;KACtC,CAAC,CAAA;AACJ,CAAC;AAxBD,wDAwBC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,QAAkB,EAAE,KAAa;IACnD,IAAI,CAAC,iBAAS,EAAE;QACd,OAAO,KAAK,CAAA;KACb;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;IAC1B,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEvE,OAAO,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;AAC9C,CAAC"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ // TODO figure out why it causes full page reload
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.staticDataPlugin = void 0;
5
+ const vite_1 = require("vite");
6
+ const path_1 = require("path");
7
+ const micromatch_1 = require("micromatch");
8
+ const loaderMatch = /\.data\.(j|t)s$/;
9
+ let server;
10
+ const idToLoaderModulesMap = Object.create(null);
11
+ // During build, the load hook will be called on the same file twice
12
+ // once for client and once for server build. Not only is this wasteful, it
13
+ // also leads to a race condition in loadConfigFromFile() that results in an
14
+ // fs unlink error. So we reuse the same Promise during build to avoid double
15
+ // loading.
16
+ let idToPendingPromiseMap = Object.create(null);
17
+ let isBuild = false;
18
+ exports.staticDataPlugin = {
19
+ name: 'vitepress:data',
20
+ configResolved(config) {
21
+ isBuild = config.command === 'build';
22
+ },
23
+ configureServer(_server) {
24
+ server = _server;
25
+ },
26
+ async load(id) {
27
+ var _a;
28
+ if (loaderMatch.test(id)) {
29
+ let _resolve;
30
+ if (isBuild) {
31
+ if (idToPendingPromiseMap[id]) {
32
+ return idToPendingPromiseMap[id];
33
+ }
34
+ idToPendingPromiseMap[id] = new Promise((r) => {
35
+ _resolve = r;
36
+ });
37
+ }
38
+ const base = (0, path_1.dirname)(id);
39
+ let pattern;
40
+ let loader;
41
+ const existing = idToLoaderModulesMap[id];
42
+ if (existing) {
43
+ ;
44
+ ({ pattern, loader } = existing);
45
+ }
46
+ else {
47
+ // use vite's load config util as a away to load Node.js file with
48
+ // TS & native ESM support
49
+ const loaderModule = (_a = (await (0, vite_1.loadConfigFromFile)({}, id))) === null || _a === void 0 ? void 0 : _a.config;
50
+ pattern =
51
+ typeof loaderModule.watch === 'string'
52
+ ? [loaderModule.watch]
53
+ : loaderModule.watch;
54
+ if (pattern) {
55
+ pattern = pattern.map((p) => {
56
+ return p.startsWith('./') ? p.slice(2) : p;
57
+ });
58
+ }
59
+ loader = loaderModule.load;
60
+ }
61
+ // load the data
62
+ const data = await loader();
63
+ // record loader module for HMR
64
+ if (server) {
65
+ idToLoaderModulesMap[id] = { base, pattern, loader };
66
+ }
67
+ const result = `export const data = JSON.parse(${JSON.stringify(JSON.stringify(data))})`;
68
+ if (_resolve)
69
+ _resolve(result);
70
+ return result;
71
+ }
72
+ },
73
+ transform(_code, id) {
74
+ if (server && loaderMatch.test(id)) {
75
+ // register this module as a glob importer
76
+ const { base, pattern } = idToLoaderModulesMap[id];
77
+ server._globImporters[id] = {
78
+ module: server.moduleGraph.getModuleById(id),
79
+ importGlobs: pattern === null || pattern === void 0 ? void 0 : pattern.map((pattern) => ({ base, pattern }))
80
+ };
81
+ }
82
+ return null;
83
+ },
84
+ handleHotUpdate(ctx) {
85
+ for (const id in idToLoaderModulesMap) {
86
+ const { base, pattern } = idToLoaderModulesMap[id];
87
+ const isLoaderFile = (0, vite_1.normalizePath)(ctx.file) === id;
88
+ if (isLoaderFile) {
89
+ // invalidate loader file
90
+ delete idToLoaderModulesMap[id];
91
+ }
92
+ if (isLoaderFile ||
93
+ (pattern && (0, micromatch_1.isMatch)((0, path_1.relative)(base, ctx.file), pattern))) {
94
+ ctx.modules.push(server.moduleGraph.getModuleById(id));
95
+ }
96
+ }
97
+ }
98
+ };
99
+ //# sourceMappingURL=staticDataPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staticDataPlugin.js","sourceRoot":"","sources":["../../src/node/staticDataPlugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getGitTimestamp = void 0;
4
+ const cross_spawn_1 = require("cross-spawn");
5
+ function getGitTimestamp(file) {
6
+ return new Promise((resolve, reject) => {
7
+ const child = (0, cross_spawn_1.spawn)('git', ['log', '-1', '--pretty="%ci"', file]);
8
+ let output = '';
9
+ child.stdout.on('data', (d) => (output += String(d)));
10
+ child.on('close', () => {
11
+ resolve(+new Date(output));
12
+ });
13
+ child.on('error', reject);
14
+ });
15
+ }
16
+ exports.getGitTimestamp = getGitTimestamp;
17
+ //# sourceMappingURL=getGitTimestamp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getGitTimestamp.js","sourceRoot":"","sources":["../../../src/node/utils/getGitTimestamp.ts"],"names":[],"mappings":";;;AAAA,6CAAmC;AAEnC,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,MAAM,KAAK,GAAG,IAAA,mBAAK,EAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAA;QACjE,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACrD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACrB,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;QAC5B,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;AACJ,CAAC;AAVD,0CAUC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.deeplyParseHeader = exports.parseHeader = exports.removeNonCodeWrappedHTML = void 0;
7
+ // Since VuePress needs to extract the header from the markdown source
8
+ // file and display it in the sidebar or title (#238), this file simply
9
+ // removes some unnecessary elements to make header displays well at
10
+ // sidebar or title.
11
+ //
12
+ // But header's parsing in the markdown content is done by the markdown
13
+ // loader based on markdown-it. markdown-it parser will will always keep
14
+ // HTML in headers, so in VuePress, after being parsed by the markdown
15
+ // loader, the raw HTML in headers will finally be parsed by Vue-loader.
16
+ // so that we can write HTML/Vue in the header. One exception is the HTML
17
+ // wrapped by <code>(markdown token: '`') tag.
18
+ const full_json_1 = __importDefault(require("markdown-it-emoji/lib/data/full.json"));
19
+ const parseEmojis = (str) => {
20
+ return str.replace(/:(.+?):/g, (placeholder, key) => full_json_1.default[key] || placeholder);
21
+ };
22
+ const unescapeHtml = (html) => html
23
+ .replace(/&quot;/g, '"')
24
+ .replace(/&#39;/g, "'")
25
+ .replace(/&#x3A;/g, ':')
26
+ .replace(/&lt;/g, '<')
27
+ .replace(/&gt;/g, '>');
28
+ const removeMarkdownTokens = (str) => str
29
+ .replace(/(\[(.[^\]]+)\]\((.[^)]+)\))/g, '$2') // []()
30
+ .replace(/(`|\*{1,3}|_)(.*?[^\\])\1/g, '$2') // `{t}` | *{t}* | **{t}** | ***{t}*** | _{t}_
31
+ .replace(/(\\)(\*|_|`|\!|<|\$)/g, '$2'); // remove escape char '\'
32
+ const remvoeCustomAnchor = (str) => str.replace(/\{#([a-z0-9\-_]+?)\}\s*$/, ''); // {#custom-header}
33
+ const trim = (str) => str.trim();
34
+ // This method remove the raw HTML but reserve the HTML wrapped by `<code>`.
35
+ // e.g.
36
+ // Input: "<a> b", Output: "b"
37
+ // Input: "`<a>` b", Output: "`<a>` b"
38
+ const removeNonCodeWrappedHTML = (str) => {
39
+ return String(str).replace(/(^|[^><`\\])<.*>([^><`]|$)/g, '$1$2');
40
+ };
41
+ exports.removeNonCodeWrappedHTML = removeNonCodeWrappedHTML;
42
+ const compose = (...processors) => {
43
+ if (processors.length === 0)
44
+ return (input) => input;
45
+ if (processors.length === 1)
46
+ return processors[0];
47
+ return processors.reduce((prev, next) => {
48
+ return (str) => next(prev(str));
49
+ });
50
+ };
51
+ // Unescape html, parse emojis and remove some md tokens.
52
+ exports.parseHeader = compose(unescapeHtml, parseEmojis, remvoeCustomAnchor, removeMarkdownTokens, trim);
53
+ // Also clean the html that isn't wrapped by code.
54
+ // Because we want to support using VUE components in headers.
55
+ // e.g. https://vuepress.vuejs.org/guide/using-vue.html#badge
56
+ exports.deeplyParseHeader = compose(exports.removeNonCodeWrappedHTML, exports.parseHeader);
57
+ //# sourceMappingURL=parseHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseHeader.js","sourceRoot":"","sources":["../../../src/node/utils/parseHeader.ts"],"names":[],"mappings":";;;;;;AAAA,sEAAsE;AACtE,uEAAuE;AACvE,oEAAoE;AACpE,oBAAoB;AACpB,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,sEAAsE;AACtE,wEAAwE;AACxE,yEAAyE;AACzE,8CAA8C;AAC9C,qFAA4D;AAE5D,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,EAAE;IAClC,OAAO,GAAG,CAAC,OAAO,CAChB,UAAU,EACV,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,CAAC,mBAAS,CAAC,GAAG,CAAC,IAAI,WAAW,CACpD,CAAA;AACH,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE,CACpC,IAAI;KACD,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;KACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;KACtB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;KACvB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;KACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AAE1B,MAAM,oBAAoB,GAAG,CAAC,GAAW,EAAE,EAAE,CAC3C,GAAG;KACA,OAAO,CAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC,OAAO;KACrD,OAAO,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC,8CAA8C;KAC1F,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAA,CAAC,yBAAyB;AAErE,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAE,EAAE,CACzC,GAAG,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAA,CAAC,mBAAmB;AAEjE,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;AAExC,4EAA4E;AAC5E,OAAO;AACP,gCAAgC;AAChC,sCAAsC;AAC/B,MAAM,wBAAwB,GAAG,CAAC,GAAW,EAAE,EAAE;IACtD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAA;AACnE,CAAC,CAAA;AAFY,QAAA,wBAAwB,4BAEpC;AAED,MAAM,OAAO,GAAG,CAAC,GAAG,UAAuC,EAAE,EAAE;IAC7D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAA;IAC5D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAA;IACjD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QACtC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,yDAAyD;AAC5C,QAAA,WAAW,GAAG,OAAO,CAChC,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,IAAI,CACL,CAAA;AAED,kDAAkD;AAClD,8DAA8D;AAC9D,6DAA6D;AAChD,QAAA,iBAAiB,GAAG,OAAO,CAAC,gCAAwB,EAAE,mBAAW,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.slash = void 0;
4
+ function slash(p) {
5
+ return p.replace(/\\/g, '/');
6
+ }
7
+ exports.slash = slash;
8
+ //# sourceMappingURL=slash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slash.js","sourceRoot":"","sources":["../../../src/node/utils/slash.ts"],"names":[],"mappings":";;;AAAA,SAAgB,KAAK,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AAC9B,CAAC;AAFD,sBAEC"}
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "vitepress",
3
- "version": "1.0.0-draft.1",
3
+ "version": "1.0.0-draft.2",
4
+ "packageManager": "pnpm@7.0.1",
4
5
  "description": "Vite & Vue powered static site generator",
5
6
  "main": "dist/node/index.js",
6
7
  "typings": "types/index.d.ts",
@@ -138,5 +139,6 @@
138
139
  "docs-build-only": "node ./bin/vitepress build docs",
139
140
  "docs-serve": "node ./bin/vitepress serve docs",
140
141
  "ci-docs": "run-s build docs-build"
141
- }
142
+ },
143
+ "readme": "# (WIP) VitePress 📝💨\n\n[![Test](https://github.com/vuejs/vitepress/workflows/Test/badge.svg)](https://github.com/vuejs/vitepress/actions)\n[![npm](https://img.shields.io/npm/v/vitepress)](https://www.npmjs.com/package/vitepress)\n\n---\n\nVitePress is [VuePress](https://vuepress.vuejs.org)' spiritual successor, built on top of [vite](https://github.com/vitejs/vite).\n\n## Documentation\n\nTo check out docs, visit [vitepress.vuejs.org](https://vitepress.vuejs.org).\n\n## Changelog\n\nDetailed changes for each release are documented in the [CHANGELOG](https://github.com/vuejs/vitepress/blob/main/CHANGELOG.md).\n\n## Contribution\n\nPlease make sure to read the [Contributing Guide](https://github.com/vuejs/vitepress/blob/main/.github/contributing.md) before making a pull request.\n\n## License\n\n[MIT](https://github.com/vuejs/vitepress/blob/main/LICENSE)\n\nCopyright (c) 2019-present, Yuxi (Evan) You\n"
142
144
  }
@@ -29,6 +29,11 @@ export namespace DefaultTheme {
29
29
  */
30
30
  socialLinks?: SocialLink[]
31
31
 
32
+ /**
33
+ * The footer configuration.
34
+ */
35
+ footer?: Footer
36
+
32
37
  /**
33
38
  * Adds locale menu to the nav. This option should be used when you have
34
39
  * your translated sites outside of the project.
@@ -133,6 +138,13 @@ export namespace DefaultTheme {
133
138
  | 'twitter'
134
139
  | 'youtube'
135
140
 
141
+ // footer --------------------------------------------------------------------
142
+
143
+ export interface Footer {
144
+ message?: string
145
+ copyright?: string
146
+ }
147
+
136
148
  // locales -------------------------------------------------------------------
137
149
 
138
150
  export interface LocaleLinks {
package/types/shared.d.ts CHANGED
@@ -11,19 +11,30 @@ export interface PageData {
11
11
  lastUpdated?: number
12
12
  }
13
13
 
14
+ export interface Header {
15
+ level: number
16
+ title: string
17
+ slug: string
18
+ }
19
+
14
20
  export interface SiteData<ThemeConfig = any> {
15
21
  base: string
22
+
16
23
  /**
17
24
  * Language of the site as it should be set on the `html` element.
25
+ *
18
26
  * @example `en-US`, `zh-CN`
19
27
  */
20
28
  lang: string
29
+
21
30
  title: string
22
31
  description: string
23
32
  head: HeadConfig[]
33
+ appearance: boolean
24
34
  themeConfig: ThemeConfig
25
35
  scrollOffset: number | string
26
36
  locales: Record<string, LocaleConfig>
37
+
27
38
  /**
28
39
  * Available locales for the site when it has defined `locales` in its
29
40
  * `themeConfig`. This object is otherwise empty. Keys are paths like `/` or
@@ -50,12 +61,6 @@ export type HeadConfig =
50
61
  | [string, Record<string, string>]
51
62
  | [string, Record<string, string>, string]
52
63
 
53
- export interface Header {
54
- level: number
55
- title: string
56
- slug: string
57
- }
58
-
59
64
  export interface LocaleConfig {
60
65
  lang: string
61
66
  title?: string