@life-and-dev/mdsite 0.1.0 → 0.2.1

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 (50) hide show
  1. package/README.md +40 -22
  2. package/dist/commands/commands.test.js +103 -31
  3. package/dist/commands/commands.test.js.map +1 -1
  4. package/dist/commands/init.d.ts +1 -1
  5. package/dist/commands/init.js +64 -2
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/prepare.js +22 -14
  8. package/dist/commands/prepare.js.map +1 -1
  9. package/dist/commands/prepare.test.js +33 -39
  10. package/dist/commands/prepare.test.js.map +1 -1
  11. package/dist/commands/preview.d.ts +1 -0
  12. package/dist/commands/preview.js +11 -10
  13. package/dist/commands/preview.js.map +1 -1
  14. package/dist/commands/start.d.ts +1 -0
  15. package/dist/commands/start.js +23 -10
  16. package/dist/commands/start.js.map +1 -1
  17. package/dist/commands/stop.js +6 -3
  18. package/dist/commands/stop.js.map +1 -1
  19. package/dist/commands/workflows.test.js +81 -21
  20. package/dist/commands/workflows.test.js.map +1 -1
  21. package/dist/config/mdsite-config.js +1 -1
  22. package/dist/config/mdsite-config.js.map +1 -1
  23. package/dist/config/mdsite-config.test.js +1 -1
  24. package/dist/config/mdsite-config.test.js.map +1 -1
  25. package/dist/config/menu.js +0 -1
  26. package/dist/config/menu.js.map +1 -1
  27. package/dist/index.js +44 -10
  28. package/dist/index.js.map +1 -1
  29. package/dist/index.test.js +40 -0
  30. package/dist/index.test.js.map +1 -1
  31. package/dist/process/child-process.test.js +3 -3
  32. package/dist/process/child-process.test.js.map +1 -1
  33. package/dist/process/runtime-state.d.ts +6 -5
  34. package/dist/process/runtime-state.js +13 -17
  35. package/dist/process/runtime-state.js.map +1 -1
  36. package/dist/process/runtime-state.test.js +21 -13
  37. package/dist/process/runtime-state.test.js.map +1 -1
  38. package/dist/renderer/mdsite-nuxt.d.ts +2 -0
  39. package/dist/renderer/mdsite-nuxt.js +29 -32
  40. package/dist/renderer/mdsite-nuxt.js.map +1 -1
  41. package/dist/renderer/mdsite-nuxt.test.js +37 -48
  42. package/dist/renderer/mdsite-nuxt.test.js.map +1 -1
  43. package/mdsite-nuxt/app/composables/useAppTheme.ts +22 -3
  44. package/mdsite-nuxt/app/config/themes.ts +38 -0
  45. package/mdsite-nuxt/nuxt.config.ts +11 -1
  46. package/mdsite-nuxt/scripts/generate-favicons.ts +24 -55
  47. package/mdsite-nuxt/scripts/renderer-hooks.test.ts +0 -8
  48. package/mdsite-nuxt/scripts/renderer-hooks.ts +1 -2
  49. package/mdsite-nuxt/scripts/sync-content.ts +5 -79
  50. package/package.json +1 -1
package/README.md CHANGED
@@ -20,7 +20,7 @@ After install, the `mdsite` command is available from any content directory.
20
20
 
21
21
  From the directory containing your Markdown files:
22
22
 
23
- 1. Run `mdsite init` once to create `mdsite.yml`.
23
+ 1. Run `mdsite init` once to create `mdsite.yml` and a `.nvmrc` pinning Node 24.
24
24
  2. Run `mdsite start` for foreground local development, or `mdsite start -d` for a tracked background process that opens the browser after the server is ready.
25
25
  3. Run `mdsite generate` to build static output.
26
26
  4. Run `mdsite preview` after `generate` for a foreground local preview, or `mdsite preview -d` for a tracked background preview.
@@ -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,27 +97,46 @@ 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
  });
102
109
  it('runInitCommand creates mdsite.yml only when it does not already exist', async () => {
110
+ accessMock.mockRejectedValueOnce(new Error('missing'));
103
111
  accessMock.mockRejectedValueOnce(new Error('missing'));
104
112
  buildDefaultConfigMock.mockResolvedValue(loadedConfig.config);
105
113
  serializeConfigMock.mockReturnValue('serialized-config');
106
- await expect(runInitCommand('/content')).resolves.toBeUndefined();
114
+ await expect(runInitCommand('/content')).resolves.toBe('Created mdsite.yml and .nvmrc in /content');
107
115
  expect(buildDefaultConfigMock).toHaveBeenCalledWith('/content');
108
116
  expect(writeFileMock).toHaveBeenCalledWith('/content/mdsite.yml', 'serialized-config', 'utf8');
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');
109
125
  accessMock.mockResolvedValueOnce(undefined);
110
126
  await expect(runInitCommand('/content')).rejects.toThrow('mdsite.yml already exists at /content/mdsite.yml.');
111
127
  });
128
+ it('runInitCommand leaves an existing .nvmrc untouched', async () => {
129
+ accessMock.mockRejectedValueOnce(new Error('missing'));
130
+ accessMock.mockResolvedValueOnce(undefined);
131
+ buildDefaultConfigMock.mockResolvedValue(loadedConfig.config);
132
+ serializeConfigMock.mockReturnValue('serialized-config');
133
+ await expect(runInitCommand('/content')).resolves.toBe('Created mdsite.yml in /content (.nvmrc was already present)');
134
+ expect(writeFileMock).toHaveBeenCalledWith('/content/mdsite.yml', 'serialized-config', 'utf8');
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');
139
+ });
112
140
  it('runStartCommand starts the renderer in the foreground by default without runtime metadata', async () => {
113
141
  await expect(runStartCommand('/content')).resolves.toBeUndefined();
114
142
  expect(readRuntimeStateMock).not.toHaveBeenCalled();
@@ -122,7 +150,6 @@ describe('command helpers', () => {
122
150
  readRuntimeStateMock.mockResolvedValueOnce({ kind: 'start', pid: 44 });
123
151
  isProcessRunningMock.mockReturnValueOnce(true);
124
152
  await expect(runStartCommand('/content', { detached: true })).rejects.toThrow('mdsite start is already running with PID 44.');
125
- expect(loadConfigMock).not.toHaveBeenCalled();
126
153
  });
127
154
  it('runStartCommand starts detached renderer for stale state and persists fresh runtime metadata', async () => {
128
155
  vi.useFakeTimers();
@@ -130,13 +157,13 @@ describe('command helpers', () => {
130
157
  readRuntimeStateMock.mockResolvedValueOnce({ kind: 'start', pid: 44 });
131
158
  isProcessRunningMock.mockReturnValueOnce(false);
132
159
  startRendererInBackgroundMock.mockResolvedValueOnce(777);
133
- 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');
134
161
  expect(ensureRendererDependenciesMock).toHaveBeenCalledWith('/renderer');
135
162
  expect(waitForTcpPortMock).toHaveBeenCalledWith('localhost', 3000);
136
163
  expect(waitForTcpPortMock.mock.invocationCallOrder[0]).toBeGreaterThan(writeRuntimeStateMock.mock.invocationCallOrder[0] ?? 0);
137
164
  expect(openUrlInBrowserMock.mock.invocationCallOrder[0]).toBeGreaterThan(waitForTcpPortMock.mock.invocationCallOrder[0] ?? 0);
138
165
  expect(openUrlInBrowserMock).toHaveBeenCalledWith('http://localhost:3000');
139
- expect(writeRuntimeStateMock).toHaveBeenCalledWith('/content', expect.objectContaining({
166
+ expect(writeRuntimeStateMock).toHaveBeenCalledWith('/content', loadedConfig.config, expect.objectContaining({
140
167
  kind: 'start',
141
168
  pid: 777,
142
169
  rendererDir: '/renderer',
@@ -151,7 +178,7 @@ describe('command helpers', () => {
151
178
  rendererEnv: { HOST: '127.0.0.1', PORT: '4173', NUXT_HOST: 'start.local', NUXT_PORT: '4321' }
152
179
  });
153
180
  startRendererInBackgroundMock.mockResolvedValueOnce(778);
154
- 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');
155
182
  expect(waitForTcpPortMock).toHaveBeenCalledWith('start.local', 4321);
156
183
  expect(openUrlInBrowserMock).toHaveBeenCalledWith('http://start.local:4321');
157
184
  });
@@ -159,7 +186,7 @@ describe('command helpers', () => {
159
186
  readRuntimeStateMock.mockResolvedValueOnce(null);
160
187
  startRendererInBackgroundMock.mockResolvedValueOnce(779);
161
188
  waitForTcpPortMock.mockResolvedValueOnce(false);
162
- 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');
163
190
  expect(waitForTcpPortMock).toHaveBeenCalledWith('localhost', 3000);
164
191
  expect(openUrlInBrowserMock).not.toHaveBeenCalled();
165
192
  });
@@ -167,9 +194,30 @@ describe('command helpers', () => {
167
194
  readRuntimeStateMock.mockResolvedValueOnce(null);
168
195
  startRendererInBackgroundMock.mockResolvedValueOnce(780);
169
196
  waitForTcpPortMock.mockRejectedValueOnce(new Error('connect failed'));
170
- 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');
171
198
  expect(openUrlInBrowserMock).not.toHaveBeenCalled();
172
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
+ });
173
221
  it('runPreviewCommand previews in the foreground by default without runtime metadata', async () => {
174
222
  await expect(runPreviewCommand('/content')).resolves.toBeUndefined();
175
223
  expect(readRuntimeStateMock).not.toHaveBeenCalled();
@@ -194,14 +242,13 @@ describe('command helpers', () => {
194
242
  readRuntimeStateMock.mockResolvedValueOnce({ kind: 'preview', pid: 55 });
195
243
  isProcessRunningMock.mockReturnValueOnce(true);
196
244
  await expect(runPreviewCommand('/content', { detached: true })).rejects.toThrow('mdsite preview is already running with PID 55.');
197
- expect(loadConfigMock).not.toHaveBeenCalled();
198
245
  });
199
246
  it('runPreviewCommand enforces preview artifacts and persists preview runtime state in detached mode', async () => {
200
247
  vi.useFakeTimers();
201
248
  vi.setSystemTime(new Date('2026-04-10T13:00:00.000Z'));
202
249
  readRuntimeStateMock.mockResolvedValueOnce(null);
203
250
  previewRendererInBackgroundMock.mockResolvedValueOnce(888);
204
- 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');
205
252
  expect(ensurePreviewArtifactsMock).toHaveBeenCalledWith('/renderer');
206
253
  expect(ensurePreviewArtifactsMock.mock.invocationCallOrder[0]).toBeGreaterThan(ensureRendererDependenciesMock.mock.invocationCallOrder[0] ?? 0);
207
254
  expect(previewRendererInBackgroundMock).toHaveBeenCalledWith('/renderer', expect.objectContaining({
@@ -212,12 +259,12 @@ describe('command helpers', () => {
212
259
  PORT: '3000',
213
260
  NITRO_HOST: 'localhost',
214
261
  NITRO_PORT: '3000'
215
- }), '/content/mdsite.log');
262
+ }), '/content/.renderer/preview.log');
216
263
  expect(waitForTcpPortMock).toHaveBeenCalledWith('localhost', 3000);
217
264
  expect(waitForTcpPortMock.mock.invocationCallOrder[0]).toBeGreaterThan(writeRuntimeStateMock.mock.invocationCallOrder[0] ?? 0);
218
265
  expect(openUrlInBrowserMock.mock.invocationCallOrder[0]).toBeGreaterThan(waitForTcpPortMock.mock.invocationCallOrder[0] ?? 0);
219
266
  expect(openUrlInBrowserMock).toHaveBeenCalledWith('http://localhost:3000');
220
- expect(writeRuntimeStateMock).toHaveBeenCalledWith('/content', expect.objectContaining({
267
+ expect(writeRuntimeStateMock).toHaveBeenCalledWith('/content', loadedConfig.config, expect.objectContaining({
221
268
  kind: 'preview',
222
269
  pid: 888,
223
270
  command: ['npm', 'run', 'preview'],
@@ -231,7 +278,7 @@ describe('command helpers', () => {
231
278
  rendererEnv: { HOST: '127.0.0.1', PORT: '4173', NUXT_HOST: 'preview.local', NUXT_PORT: '4321' }
232
279
  });
233
280
  previewRendererInBackgroundMock.mockResolvedValueOnce(999);
234
- 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');
235
282
  expect(previewRendererInBackgroundMock).toHaveBeenCalledWith('/renderer', expect.objectContaining({
236
283
  HOST: 'preview.local',
237
284
  PORT: '4321',
@@ -239,7 +286,7 @@ describe('command helpers', () => {
239
286
  NUXT_PORT: '4321',
240
287
  NITRO_HOST: 'preview.local',
241
288
  NITRO_PORT: '4321'
242
- }), '/content/mdsite.log');
289
+ }), '/content/.renderer/preview.log');
243
290
  expect(waitForTcpPortMock).toHaveBeenCalledWith('preview.local', 4321);
244
291
  expect(openUrlInBrowserMock).toHaveBeenCalledWith('http://preview.local:4321');
245
292
  });
@@ -250,7 +297,7 @@ describe('command helpers', () => {
250
297
  rendererEnv: { HOST: '127.0.0.1', PORT: '4173' }
251
298
  });
252
299
  previewRendererInBackgroundMock.mockResolvedValueOnce(1000);
253
- 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');
254
301
  expect(previewRendererInBackgroundMock).toHaveBeenCalledWith('/renderer', expect.objectContaining({
255
302
  HOST: '127.0.0.1',
256
303
  PORT: '4173',
@@ -258,15 +305,40 @@ describe('command helpers', () => {
258
305
  NUXT_PORT: '4173',
259
306
  NITRO_HOST: '127.0.0.1',
260
307
  NITRO_PORT: '4173'
261
- }), '/content/mdsite.log');
308
+ }), '/content/.renderer/preview.log');
262
309
  expect(waitForTcpPortMock).toHaveBeenCalledWith('127.0.0.1', 4173);
263
310
  expect(openUrlInBrowserMock).toHaveBeenCalledWith('http://127.0.0.1:4173');
264
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
+ });
265
337
  it('runPreviewCommand does not open the browser when detached preview readiness times out', async () => {
266
338
  readRuntimeStateMock.mockResolvedValueOnce(null);
267
339
  previewRendererInBackgroundMock.mockResolvedValueOnce(1001);
268
340
  waitForTcpPortMock.mockResolvedValueOnce(false);
269
- 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');
270
342
  expect(waitForTcpPortMock).toHaveBeenCalledWith('localhost', 3000);
271
343
  expect(openUrlInBrowserMock).not.toHaveBeenCalled();
272
344
  });
@@ -274,18 +346,18 @@ describe('command helpers', () => {
274
346
  readRuntimeStateMock.mockResolvedValueOnce(null);
275
347
  previewRendererInBackgroundMock.mockResolvedValueOnce(1002);
276
348
  waitForTcpPortMock.mockRejectedValueOnce(new Error('connect failed'));
277
- 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');
278
350
  expect(openUrlInBrowserMock).not.toHaveBeenCalled();
279
351
  });
280
352
  it('runGenerateCommand syncs renderer output to the configured destination', async () => {
281
- 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');
282
354
  expect(generateRendererMock).toHaveBeenCalledWith('/renderer', { TEST: '1' });
283
- expect(rmMock).toHaveBeenCalledWith('/content/public', { recursive: true, force: true });
284
- 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 });
285
357
  });
286
358
  it('runGenerateCommand surfaces sync failures with the destination path', async () => {
287
359
  cpMock.mockRejectedValueOnce(new Error('permission denied'));
288
- 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');
289
361
  });
290
362
  it('runStopCommand handles nothing-running, stopped, and stale-state cases', async () => {
291
363
  readRuntimeStateMock.mockResolvedValueOnce(null).mockResolvedValueOnce(null);
@@ -295,8 +367,8 @@ describe('command helpers', () => {
295
367
  .mockResolvedValueOnce({ kind: 'preview', pid: 22 });
296
368
  stopProcessMock.mockResolvedValueOnce(true).mockResolvedValueOnce(false);
297
369
  await expect(runStopCommand('/content')).resolves.toBe('Stopped start process 11. Removed stale preview state for PID 22.');
298
- expect(clearRuntimeStateMock).toHaveBeenNthCalledWith(1, '/content', 'start');
299
- expect(clearRuntimeStateMock).toHaveBeenNthCalledWith(2, '/content', 'preview');
370
+ expect(clearRuntimeStateMock).toHaveBeenNthCalledWith(1, '/content', loadedConfig.config, 'start');
371
+ expect(clearRuntimeStateMock).toHaveBeenNthCalledWith(2, '/content', loadedConfig.config, 'preview');
300
372
  });
301
373
  });
302
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 +1 @@
1
- export declare function runInitCommand(contentDir: string): Promise<void>;
1
+ export declare function runInitCommand(contentDir: string): Promise<string>;
@@ -1,6 +1,11 @@
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';
5
+ const NVMRC_VERSION = '24';
6
+ function buildNvmrcContent() {
7
+ return `${NVMRC_VERSION}\n`;
8
+ }
4
9
  export async function runInitCommand(contentDir) {
5
10
  const configPath = path.join(contentDir, 'mdsite.yml');
6
11
  try {
@@ -9,8 +14,65 @@ export async function runInitCommand(contentDir) {
9
14
  catch {
10
15
  const config = await buildDefaultMdsiteConfig(contentDir);
11
16
  await writeFile(configPath, serializeMdsiteConfig(config), 'utf8');
12
- return;
17
+ await ensureCommittedRendererLockfiles(contentDir, config);
18
+ await ensureContentGitignore(contentDir, config);
19
+ try {
20
+ await access(path.join(contentDir, '.nvmrc'));
21
+ return `Created mdsite.yml in ${contentDir} (.nvmrc was already present)`;
22
+ }
23
+ catch {
24
+ await writeFile(path.join(contentDir, '.nvmrc'), buildNvmrcContent(), 'utf8');
25
+ return `Created mdsite.yml and .nvmrc in ${contentDir}`;
26
+ }
13
27
  }
14
28
  throw new Error(`mdsite.yml already exists at ${configPath}.`);
15
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
+ }
16
78
  //# sourceMappingURL=init.js.map