mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-01-13 08:49:16 +00:00
162 lines
5.2 KiB
TypeScript
162 lines
5.2 KiB
TypeScript
import { defineConfig } from "vitest/config";
|
|
import { playwright } from "@vitest/browser-playwright";
|
|
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
import { sveltePreprocess } from "svelte-preprocess";
|
|
import inlineWorkerPlugin from "esbuild-plugin-inline-worker";
|
|
import path from "path";
|
|
import { fileURLToPath } from "node:url";
|
|
import fs from "node:fs";
|
|
import dotenv from "dotenv";
|
|
import { platform } from "node:process";
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
|
|
const defEnv = dotenv.config({ path: ".env" }).parsed;
|
|
const testEnv = dotenv.config({ path: ".test.env" }).parsed;
|
|
const env = Object.assign({}, defEnv, testEnv);
|
|
const debuggerEnabled = env?.ENABLE_DEBUGGER === "true";
|
|
const headless = !debuggerEnabled && env?.HEADLESS !== "false";
|
|
const manifestJson = JSON.parse(fs.readFileSync("./manifest.json") + "");
|
|
const packageJson = JSON.parse(fs.readFileSync("./package.json") + "");
|
|
const updateInfo = JSON.stringify(fs.readFileSync("./updates.md") + "");
|
|
const prod = false;
|
|
const moduleAliasPlugin = {
|
|
name: "module-alias",
|
|
setup(build: any) {
|
|
build.onResolve({ filter: /.(dev)(.ts|)$/ }, (args: any) => {
|
|
// console.log(args.path);
|
|
if (prod) {
|
|
const prodTs = args.path.replace(".dev", ".prod");
|
|
const statFile = prodTs.endsWith(".ts") ? prodTs : prodTs + ".ts";
|
|
const realPath = path.join(args.resolveDir, statFile);
|
|
console.log(`Checking ${statFile}`);
|
|
if (fs.existsSync(realPath)) {
|
|
console.log(`Replaced ${args.path} with ${prodTs}`);
|
|
return {
|
|
path: realPath,
|
|
namespace: "file",
|
|
};
|
|
}
|
|
}
|
|
return null;
|
|
});
|
|
build.onResolve({ filter: /.(platform)(.ts|)$/ }, (args: any) => {
|
|
// console.log(args.path);
|
|
if (prod) {
|
|
const prodTs = args.path.replace(".platform", ".obsidian");
|
|
const statFile = prodTs.endsWith(".ts") ? prodTs : prodTs + ".ts";
|
|
const realPath = path.join(args.resolveDir, statFile);
|
|
console.log(`Checking ${statFile}`);
|
|
if (fs.existsSync(realPath)) {
|
|
console.log(`Replaced ${args.path} with ${prodTs}`);
|
|
return {
|
|
path: realPath,
|
|
namespace: "file",
|
|
};
|
|
}
|
|
}
|
|
return null;
|
|
});
|
|
},
|
|
};
|
|
const externals = [
|
|
"obsidian",
|
|
"electron",
|
|
"crypto",
|
|
"@codemirror/autocomplete",
|
|
"@codemirror/collab",
|
|
"@codemirror/commands",
|
|
"@codemirror/language",
|
|
"@codemirror/lint",
|
|
"@codemirror/search",
|
|
"@codemirror/state",
|
|
"@codemirror/view",
|
|
"@lezer/common",
|
|
"@lezer/highlight",
|
|
"@lezer/lr",
|
|
];
|
|
const define = {
|
|
MANIFEST_VERSION: `"${manifestJson.version}"`,
|
|
PACKAGE_VERSION: `"${packageJson.version}"`,
|
|
UPDATE_INFO: `${updateInfo}`,
|
|
global: "globalThis",
|
|
hostPlatform: `"${platform}"`,
|
|
};
|
|
export default defineConfig({
|
|
plugins: [
|
|
moduleAliasPlugin,
|
|
inlineWorkerPlugin({
|
|
external: externals,
|
|
treeShaking: true,
|
|
}),
|
|
svelte({
|
|
preprocess: sveltePreprocess(),
|
|
compilerOptions: { css: "injected", preserveComments: false },
|
|
}),
|
|
],
|
|
resolve: {
|
|
alias: {
|
|
obsidian: path.resolve(__dirname, "./test/harness/obsidian-mock.ts"),
|
|
"@": path.resolve(__dirname, "./src"),
|
|
"@lib": path.resolve(__dirname, "./src/lib/src"),
|
|
src: path.resolve(__dirname, "./src"),
|
|
},
|
|
},
|
|
esbuild: {
|
|
define: define,
|
|
target: "es2018",
|
|
platform: "browser",
|
|
},
|
|
// define,
|
|
server: {
|
|
headers: {
|
|
"Service-Worker-Allowed": "/",
|
|
},
|
|
},
|
|
test: {
|
|
env: env,
|
|
testTimeout: 10000,
|
|
fileParallelism: false,
|
|
isolate: true,
|
|
watch: false,
|
|
|
|
// environment: "browser",
|
|
include: ["test/**/*.test.ts"],
|
|
coverage: {
|
|
include: ["src/**/*.ts", "src/**/*.svelte"],
|
|
exclude: ["**/*.test.ts", "src/lib/**/*.test.ts"],
|
|
provider: "v8",
|
|
reporter: ["text", "json", "html"],
|
|
// ignoreEmptyLines: true,
|
|
},
|
|
browser: {
|
|
provider: playwright({
|
|
launchOptions: {
|
|
args: ["--js-flags=--expose-gc"],
|
|
chromiumSandbox: true,
|
|
},
|
|
}),
|
|
enabled: true,
|
|
screenshotFailures: false,
|
|
instances: [
|
|
{
|
|
execArgv: ["--js-flags=--expose-gc"],
|
|
browser: "chromium",
|
|
headless,
|
|
|
|
inspector: debuggerEnabled
|
|
? {
|
|
waitForDebugger: true,
|
|
enabled: true,
|
|
}
|
|
: undefined,
|
|
printConsoleTrace: true,
|
|
},
|
|
],
|
|
headless,
|
|
fileParallelism: false,
|
|
ui: debuggerEnabled ? true : false,
|
|
},
|
|
},
|
|
});
|