chore: scaffold obsidian-jekyll-publish

Co-Authored-By: Claude
This commit is contained in:
2026-06-19 01:41:57 +00:00
parent 530a897f18
commit b321633421
8 changed files with 2409 additions and 0 deletions

23
esbuild.config.mjs Normal file
View File

@@ -0,0 +1,23 @@
import esbuild from "esbuild";
import process from "process";
import builtins from "builtin-modules";
import { copyFileSync, mkdirSync } from "fs";
const prod = process.argv[2] === "production";
mkdirSync("dist", { recursive: true });
for (const f of ["manifest.json", "styles.css"]) copyFileSync(f, `dist/${f}`);
const ctx = await esbuild.context({
entryPoints: ["src/main.ts"],
bundle: true,
external: ["obsidian", "electron", ...builtins],
format: "cjs",
target: "es2020",
logLevel: "info",
sourcemap: prod ? false : "inline",
treeShaking: true,
outfile: "dist/main.js",
platform: "node",
});
if (prod) { await ctx.rebuild(); process.exit(0); }
else { await ctx.watch(); }

9
manifest.json Normal file
View File

@@ -0,0 +1,9 @@
{
"id": "jekyll-publish",
"name": "Jekyll Publish",
"version": "0.1.0",
"minAppVersion": "1.5.0",
"description": "Publish the active note as a Jekyll post (with images) via git.",
"author": "Claude",
"isDesktopOnly": true
}

2329
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

28
package.json Normal file
View File

@@ -0,0 +1,28 @@
{
"name": "obsidian-jekyll-publish",
"version": "0.1.0",
"description": "Publish the active Obsidian note as a Jekyll post (with images) via git.",
"main": "dist/main.js",
"type": "module",
"scripts": {
"dev": "node esbuild.config.mjs",
"build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production",
"test": "vitest run",
"test:watch": "vitest",
"e2e": "bash scripts/e2e.sh"
},
"license": "MIT",
"devDependencies": {
"@playwright/test": "^1.60.0",
"@types/js-yaml": "^4.0.9",
"@types/node": "^20.11.0",
"builtin-modules": "^3.3.0",
"esbuild": "^0.20.0",
"obsidian": "^1.5.7",
"typescript": "^5.4.0",
"vitest": "^1.4.0"
},
"dependencies": {
"js-yaml": "^4.1.0"
}
}

4
src/_smoke.test.ts Normal file
View File

@@ -0,0 +1,4 @@
import { expect, test } from "vitest";
test("vitest harness works", () => {
expect(1 + 1).toBe(2);
});

2
styles.css Normal file
View File

@@ -0,0 +1,2 @@
.jekyll-publish-row { display: flex; gap: 8px; margin-bottom: 6px; }
.jekyll-publish-row input { flex: 1; }

10
tsconfig.json Normal file
View File

@@ -0,0 +1,10 @@
{
"compilerOptions": {
"baseUrl": ".", "inlineSourceMap": true, "inlineSources": true,
"module": "ESNext", "target": "ES2020", "allowJs": true,
"noImplicitAny": true, "moduleResolution": "node", "importHelpers": true,
"isolatedModules": true, "strictNullChecks": true, "strict": true,
"esModuleInterop": true, "lib": ["DOM", "ES2020"]
},
"include": ["src/**/*.ts"]
}

4
vitest.config.ts Normal file
View File

@@ -0,0 +1,4 @@
import { defineConfig } from "vitest/config";
export default defineConfig({
test: { include: ["src/**/*.test.ts"] },
});