hmr-serve 0.1.0 → 0.1.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.
Files changed (63) hide show
  1. package/README.md +52 -19
  2. package/bin/hmr-serve.js +6 -1
  3. package/dist/cli/banner.d.ts +2 -0
  4. package/dist/cli/banner.js +60 -0
  5. package/dist/cli/banner.js.map +1 -0
  6. package/dist/cli/index.d.ts +1 -0
  7. package/dist/cli/index.js +10 -2
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/server/createServer.d.ts +5 -0
  10. package/dist/server/createServer.js +10 -1
  11. package/dist/server/createServer.js.map +1 -1
  12. package/dist/server/fs.d.ts +9 -4
  13. package/dist/server/fs.js +41 -7
  14. package/dist/server/fs.js.map +1 -1
  15. package/dist/server/index/watcher.d.ts +3 -0
  16. package/dist/server/index/watcher.js +10 -1
  17. package/dist/server/index/watcher.js.map +1 -1
  18. package/dist/server/mount.d.ts +11 -0
  19. package/dist/server/mount.js +19 -0
  20. package/dist/server/mount.js.map +1 -0
  21. package/dist/server/noNav.d.ts +22 -0
  22. package/dist/server/noNav.js +202 -0
  23. package/dist/server/noNav.js.map +1 -0
  24. package/dist/server/plugin.d.ts +6 -0
  25. package/dist/server/plugin.js +211 -20
  26. package/dist/server/plugin.js.map +1 -1
  27. package/dist/server/renderers/csv.d.ts +4 -0
  28. package/dist/server/renderers/csv.js +85 -0
  29. package/dist/server/renderers/csv.js.map +1 -0
  30. package/dist/server/renderers/html.js +1 -0
  31. package/dist/server/renderers/html.js.map +1 -1
  32. package/dist/server/renderers/markdown.js +61 -3
  33. package/dist/server/renderers/markdown.js.map +1 -1
  34. package/dist/server/renderers/media.d.ts +3 -0
  35. package/dist/server/renderers/media.js +19 -0
  36. package/dist/server/renderers/media.js.map +1 -0
  37. package/dist/server/renderers/registry.d.ts +8 -0
  38. package/dist/server/renderers/registry.js +39 -2
  39. package/dist/server/renderers/registry.js.map +1 -1
  40. package/dist/server/renderers/source.d.ts +5 -3
  41. package/dist/server/renderers/source.js +45 -15
  42. package/dist/server/renderers/source.js.map +1 -1
  43. package/dist/server/renderers/types.d.ts +3 -1
  44. package/dist/shared/types.d.ts +20 -8
  45. package/dist/shared/types.js +17 -3
  46. package/dist/shared/types.js.map +1 -1
  47. package/package.json +19 -8
  48. package/src/client/App.vue +284 -31
  49. package/src/client/api.ts +18 -1
  50. package/src/client/components/ContentPane.vue +337 -26
  51. package/src/client/components/FileIcon.vue +81 -0
  52. package/src/client/components/FileTree.vue +85 -0
  53. package/src/client/components/SettingsMenu.vue +168 -0
  54. package/src/client/components/TreeNode.vue +38 -9
  55. package/src/client/env.d.ts +6 -0
  56. package/src/client/favicon.svg +15 -0
  57. package/src/client/index.html +1 -0
  58. package/src/client/main.ts +8 -0
  59. package/src/client/router.ts +60 -0
  60. package/src/client/settings.ts +179 -0
  61. package/src/client/styles.css +570 -32
  62. package/src/client/theme.ts +51 -0
  63. package/src/shared/types.ts +38 -9
@@ -0,0 +1,202 @@
1
+ import { readdir, stat } from 'node:fs/promises';
2
+ import { basename, join } from 'node:path';
3
+ /** Index files checked (in order) when a directory URL is requested — same idea
4
+ * as vercel/serve: an index file wins over a directory listing. */
5
+ export const INDEX_NAMES = ['index.html', 'index.htm'];
6
+ /** Extensions rendered to an HTML preview page in `--no-nav` mode (everything
7
+ * else is served as raw bytes with the appropriate MIME type). */
8
+ export const PREVIEW_EXTENSIONS = new Set(['md', 'markdown', 'csv', 'tsv']);
9
+ const IGNORED_LISTING = new Set(['.git', 'node_modules', '.vite', 'dist', '.DS_Store']);
10
+ /** Find an index file inside `dirAbs`. Returns the absolute path, or null. */
11
+ export async function findIndexFile(dirAbs) {
12
+ for (const name of INDEX_NAMES) {
13
+ const candidate = join(dirAbs, name);
14
+ try {
15
+ if ((await stat(candidate)).isFile())
16
+ return candidate;
17
+ }
18
+ catch {
19
+ // try next
20
+ }
21
+ }
22
+ return null;
23
+ }
24
+ /** Directory listing entries (dirs first, then files), with an optional `..`. */
25
+ export async function listDirectory(dirAbs, urlPath) {
26
+ const entries = await readdir(dirAbs, { withFileTypes: true });
27
+ const items = [];
28
+ for (const entry of entries) {
29
+ if (entry.name.startsWith('.') || IGNORED_LISTING.has(entry.name))
30
+ continue;
31
+ if (entry.isDirectory()) {
32
+ items.push({
33
+ name: `${entry.name}/`,
34
+ href: `${entry.name}/`,
35
+ type: 'directory',
36
+ });
37
+ }
38
+ else if (entry.isFile()) {
39
+ items.push({
40
+ name: entry.name,
41
+ href: entry.name,
42
+ type: 'file',
43
+ });
44
+ }
45
+ }
46
+ items.sort((a, b) => {
47
+ if (a.type !== b.type)
48
+ return a.type === 'directory' ? -1 : 1;
49
+ return a.name.localeCompare(b.name);
50
+ });
51
+ const normalized = urlPath === '/' ? '/' : urlPath.replace(/\/?$/, '/');
52
+ if (normalized !== '/') {
53
+ items.unshift({ name: '../', href: '../', type: 'directory' });
54
+ }
55
+ return items;
56
+ }
57
+ function escapeHtml(value) {
58
+ return value
59
+ .replace(/&/g, '&')
60
+ .replace(/</g, '&lt;')
61
+ .replace(/>/g, '&gt;')
62
+ .replace(/"/g, '&quot;');
63
+ }
64
+ /** Vite client + full-reload on any watched change (wired via `full-reload`). */
65
+ const VITE_CLIENT_TAG = '<script type="module" src="/@vite/client"></script>';
66
+ const PREVIEW_STYLES = `
67
+ :root { color-scheme: dark light; }
68
+ body {
69
+ margin: 0;
70
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
71
+ background: #0d1117;
72
+ color: #e6edf3;
73
+ }
74
+ @media (prefers-color-scheme: light) {
75
+ body { background: #ffffff; color: #1f2328; }
76
+ }
77
+ .markdown-body {
78
+ box-sizing: border-box;
79
+ max-width: 980px;
80
+ margin: 0 auto;
81
+ padding: 32px 24px 64px;
82
+ }
83
+ .markdown-body table {
84
+ border-collapse: collapse;
85
+ width: 100%;
86
+ margin: 1em 0;
87
+ display: block;
88
+ overflow: auto;
89
+ }
90
+ .markdown-body th, .markdown-body td {
91
+ border: 1px solid #30363d;
92
+ padding: 6px 13px;
93
+ }
94
+ @media (prefers-color-scheme: light) {
95
+ .markdown-body th, .markdown-body td { border-color: #d0d7de; }
96
+ }
97
+ .markdown-body th { font-weight: 600; background: rgba(255,255,255,0.04); }
98
+ .markdown-body pre {
99
+ padding: 16px;
100
+ overflow: auto;
101
+ border-radius: 6px;
102
+ background: #161b22;
103
+ }
104
+ @media (prefers-color-scheme: light) {
105
+ .markdown-body pre { background: #f6f8fa; }
106
+ }
107
+ .markdown-body code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
108
+ `;
109
+ /** Wrap rendered markdown/csv/tsv HTML in a full document with live reload. */
110
+ export function wrapPreviewHtml(title, bodyHtml) {
111
+ return `<!DOCTYPE html>
112
+ <html lang="en">
113
+ <head>
114
+ <meta charset="utf-8" />
115
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
116
+ <title>${escapeHtml(title)}</title>
117
+ ${VITE_CLIENT_TAG}
118
+ <style>${PREVIEW_STYLES}</style>
119
+ </head>
120
+ <body>
121
+ <main class="markdown-body">${bodyHtml}</main>
122
+ </body>
123
+ </html>
124
+ `;
125
+ }
126
+ /** Inject the Vite client into an HTML document so edits trigger a full reload. */
127
+ export function injectViteClient(html) {
128
+ if (html.includes('/@vite/client'))
129
+ return html;
130
+ if (/<head[^>]*>/i.test(html)) {
131
+ return html.replace(/<head[^>]*>/i, (m) => `${m}\n ${VITE_CLIENT_TAG}`);
132
+ }
133
+ if (/<html[^>]*>/i.test(html)) {
134
+ return html.replace(/<html[^>]*>/i, (m) => `${m}\n <head>${VITE_CLIENT_TAG}</head>`);
135
+ }
136
+ return `${VITE_CLIENT_TAG}\n${html}`;
137
+ }
138
+ /** Serve-style directory listing page. */
139
+ export function renderDirectoryListing(urlPath, entries) {
140
+ const displayPath = urlPath === '/' ? '/' : urlPath.replace(/\/?$/, '/');
141
+ const title = `Index of ${displayPath}`;
142
+ const rootName = basename(displayPath.replace(/\/$/, '') || 'root') || '/';
143
+ const rows = entries
144
+ .map((entry) => {
145
+ const label = escapeHtml(entry.name);
146
+ const href = escapeHtml(entry.href);
147
+ const kind = entry.type === 'directory' ? 'dir' : 'file';
148
+ return ` <li class="${kind}"><a href="${href}">${label}</a></li>`;
149
+ })
150
+ .join('\n');
151
+ return `<!DOCTYPE html>
152
+ <html lang="en">
153
+ <head>
154
+ <meta charset="utf-8" />
155
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
156
+ <title>${escapeHtml(title)}</title>
157
+ ${VITE_CLIENT_TAG}
158
+ <style>
159
+ :root { color-scheme: dark light; }
160
+ body {
161
+ margin: 0;
162
+ font: 14px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
163
+ background: #0d1117;
164
+ color: #e6edf3;
165
+ }
166
+ @media (prefers-color-scheme: light) {
167
+ body { background: #fff; color: #1f2328; }
168
+ }
169
+ main { max-width: 48rem; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
170
+ h1 { font-size: 1.1rem; font-weight: 600; margin: 0 0 1rem; }
171
+ ul { list-style: none; margin: 0; padding: 0; border: 1px solid #30363d; border-radius: 8px; }
172
+ @media (prefers-color-scheme: light) { ul { border-color: #d0d7de; } }
173
+ li { border-top: 1px solid #30363d; }
174
+ li:first-child { border-top: 0; }
175
+ @media (prefers-color-scheme: light) { li { border-top-color: #d0d7de; } }
176
+ a {
177
+ display: block;
178
+ padding: 0.55rem 0.85rem;
179
+ color: #58a6ff;
180
+ text-decoration: none;
181
+ }
182
+ @media (prefers-color-scheme: light) { a { color: #0969da; } }
183
+ a:hover { background: rgba(56, 139, 253, 0.1); }
184
+ .note { margin-top: 1rem; opacity: 0.55; font-size: 12px; }
185
+ </style>
186
+ </head>
187
+ <body>
188
+ <main>
189
+ <h1>${escapeHtml(title)}</h1>
190
+ <ul>
191
+ ${rows}
192
+ </ul>
193
+ <p class="note">hmr-serve · ${escapeHtml(rootName)}</p>
194
+ </main>
195
+ </body>
196
+ </html>
197
+ `;
198
+ }
199
+ export function isPreviewExtension(ext) {
200
+ return PREVIEW_EXTENSIONS.has(ext.toLowerCase());
201
+ }
202
+ //# sourceMappingURL=noNav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noNav.js","sourceRoot":"","sources":["../../src/server/noNav.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,16 @@ export interface HmrServePluginOptions {
6
6
  /** Absolute path to the folder being served. */
7
7
  targetDir: string;
8
8
  registry?: RendererRegistry;
9
+ /** Serve files directly (like `serve`) instead of the Vue nav shell. */
10
+ noNav?: boolean;
9
11
  }
10
12
  /**
11
13
  * The hmr-serve Vite plugin. Owns the search index + file watcher and exposes
12
14
  * the tree/file/raw/search endpoints. Content live-updates are pushed over
13
15
  * Vite's own HMR websocket (a custom event) rather than a hand-rolled channel.
16
+ *
17
+ * With `noNav: true`, skips the Vue shell and serves the folder like `serve`:
18
+ * index file → that file; otherwise a directory listing; markdown/csv/tsv are
19
+ * rendered to HTML; edits trigger a Vite full-reload.
14
20
  */
15
21
  export declare function hmrServePlugin(options: HmrServePluginOptions): Plugin;
@@ -1,11 +1,17 @@
1
1
  import { resolve, sep } from 'node:path';
2
+ import { stat } from 'node:fs/promises';
2
3
  import { RendererRegistry } from './renderers/registry.js';
3
4
  import { SearchIndex } from './index/searchIndex.js';
4
5
  import { createWatchHandler } from './index/watcher.js';
5
- import { buildTree, extOf, isFile, listSupportedFiles, readFileText, toRelPosix } from './fs.js';
6
+ import { mountPrefixFor } from './mount.js';
7
+ import { findIndexFile, injectViteClient, isPreviewExtension, listDirectory, renderDirectoryListing, wrapPreviewHtml, } from './noNav.js';
8
+ import { buildTree, contentTypeFor, extOf, isFile, listSupportedFiles, readFileBuffer, readFileText, toRelPosix, } from './fs.js';
6
9
  import { HMR_UPDATE_EVENT, } from '../shared/types.js';
7
10
  /** Base path for all server API routes. */
8
11
  export const API_BASE = '/__hmrserve';
12
+ /** Render kinds whose bytes the browser loads directly from /raw (so the file
13
+ * response carries a `src` rather than inlined `html`). */
14
+ const RAW_KINDS = new Set(['iframe', 'image', 'video']);
9
15
  function sendJson(res, status, body) {
10
16
  const payload = JSON.stringify(body);
11
17
  res.statusCode = status;
@@ -13,10 +19,16 @@ function sendJson(res, status, body) {
13
19
  res.setHeader('Cache-Control', 'no-store');
14
20
  res.end(payload);
15
21
  }
22
+ function sendHtml(res, status, html) {
23
+ res.statusCode = status;
24
+ res.setHeader('Content-Type', 'text/html; charset=utf-8');
25
+ res.setHeader('Cache-Control', 'no-store');
26
+ res.end(html);
27
+ }
16
28
  /** Resolve a client-supplied relative path against the served root, rejecting
17
29
  * anything that escapes it (traversal / absolute paths). Returns null if unsafe. */
18
30
  function safeResolve(targetDir, rel) {
19
- if (!rel)
31
+ if (rel == null)
20
32
  return null;
21
33
  const abs = resolve(targetDir, rel);
22
34
  if (abs !== targetDir && !abs.startsWith(targetDir + sep))
@@ -27,26 +39,90 @@ function queryParam(req, key) {
27
39
  const url = new URL(req.url ?? '', 'http://localhost');
28
40
  return url.searchParams.get(key);
29
41
  }
42
+ /** The mirror-path URL a raw file is served at: `/__hmrserve/raw/<rel>`, with
43
+ * each path segment encoded but the slashes preserved so the browser's base URL
44
+ * matches the folder layout and relative links/assets resolve naturally. */
45
+ function rawUrl(rel) {
46
+ return `${API_BASE}/raw/${rel.split('/').map(encodeURIComponent).join('/')}`;
47
+ }
48
+ /** Extract the folder-relative path from a mounted `/raw/...` request, dropping
49
+ * the query string (e.g. the cache-busting `?v=`). Returns '' for the mount root. */
50
+ function rawRelPath(req) {
51
+ const pathname = new URL(req.url ?? '', 'http://localhost').pathname;
52
+ return decodeURIComponent(pathname).replace(/^\/+/, '');
53
+ }
54
+ function wantsHtml(req) {
55
+ return (req.headers.accept ?? '').includes('text/html');
56
+ }
30
57
  /**
31
58
  * The hmr-serve Vite plugin. Owns the search index + file watcher and exposes
32
59
  * the tree/file/raw/search endpoints. Content live-updates are pushed over
33
60
  * Vite's own HMR websocket (a custom event) rather than a hand-rolled channel.
61
+ *
62
+ * With `noNav: true`, skips the Vue shell and serves the folder like `serve`:
63
+ * index file → that file; otherwise a directory listing; markdown/csv/tsv are
64
+ * rendered to HTML; edits trigger a Vite full-reload.
34
65
  */
35
66
  export function hmrServePlugin(options) {
36
67
  const targetDir = options.targetDir;
37
68
  const registry = options.registry ?? new RendererRegistry();
69
+ const noNav = Boolean(options.noNav);
38
70
  const index = new SearchIndex();
71
+ // Content is routed under this prefix (the folder's name) so bookmarkable URLs
72
+ // like /aurora-notes/docs/intro.md never collide with the shell's root assets.
73
+ const mountPrefix = mountPrefixFor(targetDir);
39
74
  return {
40
75
  name: 'hmr-serve',
76
+ // Expose the mount prefix to the client for its History-API routing. Injected
77
+ // into every shell response (whether Vite serves '/' or our fallback serves a
78
+ // deep content URL), so the client can parse the initial URL synchronously.
79
+ transformIndexHtml() {
80
+ if (noNav)
81
+ return [];
82
+ return [
83
+ {
84
+ tag: 'script',
85
+ injectTo: 'head-prepend',
86
+ children: `window.__HMR_SERVE_MOUNT__=${JSON.stringify(mountPrefix)};`,
87
+ },
88
+ ];
89
+ },
41
90
  async configureServer(server) {
42
- // 1. Initial index scan.
91
+ const within = (abs) => abs === targetDir || abs.startsWith(targetDir + sep) ? toRelPosix(targetDir, abs) : null;
92
+ server.watcher.add(targetDir);
93
+ if (noNav) {
94
+ // Full-page reload whenever anything under the target changes. Pages
95
+ // include /@vite/client so the browser picks this up automatically.
96
+ const reload = () => {
97
+ server.ws.send({ type: 'full-reload' });
98
+ };
99
+ server.watcher.on('add', (abs) => {
100
+ if (within(abs))
101
+ reload();
102
+ });
103
+ server.watcher.on('change', (abs) => {
104
+ if (within(abs))
105
+ reload();
106
+ });
107
+ server.watcher.on('unlink', (abs) => {
108
+ if (within(abs))
109
+ reload();
110
+ });
111
+ server.middlewares.use((req, res, next) => {
112
+ handleNoNavRequest(req, res, next, { targetDir, registry }).catch(next);
113
+ });
114
+ return;
115
+ }
116
+ // —— Nav mode (default): Vue shell + JSON APIs ————————————————————————
117
+ // 1. Initial index scan. Binary files (image/video) are indexed by name
118
+ // only — never read as text.
43
119
  const files = await listSupportedFiles(targetDir, registry);
44
120
  await Promise.all(files.map(async (rel) => {
45
- const raw = await readFileText(resolve(targetDir, rel));
46
- index.add(rel, extOf(rel), raw);
121
+ const ext = extOf(rel);
122
+ const raw = registry.isText(ext) ? await readFileText(resolve(targetDir, rel)) : '';
123
+ index.add(rel, ext, raw);
47
124
  }));
48
125
  // 2. Reuse Vite's chokidar watcher (single source of truth) for the target.
49
- server.watcher.add(targetDir);
50
126
  const emit = (update) => {
51
127
  server.ws.send({ type: 'custom', event: HMR_UPDATE_EVENT, data: update });
52
128
  };
@@ -54,10 +130,9 @@ export function hmrServePlugin(options) {
54
130
  index,
55
131
  extOf,
56
132
  isSupported: (ext) => registry.supports(ext),
57
- readFile: (rel) => readFileText(resolve(targetDir, rel)),
133
+ readFile: (rel) => registry.isText(extOf(rel)) ? readFileText(resolve(targetDir, rel)) : Promise.resolve(''),
58
134
  emit,
59
135
  });
60
- const within = (abs) => abs === targetDir || abs.startsWith(targetDir + sep) ? toRelPosix(targetDir, abs) : null;
61
136
  server.watcher.on('add', (abs) => {
62
137
  const rel = within(abs);
63
138
  if (rel)
@@ -75,8 +150,12 @@ export function hmrServePlugin(options) {
75
150
  });
76
151
  server.httpServer?.once('close', () => handlers.dispose());
77
152
  // 3. API routes.
153
+ server.middlewares.use(`${API_BASE}/config`, (_req, res) => {
154
+ const body = { categories: registry.categories() };
155
+ sendJson(res, 200, body);
156
+ });
78
157
  server.middlewares.use(`${API_BASE}/tree`, (_req, res, next) => {
79
- buildTree(targetDir, registry)
158
+ buildTree(targetDir)
80
159
  .then((nodes) => {
81
160
  const body = { root: targetDir, nodes };
82
161
  sendJson(res, 200, body);
@@ -95,15 +174,16 @@ export function hmrServePlugin(options) {
95
174
  .then((ok) => {
96
175
  if (!ok)
97
176
  return sendJson(res, 404, { error: 'not found' });
98
- return readFileText(abs).then((raw) => {
177
+ // Binary kinds (image/video) render from metadata only — don't slurp
178
+ // their bytes as text.
179
+ const rawText = registry.isText(ext) ? readFileText(abs) : Promise.resolve('');
180
+ return rawText.then((raw) => {
99
181
  const result = registry.render({ path: rel, ext, raw });
100
182
  const body = {
101
183
  path: rel,
102
184
  kind: result.kind,
103
185
  title: result.title,
104
- ...(result.kind === 'iframe'
105
- ? { iframeSrc: `${API_BASE}/raw?path=${encodeURIComponent(rel)}` }
106
- : { html: result.html }),
186
+ ...(RAW_KINDS.has(result.kind) ? { src: rawUrl(rel) } : { html: result.html }),
107
187
  ...(result.language ? { language: result.language } : {}),
108
188
  };
109
189
  sendJson(res, 200, body);
@@ -111,23 +191,24 @@ export function hmrServePlugin(options) {
111
191
  })
112
192
  .catch(next);
113
193
  });
194
+ // Raw content is served at mirror paths (/raw/<rel>) so a framed HTML doc's
195
+ // relative links and assets (css/js/images/fonts) resolve against the real
196
+ // folder layout. Serves any file under the target (bytes preserved), not
197
+ // just HTML, because those assets can be any type.
114
198
  server.middlewares.use(`${API_BASE}/raw`, (req, res, next) => {
115
- const abs = safeResolve(targetDir, queryParam(req, 'path'));
199
+ const abs = safeResolve(targetDir, rawRelPath(req));
116
200
  if (!abs)
117
201
  return sendJson(res, 400, { error: 'invalid path' });
118
- if (extOf(abs) !== 'html' && extOf(abs) !== 'htm') {
119
- return sendJson(res, 415, { error: 'raw only serves html' });
120
- }
121
202
  isFile(abs)
122
203
  .then((ok) => {
123
204
  if (!ok)
124
205
  return sendJson(res, 404, { error: 'not found' });
125
- return readFileText(abs).then((raw) => {
206
+ return readFileBuffer(abs).then((bytes) => {
126
207
  res.statusCode = 200;
127
- res.setHeader('Content-Type', 'text/html; charset=utf-8');
208
+ res.setHeader('Content-Type', contentTypeFor(extOf(abs)));
128
209
  res.setHeader('X-Content-Type-Options', 'nosniff');
129
210
  res.setHeader('Cache-Control', 'no-store');
130
- res.end(raw);
211
+ res.end(bytes);
131
212
  });
132
213
  })
133
214
  .catch(next);
@@ -137,7 +218,117 @@ export function hmrServePlugin(options) {
137
218
  const body = { query, hits: index.search(query) };
138
219
  sendJson(res, 200, body);
139
220
  });
221
+ // History fallback for bookmarkable content URLs. A top-level navigation
222
+ // (GET, Accept: text/html) under the mount prefix that maps to a real file
223
+ // serves the app shell; the client then selects that file. Everything else
224
+ // falls through to Vite → 404 (appType 'mpa'), so a stray absolute link
225
+ // like /contact can't nest the app inside the content iframe. Registered
226
+ // directly in configureServer, so it runs BEFORE Vite's internal
227
+ // middlewares and catches these paths before they 404.
228
+ server.middlewares.use((req, res, next) => {
229
+ if (req.method !== 'GET' && req.method !== 'HEAD')
230
+ return next();
231
+ if (!wantsHtml(req))
232
+ return next();
233
+ const pathname = decodeURIComponent(new URL(req.url ?? '/', 'http://localhost').pathname);
234
+ const isMountRoot = pathname === mountPrefix || pathname === `${mountPrefix}/`;
235
+ if (!isMountRoot && !pathname.startsWith(`${mountPrefix}/`))
236
+ return next();
237
+ const serveShell = () => {
238
+ readFileText(resolve(server.config.root, 'index.html'))
239
+ .then((raw) => server.transformIndexHtml(req.url ?? '/', raw, req.originalUrl))
240
+ .then((html) => {
241
+ sendHtml(res, 200, html);
242
+ })
243
+ .catch(next);
244
+ };
245
+ if (isMountRoot)
246
+ return serveShell();
247
+ const abs = safeResolve(targetDir, pathname.slice(mountPrefix.length + 1));
248
+ if (!abs)
249
+ return next();
250
+ isFile(abs)
251
+ .then((ok) => (ok ? serveShell() : next()))
252
+ .catch(next);
253
+ });
140
254
  },
141
255
  };
142
256
  }
257
+ async function handleNoNavRequest(req, res, next, ctx) {
258
+ if (req.method !== 'GET' && req.method !== 'HEAD')
259
+ return next();
260
+ const pathname = decodeURIComponent(new URL(req.url ?? '/', 'http://localhost').pathname);
261
+ // Let Vite handle its own tooling paths.
262
+ if (pathname.startsWith('/@') ||
263
+ pathname.startsWith('/node_modules/') ||
264
+ pathname.startsWith('/__vite') ||
265
+ pathname.startsWith(API_BASE)) {
266
+ return next();
267
+ }
268
+ const rel = pathname === '/' ? '' : pathname.replace(/^\/+/, '');
269
+ const abs = safeResolve(ctx.targetDir, rel || '.');
270
+ if (!abs) {
271
+ res.statusCode = 400;
272
+ res.end('Bad Request');
273
+ return;
274
+ }
275
+ let info;
276
+ try {
277
+ info = await stat(abs);
278
+ }
279
+ catch {
280
+ res.statusCode = 404;
281
+ res.end('Not Found');
282
+ return;
283
+ }
284
+ if (info.isDirectory()) {
285
+ const indexAbs = await findIndexFile(abs);
286
+ if (indexAbs) {
287
+ await serveNoNavFile(res, ctx, indexAbs);
288
+ return;
289
+ }
290
+ // Browsers requesting assets won't ask for HTML listings.
291
+ if (!wantsHtml(req) && pathname !== '/') {
292
+ res.statusCode = 404;
293
+ res.end('Not Found');
294
+ return;
295
+ }
296
+ const urlPath = pathname === '/' ? '/' : pathname.replace(/\/?$/, '/');
297
+ const entries = await listDirectory(abs, urlPath);
298
+ sendHtml(res, 200, renderDirectoryListing(urlPath, entries));
299
+ return;
300
+ }
301
+ if (!info.isFile()) {
302
+ res.statusCode = 404;
303
+ res.end('Not Found');
304
+ return;
305
+ }
306
+ await serveNoNavFile(res, ctx, abs);
307
+ }
308
+ async function serveNoNavFile(res, ctx, abs) {
309
+ const rel = toRelPosix(ctx.targetDir, abs);
310
+ const ext = extOf(rel);
311
+ if (isPreviewExtension(ext) && ctx.registry.supports(ext)) {
312
+ const raw = await readFileText(abs);
313
+ const result = ctx.registry.render({ path: rel, ext, raw });
314
+ const body = result.html ?? '';
315
+ sendHtml(res, 200, wrapPreviewHtml(result.title || basenameFallback(rel), body));
316
+ return;
317
+ }
318
+ if (ext === 'html' || ext === 'htm') {
319
+ const raw = await readFileText(abs);
320
+ sendHtml(res, 200, injectViteClient(raw));
321
+ return;
322
+ }
323
+ const bytes = await readFileBuffer(abs);
324
+ res.statusCode = 200;
325
+ res.setHeader('Content-Type', contentTypeFor(ext));
326
+ res.setHeader('X-Content-Type-Options', 'nosniff');
327
+ res.setHeader('Cache-Control', 'no-store');
328
+ res.end(bytes);
329
+ }
330
+ function basenameFallback(rel) {
331
+ const parts = rel.split('/');
332
+ return parts[parts.length - 1] || rel;
333
+ }
143
334
  //# sourceMappingURL=plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/server/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/server/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Renderer } from './types.js';
2
+ /** RFC 4180-style parser: quoted fields, escaped quotes, embedded delimiters/newlines. */
3
+ export declare function parseDelimited(raw: string, delimiter: string): string[][];
4
+ export declare const csvRenderer: Renderer;