@hesprs/sync-engine-sdk 3.1.8 → 3.1.9

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 { At as FileStat, Dt as RootFs, Ft as RecordStatsMap, It as Stat, Lt as StatsMap, Ot as WrappedFs, Pt as RecordStat, Rt as Binary, d as RequestParam, jt as FolderStat, lt as TaskNames, q as Decider, u as Request, yt as Fs } from "./index-CC4NddoN.spec.js";
1
+ import { At as FileStat, Dt as RootFs, Ft as RecordStatsMap, It as Stat, Lt as StatsMap, Mt as MaybePromise, Ot as WrappedFs, Pt as RecordStat, Rt as Binary, d as RequestParam, f as RequestResponse, jt as FolderStat, lt as TaskNames, q as Decider, u as Request, yt as Fs } from "./index-DbHTJm2U.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
@@ -24,8 +24,11 @@ type FsHarness = {
24
24
  control: Fs;
25
25
  fs: RootFs;
26
26
  };
27
+ type ResponseControl = (url: string, params: RequestParam) => MaybePromise<ResponseOverrides>;
27
28
  type RequestHarness = {
28
- calls: Array<RequestParam | string>;
29
+ calls: Array<RequestParam & {
30
+ url: string;
31
+ }>;
29
32
  request: Request;
30
33
  };
31
34
  type ExtractedTask = {
@@ -58,7 +61,10 @@ declare function deferred<T>(): {
58
61
  resolve: (value: T | PromiseLike<T>) => void;
59
62
  };
60
63
  declare function flush(turns?: number): Promise<void>;
61
- declare function request(control: Request): RequestHarness;
64
+ type ResponseOverrides = Partial<Omit<RequestResponse, 'json'>> & {
65
+ json?: () => unknown;
66
+ };
67
+ declare function request(control: ResponseControl): RequestHarness;
62
68
  declare function fs(options?: FsOptions): FsHarness;
63
69
  declare const testKit: {
64
70
  bytes: typeof bytes;
@@ -1138,6 +1138,9 @@ type Events = MergeSingleKey<InternalModules, 'events'>;
1138
1138
  type Settings = MergeSingleKey<InternalModules, 'settings'>;
1139
1139
  type Translations = MergeSingleKey<InternalModules, 'i18n'>;
1140
1140
  //#endregion
1141
+ //#region src/utils/glob-match.d.ts
1142
+ type GlobMatchResult = 'include' | 'exclude' | 'advance' | 'probe';
1143
+ //#endregion
1141
1144
  //#region src/modules/Sync.d.ts
1142
1145
  type SyncTerminateReason = {
1143
1146
  result: 'cancelled';
@@ -1186,6 +1189,9 @@ declare class Sync {
1186
1189
  isCancelled: Ref<boolean>;
1187
1190
  trigger: string;
1188
1191
  };
1192
+ syncInitialized: Infras & {
1193
+ match: (path: string) => GlobMatchResult;
1194
+ };
1189
1195
  remoteWalkProgress: Progress;
1190
1196
  syncTerminated: SyncTerminateReason;
1191
1197
  requestConfirmDelete: Array<RemoveLocal>;
@@ -1249,22 +1255,23 @@ type TriggerEntry = {
1249
1255
  priority: number;
1250
1256
  options?: () => SyncOptions;
1251
1257
  };
1252
- type RequestParam = Omit<RequestUrlParam, 'body'> & {
1258
+ type Infras = {
1259
+ localFs: Fs;
1260
+ remoteFs: Fs;
1261
+ record: RecordStore;
1262
+ };
1263
+ type RequestParam = Omit<RequestUrlParam, 'body' | 'url'> & {
1253
1264
  body?: string | Binary;
1265
+ ignoreCancellation?: boolean;
1254
1266
  };
1255
1267
  type RequestResponse = {
1256
1268
  text: () => string;
1257
1269
  bytes: () => Binary;
1258
- json: () => General$1;
1270
+ json: <T extends object = object>() => T;
1259
1271
  headers: Record<string, string>;
1260
1272
  status: number;
1261
1273
  };
1262
- type Request = (params: RequestParam | string) => Promise<RequestResponse>;
1263
- type Infras = {
1264
- localFs: Fs;
1265
- remoteFs: Fs;
1266
- record: RecordStore;
1267
- };
1274
+ type Request = (url: string, params?: RequestParam) => Promise<RequestResponse>;
1268
1275
  declare class Registrar {
1269
1276
  private readonly ctx;
1270
1277
  private readonly cleanupCallbacks;
@@ -1334,47 +1341,39 @@ declare class Registrar {
1334
1341
  }
1335
1342
  //#endregion
1336
1343
  //#region src/fs/vault/request.d.ts
1337
- type VaultRequestParam = {
1344
+ type VaultRequestParam = ({
1338
1345
  method: 'GET';
1339
- key: string;
1340
1346
  } | {
1341
1347
  method: 'GET_STREAM';
1342
- key: string;
1343
1348
  size: number;
1344
1349
  } | {
1345
1350
  method: 'PUT';
1346
- key: string;
1347
1351
  value: Binary;
1348
1352
  mtime?: number;
1349
1353
  ctime?: number;
1350
1354
  } | {
1351
1355
  method: 'APPEND';
1352
- key: string;
1353
1356
  value: Binary;
1354
1357
  mtime?: number;
1355
1358
  ctime?: number;
1356
1359
  } | {
1357
1360
  method: 'DELETE';
1358
- key: string;
1359
1361
  trash?: TrashOption;
1360
1362
  } | {
1361
1363
  method: 'MOVE';
1362
- key: string;
1363
1364
  destination: string;
1364
1365
  } | {
1365
1366
  method: 'MKDIR';
1366
- key: string;
1367
1367
  } | {
1368
1368
  method: 'EXISTS';
1369
- key: string;
1370
1369
  } | {
1371
1370
  method: 'STAT';
1372
- key: string;
1373
1371
  cached?: boolean;
1374
1372
  } | {
1375
1373
  method: 'LIST';
1376
- key: string;
1377
1374
  cached?: boolean;
1375
+ }) & {
1376
+ ignoreCancellation?: boolean;
1378
1377
  };
1379
1378
  type VaultRequestResponseMap = {
1380
1379
  GET: Binary;
@@ -1388,7 +1387,9 @@ type VaultRequestResponseMap = {
1388
1387
  STAT: Stat;
1389
1388
  LIST: ListedFiles;
1390
1389
  };
1391
- type VaultRequest = <T extends VaultRequestParam>(params: T) => Promise<VaultRequestResponseMap[T['method']]>;
1390
+ type VaultRequest = <T extends VaultRequestParam = {
1391
+ method: 'GET';
1392
+ }>(key: string, params?: T) => Promise<VaultRequestResponseMap[T['method']]>;
1392
1393
  type TrashOption = 'local' | 'system' | 'permanent';
1393
1394
  //#endregion
1394
1395
  export { RemoveRecord as $, setNeedMigration as A, FileStat as At, ObsidianLanguageCode as B, digOriginal as C, MoveAtom as Ct, readWithSize as D, RootFs as Dt, pipe as E, OutputAtom as Et, CallableOrObjectTree as F, RecordStatsMap as Ft, On as G, Translate as H, SettingEntry as I, Stat$1 as It, DeciderInput as J, CreateLocalDir as K, AugmentedModuleMeta as L, StatsMap as Lt, generateEditableList as M, MaybePromise as Mt, reactivelyValidate as N, Progress as Nt, writeWithValue as O, WrappedFs as Ot, s as P, RecordStat as Pt, RemoveRemote as Q, ModuleMeta as R, Binary as Rt, SelectFromContext as S, MkdirAtom as St, concurrency as T, OptimizerOutput as Tt, TranslationResource as U, Snippet as V, Dispatch as W, Upload as X, TaskFactory as Y, ResolveConflict as Z, Context as _, CustomAtom as _t, FsWrapperEntry as a, AddRecord as at, Translations as b, InputAtom as bt, RemoteFsEntry as c, ConflictResolverPayload as ct, RequestParam as d, DatabaseAsync as dt, RemoveLocal as et, RequestResponse as f, DatabaseSync as ft, SyncTerminateReason as g, BatchOptimizer as gt, SyncOptions as h, StoreSync as ht, DeciderEntry as i, CreateRemoteDir as it, LabelDefinition as j, FolderStat as jt, prefixWrapper as k, WriteAtom as kt, RemoteRequestMiddlewareEntry as l, TaskNames as lt, RemoteLister as m, StoreOperations as mt, CheckConnectionResult as n, MoveLocal as nt, LocalRequestMiddlewareEntry as o, BaseTask as ot, TriggerEntry as p, StoreAsync as pt, Decider as q, ConflictResolverEntry as r, Download as rt, OptimizerEntry as s, ConflictResolver as st, VaultRequest as t, MoveRemote as tt, Request as u, RecordStore as ut, Events as v, DeleteAtom as vt, chunkSize as w, OptimizerInput as wt, ExistingMemoryDB as x, ListReporter as xt, Settings as y, Fs as yt, Fragment as z };
@@ -1,2 +1,2 @@
1
- import { $ as RemoveRecord, A as setNeedMigration, At as FileStat, B as ObsidianLanguageCode, C as digOriginal, Ct as MoveAtom, D as readWithSize, Dt as RootFs, E as pipe, Et as OutputAtom, F as CallableOrObjectTree, Ft as RecordStatsMap, G as On, H as Translate, I as SettingEntry, It as Stat, J as DeciderInput, K as CreateLocalDir, L as AugmentedModuleMeta, Lt as StatsMap, M as generateEditableList, Mt as MaybePromise, N as reactivelyValidate, Nt as Progress, O as writeWithValue, Ot as WrappedFs, P as s, Pt as RecordStat, Q as RemoveRemote, R as ModuleMeta, Rt as Binary, S as SelectFromContext, St as MkdirAtom, T as concurrency, Tt as OptimizerOutput, U as TranslationResource, V as Snippet, W as Dispatch, X as Upload, Y as TaskFactory, Z as ResolveConflict, _ as Context, _t as CustomAtom, a as FsWrapperEntry, at as AddRecord, b as Translations, bt as InputAtom, c as RemoteFsEntry, ct as ConflictResolverPayload, d as RequestParam, dt as DatabaseAsync, et as RemoveLocal, f as RequestResponse, ft as DatabaseSync, g as SyncTerminateReason, gt as BatchOptimizer, h as SyncOptions, ht as StoreSync, i as DeciderEntry, it as CreateRemoteDir, j as LabelDefinition, jt as FolderStat, k as prefixWrapper, kt as WriteAtom, l as RemoteRequestMiddlewareEntry, lt as TaskNames, m as RemoteLister, mt as StoreOperations, n as CheckConnectionResult, nt as MoveLocal, o as LocalRequestMiddlewareEntry, ot as BaseTask, p as TriggerEntry, pt as StoreAsync, q as Decider, r as ConflictResolverEntry, rt as Download, s as OptimizerEntry, st as ConflictResolver, t as VaultRequest, tt as MoveRemote, u as Request, ut as RecordStore, v as Events, vt as DeleteAtom, w as chunkSize, wt as OptimizerInput, x as ExistingMemoryDB, xt as ListReporter, y as Settings, yt as Fs, z as Fragment } from "./index-CC4NddoN.spec.js";
1
+ import { $ as RemoveRecord, A as setNeedMigration, At as FileStat, B as ObsidianLanguageCode, C as digOriginal, Ct as MoveAtom, D as readWithSize, Dt as RootFs, E as pipe, Et as OutputAtom, F as CallableOrObjectTree, Ft as RecordStatsMap, G as On, H as Translate, I as SettingEntry, It as Stat, J as DeciderInput, K as CreateLocalDir, L as AugmentedModuleMeta, Lt as StatsMap, M as generateEditableList, Mt as MaybePromise, N as reactivelyValidate, Nt as Progress, O as writeWithValue, Ot as WrappedFs, P as s, Pt as RecordStat, Q as RemoveRemote, R as ModuleMeta, Rt as Binary, S as SelectFromContext, St as MkdirAtom, T as concurrency, Tt as OptimizerOutput, U as TranslationResource, V as Snippet, W as Dispatch, X as Upload, Y as TaskFactory, Z as ResolveConflict, _ as Context, _t as CustomAtom, a as FsWrapperEntry, at as AddRecord, b as Translations, bt as InputAtom, c as RemoteFsEntry, ct as ConflictResolverPayload, d as RequestParam, dt as DatabaseAsync, et as RemoveLocal, f as RequestResponse, ft as DatabaseSync, g as SyncTerminateReason, gt as BatchOptimizer, h as SyncOptions, ht as StoreSync, i as DeciderEntry, it as CreateRemoteDir, j as LabelDefinition, jt as FolderStat, k as prefixWrapper, kt as WriteAtom, l as RemoteRequestMiddlewareEntry, lt as TaskNames, m as RemoteLister, mt as StoreOperations, n as CheckConnectionResult, nt as MoveLocal, o as LocalRequestMiddlewareEntry, ot as BaseTask, p as TriggerEntry, pt as StoreAsync, q as Decider, r as ConflictResolverEntry, rt as Download, s as OptimizerEntry, st as ConflictResolver, t as VaultRequest, tt as MoveRemote, u as Request, ut as RecordStore, v as Events, vt as DeleteAtom, w as chunkSize, wt as OptimizerInput, x as ExistingMemoryDB, xt as ListReporter, y as Settings, yt as Fs, z as Fragment } from "./index-DbHTJm2U.spec.js";
2
2
  export { type AddRecord, type AugmentedModuleMeta, type BaseTask, type BatchOptimizer, type Binary, type CallableOrObjectTree, 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 LabelDefinition, 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 RemoteRequestMiddlewareEntry, type RemoveLocal, type RemoveRecord, type RemoveRemote, type Request, type RequestParam, type RequestResponse, type ResolveConflict, type RootFs, SelectFromContext, type SettingEntry, type Settings, type Snippet, type Stat, type StatsMap, type StoreAsync, type StoreOperations, type StoreSync, type SyncOptions, type SyncTerminateReason, type TaskFactory, type TaskNames, type Translate, type TranslationResource, type Translations, type TriggerEntry, type Upload, type VaultRequest, type WrappedFs, type WriteAtom, chunkSize, concurrency, digOriginal, generateEditableList, pipe, prefixWrapper, reactivelyValidate, readWithSize, s, setNeedMigration, writeWithValue };
@@ -1 +1 @@
1
- import{ref as e}from"../../../../node_modules/.bun/synthkernel@._synthkernel.tgz/node_modules/synthkernel/dist/reactive.js";import t from"./render-progress.js";import n from"../utils/round-percent.js";import r from"../utils/to-error-message.js";import{Modal as i,Notice as a,Setting as o}from"obsidian";var s=class extends i{ctx;options;cleanupCallbacks=[];completed=e(0);current=e(``);constructor(e,t){super(e.app),this.ctx=e,this.options=t,this.contentEl.addClass(`markdown-rendered`),this.setTitle(e.translate(`remoteMigration`))}onOpen(){let{contentEl:e,options:{content:t,apply:n}}=this,{translate:r}=this.ctx;e.empty(),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 o(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{current:e,completed:r,ctx:i,cleanupCallbacks:a,contentEl:s,migrate:c}=this,{translate:l,dispatch:u}=i;s.empty(),this.setTitle(l(`migrationProcess`));let{left:d,right:f,bar:p}=t(s,`mb-3`),m,h=e=>{m?.remove(),m=new o(s).addButton(t=>t.setButtonText(l(e)).onClick(()=>this.close())).settingEl};h(`hide`),a.push(r.subscribe(e=>{f.setText(`${e}/3 ${l(`completed`)}`),p.setValue(n(e,3))}),e.subscribe(e=>d.setText(e))),c().then(e=>{h(`done`),e.success||(u(`errorGeneral`,`Migration failed.`),d.setText(l(`migrationFailed`)))})};migrate=async()=>{let{current:e,completed:t,ctx:n}=this,{dispatch:i,requestSync:o,initializeSync:s,translate:c,memoryDB:l}=n,u=(e,t)=>{if(e.result===`failed`)return{reason:`Phase ${t}: ${e.error}`,success:!1};if(e.result===`cancelled`)return{reason:`Phase ${t}: sync cancelled`,success:!1}};i(`logGeneral`,`Migration started.`),t(0),e(c(`migrationPhase1Description`));let d=u(await o(`nonInteractiveManual`),1);if(d)return d;t(1),e(c(`migrationPhase2Description`));try{let{record:e,remoteFs:t}=s();await Promise.all([e.clear(),this.options.apply(),...l.getStore(`remoteContext20000`).keys().sort((e,t)=>t.length-e.length).map(e=>t.delete(e))])}catch(e){let t=r(e);return new a(`${c(`migrationFailed`)}: ${t}`),{reason:`Phase 2: ${t}`,success:!1}}return t(2),e(c(`migrationPhase3Description`)),u(await o(`migration`),3)||(t(3),e(c(`completed`)),{success:!0})};onClose(){this.cleanupCallbacks.splice(0).forEach(e=>e()),this.contentEl.empty()}};function c(e,{toggle:t,needMigration:n,content:r,apply:i}){let a=!1;t.onChange(o=>{if(a){a=!1;return}let c=async n=>{n?(a=!0,t.setValue(!o),new s(e,{apply:async()=>{await i(o),a=!0,t.setValue(o)},content:r(o)}).open()):await i(o)},l=n?.(o)??!0;l instanceof Promise?l.then(c):c(l)})}export{c as default};
1
+ import{getMessage as e}from"../../../shared/src/error.js";import{ref as t}from"../../../../node_modules/.bun/synthkernel@._synthkernel.tgz/node_modules/synthkernel/dist/reactive.js";import n from"./render-progress.js";import r from"../utils/round-percent.js";import{Modal as i,Notice as a,Setting as o}from"obsidian";var s=class extends i{ctx;options;cleanupCallbacks=[];completed=t(0);current=t(``);constructor(e,t){super(e.app),this.ctx=e,this.options=t,this.contentEl.addClass(`markdown-rendered`),this.setTitle(e.translate(`remoteMigration`))}onOpen(){let{contentEl:e,options:{content:t,apply:n}}=this,{translate:r}=this.ctx;e.empty(),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 o(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{current:e,completed:t,ctx:i,cleanupCallbacks:a,contentEl:s,migrate:c}=this,{translate:l,dispatch:u}=i;s.empty(),this.setTitle(l(`migrationProcess`));let{left:d,right:f,bar:p}=n(s,`mb-3`),m,h=e=>{m?.remove(),m=new o(s).addButton(t=>t.setButtonText(l(e)).onClick(()=>this.close())).settingEl};h(`hide`),a.push(t.subscribe(e=>{f.setText(`${e}/3 ${l(`completed`)}`),p.setValue(r(e,3))}),e.subscribe(e=>d.setText(e))),c().then(e=>{h(`done`),e.success||(u(`errorGeneral`,`Migration failed.`),d.setText(l(`migrationFailed`)))})};migrate=async()=>{let{current:t,completed:n,ctx:r}=this,{dispatch:i,requestSync:o,initializeSync:s,translate:c,memoryDB:l}=r,u=(e,t)=>{if(e.result===`failed`)return{reason:`Phase ${t}: ${e.error}`,success:!1};if(e.result===`cancelled`)return{reason:`Phase ${t}: sync cancelled`,success:!1}};i(`logGeneral`,`Migration started.`),n(0),t(c(`migrationPhase1Description`));let d=u(await o(`nonInteractiveManual`),1);if(d)return d;n(1),t(c(`migrationPhase2Description`));try{let{record:e,remoteFs:t}=s();await Promise.all([e.clear(),this.options.apply(),...l.getStore(`remoteContext20000`).keys().sort((e,t)=>t.length-e.length).map(e=>t.delete(e))])}catch(t){let n=e(t);return new a(`${c(`migrationFailed`)}: ${n}`),{reason:`Phase 2: ${n}`,success:!1}}return n(2),t(c(`migrationPhase3Description`)),u(await o(`migration`),3)||(n(3),t(c(`completed`)),{success:!0})};onClose(){this.cleanupCallbacks.splice(0).forEach(e=>e()),this.contentEl.empty()}};function c(e,{toggle:t,needMigration:n,content:r,apply:i}){let a=!1;t.onChange(o=>{if(a){a=!1;return}let c=async n=>{n?(a=!0,t.setValue(!o),new s(e,{apply:async()=>{await i(o),a=!0,t.setValue(o)},content:r(o)}).open()):await i(o)},l=n?.(o)??!0;l instanceof Promise?l.then(c):c(l)})}export{c as default};
@@ -1 +1 @@
1
- import{getStatus as e}from"../../../shared/src/get-status.js";import{STREAM_RESERVATION_SIZE as t}from"../fs/wrappers/memory-control.js";import{Platform as n}from"obsidian";function r(){let e=5*1024**2;`deviceMemory`in navigator&&typeof navigator.deviceMemory==`number`?navigator.deviceMemory<=4&&(e/=2):navigator.hardwareConcurrency<=4&&(e/=2),n.isAndroidApp&&(e/=2);let r=e*.8;return{chunkSize:r,concurrency:Math.floor(t/r),streamThreshold:e}}const{chunkSize:i,concurrency:a,streamThreshold:o}=r();async function s({from:e,to:t,stat:n,key:r}){let i=await c(e,r,n);if(i)return l(t,r,i,n)}async function c(e,t,n){try{return n.size>o?await e.readStream(t,n):await e.read(t,n)}catch(e){if(u(e))return;throw e}}function l(e,t,n,r){return n instanceof ReadableStream?e.writeStream(t,n,r):e.write(t,n,r)}function u(t){return e(t)===404||(t.message??String(t)).toLocaleUpperCase().includes(`ENOENT`)}export{i as chunkSize,a as concurrency,s as pipe,c as readWithSize,l as writeWithValue};
1
+ import{getStatus as e}from"../../../shared/src/error.js";import{STREAM_RESERVATION_SIZE as t}from"../fs/wrappers/memory-control.js";import{Platform as n}from"obsidian";function r(){let e=5*1024**2;`deviceMemory`in navigator&&typeof navigator.deviceMemory==`number`?navigator.deviceMemory<=4&&(e/=2):navigator.hardwareConcurrency<=4&&(e/=2),n.isAndroidApp&&(e/=2);let r=e*.8;return{chunkSize:r,concurrency:Math.floor(t/r),streamThreshold:e}}const{chunkSize:i,concurrency:a,streamThreshold:o}=r();async function s({from:e,to:t,stat:n,key:r}){let i=await c(e,r,n);if(i)return l(t,r,i,n)}async function c(e,t,n){try{return n.size>o?await e.readStream(t,n):await e.read(t,n)}catch(e){if(u(e))return;throw e}}function l(e,t,n,r){return n instanceof ReadableStream?e.writeStream(t,n,r):e.write(t,n,r)}function u(t){return e(t)===404||(t.message??String(t)).toLocaleUpperCase().includes(`ENOENT`)}export{i as chunkSize,a as concurrency,s as pipe,c as readWithSize,l as writeWithValue};
@@ -1 +1 @@
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??/* @__PURE__ */ new Map,i=n.remoteStats??/* @__PURE__ */ new Map,a=n.records??/* @__PURE__ */ 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};
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??/* @__PURE__ */ new Map,i=n.remoteStats??/* @__PURE__ */ new Map,a=n.records??/* @__PURE__ */ 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}}const _=()=>n(`ok`),v=()=>`ok`,y=()=>({});function b(e={}){return{bytes:_,headers:{},status:200,text:v,...e,json:e.json??y}}function x(e){let t=[];return{calls:t,request:async(n,r)=>(t.push({url:n,...r}),b(await e(n,r??{})))}}function S(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 C={bytes:n,deferred:p,file:r,fileRecord:a,findTask:u,flush:m,folder:i,folderRecord:o,fs:S,request:x,runDecider:s,stream:f,taskKeys:l,taskNames:c};export{C as default};
@@ -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}function t(e){return e instanceof Error?e.message:String(e)}export{t as getMessage,e as getStatus};
@@ -0,0 +1 @@
1
+ import{Platform as e}from"obsidian";function t(e){let t=e,n=[t.status,t.res?.status,t.response?.status];for(let e of n)if(typeof e==`number`)return e}function n(e){return e instanceof Error?e.message:String(e)}function r(){let t=5*1024**2;`deviceMemory`in navigator&&typeof navigator.deviceMemory==`number`?navigator.deviceMemory<=4&&(t/=2):navigator.hardwareConcurrency<=4&&(t/=2),e.isAndroidApp&&(t/=2);let n=t*.8;return{chunkSize:n,concurrency:Math.floor(16777216/n),streamThreshold:t}}const{chunkSize:i,concurrency:a,streamThreshold:o}=r();async function s({from:e,to:t,stat:n,key:r}){let i=await c(e,r,n);if(i)return l(t,r,i,n)}async function c(e,t,n){try{return n.size>o?await e.readStream(t,n):await e.read(t,n)}catch(e){if(u(e))return;throw e}}function l(e,t,n,r){return n instanceof ReadableStream?e.writeStream(t,n,r):e.write(t,n,r)}function u(e){return t(e)===404||(e.message??String(e)).toLocaleUpperCase().includes(`ENOENT`)}export{l as a,c as i,a as n,n as o,s as r,i as t};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hesprs/sync-engine-sdk",
3
- "version": "3.1.8",
3
+ "version": "3.1.9",
4
4
  "description": "Official SDK for developing modules targeting Sync Engine, the extensible Obsidian syncing plugin.",
5
5
  "keywords": [
6
6
  "obsidian-plugin",
@@ -1 +0,0 @@
1
- function e(e){return e instanceof Error?e.message:String(e)}export{e as default};
@@ -1 +0,0 @@
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}export{e as getStatus};
@@ -1 +0,0 @@
1
- import{Platform as e}from"obsidian";function t(e){let t=e,n=[t.status,t.res?.status,t.response?.status];for(let e of n)if(typeof e==`number`)return e}function n(){let t=5*1024**2;`deviceMemory`in navigator&&typeof navigator.deviceMemory==`number`?navigator.deviceMemory<=4&&(t/=2):navigator.hardwareConcurrency<=4&&(t/=2),e.isAndroidApp&&(t/=2);let n=t*.8;return{chunkSize:n,concurrency:Math.floor(16777216/n),streamThreshold:t}}const{chunkSize:r,concurrency:i,streamThreshold:a}=n();async function o({from:e,to:t,stat:n,key:r}){let i=await s(e,r,n);if(i)return c(t,r,i,n)}async function s(e,t,n){try{return n.size>a?await e.readStream(t,n):await e.read(t,n)}catch(e){if(l(e))return;throw e}}function c(e,t,n,r){return n instanceof ReadableStream?e.writeStream(t,n,r):e.write(t,n,r)}function l(e){return t(e)===404||(e.message??String(e)).toLocaleUpperCase().includes(`ENOENT`)}export{c as a,s as i,i as n,o as r,r as t};