@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.
@@ -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-3gsR9vHT.spec.js";
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<GlobMatchResult>;
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) => Promise<void>;
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) => Promise<boolean>;
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: string;
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/components/MigrationModal.js";import t from"./prefix.js";import{pipe as n,readWithSize as r,writeWithValue as i}from"./plugin/src/utils/pipe.js";function a(e){let t=e;for(;`original`in t;)t=t.original;return t}export{a as digOriginal,n as pipe,t as prefixWrapper,r as readWithSize,e as setNeedMigration,i as writeWithValue};
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};
@@ -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-3gsR9vHT.spec.js";
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}Promise.resolve(n?.(s)??!0).then(n=>{n?(a=!0,t.setValue(!s),new o(e,{apply:async()=>{await i(s),a=!0,t.setValue(s)},content:r(s)}).open()):i(s)})})}export{s as default};
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 e=new TextEncoder;function t(t){return e.encode(t)}function n(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 r(e){return{isDir:!0,key:e}}function i(e){return e===`/`||e.endsWith(`/`)?r(e):n(e,{mtime:10,size:5,uid:`uid`})}function a(e=[]){return new ReadableStream({start(n){for(let r of e)n.enqueue(typeof r==`string`?t(r):r);n.close()}})}function o(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),reject:t,resolve:e}}async function s(e=4){for(let t=0;t<e;t+=1)await new Promise(e=>{queueMicrotask(e)})}function c(){return{delete:[],exists:[],list:[],mkdir:[],move:[],read:[],readStream:[],stat:[],write:[],writeStream:[]}}function l(e={}){return{delete:()=>{},exists:()=>!1,getUid:()=>`FsControl`,list:e=>[i(e),r(`${e}folder/`),n(`${e}folder/note.md`,{mtime:12,size:7,uid:`note-2`})],mkdir:()=>{},move:()=>{},read:()=>t(``),readStream:()=>a(),stat:e=>i(e),write:()=>`write-uid`,writeStream:()=>`stream-uid`,...e}}function u(e){let t=[];return{calls:t,request:n=>(t.push(n),e(n))}}function d(e={}){let t=c(),n=l(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 f={bytes:t,deferred:o,file:n,flush:s,folder:r,fs:d,request:u,stream:a};export{f as default};
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.2",
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.2",
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",