@vrtmrz/livesync-commonlib 0.1.0-rc.9 → 0.1.1-rc.0

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.
Files changed (41) hide show
  1. package/README.md +7 -4
  2. package/dist/API/DirectFileManipulator.d.ts +1 -1
  3. package/dist/API/DirectFileManipulatorV2.d.ts +16 -31
  4. package/dist/API/DirectFileManipulatorV2.js +35 -11
  5. package/dist/index.d.ts +1 -1
  6. package/dist/index.js +3 -1
  7. package/dist/interfaces/DatabaseFileAccess.d.ts +8 -0
  8. package/dist/interfaces/FileHandler.d.ts +17 -1
  9. package/dist/interfaces/FileReflectionProvenance.d.ts +32 -0
  10. package/dist/interfaces/FileReflectionProvenance.js +25 -0
  11. package/dist/managers/ConflictManager.js +42 -9
  12. package/dist/managers/EntryManager/EntryManager.d.ts +1 -0
  13. package/dist/managers/EntryManager/EntryManager.js +5 -1
  14. package/dist/managers/EntryManager/EntryManagerImpls.d.ts +1 -0
  15. package/dist/managers/EntryManager/EntryManagerImpls.js +29 -1
  16. package/dist/managers/LiveSyncManagers.js +1 -1
  17. package/dist/pouchdb/LiveSyncLocalDB.d.ts +1 -0
  18. package/dist/pouchdb/LiveSyncLocalDB.js +3 -0
  19. package/dist/serviceFeatures/offlineScanner.js +3 -2
  20. package/dist/serviceFeatures/remoteConfig.d.ts +2 -2
  21. package/dist/serviceFeatures/remoteConfig.js +2 -2
  22. package/dist/serviceModules/ServiceDatabaseFileAccessBase.d.ts +5 -0
  23. package/dist/serviceModules/ServiceDatabaseFileAccessBase.js +69 -13
  24. package/dist/serviceModules/ServiceFileHandlerBase.d.ts +22 -1
  25. package/dist/serviceModules/ServiceFileHandlerBase.js +323 -48
  26. package/dist/services/HeadlessServices.d.ts +4 -0
  27. package/dist/services/HeadlessServices.js +7 -3
  28. package/dist/services/base/KeyValueDBService.d.ts +2 -1
  29. package/dist/services/base/KeyValueDBService.js +10 -6
  30. package/dist/services/base/PathService.d.ts +6 -0
  31. package/dist/services/base/PathService.js +4 -1
  32. package/dist/services/base/ReplicatorService.d.ts +1 -0
  33. package/dist/services/base/ReplicatorService.js +8 -6
  34. package/dist/services/implements/base/SvelteDialog.d.ts +5 -0
  35. package/dist/services/implements/headless/HeadlessAPIService.js +2 -0
  36. package/dist/worker/bgWorker.js +1 -1
  37. package/docs/conflict-resolution.md +173 -0
  38. package/docs/development.md +6 -0
  39. package/docs/proven-in-use.md +18 -6
  40. package/docs/releasing.md +10 -7
  41. package/package.json +6 -26
@@ -3,12 +3,14 @@ import { addPrefix, id2path_base, path2id_base } from "../../string_and_binary/p
3
3
  import { isInternalMetadata, stripInternalMetadataPrefix } from "../../common/typeUtils.js";
4
4
  class PathService extends ServiceBase {
5
5
  settingService;
6
+ getPathObfuscationPassphrase;
6
7
  get settings() {
7
8
  return this.settingService.currentSettings();
8
9
  }
9
10
  constructor(context, dependencies) {
10
11
  super(context);
11
12
  this.settingService = dependencies.settingService;
13
+ this.getPathObfuscationPassphrase = dependencies.getPathObfuscationPassphrase;
12
14
  }
13
15
  _id2path(id, entry) {
14
16
  const filename = id2path_base(id, entry);
@@ -51,9 +53,10 @@ class PathService extends ServiceBase {
51
53
  async path2id(filename, prefix) {
52
54
  const destPath = addPrefix(filename, prefix ?? "");
53
55
  const setting = this.settings;
56
+ const pathObfuscationPassphrase = this.getPathObfuscationPassphrase?.() ?? (setting.usePathObfuscation ? setting.passphrase : false);
54
57
  return await this._path2id(
55
58
  destPath,
56
- setting.usePathObfuscation ? setting.passphrase : "",
59
+ pathObfuscationPassphrase,
57
60
  !setting.handleFilenameCaseSensitive
58
61
  );
59
62
  }
@@ -11,6 +11,7 @@ export interface ReplicatorServiceDependencies {
11
11
  appLifecycleService: AppLifecycleService;
12
12
  databaseEventService: DatabaseEventService;
13
13
  activityRunner?: AsyncActivityRunner;
14
+ registerLifecycleHandlers?: boolean;
14
15
  }
15
16
  /**
16
17
  * The ReplicatorService provides methods for managing replication.
@@ -17,13 +17,15 @@ class ReplicatorService extends ServiceBase {
17
17
  this.appLifecycleService = dependencies.appLifecycleService;
18
18
  this._unresolvedErrorManager = new UnresolvedErrorManager(dependencies.appLifecycleService, this.context.events);
19
19
  this.settingService = dependencies.settingService;
20
- this.settingService.onRealiseSetting.addHandler(this._initialiseReplicator.bind(this));
21
20
  this.databaseEventService = dependencies.databaseEventService;
22
- this.databaseEventService.onResetDatabase.addHandler(this.disposeReplicator.bind(this));
23
- this.databaseEventService.onDatabaseInitialisation.addHandler(this.disposeReplicator.bind(this));
24
- this.databaseEventService.onDatabaseInitialised.addHandler(this.reinitialiseReplicator.bind(this));
25
- this.databaseEventService.onDatabaseHasReady.addHandler(this.reinitialiseReplicator.bind(this));
26
- this.appLifecycleService.onSuspending.addHandler(this.suspendReplication.bind(this));
21
+ if (dependencies.registerLifecycleHandlers ?? true) {
22
+ this.settingService.onRealiseSetting.addHandler(this._initialiseReplicator.bind(this));
23
+ this.databaseEventService.onResetDatabase.addHandler(this.disposeReplicator.bind(this));
24
+ this.databaseEventService.onDatabaseInitialisation.addHandler(this.disposeReplicator.bind(this));
25
+ this.databaseEventService.onDatabaseInitialised.addHandler(this.reinitialiseReplicator.bind(this));
26
+ this.databaseEventService.onDatabaseHasReady.addHandler(this.reinitialiseReplicator.bind(this));
27
+ this.appLifecycleService.onSuspending.addHandler(this.suspendReplication.bind(this));
28
+ }
27
29
  }
28
30
  dependencies;
29
31
  boundedRemoteActivityCount = reactiveSource(0);
@@ -66,6 +66,11 @@ export interface SvelteDialogInstance<T, U, C extends ServiceContext = ServiceCo
66
66
  export type SvelteDialogClass<TBase extends Constructor<IModalBase>> = {
67
67
  new <T, U, C extends ServiceContext = ServiceContext>(...args: ConstructorParameters<TBase>): SvelteDialogInstance<T, U, C>;
68
68
  };
69
+ /**
70
+ * Adds Svelte dialogue state to a modal class through dynamic inheritance.
71
+ *
72
+ * @deprecated Compose the dialogue lifecycle explicitly in the owning host.
73
+ */
69
74
  export declare function SvelteDialogMixIn<TBase extends Constructor<IModalBase>>(TBase: TBase, d: Component<DialogHostProps>): SvelteDialogClass<TBase>;
70
75
  export declare abstract class SvelteDialogManagerBase<T extends ServiceContext> implements SvelteDialogManager<T> {
71
76
  abstract openSvelteDialog<T, U = T>(component: ComponentHasResult<T, U>, initialData?: U): Promise<T | undefined>;
@@ -1,6 +1,7 @@
1
1
  import { InjectableAPIService } from "../injectable/InjectableAPIService.js";
2
2
  import module from "node:crypto";
3
3
  import { _activeDocument } from "../../../common/coreEnvFunctions.js";
4
+ import { Logger } from "../../../common/logger.js";
4
5
  class HeadlessConfirm {
5
6
  askYesNo(message) {
6
7
  console.error(`[Headless] ${message} \u2192 no`);
@@ -37,6 +38,7 @@ class HeadlessAPIService extends InjectableAPIService {
37
38
  constructor(context) {
38
39
  super(context);
39
40
  this._confirmInstance = new HeadlessConfirm();
41
+ this.addLog.setHandler(Logger);
40
42
  }
41
43
  get confirm() {
42
44
  return this._confirmInstance;