@life-and-dev/mdsite 0.1.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +39 -21
  2. package/dist/commands/commands.test.js +91 -30
  3. package/dist/commands/commands.test.js.map +1 -1
  4. package/dist/commands/init.js +54 -4
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/prepare.js +22 -14
  7. package/dist/commands/prepare.js.map +1 -1
  8. package/dist/commands/prepare.test.js +33 -39
  9. package/dist/commands/prepare.test.js.map +1 -1
  10. package/dist/commands/preview.d.ts +1 -0
  11. package/dist/commands/preview.js +11 -10
  12. package/dist/commands/preview.js.map +1 -1
  13. package/dist/commands/start.d.ts +1 -0
  14. package/dist/commands/start.js +23 -10
  15. package/dist/commands/start.js.map +1 -1
  16. package/dist/commands/stop.js +6 -3
  17. package/dist/commands/stop.js.map +1 -1
  18. package/dist/commands/workflows.test.js +76 -19
  19. package/dist/commands/workflows.test.js.map +1 -1
  20. package/dist/config/mdsite-config.js +1 -1
  21. package/dist/config/mdsite-config.js.map +1 -1
  22. package/dist/config/mdsite-config.test.js +1 -1
  23. package/dist/config/mdsite-config.test.js.map +1 -1
  24. package/dist/config/menu.js +0 -1
  25. package/dist/config/menu.js.map +1 -1
  26. package/dist/index.js +42 -7
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.test.js +40 -0
  29. package/dist/index.test.js.map +1 -1
  30. package/dist/process/child-process.test.js +3 -3
  31. package/dist/process/child-process.test.js.map +1 -1
  32. package/dist/process/runtime-state.d.ts +6 -5
  33. package/dist/process/runtime-state.js +13 -17
  34. package/dist/process/runtime-state.js.map +1 -1
  35. package/dist/process/runtime-state.test.js +21 -13
  36. package/dist/process/runtime-state.test.js.map +1 -1
  37. package/dist/renderer/mdsite-nuxt.d.ts +2 -0
  38. package/dist/renderer/mdsite-nuxt.js +29 -32
  39. package/dist/renderer/mdsite-nuxt.js.map +1 -1
  40. package/dist/renderer/mdsite-nuxt.test.js +37 -48
  41. package/dist/renderer/mdsite-nuxt.test.js.map +1 -1
  42. package/mdsite-nuxt/app/composables/useAppTheme.ts +22 -3
  43. package/mdsite-nuxt/app/config/themes.ts +38 -0
  44. package/mdsite-nuxt/app/pages/[...slug].vue +4 -2
  45. package/mdsite-nuxt/app/pages/index.vue +4 -2
  46. package/mdsite-nuxt/assets/default-favicon.svg +223 -0
  47. package/mdsite-nuxt/nuxt.config.ts +11 -1
  48. package/mdsite-nuxt/scripts/generate-favicons.test.ts +123 -0
  49. package/mdsite-nuxt/scripts/generate-favicons.ts +60 -61
  50. package/mdsite-nuxt/scripts/renderer-hooks.test.ts +0 -8
  51. package/mdsite-nuxt/scripts/renderer-hooks.ts +1 -2
  52. package/mdsite-nuxt/scripts/sync-content.ts +5 -79
  53. package/package.json +1 -1
@@ -14,8 +14,7 @@ export async function runPrepareGithubCommand(contentDir) {
14
14
  return `Generated GitHub Pages workflow at ${workflowPath}`;
15
15
  }
16
16
  function buildGithubWorkflow(config) {
17
- const rendererPath = path.posix.normalize(config.server.path.replace(/\\/g, '/'));
18
- const outputPath = path.posix.join(rendererPath, path.posix.normalize(config.server.output.replace(/\\/g, '/')));
17
+ const outputPath = path.posix.normalize(config.server.output.replace(/\\/g, '/'));
19
18
  const workflowName = 'Deploy Docs';
20
19
  const artifactPath = `./${outputPath}/public`;
21
20
  const workspaceContentPath = config.content?.path ? `\${{ github.workspace }}/${path.posix.normalize(config.content.path.replace(/\\/g, '/'))}` : '${{ github.workspace }}';
@@ -49,15 +48,17 @@ function buildGithubWorkflow(config) {
49
48
  ' with:',
50
49
  ' submodules: true',
51
50
  '',
52
- ' - name: Use checked-in mdsite renderer',
53
- ` run: test -f ${rendererPath}/package.json`,
51
+ ' - name: Detect mdsite layout',
52
+ ' id: detect',
53
+ ' shell: bash',
54
+ ' run: echo "is_source=$(if [ -f bin/mdsite.js ]; then echo true; else echo false; fi)" >> "$GITHUB_OUTPUT"',
54
55
  '',
55
56
  ' - name: Setup Node',
56
57
  ' uses: actions/setup-node@v6',
57
58
  ' with:',
58
59
  ' node-version: "24"',
59
60
  ' cache: npm',
60
- ` cache-dependency-path: ${JSON.stringify(`${rendererPath}/package-lock.json`)}`,
61
+ " cache-dependency-path: ${{ steps.detect.outputs.is_source == 'true' && 'mdsite-nuxt/package-lock.json' || '.mdsite/package-lock.json' }}",
61
62
  '',
62
63
  ' - name: Setup Pages',
63
64
  ' id: pages',
@@ -67,18 +68,25 @@ function buildGithubWorkflow(config) {
67
68
  ' uses: actions/cache@v5',
68
69
  ' with:',
69
70
  ' path: |',
70
- ` ${rendererPath}/node_modules`,
71
- " key: ${{ runner.os }}-nuxt-build-${{ hashFiles('" + rendererPath + "/package-lock.json') }}",
71
+ ' .mdsite/node_modules',
72
+ ' mdsite-nuxt/node_modules',
73
+ " key: ${{ runner.os }}-mdsite-${{ hashFiles('.mdsite/package-lock.json', 'mdsite-nuxt/package-lock.json') }}",
72
74
  ' restore-keys: |',
73
- ' ${{ runner.os }}-nuxt-build-',
75
+ ' ${{ runner.os }}-mdsite-',
74
76
  '',
75
- ' - name: Install dependencies',
76
- ` working-directory: ${rendererPath}`,
77
- ' run: npm install',
77
+ ' - name: Build and generate (source)',
78
+ " if: steps.detect.outputs.is_source == 'true'",
79
+ ' shell: bash',
80
+ ' run: |',
81
+ ' npm install',
82
+ ' npm run build',
83
+ ' node bin/mdsite.js generate',
84
+ ' env:',
85
+ ' NUXT_APP_BASE_URL: ${{ steps.pages.outputs.base_path }}/',
78
86
  '',
79
- ' - name: Generate static site',
80
- ` working-directory: ${rendererPath}`,
81
- ' run: npm run generate',
87
+ ' - name: Generate (npx)',
88
+ " if: steps.detect.outputs.is_source != 'true'",
89
+ ' run: npx -y @life-and-dev/mdsite generate',
82
90
  ' env:',
83
91
  ' NUXT_APP_BASE_URL: ${{ steps.pages.outputs.base_path }}/',
84
92
  '',
@@ -1 +1 @@
1
- {"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/commands/prepare.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/commands/prepare.ts"],"names":[],"mappings":"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"}
@@ -41,31 +41,25 @@ describe('runPrepareGithubCommand', () => {
41
41
  expect(result).toBe(`Generated GitHub Pages workflow at ${workflowPath}`);
42
42
  expect(workflow).toContain('name: "Deploy Docs"');
43
43
  expect(workflow).toContain('runs-on: ubuntu-latest');
44
+ expect(workflow).toContain('submodules: true');
44
45
  expect(workflow).toContain('node-version: "24"');
45
- expect(workflow).toContain('working-directory: renderer');
46
+ expect(workflow).toContain('cache: npm');
47
+ expect(workflow).toContain("cache-dependency-path: ${{ steps.detect.outputs.is_source == 'true' && 'mdsite-nuxt/package-lock.json' || '.mdsite/package-lock.json' }}");
48
+ expect(workflow).toContain('actions/cache@v5');
49
+ expect(workflow).toContain("hashFiles('.mdsite/package-lock.json', 'mdsite-nuxt/package-lock.json')");
50
+ expect(workflow).toContain('.mdsite/node_modules');
51
+ expect(workflow).toContain('mdsite-nuxt/node_modules');
46
52
  expect(workflow).toContain('NUXT_APP_BASE_URL: ${{ steps.pages.outputs.base_path }}/');
47
53
  expect(workflow).toContain('NUXT_CONTENT_PATH: "${{ github.workspace }}"');
48
54
  expect(workflow).toContain('CONTENT_DIR: "${{ github.workspace }}"');
49
55
  expect(workflow).toContain('MDSITE_CONFIG_PATH: "${{ github.workspace }}/mdsite.yml"');
50
- expect(workflow).toContain('cache-dependency-path: "renderer/package-lock.json"');
51
- expect(workflow).toContain(' renderer/node_modules');
52
- expect(workflow).not.toContain(' renderer/.nuxt');
53
- expect(workflow).not.toContain(' renderer/build/site');
54
- expect(workflow).toContain('name: Use checked-in mdsite renderer');
55
- expect(workflow).toContain('run: test -f renderer/package.json');
56
- expect(workflow).toContain('name: Install dependencies');
57
- expect(workflow).toContain('run: npm install');
58
- expect(workflow).not.toContain('name: Setup mdsite renderer');
59
- expect(workflow).not.toContain('npm install --no-save @life-and-dev/mdsite');
60
- expect(workflow).not.toContain('@life-and-dev/mdsite');
61
- expect(workflow).not.toContain('node_modules/@life-and-dev/mdsite');
62
- expect(workflow).not.toContain("node_modules', '@life-and-dev', 'mdsite', 'mdsite-nuxt");
63
- expect(workflow).toContain('renderer/build/site');
64
- expect(workflow).toContain('path: "./renderer/build/site/public"');
65
- expect(workflow).toContain('run: npm run generate');
66
- expect(workflow).not.toContain('npm start -- --generate');
56
+ expect(workflow).toContain('npx -y @life-and-dev/mdsite generate');
57
+ expect(workflow).toContain('node bin/mdsite.js generate');
58
+ expect(workflow).toContain('npm run build');
59
+ expect(workflow).toContain('path: "./build/site/public"');
67
60
  expect(workflow).toContain('actions/upload-pages-artifact@v5');
68
61
  expect(workflow).toContain('actions/deploy-pages@v5');
62
+ expect(workflow).not.toContain('working-directory:');
69
63
  expect(runForegroundMock).toHaveBeenCalledTimes(1);
70
64
  expect(runForegroundMock).toHaveBeenCalledWith('npm', ['run', 'prepare:renderer'], rendererDir, expect.objectContaining({
71
65
  CONTENT_DIR: contentDir,
@@ -96,18 +90,18 @@ describe('runPrepareGithubCommand', () => {
96
90
  expect(workflow).toContain('NUXT_CONTENT_PATH: "${{ github.workspace }}/docs"');
97
91
  expect(workflow).toContain('CONTENT_DIR: "${{ github.workspace }}/docs"');
98
92
  expect(workflow).toContain('MDSITE_CONFIG_PATH: "${{ github.workspace }}/mdsite.yml"');
99
- expect(workflow).toContain('working-directory: renderer');
93
+ expect(workflow).toContain('submodules: true');
100
94
  expect(workflow).toContain('node-version: "24"');
95
+ expect(workflow).toContain('cache: npm');
96
+ expect(workflow).toContain("cache-dependency-path: ${{ steps.detect.outputs.is_source == 'true' && 'mdsite-nuxt/package-lock.json' || '.mdsite/package-lock.json' }}");
97
+ expect(workflow).toContain('actions/cache@v5');
98
+ expect(workflow).toContain("hashFiles('.mdsite/package-lock.json', 'mdsite-nuxt/package-lock.json')");
101
99
  expect(workflow).toContain('NUXT_APP_BASE_URL: ${{ steps.pages.outputs.base_path }}/');
102
- expect(workflow).toContain('run: test -f renderer/package.json');
103
- expect(workflow).toContain('run: npm install');
104
- expect(workflow).not.toContain('npm install --no-save @life-and-dev/mdsite');
105
- expect(workflow).not.toContain('@life-and-dev/mdsite');
106
- expect(workflow).not.toContain('node_modules/@life-and-dev/mdsite');
107
- expect(workflow).not.toContain("node_modules', '@life-and-dev', 'mdsite', 'mdsite-nuxt");
108
- expect(workflow).toContain('run: npm run generate');
109
- expect(workflow).not.toContain('npm start -- --generate');
110
- expect(workflow).toContain('path: "./renderer/build/site/public"');
100
+ expect(workflow).toContain('npx -y @life-and-dev/mdsite generate');
101
+ expect(workflow).toContain('node bin/mdsite.js generate');
102
+ expect(workflow).toContain('npm run build');
103
+ expect(workflow).toContain('path: "./build/site/public"');
104
+ expect(workflow).not.toContain('working-directory:');
111
105
  expect(runForegroundMock).toHaveBeenCalledWith('npm', ['run', 'prepare:renderer'], rendererDir, expect.objectContaining({
112
106
  CONTENT_DIR: contentDir,
113
107
  MDSITE_CONFIG_PATH: path.join(configDir, 'mdsite.yml'),
@@ -130,18 +124,18 @@ describe('runPrepareGithubCommand', () => {
130
124
  await runPrepareGithubCommand(contentDir);
131
125
  const workflow = await readFile(path.join(contentDir, '.github', 'workflows', 'deploy.yml'), 'utf8');
132
126
  expect(await readFile(path.join(rendererDir, 'package.json'), 'utf8')).toContain('mdsite-nuxt');
133
- expect(workflow).toContain('working-directory: .mdsite');
127
+ expect(workflow).toContain('submodules: true');
134
128
  expect(workflow).toContain('node-version: "24"');
135
- expect(workflow).toContain('cache-dependency-path: ".mdsite/package-lock.json"');
136
- expect(workflow).toContain('run: test -f .mdsite/package.json');
137
- expect(workflow).toContain('run: npm install');
138
- expect(workflow).not.toContain('npm install --no-save @life-and-dev/mdsite');
139
- expect(workflow).not.toContain('@life-and-dev/mdsite');
140
- expect(workflow).not.toContain('node_modules/@life-and-dev/mdsite');
141
- expect(workflow).not.toContain("node_modules', '@life-and-dev', 'mdsite', 'mdsite-nuxt");
142
- expect(workflow).toContain('path: "./.mdsite/.output/public"');
143
- expect(workflow).toContain('run: npm run generate');
144
- expect(workflow).not.toContain('npm start -- --generate');
129
+ expect(workflow).toContain('cache: npm');
130
+ expect(workflow).toContain("cache-dependency-path: ${{ steps.detect.outputs.is_source == 'true' && 'mdsite-nuxt/package-lock.json' || '.mdsite/package-lock.json' }}");
131
+ expect(workflow).toContain('actions/cache@v5');
132
+ expect(workflow).toContain("hashFiles('.mdsite/package-lock.json', 'mdsite-nuxt/package-lock.json')");
133
+ expect(workflow).toContain('NUXT_APP_BASE_URL: ${{ steps.pages.outputs.base_path }}/');
134
+ expect(workflow).toContain('npx -y @life-and-dev/mdsite generate');
135
+ expect(workflow).toContain('node bin/mdsite.js generate');
136
+ expect(workflow).toContain('npm run build');
137
+ expect(workflow).toContain('path: "./.output/public"');
138
+ expect(workflow).not.toContain('working-directory:');
145
139
  expect(runForegroundMock).toHaveBeenCalledWith('npm', ['ci'], rendererDir, process.env);
146
140
  expect(runForegroundMock).toHaveBeenCalledWith('npm', ['run', 'prepare:renderer'], rendererDir, expect.objectContaining({
147
141
  CONTENT_DIR: contentDir,
@@ -1 +1 @@
1
- {"version":3,"file":"prepare.test.js","sourceRoot":"","sources":["../../src/commands/prepare.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE1E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAExE,EAAE,CAAC,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5C,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;IACtB,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;CACvB,CAAC,CAAC,CAAA;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAEtD,MAAM,iBAAiB,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;AAElD,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAA;QAClB,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACrD,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mGAAmG,EAAE,KAAK,IAAI,EAAE;QACjH,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAA;QAC3E,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;QACrD,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACxE,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EACnC;YACE,OAAO;YACP,sBAAsB;YACtB,SAAS;YACT,kBAAkB;YAClB,sBAAsB;YACtB,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,MAAM,CACP,CAAA;QACD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAA;QAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;QAEvE,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,UAAU,CAAC,CAAA;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;QAChF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;QAErD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,sCAAsC,YAAY,EAAE,CAAC,CAAA;QACzE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAA;QACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAA;QACpD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAA;QAChD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAA;QACzD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,0DAA0D,CAAC,CAAA;QACtF,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAA;QAC1E,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAA;QACpE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,0DAA0D,CAAC,CAAA;QACtF,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,qDAAqD,CAAC,CAAA;QACjF,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAA;QAC/D,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAA;QAC5D,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAA;QACjE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAA;QAClE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAA;QAChE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAA;QACxD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;QAC9C,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAA;QAC7D,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAA;QAC5E,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAA;QACtD,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAA;QACnE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,wDAAwD,CAAC,CAAA;QACxF,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAA;QACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAA;QAClE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAA;QACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAA;QACzD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAA;QAC9D,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAA;QAErD,MAAM,CAAC,iBAAiB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QAClD,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAC5C,KAAK,EACL,CAAC,KAAK,EAAE,kBAAkB,CAAC,EAC3B,WAAW,EACX,MAAM,CAAC,gBAAgB,CAAC;YACtB,WAAW,EAAE,UAAU;YACvB,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC;YACvD,iBAAiB,EAAE,UAAU;SAC9B,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAA;QAC1E,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAExB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QACpD,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACvD,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACxE,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAClC;YACE,UAAU;YACV,cAAc;YACd,OAAO;YACP,mBAAmB;YACnB,SAAS;YACT,kBAAkB;YAClB,sBAAsB;YACtB,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,MAAM,CACP,CAAA;QACD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,CAAA;QAE3E,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAA;QACxC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAA;QAEnG,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,mDAAmD,CAAC,CAAA;QAC/E,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,6CAA6C,CAAC,CAAA;QACzE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,0DAA0D,CAAC,CAAA;QACtF,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAA;QACzD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAA;QAChD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,0DAA0D,CAAC,CAAA;QACtF,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAA;QAChE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;QAC9C,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAA;QAC5E,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAA;QACtD,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAA;QACnE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,wDAAwD,CAAC,CAAA;QACxF,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAA;QACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAA;QACzD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAA;QAClE,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAC5C,KAAK,EACL,CAAC,KAAK,EAAE,kBAAkB,CAAC,EAC3B,WAAW,EACX,MAAM,CAAC,gBAAgB,CAAC;YACtB,WAAW,EAAE,UAAU;YACvB,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;YACtD,iBAAiB,EAAE,UAAU;SAC9B,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAA;QAC3E,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;QACpD,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EACnC;YACE,OAAO;YACP,+BAA+B;YAC/B,SAAS;YACT,iBAAiB;YACjB,mBAAmB;YACnB,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,MAAM,CACP,CAAA;QACD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,2BAA2B,EAAE,MAAM,CAAC,CAAA;QAEvF,MAAM,uBAAuB,CAAC,UAAU,CAAC,CAAA;QACzC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAA;QAEpG,MAAM,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QAC/F,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAA;QACxD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAA;QAChD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,oDAAoD,CAAC,CAAA;QAChF,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAA;QAC/D,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;QAC9C,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAA;QAC5E,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAA;QACtD,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAA;QACnE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,wDAAwD,CAAC,CAAA;QACxF,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAA;QAC9D,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAA;QACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAA;QACzD,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;QACvF,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAC5C,KAAK,EACL,CAAC,KAAK,EAAE,kBAAkB,CAAC,EAC3B,WAAW,EACX,MAAM,CAAC,gBAAgB,CAAC;YACtB,WAAW,EAAE,UAAU;YACvB,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC;YACvD,iBAAiB,EAAE,UAAU;SAC9B,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"prepare.test.js","sourceRoot":"","sources":["../../src/commands/prepare.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  interface PreviewCommandOptions {
2
2
  detached?: boolean;
3
+ host?: string;
3
4
  }
4
5
  export declare function runPreviewCommand(contentDir: string, options?: PreviewCommandOptions): Promise<string | undefined>;
5
6
  export {};
@@ -4,29 +4,30 @@ import { getRuntimeLogPath, isProcessRunning, readRuntimeState, writeRuntimeStat
4
4
  import { ensurePreviewArtifacts, ensureRendererDependencies, prepareRenderer, previewRendererForeground, previewRendererInBackground } from '../renderer/mdsite-nuxt.js';
5
5
  export async function runPreviewCommand(contentDir, options = {}) {
6
6
  if (options.detached) {
7
- return runDetachedPreviewCommand(contentDir);
7
+ return runDetachedPreviewCommand(contentDir, options);
8
8
  }
9
9
  const loaded = await loadMdsiteConfig(contentDir);
10
10
  const { rendererDir, rendererEnv } = await prepareRenderer(loaded.contentDir, loaded.config, loaded);
11
11
  await ensureRendererDependencies(rendererDir);
12
12
  await ensurePreviewArtifacts(rendererDir);
13
- await previewRendererForeground(rendererDir, getPreviewEnv(rendererEnv));
13
+ await previewRendererForeground(rendererDir, getPreviewEnv(rendererEnv, options.host));
14
14
  return undefined;
15
15
  }
16
- async function runDetachedPreviewCommand(contentDir) {
17
- const existingState = await readRuntimeState(contentDir, 'preview');
16
+ async function runDetachedPreviewCommand(contentDir, options) {
17
+ const loaded = await loadMdsiteConfig(contentDir);
18
+ const { config, configDir } = loaded;
19
+ const existingState = await readRuntimeState(configDir, config, 'preview');
18
20
  if (existingState && isProcessRunning(existingState.pid)) {
19
21
  throw new Error(`mdsite preview is already running with PID ${existingState.pid}.`);
20
22
  }
21
- const loaded = await loadMdsiteConfig(contentDir);
22
23
  const { rendererDir, rendererEnv } = await prepareRenderer(loaded.contentDir, loaded.config, loaded);
23
24
  await ensureRendererDependencies(rendererDir);
24
25
  await ensurePreviewArtifacts(rendererDir);
25
- const previewEnv = getPreviewEnv(rendererEnv);
26
- const logPath = getRuntimeLogPath(contentDir, 'preview');
26
+ const previewEnv = getPreviewEnv(rendererEnv, options.host);
27
+ const logPath = getRuntimeLogPath(configDir, config, 'preview');
27
28
  const pid = await previewRendererInBackground(rendererDir, previewEnv, logPath);
28
29
  const previewUrl = getPreviewUrl(previewEnv);
29
- await writeRuntimeState(contentDir, {
30
+ await writeRuntimeState(configDir, config, {
30
31
  kind: 'preview',
31
32
  pid,
32
33
  logPath,
@@ -46,8 +47,8 @@ function getPreviewUrl(env) {
46
47
  const port = env.NUXT_PORT ?? env.PORT ?? '3000';
47
48
  return `http://${host}:${port}`;
48
49
  }
49
- function getPreviewEnv(env) {
50
- const host = env.NUXT_HOST ?? env.HOST ?? 'localhost';
50
+ function getPreviewEnv(env, overrideHost) {
51
+ const host = overrideHost ?? env.NUXT_HOST ?? env.HOST ?? 'localhost';
51
52
  const port = env.NUXT_PORT ?? env.PORT ?? '3000';
52
53
  return {
53
54
  ...env,
@@ -1 +1 @@
1
- {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/commands/preview.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/commands/preview.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  interface StartCommandOptions {
2
2
  detached?: boolean;
3
+ host?: string;
3
4
  }
4
5
  export declare function runStartCommand(contentDir: string, options?: StartCommandOptions): Promise<string | undefined>;
5
6
  export {};
@@ -4,26 +4,28 @@ import { getRuntimeLogPath, isProcessRunning, readRuntimeState, writeRuntimeStat
4
4
  import { ensureRendererDependencies, prepareRenderer, startRendererForeground, startRendererInBackground } from '../renderer/mdsite-nuxt.js';
5
5
  export async function runStartCommand(contentDir, options = {}) {
6
6
  if (options.detached) {
7
- return runDetachedStartCommand(contentDir);
7
+ return runDetachedStartCommand(contentDir, options);
8
8
  }
9
9
  const loaded = await loadMdsiteConfig(contentDir);
10
10
  const { rendererDir, rendererEnv } = await prepareRenderer(loaded.contentDir, loaded.config, loaded);
11
11
  await ensureRendererDependencies(rendererDir);
12
- await startRendererForeground(rendererDir, rendererEnv);
12
+ await startRendererForeground(rendererDir, withHostEnv(rendererEnv, options.host));
13
13
  return undefined;
14
14
  }
15
- async function runDetachedStartCommand(contentDir) {
16
- const existingState = await readRuntimeState(contentDir, 'start');
15
+ async function runDetachedStartCommand(contentDir, options) {
16
+ const loaded = await loadMdsiteConfig(contentDir);
17
+ const { config, configDir } = loaded;
18
+ const existingState = await readRuntimeState(configDir, config, 'start');
17
19
  if (existingState && isProcessRunning(existingState.pid)) {
18
20
  throw new Error(`mdsite start is already running with PID ${existingState.pid}.`);
19
21
  }
20
- const loaded = await loadMdsiteConfig(contentDir);
21
22
  const { rendererDir, rendererEnv } = await prepareRenderer(loaded.contentDir, loaded.config, loaded);
22
23
  await ensureRendererDependencies(rendererDir);
23
- const logPath = getRuntimeLogPath(contentDir, 'start');
24
- const pid = await startRendererInBackground(rendererDir, rendererEnv, logPath);
25
- const startUrl = getStartUrl(rendererEnv);
26
- await writeRuntimeState(contentDir, {
24
+ const env = withHostEnv(rendererEnv, options.host);
25
+ const logPath = getRuntimeLogPath(configDir, config, 'start');
26
+ const pid = await startRendererInBackground(rendererDir, env, logPath);
27
+ const startUrl = getStartUrl(env);
28
+ await writeRuntimeState(configDir, config, {
27
29
  kind: 'start',
28
30
  pid,
29
31
  logPath,
@@ -32,12 +34,23 @@ async function runDetachedStartCommand(contentDir) {
32
34
  command: ['npm', 'run', 'dev'],
33
35
  startedAt: new Date().toISOString()
34
36
  });
35
- const startReady = await waitForTcpPort(getStartHost(rendererEnv), Number.parseInt(getStartPort(rendererEnv), 10)).catch(() => false);
37
+ const startReady = await waitForTcpPort(getStartHost(env), Number.parseInt(getStartPort(env), 10)).catch(() => false);
36
38
  if (startReady) {
37
39
  await openUrlInBrowser(startUrl);
38
40
  }
39
41
  return `mdsite start running in background (PID ${pid}). Log: ${logPath}`;
40
42
  }
43
+ function withHostEnv(env, host) {
44
+ if (!host) {
45
+ return env;
46
+ }
47
+ return {
48
+ ...env,
49
+ NUXT_HOST: host,
50
+ HOST: host,
51
+ NITRO_HOST: host
52
+ };
53
+ }
41
54
  function getStartUrl(env) {
42
55
  return `http://${getStartHost(env)}:${getStartPort(env)}`;
43
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,12 @@
1
+ import { loadMdsiteConfig } from '../config/mdsite-config.js';
1
2
  import { clearRuntimeState, readRuntimeState } from '../process/runtime-state.js';
2
3
  import { stopProcess } from '../process/child-process.js';
3
4
  export async function runStopCommand(contentDir) {
5
+ const loaded = await loadMdsiteConfig(contentDir);
6
+ const { configDir, config } = loaded;
4
7
  const states = await Promise.all([
5
- readRuntimeState(contentDir, 'start'),
6
- readRuntimeState(contentDir, 'preview')
8
+ readRuntimeState(configDir, config, 'start'),
9
+ readRuntimeState(configDir, config, 'preview')
7
10
  ]);
8
11
  const messages = [];
9
12
  for (const state of states) {
@@ -11,7 +14,7 @@ export async function runStopCommand(contentDir) {
11
14
  continue;
12
15
  }
13
16
  const stopped = await stopProcess(state.pid);
14
- await clearRuntimeState(contentDir, state.kind);
17
+ await clearRuntimeState(configDir, config, state.kind);
15
18
  if (stopped) {
16
19
  messages.push(`Stopped ${state.kind} process ${state.pid}.`);
17
20
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAEzD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB;IACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/B,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC;QACrC,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAC;KACxC,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAQ;QACV,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC5C,MAAM,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAE/C,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,GAAG,GAAG,CAAC,CAAA;YAC5D,SAAQ;QACV,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,IAAI,kBAAkB,KAAK,CAAC,GAAG,GAAG,CAAC,CAAA;IAC1E,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,qBAAqB,CAAA;IAC9B,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC3B,CAAC"}
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAEzD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB;IACrD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAA;IACjD,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IAEpC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/B,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;QAC5C,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC;KAC/C,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAQ;QACV,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC5C,MAAM,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAEtD,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,GAAG,GAAG,CAAC,CAAA;YAC5D,SAAQ;QACV,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,IAAI,kBAAkB,KAAK,CAAC,GAAG,GAAG,CAAC,CAAA;IAC1E,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,qBAAqB,CAAA;IAC9B,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC3B,CAAC"}
@@ -10,9 +10,14 @@ vi.mock('../process/child-process.js', () => ({
10
10
  waitForTcpPort: waitForTcpPortMock,
11
11
  stopProcess: vi.fn()
12
12
  }));
13
+ vi.mock('../renderer/mdsite-nuxt.js', async (importOriginal) => {
14
+ const actual = await importOriginal();
15
+ return { ...actual, prepareRenderer: vi.fn() };
16
+ });
13
17
  import { serializeMdsiteConfig } from '../config/mdsite-config.js';
14
18
  import { openUrlInBrowser, stopProcess, waitForTcpPort, runBackground, runForeground } from '../process/child-process.js';
15
19
  import { readRuntimeState } from '../process/runtime-state.js';
20
+ import { prepareRenderer } from '../renderer/mdsite-nuxt.js';
16
21
  import { runGenerateCommand } from './generate.js';
17
22
  import { runInitCommand } from './init.js';
18
23
  import { runPreviewCommand } from './preview.js';
@@ -23,6 +28,7 @@ const runForegroundMock = vi.mocked(runForeground);
23
28
  const openUrlInBrowserMock = vi.mocked(openUrlInBrowser);
24
29
  const stopProcessMock = vi.mocked(stopProcess);
25
30
  const waitForTcpPortMocked = vi.mocked(waitForTcpPort);
31
+ const prepareRendererMock = vi.mocked(prepareRenderer);
26
32
  const tempDirs = [];
27
33
  async function makeTempDir() {
28
34
  const dir = await mkdtemp(path.join(os.tmpdir(), 'mdsite-workflows-'));
@@ -78,6 +84,17 @@ describe('CLI workflow coverage', () => {
78
84
  vi.clearAllMocks();
79
85
  openUrlInBrowserMock.mockResolvedValue(true);
80
86
  waitForTcpPortMocked.mockResolvedValue(true);
87
+ prepareRendererMock.mockImplementation(async (contentDir, _config, _options) => {
88
+ const rendererDir = path.join(contentDir, '.renderer');
89
+ return {
90
+ rendererDir,
91
+ rendererEnv: {
92
+ NUXT_CONTENT_PATH: contentDir,
93
+ CONTENT_DIR: contentDir,
94
+ MDSITE_CONFIG_PATH: path.join(contentDir, 'mdsite.yml')
95
+ }
96
+ };
97
+ });
81
98
  });
82
99
  it('runInitCommand creates a valid mdsite.yml and pins Node 24 via .nvmrc', async () => {
83
100
  const contentDir = await createContentDir();
@@ -90,23 +107,62 @@ describe('CLI workflow coverage', () => {
90
107
  const nvmrcPath = path.join(contentDir, '.nvmrc');
91
108
  const nvmrcText = await readFile(nvmrcPath, 'utf8');
92
109
  expect(nvmrcText).toBe('24\n');
110
+ const gitignorePath = path.join(contentDir, '.gitignore');
111
+ const gitignoreText = await readFile(gitignorePath, 'utf8');
112
+ expect(gitignoreText).toContain('.mdsite/*');
113
+ expect(gitignoreText).toContain('!.mdsite/package.json');
114
+ expect(gitignoreText).toContain('!.mdsite/package-lock.json');
115
+ expect(gitignoreText).toContain('.output/');
116
+ expect(gitignoreText).toContain('# end mdsite');
117
+ const rendererPkgText = await readFile(path.join(contentDir, '.mdsite', 'package.json'), 'utf8');
118
+ expect(rendererPkgText).toContain('mdsite-nuxt-renderer');
119
+ await expect(access(path.join(contentDir, '.mdsite', 'package-lock.json'))).resolves.toBeUndefined();
120
+ });
121
+ it('runInitCommand preserves existing user .gitignore entries while adding mdsite managed patterns', async () => {
122
+ const contentDir = await createContentDir();
123
+ // Seed user entries PLUS a prior mdsite managed block (simulates a previous init) to prove the merge strips the old block and re-appends exactly one.
124
+ const seededGitignore = [
125
+ 'secret.env',
126
+ 'build/',
127
+ '# mdsite: generated state (renderer working dir; lockfile pair committed for reproducible CI)',
128
+ '.mdsite/*',
129
+ '!.mdsite/package.json',
130
+ '!.mdsite/package-lock.json',
131
+ '.output/',
132
+ '# end mdsite'
133
+ ].join('\n') + '\n';
134
+ await writeFile(path.join(contentDir, '.gitignore'), seededGitignore, 'utf8');
135
+ await expect(runInitCommand(contentDir)).resolves.toBe(`Created mdsite.yml and .nvmrc in ${contentDir}`);
136
+ const gitignoreText = await readFile(path.join(contentDir, '.gitignore'), 'utf8');
137
+ // User entries preserved verbatim
138
+ expect(gitignoreText).toContain('secret.env');
139
+ expect(gitignoreText).toContain('build/');
140
+ // Managed block present
141
+ expect(gitignoreText).toContain('.mdsite/*');
142
+ expect(gitignoreText).toContain('!.mdsite/package.json');
143
+ expect(gitignoreText).toContain('!.mdsite/package-lock.json');
144
+ expect(gitignoreText).toContain('.output/');
145
+ expect(gitignoreText).toContain('# end mdsite');
146
+ // Idempotent: exactly ONE managed header, ONE end marker, ONE of each required pattern (no duplication from the seeded prior block)
147
+ expect(gitignoreText.split('# mdsite:').length - 1).toBe(1);
148
+ expect(gitignoreText.split('# end mdsite').length - 1).toBe(1);
149
+ expect(gitignoreText.split('.mdsite/*').length - 1).toBe(1);
150
+ expect(gitignoreText.split('.output/').length - 1).toBe(1);
93
151
  });
94
152
  it('runStartCommand in detached mode prepares the renderer against the current markdown directory and tracks the background process', async () => {
95
153
  const contentDir = await createContentDir();
96
154
  const rendererDir = await createRendererDir(contentDir);
97
- await writeConfig(contentDir);
155
+ const config = await writeConfig(contentDir);
98
156
  runBackgroundMock.mockResolvedValueOnce(4321);
99
- await expect(runStartCommand(contentDir, { detached: true })).resolves.toBe(`mdsite start running in background (PID 4321). Log: ${path.join(contentDir, '.mdsite-runtime', 'start.log')}`);
157
+ await expect(runStartCommand(contentDir, { detached: true })).resolves.toBe(`mdsite start running in background (PID 4321). Log: ${path.join(contentDir, '.renderer', 'start.log')}`);
100
158
  expect(runBackgroundMock).toHaveBeenCalledWith('npm', ['run', 'dev'], rendererDir, expect.objectContaining({
101
159
  NUXT_CONTENT_PATH: contentDir,
102
160
  CONTENT_DIR: contentDir,
103
161
  MDSITE_CONFIG_PATH: path.join(contentDir, 'mdsite.yml')
104
- }), path.join(contentDir, '.mdsite-runtime', 'start.log'));
162
+ }), path.join(contentDir, '.renderer', 'start.log'));
105
163
  expect(waitForTcpPortMocked).toHaveBeenCalledWith('localhost', 3000);
106
164
  expect(openUrlInBrowserMock).toHaveBeenCalledWith('http://localhost:3000');
107
- expect(await readFile(path.join(rendererDir, '.env'), 'utf8')).toContain(`NUXT_CONTENT_PATH=${JSON.stringify(contentDir)}`);
108
- expect(await readFile(path.join(rendererDir, 'content.config.yml'), 'utf8')).toContain('siteName: Workspace Docs');
109
- await expect(readRuntimeState(contentDir, 'start')).resolves.toEqual(expect.objectContaining({
165
+ await expect(readRuntimeState(contentDir, config, 'start')).resolves.toEqual(expect.objectContaining({
110
166
  pid: 4321,
111
167
  rendererDir,
112
168
  contentDir,
@@ -129,8 +185,8 @@ describe('CLI workflow coverage', () => {
129
185
  await writeFile(path.join(cwd, '.output', 'public', 'index.html'), '<h1>generated</h1>', 'utf8');
130
186
  }
131
187
  });
132
- await expect(runGenerateCommand(contentDir)).resolves.toBe(`Generated site synced to ${path.join(contentDir, 'public', 'site')}`);
133
- expect(await readFile(path.join(contentDir, 'public', 'site', 'index.html'), 'utf8')).toBe('<h1>generated</h1>');
188
+ await expect(runGenerateCommand(contentDir)).resolves.toBe(`Generated site synced to ${path.join(contentDir, 'public', 'site', 'public')}`);
189
+ expect(await readFile(path.join(contentDir, 'public', 'site', 'public', 'index.html'), 'utf8')).toBe('<h1>generated</h1>');
134
190
  expect(runForegroundMock).toHaveBeenCalledWith('npm', ['run', 'generate'], rendererDir, expect.objectContaining({
135
191
  NUXT_CONTENT_PATH: contentDir
136
192
  }));
@@ -138,20 +194,20 @@ describe('CLI workflow coverage', () => {
138
194
  it('runPreviewCommand works after runGenerateCommand creates only the public artifact', async () => {
139
195
  const contentDir = await createContentDir();
140
196
  const rendererDir = await createRendererDir(contentDir);
141
- await writeConfig(contentDir);
197
+ const config = await writeConfig(contentDir);
142
198
  runForegroundMock.mockImplementation(async (_command, args, cwd) => {
143
199
  if (args[0] === 'run' && args[1] === 'generate') {
144
200
  await mkdir(path.join(cwd, '.output', 'public'), { recursive: true });
145
201
  await writeFile(path.join(cwd, '.output', 'public', 'index.html'), '<h1>generated</h1>', 'utf8');
146
202
  }
147
203
  });
148
- await expect(runGenerateCommand(contentDir)).resolves.toBe(`Generated site synced to ${path.join(contentDir, '.output')}`);
204
+ await expect(runGenerateCommand(contentDir)).resolves.toBe(`Generated site synced to ${path.join(contentDir, '.output', 'public')}`);
149
205
  runBackgroundMock.mockResolvedValueOnce(2468);
150
206
  stopProcessMock.mockResolvedValueOnce(true);
151
- await expect(runPreviewCommand(contentDir, { detached: true })).resolves.toBe(`mdsite preview running in background (PID 2468). URL: http://localhost:3000 Log: ${path.join(contentDir, 'mdsite.log')}`);
207
+ await expect(runPreviewCommand(contentDir, { detached: true })).resolves.toBe(`mdsite preview running in background (PID 2468). URL: http://localhost:3000 Log: ${path.join(contentDir, '.renderer', 'preview.log')}`);
152
208
  expect(openUrlInBrowserMock).toHaveBeenCalledWith('http://localhost:3000');
153
209
  await expect(runStopCommand(contentDir)).resolves.toBe('Stopped preview process 2468.');
154
- await expect(readRuntimeState(contentDir, 'preview')).resolves.toBeNull();
210
+ await expect(readRuntimeState(contentDir, config, 'preview')).resolves.toBeNull();
155
211
  });
156
212
  it('rejects start when mdsite.yml is missing', async () => {
157
213
  const contentDir = await createContentDir();
@@ -159,27 +215,28 @@ describe('CLI workflow coverage', () => {
159
215
  });
160
216
  it('rejects invalid config files before starting the renderer', async () => {
161
217
  const contentDir = await createContentDir();
218
+ const config = await writeConfig(contentDir);
162
219
  await writeFile(path.join(contentDir, 'mdsite.yml'), 'site: [broken\n', 'utf8');
163
220
  await expect(runStartCommand(contentDir)).rejects.toThrow();
164
- await expect(readRuntimeState(contentDir, 'start')).resolves.toBeNull();
221
+ await expect(readRuntimeState(contentDir, config, 'start')).resolves.toBeNull();
165
222
  });
166
223
  it('surfaces install failures and does not persist start state', async () => {
167
224
  const contentDir = await createContentDir();
168
225
  await createRendererDir(contentDir, false);
169
- await writeConfig(contentDir);
226
+ const config = await writeConfig(contentDir);
170
227
  runForegroundMock.mockRejectedValueOnce(new Error('npm install failed'));
171
228
  await expect(runStartCommand(contentDir)).rejects.toThrow('npm install failed');
172
- await expect(readRuntimeState(contentDir, 'start')).resolves.toBeNull();
229
+ await expect(readRuntimeState(contentDir, config, 'start')).resolves.toBeNull();
173
230
  });
174
231
  it('does not leave tracked start state or logs behind when foreground renderer fails to boot', async () => {
175
232
  const contentDir = await createContentDir();
176
233
  await createRendererDir(contentDir);
177
- await writeConfig(contentDir);
234
+ const config = await writeConfig(contentDir);
178
235
  runForegroundMock.mockRejectedValueOnce(new Error('Failed to start npm run dev.'));
179
236
  await expect(runStartCommand(contentDir)).rejects.toThrow('Failed to start npm run dev.');
180
- await expect(readRuntimeState(contentDir, 'start')).resolves.toBeNull();
181
- await expect(access(path.join(contentDir, '.mdsite-runtime', 'start.json'))).rejects.toThrow();
182
- await expect(access(path.join(contentDir, '.mdsite-runtime', 'start.log'))).rejects.toThrow();
237
+ await expect(readRuntimeState(contentDir, config, 'start')).resolves.toBeNull();
238
+ await expect(access(path.join(contentDir, '.renderer', 'start.json'))).rejects.toThrow();
239
+ await expect(access(path.join(contentDir, '.renderer', 'start.log'))).rejects.toThrow();
183
240
  });
184
241
  });
185
242
  //# sourceMappingURL=workflows.test.js.map