@life-and-dev/mdsite 0.1.1 → 0.2.3

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 (53) hide show
  1. package/README.md +39 -21
  2. package/dist/commands/commands.test.js +91 -30
  3. package/dist/commands/commands.test.js.map +1 -1
  4. package/dist/commands/init.js +54 -4
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/prepare.js +22 -14
  7. package/dist/commands/prepare.js.map +1 -1
  8. package/dist/commands/prepare.test.js +33 -39
  9. package/dist/commands/prepare.test.js.map +1 -1
  10. package/dist/commands/preview.d.ts +1 -0
  11. package/dist/commands/preview.js +11 -10
  12. package/dist/commands/preview.js.map +1 -1
  13. package/dist/commands/start.d.ts +1 -0
  14. package/dist/commands/start.js +23 -10
  15. package/dist/commands/start.js.map +1 -1
  16. package/dist/commands/stop.js +6 -3
  17. package/dist/commands/stop.js.map +1 -1
  18. package/dist/commands/workflows.test.js +76 -19
  19. package/dist/commands/workflows.test.js.map +1 -1
  20. package/dist/config/mdsite-config.js +1 -1
  21. package/dist/config/mdsite-config.js.map +1 -1
  22. package/dist/config/mdsite-config.test.js +1 -1
  23. package/dist/config/mdsite-config.test.js.map +1 -1
  24. package/dist/config/menu.js +0 -1
  25. package/dist/config/menu.js.map +1 -1
  26. package/dist/index.js +42 -7
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.test.js +40 -0
  29. package/dist/index.test.js.map +1 -1
  30. package/dist/process/child-process.test.js +3 -3
  31. package/dist/process/child-process.test.js.map +1 -1
  32. package/dist/process/runtime-state.d.ts +6 -5
  33. package/dist/process/runtime-state.js +13 -17
  34. package/dist/process/runtime-state.js.map +1 -1
  35. package/dist/process/runtime-state.test.js +21 -13
  36. package/dist/process/runtime-state.test.js.map +1 -1
  37. package/dist/renderer/mdsite-nuxt.d.ts +2 -0
  38. package/dist/renderer/mdsite-nuxt.js +29 -32
  39. package/dist/renderer/mdsite-nuxt.js.map +1 -1
  40. package/dist/renderer/mdsite-nuxt.test.js +37 -48
  41. package/dist/renderer/mdsite-nuxt.test.js.map +1 -1
  42. package/mdsite-nuxt/app/composables/useAppTheme.ts +22 -3
  43. package/mdsite-nuxt/app/config/themes.ts +38 -0
  44. package/mdsite-nuxt/app/pages/[...slug].vue +4 -2
  45. package/mdsite-nuxt/app/pages/index.vue +4 -2
  46. package/mdsite-nuxt/assets/default-favicon.svg +223 -0
  47. package/mdsite-nuxt/nuxt.config.ts +11 -1
  48. package/mdsite-nuxt/scripts/generate-favicons.test.ts +123 -0
  49. package/mdsite-nuxt/scripts/generate-favicons.ts +60 -61
  50. package/mdsite-nuxt/scripts/renderer-hooks.test.ts +0 -8
  51. package/mdsite-nuxt/scripts/renderer-hooks.ts +1 -2
  52. package/mdsite-nuxt/scripts/sync-content.ts +5 -79
  53. package/package.json +1 -1
package/README.md CHANGED
@@ -39,7 +39,7 @@ mdsite stop
39
39
  mdsite prepare github
40
40
  ```
41
41
 
42
- All commands operate on the **current working directory** as the content/project directory. `version` prints the CLI version from the root `package.json`. `prepare github` requires `mdsite.yml` and writes a GitHub Pages workflow for that content directory.
42
+ All commands operate on the **current working directory** as the content/project directory. `version` prints the CLI version from the root `package.json`. `prepare github` requires `mdsite.yml` and writes a GitHub Pages workflow for that content directory. `start` and `preview` also accept `-d`/`--detached` to run a tracked background server, and `--host` (or `--host <addr>`) to expose the server on the network — see the start and preview sections below.
43
43
 
44
44
  ## Supported CLI flow
45
45
 
@@ -67,7 +67,9 @@ mdsite start
67
67
 
68
68
  `start` requires `mdsite.yml`, prepares renderer compatibility files, installs renderer dependencies when `node_modules` is missing, and runs the renderer in the foreground with terminal output. Closing the terminal or interrupting the command stops the foreground process.
69
69
 
70
- Use `mdsite start -d` or `mdsite start --detached` to run a tracked background renderer instead. Detached start logs to `.mdsite-runtime/start.log` in the content directory and opens the browser automatically after the server is ready.
70
+ Use `mdsite start -d` or `mdsite start --detached` to run a tracked background renderer instead. Detached start logs to `<server.path>/start.log` (e.g. `.mdsite/start.log`) in the content directory and opens the browser automatically after the server is ready.
71
+
72
+ Add `--host` (or `--host <addr>`) to expose the dev server on the network, e.g. `mdsite start --host` binds `0.0.0.0` so other devices on your LAN can reach it; `mdsite start --host 192.168.1.10` binds a specific address. Combine with detached mode as in `mdsite start -d --host`.
71
73
 
72
74
  ### 3. Generate static output
73
75
 
@@ -85,7 +87,9 @@ mdsite preview
85
87
 
86
88
  `preview` is a **post-generate** local preview step. It requires `mdsite.yml` and an existing generated renderer build. By default, it runs in the foreground with terminal output. Closing the terminal or interrupting the command stops the foreground preview.
87
89
 
88
- Use `mdsite preview -d` or `mdsite preview --detached` to run a tracked background preview instead. Detached preview logs to `mdsite.log` in the content directory and writes runtime state under `.mdsite-runtime/`.
90
+ Use `mdsite preview -d` or `mdsite preview --detached` to run a tracked background preview instead. Detached preview logs to `<server.path>/preview.log` (e.g. `.mdsite/preview.log`) in the content directory and writes runtime state under `<server.path>/` (e.g. `.mdsite/`).
91
+
92
+ Add `--host` (or `--host <addr>`) to expose the preview server on the network, the same way as `mdsite start`, e.g. `mdsite preview --host` binds `0.0.0.0`.
89
93
 
90
94
  ### 5. Stop background processes
91
95
 
@@ -101,18 +105,23 @@ mdsite stop
101
105
  mdsite prepare github
102
106
  ```
103
107
 
104
- `prepare github` requires `mdsite.yml`, prepares the configured local renderer, and writes `.github/workflows/deploy.yml` in the current content directory. The generated workflow uses the configured local `server.path` during GitHub Actions; it does not add a renderer clone or pull workflow.
108
+ `prepare github` requires `mdsite.yml` and writes a **self-adapting** `.github/workflows/deploy.yml` in the current content directory. The workflow checks out with `submodules: true`, then detects `bin/mdsite.js` to choose how to build:
109
+
110
+ - **Source build** (when `bin/mdsite.js` is present — the source repo): `npm install && npm run build && node bin/mdsite.js generate`.
111
+ - **End-user build** (otherwise): `npx -y @life-and-dev/mdsite generate`.
112
+
113
+ Either way it uploads the root `.output/public/`, runs on Node 24 (pinned via `.nvmrc`), and caches dependencies keyed on `.mdsite/package-lock.json`. No committed renderer tree is required for end users.
105
114
 
106
115
  For production deployments, see the [Deployment guide](https://life-and-dev.github.io/mdsite/deploy).
107
116
 
108
117
  ## Renderer resolution
109
118
 
110
- Renderer resolution is **local-only**:
119
+ The CLI is **dev-aware** about where it runs the renderer:
111
120
 
112
- - If `mdsite.yml` sets `server.path`, the CLI first looks for that path **relative to the content directory**.
113
- - If that directory is not present, the CLI falls back to the bundled renderer shipped with the package.
114
- - If the renderer's `node_modules` directory is missing, the CLI runs `npm install` in the renderer directory.
115
- - `prepare github` requires the configured `server.path` renderer directory to exist; unlike `start`, `generate`, and `preview`, it does not fall back to the bundled renderer when that configured path is absent.
121
+ - **Bundled renderer as the local submodule (this repo / contributors)** — when the bundled renderer is the checked-out `mdsite-nuxt/` submodule and is NOT inside `node_modules`, the CLI runs it **in place**, so live-editing of `mdsite-nuxt/` keeps working.
122
+ - **Bundled renderer inside `node_modules` (end users / `npm install` / `npx` / CI)** — the CLI copies the bundled renderer into `<server.path>` (default `.mdsite`) under your content directory and runs it there. The copy preserves any committed `<server.path>/package.json` and `<server.path>/package-lock.json` so the lockfile pair can be version-controlled.
123
+ - If the resolved renderer directory has no `node_modules`, the CLI runs `npm install` in it.
124
+ - `mdsite prepare github` generates a **self-adapting** workflow (see below) and never clones or pulls the renderer itself.
116
125
 
117
126
  ## Expected content project layout
118
127
 
@@ -128,15 +137,24 @@ After `mdsite init`, `mdsite generate`, and optional tracked background commands
128
137
 
129
138
  ```text
130
139
  your-content/
131
- ├── mdsite.yml
132
- ├── _menu.yml # orchestration/compatibility artifact
133
- ├── .mdsite-runtime/ # created when tracked background processes are started
134
- ├── .output/ # created by mdsite generate, or server.output
140
+ ├── mdsite.yml # your site config (written by init)
141
+ ├── .nvmrc # Node 24 (written by init)
142
+ ├── .gitignore # managed by init (ignores .mdsite/* and .output/)
143
+ ├── .mdsite/ # renderer working dir (<server.path>)
144
+ │ ├── package.json # committed lockfile pair (written by init)
145
+ │ ├── package-lock.json # committed lockfile pair (written by init)
146
+ │ ├── start.json # tracked-detached runtime state (when used)
147
+ │ ├── preview.json # tracked-detached runtime state (when used)
148
+ │ ├── start.log # detached start log (when used)
149
+ │ ├── preview.log # detached preview log (when used)
150
+ │ └── public/ # generated favicons + site.webmanifest
151
+ ├── .output/ # deployable static site (server.output)
152
+ │ └── public/
135
153
  ├── index.md
136
154
  └── other-pages.md
137
155
  ```
138
156
 
139
- The CLI also writes renderer compatibility files such as `_menu.yml` and the renderer's `.env` / `content.config.yml` as part of orchestration. Tracked background commands write runtime files under `.mdsite-runtime/`.
157
+ The content directory holds only your own files (`*.md`, `mdsite.yml`, `.nvmrc`, `.gitignore`, your favicon source). Everything the renderer needs at runtime — materialized source, `node_modules`, compatibility files (`.env`, `content.config.yml`), generated favicons, and detached-process state — lives inside the `.mdsite/` renderer working dir. Only `.mdsite/package.json` and `.mdsite/package-lock.json` are meant to be committed; everything else under `.mdsite/` and `.output/` is gitignored.
140
158
 
141
159
  ## Troubleshooting
142
160
 
@@ -150,10 +168,10 @@ mdsite init
150
168
 
151
169
  ### Renderer directory issues
152
170
 
153
- - If `server.path` is set, confirm it points to a renderer directory relative to the content directory.
154
- - If that path does not exist, the CLI falls back to the bundled renderer shipped with the package.
155
- - If neither renderer location exists, the CLI cannot run.
156
- - For `prepare github`, the configured `server.path` must exist because workflow generation uses the configured renderer path directly.
171
+ - In this repo (dev), the bundled `mdsite-nuxt/` submodule runs in place; make sure it is checked out (`git submodule update --init --recursive`).
172
+ - For end users (`npm install` / `npx`), the CLI materializes the bundled renderer into `<server.path>` (default `.mdsite`) under your content directory; no manual renderer checkout is needed.
173
+ - If the resolved renderer directory has no `node_modules`, the CLI runs `npm install` in it automatically.
174
+ - `mdsite prepare github` generates a self-adapting workflow and never clones or pulls the renderer itself.
157
175
 
158
176
  ### Renderer dependencies missing
159
177
 
@@ -178,12 +196,12 @@ For more, see the user guides on [Markdown](https://life-and-dev.github.io/mdsit
178
196
 
179
197
  | Key | Default | Description |
180
198
  | ------------------------ | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
181
- | `favicon` | empty string | Optional favicon path relative to the content directory. |
199
+ | `favicon` | empty string | Source image path relative to the content directory (any format `sharp` supports). The renderer generates derived favicons into the renderer's `public/` dir. |
182
200
  | `features.bibleTooltips` | `true` | Enables renderer Bible tooltip support. |
183
201
  | `features.sourceEdit` | `true` | Enables renderer source-edit support. |
184
- | `menu` | derived from markdown files | Menu structure used to generate `_menu.yml`. |
202
+ | `menu` | derived from markdown files | Menu structure for the sidebar navigation. |
185
203
  | `server.output` | `.output` | Static output path under the content directory. |
186
- | `server.path` | `.mdsite` | Renderer path relative to the content directory. Local commands fall back to the bundled renderer when this path is absent, except `prepare github`. |
204
+ | `server.path` | `.mdsite` | The renderer working directory, relative to the content directory. End-user runs materialize the bundled renderer here; in the dev repo the bundled submodule runs in place. |
187
205
  | `server.repo` | `https://github.com/life-and-dev/mdsite` | Stored for compatibility and generated renderer config. It is not used for active clone/pull behaviour. |
188
206
  | `site.canonical` | empty string | Canonical site URL passed to the renderer. |
189
207
  | `site.name` | derived from `index.md` or directory | Site name passed to the renderer. |
@@ -1,7 +1,10 @@
1
1
  import { beforeEach, describe, expect, it, vi } from 'vitest';
2
2
  vi.mock('node:fs/promises', () => ({
3
3
  access: vi.fn(),
4
+ copyFile: vi.fn(),
4
5
  cp: vi.fn(),
6
+ mkdir: vi.fn(),
7
+ readFile: vi.fn(),
5
8
  rm: vi.fn(),
6
9
  writeFile: vi.fn()
7
10
  }));
@@ -27,6 +30,7 @@ vi.mock('../renderer/mdsite-nuxt.js', () => ({
27
30
  ensurePreviewArtifacts: vi.fn(),
28
31
  ensureRendererDependencies: vi.fn(),
29
32
  generateRenderer: vi.fn(),
33
+ getBundledRendererDir: vi.fn(),
30
34
  getRendererGeneratedOutputPath: vi.fn(),
31
35
  prepareRenderer: vi.fn(),
32
36
  previewRendererForeground: vi.fn(),
@@ -34,11 +38,12 @@ vi.mock('../renderer/mdsite-nuxt.js', () => ({
34
38
  startRendererForeground: vi.fn(),
35
39
  startRendererInBackground: vi.fn()
36
40
  }));
37
- import { access, cp, rm, writeFile } from 'node:fs/promises';
41
+ import path from 'node:path';
42
+ import { access, copyFile, cp, mkdir, readFile, rm, writeFile } from 'node:fs/promises';
38
43
  import { buildDefaultMdsiteConfig, loadMdsiteConfig, resolveContentOutputPath, serializeMdsiteConfig } from '../config/mdsite-config.js';
39
44
  import { openUrlInBrowser, stopProcess, waitForTcpPort } from '../process/child-process.js';
40
45
  import { clearRuntimeState, getRuntimeLogPath, isProcessRunning, readRuntimeState, writeRuntimeState } from '../process/runtime-state.js';
41
- import { ensurePreviewArtifacts, ensureRendererDependencies, generateRenderer, getRendererGeneratedOutputPath, prepareRenderer, previewRendererForeground, previewRendererInBackground, startRendererForeground, startRendererInBackground } from '../renderer/mdsite-nuxt.js';
46
+ import { ensurePreviewArtifacts, ensureRendererDependencies, generateRenderer, getBundledRendererDir, getRendererGeneratedOutputPath, prepareRenderer, previewRendererForeground, previewRendererInBackground, startRendererForeground, startRendererInBackground } from '../renderer/mdsite-nuxt.js';
42
47
  import { runGenerateCommand } from './generate.js';
43
48
  import { runInitCommand } from './init.js';
44
49
  import { runPreviewCommand } from './preview.js';
@@ -48,6 +53,10 @@ const accessMock = vi.mocked(access);
48
53
  const cpMock = vi.mocked(cp);
49
54
  const rmMock = vi.mocked(rm);
50
55
  const writeFileMock = vi.mocked(writeFile);
56
+ const copyFileMock = vi.mocked(copyFile);
57
+ const mkdirMock = vi.mocked(mkdir);
58
+ const readFileMock = vi.mocked(readFile);
59
+ const getBundledRendererDirMock = vi.mocked(getBundledRendererDir);
51
60
  const buildDefaultConfigMock = vi.mocked(buildDefaultMdsiteConfig);
52
61
  const loadConfigMock = vi.mocked(loadMdsiteConfig);
53
62
  const resolveOutputMock = vi.mocked(resolveContentOutputPath);
@@ -88,14 +97,12 @@ describe('command helpers', () => {
88
97
  vi.useRealTimers();
89
98
  loadConfigMock.mockResolvedValue(loadedConfig);
90
99
  prepareRendererMock.mockResolvedValue({ rendererDir: '/renderer', rendererEnv: { TEST: '1' } });
91
- getRuntimeLogPathMock.mockImplementation((contentDir, kind) => {
92
- if (kind === 'preview') {
93
- return `${contentDir}/mdsite.log`;
94
- }
95
- return `${contentDir}/.mdsite-runtime/${kind}.log`;
100
+ getRuntimeLogPathMock.mockImplementation((configDir, config, kind) => {
101
+ return `${configDir}/${config.server.path}/${kind}.log`;
96
102
  });
97
- resolveOutputMock.mockReturnValue('/content/public');
103
+ resolveOutputMock.mockReturnValue('/content/.output/public');
98
104
  getRendererGeneratedOutputPathMock.mockReturnValue('/renderer/.output/public');
105
+ getBundledRendererDirMock.mockReturnValue('/home/gizbar/git/mdsite/mdsite-nuxt');
99
106
  openUrlInBrowserMock.mockResolvedValue(true);
100
107
  waitForTcpPortMock.mockResolvedValue(true);
101
108
  });
@@ -108,6 +115,13 @@ describe('command helpers', () => {
108
115
  expect(buildDefaultConfigMock).toHaveBeenCalledWith('/content');
109
116
  expect(writeFileMock).toHaveBeenCalledWith('/content/mdsite.yml', 'serialized-config', 'utf8');
110
117
  expect(writeFileMock).toHaveBeenCalledWith('/content/.nvmrc', '24\n', 'utf8');
118
+ expect(mkdirMock).toHaveBeenCalledWith(path.join('/content', '.renderer'), { recursive: true });
119
+ expect(copyFileMock).toHaveBeenCalledWith(expect.stringContaining('mdsite-nuxt/package.json'), path.join('/content', '.renderer', 'package.json'));
120
+ expect(copyFileMock).toHaveBeenCalledWith(expect.stringContaining('mdsite-nuxt/package-lock.json'), path.join('/content', '.renderer', 'package-lock.json'));
121
+ expect(writeFileMock).toHaveBeenCalledWith('/content/.gitignore', expect.stringContaining('.renderer/*'), 'utf8');
122
+ expect(writeFileMock).toHaveBeenCalledWith('/content/.gitignore', expect.stringContaining('!.renderer/package.json'), 'utf8');
123
+ expect(writeFileMock).toHaveBeenCalledWith('/content/.gitignore', expect.stringContaining('!.renderer/package-lock.json'), 'utf8');
124
+ expect(writeFileMock).toHaveBeenCalledWith('/content/.gitignore', expect.stringContaining('.output/'), 'utf8');
111
125
  accessMock.mockResolvedValueOnce(undefined);
112
126
  await expect(runInitCommand('/content')).rejects.toThrow('mdsite.yml already exists at /content/mdsite.yml.');
113
127
  });
@@ -119,6 +133,9 @@ describe('command helpers', () => {
119
133
  await expect(runInitCommand('/content')).resolves.toBe('Created mdsite.yml in /content (.nvmrc was already present)');
120
134
  expect(writeFileMock).toHaveBeenCalledWith('/content/mdsite.yml', 'serialized-config', 'utf8');
121
135
  expect(writeFileMock).not.toHaveBeenCalledWith('/content/.nvmrc', expect.anything(), expect.anything());
136
+ expect(mkdirMock).toHaveBeenCalledWith(path.join('/content', '.renderer'), { recursive: true });
137
+ expect(copyFileMock).toHaveBeenCalledWith(expect.stringContaining('mdsite-nuxt/package.json'), path.join('/content', '.renderer', 'package.json'));
138
+ expect(writeFileMock).toHaveBeenCalledWith('/content/.gitignore', expect.any(String), 'utf8');
122
139
  });
123
140
  it('runStartCommand starts the renderer in the foreground by default without runtime metadata', async () => {
124
141
  await expect(runStartCommand('/content')).resolves.toBeUndefined();
@@ -133,7 +150,6 @@ describe('command helpers', () => {
133
150
  readRuntimeStateMock.mockResolvedValueOnce({ kind: 'start', pid: 44 });
134
151
  isProcessRunningMock.mockReturnValueOnce(true);
135
152
  await expect(runStartCommand('/content', { detached: true })).rejects.toThrow('mdsite start is already running with PID 44.');
136
- expect(loadConfigMock).not.toHaveBeenCalled();
137
153
  });
138
154
  it('runStartCommand starts detached renderer for stale state and persists fresh runtime metadata', async () => {
139
155
  vi.useFakeTimers();
@@ -141,13 +157,13 @@ describe('command helpers', () => {
141
157
  readRuntimeStateMock.mockResolvedValueOnce({ kind: 'start', pid: 44 });
142
158
  isProcessRunningMock.mockReturnValueOnce(false);
143
159
  startRendererInBackgroundMock.mockResolvedValueOnce(777);
144
- await expect(runStartCommand('/content', { detached: true })).resolves.toBe('mdsite start running in background (PID 777). Log: /content/.mdsite-runtime/start.log');
160
+ await expect(runStartCommand('/content', { detached: true })).resolves.toBe('mdsite start running in background (PID 777). Log: /content/.renderer/start.log');
145
161
  expect(ensureRendererDependenciesMock).toHaveBeenCalledWith('/renderer');
146
162
  expect(waitForTcpPortMock).toHaveBeenCalledWith('localhost', 3000);
147
163
  expect(waitForTcpPortMock.mock.invocationCallOrder[0]).toBeGreaterThan(writeRuntimeStateMock.mock.invocationCallOrder[0] ?? 0);
148
164
  expect(openUrlInBrowserMock.mock.invocationCallOrder[0]).toBeGreaterThan(waitForTcpPortMock.mock.invocationCallOrder[0] ?? 0);
149
165
  expect(openUrlInBrowserMock).toHaveBeenCalledWith('http://localhost:3000');
150
- expect(writeRuntimeStateMock).toHaveBeenCalledWith('/content', expect.objectContaining({
166
+ expect(writeRuntimeStateMock).toHaveBeenCalledWith('/content', loadedConfig.config, expect.objectContaining({
151
167
  kind: 'start',
152
168
  pid: 777,
153
169
  rendererDir: '/renderer',
@@ -162,7 +178,7 @@ describe('command helpers', () => {
162
178
  rendererEnv: { HOST: '127.0.0.1', PORT: '4173', NUXT_HOST: 'start.local', NUXT_PORT: '4321' }
163
179
  });
164
180
  startRendererInBackgroundMock.mockResolvedValueOnce(778);
165
- await expect(runStartCommand('/content', { detached: true })).resolves.toBe('mdsite start running in background (PID 778). Log: /content/.mdsite-runtime/start.log');
181
+ await expect(runStartCommand('/content', { detached: true })).resolves.toBe('mdsite start running in background (PID 778). Log: /content/.renderer/start.log');
166
182
  expect(waitForTcpPortMock).toHaveBeenCalledWith('start.local', 4321);
167
183
  expect(openUrlInBrowserMock).toHaveBeenCalledWith('http://start.local:4321');
168
184
  });
@@ -170,7 +186,7 @@ describe('command helpers', () => {
170
186
  readRuntimeStateMock.mockResolvedValueOnce(null);
171
187
  startRendererInBackgroundMock.mockResolvedValueOnce(779);
172
188
  waitForTcpPortMock.mockResolvedValueOnce(false);
173
- await expect(runStartCommand('/content', { detached: true })).resolves.toBe('mdsite start running in background (PID 779). Log: /content/.mdsite-runtime/start.log');
189
+ await expect(runStartCommand('/content', { detached: true })).resolves.toBe('mdsite start running in background (PID 779). Log: /content/.renderer/start.log');
174
190
  expect(waitForTcpPortMock).toHaveBeenCalledWith('localhost', 3000);
175
191
  expect(openUrlInBrowserMock).not.toHaveBeenCalled();
176
192
  });
@@ -178,9 +194,30 @@ describe('command helpers', () => {
178
194
  readRuntimeStateMock.mockResolvedValueOnce(null);
179
195
  startRendererInBackgroundMock.mockResolvedValueOnce(780);
180
196
  waitForTcpPortMock.mockRejectedValueOnce(new Error('connect failed'));
181
- await expect(runStartCommand('/content', { detached: true })).resolves.toBe('mdsite start running in background (PID 780). Log: /content/.mdsite-runtime/start.log');
197
+ await expect(runStartCommand('/content', { detached: true })).resolves.toBe('mdsite start running in background (PID 780). Log: /content/.renderer/start.log');
182
198
  expect(openUrlInBrowserMock).not.toHaveBeenCalled();
183
199
  });
200
+ it('runStartCommand exposes the foreground renderer on the network when host is set', async () => {
201
+ await expect(runStartCommand('/content', { host: '0.0.0.0' })).resolves.toBeUndefined();
202
+ expect(startRendererForegroundMock).toHaveBeenCalledWith('/renderer', expect.objectContaining({
203
+ TEST: '1',
204
+ NUXT_HOST: '0.0.0.0',
205
+ HOST: '0.0.0.0',
206
+ NITRO_HOST: '0.0.0.0'
207
+ }));
208
+ });
209
+ it('runStartCommand binds the detached renderer to a custom host when host is set', async () => {
210
+ readRuntimeStateMock.mockResolvedValueOnce(null);
211
+ startRendererInBackgroundMock.mockResolvedValueOnce(781);
212
+ await expect(runStartCommand('/content', { detached: true, host: '0.0.0.0' })).resolves.toBe('mdsite start running in background (PID 781). Log: /content/.renderer/start.log');
213
+ expect(startRendererInBackgroundMock).toHaveBeenCalledWith('/renderer', expect.objectContaining({
214
+ NUXT_HOST: '0.0.0.0',
215
+ HOST: '0.0.0.0',
216
+ NITRO_HOST: '0.0.0.0'
217
+ }), '/content/.renderer/start.log');
218
+ expect(waitForTcpPortMock).toHaveBeenCalledWith('0.0.0.0', 3000);
219
+ expect(openUrlInBrowserMock).toHaveBeenCalledWith('http://0.0.0.0:3000');
220
+ });
184
221
  it('runPreviewCommand previews in the foreground by default without runtime metadata', async () => {
185
222
  await expect(runPreviewCommand('/content')).resolves.toBeUndefined();
186
223
  expect(readRuntimeStateMock).not.toHaveBeenCalled();
@@ -205,14 +242,13 @@ describe('command helpers', () => {
205
242
  readRuntimeStateMock.mockResolvedValueOnce({ kind: 'preview', pid: 55 });
206
243
  isProcessRunningMock.mockReturnValueOnce(true);
207
244
  await expect(runPreviewCommand('/content', { detached: true })).rejects.toThrow('mdsite preview is already running with PID 55.');
208
- expect(loadConfigMock).not.toHaveBeenCalled();
209
245
  });
210
246
  it('runPreviewCommand enforces preview artifacts and persists preview runtime state in detached mode', async () => {
211
247
  vi.useFakeTimers();
212
248
  vi.setSystemTime(new Date('2026-04-10T13:00:00.000Z'));
213
249
  readRuntimeStateMock.mockResolvedValueOnce(null);
214
250
  previewRendererInBackgroundMock.mockResolvedValueOnce(888);
215
- await expect(runPreviewCommand('/content', { detached: true })).resolves.toBe('mdsite preview running in background (PID 888). URL: http://localhost:3000 Log: /content/mdsite.log');
251
+ await expect(runPreviewCommand('/content', { detached: true })).resolves.toBe('mdsite preview running in background (PID 888). URL: http://localhost:3000 Log: /content/.renderer/preview.log');
216
252
  expect(ensurePreviewArtifactsMock).toHaveBeenCalledWith('/renderer');
217
253
  expect(ensurePreviewArtifactsMock.mock.invocationCallOrder[0]).toBeGreaterThan(ensureRendererDependenciesMock.mock.invocationCallOrder[0] ?? 0);
218
254
  expect(previewRendererInBackgroundMock).toHaveBeenCalledWith('/renderer', expect.objectContaining({
@@ -223,12 +259,12 @@ describe('command helpers', () => {
223
259
  PORT: '3000',
224
260
  NITRO_HOST: 'localhost',
225
261
  NITRO_PORT: '3000'
226
- }), '/content/mdsite.log');
262
+ }), '/content/.renderer/preview.log');
227
263
  expect(waitForTcpPortMock).toHaveBeenCalledWith('localhost', 3000);
228
264
  expect(waitForTcpPortMock.mock.invocationCallOrder[0]).toBeGreaterThan(writeRuntimeStateMock.mock.invocationCallOrder[0] ?? 0);
229
265
  expect(openUrlInBrowserMock.mock.invocationCallOrder[0]).toBeGreaterThan(waitForTcpPortMock.mock.invocationCallOrder[0] ?? 0);
230
266
  expect(openUrlInBrowserMock).toHaveBeenCalledWith('http://localhost:3000');
231
- expect(writeRuntimeStateMock).toHaveBeenCalledWith('/content', expect.objectContaining({
267
+ expect(writeRuntimeStateMock).toHaveBeenCalledWith('/content', loadedConfig.config, expect.objectContaining({
232
268
  kind: 'preview',
233
269
  pid: 888,
234
270
  command: ['npm', 'run', 'preview'],
@@ -242,7 +278,7 @@ describe('command helpers', () => {
242
278
  rendererEnv: { HOST: '127.0.0.1', PORT: '4173', NUXT_HOST: 'preview.local', NUXT_PORT: '4321' }
243
279
  });
244
280
  previewRendererInBackgroundMock.mockResolvedValueOnce(999);
245
- await expect(runPreviewCommand('/content', { detached: true })).resolves.toBe('mdsite preview running in background (PID 999). URL: http://preview.local:4321 Log: /content/mdsite.log');
281
+ await expect(runPreviewCommand('/content', { detached: true })).resolves.toBe('mdsite preview running in background (PID 999). URL: http://preview.local:4321 Log: /content/.renderer/preview.log');
246
282
  expect(previewRendererInBackgroundMock).toHaveBeenCalledWith('/renderer', expect.objectContaining({
247
283
  HOST: 'preview.local',
248
284
  PORT: '4321',
@@ -250,7 +286,7 @@ describe('command helpers', () => {
250
286
  NUXT_PORT: '4321',
251
287
  NITRO_HOST: 'preview.local',
252
288
  NITRO_PORT: '4321'
253
- }), '/content/mdsite.log');
289
+ }), '/content/.renderer/preview.log');
254
290
  expect(waitForTcpPortMock).toHaveBeenCalledWith('preview.local', 4321);
255
291
  expect(openUrlInBrowserMock).toHaveBeenCalledWith('http://preview.local:4321');
256
292
  });
@@ -261,7 +297,7 @@ describe('command helpers', () => {
261
297
  rendererEnv: { HOST: '127.0.0.1', PORT: '4173' }
262
298
  });
263
299
  previewRendererInBackgroundMock.mockResolvedValueOnce(1000);
264
- await expect(runPreviewCommand('/content', { detached: true })).resolves.toBe('mdsite preview running in background (PID 1000). URL: http://127.0.0.1:4173 Log: /content/mdsite.log');
300
+ await expect(runPreviewCommand('/content', { detached: true })).resolves.toBe('mdsite preview running in background (PID 1000). URL: http://127.0.0.1:4173 Log: /content/.renderer/preview.log');
265
301
  expect(previewRendererInBackgroundMock).toHaveBeenCalledWith('/renderer', expect.objectContaining({
266
302
  HOST: '127.0.0.1',
267
303
  PORT: '4173',
@@ -269,15 +305,40 @@ describe('command helpers', () => {
269
305
  NUXT_PORT: '4173',
270
306
  NITRO_HOST: '127.0.0.1',
271
307
  NITRO_PORT: '4173'
272
- }), '/content/mdsite.log');
308
+ }), '/content/.renderer/preview.log');
273
309
  expect(waitForTcpPortMock).toHaveBeenCalledWith('127.0.0.1', 4173);
274
310
  expect(openUrlInBrowserMock).toHaveBeenCalledWith('http://127.0.0.1:4173');
275
311
  });
312
+ it('runPreviewCommand exposes the foreground renderer on the network when host is set', async () => {
313
+ await expect(runPreviewCommand('/content', { host: '0.0.0.0' })).resolves.toBeUndefined();
314
+ expect(previewRendererForegroundMock).toHaveBeenCalledWith('/renderer', expect.objectContaining({
315
+ NUXT_HOST: '0.0.0.0',
316
+ HOST: '0.0.0.0',
317
+ NITRO_HOST: '0.0.0.0'
318
+ }));
319
+ });
320
+ it('runPreviewCommand overrides inherited preview host when host is set in detached mode', async () => {
321
+ readRuntimeStateMock.mockResolvedValueOnce(null);
322
+ prepareRendererMock.mockResolvedValueOnce({
323
+ rendererDir: '/renderer',
324
+ rendererEnv: { HOST: '127.0.0.1', PORT: '4173', NUXT_HOST: 'preview.local', NUXT_PORT: '4321' }
325
+ });
326
+ previewRendererInBackgroundMock.mockResolvedValueOnce(1003);
327
+ await expect(runPreviewCommand('/content', { detached: true, host: '0.0.0.0' })).resolves.toBe('mdsite preview running in background (PID 1003). URL: http://0.0.0.0:4321 Log: /content/.renderer/preview.log');
328
+ expect(previewRendererInBackgroundMock).toHaveBeenCalledWith('/renderer', expect.objectContaining({
329
+ NUXT_HOST: '0.0.0.0',
330
+ HOST: '0.0.0.0',
331
+ NITRO_HOST: '0.0.0.0',
332
+ NUXT_PORT: '4321'
333
+ }), '/content/.renderer/preview.log');
334
+ expect(waitForTcpPortMock).toHaveBeenCalledWith('0.0.0.0', 4321);
335
+ expect(openUrlInBrowserMock).toHaveBeenCalledWith('http://0.0.0.0:4321');
336
+ });
276
337
  it('runPreviewCommand does not open the browser when detached preview readiness times out', async () => {
277
338
  readRuntimeStateMock.mockResolvedValueOnce(null);
278
339
  previewRendererInBackgroundMock.mockResolvedValueOnce(1001);
279
340
  waitForTcpPortMock.mockResolvedValueOnce(false);
280
- await expect(runPreviewCommand('/content', { detached: true })).resolves.toBe('mdsite preview running in background (PID 1001). URL: http://localhost:3000 Log: /content/mdsite.log');
341
+ await expect(runPreviewCommand('/content', { detached: true })).resolves.toBe('mdsite preview running in background (PID 1001). URL: http://localhost:3000 Log: /content/.renderer/preview.log');
281
342
  expect(waitForTcpPortMock).toHaveBeenCalledWith('localhost', 3000);
282
343
  expect(openUrlInBrowserMock).not.toHaveBeenCalled();
283
344
  });
@@ -285,18 +346,18 @@ describe('command helpers', () => {
285
346
  readRuntimeStateMock.mockResolvedValueOnce(null);
286
347
  previewRendererInBackgroundMock.mockResolvedValueOnce(1002);
287
348
  waitForTcpPortMock.mockRejectedValueOnce(new Error('connect failed'));
288
- await expect(runPreviewCommand('/content', { detached: true })).resolves.toBe('mdsite preview running in background (PID 1002). URL: http://localhost:3000 Log: /content/mdsite.log');
349
+ await expect(runPreviewCommand('/content', { detached: true })).resolves.toBe('mdsite preview running in background (PID 1002). URL: http://localhost:3000 Log: /content/.renderer/preview.log');
289
350
  expect(openUrlInBrowserMock).not.toHaveBeenCalled();
290
351
  });
291
352
  it('runGenerateCommand syncs renderer output to the configured destination', async () => {
292
- await expect(runGenerateCommand('/content')).resolves.toBe('Generated site synced to /content/public');
353
+ await expect(runGenerateCommand('/content')).resolves.toBe('Generated site synced to /content/.output/public');
293
354
  expect(generateRendererMock).toHaveBeenCalledWith('/renderer', { TEST: '1' });
294
- expect(rmMock).toHaveBeenCalledWith('/content/public', { recursive: true, force: true });
295
- expect(cpMock).toHaveBeenCalledWith('/renderer/.output/public', '/content/public', { recursive: true, force: true });
355
+ expect(rmMock).toHaveBeenCalledWith('/content/.output/public', { recursive: true, force: true });
356
+ expect(cpMock).toHaveBeenCalledWith('/renderer/.output/public', '/content/.output/public', { recursive: true, force: true });
296
357
  });
297
358
  it('runGenerateCommand surfaces sync failures with the destination path', async () => {
298
359
  cpMock.mockRejectedValueOnce(new Error('permission denied'));
299
- await expect(runGenerateCommand('/content')).rejects.toThrow('Failed to sync generated output to /content/public: permission denied');
360
+ await expect(runGenerateCommand('/content')).rejects.toThrow('Failed to sync generated output to /content/.output/public: permission denied');
300
361
  });
301
362
  it('runStopCommand handles nothing-running, stopped, and stale-state cases', async () => {
302
363
  readRuntimeStateMock.mockResolvedValueOnce(null).mockResolvedValueOnce(null);
@@ -306,8 +367,8 @@ describe('command helpers', () => {
306
367
  .mockResolvedValueOnce({ kind: 'preview', pid: 22 });
307
368
  stopProcessMock.mockResolvedValueOnce(true).mockResolvedValueOnce(false);
308
369
  await expect(runStopCommand('/content')).resolves.toBe('Stopped start process 11. Removed stale preview state for PID 22.');
309
- expect(clearRuntimeStateMock).toHaveBeenNthCalledWith(1, '/content', 'start');
310
- expect(clearRuntimeStateMock).toHaveBeenNthCalledWith(2, '/content', 'preview');
370
+ expect(clearRuntimeStateMock).toHaveBeenNthCalledWith(1, '/content', loadedConfig.config, 'start');
371
+ expect(clearRuntimeStateMock).toHaveBeenNthCalledWith(2, '/content', loadedConfig.config, 'preview');
311
372
  });
312
373
  });
313
374
  //# sourceMappingURL=commands.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.test.js","sourceRoot":"","sources":["../../src/commands/commands.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.test.js","sourceRoot":"","sources":["../../src/commands/commands.test.ts"],"names":[],"mappings":"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"}
@@ -1,28 +1,78 @@
1
- import { access, writeFile } from 'node:fs/promises';
1
+ import { access, copyFile, mkdir, readFile, writeFile } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { buildDefaultMdsiteConfig, serializeMdsiteConfig } from '../config/mdsite-config.js';
4
+ import { getBundledRendererDir } from '../renderer/mdsite-nuxt.js';
4
5
  const NVMRC_VERSION = '24';
5
6
  function buildNvmrcContent() {
6
7
  return `${NVMRC_VERSION}\n`;
7
8
  }
8
9
  export async function runInitCommand(contentDir) {
9
10
  const configPath = path.join(contentDir, 'mdsite.yml');
10
- const nvmrcPath = path.join(contentDir, '.nvmrc');
11
11
  try {
12
12
  await access(configPath);
13
13
  }
14
14
  catch {
15
15
  const config = await buildDefaultMdsiteConfig(contentDir);
16
16
  await writeFile(configPath, serializeMdsiteConfig(config), 'utf8');
17
+ await ensureCommittedRendererLockfiles(contentDir, config);
18
+ await ensureContentGitignore(contentDir, config);
17
19
  try {
18
- await access(nvmrcPath);
20
+ await access(path.join(contentDir, '.nvmrc'));
19
21
  return `Created mdsite.yml in ${contentDir} (.nvmrc was already present)`;
20
22
  }
21
23
  catch {
22
- await writeFile(nvmrcPath, buildNvmrcContent(), 'utf8');
24
+ await writeFile(path.join(contentDir, '.nvmrc'), buildNvmrcContent(), 'utf8');
23
25
  return `Created mdsite.yml and .nvmrc in ${contentDir}`;
24
26
  }
25
27
  }
26
28
  throw new Error(`mdsite.yml already exists at ${configPath}.`);
27
29
  }
30
+ async function ensureCommittedRendererLockfiles(contentDir, config) {
31
+ const serverDir = path.resolve(contentDir, config.server.path);
32
+ await mkdir(serverDir, { recursive: true });
33
+ const bundledRendererDir = getBundledRendererDir();
34
+ await copyFile(path.join(bundledRendererDir, 'package.json'), path.join(serverDir, 'package.json'));
35
+ try {
36
+ await copyFile(path.join(bundledRendererDir, 'package-lock.json'), path.join(serverDir, 'package-lock.json'));
37
+ }
38
+ catch {
39
+ // Bundled renderer has no lockfile; leave the target without one (npm install will generate it).
40
+ }
41
+ }
42
+ async function ensureContentGitignore(contentDir, config) {
43
+ const serverPath = config.server.path.replace(/\\/g, '/');
44
+ const serverOutput = config.server.output.replace(/\\/g, '/');
45
+ const requiredPatterns = [
46
+ `${serverPath}/*`,
47
+ `!${serverPath}/package.json`,
48
+ `!${serverPath}/package-lock.json`,
49
+ `${serverOutput}/`
50
+ ];
51
+ const managedBlock = [
52
+ '# mdsite: generated state (renderer working dir; lockfile pair committed for reproducible CI)',
53
+ ...requiredPatterns,
54
+ '# end mdsite'
55
+ ];
56
+ const managedMarkers = new Set(managedBlock);
57
+ const gitignorePath = path.join(contentDir, '.gitignore');
58
+ let existingLines = [];
59
+ try {
60
+ existingLines = (await readFile(gitignorePath, 'utf8')).split(/\r?\n/);
61
+ }
62
+ catch {
63
+ // No existing .gitignore; start fresh.
64
+ }
65
+ // Preserve user-authored lines verbatim; drop any prior managed-block lines so we can re-emit a clean block.
66
+ const userLines = existingLines.filter((line) => !managedMarkers.has(line));
67
+ // Drop trailing blank lines to keep the merge idempotent (no separator accumulation on re-runs).
68
+ while (userLines.length > 0 && userLines[userLines.length - 1] === '') {
69
+ userLines.pop();
70
+ }
71
+ const merged = [...userLines];
72
+ if (merged.length > 0) {
73
+ merged.push('');
74
+ }
75
+ merged.push(...managedBlock);
76
+ await writeFile(gitignorePath, `${merged.join('\n')}\n`, 'utf8');
77
+ }
28
78
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAE5F,MAAM,aAAa,GAAG,IAAI,CAAA;AAE1B,SAAS,iBAAiB;IACxB,OAAO,GAAG,aAAa,IAAI,CAAA;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IACtD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IAEjD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,CAAC,CAAA;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,UAAU,CAAC,CAAA;QACzD,MAAM,SAAS,CAAC,UAAU,EAAE,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;QAElE,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,SAAS,CAAC,CAAA;YACvB,OAAO,yBAAyB,UAAU,+BAA+B,CAAA;QAC3E,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,SAAS,CAAC,SAAS,EAAE,iBAAiB,EAAE,EAAE,MAAM,CAAC,CAAA;YACvD,OAAO,oCAAoC,UAAU,EAAE,CAAA;QACzD,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,GAAG,CAAC,CAAA;AAChE,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}