joopjs 2.0.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.
- package/CHANGELOG.md +678 -0
- package/README.md +583 -0
- package/dist/a11y.service-C-DQQfgO.d.mts +143 -0
- package/dist/a11y.service-CauEJrJe.d.ts +143 -0
- package/dist/adapters-B6slG6hQ.d.mts +84 -0
- package/dist/adapters-B6slG6hQ.d.ts +84 -0
- package/dist/aes.service-CkoupAww.d.mts +95 -0
- package/dist/aes.service-CkoupAww.d.ts +95 -0
- package/dist/ai/index.d.mts +99 -0
- package/dist/ai/index.d.ts +99 -0
- package/dist/ai/index.js +307 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/index.mjs +304 -0
- package/dist/ai/index.mjs.map +1 -0
- package/dist/analytics/index.d.mts +42 -0
- package/dist/analytics/index.d.ts +42 -0
- package/dist/analytics/index.js +139 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/index.mjs +136 -0
- package/dist/analytics/index.mjs.map +1 -0
- package/dist/angular/index.d.mts +148 -0
- package/dist/angular/index.d.ts +148 -0
- package/dist/angular/index.js +122 -0
- package/dist/angular/index.js.map +1 -0
- package/dist/angular/index.mjs +101 -0
- package/dist/angular/index.mjs.map +1 -0
- package/dist/api/index.d.mts +128 -0
- package/dist/api/index.d.ts +128 -0
- package/dist/api/index.js +1358 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/index.mjs +1332 -0
- package/dist/api/index.mjs.map +1 -0
- package/dist/auth/index.d.mts +105 -0
- package/dist/auth/index.d.ts +105 -0
- package/dist/auth/index.js +989 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/index.mjs +979 -0
- package/dist/auth/index.mjs.map +1 -0
- package/dist/auth.service-DNVB-L4U.d.mts +16 -0
- package/dist/auth.service-PjUUSUIt.d.ts +16 -0
- package/dist/banking/index.d.mts +1530 -0
- package/dist/banking/index.d.ts +1530 -0
- package/dist/banking/index.js +4739 -0
- package/dist/banking/index.js.map +1 -0
- package/dist/banking/index.mjs +4661 -0
- package/dist/banking/index.mjs.map +1 -0
- package/dist/cache/index.d.mts +40 -0
- package/dist/cache/index.d.ts +40 -0
- package/dist/cache/index.js +174 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/index.mjs +172 -0
- package/dist/cache/index.mjs.map +1 -0
- package/dist/client-profile.service-BuPeXVp5.d.mts +28 -0
- package/dist/client-profile.service-D5bRRYQp.d.ts +28 -0
- package/dist/config.models-Cqg04fAQ.d.mts +84 -0
- package/dist/config.models-Cqg04fAQ.d.ts +84 -0
- package/dist/config.service-CrCvI-JS.d.ts +31 -0
- package/dist/config.service-Cz4QQLlf.d.mts +31 -0
- package/dist/core/index.d.mts +4 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.js +631 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/index.mjs +619 -0
- package/dist/core/index.mjs.map +1 -0
- package/dist/crypto-utils-DriNhLdx.d.mts +30 -0
- package/dist/crypto-utils-DriNhLdx.d.ts +30 -0
- package/dist/data-storage.service-DT6xaTxE.d.ts +51 -0
- package/dist/data-storage.service-LvhGRCmw.d.mts +51 -0
- package/dist/deeplink/index.d.mts +39 -0
- package/dist/deeplink/index.d.ts +39 -0
- package/dist/deeplink/index.js +268 -0
- package/dist/deeplink/index.js.map +1 -0
- package/dist/deeplink/index.mjs +265 -0
- package/dist/deeplink/index.mjs.map +1 -0
- package/dist/deeplink.service-Ctd5u243.d.mts +35 -0
- package/dist/deeplink.service-uUuTnY9_.d.ts +35 -0
- package/dist/dev/index.d.mts +20 -0
- package/dist/dev/index.d.ts +20 -0
- package/dist/dev/index.js +51 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/dev/index.mjs +49 -0
- package/dist/dev/index.mjs.map +1 -0
- package/dist/device/index.d.mts +108 -0
- package/dist/device/index.d.ts +108 -0
- package/dist/device/index.js +960 -0
- package/dist/device/index.js.map +1 -0
- package/dist/device/index.mjs +951 -0
- package/dist/device/index.mjs.map +1 -0
- package/dist/differential-privacy-BcAv1G80.d.mts +210 -0
- package/dist/differential-privacy-C8mAUjZr.d.ts +210 -0
- package/dist/encryption/index.d.mts +75 -0
- package/dist/encryption/index.d.ts +75 -0
- package/dist/encryption/index.js +605 -0
- package/dist/encryption/index.js.map +1 -0
- package/dist/encryption/index.mjs +598 -0
- package/dist/encryption/index.mjs.map +1 -0
- package/dist/form-validator-3tkmzr_o.d.mts +72 -0
- package/dist/form-validator-3tkmzr_o.d.ts +72 -0
- package/dist/forms/index.d.mts +59 -0
- package/dist/forms/index.d.ts +59 -0
- package/dist/forms/index.js +446 -0
- package/dist/forms/index.js.map +1 -0
- package/dist/forms/index.mjs +442 -0
- package/dist/forms/index.mjs.map +1 -0
- package/dist/i18n/index.d.mts +37 -0
- package/dist/i18n/index.d.ts +37 -0
- package/dist/i18n/index.js +147 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/index.mjs +145 -0
- package/dist/i18n/index.mjs.map +1 -0
- package/dist/idempotency.service-_6LqhivP.d.mts +372 -0
- package/dist/idempotency.service-eOKoISRD.d.ts +372 -0
- package/dist/index-B_ksKpS1.d.mts +202 -0
- package/dist/index-CqDKWTUP.d.mts +28 -0
- package/dist/index-CqDKWTUP.d.ts +28 -0
- package/dist/index-DFqEoX_l.d.ts +202 -0
- package/dist/index-Dz0gOur2.d.mts +36 -0
- package/dist/index-Dz0gOur2.d.ts +36 -0
- package/dist/index.d.mts +1336 -0
- package/dist/index.d.ts +1336 -0
- package/dist/index.js +19464 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +19155 -0
- package/dist/index.mjs.map +1 -0
- package/dist/india/index.d.mts +75 -0
- package/dist/india/index.d.ts +75 -0
- package/dist/india/index.js +325 -0
- package/dist/india/index.js.map +1 -0
- package/dist/india/index.mjs +303 -0
- package/dist/india/index.mjs.map +1 -0
- package/dist/joop-Bx7Iwj5p.d.mts +155 -0
- package/dist/joop-CA3DMeOO.d.ts +155 -0
- package/dist/native-bridge/index.d.mts +27 -0
- package/dist/native-bridge/index.d.ts +27 -0
- package/dist/native-bridge/index.js +98 -0
- package/dist/native-bridge/index.js.map +1 -0
- package/dist/native-bridge/index.mjs +96 -0
- package/dist/native-bridge/index.mjs.map +1 -0
- package/dist/network/index.d.mts +85 -0
- package/dist/network/index.d.ts +85 -0
- package/dist/network/index.js +454 -0
- package/dist/network/index.js.map +1 -0
- package/dist/network/index.mjs +451 -0
- package/dist/network/index.mjs.map +1 -0
- package/dist/network-monitor-BIwPSXme.d.mts +179 -0
- package/dist/network-monitor-Bqp2hvZr.d.ts +179 -0
- package/dist/notification.service-Dm4fvfZf.d.mts +25 -0
- package/dist/notification.service-tEMKatWJ.d.ts +25 -0
- package/dist/observability/index.d.mts +179 -0
- package/dist/observability/index.d.ts +179 -0
- package/dist/observability/index.js +559 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/index.mjs +552 -0
- package/dist/observability/index.mjs.map +1 -0
- package/dist/oidc-client-DIJcClmB.d.mts +190 -0
- package/dist/oidc-client-DxhyE59t.d.ts +190 -0
- package/dist/platform/index.d.mts +73 -0
- package/dist/platform/index.d.ts +73 -0
- package/dist/platform/index.js +127 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/platform/index.mjs +125 -0
- package/dist/platform/index.mjs.map +1 -0
- package/dist/pwa/index.d.mts +31 -0
- package/dist/pwa/index.d.ts +31 -0
- package/dist/pwa/index.js +247 -0
- package/dist/pwa/index.js.map +1 -0
- package/dist/pwa/index.mjs +244 -0
- package/dist/pwa/index.mjs.map +1 -0
- package/dist/react/index.d.mts +133 -0
- package/dist/react/index.d.ts +133 -0
- package/dist/react/index.js +632 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/index.mjs +630 -0
- package/dist/react/index.mjs.map +1 -0
- package/dist/router/index.d.mts +39 -0
- package/dist/router/index.d.ts +39 -0
- package/dist/router/index.js +168 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/index.mjs +166 -0
- package/dist/router/index.mjs.map +1 -0
- package/dist/security/index.d.mts +206 -0
- package/dist/security/index.d.ts +206 -0
- package/dist/security/index.js +1297 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/index.mjs +1285 -0
- package/dist/security/index.mjs.map +1 -0
- package/dist/session/index.d.mts +115 -0
- package/dist/session/index.d.ts +115 -0
- package/dist/session/index.js +297 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/index.mjs +292 -0
- package/dist/session/index.mjs.map +1 -0
- package/dist/state/index.d.mts +43 -0
- package/dist/state/index.d.ts +43 -0
- package/dist/state/index.js +156 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/index.mjs +152 -0
- package/dist/state/index.mjs.map +1 -0
- package/dist/statement-parser-BHQtXwCM.d.ts +260 -0
- package/dist/statement-parser-C2qNmb49.d.mts +260 -0
- package/dist/storage/index.d.mts +40 -0
- package/dist/storage/index.d.ts +40 -0
- package/dist/storage/index.js +256 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/index.mjs +252 -0
- package/dist/storage/index.mjs.map +1 -0
- package/dist/sync/index.d.mts +69 -0
- package/dist/sync/index.d.ts +69 -0
- package/dist/sync/index.js +330 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/index.mjs +323 -0
- package/dist/sync/index.mjs.map +1 -0
- package/dist/sync-engine-DCIMRG5s.d.ts +61 -0
- package/dist/sync-engine-DZqyKHkK.d.mts +61 -0
- package/dist/theme/index.d.mts +53 -0
- package/dist/theme/index.d.ts +53 -0
- package/dist/theme/index.js +169 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/index.mjs +167 -0
- package/dist/theme/index.mjs.map +1 -0
- package/dist/ui/index.d.mts +66 -0
- package/dist/ui/index.d.ts +66 -0
- package/dist/ui/index.js +811 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/index.mjs +803 -0
- package/dist/ui/index.mjs.map +1 -0
- package/dist/utilities/index.d.mts +199 -0
- package/dist/utilities/index.d.ts +199 -0
- package/dist/utilities/index.js +1991 -0
- package/dist/utilities/index.js.map +1 -0
- package/dist/utilities/index.mjs +1923 -0
- package/dist/utilities/index.mjs.map +1 -0
- package/dist/validation/index.d.mts +60 -0
- package/dist/validation/index.d.ts +60 -0
- package/dist/validation/index.js +460 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/index.mjs +455 -0
- package/dist/validation/index.mjs.map +1 -0
- package/dist/vue/index.d.mts +135 -0
- package/dist/vue/index.d.ts +135 -0
- package/dist/vue/index.js +621 -0
- package/dist/vue/index.js.map +1 -0
- package/dist/vue/index.mjs +619 -0
- package/dist/vue/index.mjs.map +1 -0
- package/dist/watermark.service-Detur5tq.d.ts +235 -0
- package/dist/watermark.service-QNegMeQZ.d.mts +235 -0
- package/dist/workers/index.d.mts +42 -0
- package/dist/workers/index.d.ts +42 -0
- package/dist/workers/index.js +359 -0
- package/dist/workers/index.js.map +1 -0
- package/dist/workers/index.mjs +356 -0
- package/dist/workers/index.mjs.map +1 -0
- package/dist/workflow/index.d.mts +99 -0
- package/dist/workflow/index.d.ts +99 -0
- package/dist/workflow/index.js +282 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow/index.mjs +279 -0
- package/dist/workflow/index.mjs.map +1 -0
- package/package.json +226 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/storage/scope-map.service.ts
|
|
4
|
+
var JoopScopeMapService = class {
|
|
5
|
+
_appMap = {};
|
|
6
|
+
_pageMap = {};
|
|
7
|
+
_screenMap = {};
|
|
8
|
+
_sessionMap = {};
|
|
9
|
+
getMap(scope) {
|
|
10
|
+
switch (scope) {
|
|
11
|
+
case "app" /* App */:
|
|
12
|
+
return this._appMap;
|
|
13
|
+
case "page" /* Page */:
|
|
14
|
+
return this._pageMap;
|
|
15
|
+
case "screen" /* Screen */:
|
|
16
|
+
return this._screenMap;
|
|
17
|
+
case "session" /* Session */:
|
|
18
|
+
return this._sessionMap;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
clearScreen() {
|
|
22
|
+
this._screenMap = {};
|
|
23
|
+
}
|
|
24
|
+
clearPage() {
|
|
25
|
+
this._pageMap = {};
|
|
26
|
+
}
|
|
27
|
+
clearSession() {
|
|
28
|
+
this._sessionMap = {};
|
|
29
|
+
}
|
|
30
|
+
clearApp() {
|
|
31
|
+
this._appMap = {};
|
|
32
|
+
}
|
|
33
|
+
clearAll() {
|
|
34
|
+
this._appMap = {};
|
|
35
|
+
this._pageMap = {};
|
|
36
|
+
this._screenMap = {};
|
|
37
|
+
this._sessionMap = {};
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// src/events/index.ts
|
|
42
|
+
var JoopSubject = class {
|
|
43
|
+
_listeners = [];
|
|
44
|
+
subscribe(listener) {
|
|
45
|
+
this._listeners.push(listener);
|
|
46
|
+
return () => {
|
|
47
|
+
this._listeners = this._listeners.filter((l) => l !== listener);
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
next(value) {
|
|
51
|
+
for (const listener of this._listeners) {
|
|
52
|
+
listener(value);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
asObservable() {
|
|
56
|
+
return new JoopObservable((listener) => this.subscribe(listener));
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
var JoopBehaviorSubject = class extends JoopSubject {
|
|
60
|
+
_value;
|
|
61
|
+
constructor(initialValue) {
|
|
62
|
+
super();
|
|
63
|
+
this._value = initialValue;
|
|
64
|
+
}
|
|
65
|
+
getValue() {
|
|
66
|
+
return this._value;
|
|
67
|
+
}
|
|
68
|
+
next(value) {
|
|
69
|
+
this._value = value;
|
|
70
|
+
super.next(value);
|
|
71
|
+
}
|
|
72
|
+
subscribe(listener) {
|
|
73
|
+
listener(this._value);
|
|
74
|
+
return super.subscribe(listener);
|
|
75
|
+
}
|
|
76
|
+
asObservable() {
|
|
77
|
+
return new JoopObservable((listener) => this.subscribe(listener));
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
var JoopObservable = class {
|
|
81
|
+
constructor(_subscribeFn) {
|
|
82
|
+
this._subscribeFn = _subscribeFn;
|
|
83
|
+
}
|
|
84
|
+
_subscribeFn;
|
|
85
|
+
subscribe(listener) {
|
|
86
|
+
return this._subscribeFn(listener);
|
|
87
|
+
}
|
|
88
|
+
/** Returns the current value without subscribing (only meaningful for BehaviorSubject-backed observables). */
|
|
89
|
+
getOnce() {
|
|
90
|
+
let result;
|
|
91
|
+
const unsub = this.subscribe((v) => {
|
|
92
|
+
result = v;
|
|
93
|
+
});
|
|
94
|
+
unsub();
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
// src/storage/data-storage.service.ts
|
|
100
|
+
var JoopDataStorage = class {
|
|
101
|
+
constructor(_scopeMap) {
|
|
102
|
+
this._scopeMap = _scopeMap;
|
|
103
|
+
}
|
|
104
|
+
_scopeMap;
|
|
105
|
+
_menuSubject = new JoopBehaviorSubject(null);
|
|
106
|
+
/** Store a value in the given scope under the given key. */
|
|
107
|
+
set(scope, key, value) {
|
|
108
|
+
const map = this._scopeMap.getMap(scope);
|
|
109
|
+
map[key] = value;
|
|
110
|
+
}
|
|
111
|
+
/** Retrieve a typed value from the given scope. Returns null if not found. */
|
|
112
|
+
get(scope, key) {
|
|
113
|
+
return this._scopeMap.getMap(scope)[key] ?? null;
|
|
114
|
+
}
|
|
115
|
+
/** Remove a single key from the given scope. */
|
|
116
|
+
remove(scope, key) {
|
|
117
|
+
delete this._scopeMap.getMap(scope)[key];
|
|
118
|
+
}
|
|
119
|
+
/** Retrieve the entire map for a scope (reference, not clone). */
|
|
120
|
+
getScope(scope) {
|
|
121
|
+
return this._scopeMap.getMap(scope);
|
|
122
|
+
}
|
|
123
|
+
setMenuData(data) {
|
|
124
|
+
this._menuSubject.next(data);
|
|
125
|
+
}
|
|
126
|
+
clearMenuData() {
|
|
127
|
+
this._menuSubject.next(null);
|
|
128
|
+
}
|
|
129
|
+
menuData$() {
|
|
130
|
+
return this._menuSubject.asObservable();
|
|
131
|
+
}
|
|
132
|
+
getMenuData() {
|
|
133
|
+
return this._menuSubject.getValue();
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
// src/storage/indexed-db.service.ts
|
|
138
|
+
var JoopIndexedDbService = class {
|
|
139
|
+
_db = null;
|
|
140
|
+
_ready$ = new JoopBehaviorSubject(false);
|
|
141
|
+
async open(config) {
|
|
142
|
+
return new Promise((resolve, reject) => {
|
|
143
|
+
const req = indexedDB.open(config.name, config.version);
|
|
144
|
+
req.onupgradeneeded = (e) => {
|
|
145
|
+
const db = e.target.result;
|
|
146
|
+
for (const store of config.stores) {
|
|
147
|
+
if (!db.objectStoreNames.contains(store.name)) {
|
|
148
|
+
const os = db.createObjectStore(store.name, { keyPath: store.keyPath, autoIncrement: store.autoIncrement });
|
|
149
|
+
for (const idx of store.indexes ?? []) os.createIndex(idx.name, idx.keyPath, { unique: idx.unique ?? false });
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
req.onsuccess = (e) => {
|
|
154
|
+
this._db = e.target.result;
|
|
155
|
+
this._ready$.next(true);
|
|
156
|
+
resolve();
|
|
157
|
+
};
|
|
158
|
+
req.onerror = () => reject(req.error);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
close() {
|
|
162
|
+
this._db?.close();
|
|
163
|
+
this._db = null;
|
|
164
|
+
this._ready$.next(false);
|
|
165
|
+
}
|
|
166
|
+
isOpen() {
|
|
167
|
+
return this._db !== null;
|
|
168
|
+
}
|
|
169
|
+
ready$() {
|
|
170
|
+
return this._ready$.asObservable();
|
|
171
|
+
}
|
|
172
|
+
_store(storeName, mode) {
|
|
173
|
+
if (!this._db) throw new Error("JoopIndexedDb: not open");
|
|
174
|
+
return this._db.transaction(storeName, mode).objectStore(storeName);
|
|
175
|
+
}
|
|
176
|
+
async get(store, key) {
|
|
177
|
+
return new Promise((res, rej) => {
|
|
178
|
+
const req = this._store(store, "readonly").get(key);
|
|
179
|
+
req.onsuccess = () => res(req.result ?? null);
|
|
180
|
+
req.onerror = () => rej(req.error);
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
async set(store, value, key) {
|
|
184
|
+
return new Promise((res, rej) => {
|
|
185
|
+
const req = key !== void 0 ? this._store(store, "readwrite").put(value, key) : this._store(store, "readwrite").put(value);
|
|
186
|
+
req.onsuccess = () => res(req.result);
|
|
187
|
+
req.onerror = () => rej(req.error);
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
async delete(store, key) {
|
|
191
|
+
return new Promise((res, rej) => {
|
|
192
|
+
const req = this._store(store, "readwrite").delete(key);
|
|
193
|
+
req.onsuccess = () => res();
|
|
194
|
+
req.onerror = () => rej(req.error);
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
async getAll(store) {
|
|
198
|
+
return new Promise((res, rej) => {
|
|
199
|
+
const req = this._store(store, "readonly").getAll();
|
|
200
|
+
req.onsuccess = () => res(req.result);
|
|
201
|
+
req.onerror = () => rej(req.error);
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
async getAllKeys(store) {
|
|
205
|
+
return new Promise((res, rej) => {
|
|
206
|
+
const req = this._store(store, "readonly").getAllKeys();
|
|
207
|
+
req.onsuccess = () => res(req.result);
|
|
208
|
+
req.onerror = () => rej(req.error);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
async query(store, indexName, range) {
|
|
212
|
+
return new Promise((res, rej) => {
|
|
213
|
+
const req = this._store(store, "readonly").index(indexName).getAll(range);
|
|
214
|
+
req.onsuccess = () => res(req.result);
|
|
215
|
+
req.onerror = () => rej(req.error);
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
async count(store, range) {
|
|
219
|
+
return new Promise((res, rej) => {
|
|
220
|
+
const req = range ? this._store(store, "readonly").count(range) : this._store(store, "readonly").count();
|
|
221
|
+
req.onsuccess = () => res(req.result);
|
|
222
|
+
req.onerror = () => rej(req.error);
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
async clear(store) {
|
|
226
|
+
return new Promise((res, rej) => {
|
|
227
|
+
const req = this._store(store, "readwrite").clear();
|
|
228
|
+
req.onsuccess = () => res();
|
|
229
|
+
req.onerror = () => rej(req.error);
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
async bulkSet(store, items) {
|
|
233
|
+
if (!this._db) throw new Error("JoopIndexedDb: not open");
|
|
234
|
+
return new Promise((res, rej) => {
|
|
235
|
+
const tx = this._db.transaction(store, "readwrite");
|
|
236
|
+
const os = tx.objectStore(store);
|
|
237
|
+
for (const item of items) os.put(item);
|
|
238
|
+
tx.oncomplete = () => res();
|
|
239
|
+
tx.onerror = () => rej(tx.error);
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
async deleteDatabase(name) {
|
|
243
|
+
this.close();
|
|
244
|
+
return new Promise((res, rej) => {
|
|
245
|
+
const req = indexedDB.deleteDatabase(name);
|
|
246
|
+
req.onsuccess = () => res();
|
|
247
|
+
req.onerror = () => rej(req.error);
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
exports.JoopDataStorage = JoopDataStorage;
|
|
253
|
+
exports.JoopIndexedDbService = JoopIndexedDbService;
|
|
254
|
+
exports.JoopScopeMapService = JoopScopeMapService;
|
|
255
|
+
//# sourceMappingURL=index.js.map
|
|
256
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/storage/scope-map.service.ts","../../src/events/index.ts","../../src/storage/data-storage.service.ts","../../src/storage/indexed-db.service.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { JoopScopeType } from '../enums';\n\n/**\n * Four-scope in-memory store.\n *\n * | Scope | Lifetime |\n * |---------|--------------------------------|\n * | app | Entire app session |\n * | page | Current page / flow |\n * | screen | Current screen / component |\n * | session | Browser session (survives nav) |\n */\nexport class JoopScopeMapService {\n private _appMap: Record<string, any> = {};\n private _pageMap: Record<string, any> = {};\n private _screenMap: Record<string, any> = {};\n private _sessionMap: Record<string, any> = {};\n\n getMap(scope: JoopScopeType): Record<string, any> {\n switch (scope) {\n case JoopScopeType.App: return this._appMap;\n case JoopScopeType.Page: return this._pageMap;\n case JoopScopeType.Screen: return this._screenMap;\n case JoopScopeType.Session: return this._sessionMap;\n }\n }\n\n clearScreen(): void { this._screenMap = {}; }\n clearPage(): void { this._pageMap = {}; }\n clearSession(): void { this._sessionMap = {}; }\n clearApp(): void { this._appMap = {}; }\n\n clearAll(): void {\n this._appMap = {};\n this._pageMap = {};\n this._screenMap = {};\n this._sessionMap = {};\n }\n}\n","export type Unsubscribe = () => void;\nexport type Listener<T> = (value: T) => void;\n\n/**\n * Lightweight pub/sub subject — emits to all current subscribers.\n * Replaces RxJS Subject without pulling in the full RxJS dependency.\n */\nexport class JoopSubject<T> {\n private _listeners: Listener<T>[] = [];\n\n subscribe(listener: Listener<T>): Unsubscribe {\n this._listeners.push(listener);\n return () => {\n this._listeners = this._listeners.filter(l => l !== listener);\n };\n }\n\n next(value: T): void {\n for (const listener of this._listeners) {\n listener(value);\n }\n }\n\n asObservable(): JoopObservable<T> {\n return new JoopObservable<T>(listener => this.subscribe(listener));\n }\n}\n\n/**\n * Stateful subject — replays the current value to any new subscriber immediately.\n * Replaces RxJS BehaviorSubject.\n */\nexport class JoopBehaviorSubject<T> extends JoopSubject<T> {\n private _value: T;\n\n constructor(initialValue: T) {\n super();\n this._value = initialValue;\n }\n\n getValue(): T {\n return this._value;\n }\n\n override next(value: T): void {\n this._value = value;\n super.next(value);\n }\n\n override subscribe(listener: Listener<T>): Unsubscribe {\n listener(this._value);\n return super.subscribe(listener);\n }\n\n override asObservable(): JoopObservable<T> {\n return new JoopObservable<T>(listener => this.subscribe(listener));\n }\n}\n\n/**\n * Read-only observable handle returned from asObservable().\n */\nexport class JoopObservable<T> {\n constructor(private _subscribeFn: (listener: Listener<T>) => Unsubscribe) {}\n\n subscribe(listener: Listener<T>): Unsubscribe {\n return this._subscribeFn(listener);\n }\n\n /** Returns the current value without subscribing (only meaningful for BehaviorSubject-backed observables). */\n getOnce(): T | undefined {\n let result: T | undefined;\n const unsub = this.subscribe(v => { result = v; });\n unsub();\n return result;\n }\n}\n","import { JoopBehaviorSubject, JoopObservable } from '../events';\nimport { JoopScopeType } from '../enums';\nimport { JoopScopeMapService } from './scope-map.service';\n\nexport class JoopDataStorage {\n private _menuSubject = new JoopBehaviorSubject<{ menuObj: any[] } | null>(null);\n\n constructor(private readonly _scopeMap: JoopScopeMapService) {}\n\n /** Store a value in the given scope under the given key. */\n set(scope: JoopScopeType, key: string, value: any): void {\n const map = this._scopeMap.getMap(scope);\n map[key] = value;\n }\n\n /** Retrieve a typed value from the given scope. Returns null if not found. */\n get<T>(scope: JoopScopeType, key: string): T | null {\n return this._scopeMap.getMap(scope)[key] ?? null;\n }\n\n /** Remove a single key from the given scope. */\n remove(scope: JoopScopeType, key: string): void {\n delete this._scopeMap.getMap(scope)[key];\n }\n\n /** Retrieve the entire map for a scope (reference, not clone). */\n getScope<T extends Record<string, any>>(scope: JoopScopeType): T {\n return this._scopeMap.getMap(scope) as T;\n }\n\n setMenuData(data: { menuObj: any[] }): void {\n this._menuSubject.next(data);\n }\n\n clearMenuData(): void {\n this._menuSubject.next(null);\n }\n\n menuData$(): JoopObservable<{ menuObj: any[] } | null> {\n return this._menuSubject.asObservable();\n }\n\n getMenuData(): { menuObj: any[] } | null {\n return this._menuSubject.getValue();\n }\n}\n","import { JoopBehaviorSubject } from '../events';\n\nexport interface JoopIdbStoreSchema {\n name: string;\n keyPath?: string;\n autoIncrement?: boolean;\n indexes?: Array<{ name: string; keyPath: string | string[]; unique?: boolean }>;\n}\n\nexport interface JoopIdbConfig {\n name: string;\n version: number;\n stores: JoopIdbStoreSchema[];\n}\n\nexport class JoopIndexedDbService {\n private _db: IDBDatabase | null = null;\n private _ready$ = new JoopBehaviorSubject<boolean>(false);\n\n async open(config: JoopIdbConfig): Promise<void> {\n return new Promise((resolve, reject) => {\n const req = indexedDB.open(config.name, config.version);\n req.onupgradeneeded = (e) => {\n const db = (e.target as IDBOpenDBRequest).result;\n for (const store of config.stores) {\n if (!db.objectStoreNames.contains(store.name)) {\n const os = db.createObjectStore(store.name, { keyPath: store.keyPath, autoIncrement: store.autoIncrement });\n for (const idx of store.indexes ?? []) os.createIndex(idx.name, idx.keyPath, { unique: idx.unique ?? false });\n }\n }\n };\n req.onsuccess = (e) => { this._db = (e.target as IDBOpenDBRequest).result; this._ready$.next(true); resolve(); };\n req.onerror = () => reject(req.error);\n });\n }\n\n close(): void { this._db?.close(); this._db = null; this._ready$.next(false); }\n isOpen(): boolean { return this._db !== null; }\n ready$() { return this._ready$.asObservable(); }\n\n private _store(storeName: string, mode: IDBTransactionMode): IDBObjectStore {\n if (!this._db) throw new Error('JoopIndexedDb: not open');\n return this._db.transaction(storeName, mode).objectStore(storeName);\n }\n\n async get<T>(store: string, key: IDBValidKey): Promise<T | null> {\n return new Promise((res, rej) => {\n const req = this._store(store, 'readonly').get(key);\n req.onsuccess = () => res((req.result as T) ?? null);\n req.onerror = () => rej(req.error);\n });\n }\n\n async set(store: string, value: unknown, key?: IDBValidKey): Promise<IDBValidKey> {\n return new Promise((res, rej) => {\n const req = key !== undefined ? this._store(store, 'readwrite').put(value, key) : this._store(store, 'readwrite').put(value);\n req.onsuccess = () => res(req.result);\n req.onerror = () => rej(req.error);\n });\n }\n\n async delete(store: string, key: IDBValidKey): Promise<void> {\n return new Promise((res, rej) => {\n const req = this._store(store, 'readwrite').delete(key);\n req.onsuccess = () => res();\n req.onerror = () => rej(req.error);\n });\n }\n\n async getAll<T>(store: string): Promise<T[]> {\n return new Promise((res, rej) => {\n const req = this._store(store, 'readonly').getAll();\n req.onsuccess = () => res(req.result as T[]);\n req.onerror = () => rej(req.error);\n });\n }\n\n async getAllKeys(store: string): Promise<IDBValidKey[]> {\n return new Promise((res, rej) => {\n const req = this._store(store, 'readonly').getAllKeys();\n req.onsuccess = () => res(req.result);\n req.onerror = () => rej(req.error);\n });\n }\n\n async query<T>(store: string, indexName: string, range: IDBKeyRange): Promise<T[]> {\n return new Promise((res, rej) => {\n const req = this._store(store, 'readonly').index(indexName).getAll(range);\n req.onsuccess = () => res(req.result as T[]);\n req.onerror = () => rej(req.error);\n });\n }\n\n async count(store: string, range?: IDBKeyRange): Promise<number> {\n return new Promise((res, rej) => {\n const req = range ? this._store(store, 'readonly').count(range) : this._store(store, 'readonly').count();\n req.onsuccess = () => res(req.result);\n req.onerror = () => rej(req.error);\n });\n }\n\n async clear(store: string): Promise<void> {\n return new Promise((res, rej) => {\n const req = this._store(store, 'readwrite').clear();\n req.onsuccess = () => res();\n req.onerror = () => rej(req.error);\n });\n }\n\n async bulkSet(store: string, items: unknown[]): Promise<void> {\n if (!this._db) throw new Error('JoopIndexedDb: not open');\n return new Promise((res, rej) => {\n const tx = this._db!.transaction(store, 'readwrite');\n const os = tx.objectStore(store);\n for (const item of items) os.put(item);\n tx.oncomplete = () => res();\n tx.onerror = () => rej(tx.error);\n });\n }\n\n async deleteDatabase(name: string): Promise<void> {\n this.close();\n return new Promise((res, rej) => {\n const req = indexedDB.deleteDatabase(name);\n req.onsuccess = () => res();\n req.onerror = () => rej(req.error);\n });\n }\n}\n"]}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
// src/storage/scope-map.service.ts
|
|
2
|
+
var JoopScopeMapService = class {
|
|
3
|
+
_appMap = {};
|
|
4
|
+
_pageMap = {};
|
|
5
|
+
_screenMap = {};
|
|
6
|
+
_sessionMap = {};
|
|
7
|
+
getMap(scope) {
|
|
8
|
+
switch (scope) {
|
|
9
|
+
case "app" /* App */:
|
|
10
|
+
return this._appMap;
|
|
11
|
+
case "page" /* Page */:
|
|
12
|
+
return this._pageMap;
|
|
13
|
+
case "screen" /* Screen */:
|
|
14
|
+
return this._screenMap;
|
|
15
|
+
case "session" /* Session */:
|
|
16
|
+
return this._sessionMap;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
clearScreen() {
|
|
20
|
+
this._screenMap = {};
|
|
21
|
+
}
|
|
22
|
+
clearPage() {
|
|
23
|
+
this._pageMap = {};
|
|
24
|
+
}
|
|
25
|
+
clearSession() {
|
|
26
|
+
this._sessionMap = {};
|
|
27
|
+
}
|
|
28
|
+
clearApp() {
|
|
29
|
+
this._appMap = {};
|
|
30
|
+
}
|
|
31
|
+
clearAll() {
|
|
32
|
+
this._appMap = {};
|
|
33
|
+
this._pageMap = {};
|
|
34
|
+
this._screenMap = {};
|
|
35
|
+
this._sessionMap = {};
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// src/events/index.ts
|
|
40
|
+
var JoopSubject = class {
|
|
41
|
+
_listeners = [];
|
|
42
|
+
subscribe(listener) {
|
|
43
|
+
this._listeners.push(listener);
|
|
44
|
+
return () => {
|
|
45
|
+
this._listeners = this._listeners.filter((l) => l !== listener);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
next(value) {
|
|
49
|
+
for (const listener of this._listeners) {
|
|
50
|
+
listener(value);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
asObservable() {
|
|
54
|
+
return new JoopObservable((listener) => this.subscribe(listener));
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
var JoopBehaviorSubject = class extends JoopSubject {
|
|
58
|
+
_value;
|
|
59
|
+
constructor(initialValue) {
|
|
60
|
+
super();
|
|
61
|
+
this._value = initialValue;
|
|
62
|
+
}
|
|
63
|
+
getValue() {
|
|
64
|
+
return this._value;
|
|
65
|
+
}
|
|
66
|
+
next(value) {
|
|
67
|
+
this._value = value;
|
|
68
|
+
super.next(value);
|
|
69
|
+
}
|
|
70
|
+
subscribe(listener) {
|
|
71
|
+
listener(this._value);
|
|
72
|
+
return super.subscribe(listener);
|
|
73
|
+
}
|
|
74
|
+
asObservable() {
|
|
75
|
+
return new JoopObservable((listener) => this.subscribe(listener));
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
var JoopObservable = class {
|
|
79
|
+
constructor(_subscribeFn) {
|
|
80
|
+
this._subscribeFn = _subscribeFn;
|
|
81
|
+
}
|
|
82
|
+
_subscribeFn;
|
|
83
|
+
subscribe(listener) {
|
|
84
|
+
return this._subscribeFn(listener);
|
|
85
|
+
}
|
|
86
|
+
/** Returns the current value without subscribing (only meaningful for BehaviorSubject-backed observables). */
|
|
87
|
+
getOnce() {
|
|
88
|
+
let result;
|
|
89
|
+
const unsub = this.subscribe((v) => {
|
|
90
|
+
result = v;
|
|
91
|
+
});
|
|
92
|
+
unsub();
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
// src/storage/data-storage.service.ts
|
|
98
|
+
var JoopDataStorage = class {
|
|
99
|
+
constructor(_scopeMap) {
|
|
100
|
+
this._scopeMap = _scopeMap;
|
|
101
|
+
}
|
|
102
|
+
_scopeMap;
|
|
103
|
+
_menuSubject = new JoopBehaviorSubject(null);
|
|
104
|
+
/** Store a value in the given scope under the given key. */
|
|
105
|
+
set(scope, key, value) {
|
|
106
|
+
const map = this._scopeMap.getMap(scope);
|
|
107
|
+
map[key] = value;
|
|
108
|
+
}
|
|
109
|
+
/** Retrieve a typed value from the given scope. Returns null if not found. */
|
|
110
|
+
get(scope, key) {
|
|
111
|
+
return this._scopeMap.getMap(scope)[key] ?? null;
|
|
112
|
+
}
|
|
113
|
+
/** Remove a single key from the given scope. */
|
|
114
|
+
remove(scope, key) {
|
|
115
|
+
delete this._scopeMap.getMap(scope)[key];
|
|
116
|
+
}
|
|
117
|
+
/** Retrieve the entire map for a scope (reference, not clone). */
|
|
118
|
+
getScope(scope) {
|
|
119
|
+
return this._scopeMap.getMap(scope);
|
|
120
|
+
}
|
|
121
|
+
setMenuData(data) {
|
|
122
|
+
this._menuSubject.next(data);
|
|
123
|
+
}
|
|
124
|
+
clearMenuData() {
|
|
125
|
+
this._menuSubject.next(null);
|
|
126
|
+
}
|
|
127
|
+
menuData$() {
|
|
128
|
+
return this._menuSubject.asObservable();
|
|
129
|
+
}
|
|
130
|
+
getMenuData() {
|
|
131
|
+
return this._menuSubject.getValue();
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
// src/storage/indexed-db.service.ts
|
|
136
|
+
var JoopIndexedDbService = class {
|
|
137
|
+
_db = null;
|
|
138
|
+
_ready$ = new JoopBehaviorSubject(false);
|
|
139
|
+
async open(config) {
|
|
140
|
+
return new Promise((resolve, reject) => {
|
|
141
|
+
const req = indexedDB.open(config.name, config.version);
|
|
142
|
+
req.onupgradeneeded = (e) => {
|
|
143
|
+
const db = e.target.result;
|
|
144
|
+
for (const store of config.stores) {
|
|
145
|
+
if (!db.objectStoreNames.contains(store.name)) {
|
|
146
|
+
const os = db.createObjectStore(store.name, { keyPath: store.keyPath, autoIncrement: store.autoIncrement });
|
|
147
|
+
for (const idx of store.indexes ?? []) os.createIndex(idx.name, idx.keyPath, { unique: idx.unique ?? false });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
req.onsuccess = (e) => {
|
|
152
|
+
this._db = e.target.result;
|
|
153
|
+
this._ready$.next(true);
|
|
154
|
+
resolve();
|
|
155
|
+
};
|
|
156
|
+
req.onerror = () => reject(req.error);
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
close() {
|
|
160
|
+
this._db?.close();
|
|
161
|
+
this._db = null;
|
|
162
|
+
this._ready$.next(false);
|
|
163
|
+
}
|
|
164
|
+
isOpen() {
|
|
165
|
+
return this._db !== null;
|
|
166
|
+
}
|
|
167
|
+
ready$() {
|
|
168
|
+
return this._ready$.asObservable();
|
|
169
|
+
}
|
|
170
|
+
_store(storeName, mode) {
|
|
171
|
+
if (!this._db) throw new Error("JoopIndexedDb: not open");
|
|
172
|
+
return this._db.transaction(storeName, mode).objectStore(storeName);
|
|
173
|
+
}
|
|
174
|
+
async get(store, key) {
|
|
175
|
+
return new Promise((res, rej) => {
|
|
176
|
+
const req = this._store(store, "readonly").get(key);
|
|
177
|
+
req.onsuccess = () => res(req.result ?? null);
|
|
178
|
+
req.onerror = () => rej(req.error);
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
async set(store, value, key) {
|
|
182
|
+
return new Promise((res, rej) => {
|
|
183
|
+
const req = key !== void 0 ? this._store(store, "readwrite").put(value, key) : this._store(store, "readwrite").put(value);
|
|
184
|
+
req.onsuccess = () => res(req.result);
|
|
185
|
+
req.onerror = () => rej(req.error);
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
async delete(store, key) {
|
|
189
|
+
return new Promise((res, rej) => {
|
|
190
|
+
const req = this._store(store, "readwrite").delete(key);
|
|
191
|
+
req.onsuccess = () => res();
|
|
192
|
+
req.onerror = () => rej(req.error);
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
async getAll(store) {
|
|
196
|
+
return new Promise((res, rej) => {
|
|
197
|
+
const req = this._store(store, "readonly").getAll();
|
|
198
|
+
req.onsuccess = () => res(req.result);
|
|
199
|
+
req.onerror = () => rej(req.error);
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
async getAllKeys(store) {
|
|
203
|
+
return new Promise((res, rej) => {
|
|
204
|
+
const req = this._store(store, "readonly").getAllKeys();
|
|
205
|
+
req.onsuccess = () => res(req.result);
|
|
206
|
+
req.onerror = () => rej(req.error);
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
async query(store, indexName, range) {
|
|
210
|
+
return new Promise((res, rej) => {
|
|
211
|
+
const req = this._store(store, "readonly").index(indexName).getAll(range);
|
|
212
|
+
req.onsuccess = () => res(req.result);
|
|
213
|
+
req.onerror = () => rej(req.error);
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
async count(store, range) {
|
|
217
|
+
return new Promise((res, rej) => {
|
|
218
|
+
const req = range ? this._store(store, "readonly").count(range) : this._store(store, "readonly").count();
|
|
219
|
+
req.onsuccess = () => res(req.result);
|
|
220
|
+
req.onerror = () => rej(req.error);
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
async clear(store) {
|
|
224
|
+
return new Promise((res, rej) => {
|
|
225
|
+
const req = this._store(store, "readwrite").clear();
|
|
226
|
+
req.onsuccess = () => res();
|
|
227
|
+
req.onerror = () => rej(req.error);
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
async bulkSet(store, items) {
|
|
231
|
+
if (!this._db) throw new Error("JoopIndexedDb: not open");
|
|
232
|
+
return new Promise((res, rej) => {
|
|
233
|
+
const tx = this._db.transaction(store, "readwrite");
|
|
234
|
+
const os = tx.objectStore(store);
|
|
235
|
+
for (const item of items) os.put(item);
|
|
236
|
+
tx.oncomplete = () => res();
|
|
237
|
+
tx.onerror = () => rej(tx.error);
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
async deleteDatabase(name) {
|
|
241
|
+
this.close();
|
|
242
|
+
return new Promise((res, rej) => {
|
|
243
|
+
const req = indexedDB.deleteDatabase(name);
|
|
244
|
+
req.onsuccess = () => res();
|
|
245
|
+
req.onerror = () => rej(req.error);
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
export { JoopDataStorage, JoopIndexedDbService, JoopScopeMapService };
|
|
251
|
+
//# sourceMappingURL=index.mjs.map
|
|
252
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/storage/scope-map.service.ts","../../src/events/index.ts","../../src/storage/data-storage.service.ts","../../src/storage/indexed-db.service.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import { JoopScopeType } from '../enums';\n\n/**\n * Four-scope in-memory store.\n *\n * | Scope | Lifetime |\n * |---------|--------------------------------|\n * | app | Entire app session |\n * | page | Current page / flow |\n * | screen | Current screen / component |\n * | session | Browser session (survives nav) |\n */\nexport class JoopScopeMapService {\n private _appMap: Record<string, any> = {};\n private _pageMap: Record<string, any> = {};\n private _screenMap: Record<string, any> = {};\n private _sessionMap: Record<string, any> = {};\n\n getMap(scope: JoopScopeType): Record<string, any> {\n switch (scope) {\n case JoopScopeType.App: return this._appMap;\n case JoopScopeType.Page: return this._pageMap;\n case JoopScopeType.Screen: return this._screenMap;\n case JoopScopeType.Session: return this._sessionMap;\n }\n }\n\n clearScreen(): void { this._screenMap = {}; }\n clearPage(): void { this._pageMap = {}; }\n clearSession(): void { this._sessionMap = {}; }\n clearApp(): void { this._appMap = {}; }\n\n clearAll(): void {\n this._appMap = {};\n this._pageMap = {};\n this._screenMap = {};\n this._sessionMap = {};\n }\n}\n","export type Unsubscribe = () => void;\nexport type Listener<T> = (value: T) => void;\n\n/**\n * Lightweight pub/sub subject — emits to all current subscribers.\n * Replaces RxJS Subject without pulling in the full RxJS dependency.\n */\nexport class JoopSubject<T> {\n private _listeners: Listener<T>[] = [];\n\n subscribe(listener: Listener<T>): Unsubscribe {\n this._listeners.push(listener);\n return () => {\n this._listeners = this._listeners.filter(l => l !== listener);\n };\n }\n\n next(value: T): void {\n for (const listener of this._listeners) {\n listener(value);\n }\n }\n\n asObservable(): JoopObservable<T> {\n return new JoopObservable<T>(listener => this.subscribe(listener));\n }\n}\n\n/**\n * Stateful subject — replays the current value to any new subscriber immediately.\n * Replaces RxJS BehaviorSubject.\n */\nexport class JoopBehaviorSubject<T> extends JoopSubject<T> {\n private _value: T;\n\n constructor(initialValue: T) {\n super();\n this._value = initialValue;\n }\n\n getValue(): T {\n return this._value;\n }\n\n override next(value: T): void {\n this._value = value;\n super.next(value);\n }\n\n override subscribe(listener: Listener<T>): Unsubscribe {\n listener(this._value);\n return super.subscribe(listener);\n }\n\n override asObservable(): JoopObservable<T> {\n return new JoopObservable<T>(listener => this.subscribe(listener));\n }\n}\n\n/**\n * Read-only observable handle returned from asObservable().\n */\nexport class JoopObservable<T> {\n constructor(private _subscribeFn: (listener: Listener<T>) => Unsubscribe) {}\n\n subscribe(listener: Listener<T>): Unsubscribe {\n return this._subscribeFn(listener);\n }\n\n /** Returns the current value without subscribing (only meaningful for BehaviorSubject-backed observables). */\n getOnce(): T | undefined {\n let result: T | undefined;\n const unsub = this.subscribe(v => { result = v; });\n unsub();\n return result;\n }\n}\n","import { JoopBehaviorSubject, JoopObservable } from '../events';\nimport { JoopScopeType } from '../enums';\nimport { JoopScopeMapService } from './scope-map.service';\n\nexport class JoopDataStorage {\n private _menuSubject = new JoopBehaviorSubject<{ menuObj: any[] } | null>(null);\n\n constructor(private readonly _scopeMap: JoopScopeMapService) {}\n\n /** Store a value in the given scope under the given key. */\n set(scope: JoopScopeType, key: string, value: any): void {\n const map = this._scopeMap.getMap(scope);\n map[key] = value;\n }\n\n /** Retrieve a typed value from the given scope. Returns null if not found. */\n get<T>(scope: JoopScopeType, key: string): T | null {\n return this._scopeMap.getMap(scope)[key] ?? null;\n }\n\n /** Remove a single key from the given scope. */\n remove(scope: JoopScopeType, key: string): void {\n delete this._scopeMap.getMap(scope)[key];\n }\n\n /** Retrieve the entire map for a scope (reference, not clone). */\n getScope<T extends Record<string, any>>(scope: JoopScopeType): T {\n return this._scopeMap.getMap(scope) as T;\n }\n\n setMenuData(data: { menuObj: any[] }): void {\n this._menuSubject.next(data);\n }\n\n clearMenuData(): void {\n this._menuSubject.next(null);\n }\n\n menuData$(): JoopObservable<{ menuObj: any[] } | null> {\n return this._menuSubject.asObservable();\n }\n\n getMenuData(): { menuObj: any[] } | null {\n return this._menuSubject.getValue();\n }\n}\n","import { JoopBehaviorSubject } from '../events';\n\nexport interface JoopIdbStoreSchema {\n name: string;\n keyPath?: string;\n autoIncrement?: boolean;\n indexes?: Array<{ name: string; keyPath: string | string[]; unique?: boolean }>;\n}\n\nexport interface JoopIdbConfig {\n name: string;\n version: number;\n stores: JoopIdbStoreSchema[];\n}\n\nexport class JoopIndexedDbService {\n private _db: IDBDatabase | null = null;\n private _ready$ = new JoopBehaviorSubject<boolean>(false);\n\n async open(config: JoopIdbConfig): Promise<void> {\n return new Promise((resolve, reject) => {\n const req = indexedDB.open(config.name, config.version);\n req.onupgradeneeded = (e) => {\n const db = (e.target as IDBOpenDBRequest).result;\n for (const store of config.stores) {\n if (!db.objectStoreNames.contains(store.name)) {\n const os = db.createObjectStore(store.name, { keyPath: store.keyPath, autoIncrement: store.autoIncrement });\n for (const idx of store.indexes ?? []) os.createIndex(idx.name, idx.keyPath, { unique: idx.unique ?? false });\n }\n }\n };\n req.onsuccess = (e) => { this._db = (e.target as IDBOpenDBRequest).result; this._ready$.next(true); resolve(); };\n req.onerror = () => reject(req.error);\n });\n }\n\n close(): void { this._db?.close(); this._db = null; this._ready$.next(false); }\n isOpen(): boolean { return this._db !== null; }\n ready$() { return this._ready$.asObservable(); }\n\n private _store(storeName: string, mode: IDBTransactionMode): IDBObjectStore {\n if (!this._db) throw new Error('JoopIndexedDb: not open');\n return this._db.transaction(storeName, mode).objectStore(storeName);\n }\n\n async get<T>(store: string, key: IDBValidKey): Promise<T | null> {\n return new Promise((res, rej) => {\n const req = this._store(store, 'readonly').get(key);\n req.onsuccess = () => res((req.result as T) ?? null);\n req.onerror = () => rej(req.error);\n });\n }\n\n async set(store: string, value: unknown, key?: IDBValidKey): Promise<IDBValidKey> {\n return new Promise((res, rej) => {\n const req = key !== undefined ? this._store(store, 'readwrite').put(value, key) : this._store(store, 'readwrite').put(value);\n req.onsuccess = () => res(req.result);\n req.onerror = () => rej(req.error);\n });\n }\n\n async delete(store: string, key: IDBValidKey): Promise<void> {\n return new Promise((res, rej) => {\n const req = this._store(store, 'readwrite').delete(key);\n req.onsuccess = () => res();\n req.onerror = () => rej(req.error);\n });\n }\n\n async getAll<T>(store: string): Promise<T[]> {\n return new Promise((res, rej) => {\n const req = this._store(store, 'readonly').getAll();\n req.onsuccess = () => res(req.result as T[]);\n req.onerror = () => rej(req.error);\n });\n }\n\n async getAllKeys(store: string): Promise<IDBValidKey[]> {\n return new Promise((res, rej) => {\n const req = this._store(store, 'readonly').getAllKeys();\n req.onsuccess = () => res(req.result);\n req.onerror = () => rej(req.error);\n });\n }\n\n async query<T>(store: string, indexName: string, range: IDBKeyRange): Promise<T[]> {\n return new Promise((res, rej) => {\n const req = this._store(store, 'readonly').index(indexName).getAll(range);\n req.onsuccess = () => res(req.result as T[]);\n req.onerror = () => rej(req.error);\n });\n }\n\n async count(store: string, range?: IDBKeyRange): Promise<number> {\n return new Promise((res, rej) => {\n const req = range ? this._store(store, 'readonly').count(range) : this._store(store, 'readonly').count();\n req.onsuccess = () => res(req.result);\n req.onerror = () => rej(req.error);\n });\n }\n\n async clear(store: string): Promise<void> {\n return new Promise((res, rej) => {\n const req = this._store(store, 'readwrite').clear();\n req.onsuccess = () => res();\n req.onerror = () => rej(req.error);\n });\n }\n\n async bulkSet(store: string, items: unknown[]): Promise<void> {\n if (!this._db) throw new Error('JoopIndexedDb: not open');\n return new Promise((res, rej) => {\n const tx = this._db!.transaction(store, 'readwrite');\n const os = tx.objectStore(store);\n for (const item of items) os.put(item);\n tx.oncomplete = () => res();\n tx.onerror = () => rej(tx.error);\n });\n }\n\n async deleteDatabase(name: string): Promise<void> {\n this.close();\n return new Promise((res, rej) => {\n const req = indexedDB.deleteDatabase(name);\n req.onsuccess = () => res();\n req.onerror = () => rej(req.error);\n });\n }\n}\n"]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export { a as JoopMutation, b as JoopSyncConfig, c as JoopSyncConflict, J as JoopSyncEngine, d as JoopSyncStatus } from '../sync-engine-DZqyKHkK.mjs';
|
|
2
|
+
import '../index-Dz0gOur2.mjs';
|
|
3
|
+
|
|
4
|
+
declare class CRDTCounter {
|
|
5
|
+
private _inc;
|
|
6
|
+
private _dec;
|
|
7
|
+
increment(nodeId: string, by?: number): void;
|
|
8
|
+
decrement(nodeId: string, by?: number): void;
|
|
9
|
+
value(): number;
|
|
10
|
+
merge(remote: CRDTCounter): void;
|
|
11
|
+
state(): {
|
|
12
|
+
inc: Record<string, number>;
|
|
13
|
+
dec: Record<string, number>;
|
|
14
|
+
};
|
|
15
|
+
static fromState(s: {
|
|
16
|
+
inc: Record<string, number>;
|
|
17
|
+
dec: Record<string, number>;
|
|
18
|
+
}): CRDTCounter;
|
|
19
|
+
}
|
|
20
|
+
declare class CRDTSet<T> {
|
|
21
|
+
private _added;
|
|
22
|
+
private _removed;
|
|
23
|
+
add(uniqueId: string, item: T): void;
|
|
24
|
+
remove(uniqueId: string): void;
|
|
25
|
+
has(uniqueId: string): boolean;
|
|
26
|
+
values(): T[];
|
|
27
|
+
size(): number;
|
|
28
|
+
merge(remote: CRDTSet<T>): void;
|
|
29
|
+
state(): {
|
|
30
|
+
added: [string, T][];
|
|
31
|
+
removed: string[];
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
declare class CRDTRegister<T> {
|
|
35
|
+
private _value;
|
|
36
|
+
private _timestamp;
|
|
37
|
+
private _nodeId;
|
|
38
|
+
constructor(initial: T, nodeId?: string, timestamp?: number);
|
|
39
|
+
set(value: T, nodeId: string, timestamp?: number): void;
|
|
40
|
+
get(): T;
|
|
41
|
+
timestamp(): number;
|
|
42
|
+
merge(remote: CRDTRegister<T>): void;
|
|
43
|
+
state(): {
|
|
44
|
+
value: T;
|
|
45
|
+
timestamp: number;
|
|
46
|
+
nodeId: string;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
interface _Char {
|
|
50
|
+
id: string;
|
|
51
|
+
char: string;
|
|
52
|
+
after: string | null;
|
|
53
|
+
deleted: boolean;
|
|
54
|
+
}
|
|
55
|
+
declare class CRDTText {
|
|
56
|
+
private _chars;
|
|
57
|
+
private _index;
|
|
58
|
+
insert(after: string | null, char: string, nodeId: string, seq: number): string;
|
|
59
|
+
delete(id: string): void;
|
|
60
|
+
toString(): string;
|
|
61
|
+
length(): number;
|
|
62
|
+
merge(remote: CRDTText): void;
|
|
63
|
+
state(): _Char[];
|
|
64
|
+
}
|
|
65
|
+
declare function mergeCRDT<T extends {
|
|
66
|
+
merge(remote: T): void;
|
|
67
|
+
}>(local: T, remote: T): T;
|
|
68
|
+
|
|
69
|
+
export { CRDTCounter, CRDTRegister, CRDTSet, CRDTText, mergeCRDT };
|