@hesprs/sync-engine-sdk 3.0.3 → 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-M1OI9qC7.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
  };
@@ -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;
@@ -805,6 +803,7 @@ type DevelopmentSettingTranslations = {
805
803
  clearRecordsDescription: string;
806
804
  export: string;
807
805
  exportLogsDescription: string;
806
+ exportLogsDirectoryPlaceholder: string;
808
807
  exportLogsToFile: string;
809
808
  };
810
809
  //#endregion
@@ -909,6 +908,8 @@ declare class Bootstrap {
909
908
  private remoteFs?;
910
909
  readonly i18n: {
911
910
  bidirectional: string;
911
+ mirrorLocal: string;
912
+ mirrorRemote: string;
912
913
  latestSurvive: string;
913
914
  keepLocal: string;
914
915
  keepRemote: string;
@@ -951,20 +952,18 @@ declare class Bootstrap {
951
952
  //#region src/components/module-management/index.d.ts
952
953
  type ModuleManagementTranslations = {
953
954
  disableModule: string;
954
- disabled: string;
955
955
  downloadModule: string;
956
956
  enableModule: string;
957
- enabled: string;
958
957
  installed: string;
959
958
  loadingModules: string;
960
959
  noInstalledModulesFound: string;
961
960
  noMatchingModulesFound: string;
962
961
  noModulesAvailable: string;
963
- notInstalled: string;
964
962
  updateAvailable: string;
965
963
  updateModule: string;
966
964
  deleteModule: string;
967
965
  editModuleInformation: string;
966
+ official: string;
968
967
  };
969
968
  //#endregion
970
969
  //#region src/components/SourceEditorModal.d.ts
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-M1OI9qC7.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};
@@ -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.3",
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",