@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.
- package/README.md +40 -22
- package/dist/commands/commands.test.js +103 -31
- package/dist/commands/commands.test.js.map +1 -1
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.js +64 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/prepare.js +22 -14
- package/dist/commands/prepare.js.map +1 -1
- package/dist/commands/prepare.test.js +33 -39
- package/dist/commands/prepare.test.js.map +1 -1
- package/dist/commands/preview.d.ts +1 -0
- package/dist/commands/preview.js +11 -10
- package/dist/commands/preview.js.map +1 -1
- package/dist/commands/start.d.ts +1 -0
- package/dist/commands/start.js +23 -10
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/stop.js +6 -3
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/workflows.test.js +81 -21
- package/dist/commands/workflows.test.js.map +1 -1
- package/dist/config/mdsite-config.js +1 -1
- package/dist/config/mdsite-config.js.map +1 -1
- package/dist/config/mdsite-config.test.js +1 -1
- package/dist/config/mdsite-config.test.js.map +1 -1
- package/dist/config/menu.js +0 -1
- package/dist/config/menu.js.map +1 -1
- package/dist/index.js +44 -10
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +40 -0
- package/dist/index.test.js.map +1 -1
- package/dist/process/child-process.test.js +3 -3
- package/dist/process/child-process.test.js.map +1 -1
- package/dist/process/runtime-state.d.ts +6 -5
- package/dist/process/runtime-state.js +13 -17
- package/dist/process/runtime-state.js.map +1 -1
- package/dist/process/runtime-state.test.js +21 -13
- package/dist/process/runtime-state.test.js.map +1 -1
- package/dist/renderer/mdsite-nuxt.d.ts +2 -0
- package/dist/renderer/mdsite-nuxt.js +29 -32
- package/dist/renderer/mdsite-nuxt.js.map +1 -1
- package/dist/renderer/mdsite-nuxt.test.js +37 -48
- package/dist/renderer/mdsite-nuxt.test.js.map +1 -1
- package/mdsite-nuxt/app/composables/useAppTheme.ts +22 -3
- package/mdsite-nuxt/app/config/themes.ts +38 -0
- package/mdsite-nuxt/nuxt.config.ts +11 -1
- package/mdsite-nuxt/scripts/generate-favicons.ts +24 -55
- package/mdsite-nuxt/scripts/renderer-hooks.test.ts +0 -8
- package/mdsite-nuxt/scripts/renderer-hooks.ts +1 -2
- package/mdsite-nuxt/scripts/sync-content.ts +5 -79
- 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
|
|
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
|
|
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
|
|
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
|
-
|
|
119
|
+
The CLI is **dev-aware** about where it runs the renderer:
|
|
111
120
|
|
|
112
|
-
-
|
|
113
|
-
-
|
|
114
|
-
- If the renderer
|
|
115
|
-
- `prepare github`
|
|
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
|
-
├──
|
|
133
|
-
├── .
|
|
134
|
-
├── .
|
|
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
|
|
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
|
-
-
|
|
154
|
-
-
|
|
155
|
-
- If
|
|
156
|
-
-
|
|
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 |
|
|
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
|
|
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` |
|
|
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
|
|
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((
|
|
92
|
-
|
|
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.
|
|
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/.
|
|
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/.
|
|
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/.
|
|
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/.
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7D,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE;IACf,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;IACjB,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;IACX,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;IACd,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;IACjB,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;IACX,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;CACnB,CAAC,CAAC,CAAA;AAEH,EAAE,CAAC,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,wBAAwB,EAAE,EAAE,CAAC,EAAE,EAAE;IACjC,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;IACzB,wBAAwB,EAAE,EAAE,CAAC,EAAE,EAAE;IACjC,qBAAqB,EAAE,EAAE,CAAC,EAAE,EAAE;CAC/B,CAAC,CAAC,CAAA;AAEH,EAAE,CAAC,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5C,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE;IAC1B,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE;IAC1B,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;IACzB,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;IACzB,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE;CAC3B,CAAC,CAAC,CAAA;AAEH,EAAE,CAAC,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5C,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;IACzB,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;IACpB,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;CACxB,CAAC,CAAC,CAAA;AAEH,EAAE,CAAC,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,sBAAsB,EAAE,EAAE,CAAC,EAAE,EAAE;IAC/B,0BAA0B,EAAE,EAAE,CAAC,EAAE,EAAE;IACnC,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;IACzB,qBAAqB,EAAE,EAAE,CAAC,EAAE,EAAE;IAC9B,8BAA8B,EAAE,EAAE,CAAC,EAAE,EAAE;IACvC,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE;IACxB,yBAAyB,EAAE,EAAE,CAAC,EAAE,EAAE;IAClC,2BAA2B,EAAE,EAAE,CAAC,EAAE,EAAE;IACpC,uBAAuB,EAAE,EAAE,CAAC,EAAE,EAAE;IAChC,yBAAyB,EAAE,EAAE,CAAC,EAAE,EAAE;CACnC,CAAC,CAAC,CAAA;AAEH,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEvF,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACtB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC3F,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,gBAAgB,EAChB,qBAAqB,EACrB,8BAA8B,EAC9B,eAAe,EACf,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,yBAAyB,EAC1B,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE1C,MAAM,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACpC,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAC5B,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAC5B,MAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;AAC1C,MAAM,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;AACxC,MAAM,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAClC,MAAM,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;AACxC,MAAM,yBAAyB,GAAG,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAA;AAClE,MAAM,sBAAsB,GAAG,EAAE,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAA;AAClE,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;AAClD,MAAM,iBAAiB,GAAG,EAAE,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAA;AAC7D,MAAM,mBAAmB,GAAG,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAA;AAC5D,MAAM,qBAAqB,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAC1D,MAAM,qBAAqB,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAC1D,MAAM,oBAAoB,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;AACxD,MAAM,oBAAoB,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;AACxD,MAAM,qBAAqB,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAC1D,MAAM,0BAA0B,GAAG,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAA;AACpE,MAAM,8BAA8B,GAAG,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAA;AAC5E,MAAM,oBAAoB,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;AACxD,MAAM,kCAAkC,GAAG,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAA;AACpF,MAAM,mBAAmB,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;AACtD,MAAM,6BAA6B,GAAG,EAAE,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAA;AAC1E,MAAM,+BAA+B,GAAG,EAAE,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAA;AAC9E,MAAM,2BAA2B,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAA;AACtE,MAAM,6BAA6B,GAAG,EAAE,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAA;AAC1E,MAAM,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;AAC9C,MAAM,oBAAoB,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;AACxD,MAAM,kBAAkB,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;AAEpD,MAAM,YAAY,GAAG;IACnB,MAAM,EAAE;QACN,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;QACnD,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE;QAC9D,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QACrC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE;KACxD;IACD,SAAS,EAAE,UAAU;IACrB,UAAU,EAAE,qBAAqB;IACjC,UAAU,EAAE,UAAU;CACvB,CAAA;AAED,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAA;QAClB,EAAE,CAAC,aAAa,EAAE,CAAA;QAClB,cAAc,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAA;QAC9C,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;QAC/F,qBAAqB,CAAC,kBAAkB,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YACnE,OAAO,GAAG,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,MAAM,CAAA;QACzD,CAAC,CAAC,CAAA;QACF,iBAAiB,CAAC,eAAe,CAAC,yBAAyB,CAAC,CAAA;QAC5D,kCAAkC,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAA;QAC9E,yBAAyB,CAAC,eAAe,CAAC,qCAAqC,CAAC,CAAA;QAChF,oBAAoB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAC5C,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,UAAU,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;QACtD,UAAU,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;QACtD,sBAAsB,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QAC7D,mBAAmB,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAA;QAExD,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;QACnG,MAAM,CAAC,sBAAsB,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAA;QAC/D,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAA;QAC9F,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QAC7E,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/F,MAAM,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAA;QAClJ,MAAM,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAA;QAC5J,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,CAAA;QACjH,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC,CAAA;QAC7H,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,MAAM,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,EAAE,MAAM,CAAC,CAAA;QAClI,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAA;QAE9G,UAAU,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAA;QAC3C,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAA;IAC/G,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,UAAU,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;QACtD,UAAU,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAA;QAC3C,sBAAsB,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QAC7D,mBAAmB,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAA;QAExD,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAA;QACrH,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAA;QAC9F,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QACvG,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/F,MAAM,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAA;QAClJ,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;IAC/F,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;QACzG,MAAM,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA;QAElE,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACnD,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACpD,MAAM,CAAC,6BAA6B,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QAC5D,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACpD,MAAM,CAAC,8BAA8B,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;QACxE,MAAM,CAAC,2BAA2B,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;IACtF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;QACrG,oBAAoB,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAW,CAAC,CAAA;QAC/E,oBAAoB,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAE9C,MAAM,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAA;IAC/H,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8FAA8F,EAAE,KAAK,IAAI,EAAE;QAC5G,EAAE,CAAC,aAAa,EAAE,CAAA;QAClB,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAA;QACtD,oBAAoB,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAW,CAAC,CAAA;QAC/E,oBAAoB,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA;QAC/C,6BAA6B,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;QAExD,MAAM,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CACzE,iFAAiF,CAClF,CAAA;QACD,MAAM,CAAC,8BAA8B,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;QACxE,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAClE,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9H,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAC7H,MAAM,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,CAAA;QAC1E,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,CAAC,UAAU,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,gBAAgB,CAAC;YAC1G,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,GAAG;YACR,WAAW,EAAE,WAAW;YACxB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;YAC9B,SAAS,EAAE,0BAA0B;SACtC,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;QACnG,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAChD,mBAAmB,CAAC,qBAAqB,CAAC;YACxC,WAAW,EAAE,WAAW;YACxB,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE;SAC9F,CAAC,CAAA;QACF,6BAA6B,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;QAExD,MAAM,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CACzE,iFAAiF,CAClF,CAAA;QACD,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QACpE,MAAM,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAChD,6BAA6B,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;QACxD,kBAAkB,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;QAE/C,MAAM,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CACzE,iFAAiF,CAClF,CAAA;QACD,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAClE,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAChD,6BAA6B,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;QACxD,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAA;QAErE,MAAM,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CACzE,iFAAiF,CAClF,CAAA;QACD,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,MAAM,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA;QAEvF,MAAM,CAAC,2BAA2B,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC;YAC5F,IAAI,EAAE,GAAG;YACT,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAChD,6BAA6B,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;QAExD,MAAM,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAC1F,iFAAiF,CAClF,CAAA;QACD,MAAM,CAAC,6BAA6B,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC;YAC9F,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,SAAS;SACtB,CAAC,EAAE,8BAA8B,CAAC,CAAA;QACnC,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QAChE,MAAM,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA;QAEpE,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACnD,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACpD,MAAM,CAAC,+BAA+B,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QAC9D,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACpD,MAAM,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACjD,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACnD,MAAM,CAAC,8BAA8B,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;QACxE,MAAM,CAAC,0BAA0B,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;QACpE,MAAM,CAAC,6BAA6B,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC;YAC9F,IAAI,EAAE,GAAG;YACT,SAAS,EAAE,WAAW;YACtB,SAAS,EAAE,MAAM;YACjB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,WAAW;YACvB,UAAU,EAAE,MAAM;SACnB,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;QACzG,oBAAoB,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAW,CAAC,CAAA;QACjF,oBAAoB,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAE9C,MAAM,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAA;IACnI,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kGAAkG,EAAE,KAAK,IAAI,EAAE;QAChH,EAAE,CAAC,aAAa,EAAE,CAAA;QAClB,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAA;QACtD,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAChD,+BAA+B,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;QAE1D,MAAM,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAC3E,gHAAgH,CACjH,CAAA;QACD,MAAM,CAAC,0BAA0B,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;QACpE,MAAM,CAAC,0BAA0B,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,8BAA8B,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAC/I,MAAM,CAAC,+BAA+B,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC;YAChG,IAAI,EAAE,GAAG;YACT,SAAS,EAAE,WAAW;YACtB,SAAS,EAAE,MAAM;YACjB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,WAAW;YACvB,UAAU,EAAE,MAAM;SACnB,CAAC,EAAE,gCAAgC,CAAC,CAAA;QACrC,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAClE,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9H,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAC7H,MAAM,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,CAAA;QAC1E,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,CAAC,UAAU,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,gBAAgB,CAAC;YAC1G,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,GAAG;YACR,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;YAClC,SAAS,EAAE,0BAA0B;SACtC,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+FAA+F,EAAE,KAAK,IAAI,EAAE;QAC7G,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAChD,mBAAmB,CAAC,qBAAqB,CAAC;YACxC,WAAW,EAAE,WAAW;YACxB,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE;SAChG,CAAC,CAAA;QACF,+BAA+B,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;QAE1D,MAAM,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAC3E,oHAAoH,CACrH,CAAA;QACD,MAAM,CAAC,+BAA+B,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC;YAChG,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,eAAe;YAC1B,SAAS,EAAE,MAAM;YACjB,UAAU,EAAE,eAAe;YAC3B,UAAU,EAAE,MAAM;SACnB,CAAC,EAAE,gCAAgC,CAAC,CAAA;QACrC,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;QACtE,MAAM,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,2BAA2B,CAAC,CAAA;IAChF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mGAAmG,EAAE,KAAK,IAAI,EAAE;QACjH,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAChD,mBAAmB,CAAC,qBAAqB,CAAC;YACxC,WAAW,EAAE,WAAW;YACxB,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE;SACjD,CAAC,CAAA;QACF,+BAA+B,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAE3D,MAAM,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAC3E,iHAAiH,CAClH,CAAA;QACD,MAAM,CAAC,+BAA+B,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC;YAChG,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,WAAW;YACtB,SAAS,EAAE,MAAM;YACjB,UAAU,EAAE,WAAW;YACvB,UAAU,EAAE,MAAM;SACnB,CAAC,EAAE,gCAAgC,CAAC,CAAA;QACrC,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAClE,MAAM,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,CAAA;IAC5E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,MAAM,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA;QAEzF,MAAM,CAAC,6BAA6B,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC;YAC9F,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sFAAsF,EAAE,KAAK,IAAI,EAAE;QACpG,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAChD,mBAAmB,CAAC,qBAAqB,CAAC;YACxC,WAAW,EAAE,WAAW;YACxB,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE;SAChG,CAAC,CAAA;QACF,+BAA+B,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAE3D,MAAM,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAC5F,+GAA+G,CAChH,CAAA;QACD,MAAM,CAAC,+BAA+B,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC;YAChG,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,SAAS;YACrB,SAAS,EAAE,MAAM;SAClB,CAAC,EAAE,gCAAgC,CAAC,CAAA;QACrC,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QAChE,MAAM,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;QACrG,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAChD,+BAA+B,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAC3D,kBAAkB,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;QAE/C,MAAM,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAC3E,iHAAiH,CAClH,CAAA;QACD,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAClE,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAChD,+BAA+B,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAC3D,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAA;QAErE,MAAM,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAC3E,iHAAiH,CAClH,CAAA;QACD,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAA;QAE9G,MAAM,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;QAC7E,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,yBAAyB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAChG,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,0BAA0B,EAAE,yBAAyB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9H,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAA;QAE5D,MAAM,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC1D,+EAA+E,CAChF,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAC5E,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;QAE7E,oBAAoB;aACjB,qBAAqB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAW,CAAC;aAC1D,qBAAqB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAW,CAAC,CAAA;QAC/D,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;QAExE,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CACpD,mEAAmE,CACpE,CAAA;QACD,MAAM,CAAC,qBAAqB,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,UAAU,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAClG,MAAM,CAAC,qBAAqB,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,UAAU,EAAE,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACtG,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function runInitCommand(contentDir: string): Promise<
|
|
1
|
+
export declare function runInitCommand(contentDir: string): Promise<string>;
|
package/dist/commands/init.js
CHANGED
|
@@ -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
|
-
|
|
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
|