@life-and-dev/mdsite 0.0.8 → 0.0.12
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 +23 -1
- package/dist/commands/prepare.js +10 -12
- package/dist/commands/prepare.js.map +1 -1
- package/dist/commands/prepare.test.js +9 -6
- package/dist/commands/prepare.test.js.map +1 -1
- package/mdsite-nuxt/app/components/AppFooter.vue +6 -4
- package/mdsite-nuxt/app/composables/useNavigationTree.ts +3 -1
- package/mdsite-nuxt/app/composables/useSearchIndex.ts +3 -1
- package/mdsite-nuxt/nuxt.config.ts +7 -4
- package/mdsite-nuxt/package-lock.json +4414 -4615
- package/mdsite-nuxt/package.json +19 -19
- package/mdsite-nuxt/scripts/base-url.test.ts +22 -0
- package/mdsite-nuxt/scripts/generate-favicons.ts +2 -2
- package/mdsite-nuxt/scripts/renderer-hooks.test.ts +34 -0
- package/mdsite-nuxt/scripts/renderer-hooks.ts +5 -4
- package/mdsite-nuxt/utils/base-url.ts +25 -0
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -67,6 +67,29 @@ mdsite-dev stop
|
|
|
67
67
|
|
|
68
68
|
> [!NOTE] When using `mdsite-dev` locally (e.g. `npm run install-alias`), the CLI utility is called `mdsite-dev`. When installed globally via npm registry, the CLI utility is called `mdsite` instead.
|
|
69
69
|
|
|
70
|
+
## Release version and npm publish
|
|
71
|
+
|
|
72
|
+
The npm package is `@life-and-dev/mdsite`. To bump the package version and create a release tag, run:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
npm run release:version -- patch
|
|
76
|
+
npm run release:version -- minor
|
|
77
|
+
npm run release:version -- major
|
|
78
|
+
npm run release:version -- x.y.z
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
The script updates `package.json` and `package-lock.json` with `npm version`, runs typecheck, build, and package verification, commits `chore: release v<version>`, and creates a local annotated tag named `v<version>`.
|
|
82
|
+
|
|
83
|
+
The script does not push changes or publish to npm. Push the release commit and tag manually:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
git push origin main
|
|
87
|
+
git push origin v<version>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
> [!WARNING]
|
|
91
|
+
> Pushing the `v<version>` tag triggers the GitHub Actions npm publish workflow with provenance. The `npm-publish.yml` workflow requires npm Trusted Publisher configuration for `@life-and-dev/mdsite`.
|
|
92
|
+
|
|
70
93
|
## Supported CLI flow
|
|
71
94
|
|
|
72
95
|
### Check the CLI version
|
|
@@ -225,4 +248,3 @@ Run `mdsite generate` first. `preview` requires an existing generated renderer b
|
|
|
225
248
|
| `site.name` | derived from `index.md` or directory | Site name passed to the renderer. |
|
|
226
249
|
| `themes.light.colors` | built-in palette | Light theme colour overrides. |
|
|
227
250
|
| `themes.dark.colors` | built-in palette | Dark theme colour overrides. |
|
|
228
|
-
|
package/dist/commands/prepare.js
CHANGED
|
@@ -16,7 +16,7 @@ export async function runPrepareGithubCommand(contentDir) {
|
|
|
16
16
|
function buildGithubWorkflow(config) {
|
|
17
17
|
const rendererPath = path.posix.normalize(config.server.path.replace(/\\/g, '/'));
|
|
18
18
|
const outputPath = path.posix.join(rendererPath, path.posix.normalize(config.server.output.replace(/\\/g, '/')));
|
|
19
|
-
const workflowName =
|
|
19
|
+
const workflowName = 'Deploy Docs';
|
|
20
20
|
const artifactPath = `./${outputPath}/public`;
|
|
21
21
|
const workspaceContentPath = config.content?.path ? `\${{ github.workspace }}/${path.posix.normalize(config.content.path.replace(/\\/g, '/'))}` : '${{ github.workspace }}';
|
|
22
22
|
return [
|
|
@@ -45,22 +45,22 @@ function buildGithubWorkflow(config) {
|
|
|
45
45
|
' MDSITE_CONFIG_PATH: "${{ github.workspace }}/mdsite.yml"',
|
|
46
46
|
' steps:',
|
|
47
47
|
' - name: Checkout',
|
|
48
|
-
' uses: actions/checkout@
|
|
48
|
+
' uses: actions/checkout@v7',
|
|
49
49
|
'',
|
|
50
50
|
' - name: Setup mdsite renderer',
|
|
51
51
|
' run: |',
|
|
52
|
-
' npm install --no-save mdsite',
|
|
52
|
+
' npm install --no-save @life-and-dev/mdsite',
|
|
53
53
|
" node <<'NODE'",
|
|
54
54
|
" const fs = require('node:fs')",
|
|
55
55
|
" const path = require('node:path')",
|
|
56
56
|
" const ignored = new Set(['node_modules', '.nuxt', '.output', 'dist', '.cache'])",
|
|
57
|
-
" const source = path.join(process.cwd(), 'node_modules', 'mdsite', 'mdsite-nuxt')",
|
|
57
|
+
" const source = path.join(process.cwd(), 'node_modules', '@life-and-dev', 'mdsite', 'mdsite-nuxt')",
|
|
58
58
|
` const target = path.join(process.cwd(), ${JSON.stringify(rendererPath)})`,
|
|
59
59
|
' fs.cpSync(source, target, { recursive: true, force: true, filter: (sourcePath) => !ignored.has(path.basename(sourcePath)) })',
|
|
60
60
|
' NODE',
|
|
61
61
|
'',
|
|
62
62
|
' - name: Setup Node',
|
|
63
|
-
' uses: actions/setup-node@
|
|
63
|
+
' uses: actions/setup-node@v6',
|
|
64
64
|
' with:',
|
|
65
65
|
' node-version: "24"',
|
|
66
66
|
' cache: npm',
|
|
@@ -68,15 +68,13 @@ function buildGithubWorkflow(config) {
|
|
|
68
68
|
'',
|
|
69
69
|
' - name: Setup Pages',
|
|
70
70
|
' id: pages',
|
|
71
|
-
' uses: actions/configure-pages@
|
|
71
|
+
' uses: actions/configure-pages@v6',
|
|
72
72
|
'',
|
|
73
73
|
' - name: Restore cache',
|
|
74
|
-
' uses: actions/cache@
|
|
74
|
+
' uses: actions/cache@v5',
|
|
75
75
|
' with:',
|
|
76
76
|
' path: |',
|
|
77
77
|
` ${rendererPath}/node_modules`,
|
|
78
|
-
` ${rendererPath}/.nuxt`,
|
|
79
|
-
` ${outputPath}`,
|
|
80
78
|
" key: ${{ runner.os }}-nuxt-build-${{ hashFiles('" + rendererPath + "/package-lock.json') }}",
|
|
81
79
|
' restore-keys: |',
|
|
82
80
|
' ${{ runner.os }}-nuxt-build-',
|
|
@@ -89,10 +87,10 @@ function buildGithubWorkflow(config) {
|
|
|
89
87
|
` working-directory: ${rendererPath}`,
|
|
90
88
|
' run: npm run generate',
|
|
91
89
|
' env:',
|
|
92
|
-
' NUXT_APP_BASE_URL: ${{ steps.pages.outputs.base_path }}',
|
|
90
|
+
' NUXT_APP_BASE_URL: ${{ steps.pages.outputs.base_path }}/',
|
|
93
91
|
'',
|
|
94
92
|
' - name: Upload artifact',
|
|
95
|
-
' uses: actions/upload-pages-artifact@
|
|
93
|
+
' uses: actions/upload-pages-artifact@v5',
|
|
96
94
|
' with:',
|
|
97
95
|
` path: ${JSON.stringify(artifactPath)}`,
|
|
98
96
|
'',
|
|
@@ -105,7 +103,7 @@ function buildGithubWorkflow(config) {
|
|
|
105
103
|
' steps:',
|
|
106
104
|
' - name: Deploy to GitHub Pages',
|
|
107
105
|
' id: deployment',
|
|
108
|
-
' uses: actions/deploy-pages@
|
|
106
|
+
' uses: actions/deploy-pages@v5'
|
|
109
107
|
].join('\n') + '\n';
|
|
110
108
|
}
|
|
111
109
|
//# sourceMappingURL=prepare.js.map
|
|
@@ -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,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;IACjF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;IAChH,MAAM,YAAY,GAAG,
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/commands/prepare.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,24 +39,27 @@ describe('runPrepareGithubCommand', () => {
|
|
|
39
39
|
const workflowPath = path.join(contentDir, '.github', 'workflows', 'deploy.yml');
|
|
40
40
|
const workflow = await readFile(workflowPath, 'utf8');
|
|
41
41
|
expect(result).toBe(`Generated GitHub Pages workflow at ${workflowPath}`);
|
|
42
|
-
expect(workflow).toContain('name: "Deploy
|
|
42
|
+
expect(workflow).toContain('name: "Deploy Docs"');
|
|
43
43
|
expect(workflow).toContain('runs-on: ubuntu-latest');
|
|
44
44
|
expect(workflow).toContain('node-version: "24"');
|
|
45
45
|
expect(workflow).toContain('working-directory: renderer');
|
|
46
|
-
expect(workflow).toContain('NUXT_APP_BASE_URL: ${{ steps.pages.outputs.base_path }}');
|
|
46
|
+
expect(workflow).toContain('NUXT_APP_BASE_URL: ${{ steps.pages.outputs.base_path }}/');
|
|
47
47
|
expect(workflow).toContain('NUXT_CONTENT_PATH: "${{ github.workspace }}"');
|
|
48
48
|
expect(workflow).toContain('CONTENT_DIR: "${{ github.workspace }}"');
|
|
49
49
|
expect(workflow).toContain('MDSITE_CONFIG_PATH: "${{ github.workspace }}/mdsite.yml"');
|
|
50
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');
|
|
51
54
|
expect(workflow).toContain('name: Setup mdsite renderer');
|
|
52
|
-
expect(workflow).toContain('npm install --no-save mdsite');
|
|
53
|
-
expect(workflow).toContain("node_modules', 'mdsite', 'mdsite-nuxt");
|
|
55
|
+
expect(workflow).toContain('npm install --no-save @life-and-dev/mdsite');
|
|
56
|
+
expect(workflow).toContain("node_modules', '@life-and-dev', 'mdsite', 'mdsite-nuxt");
|
|
54
57
|
expect(workflow).toContain('renderer/build/site');
|
|
55
58
|
expect(workflow).toContain('path: "./renderer/build/site/public"');
|
|
56
59
|
expect(workflow).toContain('run: npm run generate');
|
|
57
60
|
expect(workflow).not.toContain('npm start -- --generate');
|
|
58
|
-
expect(workflow).toContain('actions/upload-pages-artifact@
|
|
59
|
-
expect(workflow).toContain('actions/deploy-pages@
|
|
61
|
+
expect(workflow).toContain('actions/upload-pages-artifact@v5');
|
|
62
|
+
expect(workflow).toContain('actions/deploy-pages@v5');
|
|
60
63
|
expect(runForegroundMock).toHaveBeenCalledTimes(1);
|
|
61
64
|
expect(runForegroundMock).toHaveBeenCalledWith('npm', ['run', 'prepare:renderer'], rendererDir, expect.objectContaining({
|
|
62
65
|
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,
|
|
1
|
+
{"version":3,"file":"prepare.test.js","sourceRoot":"","sources":["../../src/commands/prepare.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<v-container class="d-flex justify-center align-center">
|
|
9
9
|
<div class="footer-links">
|
|
10
10
|
<v-btn
|
|
11
|
-
:
|
|
11
|
+
:href="aboutLink"
|
|
12
12
|
variant="text"
|
|
13
13
|
color="on-surface-appbar"
|
|
14
14
|
class="footer-link"
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
<v-divider vertical class="mx-2" />
|
|
20
20
|
|
|
21
21
|
<v-btn
|
|
22
|
-
:
|
|
22
|
+
:href="disclaimerLink"
|
|
23
23
|
variant="text"
|
|
24
24
|
color="on-surface-appbar"
|
|
25
25
|
class="footer-link"
|
|
@@ -47,12 +47,14 @@
|
|
|
47
47
|
|
|
48
48
|
<script setup lang="ts">
|
|
49
49
|
import { useSourceEdit } from '~/composables/useSourceEdit';
|
|
50
|
+
import { withBasePath } from '../../utils/base-url'
|
|
50
51
|
|
|
52
|
+
const appBaseURL = useRuntimeConfig().app.baseURL
|
|
51
53
|
const { getEditUrl } = useSourceEdit()
|
|
52
54
|
|
|
53
55
|
// Generate links to root content files
|
|
54
|
-
const aboutLink = computed(() => '/about')
|
|
55
|
-
const disclaimerLink = computed(() => '/disclaimer')
|
|
56
|
+
const aboutLink = computed(() => withBasePath('/about', appBaseURL))
|
|
57
|
+
const disclaimerLink = computed(() => withBasePath('/disclaimer', appBaseURL))
|
|
56
58
|
const editUrl = computed(() => getEditUrl())
|
|
57
59
|
</script>
|
|
58
60
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { MinimalTreeNode } from '../../scripts/generate-indices'
|
|
2
|
+
import { withBasePath } from '../../utils/base-url'
|
|
2
3
|
|
|
3
4
|
export interface TreeNode {
|
|
4
5
|
id: string
|
|
@@ -30,6 +31,7 @@ function getCacheKey(): string {
|
|
|
30
31
|
* Build hierarchical navigation tree from @nuxt/content collection
|
|
31
32
|
*/
|
|
32
33
|
export function useNavigationTree() {
|
|
34
|
+
const appBaseURL = useRuntimeConfig().app.baseURL
|
|
33
35
|
// Use useState for server-side rendering and client hydration
|
|
34
36
|
// Cache key changes hourly to pick up menu structure changes
|
|
35
37
|
const tree = useState<TreeNode | null>(getCacheKey(), () => null)
|
|
@@ -50,7 +52,7 @@ export function useNavigationTree() {
|
|
|
50
52
|
isLoading.value = true
|
|
51
53
|
try {
|
|
52
54
|
// Fetch pre-built navigation JSON
|
|
53
|
-
const minimalNodes = await $fetch<MinimalTreeNode[]>('/_navigation.json')
|
|
55
|
+
const minimalNodes = await $fetch<MinimalTreeNode[]>(withBasePath('/_navigation.json', appBaseURL))
|
|
54
56
|
|
|
55
57
|
// Convert to TreeNode format with parent references
|
|
56
58
|
tree.value = buildTreeFromMinimalNodes(minimalNodes)
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { SearchIndexEntry } from '../../scripts/generate-indices'
|
|
2
|
+
import { withBasePath } from '../../utils/base-url'
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Fetch and cache search index from pre-built JSON file
|
|
5
6
|
* Uses useState to prevent duplicate fetches across component instances
|
|
6
7
|
*/
|
|
7
8
|
export function useSearchIndex() {
|
|
9
|
+
const appBaseURL = useRuntimeConfig().app.baseURL
|
|
8
10
|
// Cache search index using useState (shared across all components)
|
|
9
11
|
const searchIndex = useState<SearchIndexEntry[] | null>('search-index', () => null)
|
|
10
12
|
const isLoading = useState<boolean>('search-index-loading', () => false)
|
|
@@ -27,7 +29,7 @@ export function useSearchIndex() {
|
|
|
27
29
|
isLoading.value = true
|
|
28
30
|
|
|
29
31
|
try {
|
|
30
|
-
const index = await $fetch<SearchIndexEntry[]>('/_search-index.json')
|
|
32
|
+
const index = await $fetch<SearchIndexEntry[]>(withBasePath('/_search-index.json', appBaseURL))
|
|
31
33
|
searchIndex.value = index
|
|
32
34
|
return index
|
|
33
35
|
} catch (error) {
|
|
@@ -3,10 +3,12 @@ import path from 'path'
|
|
|
3
3
|
import { getDomainThemes } from './app/config/themes'
|
|
4
4
|
import { createBibleReferencePatterns } from './app/utils/bible-book-names'
|
|
5
5
|
import { runBuildFallbackHooks } from './scripts/renderer-hooks'
|
|
6
|
+
import { withBasePath } from './utils/base-url'
|
|
6
7
|
import { loadMdsiteConfigSync } from './utils/mdsite-config'
|
|
7
8
|
|
|
8
9
|
const mdsite = loadMdsiteConfigSync()
|
|
9
10
|
const siteConfig = mdsite.config
|
|
11
|
+
const appBaseURL = process.env.NUXT_APP_BASE_URL || '/'
|
|
10
12
|
|
|
11
13
|
export default defineNuxtConfig({
|
|
12
14
|
compatibilityDate: '2025-07-15',
|
|
@@ -53,12 +55,13 @@ export default defineNuxtConfig({
|
|
|
53
55
|
},
|
|
54
56
|
|
|
55
57
|
app: {
|
|
58
|
+
baseURL: appBaseURL,
|
|
56
59
|
head: {
|
|
57
60
|
link: [
|
|
58
|
-
{ rel: 'icon', type: 'image/svg+xml', href: '/favicon.svg', sizes: 'any' },
|
|
59
|
-
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico', sizes: '32x32' },
|
|
60
|
-
{ rel: 'apple-touch-icon', href: '/apple-touch-icon.png' },
|
|
61
|
-
{ rel: 'manifest', href: '/site.webmanifest' },
|
|
61
|
+
{ rel: 'icon', type: 'image/svg+xml', href: withBasePath('/favicon.svg', appBaseURL), sizes: 'any' },
|
|
62
|
+
{ rel: 'icon', type: 'image/x-icon', href: withBasePath('/favicon.ico', appBaseURL), sizes: '32x32' },
|
|
63
|
+
{ rel: 'apple-touch-icon', href: withBasePath('/apple-touch-icon.png', appBaseURL) },
|
|
64
|
+
{ rel: 'manifest', href: withBasePath('/site.webmanifest', appBaseURL) },
|
|
62
65
|
{ rel: 'stylesheet', href: 'https://cdn.jsdelivr.net/npm/@mdi/font@7.4.47/css/materialdesignicons.min.css' },
|
|
63
66
|
{ rel: 'stylesheet', href: 'https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;700&display=swap' }
|
|
64
67
|
]
|