Emdash source with visual editor image upload fix

Fixes:
1. media.ts: wrap placeholder generation in try-catch
2. toolbar.ts: check r.ok, display error message in popover
This commit is contained in:
2026-05-03 10:44:54 +07:00
parent 78f81bebb6
commit 2d1be52177
2352 changed files with 662964 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
import { defineConfig } from "vitest/config";
// Stub the adapter-provided virtual modules that runtime code imports.
// Individual tests still `vi.mock()` the ones they care about; this plugin
// just prevents "cannot find package" errors when a test pulls in a chunk
// of core that happens to touch one transitively. Mirrors the pattern the
// Astro integration's vite plugin uses at build time.
const virtualStubs: Record<string, string> = {
"virtual:emdash/wait-until": "export const waitUntil = undefined;",
// Default-export an empty config so modules that read top-level fields
// (e.g. `virtualConfig?.i18n?.defaultLocale`) don't blow up on import.
// Tests that need real config still `vi.mock(...)` their own.
"virtual:emdash/config": "export default {};",
};
export default defineConfig({
plugins: [
{
name: "emdash-virtual-stubs",
resolveId(id) {
// Object.hasOwn — not `in` — so prototype-chain properties
// (toString, hasOwnProperty, etc.) aren't accidentally matched.
if (Object.hasOwn(virtualStubs, id)) return "\0" + id;
return null;
},
load(id) {
if (!id.startsWith("\0virtual:emdash/")) return null;
const key = id.slice(1);
if (Object.hasOwn(virtualStubs, key)) return virtualStubs[key];
return null;
},
},
],
test: {
globals: true,
environment: "node",
include: ["tests/**/*.test.ts"],
// Server integration tests (cli, client, smoke) start real Astro dev
// servers and need a full workspace build — run them in a dedicated
// CI job, not via `pnpm test`.
// The fixture has symlinked node_modules that contain test files
// from transitive deps (zod, emdash) — exclude them too.
exclude: [
"tests/integration/smoke/**",
"tests/integration/cli/**",
"tests/integration/client/**",
"tests/integration/media/**",
"tests/integration/fixture/**",
],
coverage: {
provider: "v8",
reporter: ["text", "json", "html"],
thresholds: {
statements: 80,
branches: 80,
functions: 80,
lines: 80,
},
},
},
});