diff --git a/manifest.json b/manifest.json
index e4af149..8bb19a3 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,7 +1,7 @@
{
"id": "manuscript-compiler",
"name": "Manuscript Compiler",
- "version": "0.10.2",
+ "version": "0.10.3",
"minAppVersion": "1.5.0",
"description": "Compile publishable manuscript content to DOCX, ODT, EPUB, HTML, Markdown, or XML files.",
"author": "Anthony Fitzpatrick",
diff --git a/package-lock.json b/package-lock.json
index d49eaa4..b9b85ce 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "obsidian-manuscript-compiler",
- "version": "0.10.2",
+ "version": "0.10.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "obsidian-manuscript-compiler",
- "version": "0.10.2",
+ "version": "0.10.3",
"license": "MIT",
"dependencies": {
"fflate": "^0.8.3"
diff --git a/package.json b/package.json
index 0399a7d..8548466 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "obsidian-manuscript-compiler",
- "version": "0.10.2",
+ "version": "0.10.3",
"description": "Validate, preview, and compile Obsidian book manuscripts to DOCX, ODT, EPUB, HTML, Markdown, or XML.",
"main": "main.js",
"scripts": {
diff --git a/tests/run.ts b/tests/run.ts
index 91120a1..62b38c6 100644
--- a/tests/run.ts
+++ b/tests/run.ts
@@ -523,7 +523,7 @@ test("stale prepared source keeps the workspace openable for Refresh Preview", a
test("main delegates orchestration and ExportCoordinator is the sole exporter owner", async () => { const mainSource = await readFile(path.join("src", "main.ts"), "utf8"); const coordinatorSource = await readFile(path.join("src", "export-coordinator.ts"), "utf8"); const otherProduction = (await Promise.all(["compile-command-service.ts", "compile-modal.ts", "validation.ts"].map((file) => readFile(path.join("src", file), "utf8")))).join("\n"); assert.doesNotMatch(mainSource, /new (DocxMemoryExporter|OdtExporter|EpubExporter|HtmlExporter|MarkdownExporter|XmlExporter)|recordSuccess\(|recordFailure\(|calculateSourceFingerprint/); assert.match(mainSource, /new ExportCoordinator/); assert.match(coordinatorSource, /exportPreparedSession\(session: PreparedCompileSession/); assert.match(coordinatorSource, /EXPORTERS\[format\]/); assert.doesNotMatch(otherProduction, /EXPORTERS\[/); assert.doesNotMatch(coordinatorSource, /ScannedBook/); });
-test("0.10.2 production source has one preparation/export route and no external execution, network, telemetry, or plugin API access", async () => {
+test("0.10.3 production source has one preparation/export route and no external execution, network, telemetry, or plugin API access", async () => {
const files = await sourceFiles("src"); const entries = await Promise.all(files.map(async (file) => [file, await readFile(file, "utf8")] as const)); const source = entries.map(([, content]) => content).join("\n");
assert.deepEqual(entries.filter(([, content]) => /new VaultScanner\(/.test(content)).map(([file]) => file), [path.join("src", "compile-preparation.ts")]);
assert.deepEqual(entries.filter(([, content]) => /new ExportCoordinator\(/.test(content)).map(([file]) => file), [path.join("src", "main.ts")]);
@@ -547,7 +547,7 @@ test("plugin CSS selectors are owned, theme-safe, and retain accessibility modes
assert.doesNotMatch(css, /#[0-9a-f]{3,8}\b|!important/i); assert.match(css, /@media \(forced-colors: active\)/); assert.match(css, /@media \(prefers-reduced-motion: reduce\)/); assert.match(css, /:focus-visible/);
});
-test("0.10.2 version metadata, bundled branding, and release package allowlist are consistent", async () => { const manifest = JSON.parse(await readFile("manifest.json", "utf8")); const packageJson = JSON.parse(await readFile("package.json", "utf8")); const lock = JSON.parse(await readFile("package-lock.json", "utf8")); const versions = JSON.parse(await readFile("versions.json", "utf8")); const packaging = await readFile(path.join("scripts", "package.mjs"), "utf8"); const readme = await readFile("README.md", "utf8"); assert.equal(manifest.version, "0.10.2"); assert.equal(packageJson.version, manifest.version); assert.equal(lock.version, manifest.version); assert.equal(lock.packages[""].version, manifest.version); assert.equal(versions[manifest.version], manifest.minAppVersion); assert.equal(manifest.authorUrl, "https://wolf359.app"); assert.equal(manifest.fundingUrl, "https://buymeacoffee.com/wolf359pressab"); assert.match(packaging, /const required = \["main\.js", "manifest\.json", "styles\.css"\]/); assert.doesNotMatch(packaging, /const required = \[[^\]]*logo\.svg/); assert.match(packaging, /const repositoryLogo = "logo\.svg"/); assert.match(readme, /
{ const manifest = JSON.parse(await readFile("manifest.json", "utf8")); const packageJson = JSON.parse(await readFile("package.json", "utf8")); const lock = JSON.parse(await readFile("package-lock.json", "utf8")); const versions = JSON.parse(await readFile("versions.json", "utf8")); const packaging = await readFile(path.join("scripts", "package.mjs"), "utf8"); const readme = await readFile("README.md", "utf8"); assert.equal(manifest.version, "0.10.3"); assert.equal(packageJson.version, manifest.version); assert.equal(lock.version, manifest.version); assert.equal(lock.packages[""].version, manifest.version); assert.equal(versions[manifest.version], manifest.minAppVersion); assert.equal(manifest.authorUrl, "https://wolf359.app"); assert.equal(manifest.fundingUrl, "https://buymeacoffee.com/wolf359pressab"); assert.match(packaging, /const required = \["main\.js", "manifest\.json", "styles\.css"\]/); assert.doesNotMatch(packaging, /const required = \[[^\]]*logo\.svg/); assert.match(packaging, /const repositoryLogo = "logo\.svg"/); assert.match(readme, /
{
for (const candidate of ["data.json", ".obsidian/plugins/manuscript-compiler/data.json", "nested/manuscript-compiler/data.json"]) {
await execFileAsync("git", ["check-ignore", "--no-index", "--quiet", candidate]);
diff --git a/versions.json b/versions.json
index b73c6bf..aa9c1ab 100644
--- a/versions.json
+++ b/versions.json
@@ -12,5 +12,6 @@
"0.9.3": "1.5.0",
"0.10.0": "1.5.0",
"0.10.1": "1.5.0",
- "0.10.2": "1.5.0"
+ "0.10.2": "1.5.0",
+ "0.10.3": "1.5.0"
}