Linty fresh
This commit is contained in:
34
README.md
34
README.md
@@ -29,23 +29,23 @@ pnpm preview # preview build at http://localhost:4173
|
|||||||
|
|
||||||
## Scripts
|
## Scripts
|
||||||
|
|
||||||
| Script | Description |
|
| Script | Description |
|
||||||
| -------------------- | ------------------------------------------------------------------------------------------------ |
|
| --------------------------- | ------------------------------------------------------------------------------------------ |
|
||||||
| `pnpm dev:bio` | Start Vite dev server for mifi.bio |
|
| `pnpm dev:bio` | Start Vite dev server for mifi.bio |
|
||||||
| `pnpm dev:dev` | Start Vite dev server for mifi.dev |
|
| `pnpm dev:dev` | Start Vite dev server for mifi.dev |
|
||||||
| `pnpm build` | Build static site to `build/` |
|
| `pnpm build` | Build static site to `build/` |
|
||||||
| `pnpm build:full` | Build + inline critical CSS (run `pnpm run critical-css:install` once to install Chromium) |
|
| `pnpm build:full` | Build + inline critical CSS (run `pnpm run critical-css:install` once to install Chromium) |
|
||||||
| `pnpm critical-css:install` | Install Chromium for critical CSS (required once before first `build:full`) |
|
| `pnpm critical-css:install` | Install Chromium for critical CSS (required once before first `build:full`) |
|
||||||
| `pnpm preview` | Serve `build/` locally |
|
| `pnpm preview` | Serve `build/` locally |
|
||||||
| `pnpm check` | Run `svelte-kit sync` and `svelte-check` |
|
| `pnpm check` | Run `svelte-kit sync` and `svelte-check` |
|
||||||
| `pnpm lint` | ESLint + Stylelint |
|
| `pnpm lint` | ESLint + Stylelint |
|
||||||
| `pnpm format` | Prettier (write) |
|
| `pnpm format` | Prettier (write) |
|
||||||
| `pnpm format:check` | Prettier (check only) |
|
| `pnpm format:check` | Prettier (check only) |
|
||||||
| `pnpm test` | Vitest (watch) |
|
| `pnpm test` | Vitest (watch) |
|
||||||
| `pnpm test:run` | Vitest (single run) |
|
| `pnpm test:run` | Vitest (single run) |
|
||||||
| `pnpm test:coverage` | Vitest with coverage |
|
| `pnpm test:coverage` | Vitest with coverage |
|
||||||
| `pnpm test:e2e` | Playwright e2e (starts preview, then runs tests) |
|
| `pnpm test:e2e` | Playwright e2e (starts preview, then runs tests) |
|
||||||
| `pnpm test:e2e:ui` | Playwright e2e in UI mode |
|
| `pnpm test:e2e:ui` | Playwright e2e in UI mode |
|
||||||
|
|
||||||
## Project layout
|
## Project layout
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,7 @@ services:
|
|||||||
pull_policy: always
|
pull_policy: always
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test:
|
test: ['CMD', 'wget', '--quiet', '--tries=1', '--spider', 'http://127.0.0.1/']
|
||||||
["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://127.0.0.1/"]
|
|
||||||
interval: 30s
|
interval: 30s
|
||||||
timeout: 3s
|
timeout: 3s
|
||||||
start_period: 5s
|
start_period: 5s
|
||||||
|
|||||||
@@ -81,13 +81,13 @@ try {
|
|||||||
const scriptPath = join(immutableDir, filename);
|
const scriptPath = join(immutableDir, filename);
|
||||||
writeFileSync(scriptPath, content.trimStart(), 'utf-8');
|
writeFileSync(scriptPath, content.trimStart(), 'utf-8');
|
||||||
const scriptTag = `<script src="./_app/immutable/${filename}"></script>`;
|
const scriptTag = `<script src="./_app/immutable/${filename}"></script>`;
|
||||||
html =
|
html = html.slice(0, found.start) + scriptTag + html.slice(found.end);
|
||||||
html.slice(0, found.start) +
|
|
||||||
scriptTag +
|
|
||||||
html.slice(found.end);
|
|
||||||
writeFileSync(htmlPath, html, 'utf-8');
|
writeFileSync(htmlPath, html, 'utf-8');
|
||||||
console.log('Externalized SvelteKit bootstrap to', scriptPath);
|
console.log('Externalized SvelteKit bootstrap to', scriptPath);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('externalize-inline-script failed:', err instanceof Error ? err.message : String(err));
|
console.error(
|
||||||
|
'externalize-inline-script failed:',
|
||||||
|
err instanceof Error ? err.message : String(err),
|
||||||
|
);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,16 +25,14 @@
|
|||||||
url: data.site.url,
|
url: data.site.url,
|
||||||
sameAs: data.site.person.sameAs,
|
sameAs: data.site.person.sameAs,
|
||||||
}
|
}
|
||||||
: null
|
: null,
|
||||||
);
|
);
|
||||||
|
|
||||||
// Inject as HTML to avoid Prettier parsing ld+json script body as JS (Babel syntax error)
|
// Inject as HTML to avoid Prettier parsing ld+json script body as JS (Babel syntax error)
|
||||||
const ldJsonTag = (payload: string) =>
|
const ldJsonTag = (payload: string) =>
|
||||||
'<' + 'script type="application/ld+json">' + payload + '<' + '/script>';
|
'<' + 'script type="application/ld+json">' + payload + '<' + '/script>';
|
||||||
const jsonLdHtml = $derived(ldJsonTag(JSON.stringify(jsonLd)));
|
const jsonLdHtml = $derived(ldJsonTag(JSON.stringify(jsonLd)));
|
||||||
const personLdHtml = $derived(
|
const personLdHtml = $derived(personLd != null ? ldJsonTag(JSON.stringify(personLd)) : '');
|
||||||
personLd != null ? ldJsonTag(JSON.stringify(personLd)) : ''
|
|
||||||
);
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
export const prerender = true;
|
export const prerender = true;
|
||||||
export const ssr = true;
|
export const ssr = true;
|
||||||
|
|||||||
@@ -35,7 +35,10 @@
|
|||||||
<meta property="og:url" content={data.site.url} />
|
<meta property="og:url" content={data.site.url} />
|
||||||
<meta property="og:site_name" content={data.site.title} />
|
<meta property="og:site_name" content={data.site.title} />
|
||||||
<meta property="og:locale" content="en_US" />
|
<meta property="og:locale" content="en_US" />
|
||||||
<meta property="og:image" content="{data.site.url}/assets/images/mifi-{data.variant}-og-image.webp" />
|
<meta
|
||||||
|
property="og:image"
|
||||||
|
content="{data.site.url}/assets/images/mifi-{data.variant}-og-image.webp"
|
||||||
|
/>
|
||||||
<meta property="og:image:width" content="1200" />
|
<meta property="og:image:width" content="1200" />
|
||||||
<meta property="og:image:height" content="630" />
|
<meta property="og:image:height" content="630" />
|
||||||
|
|
||||||
@@ -43,7 +46,10 @@
|
|||||||
<meta name="twitter:card" content="summary_large_image" />
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
<meta name="twitter:title" content={data.site.title} />
|
<meta name="twitter:title" content={data.site.title} />
|
||||||
<meta name="twitter:description" content={data.site.metaDescription} />
|
<meta name="twitter:description" content={data.site.metaDescription} />
|
||||||
<meta name="twitter:image" content="{data.site.url}/assets/images/mifi-{data.variant}-twitter-image.webp" />
|
<meta
|
||||||
|
name="twitter:image"
|
||||||
|
content="{data.site.url}/assets/images/mifi-{data.variant}-twitter-image.webp"
|
||||||
|
/>
|
||||||
<meta name="twitter:image:width" content="1200" />
|
<meta name="twitter:image:width" content="1200" />
|
||||||
<meta name="twitter:image:height" content="1200" />
|
<meta name="twitter:image:height" content="1200" />
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|||||||
@@ -12,5 +12,15 @@
|
|||||||
"moduleResolution": "bundler"
|
"moduleResolution": "bundler"
|
||||||
},
|
},
|
||||||
"include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"],
|
"include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"],
|
||||||
"exclude": ["node_modules", "dist", "build", "coverage", "playwright-report", "test-results", ".svelte-kit", "src/**/*.test.ts", "src/**/*.spec.ts"]
|
"exclude": [
|
||||||
|
"node_modules",
|
||||||
|
"dist",
|
||||||
|
"build",
|
||||||
|
"coverage",
|
||||||
|
"playwright-report",
|
||||||
|
"test-results",
|
||||||
|
".svelte-kit",
|
||||||
|
"src/**/*.test.ts",
|
||||||
|
"src/**/*.spec.ts"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user