@hesprs/sync-engine-sdk 3.0.2 → 3.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dev.spec.d.ts +23 -1
- package/dist/{index-3gsR9vHT.spec.d.ts → index-BJDjAUwk.spec.d.ts} +12 -15
- package/dist/index.js +1 -1
- package/dist/index.spec.d.ts +1 -1
- package/dist/pipe-6bvLNkHj.js +1 -0
- package/dist/plugin/src/components/MigrationModal.js +1 -1
- package/dist/plugin/src/sync/decision/interface.js +1 -0
- package/dist/plugin/src/sync/tasks/AddRecord.js +1 -0
- package/dist/plugin/src/sync/tasks/CreateLocalDir.js +1 -0
- package/dist/plugin/src/sync/tasks/CreateRemoteDir.js +1 -0
- package/dist/plugin/src/sync/tasks/Download.js +1 -0
- package/dist/plugin/src/sync/tasks/MoveLocal.js +1 -0
- package/dist/plugin/src/sync/tasks/MoveRemote.js +1 -0
- package/dist/plugin/src/sync/tasks/RemoveLocal.js +1 -0
- package/dist/plugin/src/sync/tasks/RemoveRecord.js +1 -0
- package/dist/plugin/src/sync/tasks/RemoveRemote.js +1 -0
- package/dist/plugin/src/sync/tasks/ResolveConflict.js +1 -0
- package/dist/plugin/src/sync/tasks/Upload.js +1 -0
- package/dist/plugin/src/sync/tasks/interface.js +1 -0
- package/dist/plugin/src/utils/move-value.js +1 -0
- package/dist/plugin/test/test-kit.js +1 -1
- package/package.json +2 -2
package/dist/dev.spec.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Ct as FolderStat, St as FileStat, f as Request, p as RequestParam, ut as Fs, vt as RootFs, xt as Binary, yt as WrappedFs } from "./index-
|
|
1
|
+
import { Ct as FolderStat, Dt as RecordStatsMap, Et as RecordStat, J as TaskNames, M as Decider, Ot as Stat, St as FileStat, f as Request, kt as StatsMap, p as RequestParam, ut as Fs, vt as RootFs, xt as Binary, yt as WrappedFs } from "./index-BJDjAUwk.spec.js";
|
|
2
2
|
//#region src/sdk/debug-wrapper.d.ts
|
|
3
3
|
declare function debugWrapper(original: Fs, log: (content: string) => void): WrappedFs;
|
|
4
4
|
//#endregion
|
|
@@ -28,6 +28,12 @@ type RequestHarness = {
|
|
|
28
28
|
calls: Array<RequestParam | string>;
|
|
29
29
|
request: Request;
|
|
30
30
|
};
|
|
31
|
+
type ExtractedTask = {
|
|
32
|
+
key: string;
|
|
33
|
+
local?: Stat;
|
|
34
|
+
name: TaskNames;
|
|
35
|
+
remote?: Stat;
|
|
36
|
+
};
|
|
31
37
|
declare function bytes(value: string): Binary;
|
|
32
38
|
declare function file(key: string, options?: {
|
|
33
39
|
mtime?: number;
|
|
@@ -35,6 +41,16 @@ declare function file(key: string, options?: {
|
|
|
35
41
|
uid?: string;
|
|
36
42
|
}): FileStat;
|
|
37
43
|
declare function folder(key: string): FolderStat;
|
|
44
|
+
declare function fileRecord(local: string, remote: string): RecordStat;
|
|
45
|
+
declare function folderRecord(): RecordStat;
|
|
46
|
+
declare function runDecider(decider: Decider, input: {
|
|
47
|
+
localStats?: StatsMap;
|
|
48
|
+
remoteStats?: StatsMap;
|
|
49
|
+
records?: RecordStatsMap;
|
|
50
|
+
}): Array<ExtractedTask>;
|
|
51
|
+
declare function taskNames(tasks: Array<ExtractedTask>): Array<string>;
|
|
52
|
+
declare function taskKeys(tasks: Array<ExtractedTask>): Array<string>;
|
|
53
|
+
declare function findTask(tasks: Array<ExtractedTask>, key: string): ExtractedTask;
|
|
38
54
|
declare function stream(chunks?: Array<string | Binary>): ReadableStream<Binary>;
|
|
39
55
|
declare function deferred<T>(): {
|
|
40
56
|
promise: Promise<T>;
|
|
@@ -48,11 +64,17 @@ declare const testKit: {
|
|
|
48
64
|
bytes: typeof bytes;
|
|
49
65
|
deferred: typeof deferred;
|
|
50
66
|
file: typeof file;
|
|
67
|
+
fileRecord: typeof fileRecord;
|
|
68
|
+
findTask: typeof findTask;
|
|
51
69
|
flush: typeof flush;
|
|
52
70
|
folder: typeof folder;
|
|
71
|
+
folderRecord: typeof folderRecord;
|
|
53
72
|
fs: typeof fs;
|
|
54
73
|
request: typeof request;
|
|
74
|
+
runDecider: typeof runDecider;
|
|
55
75
|
stream: typeof stream;
|
|
76
|
+
taskKeys: typeof taskKeys;
|
|
77
|
+
taskNames: typeof taskNames;
|
|
56
78
|
};
|
|
57
79
|
//#endregion
|
|
58
80
|
//#region src/utils/sha-256.d.ts
|
|
@@ -40,9 +40,6 @@ type Progress<T = string> = {
|
|
|
40
40
|
};
|
|
41
41
|
type Binary = Uint8Array<ArrayBuffer>;
|
|
42
42
|
//#endregion
|
|
43
|
-
//#region src/utils/glob-match.d.ts
|
|
44
|
-
type GlobMatchResult = 'include' | 'exclude' | 'advance';
|
|
45
|
-
//#endregion
|
|
46
43
|
//#region src/fs/interface.d.ts
|
|
47
44
|
/**
|
|
48
45
|
* All keys use unified format:
|
|
@@ -63,7 +60,7 @@ type RootFs = {
|
|
|
63
60
|
exists(key: string): MaybePromise<boolean>;
|
|
64
61
|
list(key: string, reporter: ListReporter): MaybePromise<Array<Stat$1>>;
|
|
65
62
|
};
|
|
66
|
-
type ListReporter = (progress: Required<Progress>) => MaybePromise<
|
|
63
|
+
type ListReporter = (progress: Required<Progress>) => MaybePromise<'include' | 'exclude' | 'advance'>;
|
|
67
64
|
type WrappedFs = RootFs & {
|
|
68
65
|
original: Fs;
|
|
69
66
|
};
|
|
@@ -262,7 +259,7 @@ declare class Storage {
|
|
|
262
259
|
private readonly recordStoreExists;
|
|
263
260
|
readonly root: {
|
|
264
261
|
clearRecordStores: () => Promise<void>;
|
|
265
|
-
deleteRecordStore: (namespace?: string) =>
|
|
262
|
+
deleteRecordStore: (namespace?: string) => MaybePromise<void>;
|
|
266
263
|
getRecordStore: (namespace?: string) => {
|
|
267
264
|
get(key: string): Promise<RecordStat | undefined>;
|
|
268
265
|
set(key: string, value: RecordStat): Promise<void>;
|
|
@@ -292,7 +289,7 @@ declare class Storage {
|
|
|
292
289
|
setMeta<T extends string | number | symbol>(key: T, value: any): void;
|
|
293
290
|
dispose(): void;
|
|
294
291
|
};
|
|
295
|
-
recordStoreExists: (namespace?: string) =>
|
|
292
|
+
recordStoreExists: (namespace?: string) => MaybePromise<boolean>;
|
|
296
293
|
};
|
|
297
294
|
readonly dispose: () => void;
|
|
298
295
|
}
|
|
@@ -518,7 +515,7 @@ declare class Sync {
|
|
|
518
515
|
private readonly confirmTasks;
|
|
519
516
|
private readonly confirmDeletion;
|
|
520
517
|
private readonly executeSync;
|
|
521
|
-
private convertDeleteToUpload;
|
|
518
|
+
private readonly convertDeleteToUpload;
|
|
522
519
|
root: {
|
|
523
520
|
executeSync: (trigger: string) => Promise<{
|
|
524
521
|
result: 'cancelled';
|
|
@@ -548,6 +545,7 @@ declare class Observability {
|
|
|
548
545
|
private readonly progressText;
|
|
549
546
|
readonly settings: {
|
|
550
547
|
noticeStatusOnMobile: boolean;
|
|
548
|
+
exportLogsDirectory: string;
|
|
551
549
|
};
|
|
552
550
|
readonly i18n: {
|
|
553
551
|
startSync: string;
|
|
@@ -799,14 +797,13 @@ type ControlsSettingTranslations = {
|
|
|
799
797
|
//#region src/settings/development.d.ts
|
|
800
798
|
type DevelopmentSettingTranslations = {
|
|
801
799
|
development: string;
|
|
802
|
-
vaultRecordsCleared: string;
|
|
803
|
-
clearVaultRecords: string;
|
|
804
|
-
clearAllRecords: string;
|
|
805
|
-
allRecordsCleared: string;
|
|
806
800
|
clearRecords: string;
|
|
801
|
+
recordsCleared: string;
|
|
802
|
+
clear: string;
|
|
807
803
|
clearRecordsDescription: string;
|
|
808
804
|
export: string;
|
|
809
805
|
exportLogsDescription: string;
|
|
806
|
+
exportLogsDirectoryPlaceholder: string;
|
|
810
807
|
exportLogsToFile: string;
|
|
811
808
|
};
|
|
812
809
|
//#endregion
|
|
@@ -911,6 +908,8 @@ declare class Bootstrap {
|
|
|
911
908
|
private remoteFs?;
|
|
912
909
|
readonly i18n: {
|
|
913
910
|
bidirectional: string;
|
|
911
|
+
mirrorLocal: string;
|
|
912
|
+
mirrorRemote: string;
|
|
914
913
|
latestSurvive: string;
|
|
915
914
|
keepLocal: string;
|
|
916
915
|
keepRemote: string;
|
|
@@ -953,20 +952,18 @@ declare class Bootstrap {
|
|
|
953
952
|
//#region src/components/module-management/index.d.ts
|
|
954
953
|
type ModuleManagementTranslations = {
|
|
955
954
|
disableModule: string;
|
|
956
|
-
disabled: string;
|
|
957
955
|
downloadModule: string;
|
|
958
956
|
enableModule: string;
|
|
959
|
-
enabled: string;
|
|
960
957
|
installed: string;
|
|
961
958
|
loadingModules: string;
|
|
962
959
|
noInstalledModulesFound: string;
|
|
963
960
|
noMatchingModulesFound: string;
|
|
964
961
|
noModulesAvailable: string;
|
|
965
|
-
notInstalled: string;
|
|
966
962
|
updateAvailable: string;
|
|
967
963
|
updateModule: string;
|
|
968
964
|
deleteModule: string;
|
|
969
965
|
editModuleInformation: string;
|
|
966
|
+
official: string;
|
|
970
967
|
};
|
|
971
968
|
//#endregion
|
|
972
969
|
//#region src/components/SourceEditorModal.d.ts
|
|
@@ -1058,7 +1055,7 @@ declare class ProgressModal extends Modal {
|
|
|
1058
1055
|
completed: string;
|
|
1059
1056
|
failedTasksDescription: string;
|
|
1060
1057
|
confirmDeleteDescription: string;
|
|
1061
|
-
confirmTasksDescription:
|
|
1058
|
+
confirmTasksDescription: Fragment;
|
|
1062
1059
|
hide: string;
|
|
1063
1060
|
confirm: string;
|
|
1064
1061
|
cancel: string;
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"./plugin/src/
|
|
1
|
+
import{pipe as e,readWithSize as t,writeWithValue as n}from"./plugin/src/utils/pipe.js";import r from"./plugin/src/components/MigrationModal.js";import i from"./prefix.js";function a(e){let t=e;for(;`original`in t;)t=t.original;return t}export{a as digOriginal,e as pipe,i as prefixWrapper,t as readWithSize,r as setNeedMigration,n as writeWithValue};
|
package/dist/index.spec.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $ as TranslationResource, A as SyncTerminateReason, B as MoveRemote, C as SelectFromContext, Ct as FolderStat, D as writeWithValue, Dt as RecordStatsMap, E as readWithSize, Et as RecordStat, F as Upload, G as BaseTask, H as Download, I as ResolveConflict, J as TaskNames, K as ConflictResolver, L as RemoveRemote, M as Decider, N as DeciderInput, O as prefixWrapper, Ot as Stat, P as TaskFactory, Q as Translate, R as RemoveRecord, S as ModuleMeta, St as FileStat, T as pipe, Tt as Progress, U as CreateRemoteDir, V as MoveLocal, W as AddRecord, X as Fragment, Y as RecordStore, Z as ObsidianLanguageCode, _ as Events, _t as OutputAtom, a as FsWrapperEntry, at as StoreOperations, b as ExistingMemoryDB, bt as WriteAtom, c as RemoteFsEntry, ct as CustomAtom, d as RemoteRequestMiddlewareEntry, dt as InputAtom, et as Dispatch, f as Request, ft as ListReporter, g as Context, gt as OptimizerOutput, h as SettingEntry, ht as OptimizerInput, i as DeciderEntry, it as StoreAsync, j as CreateLocalDir, k as setNeedMigration, kt as StatsMap, l as RemoteLister, lt as DeleteAtom, m as RequestResponse, mt as MoveAtom, n as CheckConnectionResult, nt as DatabaseAsync, o as LocalRequestMiddlewareEntry, ot as StoreSync, p as RequestParam, pt as MkdirAtom, q as ConflictResolverPayload, r as ConflictResolverEntry, rt as DatabaseSync, s as OptimizerEntry, st as BatchOptimizer, t as VaultRequest, tt as On, u as RemoteListerEntry, ut as Fs, v as Settings, vt as RootFs, w as digOriginal, wt as MaybePromise, x as AugmentedModuleMeta, xt as Binary, y as Translations, yt as WrappedFs, z as RemoveLocal } from "./index-
|
|
1
|
+
import { $ as TranslationResource, A as SyncTerminateReason, B as MoveRemote, C as SelectFromContext, Ct as FolderStat, D as writeWithValue, Dt as RecordStatsMap, E as readWithSize, Et as RecordStat, F as Upload, G as BaseTask, H as Download, I as ResolveConflict, J as TaskNames, K as ConflictResolver, L as RemoveRemote, M as Decider, N as DeciderInput, O as prefixWrapper, Ot as Stat, P as TaskFactory, Q as Translate, R as RemoveRecord, S as ModuleMeta, St as FileStat, T as pipe, Tt as Progress, U as CreateRemoteDir, V as MoveLocal, W as AddRecord, X as Fragment, Y as RecordStore, Z as ObsidianLanguageCode, _ as Events, _t as OutputAtom, a as FsWrapperEntry, at as StoreOperations, b as ExistingMemoryDB, bt as WriteAtom, c as RemoteFsEntry, ct as CustomAtom, d as RemoteRequestMiddlewareEntry, dt as InputAtom, et as Dispatch, f as Request, ft as ListReporter, g as Context, gt as OptimizerOutput, h as SettingEntry, ht as OptimizerInput, i as DeciderEntry, it as StoreAsync, j as CreateLocalDir, k as setNeedMigration, kt as StatsMap, l as RemoteLister, lt as DeleteAtom, m as RequestResponse, mt as MoveAtom, n as CheckConnectionResult, nt as DatabaseAsync, o as LocalRequestMiddlewareEntry, ot as StoreSync, p as RequestParam, pt as MkdirAtom, q as ConflictResolverPayload, r as ConflictResolverEntry, rt as DatabaseSync, s as OptimizerEntry, st as BatchOptimizer, t as VaultRequest, tt as On, u as RemoteListerEntry, ut as Fs, v as Settings, vt as RootFs, w as digOriginal, wt as MaybePromise, x as AugmentedModuleMeta, xt as Binary, y as Translations, yt as WrappedFs, z as RemoveLocal } from "./index-BJDjAUwk.spec.js";
|
|
2
2
|
export { type AddRecord, type AugmentedModuleMeta, type BaseTask, type BatchOptimizer, type Binary, type CheckConnectionResult, type ConflictResolver, type ConflictResolverEntry, type ConflictResolverPayload, type Context, type CreateLocalDir, type CreateRemoteDir, type CustomAtom, type DatabaseAsync, type DatabaseSync, type Decider, type DeciderEntry, type DeciderInput, type DeleteAtom, type Dispatch, type Download, type Events, type ExistingMemoryDB, type FileStat, type FolderStat, type Fragment, type Fs, type FsWrapperEntry, type InputAtom, type ListReporter, type LocalRequestMiddlewareEntry, type MaybePromise, type MkdirAtom, type ModuleMeta, type MoveAtom, type MoveLocal, type MoveRemote, type ObsidianLanguageCode, type On, type OptimizerEntry, type OptimizerInput, type OptimizerOutput, type OutputAtom, type Progress, type RecordStat, type RecordStatsMap, type RecordStore, type RemoteFsEntry, type RemoteLister, type RemoteListerEntry, type RemoteRequestMiddlewareEntry, type RemoveLocal, type RemoveRecord, type RemoveRemote, type Request, type RequestParam, type RequestResponse, type ResolveConflict, type RootFs, SelectFromContext, type SettingEntry, type Settings, type Stat, type StatsMap, type StoreAsync, type StoreOperations, type StoreSync, type SyncTerminateReason, type TaskFactory, type TaskNames, type Translate, type TranslationResource, type Translations, type Upload, type VaultRequest, type WrappedFs, type WriteAtom, digOriginal, pipe, prefixWrapper, readWithSize, setNeedMigration, writeWithValue };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e){let t=e,n=[t.status,t.res?.status,t.response?.status];for(let e of n)if(typeof e==`number`)return e}const t=2.5*1024**2;async function n({from:e,to:t,stat:n,key:a}){let o=await r(e,a,n);if(o)return i(t,a,o,n)}async function r(e,n,r){try{return r.size>t?await e.readStream(n,r):await e.read(n,r)}catch(e){if(a(e))return;throw e}}function i(e,t,n,r){return n instanceof ReadableStream?e.writeStream(t,n,r):e.write(t,n,r)}function a(t){return e(t)===404||(t.message??String(t)).toLocaleUpperCase().includes(`ENOENT`)}export{r as n,i as r,n as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"./render-progress.js";import t from"../utils/round-percent.js";import n from"../utils/to-error-message.js";import{Modal as r,Notice as i,Setting as a}from"obsidian";var o=class extends r{ctx;options;cleanupCallbacks=[];constructor(e,t){super(e.app),this.ctx=e,this.options=t}onOpen(){let{contentEl:e,options:{content:t,apply:n}}=this,{translate:r}=this.ctx;e.empty(),e.addClass(`markdown-rendered`),this.setTitle(r(`remoteMigration`)),typeof t==`string`?e.createEl(`p`,{cls:`whitespace-pre-wrap`,text:t}):e.append(t),e.createEl(`p`,{cls:`whitespace-pre-wrap`,text:r(`migrationDescription`)}),new a(e).addButton(e=>e.setButtonText(r(`cancel`)).onClick(this.close.bind(this))).addButton(e=>e.setButtonText(r(`toggleWithoutMigration`)).onClick(async()=>{await n(),this.close()})).addButton(e=>e.setButtonText(r(`startMigration`)).setCta().onClick(this.handleMigration))}handleMigration=()=>{let{on:n,translate:r,dispatch:i}=this.ctx;this.contentEl.empty(),this.setTitle(r(`migrationProcess`));let{left:o,right:s,bar:c}=e(this.contentEl,`mb-3`),l,u=e=>{l?.remove(),l=new a(this.contentEl).addButton(t=>t.setButtonText(r(e)).onClick(this.close.bind(this))).settingEl};u(`hide`),this.cleanupCallbacks.push(n(`migrationProgress`,({total:e,completed:n,current:a})=>{n===0&&i(`logGeneral`,`Migration started.`);let l=t(n,e);s.setText(`${n}/${e} ${r(`completed`)}`),a&&o.setText(a),c.setValue(l),l===100&&u(`done`)}),n(`migrationFailed`,()=>{i(`errorGeneral`,`Migration failed.`),o.setText(r(`migrationFailed`)),u(`done`)})),this.migrate()};migrate=async()=>{let{dispatch:e,requestSync:t,initializeSync:r,translate:a,memoryDB:o}=this.ctx;e(`migrationProgress`,{completed:0,current:a(`migrationPhase1Description`),total:3});let s=(await t(`migration`)).result;if(s===`cancelled`||s===`failed`){e(`migrationFailed`,`phase 1 failed`);return}e(`migrationProgress`,{completed:1,current:a(`migrationPhase2Description`),total:3});try{let{record:e,remoteFs:t}=r();await Promise.all([e.clear(),this.options.apply(),...o.getStore(`remoteContext20000`).entries().sort(([e],[t])=>t.length-e.length).map(([e])=>t.delete(e))])}catch(t){let r=n(t);new i(`${a(`migrationFailed`)}: ${r}`),e(`migrationFailed`,r);return}e(`migrationProgress`,{completed:2,current:a(`migrationPhase3Description`),total:3});let c=(await t(`migration`)).result;if(c===`cancelled`||c===`failed`){e(`migrationFailed`,`phase 3 failed`);return}e(`migrationProgress`,{completed:3,current:a(`completed`),total:3})};onClose(){this.cleanupCallbacks.splice(0).forEach(e=>e()),this.contentEl.empty()}};function s(e,{toggle:t,needMigration:n,content:r,apply:i}){let a=!1;t.onChange(s=>{if(a){a=!1;return}
|
|
1
|
+
import e from"./render-progress.js";import t from"../utils/round-percent.js";import n from"../utils/to-error-message.js";import{Modal as r,Notice as i,Setting as a}from"obsidian";var o=class extends r{ctx;options;cleanupCallbacks=[];constructor(e,t){super(e.app),this.ctx=e,this.options=t}onOpen(){let{contentEl:e,options:{content:t,apply:n}}=this,{translate:r}=this.ctx;e.empty(),e.addClass(`markdown-rendered`),this.setTitle(r(`remoteMigration`)),typeof t==`string`?e.createEl(`p`,{cls:`whitespace-pre-wrap`,text:t}):e.append(t),e.createEl(`p`,{cls:`whitespace-pre-wrap`,text:r(`migrationDescription`)}),new a(e).addButton(e=>e.setButtonText(r(`cancel`)).onClick(this.close.bind(this))).addButton(e=>e.setButtonText(r(`toggleWithoutMigration`)).onClick(async()=>{await n(),this.close()})).addButton(e=>e.setButtonText(r(`startMigration`)).setCta().onClick(this.handleMigration))}handleMigration=()=>{let{on:n,translate:r,dispatch:i}=this.ctx;this.contentEl.empty(),this.setTitle(r(`migrationProcess`));let{left:o,right:s,bar:c}=e(this.contentEl,`mb-3`),l,u=e=>{l?.remove(),l=new a(this.contentEl).addButton(t=>t.setButtonText(r(e)).onClick(this.close.bind(this))).settingEl};u(`hide`),this.cleanupCallbacks.push(n(`migrationProgress`,({total:e,completed:n,current:a})=>{n===0&&i(`logGeneral`,`Migration started.`);let l=t(n,e);s.setText(`${n}/${e} ${r(`completed`)}`),a&&o.setText(a),c.setValue(l),l===100&&u(`done`)}),n(`migrationFailed`,()=>{i(`errorGeneral`,`Migration failed.`),o.setText(r(`migrationFailed`)),u(`done`)})),this.migrate()};migrate=async()=>{let{dispatch:e,requestSync:t,initializeSync:r,translate:a,memoryDB:o}=this.ctx;e(`migrationProgress`,{completed:0,current:a(`migrationPhase1Description`),total:3});let s=(await t(`migration`)).result;if(s===`cancelled`||s===`failed`){e(`migrationFailed`,`phase 1 failed`);return}e(`migrationProgress`,{completed:1,current:a(`migrationPhase2Description`),total:3});try{let{record:e,remoteFs:t}=r();await Promise.all([e.clear(),this.options.apply(),...o.getStore(`remoteContext20000`).entries().sort(([e],[t])=>t.length-e.length).map(([e])=>t.delete(e))])}catch(t){let r=n(t);new i(`${a(`migrationFailed`)}: ${r}`),e(`migrationFailed`,r);return}e(`migrationProgress`,{completed:2,current:a(`migrationPhase3Description`),total:3});let c=(await t(`migration`)).result;if(c===`cancelled`||c===`failed`){e(`migrationFailed`,`phase 3 failed`);return}e(`migrationProgress`,{completed:3,current:a(`completed`),total:3})};onClose(){this.cleanupCallbacks.splice(0).forEach(e=>e()),this.contentEl.empty()}};function s(e,{toggle:t,needMigration:n,content:r,apply:i}){let a=!1;t.onChange(s=>{if(a){a=!1;return}let c=async n=>{n?(a=!0,t.setValue(!s),new o(e,{apply:async()=>{await i(s),a=!0,t.setValue(s)},content:r(s)}).open()):await i(s)},l=n?.(s)??!0;l instanceof Promise?l.then(c):c(l)})}export{s as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"../tasks/CreateLocalDir.js";import t from"../tasks/CreateRemoteDir.js";import n from"../tasks/Download.js";import r from"../tasks/Upload.js";import i from"../tasks/RemoveLocal.js";import a from"../tasks/RemoveRemote.js";import o from"../tasks/AddRecord.js";import s from"../tasks/RemoveRecord.js";import c from"../tasks/ResolveConflict.js";import l from"../tasks/MoveLocal.js";import u from"../tasks/MoveRemote.js";const d={addRecord:o,createLocalDir:e,createRemoteDir:t,download:n,moveLocal:l,moveRemote:u,removeLocal:i,removeRecord:s,removeRemote:a,resolveConflict:c,upload:r};export{d as taskMap};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BaseTask as e}from"./interface.js";var t=class extends e{async exec(){await this.record.set(this.key,n(this.local,this.remote))}};function n(e,t){return!e.isDir&&!t.isDir?{isDir:!1,local:e.uid,remote:t.uid}:{isDir:!0}}export{t as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BaseTask as e}from"./interface.js";var t=class extends e{async exec(){await this.localFs.mkdir(this.key),await this.record.set(this.key,{isDir:!0})}};export{t as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BaseTask as e}from"./interface.js";var t=class extends e{async exec(){await this.remoteFs.mkdir(this.key),await this.record.set(this.key,{isDir:!0})}};export{t as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BaseTask as e}from"./interface.js";import{pipe as t}from"../../utils/pipe.js";var n=class extends e{async exec(){let{remote:e,record:n,remoteFs:r,localFs:i,key:a}=this,o=await t({from:r,key:a,stat:e,to:i});o&&await n.set(a,{isDir:!1,local:o,remote:e.uid})}};export{n as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BaseTask as e}from"./interface.js";import t from"../../utils/move-value.js";var n=class extends e{async exec(){let{key:e,oldKey:n}=this.options;await this.localFs.move(n,e),await t({newKey:e,oldKey:n,store:this.record})}};export{n as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BaseTask as e}from"./interface.js";import t from"../../utils/move-value.js";var n=class extends e{async exec(){let{key:e,oldKey:n}=this.options;await this.remoteFs.move(n,e),await t({newKey:e,oldKey:n,store:this.record})}};export{n as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BaseTask as e}from"./interface.js";var t=class extends e{async exec(){await this.localFs.delete(this.key),await this.record.delete(this.key)}};export{t as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BaseTask as e}from"./interface.js";var t=class extends e{async exec(){await this.record.delete(this.key)}};export{t as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BaseTask as e}from"./interface.js";var t=class extends e{async exec(){await this.remoteFs.delete(this.key),await this.record.delete(this.key)}};export{t as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BaseTask as e}from"./interface.js";var t=class extends e{exec=()=>this.options.resolver({key:this.key,local:this.local,localFs:this.localFs,record:this.record,remote:this.remote,remoteFs:this.remoteFs})};export{t as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BaseTask as e}from"./interface.js";import{pipe as t}from"../../utils/pipe.js";var n=class extends e{async exec(){let{local:e,record:n,remoteFs:r,localFs:i,key:a}=this,o=await t({from:i,key:a,stat:e,to:r});o&&await n.set(a,{isDir:!1,local:e.uid,remote:o})}};export{n as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=class{options;constructor(e){this.options=e,this.remoteFs=e.remoteFs,this.localFs=e.localFs,this.record=e.record,this.key=e.key,this.local=e.local,this.remote=e.remote}remoteFs;localFs;record;key;local;remote};export{e as BaseTask};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
async function e({store:e,newKey:t,oldKey:n}){let r=await e.get(n);r!==void 0&&await e.batch([{key:t,type:`set`,value:r},{key:n,type:`delete`}])}export{e as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
import{taskMap as e}from"../src/sync/decision/interface.js";const t=new TextEncoder;function n(e){return t.encode(e)}function r(e,t={}){let{mtime:n=1,size:r=5,uid:i=`${e}-uid`}=t;return{isDir:!1,key:e,mtime:n,size:r,uid:i}}function i(e){return{isDir:!0,key:e}}function a(e,t){return{isDir:!1,local:e,remote:t}}function o(){return{isDir:!0}}function s(t,n){let r=n.localStats??new Map,i=n.remoteStats??new Map,a=n.records??new Map,o=[];return t({localStats:r,logger:()=>{},records:a,remoteStats:i,taskFactory:((t,n)=>{let r=e[t],i=new r({...n,localFs:{},record:{},remoteFs:{}});return i.name=t,i.prettyName=t,o.push({key:n.key,name:t,...n.local!==void 0&&{local:n.local},...n.remote!==void 0&&{remote:n.remote}}),i})}),o}function c(e){return e.map(e=>e.name)}function l(e){return e.map(e=>e.key)}function u(e,t){let n=e.filter(e=>e.key===t);if(n.length!==1)throw Error(`Expected one task for ${t}, found ${n.length}.`);return n[0]}function d(e){return e===`/`||e.endsWith(`/`)?i(e):r(e,{mtime:10,size:5,uid:`uid`})}function f(e=[]){return new ReadableStream({start(t){for(let r of e)t.enqueue(typeof r==`string`?n(r):r);t.close()}})}function p(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),reject:t,resolve:e}}async function m(e=4){for(let t=0;t<e;t+=1)await new Promise(e=>{queueMicrotask(e)})}function h(){return{delete:[],exists:[],list:[],mkdir:[],move:[],read:[],readStream:[],stat:[],write:[],writeStream:[]}}function g(e={}){return{delete:()=>{},exists:()=>!1,getUid:()=>`FsControl`,list:e=>[d(e),i(`${e}folder/`),r(`${e}folder/note.md`,{mtime:12,size:7,uid:`note-2`})],mkdir:()=>{},move:()=>{},read:()=>n(``),readStream:()=>f(),stat:e=>d(e),write:()=>`write-uid`,writeStream:()=>`stream-uid`,...e}}function _(e){let t=[];return{calls:t,request:n=>(t.push(n),e(n))}}function v(e={}){let t=h(),n=g(e.control),r=e.uid??`uid`;return{calls:t,control:n,fs:{delete:e=>(t.delete.push(e),n.delete(e)),exists:e=>(t.exists.push(e),n.exists(e)),getUid:()=>r,list:(e,r)=>(t.list.push(e),n.list(e,r)),mkdir:(e,r)=>(t.mkdir.push(e),n.mkdir(e,r)),move:(e,r)=>(t.move.push([e,r]),n.move(e,r)),read:(e,r)=>(t.read.push([e,r]),n.read(e,r)),readStream:(e,r)=>(t.readStream.push([e,r]),n.readStream(e,r)),stat:e=>(t.stat.push(e),n.stat(e)),write:(e,r,i)=>(t.write.push([e,r,i]),n.write(e,r,i)),writeStream:(e,r,i)=>(t.writeStream.push([e,i]),n.writeStream(e,r,i))}}}const y={bytes:n,deferred:p,file:r,fileRecord:a,findTask:u,flush:m,folder:i,folderRecord:o,fs:v,request:_,runDecider:s,stream:f,taskKeys:l,taskNames:c};export{y as default};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hesprs/sync-engine-sdk",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.6",
|
|
4
4
|
"description": "Official SDK for developing modules targeting Sync Engine, the extensible Obsidian syncing plugin.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"obsidian-plugin",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@repo/shared": "workspace:*",
|
|
58
58
|
"@unocss/postcss": "^66.7.5",
|
|
59
|
-
"postcss-merge-rules": "^8.0.
|
|
59
|
+
"postcss-merge-rules": "^8.0.3",
|
|
60
60
|
"solid-js": "^1.9.13",
|
|
61
61
|
"synthkernel": "./synthkernel.tgz",
|
|
62
62
|
"uni-kv": "../../uni-kv.tgz",
|