@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.
- package/README.md +39 -21
- package/dist/commands/commands.test.js +91 -30
- package/dist/commands/commands.test.js.map +1 -1
- package/dist/commands/init.js +54 -4
- 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 +76 -19
- 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 +42 -7
- 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/app/pages/[...slug].vue +4 -2
- package/mdsite-nuxt/app/pages/index.vue +4 -2
- package/mdsite-nuxt/assets/default-favicon.svg +223 -0
- package/mdsite-nuxt/nuxt.config.ts +11 -1
- package/mdsite-nuxt/scripts/generate-favicons.test.ts +123 -0
- package/mdsite-nuxt/scripts/generate-favicons.ts +60 -61
- 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/dist/commands/prepare.js
CHANGED
|
@@ -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
|
|
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:
|
|
53
|
-
|
|
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
|
-
|
|
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
|
-
|
|
71
|
-
|
|
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 }}-
|
|
75
|
+
' ${{ runner.os }}-mdsite-',
|
|
74
76
|
'',
|
|
75
|
-
' - name:
|
|
76
|
-
|
|
77
|
-
'
|
|
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
|
|
80
|
-
|
|
81
|
-
' run:
|
|
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":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,iCAAiC,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AAE7J,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,UAAkB;IAC9D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAA;IACjD,MAAM,iCAAiC,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjF,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,MAAM,yBAAyB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE9G,MAAM,0BAA0B,CAAC,WAAW,CAAC,CAAA;IAC7C,MAAM,sBAAsB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;IAEtD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;IAChF,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5D,MAAM,SAAS,CAAC,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;IAEzE,OAAO,sCAAsC,YAAY,EAAE,CAAA;AAC7D,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA8D;IACzF,MAAM,
|
|
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('
|
|
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('
|
|
51
|
-
expect(workflow).toContain('
|
|
52
|
-
expect(workflow).
|
|
53
|
-
expect(workflow).
|
|
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('
|
|
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('
|
|
103
|
-
expect(workflow).toContain('
|
|
104
|
-
expect(workflow).
|
|
105
|
-
expect(workflow).
|
|
106
|
-
expect(workflow).not.toContain('
|
|
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('
|
|
127
|
+
expect(workflow).toContain('submodules: true');
|
|
134
128
|
expect(workflow).toContain('node-version: "24"');
|
|
135
|
-
expect(workflow).toContain('cache
|
|
136
|
-
expect(workflow).toContain(
|
|
137
|
-
expect(workflow).toContain('
|
|
138
|
-
expect(workflow).
|
|
139
|
-
expect(workflow).
|
|
140
|
-
expect(workflow).
|
|
141
|
-
expect(workflow).
|
|
142
|
-
expect(workflow).toContain('
|
|
143
|
-
expect(workflow).toContain('
|
|
144
|
-
expect(workflow).not.toContain('
|
|
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":"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
|
|
1
|
+
{"version":3,"file":"prepare.test.js","sourceRoot":"","sources":["../../src/commands/prepare.test.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/preview.js
CHANGED
|
@@ -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
|
|
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(
|
|
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(
|
|
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":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACtH,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,eAAe,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/commands/preview.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/start.d.ts
CHANGED
package/dist/commands/start.js
CHANGED
|
@@ -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
|
|
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
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
|
|
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(
|
|
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":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACtH,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/stop.js
CHANGED
|
@@ -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(
|
|
6
|
-
readRuntimeState(
|
|
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(
|
|
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,
|
|
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, '.
|
|
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, '.
|
|
162
|
+
}), path.join(contentDir, '.renderer', 'start.log'));
|
|
105
163
|
expect(waitForTcpPortMocked).toHaveBeenCalledWith('localhost', 3000);
|
|
106
164
|
expect(openUrlInBrowserMock).toHaveBeenCalledWith('http://localhost:3000');
|
|
107
|
-
|
|
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, '
|
|
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, '.
|
|
182
|
-
await expect(access(path.join(contentDir, '.
|
|
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
|