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
@@ -0,0 +1,163 @@
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.bundle = exports.failMark = exports.okMark = void 0;
7
+ const ora_1 = __importDefault(require("ora"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const fs_extra_1 = __importDefault(require("fs-extra"));
10
+ const slash_1 = require("../utils/slash");
11
+ const alias_1 = require("../alias");
12
+ const vite_1 = require("vite");
13
+ const plugin_1 = require("../plugin");
14
+ const buildMPAClient_1 = require("./buildMPAClient");
15
+ exports.okMark = '\x1b[32m✓\x1b[0m';
16
+ exports.failMark = '\x1b[31m✖\x1b[0m';
17
+ // bundles the VitePress app for both client AND server.
18
+ async function bundle(config, options) {
19
+ const { root, srcDir } = config;
20
+ const pageToHashMap = Object.create(null);
21
+ const clientJSMap = Object.create(null);
22
+ // define custom rollup input
23
+ // this is a multi-entry build - every page is considered an entry chunk
24
+ // the loading is done via filename conversion rules so that the
25
+ // metadata doesn't need to be included in the main chunk.
26
+ const input = {
27
+ app: path_1.default.resolve(alias_1.APP_PATH, 'index.js')
28
+ };
29
+ config.pages.forEach((file) => {
30
+ // page filename conversion
31
+ // foo/bar.md -> foo_bar.md
32
+ input[(0, slash_1.slash)(file).replace(/\//g, '_')] = path_1.default.resolve(srcDir, file);
33
+ });
34
+ // resolve options to pass to vite
35
+ const { rollupOptions } = options;
36
+ const resolveViteConfig = (ssr) => ({
37
+ root: srcDir,
38
+ base: config.site.base,
39
+ logLevel: 'warn',
40
+ plugins: (0, plugin_1.createVitePressPlugin)(root, config, ssr, pageToHashMap, clientJSMap),
41
+ // @ts-ignore
42
+ ssr: {
43
+ noExternal: ['vitepress']
44
+ },
45
+ build: {
46
+ ...options,
47
+ emptyOutDir: true,
48
+ ssr,
49
+ outDir: ssr ? config.tempDir : config.outDir,
50
+ cssCodeSplit: false,
51
+ rollupOptions: {
52
+ ...rollupOptions,
53
+ input,
54
+ // important so that each page chunk and the index export things for each
55
+ // other
56
+ preserveEntrySignatures: 'allow-extension',
57
+ output: {
58
+ ...rollupOptions === null || rollupOptions === void 0 ? void 0 : rollupOptions.output,
59
+ ...(ssr
60
+ ? {}
61
+ : {
62
+ chunkFileNames(chunk) {
63
+ // avoid ads chunk being intercepted by adblock
64
+ return /(?:Carbon|BuySell)Ads/.test(chunk.name)
65
+ ? `assets/chunks/ui-custom.[hash].js`
66
+ : `assets/chunks/[name].[hash].js`;
67
+ },
68
+ manualChunks(id, ctx) {
69
+ // move known framework code into a stable chunk so that
70
+ // custom theme changes do not invalidate hash for all pages
71
+ if (id.includes('plugin-vue:export-helper')) {
72
+ return 'framework';
73
+ }
74
+ if (isEagerChunk(id, ctx) &&
75
+ (/@vue\/(runtime|shared|reactivity)/.test(id) ||
76
+ /vitepress\/dist\/client/.test(id))) {
77
+ return 'framework';
78
+ }
79
+ }
80
+ })
81
+ }
82
+ },
83
+ // minify with esbuild in MPA mode (for CSS)
84
+ minify: ssr ? (config.mpa ? 'esbuild' : false) : !process.env.DEBUG
85
+ }
86
+ });
87
+ let clientResult;
88
+ let serverResult;
89
+ const spinner = (0, ora_1.default)();
90
+ spinner.start('building client + server bundles...');
91
+ try {
92
+ ;
93
+ [clientResult, serverResult] = await Promise.all([
94
+ config.mpa ? null : (0, vite_1.build)(resolveViteConfig(false)),
95
+ (0, vite_1.build)(resolveViteConfig(true))
96
+ ]);
97
+ }
98
+ catch (e) {
99
+ spinner.stopAndPersist({
100
+ symbol: exports.failMark
101
+ });
102
+ throw e;
103
+ }
104
+ spinner.stopAndPersist({
105
+ symbol: exports.okMark
106
+ });
107
+ if (config.mpa) {
108
+ // in MPA mode, we need to copy over the non-js asset files from the
109
+ // server build since there is no client-side build.
110
+ for (const chunk of serverResult.output) {
111
+ if (!chunk.fileName.endsWith('.js')) {
112
+ const tempPath = path_1.default.resolve(config.tempDir, chunk.fileName);
113
+ const outPath = path_1.default.resolve(config.outDir, chunk.fileName);
114
+ await fs_extra_1.default.copy(tempPath, outPath);
115
+ }
116
+ }
117
+ // also copy over public dir
118
+ const publicDir = path_1.default.resolve(config.srcDir, 'public');
119
+ if (fs_extra_1.default.existsSync(publicDir)) {
120
+ await fs_extra_1.default.copy(publicDir, config.outDir);
121
+ }
122
+ // build <script client> bundle
123
+ if (Object.keys(clientJSMap).length) {
124
+ clientResult = (await (0, buildMPAClient_1.buildMPAClient)(clientJSMap, config));
125
+ }
126
+ }
127
+ return { clientResult, serverResult, pageToHashMap };
128
+ }
129
+ exports.bundle = bundle;
130
+ const cache = new Map();
131
+ /**
132
+ * Check if a module is statically imported by at least one entry.
133
+ */
134
+ function isEagerChunk(id, { getModuleInfo }) {
135
+ if (id.includes('node_modules') &&
136
+ !/\.css($|\\?)/.test(id) &&
137
+ staticImportedByEntry(id, getModuleInfo, cache)) {
138
+ return 'vendor';
139
+ }
140
+ }
141
+ function staticImportedByEntry(id, getModuleInfo, cache, importStack = []) {
142
+ if (cache.has(id)) {
143
+ return cache.get(id);
144
+ }
145
+ if (importStack.includes(id)) {
146
+ // circular deps!
147
+ cache.set(id, false);
148
+ return false;
149
+ }
150
+ const mod = getModuleInfo(id);
151
+ if (!mod) {
152
+ cache.set(id, false);
153
+ return false;
154
+ }
155
+ if (mod.isEntry) {
156
+ cache.set(id, true);
157
+ return true;
158
+ }
159
+ const someImporterIs = mod.importers.some((importer) => staticImportedByEntry(importer, getModuleInfo, cache, importStack.concat(id)));
160
+ cache.set(id, someImporterIs);
161
+ return someImporterIs;
162
+ }
163
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../src/node/build/bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,185 @@
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.renderPage = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const fs_extra_1 = __importDefault(require("fs-extra"));
9
+ const config_1 = require("../config");
10
+ const vite_1 = require("vite");
11
+ const slash_1 = require("../utils/slash");
12
+ const escape_html_1 = __importDefault(require("escape-html"));
13
+ async function renderPage(config, page, // foo.md
14
+ result, appChunk, cssChunk, pageToHashMap, hashMapString) {
15
+ const { createApp } = require(path_1.default.join(config.tempDir, `app.js`));
16
+ const { app, router } = createApp();
17
+ const routePath = `/${page.replace(/\.md$/, '')}`;
18
+ const siteData = (0, config_1.resolveSiteDataByRoute)(config.site, routePath);
19
+ router.go(routePath);
20
+ // lazy require server-renderer for production build
21
+ // prioritize project root over vitepress' own dep
22
+ let rendererPath;
23
+ try {
24
+ rendererPath = require.resolve('vue/server-renderer', {
25
+ paths: [config.root]
26
+ });
27
+ }
28
+ catch (e) {
29
+ rendererPath = require.resolve('vue/server-renderer');
30
+ }
31
+ // render page
32
+ const content = await require(rendererPath).renderToString(app);
33
+ const pageName = page.replace(/\//g, '_');
34
+ // server build doesn't need hash
35
+ const pageServerJsFileName = pageName + '.js';
36
+ // for any initial page load, we only need the lean version of the page js
37
+ // since the static content is already on the page!
38
+ const pageHash = pageToHashMap[pageName.toLowerCase()];
39
+ const pageClientJsFileName = `assets/${pageName}.${pageHash}.lean.js`;
40
+ // resolve page data so we can render head tags
41
+ const { __pageData } = require(path_1.default.join(config.tempDir, pageServerJsFileName));
42
+ const pageData = JSON.parse(__pageData);
43
+ let preloadLinks = config.mpa
44
+ ? appChunk
45
+ ? [appChunk.fileName]
46
+ : []
47
+ : result && appChunk
48
+ ? [
49
+ ...new Set([
50
+ // resolve imports for index.js + page.md.js and inject script tags for
51
+ // them as well so we fetch everything as early as possible without having
52
+ // to wait for entry chunks to parse
53
+ ...resolvePageImports(config, page, result, appChunk),
54
+ pageClientJsFileName,
55
+ appChunk.fileName
56
+ ])
57
+ ]
58
+ : [];
59
+ let prefetchLinks = [];
60
+ const { shouldPreload } = config;
61
+ if (shouldPreload) {
62
+ prefetchLinks = preloadLinks.filter((link) => !shouldPreload(link, page));
63
+ preloadLinks = preloadLinks.filter((link) => shouldPreload(link, page));
64
+ }
65
+ const preloadLinksString = preloadLinks
66
+ .map((file) => {
67
+ return `<link rel="modulepreload" href="${siteData.base}${file}">`;
68
+ })
69
+ .join('\n ');
70
+ const prefetchLinkString = prefetchLinks
71
+ .map((file) => {
72
+ return `<link rel="prefetch" href="${siteData.base}${file}">`;
73
+ })
74
+ .join('\n ');
75
+ const stylesheetLink = cssChunk
76
+ ? `<link rel="stylesheet" href="${siteData.base}${cssChunk.fileName}">`
77
+ : '';
78
+ const title = pageData.title && pageData.title !== 'Home'
79
+ ? `${pageData.title} | ${siteData.title}`
80
+ : siteData.title;
81
+ const description = pageData.description || siteData.description;
82
+ const head = addSocialTags(title, ...siteData.head, ...filterOutHeadDescription(pageData.frontmatter.head));
83
+ let inlinedScript = '';
84
+ if (config.mpa && result) {
85
+ const matchingChunk = result.output.find((chunk) => chunk.type === 'chunk' &&
86
+ chunk.facadeModuleId === (0, slash_1.slash)(path_1.default.join(config.srcDir, page)));
87
+ if (matchingChunk) {
88
+ if (!matchingChunk.code.includes('import')) {
89
+ inlinedScript = `<script type="module">${matchingChunk.code}</script>`;
90
+ fs_extra_1.default.removeSync(path_1.default.resolve(config.outDir, matchingChunk.fileName));
91
+ }
92
+ else {
93
+ inlinedScript = `<script type="module" src="${siteData.base}${matchingChunk.fileName}"></script>`;
94
+ }
95
+ }
96
+ }
97
+ const html = `
98
+ <!DOCTYPE html>
99
+ <html lang="${siteData.lang}">
100
+ <head>
101
+ <meta charset="utf-8">
102
+ <meta name="viewport" content="width=device-width,initial-scale=1">
103
+ <title>${title}</title>
104
+ <meta name="description" content="${description}">
105
+ ${stylesheetLink}
106
+ ${preloadLinksString}
107
+ ${prefetchLinkString}
108
+ ${await renderHead(head)}
109
+ </head>
110
+ <body>
111
+ <div id="app">${content}</div>
112
+ ${config.mpa
113
+ ? ''
114
+ : `<script>__VP_HASH_MAP__ = JSON.parse(${hashMapString})</script>`}
115
+ ${appChunk
116
+ ? `<script type="module" async src="${siteData.base}${appChunk.fileName}"></script>`
117
+ : ``}
118
+ ${inlinedScript}
119
+ </body>
120
+ </html>`.trim();
121
+ const htmlFileName = path_1.default.join(config.outDir, page.replace(/\.md$/, '.html'));
122
+ await fs_extra_1.default.ensureDir(path_1.default.dirname(htmlFileName));
123
+ await fs_extra_1.default.writeFile(htmlFileName, html);
124
+ }
125
+ exports.renderPage = renderPage;
126
+ function resolvePageImports(config, page, result, appChunk) {
127
+ // find the page's js chunk and inject script tags for its imports so that
128
+ // they start fetching as early as possible
129
+ const srcPath = (0, vite_1.normalizePath)(fs_extra_1.default.realpathSync(path_1.default.resolve(config.srcDir, page)));
130
+ const pageChunk = result.output.find((chunk) => chunk.type === 'chunk' && chunk.facadeModuleId === srcPath);
131
+ return [
132
+ ...appChunk.imports,
133
+ ...appChunk.dynamicImports,
134
+ ...pageChunk.imports,
135
+ ...pageChunk.dynamicImports
136
+ ];
137
+ }
138
+ function renderHead(head) {
139
+ return Promise.all(head.map(async ([tag, attrs = {}, innerHTML = '']) => {
140
+ const openTag = `<${tag}${renderAttrs(attrs)}>`;
141
+ if (tag !== 'link' && tag !== 'meta') {
142
+ if (tag === 'script' &&
143
+ (attrs.type === undefined || attrs.type.includes('javascript'))) {
144
+ innerHTML = (await (0, vite_1.transformWithEsbuild)(innerHTML, 'inline-script.js', {
145
+ minify: true
146
+ })).code.trim();
147
+ }
148
+ return `${openTag}${innerHTML}</${tag}>`;
149
+ }
150
+ else {
151
+ return openTag;
152
+ }
153
+ })).then((tags) => tags.join('\n '));
154
+ }
155
+ function renderAttrs(attrs) {
156
+ return Object.keys(attrs)
157
+ .map((key) => {
158
+ return ` ${key}="${(0, escape_html_1.default)(attrs[key])}"`;
159
+ })
160
+ .join('');
161
+ }
162
+ function isMetaDescription(headConfig) {
163
+ const [type, attrs] = headConfig;
164
+ return type === 'meta' && (attrs === null || attrs === void 0 ? void 0 : attrs.name) === 'description';
165
+ }
166
+ function filterOutHeadDescription(head) {
167
+ return head ? head.filter((h) => !isMetaDescription(h)) : [];
168
+ }
169
+ function hasTag(head, tag) {
170
+ const [tagType, tagAttrs] = tag;
171
+ const [attr, value] = Object.entries(tagAttrs)[0]; // First key
172
+ return head.some(([type, attrs]) => type === tagType && attrs[attr] === value);
173
+ }
174
+ function addSocialTags(title, ...head) {
175
+ const tags = [
176
+ ['meta', { name: 'twitter:title', content: title }],
177
+ ['meta', { property: 'og:title', content: title }]
178
+ ];
179
+ tags.filter((tagAttrs) => {
180
+ if (!hasTag(head, tagAttrs))
181
+ head.push(tagAttrs);
182
+ });
183
+ return head;
184
+ }
185
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/node/build/render.ts"],"names":[],"mappings":"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"}