mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-06-17 03:40:14 +00:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ae9c46f8f0 | |||
| dcd10cd690 | |||
| 5a35b71339 | |||
| 18a59219f7 | |||
| c9095738e6 | |||
| bed415fc6b | |||
| 4eeb93b9e4 |
@@ -12,6 +12,17 @@ on:
|
|||||||
- main
|
- main
|
||||||
tags:
|
tags:
|
||||||
- "*.*.*-cli"
|
- "*.*.*-cli"
|
||||||
|
paths-ignore:
|
||||||
|
- "docs/**"
|
||||||
|
- "*.md"
|
||||||
|
- "images/**"
|
||||||
|
- "assets/**"
|
||||||
|
- "instruction_images/**"
|
||||||
|
- "src/apps/webapp/**"
|
||||||
|
- "src/apps/webpeer/**"
|
||||||
|
- ".github/workflows/release.yml"
|
||||||
|
- ".github/workflows/unit-ci.yml"
|
||||||
|
- ".github/workflows/harness-ci.yml"
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
dry_run:
|
dry_run:
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ on:
|
|||||||
# Sequence of patterns matched against refs/tags
|
# Sequence of patterns matched against refs/tags
|
||||||
tags:
|
tags:
|
||||||
- '*' # Push events to matching any tag format, i.e. 1.0, 20.15.10
|
- '*' # Push events to matching any tag format, i.e. 1.0, 20.15.10
|
||||||
|
- '!*-cli' # Exclude command-line interface tags
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|||||||
+35
-2
@@ -19,11 +19,15 @@ const packageJson = JSON.parse(fs.readFileSync("./package.json") + "");
|
|||||||
const updateInfo = JSON.stringify(fs.readFileSync("./updates.md") + "");
|
const updateInfo = JSON.stringify(fs.readFileSync("./updates.md") + "");
|
||||||
|
|
||||||
const PATHS_TEST_INSTALL = process.env?.PATHS_TEST_INSTALL || "";
|
const PATHS_TEST_INSTALL = process.env?.PATHS_TEST_INSTALL || "";
|
||||||
const PATH_TEST_INSTALL = PATHS_TEST_INSTALL.split(path.delimiter).map(p => p.trim()).filter(p => p.length);
|
const PATH_TEST_INSTALL = PATHS_TEST_INSTALL.split(path.delimiter)
|
||||||
|
.map((p) => p.trim())
|
||||||
|
.filter((p) => p.length);
|
||||||
if (PATH_TEST_INSTALL) {
|
if (PATH_TEST_INSTALL) {
|
||||||
console.log(`Built files will be copied to ${PATH_TEST_INSTALL}`);
|
console.log(`Built files will be copied to ${PATH_TEST_INSTALL}`);
|
||||||
} else {
|
} else {
|
||||||
console.log("Development build: You can install the plug-in to Obsidian for testing by exporting the PATHS_TEST_INSTALL environment variable with the paths to your vault plugins directories separated by your system path delimiter (':' on Unix, ';' on Windows).");
|
console.log(
|
||||||
|
"Development build: You can install the plug-in to Obsidian for testing by exporting the PATHS_TEST_INSTALL environment variable with the paths to your vault plugins directories separated by your system path delimiter (':' on Unix, ';' on Windows)."
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const moduleAliasPlugin = {
|
const moduleAliasPlugin = {
|
||||||
@@ -66,6 +70,34 @@ const moduleAliasPlugin = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const removePragmaCommentsPlugin = {
|
||||||
|
name: "remove-pragma-comments",
|
||||||
|
setup(build) {
|
||||||
|
// Filter target extensions (e.g., JavaScript and TypeScript)
|
||||||
|
build.onLoad({ filter: /\.[jt]s?$/ }, async (args) => {
|
||||||
|
const source = await fs.promises.readFile(args.path, "utf8");
|
||||||
|
|
||||||
|
// Regex targeting both single-line and multi-line comments
|
||||||
|
// This regex looks for:
|
||||||
|
// - /* eslint ... */ (multi-line)
|
||||||
|
// const esLintPragmaRegexBlock = /\/\*[\s\S]*?eslint[\s\S]*?\*\/|([^\\:]|^)\/\/.*eslint.*$/gm;
|
||||||
|
// - // eslint-disable-next-line
|
||||||
|
let cleanedSource = source;
|
||||||
|
const tsIgnoreRegex = /\/\*\s*@ts-ignore\s*\*\/|([^\\:]|^)\/\/.*?@ts-ignore.*$/gm;
|
||||||
|
const esLintPragmaRegexLine = /([^\\:]|^)\/\/.*?eslint-.*$/gm;
|
||||||
|
const exps = [tsIgnoreRegex, esLintPragmaRegexLine];
|
||||||
|
for (const exp of exps) {
|
||||||
|
cleanedSource = cleanedSource.replace(exp, "$1");
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
contents: cleanedSource,
|
||||||
|
loader: args.path.endsWith("ts") ? "ts" : "js",
|
||||||
|
};
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
/** @type esbuild.Plugin[] */
|
/** @type esbuild.Plugin[] */
|
||||||
const plugins = [
|
const plugins = [
|
||||||
{
|
{
|
||||||
@@ -177,6 +209,7 @@ const context = await esbuild.context({
|
|||||||
preprocess: sveltePreprocess(),
|
preprocess: sveltePreprocess(),
|
||||||
compilerOptions: { css: "injected", preserveComments: false },
|
compilerOptions: { css: "injected", preserveComments: false },
|
||||||
}),
|
}),
|
||||||
|
removePragmaCommentsPlugin,
|
||||||
...plugins,
|
...plugins,
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -0,0 +1,143 @@
|
|||||||
|
const restrictedGlobalsOptions = [
|
||||||
|
{
|
||||||
|
name: "app",
|
||||||
|
message: "Avoid using the global app object. Instead use the reference provided by your plugin instance.",
|
||||||
|
},
|
||||||
|
"warn",
|
||||||
|
{
|
||||||
|
name: "fetch",
|
||||||
|
message: "Use the built-in `requestUrl` function instead of `fetch` for network requests in Obsidian.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "localStorage",
|
||||||
|
message:
|
||||||
|
"Prefer `App#saveLocalStorage` / `App#loadLocalStorage` functions to write / read localStorage data that's unique to a vault.",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
const restrictedImportsOptions = [
|
||||||
|
{
|
||||||
|
name: "axios",
|
||||||
|
message: "Use the built-in `requestUrl` function instead of `axios`.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "superagent",
|
||||||
|
message: "Use the built-in `requestUrl` function instead of `superagent`.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "got",
|
||||||
|
message: "Use the built-in `requestUrl` function instead of `got`.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "ofetch",
|
||||||
|
message: "Use the built-in `requestUrl` function instead of `ofetch`.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "ky",
|
||||||
|
message: "Use the built-in `requestUrl` function instead of `ky`.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "node-fetch",
|
||||||
|
message: "Use the built-in `requestUrl` function instead of `node-fetch`.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "moment",
|
||||||
|
message: "The 'moment' package is bundled with Obsidian. Please import it from 'obsidian' instead.",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const warnWhileDev = "off";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {import("eslint").Linter.RulesRecord}
|
||||||
|
*/
|
||||||
|
export const baseRules = {
|
||||||
|
// -- Base rules (turned off in favour of TS specific versions or explicitly disabled).
|
||||||
|
"no-unused-vars": "off",
|
||||||
|
"no-unused-labels": "off",
|
||||||
|
"no-prototype-builtins": "off",
|
||||||
|
"require-await": "off",
|
||||||
|
// -- TypeScript specific rules (Gradual adoption of stricter rules, currently set to 'warn' for a while).
|
||||||
|
"@typescript-eslint/no-explicit-any": "warn",
|
||||||
|
"@typescript-eslint/no-redundant-type-constituents": "warn",
|
||||||
|
// -- TypeScript specific rules
|
||||||
|
// @typescript-eslint/no-unsafe-* rules and @typescript-eslint/no-explicit-any:
|
||||||
|
// This project contains a lot of library-sh code where the use of `any` is often necessary and justified.
|
||||||
|
// Rules is now set to 'off' for a while.
|
||||||
|
"@typescript-eslint/no-unsafe-argument": "off",
|
||||||
|
"@typescript-eslint/no-unsafe-call": "off",
|
||||||
|
"@typescript-eslint/no-unsafe-member-access": "off",
|
||||||
|
"@typescript-eslint/no-unsafe-return": "off",
|
||||||
|
"@typescript-eslint/no-unsafe-assignment": "off",
|
||||||
|
// -- Reasonable rules.
|
||||||
|
"@typescript-eslint/no-deprecated": warnWhileDev,
|
||||||
|
"@typescript-eslint/no-unused-vars": ["error", { args: "none" }],
|
||||||
|
"@typescript-eslint/ban-ts-comment": "off",
|
||||||
|
"@typescript-eslint/no-empty-function": "off",
|
||||||
|
"@typescript-eslint/require-await": "error",
|
||||||
|
"@typescript-eslint/no-misused-promises": "error",
|
||||||
|
"@typescript-eslint/no-floating-promises": "error",
|
||||||
|
"@typescript-eslint/no-unnecessary-type-assertion": "error",
|
||||||
|
|
||||||
|
// -- General rules
|
||||||
|
"no-async-promise-executor": warnWhileDev,
|
||||||
|
"no-constant-condition": ["error", { checkLoops: false }],
|
||||||
|
// -- Disabled rules
|
||||||
|
// no-undef: This option breaks the global declarations for the library files and is not worth the effort to fix at this time.
|
||||||
|
"no-undef": "off",
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {import("eslint").Linter.RulesRecord}
|
||||||
|
*/
|
||||||
|
export const obsidianRules = {
|
||||||
|
// -- Obsidian rules
|
||||||
|
// obsidianmd/no-unsupported-api: usually this project checks for API support at runtime, so this rule is not critical but can be helpful to catch potential issues.
|
||||||
|
"obsidianmd/no-unsupported-api": warnWhileDev,
|
||||||
|
|
||||||
|
// -- Plugin specific overrides
|
||||||
|
"obsidianmd/rule-custom-message": "off",
|
||||||
|
"obsidianmd/ui/sentence-case": "off",
|
||||||
|
"obsidianmd/no-plugin-as-component": "off",
|
||||||
|
|
||||||
|
// -- Temporary overrides for migration
|
||||||
|
"obsidianmd/no-static-styles-assignment": "off",
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* @type {(base:string) => import("eslint").Linter.RulesRecord}
|
||||||
|
*/
|
||||||
|
export const ImportAliasRules = (base) => ({
|
||||||
|
"@dword-design/import-alias/prefer-alias": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
aliasForSubpaths: true,
|
||||||
|
alias: {
|
||||||
|
"@": `${base}/src`,
|
||||||
|
"@lib": `${base}/src/lib/src`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
/**
|
||||||
|
* @type {import("eslint").Linter.RulesRecord}
|
||||||
|
*/
|
||||||
|
export const CommunityReviewRecommendedRules = {
|
||||||
|
"no-unused-vars": "off",
|
||||||
|
"no-prototype-bultins": "off",
|
||||||
|
"no-self-compare": "warn",
|
||||||
|
"no-eval": "error",
|
||||||
|
"no-implied-eval": "error",
|
||||||
|
"prefer-const": "off",
|
||||||
|
"no-implicit-globals": "error",
|
||||||
|
"no-console": "off", // overridden by obsidianmd/rule-custom-message
|
||||||
|
"no-restricted-globals": ["error", ...restrictedGlobalsOptions],
|
||||||
|
"no-restricted-imports": ["error", ...restrictedImportsOptions],
|
||||||
|
"no-alert": "error",
|
||||||
|
"no-undef": "error",
|
||||||
|
"@typescript-eslint/ban-ts-comment": "off",
|
||||||
|
"@typescript-eslint/no-deprecated": "error",
|
||||||
|
"@typescript-eslint/no-unused-vars": ["warn", { args: "none" }],
|
||||||
|
"@typescript-eslint/require-await": "off",
|
||||||
|
"@typescript-eslint/no-explicit-any": ["error", { fixToUnknown: true }],
|
||||||
|
// "import/no-nodejs-modules": "off",
|
||||||
|
// "import/no-extraneous-dependencies": "error",
|
||||||
|
};
|
||||||
+17
-49
@@ -4,6 +4,8 @@ import globals from "globals";
|
|||||||
import { defineConfig, globalIgnores } from "eslint/config";
|
import { defineConfig, globalIgnores } from "eslint/config";
|
||||||
import * as sveltePlugin from "eslint-plugin-svelte";
|
import * as sveltePlugin from "eslint-plugin-svelte";
|
||||||
import svelteParser from "svelte-eslint-parser";
|
import svelteParser from "svelte-eslint-parser";
|
||||||
|
import importAlias from "@dword-design/eslint-plugin-import-alias";
|
||||||
|
import { baseRules, ImportAliasRules, obsidianRules } from "./eslint.config.common.mjs";
|
||||||
const warnWhileDev = "off"; // Change to "warn" to enable warnings for rules that are currently disabled.
|
const warnWhileDev = "off"; // Change to "warn" to enable warnings for rules that are currently disabled.
|
||||||
export default defineConfig([
|
export default defineConfig([
|
||||||
globalIgnores([
|
globalIgnores([
|
||||||
@@ -18,11 +20,11 @@ export default defineConfig([
|
|||||||
"**/*.json",
|
"**/*.json",
|
||||||
"**/.eslintrc.js.bak",
|
"**/.eslintrc.js.bak",
|
||||||
// Files from linked dependencies (those files should not exist for most people).
|
// Files from linked dependencies (those files should not exist for most people).
|
||||||
"modules/octagonal-wheels/dist/**/*",
|
"modules/octagonal-wheels/dist",
|
||||||
|
|
||||||
// Sub-projects (Exclude from root linting as they have different environments)
|
// Sub-projects (Exclude from root linting as they have different environments)
|
||||||
"src/apps/**/*",
|
"src/apps",
|
||||||
"utils/**/*",
|
"utils",
|
||||||
|
|
||||||
// Specific exclusions from common library (src/lib)
|
// Specific exclusions from common library (src/lib)
|
||||||
"src/lib/coverage",
|
"src/lib/coverage",
|
||||||
@@ -54,6 +56,7 @@ export default defineConfig([
|
|||||||
]),
|
]),
|
||||||
...sveltePlugin.configs["flat/base"],
|
...sveltePlugin.configs["flat/base"],
|
||||||
...obsidianmd.configs.recommended,
|
...obsidianmd.configs.recommended,
|
||||||
|
importAlias.configs.recommended,
|
||||||
{
|
{
|
||||||
files: ["**/*.ts"],
|
files: ["**/*.ts"],
|
||||||
// ignores:["src/lib/**/*.ts"], // Exclude library files from root linting (they have different environments and rules).
|
// ignores:["src/lib/**/*.ts"], // Exclude library files from root linting (they have different environments and rules).
|
||||||
@@ -62,64 +65,29 @@ export default defineConfig([
|
|||||||
parser: tsParser,
|
parser: tsParser,
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
project: "./tsconfig.json",
|
project: "./tsconfig.json",
|
||||||
|
rootDir: "./",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
linterOptions:{
|
linterOptions: {
|
||||||
reportUnusedDisableDirectives: false,
|
reportUnusedDisableDirectives: false,
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
// -- Base rules (turned off in favour of TS specific versions or explicitly disabled).
|
...baseRules,
|
||||||
"no-unused-vars": "off",
|
...obsidianRules,
|
||||||
"no-unused-labels": "off",
|
// -- Project specific rules
|
||||||
"no-prototype-builtins": "off",
|
...ImportAliasRules("."),
|
||||||
"require-await": "off",
|
|
||||||
// -- TypeScript specific rules
|
|
||||||
// @typescript-eslint/no-unsafe-* rules and @typescript-eslint/no-explicit-any:
|
|
||||||
// This project contains a lot of library-sh code where the use of `any` is often necessary and justified.
|
|
||||||
// Rules is now set to 'off' for a while.
|
|
||||||
"@typescript-eslint/no-explicit-any": "off",
|
|
||||||
"@typescript-eslint/no-unsafe-argument": "off",
|
|
||||||
"@typescript-eslint/no-unsafe-call": "off",
|
|
||||||
"@typescript-eslint/no-unsafe-member-access": "off",
|
|
||||||
"@typescript-eslint/no-unsafe-return": "off",
|
|
||||||
"@typescript-eslint/no-unsafe-assignment": "off",
|
|
||||||
// -- Reasonable rules.
|
|
||||||
"@typescript-eslint/no-deprecated": warnWhileDev,
|
|
||||||
"@typescript-eslint/no-unused-vars": ["error", { args: "none" }],
|
|
||||||
"@typescript-eslint/ban-ts-comment": "off",
|
|
||||||
"@typescript-eslint/no-empty-function": "off",
|
|
||||||
"@typescript-eslint/require-await": "error",
|
|
||||||
"@typescript-eslint/no-misused-promises": "error",
|
|
||||||
"@typescript-eslint/no-floating-promises": "error",
|
|
||||||
"@typescript-eslint/no-unnecessary-type-assertion": "error",
|
|
||||||
|
|
||||||
// -- Obsidian rules
|
|
||||||
// obsidianmd/no-unsupported-api: usually this project checks for API support at runtime, so this rule is not critical but can be helpful to catch potential issues.
|
|
||||||
"obsidianmd/no-unsupported-api": warnWhileDev,
|
|
||||||
|
|
||||||
// -- General rules
|
|
||||||
"no-async-promise-executor": warnWhileDev,
|
|
||||||
"no-constant-condition": ["error", { checkLoops: false }],
|
|
||||||
// -- Disabled rules
|
|
||||||
// no-undef: This option breaks the global declarations for the library files and is not worth the effort to fix at this time.
|
|
||||||
"no-undef": "off",
|
|
||||||
|
|
||||||
// -- Plugin specific overrides
|
|
||||||
"obsidianmd/rule-custom-message": "off",
|
|
||||||
"obsidianmd/ui/sentence-case": "off",
|
|
||||||
"obsidianmd/no-plugin-as-component": "off",
|
|
||||||
|
|
||||||
// -- Temporary overrides for migration
|
|
||||||
"obsidianmd/no-static-styles-assignment": "off",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
files: ["**/*.svelte"],
|
files: ["**/*.svelte"],
|
||||||
languageOptions: {
|
languageOptions: {
|
||||||
|
globals: { ...globals.browser, PouchDB: "readonly" },
|
||||||
parser: svelteParser,
|
parser: svelteParser,
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
parser: tsParser,
|
parser: tsParser,
|
||||||
extraFileExtensions: [".svelte"],
|
extraFileExtensions: [".svelte"],
|
||||||
|
project: "./tsconfig.json",
|
||||||
|
rootDir: "./",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
@@ -127,8 +95,8 @@ export default defineConfig([
|
|||||||
// Svelte template's declarations have a lot of false positives and the rule is not worth the effort to fix at this time.
|
// Svelte template's declarations have a lot of false positives and the rule is not worth the effort to fix at this time.
|
||||||
// it may improve in the future with some options as like ["error", { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }],]
|
// it may improve in the future with some options as like ["error", { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }],]
|
||||||
"no-unused-vars": "off",
|
"no-unused-vars": "off",
|
||||||
"obsidianmd/no-plugin-as-component": "off",
|
...obsidianRules,
|
||||||
"obsidianmd/ui/sentence-case": "off",
|
...ImportAliasRules("."),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|||||||
Generated
+698
-674
File diff suppressed because it is too large
Load Diff
+14
-12
@@ -57,13 +57,14 @@
|
|||||||
"test:docker-all:stop": "npm run test:docker-all:down",
|
"test:docker-all:stop": "npm run test:docker-all:down",
|
||||||
"test:full": "npm run test:docker-all:start && vitest run --coverage && npm run test:docker-all:stop",
|
"test:full": "npm run test:docker-all:start && vitest run --coverage && npm run test:docker-all:stop",
|
||||||
"test:p2p": "bash test/suitep2p/run-p2p-tests.sh",
|
"test:p2p": "bash test/suitep2p/run-p2p-tests.sh",
|
||||||
"version": "node version-bump.mjs && git add manifest.json versions.json"
|
"update-workspaces": "node update-workspaces.mjs",
|
||||||
|
"version": "node version-bump.mjs && node update-workspaces.mjs && git add manifest.json versions.json src/apps/cli/package.json src/apps/webpeer/package.json src/apps/webapp/package.json"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "vorotamoroz",
|
"author": "vorotamoroz",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@chialab/esbuild-plugin-worker": "^0.19.0",
|
"@dword-design/eslint-plugin-import-alias": "^8.1.8",
|
||||||
"@eslint/js": "^9.39.3",
|
"@eslint/js": "^9.39.3",
|
||||||
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
||||||
"@tsconfig/svelte": "^5.0.8",
|
"@tsconfig/svelte": "^5.0.8",
|
||||||
@@ -94,9 +95,9 @@
|
|||||||
"eslint-plugin-svelte": "^3.15.0",
|
"eslint-plugin-svelte": "^3.15.0",
|
||||||
"events": "^3.3.0",
|
"events": "^3.3.0",
|
||||||
"globals": "^14.0.0",
|
"globals": "^14.0.0",
|
||||||
|
"@playwright/test": "^1.58.2",
|
||||||
"playwright": "^1.58.2",
|
"playwright": "^1.58.2",
|
||||||
"postcss": "^8.5.6",
|
"postcss": "^8.5.6",
|
||||||
"postcss-load-config": "^6.0.1",
|
|
||||||
"pouchdb-adapter-http": "^9.0.0",
|
"pouchdb-adapter-http": "^9.0.0",
|
||||||
"pouchdb-adapter-idb": "^9.0.0",
|
"pouchdb-adapter-idb": "^9.0.0",
|
||||||
"pouchdb-adapter-indexeddb": "^9.0.0",
|
"pouchdb-adapter-indexeddb": "^9.0.0",
|
||||||
@@ -111,16 +112,16 @@
|
|||||||
"prettier": "3.8.1",
|
"prettier": "3.8.1",
|
||||||
"rollup-plugin-copy": "^3.5.0",
|
"rollup-plugin-copy": "^3.5.0",
|
||||||
"svelte": "5.41.1",
|
"svelte": "5.41.1",
|
||||||
"svelte-check": "^4.4.3",
|
"svelte-check": "^4.6.0",
|
||||||
|
"svelte-eslint-parser": "^1.8.0",
|
||||||
"svelte-preprocess": "^6.0.3",
|
"svelte-preprocess": "^6.0.3",
|
||||||
"terser": "^5.39.0",
|
"terser": "^5.39.0",
|
||||||
"tinyglobby": "^0.2.15",
|
"tinyglobby": "^0.2.15",
|
||||||
"transform-pouch": "^2.0.0",
|
"transform-pouch": "^2.0.0",
|
||||||
"tslib": "^2.8.1",
|
|
||||||
"tsx": "^4.21.0",
|
"tsx": "^4.21.0",
|
||||||
"typescript": "5.9.3",
|
"typescript": "5.9.3",
|
||||||
|
"typescript-eslint": "^8.61.0",
|
||||||
"vite": "^7.3.1",
|
"vite": "^7.3.1",
|
||||||
"vite-plugin-istanbul": "^8.0.0",
|
|
||||||
"vitest": "^4.1.8",
|
"vitest": "^4.1.8",
|
||||||
"webdriverio": "^9.27.0",
|
"webdriverio": "^9.27.0",
|
||||||
"yaml": "^2.8.2"
|
"yaml": "^2.8.2"
|
||||||
@@ -132,21 +133,22 @@
|
|||||||
"@smithy/middleware-apply-body-checksum": "^4.3.9",
|
"@smithy/middleware-apply-body-checksum": "^4.3.9",
|
||||||
"@smithy/protocol-http": "^5.3.9",
|
"@smithy/protocol-http": "^5.3.9",
|
||||||
"@smithy/querystring-builder": "^4.2.9",
|
"@smithy/querystring-builder": "^4.2.9",
|
||||||
|
"@smithy/types": "^4.14.3",
|
||||||
"@smithy/util-retry": "^4.4.5",
|
"@smithy/util-retry": "^4.4.5",
|
||||||
"@trystero-p2p/nostr": "^0.24.0",
|
"@trystero-p2p/nostr": "^0.24.0",
|
||||||
"chokidar": "^4.0.0",
|
|
||||||
"commander": "^14.0.3",
|
|
||||||
"diff-match-patch": "^1.0.5",
|
"diff-match-patch": "^1.0.5",
|
||||||
"fflate": "^0.8.2",
|
"fflate": "^0.8.2",
|
||||||
"idb": "^8.0.3",
|
"idb": "^8.0.3",
|
||||||
"markdown-it": "^14.1.1",
|
"markdown-it": "^14.1.1",
|
||||||
"micromatch": "^4.0.0",
|
|
||||||
"minimatch": "^10.2.2",
|
"minimatch": "^10.2.2",
|
||||||
"obsidian": "^1.12.3",
|
"obsidian": "^1.12.3",
|
||||||
"octagonal-wheels": "^0.1.46",
|
"octagonal-wheels": "^0.1.46",
|
||||||
"pouchdb-adapter-leveldb": "^9.0.0",
|
|
||||||
"qrcode-generator": "^1.4.4",
|
"qrcode-generator": "^1.4.4",
|
||||||
"werift": "^0.23.0",
|
|
||||||
"xxhash-wasm-102": "npm:xxhash-wasm@^1.0.2"
|
"xxhash-wasm-102": "npm:xxhash-wasm@^1.0.2"
|
||||||
}
|
},
|
||||||
|
"workspaces": [
|
||||||
|
"src/apps/cli",
|
||||||
|
"src/apps/webpeer",
|
||||||
|
"src/apps/webapp"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,8 +82,8 @@ RUN apt-get update \
|
|||||||
|
|
||||||
WORKDIR /deps
|
WORKDIR /deps
|
||||||
|
|
||||||
# runtime-package.json lists only the packages that Vite leaves external
|
# package.json lists only the packages that the CLI requires
|
||||||
COPY src/apps/cli/runtime-package.json ./package.json
|
COPY src/apps/cli/package.json ./package.json
|
||||||
RUN npm install --omit=dev
|
RUN npm install --omit=dev
|
||||||
|
|
||||||
# ─────────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
|
|||||||
+12
-5
@@ -118,19 +118,26 @@ git submodule update --init --recursive
|
|||||||
# Install dependencies from the repository root
|
# Install dependencies from the repository root
|
||||||
npm install
|
npm install
|
||||||
|
|
||||||
# Build the CLI from its package directory
|
# Build the CLI from the repository root
|
||||||
|
npm run build -w self-hosted-livesync-cli
|
||||||
|
|
||||||
|
# Or from the package directory
|
||||||
cd src/apps/cli
|
cd src/apps/cli
|
||||||
npm run build
|
npm run build
|
||||||
```
|
```
|
||||||
|
|
||||||
If `src/lib` is missing, `npm run build` now stops early with a targeted message
|
If `src/lib` is missing, the build process stops early with a targeted message instead of a low-level Vite `ENOENT` error.
|
||||||
instead of a low-level Vite `ENOENT` error.
|
|
||||||
|
|
||||||
Run the CLI:
|
Run the CLI:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Run with npm script (from repository root)
|
# Run with npm workspace script (from repository root)
|
||||||
npm run --silent cli -- [database-path] [command] [args...]
|
npm run cli -w self-hosted-livesync-cli -- [database-path] [command] [args...]
|
||||||
|
|
||||||
|
# Or from the package directory
|
||||||
|
cd src/apps/cli
|
||||||
|
npm run cli -- [database-path] [command] [args...]
|
||||||
|
|
||||||
# Run the built executable directly
|
# Run the built executable directly
|
||||||
node src/apps/cli/dist/index.cjs [database-path] [command] [args...]
|
node src/apps/cli/dist/index.cjs [database-path] [command] [args...]
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import type { LiveSyncBaseCore } from "../../../LiveSyncBaseCore";
|
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore";
|
||||||
import { P2P_DEFAULT_SETTINGS } from "@lib/common/types";
|
import { P2P_DEFAULT_SETTINGS } from "@lib/common/types";
|
||||||
import type { ServiceContext } from "@lib/services/base/ServiceBase";
|
import type { ServiceContext } from "@lib/services/base/ServiceBase";
|
||||||
import { LiveSyncTrysteroReplicator } from "@lib/replication/trystero/LiveSyncTrysteroReplicator";
|
import { LiveSyncTrysteroReplicator } from "@lib/replication/trystero/LiveSyncTrysteroReplicator";
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { LiveSyncBaseCore } from "../../../LiveSyncBaseCore";
|
import { LiveSyncBaseCore } from "@/LiveSyncBaseCore";
|
||||||
import { ServiceContext } from "@lib/services/base/ServiceBase";
|
import { ServiceContext } from "@lib/services/base/ServiceBase";
|
||||||
import type { ObsidianLiveSyncSettings } from "@lib/common/types";
|
import type { ObsidianLiveSyncSettings } from "@lib/common/types";
|
||||||
|
|
||||||
|
|||||||
@@ -7,11 +7,11 @@ import * as fs from "fs/promises";
|
|||||||
import * as path from "path";
|
import * as path from "path";
|
||||||
import { NodeServiceContext, NodeServiceHub } from "./services/NodeServiceHub";
|
import { NodeServiceContext, NodeServiceHub } from "./services/NodeServiceHub";
|
||||||
import { configureNodeLocalStorage, ensureGlobalNodeLocalStorage } from "./services/NodeLocalStorage";
|
import { configureNodeLocalStorage, ensureGlobalNodeLocalStorage } from "./services/NodeLocalStorage";
|
||||||
import { LiveSyncBaseCore } from "../../LiveSyncBaseCore";
|
import { LiveSyncBaseCore } from "@/LiveSyncBaseCore";
|
||||||
import { initialiseServiceModulesCLI } from "./serviceModules/CLIServiceModules";
|
import { initialiseServiceModulesCLI } from "./serviceModules/CLIServiceModules";
|
||||||
import { DEFAULT_SETTINGS, LOG_LEVEL_VERBOSE, type LOG_LEVEL, type ObsidianLiveSyncSettings } from "@lib/common/types";
|
import { DEFAULT_SETTINGS, LOG_LEVEL_VERBOSE, type LOG_LEVEL, type ObsidianLiveSyncSettings } from "@lib/common/types";
|
||||||
import type { InjectableServiceHub } from "@lib/services/implements/injectable/InjectableServiceHub";
|
import type { InjectableServiceHub } from "@lib/services/implements/injectable/InjectableServiceHub";
|
||||||
import type { InjectableSettingService } from "@/lib/src/services/implements/injectable/InjectableSettingService";
|
import type { InjectableSettingService } from "@lib/services/implements/injectable/InjectableSettingService";
|
||||||
import {
|
import {
|
||||||
LOG_LEVEL_DEBUG,
|
LOG_LEVEL_DEBUG,
|
||||||
setGlobalLogFunction,
|
setGlobalLogFunction,
|
||||||
@@ -26,7 +26,7 @@ import type { CLICommand, CLIOptions } from "./commands/types";
|
|||||||
import { getPathFromUXFileInfo } from "@lib/common/typeUtils";
|
import { getPathFromUXFileInfo } from "@lib/common/typeUtils";
|
||||||
import { stripAllPrefixes } from "@lib/string_and_binary/path";
|
import { stripAllPrefixes } from "@lib/string_and_binary/path";
|
||||||
import { IgnoreRules } from "./serviceModules/IgnoreRules";
|
import { IgnoreRules } from "./serviceModules/IgnoreRules";
|
||||||
import { useP2PReplicatorFeature } from "@/lib/src/replication/trystero/useP2PReplicatorFeature";
|
import { useP2PReplicatorFeature } from "@lib/replication/trystero/useP2PReplicatorFeature";
|
||||||
|
|
||||||
const SETTINGS_FILE = ".livesync/settings.json";
|
const SETTINGS_FILE = ".livesync/settings.json";
|
||||||
ensureGlobalNodeLocalStorage();
|
ensureGlobalNodeLocalStorage();
|
||||||
|
|||||||
@@ -10,12 +10,12 @@ import type {
|
|||||||
IStorageEventWatchHandlers,
|
IStorageEventWatchHandlers,
|
||||||
} from "@lib/managers/adapters";
|
} from "@lib/managers/adapters";
|
||||||
import type { FileEventItemSentinel } from "@lib/managers/StorageEventManager";
|
import type { FileEventItemSentinel } from "@lib/managers/StorageEventManager";
|
||||||
import type { NodeFile, NodeFolder } from "../adapters/NodeTypes";
|
import type { NodeFile, NodeFolder } from "@/apps/cli/adapters/NodeTypes";
|
||||||
import type { Stats } from "fs";
|
import type { Stats } from "fs";
|
||||||
import * as fs from "fs/promises";
|
import * as fs from "fs/promises";
|
||||||
import * as path from "path";
|
import * as path from "path";
|
||||||
import { watch as chokidarWatch, type FSWatcher } from "chokidar";
|
import { watch as chokidarWatch, type FSWatcher } from "chokidar";
|
||||||
import type { IgnoreRules } from "../serviceModules/IgnoreRules";
|
import type { IgnoreRules } from "@/apps/cli/serviceModules/IgnoreRules";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CLI-specific type guard adapter
|
* CLI-specific type guard adapter
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { describe, expect, it, vi, beforeEach } from "vitest";
|
import { describe, expect, it, vi, beforeEach } from "vitest";
|
||||||
import type { IStorageEventWatchHandlers } from "@lib/managers/adapters";
|
import type { IStorageEventWatchHandlers } from "@lib/managers/adapters";
|
||||||
import type { NodeFile } from "../adapters/NodeTypes";
|
import type { NodeFile } from "@/apps/cli/adapters/NodeTypes";
|
||||||
|
|
||||||
// ── chokidar mock ──────────────────────────────────────────────────────────────
|
// ── chokidar mock ──────────────────────────────────────────────────────────────
|
||||||
// Must be hoisted before imports that pull in chokidar.
|
// Must be hoisted before imports that pull in chokidar.
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { StorageEventManagerBase, type StorageEventManagerBaseDependencies } from "@lib/managers/StorageEventManager";
|
import { StorageEventManagerBase, type StorageEventManagerBaseDependencies } from "@lib/managers/StorageEventManager";
|
||||||
import { CLIStorageEventManagerAdapter } from "./CLIStorageEventManagerAdapter";
|
import { CLIStorageEventManagerAdapter } from "./CLIStorageEventManagerAdapter";
|
||||||
import type { IMinimumLiveSyncCommands, LiveSyncBaseCore } from "../../../LiveSyncBaseCore";
|
import type { IMinimumLiveSyncCommands, LiveSyncBaseCore } from "@/LiveSyncBaseCore";
|
||||||
import type { ServiceContext } from "@lib/services/base/ServiceBase";
|
import type { ServiceContext } from "@lib/services/base/ServiceBase";
|
||||||
import type { IgnoreRules } from "../serviceModules/IgnoreRules";
|
import type { IgnoreRules } from "@/apps/cli/serviceModules/IgnoreRules";
|
||||||
// import type { IMinimumLiveSyncCommands } from "@lib/services/base/IService";
|
// import type { IMinimumLiveSyncCommands } from "@lib/services/base/IService";
|
||||||
|
|
||||||
export class StorageEventManagerCLI extends StorageEventManagerBase<CLIStorageEventManagerAdapter> {
|
export class StorageEventManagerCLI extends StorageEventManagerBase<CLIStorageEventManagerAdapter> {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "self-hosted-livesync-cli",
|
"name": "self-hosted-livesync-cli",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.0",
|
"version": "0.25.76-cli",
|
||||||
"main": "dist/index.cjs",
|
"main": "dist/index.cjs",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -38,6 +38,26 @@
|
|||||||
"test:e2e:docker:p2p-sync": "RUN_BUILD=0 LIVESYNC_TEST_DOCKER=1 bash test/test-p2p-sync-linux.sh",
|
"test:e2e:docker:p2p-sync": "RUN_BUILD=0 LIVESYNC_TEST_DOCKER=1 bash test/test-p2p-sync-linux.sh",
|
||||||
"test:e2e:docker:all": "export RUN_BUILD=0 && npm run test:e2e:docker:setup-put-cat && npm run test:e2e:docker:push-pull && npm run test:e2e:docker:sync-two-local && npm run test:e2e:docker:mirror && npm run test:e2e:docker:remote-commands"
|
"test:e2e:docker:all": "export RUN_BUILD=0 && npm run test:e2e:docker:setup-put-cat && npm run test:e2e:docker:push-pull && npm run test:e2e:docker:sync-two-local && npm run test:e2e:docker:mirror && npm run test:e2e:docker:remote-commands"
|
||||||
},
|
},
|
||||||
"dependencies": {},
|
"dependencies": {
|
||||||
"devDependencies": {}
|
"chokidar": "^4.0.0",
|
||||||
|
"minimatch": "^10.2.2",
|
||||||
|
"octagonal-wheels": "^0.1.46",
|
||||||
|
"pouchdb-adapter-http": "^9.0.0",
|
||||||
|
"pouchdb-adapter-leveldb": "^9.0.0",
|
||||||
|
"pouchdb-core": "^9.0.0",
|
||||||
|
"pouchdb-errors": "^9.0.0",
|
||||||
|
"pouchdb-find": "^9.0.0",
|
||||||
|
"pouchdb-mapreduce": "^9.0.0",
|
||||||
|
"pouchdb-merge": "^9.0.0",
|
||||||
|
"pouchdb-replication": "^9.0.0",
|
||||||
|
"pouchdb-utils": "^9.0.0",
|
||||||
|
"transform-pouch": "^2.0.0",
|
||||||
|
"werift": "^0.23.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
||||||
|
"typescript": "5.9.3",
|
||||||
|
"vite": "^7.3.1",
|
||||||
|
"vitest": "^4.1.8"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "livesync-cli-runtime",
|
|
||||||
"private": true,
|
|
||||||
"version": "0.0.0",
|
|
||||||
"description": "Runtime dependencies for Self-hosted LiveSync CLI Docker image",
|
|
||||||
"dependencies": {
|
|
||||||
"chokidar": "^4.0.0",
|
|
||||||
"commander": "^14.0.3",
|
|
||||||
"werift": "^0.22.9",
|
|
||||||
"pouchdb-adapter-http": "^9.0.0",
|
|
||||||
"pouchdb-adapter-idb": "^9.0.0",
|
|
||||||
"pouchdb-adapter-indexeddb": "^9.0.0",
|
|
||||||
"pouchdb-adapter-leveldb": "^9.0.0",
|
|
||||||
"pouchdb-adapter-memory": "^9.0.0",
|
|
||||||
"pouchdb-core": "^9.0.0",
|
|
||||||
"pouchdb-errors": "^9.0.0",
|
|
||||||
"pouchdb-find": "^9.0.0",
|
|
||||||
"pouchdb-mapreduce": "^9.0.0",
|
|
||||||
"pouchdb-merge": "^9.0.0",
|
|
||||||
"pouchdb-replication": "^9.0.0",
|
|
||||||
"pouchdb-utils": "^9.0.0",
|
|
||||||
"pouchdb-wrappers": "*",
|
|
||||||
"transform-pouch": "^2.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
import type { InjectableServiceHub } from "@lib/services/implements/injectable/InjectableServiceHub";
|
import type { InjectableServiceHub } from "@lib/services/implements/injectable/InjectableServiceHub";
|
||||||
import { ServiceRebuilder } from "@lib/serviceModules/Rebuilder";
|
import { ServiceRebuilder } from "@lib/serviceModules/Rebuilder";
|
||||||
import { ServiceFileHandler } from "../../../serviceModules/FileHandler";
|
import { ServiceFileHandler } from "@/serviceModules/FileHandler";
|
||||||
import { StorageAccessManager } from "@lib/managers/StorageProcessingManager";
|
import { StorageAccessManager } from "@lib/managers/StorageProcessingManager";
|
||||||
import type { LiveSyncBaseCore } from "../../../LiveSyncBaseCore";
|
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore";
|
||||||
import type { ServiceContext } from "@lib/services/base/ServiceBase";
|
import type { ServiceContext } from "@lib/services/base/ServiceBase";
|
||||||
import { FileAccessCLI } from "./FileAccessCLI";
|
import { FileAccessCLI } from "./FileAccessCLI";
|
||||||
import { ServiceFileAccessCLI } from "./ServiceFileAccessImpl";
|
import { ServiceFileAccessCLI } from "./ServiceFileAccessImpl";
|
||||||
import { ServiceDatabaseFileAccessCLI } from "./DatabaseFileAccess";
|
import { ServiceDatabaseFileAccessCLI } from "./DatabaseFileAccess";
|
||||||
import { StorageEventManagerCLI } from "../managers/StorageEventManagerCLI";
|
import { StorageEventManagerCLI } from "@/apps/cli/managers/StorageEventManagerCLI";
|
||||||
import type { ServiceModules } from "@lib/interfaces/ServiceModule";
|
import type { ServiceModules } from "@lib/interfaces/ServiceModule";
|
||||||
import type { IgnoreRules } from "./IgnoreRules";
|
import type { IgnoreRules } from "./IgnoreRules";
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { FileAccessBase, type FileAccessBaseDependencies } from "@lib/serviceModules/FileAccessBase";
|
import { FileAccessBase, type FileAccessBaseDependencies } from "@lib/serviceModules/FileAccessBase";
|
||||||
import { NodeFileSystemAdapter } from "../adapters/NodeFileSystemAdapter";
|
import { NodeFileSystemAdapter } from "@/apps/cli/adapters/NodeFileSystemAdapter";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CLI-specific implementation of FileAccessBase
|
* CLI-specific implementation of FileAccessBase
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { ServiceFileAccessBase, type StorageAccessBaseDependencies } from "@lib/serviceModules/ServiceFileAccessBase";
|
import { ServiceFileAccessBase, type StorageAccessBaseDependencies } from "@lib/serviceModules/ServiceFileAccessBase";
|
||||||
import { NodeFileSystemAdapter } from "../adapters/NodeFileSystemAdapter";
|
import { NodeFileSystemAdapter } from "@/apps/cli/adapters/NodeFileSystemAdapter";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CLI-specific implementation of ServiceFileAccess
|
* CLI-specific implementation of ServiceFileAccess
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import type { ServiceInstances } from "@lib/services/ServiceHub";
|
|||||||
import { NodeKeyValueDBService } from "./NodeKeyValueDBService";
|
import { NodeKeyValueDBService } from "./NodeKeyValueDBService";
|
||||||
import { NodeSettingService } from "./NodeSettingService";
|
import { NodeSettingService } from "./NodeSettingService";
|
||||||
import { DatabaseService } from "@lib/services/base/DatabaseService";
|
import { DatabaseService } from "@lib/services/base/DatabaseService";
|
||||||
import type { ObsidianLiveSyncSettings } from "@/lib/src/common/types";
|
import type { ObsidianLiveSyncSettings } from "@lib/common/types";
|
||||||
|
|
||||||
export class NodeServiceContext extends ServiceContext {
|
export class NodeServiceContext extends ServiceContext {
|
||||||
databasePath: string;
|
databasePath: string;
|
||||||
|
|||||||
@@ -15,18 +15,18 @@
|
|||||||
"noEmit": true,
|
"noEmit": true,
|
||||||
|
|
||||||
/* Linting */
|
/* Linting */
|
||||||
"strict": false,
|
"strict": true,
|
||||||
|
// "noImplicitAny": false,
|
||||||
"noUnusedLocals": false,
|
"noUnusedLocals": false,
|
||||||
"noUnusedParameters": false,
|
"noUnusedParameters": false,
|
||||||
"noFallthroughCasesInSwitch": true,
|
"noFallthroughCasesInSwitch": true,
|
||||||
|
// "rootDir": "../../../",
|
||||||
/* Path mapping */
|
/* Path mapping */
|
||||||
"baseUrl": ".",
|
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/*": ["../../*"],
|
"@/*": ["../../*"],
|
||||||
"@lib/*": ["../../lib/src/*"]
|
"@lib/*": ["../../lib/src/*"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"include": ["*.ts", "**/*.ts", "**/*.tsx"],
|
"include": ["*.ts", "**/*.ts", "**/*.tsx"],
|
||||||
"exclude": ["node_modules", "dist"]
|
"exclude": ["node_modules", "dist", "test", "testdeno"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,8 +35,15 @@ npm install
|
|||||||
|
|
||||||
### Development
|
### Development
|
||||||
|
|
||||||
|
From the repository root:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run dev -w livesync-webapp
|
||||||
|
```
|
||||||
|
|
||||||
|
Or from the package directory:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Build the project (ensure you are in `src/apps/webapp` directory)
|
|
||||||
cd src/apps/webapp
|
cd src/apps/webapp
|
||||||
npm run dev
|
npm run dev
|
||||||
```
|
```
|
||||||
@@ -45,8 +52,15 @@ This will start a development server at `http://localhost:3000`.
|
|||||||
|
|
||||||
### Build
|
### Build
|
||||||
|
|
||||||
|
From the repository root:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run build -w livesync-webapp
|
||||||
|
```
|
||||||
|
|
||||||
|
Or from the package directory:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Build the project (ensure you are in `src/apps/webapp` directory)
|
|
||||||
cd src/apps/webapp
|
cd src/apps/webapp
|
||||||
npm run build
|
npm run build
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ import { useSetupURIFeature } from "@lib/serviceFeatures/setupObsidian/setupUri"
|
|||||||
import { useRemoteConfiguration } from "@lib/serviceFeatures/remoteConfig";
|
import { useRemoteConfiguration } from "@lib/serviceFeatures/remoteConfig";
|
||||||
import { SetupManager } from "@/modules/features/SetupManager";
|
import { SetupManager } from "@/modules/features/SetupManager";
|
||||||
import { useSetupManagerHandlersFeature } from "@/serviceFeatures/setupObsidian/setupManagerHandlers";
|
import { useSetupManagerHandlersFeature } from "@/serviceFeatures/setupObsidian/setupManagerHandlers";
|
||||||
import { useP2PReplicatorCommands } from "@/lib/src/replication/trystero/useP2PReplicatorCommands";
|
import { useP2PReplicatorCommands } from "@lib/replication/trystero/useP2PReplicatorCommands";
|
||||||
import { useP2PReplicatorFeature } from "@/lib/src/replication/trystero/useP2PReplicatorFeature";
|
import { useP2PReplicatorFeature } from "@lib/replication/trystero/useP2PReplicatorFeature";
|
||||||
|
|
||||||
const SETTINGS_DIR = ".livesync";
|
const SETTINGS_DIR = ".livesync";
|
||||||
const SETTINGS_FILE = "settings.json";
|
const SETTINGS_FILE = "settings.json";
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import type {
|
|||||||
IStorageEventWatchHandlers,
|
IStorageEventWatchHandlers,
|
||||||
} from "@lib/managers/adapters";
|
} from "@lib/managers/adapters";
|
||||||
import type { FileEventItemSentinel } from "@lib/managers/StorageEventManager";
|
import type { FileEventItemSentinel } from "@lib/managers/StorageEventManager";
|
||||||
import type { FSAPIFile, FSAPIFolder } from "../adapters/FSAPITypes";
|
import type { FSAPIFile, FSAPIFolder } from "@/apps/webapp/adapters/FSAPITypes";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FileSystem API-specific type guard adapter
|
* FileSystem API-specific type guard adapter
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "livesync-webapp",
|
"name": "livesync-webapp",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.1",
|
"version": "0.25.76-webapp",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "Browser-based Self-hosted LiveSync using FileSystem API",
|
"description": "Browser-based Self-hosted LiveSync using FileSystem API",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -11,9 +11,16 @@
|
|||||||
"run:docker": "docker run -p 8002:80 livesync-webapp",
|
"run:docker": "docker run -p 8002:80 livesync-webapp",
|
||||||
"preview": "vite preview"
|
"preview": "vite preview"
|
||||||
},
|
},
|
||||||
"dependencies": {},
|
"dependencies": {
|
||||||
|
"octagonal-wheels": "^0.1.46"
|
||||||
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@playwright/test": "^1.58.2",
|
||||||
|
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
||||||
|
"playwright": "^1.58.2",
|
||||||
|
"svelte": "5.41.1",
|
||||||
"typescript": "5.9.3",
|
"typescript": "5.9.3",
|
||||||
"vite": "^7.3.1"
|
"vite": "^7.3.1",
|
||||||
|
"vite-plugin-istanbul": "^8.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import type { ServiceContext } from "@lib/services/base/ServiceBase";
|
|||||||
import { FileAccessFSAPI } from "./FileAccessFSAPI";
|
import { FileAccessFSAPI } from "./FileAccessFSAPI";
|
||||||
import { ServiceFileAccessFSAPI } from "./ServiceFileAccessImpl";
|
import { ServiceFileAccessFSAPI } from "./ServiceFileAccessImpl";
|
||||||
import { ServiceDatabaseFileAccessFSAPI } from "./DatabaseFileAccess";
|
import { ServiceDatabaseFileAccessFSAPI } from "./DatabaseFileAccess";
|
||||||
import { StorageEventManagerFSAPI } from "../managers/StorageEventManagerFSAPI";
|
import { StorageEventManagerFSAPI } from "@/apps/webapp/managers/StorageEventManagerFSAPI";
|
||||||
import type { ServiceModules } from "@lib/interfaces/ServiceModule";
|
import type { ServiceModules } from "@lib/interfaces/ServiceModule";
|
||||||
import { ServiceFileHandler } from "@/serviceModules/FileHandler";
|
import { ServiceFileHandler } from "@/serviceModules/FileHandler";
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { FileAccessBase, type FileAccessBaseDependencies } from "@lib/serviceModules/FileAccessBase";
|
import { FileAccessBase, type FileAccessBaseDependencies } from "@lib/serviceModules/FileAccessBase";
|
||||||
import { FSAPIFileSystemAdapter } from "../adapters/FSAPIFileSystemAdapter";
|
import { FSAPIFileSystemAdapter } from "@/apps/webapp/adapters/FSAPIFileSystemAdapter";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FileSystem API-specific implementation of FileAccessBase
|
* FileSystem API-specific implementation of FileAccessBase
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { ServiceFileAccessBase, type StorageAccessBaseDependencies } from "@lib/serviceModules/ServiceFileAccessBase";
|
import { ServiceFileAccessBase, type StorageAccessBaseDependencies } from "@lib/serviceModules/ServiceFileAccessBase";
|
||||||
import { FSAPIFileSystemAdapter } from "../adapters/FSAPIFileSystemAdapter";
|
import { FSAPIFileSystemAdapter } from "@/apps/webapp/adapters/FSAPIFileSystemAdapter";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FileSystem API-specific implementation of ServiceFileAccess
|
* FileSystem API-specific implementation of ServiceFileAccess
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { test, expect, type BrowserContext, type Page, type TestInfo } from "@playwright/test";
|
import { test, expect, type BrowserContext, type Page, type TestInfo } from "@playwright/test";
|
||||||
import type { LiveSyncTestAPI } from "../test-entry";
|
import type { LiveSyncTestAPI } from "@/apps/webapp/test-entry";
|
||||||
import { mkdirSync, writeFileSync } from "node:fs";
|
import { mkdirSync, writeFileSync } from "node:fs";
|
||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import { fileURLToPath } from "node:url";
|
import { fileURLToPath } from "node:url";
|
||||||
|
|||||||
@@ -13,13 +13,20 @@ This pseudo client actually receives the data from other devices, and sends if s
|
|||||||
|
|
||||||
## How to use it?
|
## How to use it?
|
||||||
|
|
||||||
We can build the application by running the following command:
|
We can build the application from the repository root by running the following command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ deno task build
|
npm run build -w webpeer
|
||||||
```
|
```
|
||||||
|
|
||||||
Then, open the `dist/index.html` in the browser. It can be configured as the same as the Self-hosted LiveSync (Same components are used[^1]).
|
Or from the package directory:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd src/apps/webpeer
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, open `dist/index.html` in the browser. It can be configured in the same way as Self-hosted LiveSync (the same components are used[^1]).
|
||||||
|
|
||||||
## Some notes
|
## Some notes
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "webpeer",
|
"name": "webpeer",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.0",
|
"version": "0.25.76-webpeer",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
@@ -11,13 +11,15 @@
|
|||||||
"preview": "vite preview",
|
"preview": "vite preview",
|
||||||
"check": "svelte-check --tsconfig ./tsconfig.app.json && tsc -p tsconfig.node.json"
|
"check": "svelte-check --tsconfig ./tsconfig.app.json && tsc -p tsconfig.node.json"
|
||||||
},
|
},
|
||||||
"dependencies": {},
|
"dependencies": {
|
||||||
|
"octagonal-wheels": "^0.1.46"
|
||||||
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint-plugin-svelte": "^3.15.0",
|
"eslint-plugin-svelte": "^3.15.0",
|
||||||
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
||||||
"@tsconfig/svelte": "^5.0.8",
|
"@tsconfig/svelte": "^5.0.8",
|
||||||
"svelte": "5.41.1",
|
"svelte": "5.41.1",
|
||||||
"svelte-check": "^443.3",
|
"svelte-check": "^4.6.0",
|
||||||
"typescript": "5.9.3",
|
"typescript": "5.9.3",
|
||||||
"vite": "^7.3.1"
|
"vite": "^7.3.1"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ import { ServiceContext } from "@lib/services/base/ServiceBase";
|
|||||||
import type { InjectableServiceHub } from "@lib/services/InjectableServices";
|
import type { InjectableServiceHub } from "@lib/services/InjectableServices";
|
||||||
import { Menu } from "@lib/services/implements/browser/Menu";
|
import { Menu } from "@lib/services/implements/browser/Menu";
|
||||||
import { SimpleStoreIDBv2 } from "octagonal-wheels/databases/SimpleStoreIDBv2";
|
import { SimpleStoreIDBv2 } from "octagonal-wheels/databases/SimpleStoreIDBv2";
|
||||||
import type { BrowserAPIService } from "@/lib/src/services/implements/browser/BrowserAPIService";
|
import type { BrowserAPIService } from "@lib/services/implements/browser/BrowserAPIService";
|
||||||
import type { InjectableSettingService } from "@/lib/src/services/implements/injectable/InjectableSettingService";
|
import type { InjectableSettingService } from "@lib/services/implements/injectable/InjectableSettingService";
|
||||||
import { LiveSyncTrysteroReplicator } from "@lib/replication/trystero/LiveSyncTrysteroReplicator";
|
import { LiveSyncTrysteroReplicator } from "@lib/replication/trystero/LiveSyncTrysteroReplicator";
|
||||||
|
|
||||||
function addToList(item: string, list: string) {
|
function addToList(item: string, list: string) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Menu } from "@/lib/src/services/implements/browser/Menu";
|
import { Menu } from "@lib/services/implements/browser/Menu";
|
||||||
import { getDialogContext } from "@lib/services/implements/base/SvelteDialog";
|
import { getDialogContext } from "@lib/services/implements/base/SvelteDialog";
|
||||||
let result = $state<string | boolean>("");
|
let result = $state<string | boolean>("");
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"extends": "@tsconfig/svelte/tsconfig.json",
|
"extends": "../../../tsconfig.json",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"sourceRoot": "../",
|
"sourceRoot": "../",
|
||||||
"target": "ESNext",
|
"target": "ESNext",
|
||||||
@@ -15,11 +15,13 @@
|
|||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"checkJs": true,
|
"checkJs": true,
|
||||||
"isolatedModules": true,
|
"isolatedModules": true,
|
||||||
|
"allowImportingTsExtensions": true,
|
||||||
"moduleDetection": "force",
|
"moduleDetection": "force",
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/*": ["../../*"],
|
"@/*": ["../../*"],
|
||||||
"@lib/*": ["../../lib/src/*"]
|
"@lib/*": ["../../lib/src/*"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"]
|
"include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"],
|
||||||
|
"exclude": ["node_modules", "dist"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { deleteDB, type IDBPDatabase, openDB } from "idb";
|
import { deleteDB, type IDBPDatabase, openDB } from "idb";
|
||||||
import type { KeyValueDatabase } from "../lib/src/interfaces/KeyValueDatabase.ts";
|
import type { KeyValueDatabase } from "@lib/interfaces/KeyValueDatabase.ts";
|
||||||
import { serialized } from "octagonal-wheels/concurrency/lock";
|
import { serialized } from "octagonal-wheels/concurrency/lock";
|
||||||
import { Logger } from "octagonal-wheels/common/logger";
|
import { Logger } from "octagonal-wheels/common/logger";
|
||||||
const databaseCache: { [key: string]: IDBPDatabase<any> } = {};
|
const databaseCache: { [key: string]: IDBPDatabase<any> } = {};
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { LOG_LEVEL_VERBOSE, Logger } from "@/lib/src/common/logger";
|
import { LOG_LEVEL_VERBOSE, Logger } from "@lib/common/logger";
|
||||||
import type { KeyValueDatabase } from "@/lib/src/interfaces/KeyValueDatabase";
|
import type { KeyValueDatabase } from "@lib/interfaces/KeyValueDatabase";
|
||||||
import { deleteDB, openDB, type IDBPDatabase } from "idb";
|
import { deleteDB, openDB, type IDBPDatabase } from "idb";
|
||||||
import { serialized } from "octagonal-wheels/concurrency/lock";
|
import { serialized } from "octagonal-wheels/concurrency/lock";
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { eventHub } from "../lib/src/hub/hub";
|
import { eventHub } from "@lib/hub/hub";
|
||||||
// import type ObsidianLiveSyncPlugin from "../main";
|
// import type ObsidianLiveSyncPlugin from "../main";
|
||||||
|
|
||||||
export const EVENT_PLUGIN_LOADED = "plugin-loaded";
|
export const EVENT_PLUGIN_LOADED = "plugin-loaded";
|
||||||
@@ -43,5 +43,5 @@ declare global {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export * from "../lib/src/events/coreEvents.ts";
|
export * from "@lib/events/coreEvents.ts";
|
||||||
export { eventHub };
|
export { eventHub };
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { TFile } from "../deps";
|
import type { TFile } from "@/deps";
|
||||||
import type { FilePathWithPrefix, LoadedEntry } from "../lib/src/common/types";
|
import type { FilePathWithPrefix, LoadedEntry } from "@lib/common/types";
|
||||||
|
|
||||||
export const EVENT_REQUEST_SHOW_HISTORY = "show-history";
|
export const EVENT_REQUEST_SHOW_HISTORY = "show-history";
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -1,6 +1,6 @@
|
|||||||
import { type PluginManifest, TFile } from "../deps.ts";
|
import { type PluginManifest, TFile } from "@/deps.ts";
|
||||||
import { type DatabaseEntry, type EntryBody, type FilePath } from "../lib/src/common/types.ts";
|
import { type DatabaseEntry, type EntryBody, type FilePath } from "@lib/common/types.ts";
|
||||||
export type { CacheData, FileEventItem } from "../lib/src/common/types.ts";
|
export type { CacheData, FileEventItem } from "@lib/common/types.ts";
|
||||||
|
|
||||||
export interface PluginDataEntry extends DatabaseEntry {
|
export interface PluginDataEntry extends DatabaseEntry {
|
||||||
deviceVaultName: string;
|
deviceVaultName: string;
|
||||||
@@ -51,7 +51,7 @@ export type queueItem = {
|
|||||||
|
|
||||||
export const FileWatchEventQueueMax = 10;
|
export const FileWatchEventQueueMax = 10;
|
||||||
|
|
||||||
export { configURIBase, configURIBaseQR } from "../lib/src/common/types.ts";
|
export { configURIBase, configURIBaseQR } from "@lib/common/types.ts";
|
||||||
|
|
||||||
export {
|
export {
|
||||||
CHeader,
|
CHeader,
|
||||||
@@ -61,4 +61,4 @@ export {
|
|||||||
ICHeaderEnd,
|
ICHeaderEnd,
|
||||||
ICHeaderLength,
|
ICHeaderLength,
|
||||||
ICXHeader,
|
ICXHeader,
|
||||||
} from "../lib/src/common/models/fileaccess.const.ts";
|
} from "@lib/common/models/fileaccess.const.ts";
|
||||||
|
|||||||
+8
-8
@@ -1,4 +1,4 @@
|
|||||||
import { normalizePath, Platform, TAbstractFile, type RequestUrlParam, requestUrl } from "../deps.ts";
|
import { normalizePath, Platform, TAbstractFile, type RequestUrlParam, requestUrl } from "@/deps.ts";
|
||||||
import {
|
import {
|
||||||
path2id_base,
|
path2id_base,
|
||||||
id2path_base,
|
id2path_base,
|
||||||
@@ -7,9 +7,9 @@ import {
|
|||||||
isValidFilenameInWidows,
|
isValidFilenameInWidows,
|
||||||
isValidFilenameInAndroid,
|
isValidFilenameInAndroid,
|
||||||
stripAllPrefixes,
|
stripAllPrefixes,
|
||||||
} from "../lib/src/string_and_binary/path.ts";
|
} from "@lib/string_and_binary/path.ts";
|
||||||
|
|
||||||
import { Logger } from "../lib/src/common/logger.ts";
|
import { Logger } from "@lib/common/logger.ts";
|
||||||
import {
|
import {
|
||||||
LOG_LEVEL_INFO,
|
LOG_LEVEL_INFO,
|
||||||
LOG_LEVEL_NOTICE,
|
LOG_LEVEL_NOTICE,
|
||||||
@@ -22,14 +22,14 @@ import {
|
|||||||
type FilePathWithPrefix,
|
type FilePathWithPrefix,
|
||||||
type UXFileInfo,
|
type UXFileInfo,
|
||||||
type UXFileInfoStub,
|
type UXFileInfoStub,
|
||||||
} from "../lib/src/common/types.ts";
|
} from "@lib/common/types.ts";
|
||||||
export { ICHeader, ICXHeader } from "./types.ts";
|
export { ICHeader, ICXHeader } from "./types.ts";
|
||||||
import { writeString } from "../lib/src/string_and_binary/convert.ts";
|
import { writeString } from "@lib/string_and_binary/convert.ts";
|
||||||
import { sameChangePairs } from "./stores.ts";
|
import { sameChangePairs } from "./stores.ts";
|
||||||
|
|
||||||
import { scheduleTask } from "octagonal-wheels/concurrency/task";
|
import { scheduleTask } from "octagonal-wheels/concurrency/task";
|
||||||
import { AuthorizationHeaderGenerator } from "../lib/src/replication/httplib.ts";
|
import { AuthorizationHeaderGenerator } from "@lib/replication/httplib.ts";
|
||||||
import type { KeyValueDatabase } from "../lib/src/interfaces/KeyValueDatabase.ts";
|
import type { KeyValueDatabase } from "@lib/interfaces/KeyValueDatabase.ts";
|
||||||
|
|
||||||
export { scheduleTask, cancelTask, cancelAllTasks } from "octagonal-wheels/concurrency/task";
|
export { scheduleTask, cancelTask, cancelAllTasks } from "octagonal-wheels/concurrency/task";
|
||||||
|
|
||||||
@@ -214,7 +214,7 @@ import { BASE_IS_NEW, EVEN, TARGET_IS_NEW } from "@lib/common/models/shared.cons
|
|||||||
export { BASE_IS_NEW, EVEN, TARGET_IS_NEW };
|
export { BASE_IS_NEW, EVEN, TARGET_IS_NEW };
|
||||||
// Why 2000? : ZIP FILE Does not have enough resolution.
|
// Why 2000? : ZIP FILE Does not have enough resolution.
|
||||||
import { compareMTime } from "@lib/common/utils.ts";
|
import { compareMTime } from "@lib/common/utils.ts";
|
||||||
import { _fetch } from "@/lib/src/common/coreEnvFunctions.ts";
|
import { _fetch } from "@lib/common/coreEnvFunctions.ts";
|
||||||
export { compareMTime };
|
export { compareMTime };
|
||||||
function getKey(file: AnyEntry | string | UXFileInfoStub) {
|
function getKey(file: AnyEntry | string | UXFileInfoStub) {
|
||||||
const key = typeof file == "string" ? file : stripAllPrefixes(file.path);
|
const key = typeof file == "string" ? file : stripAllPrefixes(file.path);
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import {
|
|||||||
diff_match_patch,
|
diff_match_patch,
|
||||||
Platform,
|
Platform,
|
||||||
addIcon,
|
addIcon,
|
||||||
} from "../../deps.ts";
|
} from "@/deps.ts";
|
||||||
|
|
||||||
import type {
|
import type {
|
||||||
EntryDoc,
|
EntryDoc,
|
||||||
@@ -19,7 +19,7 @@ import type {
|
|||||||
AnyEntry,
|
AnyEntry,
|
||||||
SavingEntry,
|
SavingEntry,
|
||||||
diff_result,
|
diff_result,
|
||||||
} from "../../lib/src/common/types.ts";
|
} from "@lib/common/types.ts";
|
||||||
import {
|
import {
|
||||||
CANCELLED,
|
CANCELLED,
|
||||||
LEAVE_TO_SUBSEQUENT,
|
LEAVE_TO_SUBSEQUENT,
|
||||||
@@ -29,8 +29,8 @@ import {
|
|||||||
LOG_LEVEL_VERBOSE,
|
LOG_LEVEL_VERBOSE,
|
||||||
MODE_SELECTIVE,
|
MODE_SELECTIVE,
|
||||||
MODE_SHINY,
|
MODE_SHINY,
|
||||||
} from "../../lib/src/common/types.ts";
|
} from "@lib/common/types.ts";
|
||||||
import { ICXHeader, PERIODIC_PLUGIN_SWEEP } from "../../common/types.ts";
|
import { ICXHeader, PERIODIC_PLUGIN_SWEEP } from "@/common/types.ts";
|
||||||
import {
|
import {
|
||||||
createBlob,
|
createBlob,
|
||||||
createSavingEntryFromLoadedEntry,
|
createSavingEntryFromLoadedEntry,
|
||||||
@@ -42,12 +42,12 @@ import {
|
|||||||
isDocContentSame,
|
isDocContentSame,
|
||||||
isLoadedEntry,
|
isLoadedEntry,
|
||||||
isObjectDifferent,
|
isObjectDifferent,
|
||||||
} from "../../lib/src/common/utils.ts";
|
} from "@lib/common/utils.ts";
|
||||||
import { digestHash } from "../../lib/src/string_and_binary/hash.ts";
|
import { digestHash } from "@lib/string_and_binary/hash.ts";
|
||||||
import { arrayBufferToBase64, decodeBinary, readString } from "../../lib/src/string_and_binary/convert.ts";
|
import { arrayBufferToBase64, decodeBinary, readString } from "@lib/string_and_binary/convert.ts";
|
||||||
import { serialized, shareRunningResult } from "octagonal-wheels/concurrency/lock";
|
import { serialized, shareRunningResult } from "octagonal-wheels/concurrency/lock";
|
||||||
import { LiveSyncCommands } from "../LiveSyncCommands.ts";
|
import { LiveSyncCommands } from "@/features/LiveSyncCommands.ts";
|
||||||
import { stripAllPrefixes } from "../../lib/src/string_and_binary/path.ts";
|
import { stripAllPrefixes } from "@lib/string_and_binary/path.ts";
|
||||||
import {
|
import {
|
||||||
EVEN,
|
EVEN,
|
||||||
disposeMemoObject,
|
disposeMemoObject,
|
||||||
@@ -57,20 +57,20 @@ import {
|
|||||||
memoObject,
|
memoObject,
|
||||||
retrieveMemoObject,
|
retrieveMemoObject,
|
||||||
scheduleTask,
|
scheduleTask,
|
||||||
} from "../../common/utils.ts";
|
} from "@/common/utils.ts";
|
||||||
import { PeriodicProcessor } from "@/common/PeriodicProcessor.ts";
|
import { PeriodicProcessor } from "@/common/PeriodicProcessor.ts";
|
||||||
import { JsonResolveModal } from "../HiddenFileCommon/JsonResolveModal.ts";
|
import { JsonResolveModal } from "@/features/HiddenFileCommon/JsonResolveModal.ts";
|
||||||
import { QueueProcessor } from "octagonal-wheels/concurrency/processor";
|
import { QueueProcessor } from "octagonal-wheels/concurrency/processor";
|
||||||
import { pluginScanningCount } from "../../lib/src/mock_and_interop/stores.ts";
|
import { pluginScanningCount } from "@lib/mock_and_interop/stores.ts";
|
||||||
import type ObsidianLiveSyncPlugin from "../../main.ts";
|
import type ObsidianLiveSyncPlugin from "@/main.ts";
|
||||||
import { base64ToArrayBuffer, base64ToString } from "octagonal-wheels/binary/base64";
|
import { base64ToArrayBuffer, base64ToString } from "octagonal-wheels/binary/base64";
|
||||||
import { ConflictResolveModal } from "../../modules/features/InteractiveConflictResolving/ConflictResolveModal.ts";
|
import { ConflictResolveModal } from "@/modules/features/InteractiveConflictResolving/ConflictResolveModal.ts";
|
||||||
import { Semaphore } from "octagonal-wheels/concurrency/semaphore";
|
import { Semaphore } from "octagonal-wheels/concurrency/semaphore";
|
||||||
import { EVENT_REQUEST_OPEN_PLUGIN_SYNC_DIALOG, eventHub } from "../../common/events.ts";
|
import { EVENT_REQUEST_OPEN_PLUGIN_SYNC_DIALOG, eventHub } from "@/common/events.ts";
|
||||||
import { PluginDialogModal } from "./PluginDialogModal.ts";
|
import { PluginDialogModal } from "./PluginDialogModal.ts";
|
||||||
import { $msg } from "@/lib/src/common/i18n.ts";
|
import { $msg } from "@lib/common/i18n.ts";
|
||||||
import type { InjectableServiceHub } from "../../lib/src/services/InjectableServices.ts";
|
import type { InjectableServiceHub } from "@lib/services/InjectableServices.ts";
|
||||||
import type { LiveSyncCore } from "../../main.ts";
|
import type { LiveSyncCore } from "@/main.ts";
|
||||||
import { LiveSyncError } from "@lib/common/LSError.ts";
|
import { LiveSyncError } from "@lib/common/LSError.ts";
|
||||||
|
|
||||||
const d = "\u200b";
|
const d = "\u200b";
|
||||||
|
|||||||
@@ -5,10 +5,10 @@
|
|||||||
type IPluginDataExDisplay,
|
type IPluginDataExDisplay,
|
||||||
type PluginDataExFile,
|
type PluginDataExFile,
|
||||||
} from "./CmdConfigSync.ts";
|
} from "./CmdConfigSync.ts";
|
||||||
import { Logger } from "../../lib/src/common/logger";
|
import { Logger } from "@lib/common/logger";
|
||||||
import { type FilePath, LOG_LEVEL_INFO, LOG_LEVEL_NOTICE, LOG_LEVEL_VERBOSE } from "../../lib/src/common/types";
|
import { type FilePath, LOG_LEVEL_INFO, LOG_LEVEL_NOTICE, LOG_LEVEL_VERBOSE } from "@lib/common/types";
|
||||||
import { getDocData, timeDeltaToHumanReadable, unique } from "../../lib/src/common/utils";
|
import { getDocData, timeDeltaToHumanReadable, unique } from "@lib/common/utils";
|
||||||
import type ObsidianLiveSyncPlugin from "../../main";
|
import type ObsidianLiveSyncPlugin from "@/main";
|
||||||
// import { askString } from "../../common/utils";
|
// import { askString } from "../../common/utils";
|
||||||
import { Menu } from "@/deps.ts";
|
import { Menu } from "@/deps.ts";
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { mount, unmount } from "svelte";
|
import { mount, unmount } from "svelte";
|
||||||
import { App, Modal } from "../../deps.ts";
|
import { App, Modal } from "@/deps.ts";
|
||||||
import ObsidianLiveSyncPlugin from "../../main.ts";
|
import ObsidianLiveSyncPlugin from "@/main.ts";
|
||||||
import PluginPane from "./PluginPane.svelte";
|
import PluginPane from "./PluginPane.svelte";
|
||||||
export class PluginDialogModal extends Modal {
|
export class PluginDialogModal extends Modal {
|
||||||
plugin: ObsidianLiveSyncPlugin;
|
plugin: ObsidianLiveSyncPlugin;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { onMount } from "svelte";
|
import { onMount } from "svelte";
|
||||||
import ObsidianLiveSyncPlugin from "../../main";
|
import ObsidianLiveSyncPlugin from "@/main";
|
||||||
import {
|
import {
|
||||||
ConfigSync,
|
ConfigSync,
|
||||||
type IPluginDataExDisplay,
|
type IPluginDataExDisplay,
|
||||||
@@ -11,16 +11,16 @@
|
|||||||
} from "./CmdConfigSync.ts";
|
} from "./CmdConfigSync.ts";
|
||||||
import PluginCombo from "./PluginCombo.svelte";
|
import PluginCombo from "./PluginCombo.svelte";
|
||||||
import { Menu, type PluginManifest } from "@/deps.ts";
|
import { Menu, type PluginManifest } from "@/deps.ts";
|
||||||
import { unique } from "../../lib/src/common/utils";
|
import { unique } from "@lib/common/utils";
|
||||||
import {
|
import {
|
||||||
MODE_SELECTIVE,
|
MODE_SELECTIVE,
|
||||||
MODE_AUTOMATIC,
|
MODE_AUTOMATIC,
|
||||||
MODE_PAUSED,
|
MODE_PAUSED,
|
||||||
type SYNC_MODE,
|
type SYNC_MODE,
|
||||||
MODE_SHINY,
|
MODE_SHINY,
|
||||||
} from "../../lib/src/common/types";
|
} from "@lib/common/types";
|
||||||
import { normalizePath } from "../../deps";
|
import { normalizePath } from "@/deps";
|
||||||
import { HiddenFileSync } from "../HiddenFileSync/CmdHiddenFileSync.ts";
|
import { HiddenFileSync } from "@/features/HiddenFileSync/CmdHiddenFileSync.ts";
|
||||||
import { LOG_LEVEL_NOTICE, Logger } from "octagonal-wheels/common/logger";
|
import { LOG_LEVEL_NOTICE, Logger } from "octagonal-wheels/common/logger";
|
||||||
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore.ts";
|
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore.ts";
|
||||||
export let plugin: ObsidianLiveSyncPlugin;
|
export let plugin: ObsidianLiveSyncPlugin;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { App, Modal } from "../../deps.ts";
|
import { App, Modal } from "@/deps.ts";
|
||||||
import { type FilePath, type LoadedEntry } from "../../lib/src/common/types.ts";
|
import { type FilePath, type LoadedEntry } from "@lib/common/types.ts";
|
||||||
import JsonResolvePane from "./JsonResolvePane.svelte";
|
import JsonResolvePane from "./JsonResolvePane.svelte";
|
||||||
import { waitForSignal } from "../../lib/src/common/utils.ts";
|
import { waitForSignal } from "@lib/common/utils.ts";
|
||||||
import { mount, unmount } from "svelte";
|
import { mount, unmount } from "svelte";
|
||||||
|
|
||||||
export class JsonResolveModal extends Modal {
|
export class JsonResolveModal extends Modal {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { type Diff, DIFF_DELETE, DIFF_INSERT, diff_match_patch } from "../../deps.ts";
|
import { type Diff, DIFF_DELETE, DIFF_INSERT, diff_match_patch } from "@/deps.ts";
|
||||||
import type { FilePath, LoadedEntry } from "../../lib/src/common/types.ts";
|
import type { FilePath, LoadedEntry } from "@lib/common/types.ts";
|
||||||
import { decodeBinary, readString } from "../../lib/src/string_and_binary/convert.ts";
|
import { decodeBinary, readString } from "@lib/string_and_binary/convert.ts";
|
||||||
import { getDocData, isObjectDifferent, mergeObject } from "../../lib/src/common/utils.ts";
|
import { getDocData, isObjectDifferent, mergeObject } from "@lib/common/utils.ts";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
docs?: LoadedEntry[];
|
docs?: LoadedEntry[];
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { type PluginManifest, type ListedFiles } from "../../deps.ts";
|
import { type PluginManifest, type ListedFiles } from "@/deps.ts";
|
||||||
import {
|
import {
|
||||||
type LoadedEntry,
|
type LoadedEntry,
|
||||||
type FilePathWithPrefix,
|
type FilePathWithPrefix,
|
||||||
@@ -15,8 +15,8 @@ import {
|
|||||||
LOG_LEVEL_DEBUG,
|
LOG_LEVEL_DEBUG,
|
||||||
type MetaEntry,
|
type MetaEntry,
|
||||||
type UXDataWriteOptions,
|
type UXDataWriteOptions,
|
||||||
} from "../../lib/src/common/types.ts";
|
} from "@lib/common/types.ts";
|
||||||
import { type InternalFileInfo, ICHeader, ICHeaderEnd } from "../../common/types.ts";
|
import { type InternalFileInfo, ICHeader, ICHeaderEnd } from "@/common/types.ts";
|
||||||
import {
|
import {
|
||||||
readAsBlob,
|
readAsBlob,
|
||||||
isDocContentSame,
|
isDocContentSame,
|
||||||
@@ -26,7 +26,7 @@ import {
|
|||||||
fireAndForget,
|
fireAndForget,
|
||||||
type CustomRegExp,
|
type CustomRegExp,
|
||||||
getFileRegExp,
|
getFileRegExp,
|
||||||
} from "../../lib/src/common/utils.ts";
|
} from "@lib/common/utils.ts";
|
||||||
import {
|
import {
|
||||||
compareMTime,
|
compareMTime,
|
||||||
isInternalMetadata,
|
isInternalMetadata,
|
||||||
@@ -39,17 +39,17 @@ import {
|
|||||||
BASE_IS_NEW,
|
BASE_IS_NEW,
|
||||||
EVEN,
|
EVEN,
|
||||||
displayRev,
|
displayRev,
|
||||||
} from "../../common/utils.ts";
|
} from "@/common/utils.ts";
|
||||||
import { PeriodicProcessor } from "@/common/PeriodicProcessor.ts";
|
import { PeriodicProcessor } from "@/common/PeriodicProcessor.ts";
|
||||||
import { serialized, skipIfDuplicated } from "octagonal-wheels/concurrency/lock";
|
import { serialized, skipIfDuplicated } from "octagonal-wheels/concurrency/lock";
|
||||||
import { JsonResolveModal } from "../HiddenFileCommon/JsonResolveModal.ts";
|
import { JsonResolveModal } from "@/features/HiddenFileCommon/JsonResolveModal.ts";
|
||||||
import { LiveSyncCommands } from "../LiveSyncCommands.ts";
|
import { LiveSyncCommands } from "@/features/LiveSyncCommands.ts";
|
||||||
import { addPrefix, stripAllPrefixes } from "../../lib/src/string_and_binary/path.ts";
|
import { addPrefix, stripAllPrefixes } from "@lib/string_and_binary/path.ts";
|
||||||
import { QueueProcessor } from "octagonal-wheels/concurrency/processor";
|
import { QueueProcessor } from "octagonal-wheels/concurrency/processor";
|
||||||
import { hiddenFilesEventCount, hiddenFilesProcessingCount } from "../../lib/src/mock_and_interop/stores.ts";
|
import { hiddenFilesEventCount, hiddenFilesProcessingCount } from "@lib/mock_and_interop/stores.ts";
|
||||||
import { EVENT_SETTING_SAVED, eventHub } from "../../common/events.ts";
|
import { EVENT_SETTING_SAVED, eventHub } from "@/common/events.ts";
|
||||||
import { Semaphore } from "octagonal-wheels/concurrency/semaphore";
|
import { Semaphore } from "octagonal-wheels/concurrency/semaphore";
|
||||||
import type { LiveSyncCore } from "../../main.ts";
|
import type { LiveSyncCore } from "@/main.ts";
|
||||||
import { tryGetFilePath } from "@lib/common/utils.doc.ts";
|
import { tryGetFilePath } from "@lib/common/utils.doc.ts";
|
||||||
type SyncDirection = "push" | "pull" | "safe" | "pullForce" | "pushForce";
|
type SyncDirection = "push" | "pull" | "safe" | "pullForce" | "pushForce";
|
||||||
|
|
||||||
|
|||||||
@@ -7,12 +7,12 @@ import {
|
|||||||
type FilePath,
|
type FilePath,
|
||||||
type FilePathWithPrefix,
|
type FilePathWithPrefix,
|
||||||
type LOG_LEVEL,
|
type LOG_LEVEL,
|
||||||
} from "../lib/src/common/types.ts";
|
} from "@lib/common/types.ts";
|
||||||
import type ObsidianLiveSyncPlugin from "../main.ts";
|
import type ObsidianLiveSyncPlugin from "@/main.ts";
|
||||||
import { MARK_DONE } from "../modules/features/ModuleLog.ts";
|
import { MARK_DONE } from "@/modules/features/ModuleLog.ts";
|
||||||
import type { LiveSyncCore } from "../main.ts";
|
import type { LiveSyncCore } from "@/main.ts";
|
||||||
import { __$checkInstanceBinding } from "../lib/src/dev/checks.ts";
|
import { __$checkInstanceBinding } from "@lib/dev/checks.ts";
|
||||||
import { createInstanceLogFunction } from "@/lib/src/services/lib/logUtils.ts";
|
import { createInstanceLogFunction } from "@lib/services/lib/logUtils.ts";
|
||||||
|
|
||||||
let noticeIndex = 0;
|
let noticeIndex = 0;
|
||||||
export abstract class LiveSyncCommands {
|
export abstract class LiveSyncCommands {
|
||||||
|
|||||||
@@ -9,14 +9,14 @@ import {
|
|||||||
type EntryLeaf,
|
type EntryLeaf,
|
||||||
type FilePathWithPrefix,
|
type FilePathWithPrefix,
|
||||||
type MetaEntry,
|
type MetaEntry,
|
||||||
} from "../../lib/src/common/types";
|
} from "@lib/common/types";
|
||||||
import { getNoFromRev } from "../../lib/src/pouchdb/LiveSyncLocalDB";
|
import { getNoFromRev } from "@lib/pouchdb/LiveSyncLocalDB";
|
||||||
import { LiveSyncCommands } from "../LiveSyncCommands";
|
import { LiveSyncCommands } from "@/features/LiveSyncCommands";
|
||||||
import { serialized } from "octagonal-wheels/concurrency/lock_v2";
|
import { serialized } from "octagonal-wheels/concurrency/lock_v2";
|
||||||
import { arrayToChunkedArray } from "octagonal-wheels/collection";
|
import { arrayToChunkedArray } from "octagonal-wheels/collection";
|
||||||
import { EVENT_ANALYSE_DB_USAGE, EVENT_REQUEST_PERFORM_GC_V3, eventHub } from "@/common/events";
|
import { EVENT_ANALYSE_DB_USAGE, EVENT_REQUEST_PERFORM_GC_V3, eventHub } from "@/common/events";
|
||||||
import type { LiveSyncCouchDBReplicator } from "@/lib/src/replication/couchdb/LiveSyncReplicator";
|
import type { LiveSyncCouchDBReplicator } from "@lib/replication/couchdb/LiveSyncReplicator";
|
||||||
import { delay } from "@/lib/src/common/utils";
|
import { delay } from "@lib/common/utils";
|
||||||
// import { _requestToCouchDB } from "@/common/utils";
|
// import { _requestToCouchDB } from "@/common/utils";
|
||||||
const DB_KEY_SEQ = "gc-seq";
|
const DB_KEY_SEQ = "gc-seq";
|
||||||
const DB_KEY_CHUNK_SET = "chunk-set";
|
const DB_KEY_CHUNK_SET = "chunk-set";
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { App, Modal } from "@/deps.ts";
|
import { App, Modal } from "@/deps.ts";
|
||||||
import P2POpenReplicationPane from "./P2POpenReplicationPane.svelte";
|
import P2POpenReplicationPane from "./P2POpenReplicationPane.svelte";
|
||||||
import { mount, unmount } from "svelte";
|
import { mount, unmount } from "svelte";
|
||||||
import type { LiveSyncTrysteroReplicator } from "@/lib/src/replication/trystero/LiveSyncTrysteroReplicator";
|
import type { LiveSyncTrysteroReplicator } from "@lib/replication/trystero/LiveSyncTrysteroReplicator";
|
||||||
|
|
||||||
export type P2POpenReplicationModalCallback = {
|
export type P2POpenReplicationModalCallback = {
|
||||||
onSync: (peerId: string) => Promise<void>;
|
onSync: (peerId: string) => Promise<void>;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
// import type { TrysteroReplicator } from "@lib/replication/trystero/TrysteroReplicator";
|
// import type { TrysteroReplicator } from "@lib/replication/trystero/TrysteroReplicator";
|
||||||
import { LOG_LEVEL_NOTICE, LOG_LEVEL_INFO } from "@lib/common/types";
|
import { LOG_LEVEL_NOTICE, LOG_LEVEL_INFO } from "@lib/common/types";
|
||||||
import { Logger } from "@lib/common/logger";
|
import { Logger } from "@lib/common/logger";
|
||||||
import type { LiveSyncTrysteroReplicator } from "@/lib/src/replication/trystero/LiveSyncTrysteroReplicator";
|
import type { LiveSyncTrysteroReplicator } from "@lib/replication/trystero/LiveSyncTrysteroReplicator";
|
||||||
import { delay, fireAndForget } from "octagonal-wheels/promises";
|
import { delay, fireAndForget } from "octagonal-wheels/promises";
|
||||||
import P2PServerStatusCard from "./P2PServerStatusCard.svelte";
|
import P2PServerStatusCard from "./P2PServerStatusCard.svelte";
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { onMount, setContext } from "svelte";
|
import { onMount, setContext } from "svelte";
|
||||||
import { AutoAccepting, DEFAULT_SETTINGS, type P2PSyncSetting } from "../../../lib/src/common/types";
|
import { AutoAccepting, DEFAULT_SETTINGS, type P2PSyncSetting } from "@lib/common/types";
|
||||||
import {
|
import {
|
||||||
AcceptedStatus,
|
AcceptedStatus,
|
||||||
ConnectionStatus,
|
ConnectionStatus,
|
||||||
type PeerStatus,
|
type PeerStatus,
|
||||||
} from "@lib/replication/trystero/P2PReplicatorPaneCommon";
|
} from "@lib/replication/trystero/P2PReplicatorPaneCommon";
|
||||||
import type { LiveSyncTrysteroReplicator } from "@lib/replication/trystero/LiveSyncTrysteroReplicator";
|
import type { LiveSyncTrysteroReplicator } from "@lib/replication/trystero/LiveSyncTrysteroReplicator";
|
||||||
import PeerStatusRow from "../P2PReplicator/PeerStatusRow.svelte";
|
import PeerStatusRow from "@/features/P2PSync/P2PReplicator/PeerStatusRow.svelte";
|
||||||
import { EVENT_LAYOUT_READY, eventHub } from "@/common/events";
|
import { EVENT_LAYOUT_READY, eventHub } from "@/common/events";
|
||||||
import {
|
import {
|
||||||
type PeerInfo,
|
type PeerInfo,
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import { LOG_LEVEL_NOTICE, REMOTE_P2P } from "@lib/common/types.ts";
|
|||||||
import { Logger } from "@lib/common/logger.ts";
|
import { Logger } from "@lib/common/logger.ts";
|
||||||
import { EVENT_P2P_PEER_SHOW_EXTRA_MENU, type PeerStatus } from "@lib/replication/trystero/P2PReplicatorPaneCommon.ts";
|
import { EVENT_P2P_PEER_SHOW_EXTRA_MENU, type PeerStatus } from "@lib/replication/trystero/P2PReplicatorPaneCommon.ts";
|
||||||
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore.ts";
|
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore.ts";
|
||||||
import type { P2PPaneParams } from "@/lib/src/replication/trystero/UseP2PReplicatorResult";
|
import type { P2PPaneParams } from "@lib/replication/trystero/UseP2PReplicatorResult";
|
||||||
export const VIEW_TYPE_P2P = "p2p-replicator";
|
export const VIEW_TYPE_P2P = "p2p-replicator";
|
||||||
|
|
||||||
function addToList(item: string, list: string) {
|
function addToList(item: string, list: string) {
|
||||||
|
|||||||
@@ -9,9 +9,9 @@
|
|||||||
EVENT_P2P_REPLICATOR_STATUS,
|
EVENT_P2P_REPLICATOR_STATUS,
|
||||||
} from "@lib/replication/trystero/TrysteroReplicatorP2PServer";
|
} from "@lib/replication/trystero/TrysteroReplicatorP2PServer";
|
||||||
import { EVENT_SETTING_SAVED } from "@lib/events/coreEvents";
|
import { EVENT_SETTING_SAVED } from "@lib/events/coreEvents";
|
||||||
import type { LiveSyncTrysteroReplicator } from "@/lib/src/replication/trystero/LiveSyncTrysteroReplicator";
|
import type { LiveSyncTrysteroReplicator } from "@lib/replication/trystero/LiveSyncTrysteroReplicator";
|
||||||
import type { P2PReplicatorStatus } from "@/lib/src/replication/trystero/TrysteroReplicator";
|
import type { P2PReplicatorStatus } from "@lib/replication/trystero/TrysteroReplicator";
|
||||||
import { extractP2PRoomSuffix } from "@/lib/src/common/utils";
|
import { extractP2PRoomSuffix } from "@lib/common/utils";
|
||||||
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore";
|
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { WorkspaceLeaf } from "@/deps.ts";
|
|||||||
import { mount } from "svelte";
|
import { mount } from "svelte";
|
||||||
import { SvelteItemView } from "@/common/SvelteItemView.ts";
|
import { SvelteItemView } from "@/common/SvelteItemView.ts";
|
||||||
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore.ts";
|
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore.ts";
|
||||||
import type { P2PPaneParams } from "@/lib/src/replication/trystero/UseP2PReplicatorResult";
|
import type { P2PPaneParams } from "@lib/replication/trystero/UseP2PReplicatorResult";
|
||||||
import P2PServerStatusPane from "./P2PServerStatusPane.svelte";
|
import P2PServerStatusPane from "./P2PServerStatusPane.svelte";
|
||||||
|
|
||||||
export const VIEW_TYPE_P2P_SERVER_STATUS = "p2p-server-status";
|
export const VIEW_TYPE_P2P_SERVER_STATUS = "p2p-server-status";
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { getContext } from "svelte";
|
import { getContext } from "svelte";
|
||||||
import { AcceptedStatus, type PeerStatus } from "../../../lib/src/replication/trystero/P2PReplicatorPaneCommon";
|
import { AcceptedStatus, type PeerStatus } from "@lib/replication/trystero/P2PReplicatorPaneCommon";
|
||||||
import type { LiveSyncTrysteroReplicator } from "../../../lib/src/replication/trystero/LiveSyncTrysteroReplicator";
|
import type { LiveSyncTrysteroReplicator } from "@lib/replication/trystero/LiveSyncTrysteroReplicator";
|
||||||
import { eventHub } from "../../../common/events";
|
import { eventHub } from "@/common/events";
|
||||||
import { EVENT_P2P_PEER_SHOW_EXTRA_MENU } from "../../../lib/src/replication/trystero/P2PReplicatorPaneCommon";
|
import { EVENT_P2P_PEER_SHOW_EXTRA_MENU } from "@lib/replication/trystero/P2PReplicatorPaneCommon";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
peerStatus: PeerStatus;
|
peerStatus: PeerStatus;
|
||||||
|
|||||||
+1
-1
Submodule src/lib updated: 25d23bf738...2accfbce49
@@ -3,7 +3,7 @@ import type { AnyEntry, FilePathWithPrefix } from "@lib/common/types";
|
|||||||
import type { IMinimumLiveSyncCommands, LiveSyncBaseCore } from "@/LiveSyncBaseCore";
|
import type { IMinimumLiveSyncCommands, LiveSyncBaseCore } from "@/LiveSyncBaseCore";
|
||||||
import { stripAllPrefixes } from "@lib/string_and_binary/path";
|
import { stripAllPrefixes } from "@lib/string_and_binary/path";
|
||||||
import { createInstanceLogFunction } from "@lib/services/lib/logUtils";
|
import { createInstanceLogFunction } from "@lib/services/lib/logUtils";
|
||||||
import type { ServiceContext } from "@/lib/src/services/base/ServiceBase";
|
import type { ServiceContext } from "@lib/services/base/ServiceBase";
|
||||||
|
|
||||||
export abstract class AbstractModule<
|
export abstract class AbstractModule<
|
||||||
T extends LiveSyncBaseCore<ServiceContext, IMinimumLiveSyncCommands> = LiveSyncBaseCore<
|
T extends LiveSyncBaseCore<ServiceContext, IMinimumLiveSyncCommands> = LiveSyncBaseCore<
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { type Prettify } from "../lib/src/common/types";
|
import { type Prettify } from "@lib/common/types";
|
||||||
import type { LiveSyncCore } from "../main";
|
import type { LiveSyncCore } from "@/main";
|
||||||
import type ObsidianLiveSyncPlugin from "../main";
|
import type ObsidianLiveSyncPlugin from "@/main";
|
||||||
import { AbstractModule } from "./AbstractModule.ts";
|
import { AbstractModule } from "./AbstractModule.ts";
|
||||||
import type { ChainableExecuteFunction, OverridableFunctionsKeys } from "./ModuleTypes";
|
import type { ChainableExecuteFunction, OverridableFunctionsKeys } from "./ModuleTypes";
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { Prettify } from "../lib/src/common/types";
|
import type { Prettify } from "@lib/common/types";
|
||||||
import type { LiveSyncCore } from "../main";
|
import type { LiveSyncCore } from "@/main";
|
||||||
|
|
||||||
export type OverridableFunctionsKeys<T> = {
|
export type OverridableFunctionsKeys<T> = {
|
||||||
[K in keyof T as K extends `$${string}` ? K : never]: T[K];
|
[K in keyof T as K extends `$${string}` ? K : never]: T[K];
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { PeriodicProcessor } from "@/common/PeriodicProcessor";
|
import { PeriodicProcessor } from "@/common/PeriodicProcessor";
|
||||||
import type { LiveSyncCore } from "../../main";
|
import type { LiveSyncCore } from "@/main";
|
||||||
import { AbstractModule } from "../AbstractModule";
|
import { AbstractModule } from "@/modules/AbstractModule";
|
||||||
|
|
||||||
export class ModulePeriodicProcess extends AbstractModule {
|
export class ModulePeriodicProcess extends AbstractModule {
|
||||||
periodicSyncProcessor = new PeriodicProcessor(this.core, async () => await this.services.replication.replicate());
|
periodicSyncProcessor = new PeriodicProcessor(this.core, async () => await this.services.replication.replicate());
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
import type PouchDB from "pouchdb-core";
|
import type PouchDB from "pouchdb-core";
|
||||||
import { fireAndForget } from "octagonal-wheels/promises";
|
import { fireAndForget } from "octagonal-wheels/promises";
|
||||||
import { AbstractModule } from "../AbstractModule";
|
import { AbstractModule } from "@/modules/AbstractModule";
|
||||||
import { Logger, LOG_LEVEL_NOTICE, LOG_LEVEL_INFO } from "octagonal-wheels/common/logger";
|
import { Logger, LOG_LEVEL_NOTICE, LOG_LEVEL_INFO } from "octagonal-wheels/common/logger";
|
||||||
import { skipIfDuplicated } from "octagonal-wheels/concurrency/lock";
|
import { skipIfDuplicated } from "octagonal-wheels/concurrency/lock";
|
||||||
import { balanceChunkPurgedDBs } from "@lib/pouchdb/chunks";
|
import { balanceChunkPurgedDBs } from "@lib/pouchdb/chunks";
|
||||||
import { purgeUnreferencedChunks } from "@lib/pouchdb/chunks";
|
import { purgeUnreferencedChunks } from "@lib/pouchdb/chunks";
|
||||||
import { LiveSyncCouchDBReplicator } from "../../lib/src/replication/couchdb/LiveSyncReplicator";
|
import { LiveSyncCouchDBReplicator } from "@lib/replication/couchdb/LiveSyncReplicator";
|
||||||
import { type EntryDoc, type RemoteType } from "../../lib/src/common/types";
|
import { type EntryDoc, type RemoteType } from "@lib/common/types";
|
||||||
|
|
||||||
import { scheduleTask } from "octagonal-wheels/concurrency/task";
|
import { scheduleTask } from "octagonal-wheels/concurrency/task";
|
||||||
import { EVENT_FILE_SAVED, EVENT_SETTING_SAVED, eventHub } from "../../common/events";
|
import { EVENT_FILE_SAVED, EVENT_SETTING_SAVED, eventHub } from "@/common/events";
|
||||||
|
|
||||||
import { $msg } from "../../lib/src/common/i18n";
|
import { $msg } from "@lib/common/i18n";
|
||||||
import type { LiveSyncCore } from "../../main";
|
import type { LiveSyncCore } from "@/main";
|
||||||
import { ReplicateResultProcessor } from "./ReplicateResultProcessor";
|
import { ReplicateResultProcessor } from "./ReplicateResultProcessor";
|
||||||
import { UnresolvedErrorManager } from "@lib/services/base/UnresolvedErrorManager";
|
import { UnresolvedErrorManager } from "@lib/services/base/UnresolvedErrorManager";
|
||||||
import { clearHandlers } from "@lib/replication/SyncParamsHandler";
|
import { clearHandlers } from "@lib/replication/SyncParamsHandler";
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { fireAndForget } from "octagonal-wheels/promises";
|
import { fireAndForget } from "octagonal-wheels/promises";
|
||||||
import { REMOTE_MINIO, REMOTE_P2P, type RemoteDBSettings } from "../../lib/src/common/types";
|
import { REMOTE_MINIO, REMOTE_P2P, type RemoteDBSettings } from "@lib/common/types";
|
||||||
import { LiveSyncCouchDBReplicator } from "../../lib/src/replication/couchdb/LiveSyncReplicator";
|
import { LiveSyncCouchDBReplicator } from "@lib/replication/couchdb/LiveSyncReplicator";
|
||||||
import type { LiveSyncAbstractReplicator } from "../../lib/src/replication/LiveSyncAbstractReplicator";
|
import type { LiveSyncAbstractReplicator } from "@lib/replication/LiveSyncAbstractReplicator";
|
||||||
import { AbstractModule } from "../AbstractModule";
|
import { AbstractModule } from "@/modules/AbstractModule";
|
||||||
import type { LiveSyncCore } from "../../main";
|
import type { LiveSyncCore } from "@/main";
|
||||||
|
|
||||||
export class ModuleReplicatorCouchDB extends AbstractModule {
|
export class ModuleReplicatorCouchDB extends AbstractModule {
|
||||||
_anyNewReplicator(settingOverride: Partial<RemoteDBSettings> = {}): Promise<LiveSyncAbstractReplicator | false> {
|
_anyNewReplicator(settingOverride: Partial<RemoteDBSettings> = {}): Promise<LiveSyncAbstractReplicator | false> {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { REMOTE_MINIO, type RemoteDBSettings } from "../../lib/src/common/types";
|
import { REMOTE_MINIO, type RemoteDBSettings } from "@lib/common/types";
|
||||||
import { LiveSyncJournalReplicator } from "../../lib/src/replication/journal/LiveSyncJournalReplicator";
|
import { LiveSyncJournalReplicator } from "@lib/replication/journal/LiveSyncJournalReplicator";
|
||||||
import type { LiveSyncAbstractReplicator } from "../../lib/src/replication/LiveSyncAbstractReplicator";
|
import type { LiveSyncAbstractReplicator } from "@lib/replication/LiveSyncAbstractReplicator";
|
||||||
import type { LiveSyncCore } from "../../main";
|
import type { LiveSyncCore } from "@/main";
|
||||||
import { AbstractModule } from "../AbstractModule";
|
import { AbstractModule } from "@/modules/AbstractModule";
|
||||||
|
|
||||||
export class ModuleReplicatorMinIO extends AbstractModule {
|
export class ModuleReplicatorMinIO extends AbstractModule {
|
||||||
_anyNewReplicator(settingOverride: Partial<RemoteDBSettings> = {}): Promise<LiveSyncAbstractReplicator | false> {
|
_anyNewReplicator(settingOverride: Partial<RemoteDBSettings> = {}): Promise<LiveSyncAbstractReplicator | false> {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import {
|
|||||||
type MetaEntry,
|
type MetaEntry,
|
||||||
} from "@lib/common/types";
|
} from "@lib/common/types";
|
||||||
import type { ModuleReplicator } from "./ModuleReplicator";
|
import type { ModuleReplicator } from "./ModuleReplicator";
|
||||||
import { isChunk } from "@/lib/src/common/typeUtils";
|
import { isChunk } from "@lib/common/typeUtils";
|
||||||
import {
|
import {
|
||||||
LOG_LEVEL_DEBUG,
|
LOG_LEVEL_DEBUG,
|
||||||
LOG_LEVEL_INFO,
|
LOG_LEVEL_INFO,
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { AbstractModule } from "../AbstractModule.ts";
|
import { AbstractModule } from "@/modules/AbstractModule.ts";
|
||||||
import { LOG_LEVEL_NOTICE, type FilePathWithPrefix } from "../../lib/src/common/types";
|
import { LOG_LEVEL_NOTICE, type FilePathWithPrefix } from "@lib/common/types";
|
||||||
import { QueueProcessor } from "octagonal-wheels/concurrency/processor";
|
import { QueueProcessor } from "octagonal-wheels/concurrency/processor";
|
||||||
import { sendValue } from "octagonal-wheels/messagepassing/signal";
|
import { sendValue } from "octagonal-wheels/messagepassing/signal";
|
||||||
import type { InjectableServiceHub } from "../../lib/src/services/InjectableServices.ts";
|
import type { InjectableServiceHub } from "@lib/services/InjectableServices.ts";
|
||||||
import type { LiveSyncCore } from "../../main.ts";
|
import type { LiveSyncCore } from "@/main.ts";
|
||||||
|
|
||||||
export class ModuleConflictChecker extends AbstractModule {
|
export class ModuleConflictChecker extends AbstractModule {
|
||||||
async _queueConflictCheckIfOpen(file: FilePathWithPrefix): Promise<void> {
|
async _queueConflictCheckIfOpen(file: FilePathWithPrefix): Promise<void> {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { serialized } from "octagonal-wheels/concurrency/lock";
|
import { serialized } from "octagonal-wheels/concurrency/lock";
|
||||||
import { AbstractModule } from "../AbstractModule.ts";
|
import { AbstractModule } from "@/modules/AbstractModule.ts";
|
||||||
import {
|
import {
|
||||||
AUTO_MERGED,
|
AUTO_MERGED,
|
||||||
CANCELLED,
|
CANCELLED,
|
||||||
@@ -10,15 +10,15 @@ import {
|
|||||||
NOT_CONFLICTED,
|
NOT_CONFLICTED,
|
||||||
type diff_check_result,
|
type diff_check_result,
|
||||||
type FilePathWithPrefix,
|
type FilePathWithPrefix,
|
||||||
} from "../../lib/src/common/types";
|
} from "@lib/common/types";
|
||||||
import { isCustomisationSyncMetadata, isPluginMetadata } from "@lib/common/typeUtils.ts";
|
import { isCustomisationSyncMetadata, isPluginMetadata } from "@lib/common/typeUtils.ts";
|
||||||
import { TARGET_IS_NEW } from "@lib/common/models/shared.const.symbols.ts";
|
import { TARGET_IS_NEW } from "@lib/common/models/shared.const.symbols.ts";
|
||||||
import { compareMTime, displayRev } from "@lib/common/utils.ts";
|
import { compareMTime, displayRev } from "@lib/common/utils.ts";
|
||||||
import diff_match_patch from "diff-match-patch";
|
import diff_match_patch from "diff-match-patch";
|
||||||
import { stripAllPrefixes, isPlainText } from "../../lib/src/string_and_binary/path";
|
import { stripAllPrefixes, isPlainText } from "@lib/string_and_binary/path";
|
||||||
import { eventHub } from "../../common/events.ts";
|
import { eventHub } from "@/common/events.ts";
|
||||||
import type { InjectableServiceHub } from "../../lib/src/services/InjectableServices.ts";
|
import type { InjectableServiceHub } from "@lib/services/InjectableServices.ts";
|
||||||
import type { LiveSyncCore } from "../../main.ts";
|
import type { LiveSyncCore } from "@/main.ts";
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
interface LSEvents {
|
interface LSEvents {
|
||||||
|
|||||||
@@ -10,12 +10,12 @@ import {
|
|||||||
type RemoteDBSettings,
|
type RemoteDBSettings,
|
||||||
IncompatibleChangesInSpecificPattern,
|
IncompatibleChangesInSpecificPattern,
|
||||||
CompatibleButLossyChanges,
|
CompatibleButLossyChanges,
|
||||||
} from "../../lib/src/common/types.ts";
|
} from "@lib/common/types.ts";
|
||||||
import { escapeMarkdownValue } from "../../lib/src/common/utils.ts";
|
import { escapeMarkdownValue } from "@lib/common/utils.ts";
|
||||||
import { AbstractModule } from "../AbstractModule.ts";
|
import { AbstractModule } from "@/modules/AbstractModule.ts";
|
||||||
import { $msg } from "../../lib/src/common/i18n.ts";
|
import { $msg } from "@lib/common/i18n.ts";
|
||||||
import type { InjectableServiceHub } from "../../lib/src/services/InjectableServices.ts";
|
import type { InjectableServiceHub } from "@lib/services/InjectableServices.ts";
|
||||||
import type { LiveSyncCore } from "../../main.ts";
|
import type { LiveSyncCore } from "@/main.ts";
|
||||||
import { REMOTE_P2P } from "@lib/common/models/setting.const.ts";
|
import { REMOTE_P2P } from "@lib/common/models/setting.const.ts";
|
||||||
|
|
||||||
function valueToString(value: any) {
|
function valueToString(value: any) {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { ButtonComponent } from "@/deps.ts";
|
import { ButtonComponent } from "@/deps.ts";
|
||||||
import { App, FuzzySuggestModal, MarkdownRenderer, Modal, Plugin, Setting } from "../../../deps.ts";
|
import { App, FuzzySuggestModal, MarkdownRenderer, Modal, Plugin, Setting } from "@/deps.ts";
|
||||||
import { EVENT_PLUGIN_UNLOADED, eventHub } from "../../../common/events.ts";
|
import { EVENT_PLUGIN_UNLOADED, eventHub } from "@/common/events.ts";
|
||||||
import { compatGlobal, type CompatIntervalHandle } from "@lib/common/coreEnvFunctions.ts";
|
import { compatGlobal, type CompatIntervalHandle } from "@lib/common/coreEnvFunctions.ts";
|
||||||
|
|
||||||
class AutoClosableModal extends Modal {
|
class AutoClosableModal extends Modal {
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
// Obsidian to LiveSync Utils
|
// Obsidian to LiveSync Utils
|
||||||
|
|
||||||
import { TFile, type TAbstractFile, type TFolder } from "../../../deps.ts";
|
import { TFile, type TAbstractFile, type TFolder } from "@/deps.ts";
|
||||||
import { ICHeader } from "../../../common/types.ts";
|
import { ICHeader } from "@/common/types.ts";
|
||||||
import { addPrefix, isPlainText } from "../../../lib/src/string_and_binary/path.ts";
|
import { addPrefix, isPlainText } from "@lib/string_and_binary/path.ts";
|
||||||
import { LOG_LEVEL_VERBOSE, Logger } from "octagonal-wheels/common/logger";
|
import { LOG_LEVEL_VERBOSE, Logger } from "octagonal-wheels/common/logger";
|
||||||
import { createBlob } from "../../../lib/src/common/utils.ts";
|
import { createBlob } from "@lib/common/utils.ts";
|
||||||
import type {
|
import type {
|
||||||
FilePath,
|
FilePath,
|
||||||
FilePathWithPrefix,
|
FilePathWithPrefix,
|
||||||
@@ -12,8 +12,8 @@ import type {
|
|||||||
UXFileInfoStub,
|
UXFileInfoStub,
|
||||||
UXFolderInfo,
|
UXFolderInfo,
|
||||||
UXInternalFileInfoStub,
|
UXInternalFileInfoStub,
|
||||||
} from "../../../lib/src/common/types.ts";
|
} from "@lib/common/types.ts";
|
||||||
import type { LiveSyncCore } from "../../../main.ts";
|
import type { LiveSyncCore } from "@/main.ts";
|
||||||
import type { FileAccessObsidian } from "@/serviceModules/FileAccessObsidian.ts";
|
import type { FileAccessObsidian } from "@/serviceModules/FileAccessObsidian.ts";
|
||||||
|
|
||||||
export async function TFileToUXFileInfo(
|
export async function TFileToUXFileInfo(
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import type { LiveSyncCore } from "@/main";
|
import type { LiveSyncCore } from "@/main";
|
||||||
import { LOG_LEVEL_NOTICE } from "octagonal-wheels/common/logger";
|
import { LOG_LEVEL_NOTICE } from "octagonal-wheels/common/logger";
|
||||||
import { fireAndForget } from "octagonal-wheels/promises";
|
import { fireAndForget } from "octagonal-wheels/promises";
|
||||||
import { AbstractModule } from "../AbstractModule";
|
import { AbstractModule } from "@/modules/AbstractModule";
|
||||||
// Separated Module for basic menu commands, which are not related to obsidian specific features. It is expected to be used in other platforms with minimal changes.
|
// Separated Module for basic menu commands, which are not related to obsidian specific features. It is expected to be used in other platforms with minimal changes.
|
||||||
// However, it is odd that it has here at all; it really ought to be in each respective feature. It will likely be moved eventually. Until now, addCommand pointed to Obsidian's version.
|
// However, it is odd that it has here at all; it really ought to be in each respective feature. It will likely be moved eventually. Until now, addCommand pointed to Obsidian's version.
|
||||||
export class ModuleBasicMenu extends AbstractModule {
|
export class ModuleBasicMenu extends AbstractModule {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { LOG_LEVEL_NOTICE, LOG_LEVEL_VERBOSE, Logger } from "../../lib/src/common/logger.ts";
|
import { LOG_LEVEL_NOTICE, LOG_LEVEL_VERBOSE, Logger } from "@lib/common/logger.ts";
|
||||||
import {
|
import {
|
||||||
EVENT_REQUEST_OPEN_P2P,
|
EVENT_REQUEST_OPEN_P2P,
|
||||||
EVENT_REQUEST_OPEN_SETTING_WIZARD,
|
EVENT_REQUEST_OPEN_SETTING_WIZARD,
|
||||||
@@ -6,16 +6,16 @@ import {
|
|||||||
EVENT_REQUEST_RUN_DOCTOR,
|
EVENT_REQUEST_RUN_DOCTOR,
|
||||||
EVENT_REQUEST_RUN_FIX_INCOMPLETE,
|
EVENT_REQUEST_RUN_FIX_INCOMPLETE,
|
||||||
eventHub,
|
eventHub,
|
||||||
} from "../../common/events.ts";
|
} from "@/common/events.ts";
|
||||||
import { AbstractModule } from "../AbstractModule.ts";
|
import { AbstractModule } from "@/modules/AbstractModule.ts";
|
||||||
import { $msg } from "@lib/common/i18n.ts";
|
import { $msg } from "@lib/common/i18n.ts";
|
||||||
import { performDoctorConsultation, RebuildOptions } from "../../lib/src/common/configForDoc.ts";
|
import { performDoctorConsultation, RebuildOptions } from "@lib/common/configForDoc.ts";
|
||||||
import { isValidPath } from "../../common/utils.ts";
|
import { isValidPath } from "@/common/utils.ts";
|
||||||
import { isMetaEntry } from "../../lib/src/common/types.ts";
|
import { isMetaEntry } from "@lib/common/types.ts";
|
||||||
import { isDeletedEntry, isDocContentSame, isLoadedEntry, readAsBlob } from "../../lib/src/common/utils.ts";
|
import { isDeletedEntry, isDocContentSame, isLoadedEntry, readAsBlob } from "@lib/common/utils.ts";
|
||||||
import { countCompromisedChunks } from "../../lib/src/pouchdb/negotiation.ts";
|
import { countCompromisedChunks } from "@lib/pouchdb/negotiation.ts";
|
||||||
import type { LiveSyncCore } from "../../main.ts";
|
import type { LiveSyncCore } from "@/main.ts";
|
||||||
import { SetupManager } from "../features/SetupManager.ts";
|
import { SetupManager } from "@/modules/features/SetupManager.ts";
|
||||||
|
|
||||||
type ErrorInfo = {
|
type ErrorInfo = {
|
||||||
path: string;
|
path: string;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
import { FetchHttpHandler, type FetchHttpHandlerOptions } from "@smithy/fetch-http-handler";
|
import { FetchHttpHandler, type FetchHttpHandlerOptions } from "@smithy/fetch-http-handler";
|
||||||
import { HttpRequest, HttpResponse, type HttpHandlerOptions } from "@smithy/protocol-http";
|
import { HttpRequest, HttpResponse, type HttpHandlerOptions } from "@smithy/protocol-http";
|
||||||
import { buildQueryString } from "@smithy/querystring-builder";
|
import { buildQueryString } from "@smithy/querystring-builder";
|
||||||
import { requestUrl, type RequestUrlParam } from "../../../deps.ts";
|
import { requestUrl, type RequestUrlParam } from "@/deps.ts";
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// special handler using Obsidian requestUrl
|
// special handler using Obsidian requestUrl
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
import { AbstractObsidianModule } from "../AbstractObsidianModule.ts";
|
import { AbstractObsidianModule } from "@/modules/AbstractObsidianModule.ts";
|
||||||
import { EVENT_FILE_RENAMED, EVENT_LEAF_ACTIVE_CHANGED, eventHub } from "../../common/events.js";
|
import { EVENT_FILE_RENAMED, EVENT_LEAF_ACTIVE_CHANGED, eventHub } from "@/common/events.js";
|
||||||
import { LOG_LEVEL_NOTICE, LOG_LEVEL_VERBOSE } from "octagonal-wheels/common/logger";
|
import { LOG_LEVEL_NOTICE, LOG_LEVEL_VERBOSE } from "octagonal-wheels/common/logger";
|
||||||
import { scheduleTask } from "octagonal-wheels/concurrency/task";
|
import { scheduleTask } from "octagonal-wheels/concurrency/task";
|
||||||
import type { TFile } from "../../deps.ts";
|
import type { TFile } from "@/deps.ts";
|
||||||
import { fireAndForget } from "octagonal-wheels/promises";
|
import { fireAndForget } from "octagonal-wheels/promises";
|
||||||
import { type FilePathWithPrefix } from "../../lib/src/common/types.ts";
|
import { type FilePathWithPrefix } from "@lib/common/types.ts";
|
||||||
import { reactive, reactiveSource, type ReactiveSource } from "octagonal-wheels/dataobject/reactive";
|
import { reactive, reactiveSource, type ReactiveSource } from "octagonal-wheels/dataobject/reactive";
|
||||||
import {
|
import {
|
||||||
collectingChunks,
|
collectingChunks,
|
||||||
pluginScanningCount,
|
pluginScanningCount,
|
||||||
hiddenFilesEventCount,
|
hiddenFilesEventCount,
|
||||||
hiddenFilesProcessingCount,
|
hiddenFilesProcessingCount,
|
||||||
} from "../../lib/src/mock_and_interop/stores.ts";
|
} from "@lib/mock_and_interop/stores.ts";
|
||||||
import type { LiveSyncCore } from "../../main.ts";
|
import type { LiveSyncCore } from "@/main.ts";
|
||||||
import { compatGlobal } from "@lib/common/coreEnvFunctions.ts";
|
import { compatGlobal } from "@lib/common/coreEnvFunctions.ts";
|
||||||
|
|
||||||
export class ModuleObsidianEvents extends AbstractObsidianModule {
|
export class ModuleObsidianEvents extends AbstractObsidianModule {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { addIcon } from "@/deps.ts";
|
|||||||
import { type FilePathWithPrefix } from "@lib/common/types.ts";
|
import { type FilePathWithPrefix } from "@lib/common/types.ts";
|
||||||
import { $msg } from "@lib/common/i18n.ts";
|
import { $msg } from "@lib/common/i18n.ts";
|
||||||
import type { LiveSyncCore } from "@/main.ts";
|
import type { LiveSyncCore } from "@/main.ts";
|
||||||
import { AbstractModule } from "../AbstractModule.ts";
|
import { AbstractModule } from "@/modules/AbstractModule.ts";
|
||||||
// Obsidian specific menu commands.
|
// Obsidian specific menu commands.
|
||||||
export class ModuleObsidianMenu extends AbstractModule {
|
export class ModuleObsidianMenu extends AbstractModule {
|
||||||
_everyOnloadStart(): Promise<boolean> {
|
_everyOnloadStart(): Promise<boolean> {
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import { delay, fireAndForget } from "octagonal-wheels/promises";
|
import { delay, fireAndForget } from "octagonal-wheels/promises";
|
||||||
import { __onMissingTranslation } from "../../lib/src/common/i18n";
|
import { __onMissingTranslation } from "@lib/common/i18n";
|
||||||
import { AbstractObsidianModule } from "../AbstractObsidianModule.ts";
|
import { AbstractObsidianModule } from "@/modules/AbstractObsidianModule.ts";
|
||||||
import { LOG_LEVEL_VERBOSE } from "octagonal-wheels/common/logger";
|
import { LOG_LEVEL_VERBOSE } from "octagonal-wheels/common/logger";
|
||||||
import { eventHub } from "../../common/events";
|
import { eventHub } from "@/common/events";
|
||||||
import { enableTestFunction } from "./devUtil/testUtils.ts";
|
import { enableTestFunction } from "./devUtil/testUtils.ts";
|
||||||
import { TestPaneView, VIEW_TYPE_TEST } from "./devUtil/TestPaneView.ts";
|
import { TestPaneView, VIEW_TYPE_TEST } from "./devUtil/TestPaneView.ts";
|
||||||
import { writable } from "svelte/store";
|
import { writable } from "svelte/store";
|
||||||
import type { FilePathWithPrefix } from "../../lib/src/common/types.ts";
|
import type { FilePathWithPrefix } from "@lib/common/types.ts";
|
||||||
import type { LiveSyncCore } from "../../main.ts";
|
import type { LiveSyncCore } from "@/main.ts";
|
||||||
export class ModuleDev extends AbstractObsidianModule {
|
export class ModuleDev extends AbstractObsidianModule {
|
||||||
_everyOnloadStart(): Promise<boolean> {
|
_everyOnloadStart(): Promise<boolean> {
|
||||||
__onMissingTranslation(() => {});
|
__onMissingTranslation(() => {});
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { onMount } from "svelte";
|
import { onMount } from "svelte";
|
||||||
import type ObsidianLiveSyncPlugin from "../../../main.ts";
|
import type ObsidianLiveSyncPlugin from "@/main.ts";
|
||||||
import { perf_trench } from "./tests.ts";
|
import { perf_trench } from "./tests.ts";
|
||||||
import { MarkdownRenderer, Notice } from "../../../deps.ts";
|
import { MarkdownRenderer, Notice } from "@/deps.ts";
|
||||||
import type { ModuleDev } from "../ModuleDev.ts";
|
import type { ModuleDev } from "@/modules/extras/ModuleDev.ts";
|
||||||
import { fireAndForget } from "octagonal-wheels/promises";
|
import { fireAndForget } from "octagonal-wheels/promises";
|
||||||
import { EVENT_LAYOUT_READY, eventHub } from "../../../common/events.ts";
|
import { EVENT_LAYOUT_READY, eventHub } from "@/common/events.ts";
|
||||||
export let plugin: ObsidianLiveSyncPlugin;
|
export let plugin: ObsidianLiveSyncPlugin;
|
||||||
export let moduleDev: ModuleDev;
|
export let moduleDev: ModuleDev;
|
||||||
$: core = plugin.core;
|
$: core = plugin.core;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { ItemView, WorkspaceLeaf } from "@/deps.ts";
|
import { ItemView, WorkspaceLeaf } from "@/deps.ts";
|
||||||
import TestPaneComponent from "./TestPane.svelte";
|
import TestPaneComponent from "./TestPane.svelte";
|
||||||
import type ObsidianLiveSyncPlugin from "../../../main.ts";
|
import type ObsidianLiveSyncPlugin from "@/main.ts";
|
||||||
import type { ModuleDev } from "../ModuleDev.ts";
|
import type { ModuleDev } from "@/modules/extras/ModuleDev.ts";
|
||||||
export const VIEW_TYPE_TEST = "ols-pane-test";
|
export const VIEW_TYPE_TEST = "ols-pane-test";
|
||||||
declare global {
|
declare global {
|
||||||
interface LSEvents {
|
interface LSEvents {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { fireAndForget } from "../../../lib/src/common/utils.ts";
|
import { fireAndForget } from "@lib/common/utils.ts";
|
||||||
import { serialized } from "octagonal-wheels/concurrency/lock";
|
import { serialized } from "octagonal-wheels/concurrency/lock";
|
||||||
import type ObsidianLiveSyncPlugin from "../../../main.ts";
|
import type ObsidianLiveSyncPlugin from "@/main.ts";
|
||||||
|
|
||||||
let plugin: ObsidianLiveSyncPlugin;
|
let plugin: ObsidianLiveSyncPlugin;
|
||||||
export function enableTestFunction(plugin_: ObsidianLiveSyncPlugin) {
|
export function enableTestFunction(plugin_: ObsidianLiveSyncPlugin) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Trench } from "octagonal-wheels/memory/memutil";
|
import { Trench } from "octagonal-wheels/memory/memutil";
|
||||||
import type ObsidianLiveSyncPlugin from "../../../main.ts";
|
import type ObsidianLiveSyncPlugin from "@/main.ts";
|
||||||
type MeasureResult = [times: number, spent: number];
|
type MeasureResult = [times: number, spent: number];
|
||||||
type NamedMeasureResult = [name: string, result: MeasureResult];
|
type NamedMeasureResult = [name: string, result: MeasureResult];
|
||||||
const measures = new Map<string, MeasureResult>();
|
const measures = new Map<string, MeasureResult>();
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { TFile, Modal, App, DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, diff_match_patch } from "../../../deps.ts";
|
import { TFile, Modal, App, DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, diff_match_patch } from "@/deps.ts";
|
||||||
import { getPathFromTFile, isValidPath } from "../../../common/utils.ts";
|
import { getPathFromTFile, isValidPath } from "@/common/utils.ts";
|
||||||
import { decodeBinary, readString } from "../../../lib/src/string_and_binary/convert.ts";
|
import { decodeBinary, readString } from "@lib/string_and_binary/convert.ts";
|
||||||
import ObsidianLiveSyncPlugin from "../../../main.ts";
|
import ObsidianLiveSyncPlugin from "@/main.ts";
|
||||||
import {
|
import {
|
||||||
type DocumentID,
|
type DocumentID,
|
||||||
type FilePathWithPrefix,
|
type FilePathWithPrefix,
|
||||||
@@ -9,11 +9,11 @@ import {
|
|||||||
LOG_LEVEL_INFO,
|
LOG_LEVEL_INFO,
|
||||||
LOG_LEVEL_NOTICE,
|
LOG_LEVEL_NOTICE,
|
||||||
LOG_LEVEL_VERBOSE,
|
LOG_LEVEL_VERBOSE,
|
||||||
} from "../../../lib/src/common/types.ts";
|
} from "@lib/common/types.ts";
|
||||||
import { Logger } from "../../../lib/src/common/logger.ts";
|
import { Logger } from "@lib/common/logger.ts";
|
||||||
import { isErrorOfMissingDoc } from "../../../lib/src/pouchdb/utils_couchdb.ts";
|
import { isErrorOfMissingDoc } from "@lib/pouchdb/utils_couchdb.ts";
|
||||||
import { fireAndForget, getDocData, readContent } from "../../../lib/src/common/utils.ts";
|
import { fireAndForget, getDocData, readContent } from "@lib/common/utils.ts";
|
||||||
import { isPlainText, stripPrefix } from "../../../lib/src/string_and_binary/path.ts";
|
import { isPlainText, stripPrefix } from "@lib/string_and_binary/path.ts";
|
||||||
import { scheduleOnceIfDuplicated } from "octagonal-wheels/concurrency/lock";
|
import { scheduleOnceIfDuplicated } from "octagonal-wheels/concurrency/lock";
|
||||||
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore.ts";
|
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore.ts";
|
||||||
import { compatGlobal } from "@lib/common/coreEnvFunctions.ts";
|
import { compatGlobal } from "@lib/common/coreEnvFunctions.ts";
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import ObsidianLiveSyncPlugin from "../../../main.ts";
|
import ObsidianLiveSyncPlugin from "@/main.ts";
|
||||||
import { onDestroy, onMount } from "svelte";
|
import { onDestroy, onMount } from "svelte";
|
||||||
import type { AnyEntry, FilePathWithPrefix } from "../../../lib/src/common/types.ts";
|
import type { AnyEntry, FilePathWithPrefix } from "@lib/common/types.ts";
|
||||||
import { getDocData, isAnyNote, isDocContentSame, readAsBlob } from "../../../lib/src/common/utils.ts";
|
import { getDocData, isAnyNote, isDocContentSame, readAsBlob } from "@lib/common/utils.ts";
|
||||||
import { diff_match_patch } from "../../../deps.ts";
|
import { diff_match_patch } from "@/deps.ts";
|
||||||
import { DocumentHistoryModal } from "../DocumentHistory/DocumentHistoryModal.ts";
|
import { DocumentHistoryModal } from "@/modules/features/DocumentHistory/DocumentHistoryModal.ts";
|
||||||
import { isPlainText, stripAllPrefixes } from "../../../lib/src/string_and_binary/path.ts";
|
import { isPlainText, stripAllPrefixes } from "@lib/string_and_binary/path.ts";
|
||||||
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore.ts";
|
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore.ts";
|
||||||
export let plugin: ObsidianLiveSyncPlugin;
|
export let plugin: ObsidianLiveSyncPlugin;
|
||||||
export let core: LiveSyncBaseCore;
|
export let core: LiveSyncBaseCore;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { WorkspaceLeaf } from "../../../deps.ts";
|
import { WorkspaceLeaf } from "@/deps.ts";
|
||||||
import GlobalHistoryComponent from "./GlobalHistory.svelte";
|
import GlobalHistoryComponent from "./GlobalHistory.svelte";
|
||||||
import type ObsidianLiveSyncPlugin from "../../../main.ts";
|
import type ObsidianLiveSyncPlugin from "@/main.ts";
|
||||||
import { SvelteItemView } from "../../../common/SvelteItemView.ts";
|
import { SvelteItemView } from "@/common/SvelteItemView.ts";
|
||||||
import { mount } from "svelte";
|
import { mount } from "svelte";
|
||||||
|
|
||||||
export const VIEW_TYPE_GLOBAL_HISTORY = "global-history";
|
export const VIEW_TYPE_GLOBAL_HISTORY = "global-history";
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { App, Modal } from "../../../deps.ts";
|
import { App, Modal } from "@/deps.ts";
|
||||||
import { DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT } from "diff-match-patch";
|
import { DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT } from "diff-match-patch";
|
||||||
import { CANCELLED, LEAVE_TO_SUBSEQUENT, type diff_result } from "../../../lib/src/common/types.ts";
|
import { CANCELLED, LEAVE_TO_SUBSEQUENT, type diff_result } from "@lib/common/types.ts";
|
||||||
import { delay } from "../../../lib/src/common/utils.ts";
|
import { delay } from "@lib/common/utils.ts";
|
||||||
import { eventHub } from "../../../common/events.ts";
|
import { eventHub } from "@/common/events.ts";
|
||||||
import { globalSlipBoard } from "../../../lib/src/bureau/bureau.ts";
|
import { globalSlipBoard } from "@lib/bureau/bureau.ts";
|
||||||
|
|
||||||
export type MergeDialogResult = typeof CANCELLED | typeof LEAVE_TO_SUBSEQUENT | string;
|
export type MergeDialogResult = typeof CANCELLED | typeof LEAVE_TO_SUBSEQUENT | string;
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { onDestroy, onMount } from "svelte";
|
import { onDestroy, onMount } from "svelte";
|
||||||
import { logMessages } from "../../../lib/src/mock_and_interop/stores";
|
import { logMessages } from "@lib/mock_and_interop/stores";
|
||||||
import { reactive, type ReactiveInstance } from "octagonal-wheels/dataobject/reactive";
|
import { reactive, type ReactiveInstance } from "octagonal-wheels/dataobject/reactive";
|
||||||
import { Logger } from "../../../lib/src/common/logger";
|
import { Logger } from "@lib/common/logger";
|
||||||
import { $msg as msg, currentLang as lang } from "../../../lib/src/common/i18n.ts";
|
import { $msg as msg, currentLang as lang } from "@lib/common/i18n.ts";
|
||||||
import { compatGlobal } from "@lib/common/coreEnvFunctions.ts";
|
import { compatGlobal } from "@lib/common/coreEnvFunctions.ts";
|
||||||
|
|
||||||
let unsubscribe: () => void;
|
let unsubscribe: () => void;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { WorkspaceLeaf } from "@/deps.ts";
|
import { WorkspaceLeaf } from "@/deps.ts";
|
||||||
import LogPaneComponent from "./LogPane.svelte";
|
import LogPaneComponent from "./LogPane.svelte";
|
||||||
import type ObsidianLiveSyncPlugin from "../../../main.ts";
|
import type ObsidianLiveSyncPlugin from "@/main.ts";
|
||||||
import { SvelteItemView } from "../../../common/SvelteItemView.ts";
|
import { SvelteItemView } from "@/common/SvelteItemView.ts";
|
||||||
import { $msg } from "@lib/common/i18n.ts";
|
import { $msg } from "@lib/common/i18n.ts";
|
||||||
import { mount } from "svelte";
|
import { mount } from "svelte";
|
||||||
export const VIEW_TYPE_LOG = "log-log";
|
export const VIEW_TYPE_LOG = "log-log";
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { AbstractObsidianModule } from "../AbstractObsidianModule.ts";
|
import { AbstractObsidianModule } from "@/modules/AbstractObsidianModule.ts";
|
||||||
import { VIEW_TYPE_GLOBAL_HISTORY, GlobalHistoryView } from "./GlobalHistory/GlobalHistoryView.ts";
|
import { VIEW_TYPE_GLOBAL_HISTORY, GlobalHistoryView } from "./GlobalHistory/GlobalHistoryView.ts";
|
||||||
|
|
||||||
export class ModuleObsidianGlobalHistory extends AbstractObsidianModule {
|
export class ModuleObsidianGlobalHistory extends AbstractObsidianModule {
|
||||||
|
|||||||
@@ -8,13 +8,13 @@ import {
|
|||||||
type DocumentID,
|
type DocumentID,
|
||||||
type FilePathWithPrefix,
|
type FilePathWithPrefix,
|
||||||
type diff_result,
|
type diff_result,
|
||||||
} from "../../lib/src/common/types.ts";
|
} from "@lib/common/types.ts";
|
||||||
import { ConflictResolveModal } from "./InteractiveConflictResolving/ConflictResolveModal.ts";
|
import { ConflictResolveModal } from "./InteractiveConflictResolving/ConflictResolveModal.ts";
|
||||||
import { AbstractObsidianModule } from "../AbstractObsidianModule.ts";
|
import { AbstractObsidianModule } from "@/modules/AbstractObsidianModule.ts";
|
||||||
import { displayRev } from "../../common/utils.ts";
|
import { displayRev } from "@/common/utils.ts";
|
||||||
import { fireAndForget } from "octagonal-wheels/promises";
|
import { fireAndForget } from "octagonal-wheels/promises";
|
||||||
import { serialized } from "octagonal-wheels/concurrency/lock";
|
import { serialized } from "octagonal-wheels/concurrency/lock";
|
||||||
import type { LiveSyncCore } from "../../main.ts";
|
import type { LiveSyncCore } from "@/main.ts";
|
||||||
|
|
||||||
export class ModuleInteractiveConflictResolver extends AbstractObsidianModule {
|
export class ModuleInteractiveConflictResolver extends AbstractObsidianModule {
|
||||||
_everyOnloadStart(): Promise<boolean> {
|
_everyOnloadStart(): Promise<boolean> {
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ import {
|
|||||||
PREFIXMD_LOGFILE,
|
PREFIXMD_LOGFILE,
|
||||||
type DatabaseConnectingStatus,
|
type DatabaseConnectingStatus,
|
||||||
type LOG_LEVEL,
|
type LOG_LEVEL,
|
||||||
} from "../../lib/src/common/types.ts";
|
} from "@lib/common/types.ts";
|
||||||
import { cancelTask, scheduleTask } from "octagonal-wheels/concurrency/task";
|
import { cancelTask, scheduleTask } from "octagonal-wheels/concurrency/task";
|
||||||
import { fireAndForget, isDirty, throttle } from "../../lib/src/common/utils.ts";
|
import { fireAndForget, isDirty, throttle } from "@lib/common/utils.ts";
|
||||||
import {
|
import {
|
||||||
collectingChunks,
|
collectingChunks,
|
||||||
pluginScanningCount,
|
pluginScanningCount,
|
||||||
@@ -16,22 +16,22 @@ import {
|
|||||||
hiddenFilesProcessingCount,
|
hiddenFilesProcessingCount,
|
||||||
type LogEntry,
|
type LogEntry,
|
||||||
logMessages,
|
logMessages,
|
||||||
} from "../../lib/src/mock_and_interop/stores.ts";
|
} from "@lib/mock_and_interop/stores.ts";
|
||||||
import { eventHub } from "../../lib/src/hub/hub.ts";
|
import { eventHub } from "@lib/hub/hub.ts";
|
||||||
import {
|
import {
|
||||||
EVENT_FILE_RENAMED,
|
EVENT_FILE_RENAMED,
|
||||||
EVENT_LAYOUT_READY,
|
EVENT_LAYOUT_READY,
|
||||||
EVENT_LEAF_ACTIVE_CHANGED,
|
EVENT_LEAF_ACTIVE_CHANGED,
|
||||||
EVENT_ON_UNRESOLVED_ERROR,
|
EVENT_ON_UNRESOLVED_ERROR,
|
||||||
} from "../../common/events.ts";
|
} from "@/common/events.ts";
|
||||||
import { AbstractObsidianModule } from "../AbstractObsidianModule.ts";
|
import { AbstractObsidianModule } from "@/modules/AbstractObsidianModule.ts";
|
||||||
import { addIcon, debounce, normalizePath, Notice, stringifyYaml, type WorkspaceLeaf } from "../../deps.ts";
|
import { addIcon, debounce, normalizePath, Notice, stringifyYaml, type WorkspaceLeaf } from "@/deps.ts";
|
||||||
import { LOG_LEVEL_NOTICE, setGlobalLogFunction } from "octagonal-wheels/common/logger";
|
import { LOG_LEVEL_NOTICE, setGlobalLogFunction } from "octagonal-wheels/common/logger";
|
||||||
import { LogPaneView, VIEW_TYPE_LOG } from "./Log/LogPaneView.ts";
|
import { LogPaneView, VIEW_TYPE_LOG } from "./Log/LogPaneView.ts";
|
||||||
import { serialized } from "octagonal-wheels/concurrency/lock";
|
import { serialized } from "octagonal-wheels/concurrency/lock";
|
||||||
import { $msg } from "@lib/common/i18n.ts";
|
import { $msg } from "@lib/common/i18n.ts";
|
||||||
import { P2PLogCollector } from "@/lib/src/replication/trystero/P2PLogCollector.ts";
|
import { P2PLogCollector } from "@lib/replication/trystero/P2PLogCollector.ts";
|
||||||
import type { LiveSyncCore } from "../../main.ts";
|
import type { LiveSyncCore } from "@/main.ts";
|
||||||
import { LiveSyncError } from "@lib/common/LSError.ts";
|
import { LiveSyncError } from "@lib/common/LSError.ts";
|
||||||
import { isValidPath } from "@/common/utils.ts";
|
import { isValidPath } from "@/common/utils.ts";
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { type TFile } from "@/deps.ts";
|
import { type TFile } from "@/deps.ts";
|
||||||
import { eventHub } from "../../common/events.ts";
|
import { eventHub } from "@/common/events.ts";
|
||||||
import { EVENT_REQUEST_SHOW_HISTORY } from "../../common/obsidianEvents.ts";
|
import { EVENT_REQUEST_SHOW_HISTORY } from "@/common/obsidianEvents.ts";
|
||||||
import type { FilePathWithPrefix, LoadedEntry, DocumentID } from "../../lib/src/common/types.ts";
|
import type { FilePathWithPrefix, LoadedEntry, DocumentID } from "@lib/common/types.ts";
|
||||||
import { AbstractObsidianModule } from "../AbstractObsidianModule.ts";
|
import { AbstractObsidianModule } from "@/modules/AbstractObsidianModule.ts";
|
||||||
import { DocumentHistoryModal } from "./DocumentHistory/DocumentHistoryModal.ts";
|
import { DocumentHistoryModal } from "./DocumentHistory/DocumentHistoryModal.ts";
|
||||||
import { fireAndForget } from "octagonal-wheels/promises";
|
import { fireAndForget } from "octagonal-wheels/promises";
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
// import { PouchDB } from "../../lib/src/pouchdb/pouchdb-browser";
|
// import { PouchDB } from "../../lib/src/pouchdb/pouchdb-browser";
|
||||||
import { isObjectDifferent } from "octagonal-wheels/object";
|
import { isObjectDifferent } from "octagonal-wheels/object";
|
||||||
import { EVENT_SETTING_SAVED, eventHub } from "../../common/events";
|
import { EVENT_SETTING_SAVED, eventHub } from "@/common/events";
|
||||||
import { fireAndForget } from "octagonal-wheels/promises";
|
import { fireAndForget } from "octagonal-wheels/promises";
|
||||||
import { DEFAULT_SETTINGS, type FilePathWithPrefix, type ObsidianLiveSyncSettings } from "../../lib/src/common/types";
|
import { DEFAULT_SETTINGS, type FilePathWithPrefix, type ObsidianLiveSyncSettings } from "@lib/common/types";
|
||||||
import { parseYaml, stringifyYaml } from "../../deps";
|
import { parseYaml, stringifyYaml } from "@/deps";
|
||||||
import { LOG_LEVEL_DEBUG, LOG_LEVEL_INFO, LOG_LEVEL_NOTICE, LOG_LEVEL_VERBOSE } from "octagonal-wheels/common/logger";
|
import { LOG_LEVEL_DEBUG, LOG_LEVEL_INFO, LOG_LEVEL_NOTICE, LOG_LEVEL_VERBOSE } from "octagonal-wheels/common/logger";
|
||||||
import { AbstractModule } from "../AbstractModule.ts";
|
import { AbstractModule } from "@/modules/AbstractModule.ts";
|
||||||
import type { ServiceContext } from "@lib/services/base/ServiceBase.ts";
|
import type { ServiceContext } from "@lib/services/base/ServiceBase.ts";
|
||||||
import type { InjectableServiceHub } from "@lib/services/InjectableServices.ts";
|
import type { InjectableServiceHub } from "@lib/services/InjectableServices.ts";
|
||||||
import type { LiveSyncCore } from "@/main.ts";
|
import type { LiveSyncCore } from "@/main.ts";
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { ObsidianLiveSyncSettingTab } from "./SettingDialogue/ObsidianLiveSyncSettingTab.ts";
|
import { ObsidianLiveSyncSettingTab } from "./SettingDialogue/ObsidianLiveSyncSettingTab.ts";
|
||||||
import { AbstractObsidianModule } from "../AbstractObsidianModule.ts";
|
import { AbstractObsidianModule } from "@/modules/AbstractObsidianModule.ts";
|
||||||
// import { PouchDB } from "../../lib/src/pouchdb/pouchdb-browser";
|
// import { PouchDB } from "../../lib/src/pouchdb/pouchdb-browser";
|
||||||
import { EVENT_REQUEST_OPEN_SETTING_WIZARD, EVENT_REQUEST_OPEN_SETTINGS, eventHub } from "../../common/events.ts";
|
import { EVENT_REQUEST_OPEN_SETTING_WIZARD, EVENT_REQUEST_OPEN_SETTINGS, eventHub } from "@/common/events.ts";
|
||||||
import type { LiveSyncCore } from "@/main.ts";
|
import type { LiveSyncCore } from "@/main.ts";
|
||||||
|
|
||||||
export class ModuleObsidianSettingDialogue extends AbstractObsidianModule {
|
export class ModuleObsidianSettingDialogue extends AbstractObsidianModule {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { CustomRegExpSource } from "../../../lib/src/common/types";
|
import type { CustomRegExpSource } from "@lib/common/types";
|
||||||
import { isInvertedRegExp, isValidRegExp } from "../../../lib/src/common/utils";
|
import { isInvertedRegExp, isValidRegExp } from "@lib/common/utils";
|
||||||
|
|
||||||
export let patterns = [] as CustomRegExpSource[];
|
export let patterns = [] as CustomRegExpSource[];
|
||||||
export let originals = [] as CustomRegExpSource[];
|
export let originals = [] as CustomRegExpSource[];
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { App, PluginSettingTab } from "../../../deps.ts";
|
import { App, PluginSettingTab } from "@/deps.ts";
|
||||||
import {
|
import {
|
||||||
type ObsidianLiveSyncSettings,
|
type ObsidianLiveSyncSettings,
|
||||||
type RemoteDBSettings,
|
type RemoteDBSettings,
|
||||||
@@ -12,15 +12,15 @@ import {
|
|||||||
LEVEL_ADVANCED,
|
LEVEL_ADVANCED,
|
||||||
LEVEL_EDGE_CASE,
|
LEVEL_EDGE_CASE,
|
||||||
REMOTE_P2P,
|
REMOTE_P2P,
|
||||||
} from "../../../lib/src/common/types.ts";
|
} from "@lib/common/types.ts";
|
||||||
import { delay, isObjectDifferent, sizeToHumanReadable } from "../../../lib/src/common/utils.ts";
|
import { delay, isObjectDifferent, sizeToHumanReadable } from "@lib/common/utils.ts";
|
||||||
import { versionNumberString2Number } from "../../../lib/src/string_and_binary/convert.ts";
|
import { versionNumberString2Number } from "@lib/string_and_binary/convert.ts";
|
||||||
import { Logger } from "../../../lib/src/common/logger.ts";
|
import { Logger } from "@lib/common/logger.ts";
|
||||||
import { checkSyncInfo } from "@lib/pouchdb/negotiation.ts";
|
import { checkSyncInfo } from "@lib/pouchdb/negotiation.ts";
|
||||||
import { testCrypt } from "octagonal-wheels/encryption/encryption";
|
import { testCrypt } from "octagonal-wheels/encryption/encryption";
|
||||||
import ObsidianLiveSyncPlugin from "../../../main.ts";
|
import ObsidianLiveSyncPlugin from "@/main.ts";
|
||||||
import { scheduleTask } from "../../../common/utils.ts";
|
import { scheduleTask } from "@/common/utils.ts";
|
||||||
import { LiveSyncCouchDBReplicator } from "../../../lib/src/replication/couchdb/LiveSyncReplicator.ts";
|
import { LiveSyncCouchDBReplicator } from "@lib/replication/couchdb/LiveSyncReplicator.ts";
|
||||||
import {
|
import {
|
||||||
type AllSettingItemKey,
|
type AllSettingItemKey,
|
||||||
type AllStringItemKey,
|
type AllStringItemKey,
|
||||||
@@ -31,12 +31,12 @@ import {
|
|||||||
type OnDialogSettings,
|
type OnDialogSettings,
|
||||||
getConfName,
|
getConfName,
|
||||||
} from "./settingConstants.ts";
|
} from "./settingConstants.ts";
|
||||||
import { $msg } from "../../../lib/src/common/i18n.ts";
|
import { $msg } from "@lib/common/i18n.ts";
|
||||||
import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts";
|
import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts";
|
||||||
import { fireAndForget, yieldNextAnimationFrame } from "octagonal-wheels/promises";
|
import { fireAndForget, yieldNextAnimationFrame } from "octagonal-wheels/promises";
|
||||||
import { confirmWithMessage } from "../../coreObsidian/UILib/dialogs.ts";
|
import { confirmWithMessage } from "@/modules/coreObsidian/UILib/dialogs.ts";
|
||||||
import { EVENT_REQUEST_RELOAD_SETTING_TAB, eventHub } from "../../../common/events.ts";
|
import { EVENT_REQUEST_RELOAD_SETTING_TAB, eventHub } from "@/common/events.ts";
|
||||||
import { JournalSyncMinio } from "../../../lib/src/replication/journal/objectstore/JournalSyncMinio.ts";
|
import { JournalSyncMinio } from "@lib/replication/journal/objectstore/JournalSyncMinio.ts";
|
||||||
import { paneChangeLog } from "./PaneChangeLog.ts";
|
import { paneChangeLog } from "./PaneChangeLog.ts";
|
||||||
import {
|
import {
|
||||||
enableOnly,
|
enableOnly,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { ChunkAlgorithmNames } from "../../../lib/src/common/types.ts";
|
import { ChunkAlgorithmNames } from "@lib/common/types.ts";
|
||||||
import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts";
|
import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts";
|
||||||
import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab.ts";
|
import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab.ts";
|
||||||
import type { PageFunctions } from "./SettingPane.ts";
|
import type { PageFunctions } from "./SettingPane.ts";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { MarkdownRenderer } from "../../../deps.ts";
|
import { MarkdownRenderer } from "@/deps.ts";
|
||||||
import { versionNumberString2Number } from "../../../lib/src/string_and_binary/convert.ts";
|
import { versionNumberString2Number } from "@lib/string_and_binary/convert.ts";
|
||||||
import { $msg } from "../../../lib/src/common/i18n.ts";
|
import { $msg } from "@lib/common/i18n.ts";
|
||||||
import { fireAndForget } from "octagonal-wheels/promises";
|
import { fireAndForget } from "octagonal-wheels/promises";
|
||||||
import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab.ts";
|
import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab.ts";
|
||||||
import { visibleOnly } from "./SettingPane.ts";
|
import { visibleOnly } from "./SettingPane.ts";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts";
|
import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts";
|
||||||
import { EVENT_REQUEST_OPEN_PLUGIN_SYNC_DIALOG, eventHub } from "../../../common/events.ts";
|
import { EVENT_REQUEST_OPEN_PLUGIN_SYNC_DIALOG, eventHub } from "@/common/events.ts";
|
||||||
import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab.ts";
|
import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab.ts";
|
||||||
import type { PageFunctions } from "./SettingPane.ts";
|
import type { PageFunctions } from "./SettingPane.ts";
|
||||||
import { enableOnly, visibleOnly } from "./SettingPane.ts";
|
import { enableOnly, visibleOnly } from "./SettingPane.ts";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { $msg, $t } from "../../../lib/src/common/i18n.ts";
|
import { $msg, $t } from "@lib/common/i18n.ts";
|
||||||
import { SUPPORTED_I18N_LANGS, type I18N_LANGS } from "../../../lib/src/common/rosetta.ts";
|
import { SUPPORTED_I18N_LANGS, type I18N_LANGS } from "@lib/common/rosetta.ts";
|
||||||
import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts";
|
import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts";
|
||||||
import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab.ts";
|
import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab.ts";
|
||||||
import type { PageFunctions } from "./SettingPane.ts";
|
import type { PageFunctions } from "./SettingPane.ts";
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { EVENT_REQUEST_PERFORM_GC_V3, eventHub } from "@/common/events.ts";
|
import { EVENT_REQUEST_PERFORM_GC_V3, eventHub } from "@/common/events.ts";
|
||||||
import { LOG_LEVEL_NOTICE, Logger } from "../../../lib/src/common/logger.ts";
|
import { LOG_LEVEL_NOTICE, Logger } from "@lib/common/logger.ts";
|
||||||
import { FlagFilesHumanReadable, FLAGMD_REDFLAG } from "../../../lib/src/common/types.ts";
|
import { FlagFilesHumanReadable, FLAGMD_REDFLAG } from "@lib/common/types.ts";
|
||||||
import { fireAndForget } from "../../../lib/src/common/utils.ts";
|
import { fireAndForget } from "@lib/common/utils.ts";
|
||||||
import { LiveSyncCouchDBReplicator } from "../../../lib/src/replication/couchdb/LiveSyncReplicator.ts";
|
import { LiveSyncCouchDBReplicator } from "@lib/replication/couchdb/LiveSyncReplicator.ts";
|
||||||
import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts";
|
import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts";
|
||||||
import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab";
|
import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab";
|
||||||
import { visibleOnly, type PageFunctions } from "./SettingPane";
|
import { visibleOnly, type PageFunctions } from "./SettingPane";
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user