diff --git a/plugin/.hotreload b/obsidian-plugin/.hotreload similarity index 100% rename from plugin/.hotreload rename to obsidian-plugin/.hotreload diff --git a/plugin/README.md b/obsidian-plugin/README.md similarity index 100% rename from plugin/README.md rename to obsidian-plugin/README.md diff --git a/plugin/manifest.json b/obsidian-plugin/dist/manifest.json similarity index 99% rename from plugin/manifest.json rename to obsidian-plugin/dist/manifest.json index f29b3103..7b7ca8c8 100644 --- a/plugin/manifest.json +++ b/obsidian-plugin/dist/manifest.json @@ -7,4 +7,4 @@ "author": "Andras Schmelczer", "authorUrl": "https://schmelczer.dev", "isDesktopOnly": false -} \ No newline at end of file +} diff --git a/plugin/package-lock.json b/obsidian-plugin/package-lock.json similarity index 99% rename from plugin/package-lock.json rename to obsidian-plugin/package-lock.json index 1a6b7b4c..c1d6c70a 100644 --- a/plugin/package-lock.json +++ b/obsidian-plugin/package-lock.json @@ -13,6 +13,7 @@ "@types/node": "^16.11.6", "builtin-modules": "3.3.0", "byte-base64": "^1.1.0", + "client": "file:../client", "css-loader": "^7.1.2", "date-fns": "^4.1.0", "dayjs": "^1.11.13", @@ -51,6 +52,11 @@ "dev": true, "license": "MIT" }, + "../client": { + "name": "my-lib", + "version": "1.0.0", + "dev": true + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -3343,6 +3349,10 @@ "dev": true, "license": "MIT" }, + "node_modules/client": { + "resolved": "../client", + "link": true + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", diff --git a/plugin/package.json b/obsidian-plugin/package.json similarity index 55% rename from plugin/package.json rename to obsidian-plugin/package.json index a321149b..390f31fc 100644 --- a/plugin/package.json +++ b/obsidian-plugin/package.json @@ -6,53 +6,32 @@ "scripts": { "dev": "webpack watch --mode development", "build": "webpack --mode production", - "test": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest", - "lint": "eslint --fix src && prettier --write \"src/**/*.(ts|scss|json|html)\"", + "test": "jest --passWithNoTests", "version": "node version-bump.mjs" }, "keywords": [], "author": "", "license": "MIT", - "prettier": { - "trailingComma": "none", - "tabWidth": 4, - "useTabs": true, - "endOfLine": "lf" - }, "devDependencies": { + "sync-client": "file:../sync-client", "@types/jest": "^29.5.14", "@types/node": "^16.11.6", - "builtin-modules": "3.3.0", - "byte-base64": "^1.1.0", "css-loader": "^7.1.2", "date-fns": "^4.1.0", - "dayjs": "^1.11.13", - "esbuild": "0.24.0", - "esbuild-plugin-wasm-pack": "^1.1.0", - "esbuild-sass-plugin": "^3.3.1", - "eslint": "9.17.0", - "eslint-plugin-unused-imports": "^4.1.4", - "fetch-retry": "^6.0.0", "file-loader": "^6.2.0", "fs-extra": "^11.2.0", "virtual-scroller": "^1.13.1", "jest": "^29.7.0", "mini-css-extract-plugin": "^2.9.2", "obsidian": "1.7.2", - "openapi-fetch": "0.13.3", - "openapi-typescript": "7.4.4", - "p-queue": "^8.0.1", - "prettier": "^3.4.2", "resolve-url-loader": "^5.0.0", "sass-loader": "^16.0.4", - "sync_lib": "file:../backend/sync_lib/pkg", "terser-webpack-plugin": "^5.3.11", "ts-jest": "^29.2.5", "ts-loader": "^9.5.1", "tslib": "2.4.0", "typescript": "5.7.2", - "typescript-eslint": "8.18.0", "webpack": "^5.97.1", "webpack-cli": "^6.0.1" } -} +} \ No newline at end of file diff --git a/plugin/src/events/obisidan-event-handler.ts b/obsidian-plugin/src/obisidan-event-handler.ts similarity index 87% rename from plugin/src/events/obisidan-event-handler.ts rename to obsidian-plugin/src/obisidan-event-handler.ts index 0d4461fc..4e0e0930 100644 --- a/plugin/src/events/obisidan-event-handler.ts +++ b/obsidian-plugin/src/obisidan-event-handler.ts @@ -1,10 +1,9 @@ +import type { Syncer } from "sync-client"; +import { Logger } from "sync-client"; import type { TAbstractFile } from "obsidian"; import { TFile } from "obsidian"; -import type { FileEventHandler } from "./file-event-handler"; -import { Logger } from "src/tracing/logger"; -import type { Syncer } from "src/sync-operations/syncer"; -export class ObsidianFileEventHandler implements FileEventHandler { +export class ObsidianFileEventHandler { public constructor(private readonly syncer: Syncer) {} public async onCreate(file: TAbstractFile): Promise { diff --git a/plugin/src/file-operations/obsidian-file-operations.ts b/obsidian-plugin/src/obsidian-file-operations.ts similarity index 95% rename from plugin/src/file-operations/obsidian-file-operations.ts rename to obsidian-plugin/src/obsidian-file-operations.ts index 4afd1135..395f42ef 100644 --- a/plugin/src/file-operations/obsidian-file-operations.ts +++ b/obsidian-plugin/src/obsidian-file-operations.ts @@ -1,10 +1,8 @@ import type { Stat, Vault } from "obsidian"; import { normalizePath } from "obsidian"; -import type { FileOperations } from "./file-operations"; -import type { RelativePath } from "src/database/document-metadata"; -import { isFileTypeMergable, mergeText } from "sync_lib"; import { Platform } from "obsidian"; -import { Logger } from "src/tracing/logger"; +import type { FileOperations, RelativePath } from "sync-client"; +import { Logger, isFileTypeMergable, mergeText } from "sync-client"; export class ObsidianFileOperations implements FileOperations { public constructor(private readonly vault: Vault) {} diff --git a/plugin/src/styles.scss b/obsidian-plugin/src/styles.scss similarity index 100% rename from plugin/src/styles.scss rename to obsidian-plugin/src/styles.scss diff --git a/plugin/src/vault-link-plugin.ts b/obsidian-plugin/src/vault-link-plugin.ts similarity index 86% rename from plugin/src/vault-link-plugin.ts rename to obsidian-plugin/src/vault-link-plugin.ts index ef1b81e0..989126ac 100644 --- a/plugin/src/vault-link-plugin.ts +++ b/obsidian-plugin/src/vault-link-plugin.ts @@ -2,21 +2,24 @@ import type { WorkspaceLeaf } from "obsidian"; import { Plugin } from "obsidian"; import "./styles.scss"; import "../manifest.json"; -import init from "sync_lib"; -import wasmBin from "sync_lib/sync_lib_bg.wasm"; + import { SyncSettingsTab } from "./views/settings-tab"; import { HistoryView } from "./views/history-view"; -import { ObsidianFileEventHandler } from "./events/obisidan-event-handler"; -import { SyncService } from "./services/sync-service"; -import { Database } from "./database/database"; -import { applyRemoteChangesLocally } from "./sync-operations/apply-remote-changes-locally"; -import { ObsidianFileOperations } from "./file-operations/obsidian-file-operations"; +import { ObsidianFileEventHandler } from "./obisidan-event-handler"; +import { ObsidianFileOperations } from "./obsidian-file-operations"; import { StatusBar } from "./views/status-bar"; -import { Logger } from "./tracing/logger"; -import { SyncHistory } from "./tracing/sync-history"; + import { LogsView } from "./views/logs-view"; -import { Syncer } from "./sync-operations/syncer"; import { StatusDescription } from "./views/status-description"; +import { + applyRemoteChangesLocally, + Database, + Logger, + Syncer, + SyncHistory, + SyncService, + initialize +} from "sync-client"; export default class VaultLinkPlugin extends Plugin { private readonly operations = new ObsidianFileOperations(this.app.vault); @@ -27,10 +30,7 @@ export default class VaultLinkPlugin extends Plugin { public async onload(): Promise { Logger.getInstance().info("Starting plugin"); - await init( - // eslint-disable-next-line - (wasmBin as any).default // it is loaded as a base64 string by webpack - ); + await initialize(); const database = new Database( await this.loadData(), diff --git a/plugin/src/views/history-view.ts b/obsidian-plugin/src/views/history-view.ts similarity index 93% rename from plugin/src/views/history-view.ts rename to obsidian-plugin/src/views/history-view.ts index ca2f248e..9108cea6 100644 --- a/plugin/src/views/history-view.ts +++ b/obsidian-plugin/src/views/history-view.ts @@ -1,10 +1,14 @@ import type { IconName, WorkspaceLeaf } from "obsidian"; import { ItemView, setIcon } from "obsidian"; -import type { HistoryEntry, SyncHistory } from "src/tracing/sync-history"; -import { SyncType } from "src/tracing/sync-history"; -import { SyncSource, SyncStatus } from "src/tracing/sync-history"; + import { intlFormatDistance } from "date-fns"; -import type { Database } from "src/database/database"; +import type { + SyncHistory, + HistoryEntry, + Database, + RelativePath +} from "sync-client"; +import { SyncType, SyncSource, SyncStatus } from "sync-client"; export class HistoryView extends ItemView { public static readonly TYPE = "history-view"; diff --git a/plugin/src/views/logs-view.ts b/obsidian-plugin/src/views/logs-view.ts similarity index 96% rename from plugin/src/views/logs-view.ts rename to obsidian-plugin/src/views/logs-view.ts index f9968d1d..8f7a8643 100644 --- a/plugin/src/views/logs-view.ts +++ b/obsidian-plugin/src/views/logs-view.ts @@ -1,8 +1,8 @@ import type { WorkspaceLeaf } from "obsidian"; import { ItemView } from "obsidian"; import type VaultLinkPlugin from "src/vault-link-plugin"; -import { Logger } from "src/tracing/logger"; -import type { Database } from "src/database/database"; +import type { Database } from "sync-client"; +import { Logger } from "sync-client"; export class LogsView extends ItemView { public static readonly TYPE = "logs-view"; diff --git a/plugin/src/views/settings-tab.ts b/obsidian-plugin/src/views/settings-tab.ts similarity index 97% rename from plugin/src/views/settings-tab.ts rename to obsidian-plugin/src/views/settings-tab.ts index a629623d..b41ff40c 100644 --- a/plugin/src/views/settings-tab.ts +++ b/obsidian-plugin/src/views/settings-tab.ts @@ -2,13 +2,11 @@ import type { App } from "obsidian"; import { Notice, PluginSettingTab, Setting } from "obsidian"; import type VaultLinkPlugin from "src/vault-link-plugin"; -import type { Database } from "src/database/database"; -import type { SyncService } from "src/services/sync-service"; -import type { Syncer } from "src/sync-operations/syncer"; import type { StatusDescription } from "./status-description"; import { LogsView } from "./logs-view"; import { HistoryView } from "./history-view"; -import { Logger, LogLevel } from "src/tracing/logger"; +import type { SyncService, Syncer, Database } from "sync-client"; +import { Logger, LogLevel } from "sync-client"; export class SyncSettingsTab extends PluginSettingTab { private editedVaultName: string; diff --git a/plugin/src/views/status-bar.ts b/obsidian-plugin/src/views/status-bar.ts similarity index 90% rename from plugin/src/views/status-bar.ts rename to obsidian-plugin/src/views/status-bar.ts index 0a5e8e1c..0cecaa74 100644 --- a/plugin/src/views/status-bar.ts +++ b/obsidian-plugin/src/views/status-bar.ts @@ -1,7 +1,5 @@ -import type { Database } from "src/database/database"; +import type { Database, HistoryStats, SyncHistory, Syncer } from "sync-client"; import type VaultLinkPlugin from "src/vault-link-plugin"; -import type { Syncer } from "src/sync-operations/syncer"; -import type { HistoryStats, SyncHistory } from "src/tracing/sync-history"; export class StatusBar { private readonly statusBarItem: HTMLElement; diff --git a/plugin/src/views/status-description.ts b/obsidian-plugin/src/views/status-description.ts similarity index 93% rename from plugin/src/views/status-description.ts rename to obsidian-plugin/src/views/status-description.ts index fa7622f8..40d5c73e 100644 --- a/plugin/src/views/status-description.ts +++ b/obsidian-plugin/src/views/status-description.ts @@ -1,10 +1,11 @@ -import type { Database } from "src/database/database"; import type { + HistoryStats, CheckConnectionResult, - SyncService -} from "src/services/sync-service"; -import type { Syncer } from "src/sync-operations/syncer"; -import type { HistoryStats, SyncHistory } from "src/tracing/sync-history"; + SyncService, + SyncHistory, + Syncer, + Database +} from "sync-client"; export class StatusDescription { private lastHistoryStats: HistoryStats | undefined; diff --git a/plugin/tsconfig.json b/obsidian-plugin/tsconfig.json similarity index 90% rename from plugin/tsconfig.json rename to obsidian-plugin/tsconfig.json index 2bcb75e1..85523ed4 100644 --- a/plugin/tsconfig.json +++ b/obsidian-plugin/tsconfig.json @@ -5,10 +5,8 @@ "inlineSources": true, "module": "ESNext", "target": "ES6", - "allowJs": true, "noImplicitAny": true, "moduleResolution": "bundler", - "importHelpers": true, "isolatedModules": true, "strictNullChecks": true, "esModuleInterop": true, diff --git a/plugin/version-bump.mjs b/obsidian-plugin/version-bump.mjs similarity index 100% rename from plugin/version-bump.mjs rename to obsidian-plugin/version-bump.mjs diff --git a/plugin/webpack.config.js b/obsidian-plugin/webpack.config.js similarity index 100% rename from plugin/webpack.config.js rename to obsidian-plugin/webpack.config.js diff --git a/plugin/jest.config.js b/sync-client/jest.config.js similarity index 100% rename from plugin/jest.config.js rename to sync-client/jest.config.js diff --git a/plugin/src/database/database.ts b/sync-client/src/database/database.ts similarity index 100% rename from plugin/src/database/database.ts rename to sync-client/src/database/database.ts diff --git a/plugin/src/database/document-metadata.ts b/sync-client/src/database/document-metadata.ts similarity index 100% rename from plugin/src/database/document-metadata.ts rename to sync-client/src/database/document-metadata.ts diff --git a/plugin/src/database/sync-settings.ts b/sync-client/src/database/sync-settings.ts similarity index 100% rename from plugin/src/database/sync-settings.ts rename to sync-client/src/database/sync-settings.ts diff --git a/plugin/src/file-operations/file-operations.ts b/sync-client/src/file-operations.ts similarity index 100% rename from plugin/src/file-operations/file-operations.ts rename to sync-client/src/file-operations.ts diff --git a/plugin/src/services/sync-service.ts b/sync-client/src/services/sync-service.ts similarity index 96% rename from plugin/src/services/sync-service.ts rename to sync-client/src/services/sync-service.ts index 56170b25..f335ed67 100644 --- a/plugin/src/services/sync-service.ts +++ b/sync-client/src/services/sync-service.ts @@ -1,8 +1,8 @@ import type { Client } from "openapi-fetch"; import createClient from "openapi-fetch"; import type { components, paths } from "./types"; // Generated by openapi-typescript -import type { Database } from "src/database/database"; -import type { SyncSettings } from "src/database/sync-settings"; +import type { Database } from "../database/database"; +import type { SyncSettings } from "../database/sync-settings"; import type { DocumentId, RelativePath, @@ -98,9 +98,9 @@ export class SyncService { } Logger.getInstance().debug( - `Created document ${JSON.stringify( - response.data - )} with id ${response.data.documentId}` + `Created document ${JSON.stringify(response.data)} with id ${ + response.data.documentId + }` ); return response.data; @@ -149,7 +149,9 @@ export class SyncService { } Logger.getInstance().debug( - `Updated document ${JSON.stringify(response.data)} with id ${response.data.documentId}` + `Updated document ${JSON.stringify(response.data)} with id ${ + response.data.documentId + }` ); return response.data; diff --git a/plugin/src/services/types.ts b/sync-client/src/services/types.ts similarity index 100% rename from plugin/src/services/types.ts rename to sync-client/src/services/types.ts diff --git a/plugin/src/sync-operations/apply-remote-changes-locally.ts b/sync-client/src/sync-operations/apply-remote-changes-locally.ts similarity index 96% rename from plugin/src/sync-operations/apply-remote-changes-locally.ts rename to sync-client/src/sync-operations/apply-remote-changes-locally.ts index e5eb7208..706b93c0 100644 --- a/plugin/src/sync-operations/apply-remote-changes-locally.ts +++ b/sync-client/src/sync-operations/apply-remote-changes-locally.ts @@ -1,4 +1,4 @@ -import type { Database } from "src/database/database"; +import type { Database } from "../database/database"; import type { SyncService } from "src/services/sync-service"; import { Logger } from "src/tracing/logger"; import type { Syncer } from "./syncer"; diff --git a/plugin/src/sync-operations/document-lock.test.ts b/sync-client/src/sync-operations/document-lock.test.ts similarity index 100% rename from plugin/src/sync-operations/document-lock.test.ts rename to sync-client/src/sync-operations/document-lock.test.ts diff --git a/plugin/src/sync-operations/document-lock.ts b/sync-client/src/sync-operations/document-lock.ts similarity index 100% rename from plugin/src/sync-operations/document-lock.ts rename to sync-client/src/sync-operations/document-lock.ts diff --git a/plugin/src/tracing/logger.ts b/sync-client/src/tracing/logger.ts similarity index 96% rename from plugin/src/tracing/logger.ts rename to sync-client/src/tracing/logger.ts index 0c8f7e54..3d7e95bd 100644 --- a/plugin/src/tracing/logger.ts +++ b/sync-client/src/tracing/logger.ts @@ -1,5 +1,3 @@ -import { Notice } from "obsidian"; - export enum LogLevel { DEBUG = "DEBUG", INFO = "INFO", @@ -62,7 +60,6 @@ export class Logger { console.error(message); this.pushMessage(message, LogLevel.ERROR); - new Notice(message, 5000); } public getMessages(mininumSeverity: LogLevel): LogLine[] { diff --git a/plugin/src/tracing/sync-history.ts b/sync-client/src/tracing/sync-history.ts similarity index 100% rename from plugin/src/tracing/sync-history.ts rename to sync-client/src/tracing/sync-history.ts diff --git a/plugin/src/utils/deserialize.test.ts b/sync-client/src/utils/deserialize.test.ts similarity index 100% rename from plugin/src/utils/deserialize.test.ts rename to sync-client/src/utils/deserialize.test.ts diff --git a/plugin/src/utils/deserialize.ts b/sync-client/src/utils/deserialize.ts similarity index 100% rename from plugin/src/utils/deserialize.ts rename to sync-client/src/utils/deserialize.ts diff --git a/plugin/src/utils/hash.ts b/sync-client/src/utils/hash.ts similarity index 100% rename from plugin/src/utils/hash.ts rename to sync-client/src/utils/hash.ts diff --git a/plugin/src/utils/is-equal-bytes.test.ts b/sync-client/src/utils/is-equal-bytes.test.ts similarity index 100% rename from plugin/src/utils/is-equal-bytes.test.ts rename to sync-client/src/utils/is-equal-bytes.test.ts diff --git a/plugin/src/utils/is-equal-bytes.ts b/sync-client/src/utils/is-equal-bytes.ts similarity index 100% rename from plugin/src/utils/is-equal-bytes.ts rename to sync-client/src/utils/is-equal-bytes.ts diff --git a/plugin/src/utils/retried-fetch.ts b/sync-client/src/utils/retried-fetch.ts similarity index 100% rename from plugin/src/utils/retried-fetch.ts rename to sync-client/src/utils/retried-fetch.ts diff --git a/plugin/src/utils/serialize.test.ts b/sync-client/src/utils/serialize.test.ts similarity index 100% rename from plugin/src/utils/serialize.test.ts rename to sync-client/src/utils/serialize.test.ts diff --git a/plugin/src/utils/serialize.ts b/sync-client/src/utils/serialize.ts similarity index 100% rename from plugin/src/utils/serialize.ts rename to sync-client/src/utils/serialize.ts