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 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/events/index.ts","../../src/platform/platform.ts","../../src/device/network-monitor.ts","../../src/device/app-lifecycle.ts","../../src/device/key-vault.ts","../../src/vue/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["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 type { JoopPlatformAdapterConfig, JoopStorageAdapter } from './adapters';\n\nexport type JoopPlatformType = 'web' | 'react-native' | 'node' | 'unknown';\n\nexport interface JoopCapabilities {\n compression: boolean;\n workers: boolean;\n cryptoSubtle: boolean;\n persistentStorage: boolean;\n dom: boolean;\n serviceWorker: boolean;\n}\n\nexport interface JoopPlatformConfig {\n adapter?: JoopPlatformAdapterConfig;\n /** Override auto-detection — useful in tests or SSR */\n platform?: JoopPlatformType;\n}\n\n// ---------------------------------------------------------------------------\n// Built-in storage adapters\n// ---------------------------------------------------------------------------\n\nconst _webStorage = (store: Storage): JoopStorageAdapter => ({\n getItem: (k) => store.getItem(k),\n setItem: (k, v) => store.setItem(k, v),\n removeItem: (k) => store.removeItem(k),\n clear: () => store.clear(),\n});\n\nclass _MemStorageImpl implements JoopStorageAdapter {\n private _m = new Map<string, string>();\n getItem(k: string) { return this._m.get(k) ?? null; }\n setItem(k: string, v: string) { this._m.set(k, v); }\n removeItem(k: string) { this._m.delete(k); }\n clear() { this._m.clear(); }\n}\n\n// ---------------------------------------------------------------------------\n// Platform detection\n// ---------------------------------------------------------------------------\n\nfunction _detect(): JoopPlatformType {\n // React Native sets navigator.product = 'ReactNative'\n if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') return 'react-native';\n // Node.js: no window, has globalThis.process.versions.node\n const _proc = (globalThis as Record<string, unknown>)['process'] as { versions?: { node?: string } } | undefined;\n if (typeof window === 'undefined' && _proc?.versions?.node) return 'node';\n // Browser\n if (typeof window !== 'undefined') return 'web';\n return 'unknown';\n}\n\n// ---------------------------------------------------------------------------\n// JoopPlatform\n// ---------------------------------------------------------------------------\n\nexport class JoopPlatform {\n private static _type: JoopPlatformType = _detect();\n private static _adapter: JoopPlatformAdapterConfig = {};\n private static _memStorage: JoopStorageAdapter | null = null;\n\n /**\n * Call once at app startup to configure adapters for your platform.\n *\n * Web (default — no call needed):\n * JoopPlatform.init();\n *\n * React Native with react-native-mmkv:\n * import { MMKV } from 'react-native-mmkv';\n * const mmkv = new MMKV();\n * JoopPlatform.init({ adapter: { storage: mmkv } });\n *\n * React Native with custom compression (fflate):\n * import { gzip, ungzip } from 'fflate';\n * JoopPlatform.init({\n * adapter: {\n * compression: {\n * compress: (d, fmt) => new Promise((res, rej) => gzip(d, (e, r) => e ? rej(e) : res(r))),\n * decompress: (d, fmt) => new Promise((res, rej) => ungzip(d, (e, r) => e ? rej(e) : res(r))),\n * },\n * },\n * });\n */\n static init(config: JoopPlatformConfig = {}): void {\n if (config.platform) this._type = config.platform;\n this._adapter = { ...this._adapter, ...(config.adapter ?? {}) };\n }\n\n /** Current detected or overridden platform type */\n static get type(): JoopPlatformType { return this._type; }\n\n static is(type: JoopPlatformType): boolean { return this._type === type; }\n static isMobile(): boolean { return this._type === 'react-native'; }\n static isWeb(): boolean { return this._type === 'web'; }\n static isNode(): boolean { return this._type === 'node'; }\n\n /** Raw adapter config registered via init() */\n static getAdapter(): JoopPlatformAdapterConfig { return this._adapter; }\n\n /**\n * Returns the best available storage adapter:\n * 1. Custom adapter registered via init()\n * 2. localStorage (web)\n * 3. In-memory fallback (Node / RN without adapter)\n */\n static getStorage(): JoopStorageAdapter {\n if (this._adapter.storage) return this._adapter.storage;\n if (typeof localStorage !== 'undefined') return _webStorage(localStorage);\n if (!this._memStorage) this._memStorage = new _MemStorageImpl();\n return this._memStorage;\n }\n\n /**\n * Returns the best available session-scoped storage:\n * 1. Custom adapter registered via init()\n * 2. sessionStorage (web)\n * 3. Shared in-memory fallback\n */\n static getSessionStorage(): JoopStorageAdapter {\n if (this._adapter.storage) return this._adapter.storage;\n if (typeof sessionStorage !== 'undefined') return _webStorage(sessionStorage);\n if (!this._memStorage) this._memStorage = new _MemStorageImpl();\n return this._memStorage;\n }\n\n /** What APIs are available in the current environment */\n static capabilities(): JoopCapabilities {\n return {\n compression: typeof CompressionStream !== 'undefined' || !!this._adapter.compression,\n workers: typeof Worker !== 'undefined' || !!this._adapter.worker,\n cryptoSubtle: !!(typeof globalThis !== 'undefined' && (globalThis as typeof globalThis & { crypto?: Crypto }).crypto?.subtle),\n persistentStorage: typeof localStorage !== 'undefined' || !!this._adapter.storage,\n dom: typeof document !== 'undefined',\n serviceWorker: typeof navigator !== 'undefined' && 'serviceWorker' in navigator,\n };\n }\n\n /** Reset to auto-detected defaults — useful between tests */\n static _reset(): void {\n this._type = _detect();\n this._adapter = {};\n this._memStorage = null;\n }\n}\n","import { JoopBehaviorSubject } from '../events';\nimport { JoopPlatform } from '../platform/platform';\nimport type { JoopNetworkAdapter, JoopNetworkState, JoopNetworkType, JoopEffectiveType } from '../platform/adapters';\n\nexport type { JoopNetworkState, JoopNetworkType, JoopEffectiveType };\n\nexport interface JoopNetworkMonitorConfig {\n /** Override platform adapter (e.g. RN NetInfo wrapper) */\n adapter?: JoopNetworkAdapter;\n}\n\ntype _NetInfoConnection = {\n type?: string;\n effectiveType?: string;\n downlink?: number;\n rtt?: number;\n saveData?: boolean;\n metered?: boolean;\n addEventListener(event: 'change', handler: () => void): void;\n removeEventListener(event: 'change', handler: () => void): void;\n};\n\nexport class JoopNetworkMonitor {\n private _adapter: JoopNetworkAdapter | null;\n private _state$: JoopBehaviorSubject<JoopNetworkState>;\n private _cleanup: Array<() => void> = [];\n\n constructor(config: JoopNetworkMonitorConfig = {}) {\n this._adapter = config.adapter ?? JoopPlatform.getAdapter().network ?? null;\n this._state$ = new JoopBehaviorSubject<JoopNetworkState>(this._read());\n this._init();\n }\n\n private _init(): void {\n if (this._adapter) {\n this._state$.next(this._adapter.getState());\n const unsub = this._adapter.onChange(s => this._state$.next(s));\n this._cleanup.push(unsub);\n return;\n }\n\n if (typeof window === 'undefined') return;\n\n const refresh = () => this._state$.next(this._read());\n\n window.addEventListener('online', refresh);\n window.addEventListener('offline', refresh);\n\n const conn = (navigator as unknown as { connection?: _NetInfoConnection }).connection;\n if (conn) {\n conn.addEventListener('change', refresh);\n this._cleanup.push(() => conn.removeEventListener('change', refresh));\n }\n\n this._cleanup.push(\n () => window.removeEventListener('online', refresh),\n () => window.removeEventListener('offline', refresh),\n );\n }\n\n private _read(): JoopNetworkState {\n if (this._adapter) return this._adapter.getState();\n if (typeof navigator === 'undefined') return { online: false, type: 'unknown' };\n\n const online = navigator.onLine;\n if (!online) return { online: false, type: 'offline' };\n\n const conn = (navigator as unknown as { connection?: _NetInfoConnection }).connection;\n const type = conn ? _mapType(conn.type) : 'unknown';\n\n return {\n online,\n type,\n effectiveType: conn?.effectiveType as JoopEffectiveType | undefined,\n downlink: conn?.downlink,\n rtt: conn?.rtt,\n saveData: conn?.saveData,\n metered: conn?.metered ?? type === 'cellular',\n };\n }\n\n getState(): JoopNetworkState { return this._state$.getValue(); }\n state$() { return this._state$.asObservable(); }\n isOnline(): boolean { return this.getState().online; }\n isMetered(): boolean { return this.getState().metered ?? this.getState().type === 'cellular'; }\n\n /** Call fn when connectivity is regained. */\n onOnline(fn: () => void): () => void {\n let prev = this.getState().online;\n return this._state$.subscribe(s => {\n if (s.online && !prev) fn();\n prev = s.online;\n });\n }\n\n /** Call fn when connectivity is lost. */\n onOffline(fn: () => void): () => void {\n let prev = this.getState().online;\n return this._state$.subscribe(s => {\n if (!s.online && prev) fn();\n prev = s.online;\n });\n }\n\n /** Call fn when the connection type changes (e.g. wifi → cellular). */\n onTypeChange(fn: (type: JoopNetworkType) => void): () => void {\n let prev = this.getState().type;\n return this._state$.subscribe(s => {\n if (s.type !== prev) { fn(s.type); prev = s.type; }\n });\n }\n\n destroy(): void {\n for (const fn of this._cleanup) fn();\n this._cleanup = [];\n }\n}\n\nfunction _mapType(raw?: string): JoopNetworkType {\n if (!raw) return 'unknown';\n if (raw === 'wifi' || raw === 'wimax') return 'wifi';\n if (raw === 'cellular' || raw === '2g' || raw === '3g' || raw === '4g' || raw === '5g') return 'cellular';\n if (raw === 'ethernet') return 'ethernet';\n if (raw === 'none' || raw === 'offline') return 'offline';\n return 'unknown';\n}\n","import { JoopBehaviorSubject } from '../events';\nimport { JoopPlatform } from '../platform/platform';\nimport type { JoopLifecycleAdapter, JoopAppState } from '../platform/adapters';\n\nexport type { JoopAppState };\n\nexport interface JoopLifecycleConfig {\n /** Override platform adapter (e.g. RN AppState wrapper) */\n adapter?: JoopLifecycleAdapter;\n}\n\nexport class JoopAppLifecycle {\n private _state$ = new JoopBehaviorSubject<JoopAppState>('unknown');\n private _cleanup: Array<() => void> = [];\n private _adapter: JoopLifecycleAdapter | null;\n\n constructor(config: JoopLifecycleConfig = {}) {\n this._adapter = config.adapter ?? JoopPlatform.getAdapter().lifecycle ?? null;\n this._init();\n }\n\n private _init(): void {\n if (this._adapter) {\n this._state$.next(this._adapter.getState());\n const unsub = this._adapter.onChange(s => this._state$.next(s));\n this._cleanup.push(unsub);\n return;\n }\n\n if (typeof document === 'undefined') { this._state$.next('unknown'); return; }\n\n this._state$.next(document.hidden ? 'background' : 'active');\n\n const onVisibility = () => this._state$.next(document.hidden ? 'background' : 'active');\n const onFocus = () => this._state$.next('active');\n const onBlur = () => this._state$.next('background');\n\n document.addEventListener('visibilitychange', onVisibility);\n window.addEventListener('focus', onFocus);\n window.addEventListener('blur', onBlur);\n\n this._cleanup.push(\n () => document.removeEventListener('visibilitychange', onVisibility),\n () => window.removeEventListener('focus', onFocus),\n () => window.removeEventListener('blur', onBlur),\n );\n }\n\n getState(): JoopAppState { return this._state$.getValue(); }\n state$() { return this._state$.asObservable(); }\n isActive(): boolean { return this.getState() === 'active'; }\n\n /** Call fn each time the app comes to the foreground (background → active). */\n onForeground(fn: () => void): () => void {\n let prev = this.getState();\n return this._state$.subscribe(s => {\n if (s === 'active' && prev !== 'active') fn();\n prev = s;\n });\n }\n\n /** Call fn each time the app goes to the background (active → background). */\n onBackground(fn: () => void): () => void {\n let prev = this.getState();\n return this._state$.subscribe(s => {\n if (s === 'background' && prev !== 'background') fn();\n prev = s;\n });\n }\n\n destroy(): void {\n for (const fn of this._cleanup) fn();\n this._cleanup = [];\n }\n}\n","import { JoopPlatform } from '../platform/platform';\nimport type { JoopKeyVaultAdapter } from '../platform/adapters';\n\nexport interface JoopKeyVaultConfig {\n /** AES-GCM encryption password. If omitted, values are base64-encoded only (no encryption). */\n encryptionKey?: string;\n /** localStorage key prefix. Default: 'joop_vault_' */\n prefix?: string;\n /** Override platform adapter (e.g. react-native-keychain wrapper) */\n adapter?: JoopKeyVaultAdapter;\n}\n\nexport class JoopKeyVault {\n private _prefix: string;\n private _encKey: string | undefined;\n private _adapter: JoopKeyVaultAdapter | null;\n private _cryptoKey: CryptoKey | null = null;\n\n constructor(config: JoopKeyVaultConfig = {}) {\n this._prefix = config.prefix ?? 'joop_vault_';\n this._encKey = config.encryptionKey;\n this._adapter = config.adapter ?? JoopPlatform.getAdapter().keyVault ?? null;\n }\n\n /** Store a secret. On web: AES-GCM encrypted if `encryptionKey` was provided. */\n async set(key: string, value: string): Promise<void> {\n if (this._adapter) return this._adapter.set(key, value);\n const stored = this._encKey\n ? await _encrypt(value, await this._key())\n : btoa(unescape(encodeURIComponent(value)));\n JoopPlatform.getStorage().setItem(this._prefix + key, stored);\n }\n\n /** Retrieve a secret, or null if not found. */\n async get(key: string): Promise<string | null> {\n if (this._adapter) return this._adapter.get(key);\n const raw = JoopPlatform.getStorage().getItem(this._prefix + key);\n if (!raw) return null;\n try {\n return this._encKey\n ? await _decrypt(raw, await this._key())\n : decodeURIComponent(escape(atob(raw)));\n } catch {\n return null;\n }\n }\n\n async remove(key: string): Promise<void> {\n if (this._adapter) return this._adapter.remove(key);\n JoopPlatform.getStorage().removeItem(this._prefix + key);\n }\n\n async clear(): Promise<void> {\n if (this._adapter) return this._adapter.clear();\n JoopPlatform.getStorage().clear?.();\n }\n\n async has(key: string): Promise<boolean> {\n return (await this.get(key)) !== null;\n }\n\n /** Rotate the encryption key: re-encrypts all known entries with a new key. */\n async rotateKey(newEncryptionKey: string, keys: string[]): Promise<void> {\n if (this._adapter) throw new Error('rotateKey not supported with native adapter');\n const values = await Promise.all(keys.map(k => this.get(k)));\n this._encKey = newEncryptionKey;\n this._cryptoKey = null;\n for (let i = 0; i < keys.length; i++) {\n if (values[i] !== null) await this.set(keys[i], values[i]!);\n }\n }\n\n private async _key(): Promise<CryptoKey> {\n if (!this._cryptoKey) this._cryptoKey = await _deriveKey(this._encKey!);\n return this._cryptoKey;\n }\n}\n\n// ── WebCrypto helpers ────────────────────────────────────────────────────────\n\nconst _SALT = new Uint8Array([\n 0x6a, 0x6f, 0x6f, 0x70, 0x2d, 0x76, 0x61, 0x75,\n 0x6c, 0x74, 0x2d, 0x76, 0x31, 0x00, 0x00, 0x00,\n]);\n\nasync function _deriveKey(password: string): Promise<CryptoKey> {\n const km = await crypto.subtle.importKey(\n 'raw', new TextEncoder().encode(password),\n { name: 'PBKDF2' }, false, ['deriveKey'],\n );\n return crypto.subtle.deriveKey(\n { name: 'PBKDF2', salt: _SALT, iterations: 100000, hash: 'SHA-256' },\n km,\n { name: 'AES-GCM', length: 256 },\n false,\n ['encrypt', 'decrypt'],\n );\n}\n\nasync function _encrypt(value: string, key: CryptoKey): Promise<string> {\n const iv = crypto.getRandomValues(new Uint8Array(12));\n const encrypted = await crypto.subtle.encrypt(\n { name: 'AES-GCM', iv },\n key,\n new TextEncoder().encode(value),\n );\n const combined = new Uint8Array(12 + encrypted.byteLength);\n combined.set(iv);\n combined.set(new Uint8Array(encrypted), 12);\n return btoa(String.fromCharCode(...combined));\n}\n\nasync function _decrypt(encoded: string, key: CryptoKey): Promise<string> {\n const combined = Uint8Array.from(atob(encoded), c => c.charCodeAt(0));\n const iv = combined.slice(0, 12);\n const data = combined.slice(12);\n const decrypted = await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, data);\n return new TextDecoder().decode(decrypted);\n}\n","/**\n * joopjs/vue — Vue 3 composables integration\n *\n * Vue 3.x is a required peer dependency. Call createJoopVue(Vue) once and\n * destructure the composables you need:\n *\n * import * as Vue from 'vue';\n * import { createJoopVue } from 'joopjs/vue';\n * export const {\n * provideJoop, useJoop, useJoopNetwork, useJoopAuth,\n * } = createJoopVue(Vue);\n *\n * Root component setup():\n * provideJoop(await createJoop(config));\n *\n * Any child component setup():\n * const { isLoggedIn } = useJoopAuth();\n */\n\nimport type { JoopInstance } from '../joop';\nimport type { JoopNetworkState, JoopNetworkType, JoopEffectiveType } from '../device/network-monitor';\nimport type { JoopAppState } from '../device/app-lifecycle';\nimport type { JoopThemeInfo } from '../theme/theme.service';\nimport { JoopNetworkMonitor } from '../device/network-monitor';\nimport { JoopAppLifecycle } from '../device/app-lifecycle';\nimport { JoopKeyVault } from '../device/key-vault';\n\n// ── Minimal Vue type declarations (peer dependency) ───────────────────────────\n\ntype _Ref<T> = { value: T };\ntype _ComputedRef<T> = { readonly value: T };\n\nexport interface VueLike {\n ref<T>(value: T): _Ref<T>;\n computed<T>(getter: () => T): _ComputedRef<T>;\n onUnmounted(fn: () => void): void;\n provide<T>(key: symbol, value: T): void;\n inject<T>(key: symbol, defaultValue: T | null): T | null;\n}\n\n// ── Composable return types ───────────────────────────────────────────────────\n\nexport interface JoopNetworkComposable {\n online: _ComputedRef<boolean>;\n type: _ComputedRef<JoopNetworkType>;\n effectiveType: _ComputedRef<JoopEffectiveType | undefined>;\n isMetered: _ComputedRef<boolean>;\n monitor: JoopNetworkMonitor;\n}\n\nexport interface JoopLifecycleComposable {\n state: _ComputedRef<JoopAppState>;\n isActive: _ComputedRef<boolean>;\n}\n\nexport interface JoopKeyVaultComposable {\n value: _Ref<string | null>;\n loading: _Ref<boolean>;\n set(v: string): Promise<void>;\n remove(): Promise<void>;\n refresh(): Promise<void>;\n}\n\nexport interface JoopAuthComposable {\n isLoggedIn: _Ref<boolean>;\n login(): void;\n logout(): void;\n}\n\nexport interface JoopThemeComposable {\n active: _Ref<string>;\n themes: _ComputedRef<JoopThemeInfo[]>;\n setTheme(nameOrId: string): void;\n}\n\nexport interface JoopI18nComposable {\n language: _Ref<string>;\n direction: _Ref<'ltr' | 'rtl'>;\n t(key: string, params?: Record<string, string>): string;\n setLanguage(lang: string): void;\n}\n\nexport interface JoopLoaderComposable {\n isLoading: _Ref<boolean>;\n show(): void;\n hide(): void;\n}\n\nexport interface JoopFeatureFlagComposable {\n enabled: _ComputedRef<boolean>;\n variant: _ComputedRef<string | null>;\n}\n\n// ── Factory ───────────────────────────────────────────────────────────────────\n\nexport function createJoopVue<V extends VueLike>(vue: V) {\n const { ref, computed, onUnmounted, provide, inject } = vue;\n\n // Private injection key — unique per factory call\n const JoopKey = Symbol('JoopInstance');\n\n // ── provideJoop ────────────────────────────────────────────────────────────\n function provideJoop(instance: JoopInstance): void {\n provide(JoopKey, instance);\n }\n\n // ── useJoop ────────────────────────────────────────────────────────────────\n function useJoop(): JoopInstance {\n const joop = inject<JoopInstance>(JoopKey, null);\n if (!joop) throw new Error('[joopjs] useJoop() must be called inside a component where provideJoop() was called');\n return joop;\n }\n\n // ── useJoopNetworkMonitor ─────────────────────────────────────────────────\n function useJoopNetworkMonitor(): JoopNetworkComposable {\n const monitor = new JoopNetworkMonitor();\n const state = ref<JoopNetworkState>(monitor.getState());\n\n const unsub = monitor.state$().subscribe(s => { state.value = { ...s }; });\n onUnmounted(() => { unsub(); monitor.destroy(); });\n\n return {\n online: computed(() => state.value.online),\n type: computed(() => state.value.type),\n effectiveType: computed(() => state.value.effectiveType),\n isMetered: computed(() => state.value.metered ?? state.value.type === 'cellular'),\n monitor,\n };\n }\n\n // ── useJoopAppLifecycle ───────────────────────────────────────────────────\n function useJoopAppLifecycle(): JoopLifecycleComposable {\n const lc = new JoopAppLifecycle();\n const state = ref<JoopAppState>(lc.getState());\n\n const unsub = lc.state$().subscribe(s => { state.value = s; });\n onUnmounted(() => { unsub(); lc.destroy(); });\n\n return {\n state: computed(() => state.value),\n isActive: computed(() => state.value === 'active'),\n };\n }\n\n // ── useJoopKeyVault ───────────────────────────────────────────────────────\n function useJoopKeyVault(\n key: string,\n vaultConfig?: ConstructorParameters<typeof JoopKeyVault>[0],\n ): JoopKeyVaultComposable {\n const vault = new JoopKeyVault(vaultConfig);\n const value = ref<string | null>(null);\n const loading = ref(true);\n\n const refresh = async () => {\n loading.value = true;\n value.value = await vault.get(key);\n loading.value = false;\n };\n\n refresh();\n\n return {\n value,\n loading,\n async set(v: string) { await vault.set(key, v); value.value = v; },\n async remove() { await vault.remove(key); value.value = null; },\n refresh,\n };\n }\n\n // ── useJoopAuth ───────────────────────────────────────────────────────────\n function useJoopAuth(): JoopAuthComposable {\n const joop = useJoop();\n const isLoggedIn = ref(joop.auth.isLoggedIn());\n\n const unsub = joop.auth.isLoggedIn$().subscribe(v => { isLoggedIn.value = v; });\n onUnmounted(() => unsub());\n\n return {\n isLoggedIn,\n login: () => joop.auth.setLoggedIn(true),\n logout: () => joop.auth.logout(),\n };\n }\n\n // ── useJoopTheme ─────────────────────────────────────────────────────────\n function useJoopTheme(): JoopThemeComposable {\n const joop = useJoop();\n const active = ref(joop.theme.getActiveName());\n const themes = computed(() => joop.theme.getMapped());\n\n const unsub = joop.theme.active$().subscribe(name => { active.value = name; });\n onUnmounted(() => unsub());\n\n return {\n active,\n themes,\n setTheme: (nameOrId: string) => joop.theme.apply(nameOrId),\n };\n }\n\n // ── useJoopI18n ───────────────────────────────────────────────────────────\n function useJoopI18n(): JoopI18nComposable {\n const joop = useJoop();\n const details = joop.i18n.getDetails();\n const language = ref(details.code);\n const direction = ref<'ltr' | 'rtl'>(details.direction as 'ltr' | 'rtl');\n\n const unsub = joop.i18n.language$().subscribe(lang => {\n language.value = lang;\n direction.value = joop.i18n.getDirection() as 'ltr' | 'rtl';\n });\n onUnmounted(() => unsub());\n\n return {\n language,\n direction,\n t: (key, params) => joop.i18n.t(key, params),\n setLanguage: lang => joop.i18n.setLanguage(lang),\n };\n }\n\n // ── useJoopLoader ─────────────────────────────────────────────────────────\n function useJoopLoader(): JoopLoaderComposable {\n const joop = useJoop();\n const isLoading = ref(joop.loader.isLoading());\n\n const unsub = joop.loader.isLoading$().subscribe(v => { isLoading.value = v; });\n onUnmounted(() => unsub());\n\n return {\n isLoading,\n show: () => joop.loader.show(),\n hide: () => joop.loader.hide(),\n };\n }\n\n // ── useJoopConfig ─────────────────────────────────────────────────────────\n function useJoopConfig<T>(key: string): _ComputedRef<T | undefined> {\n const joop = useJoop();\n return computed(() => joop.config.get<T>(key));\n }\n\n // ── useJoopFeatureFlag ────────────────────────────────────────────────────\n function useJoopFeatureFlag(\n flagKey: string,\n context?: Record<string, unknown>,\n ): JoopFeatureFlagComposable {\n const joop = useJoop();\n return {\n enabled: computed(() => joop.featureFlags.isEnabled(flagKey, context as never)),\n variant: computed(() => joop.featureFlags.getVariant(flagKey, context as never)),\n };\n }\n\n // ── useJoopStore ──────────────────────────────────────────────────────────\n function useJoopStore<S extends Record<string, unknown>, T>(\n selector: (state: S) => T,\n ): _Ref<T> {\n const joop = useJoop();\n const store = joop.store as unknown as {\n subscribe(fn: (s: S) => void): () => void;\n getState(): S;\n };\n const value = ref<T>(selector(store.getState())) as _Ref<T>;\n\n const unsub = store.subscribe(s => { value.value = selector(s); });\n onUnmounted(() => unsub());\n\n return value;\n }\n\n return {\n JoopKey,\n provideJoop,\n useJoop,\n useJoopNetworkMonitor,\n useJoopAppLifecycle,\n useJoopKeyVault,\n useJoopAuth,\n useJoopTheme,\n useJoopI18n,\n useJoopLoader,\n useJoopConfig,\n useJoopFeatureFlag,\n useJoopStore,\n };\n}\n\nexport type JoopVueComposables = ReturnType<typeof createJoopVue>;\n"]}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { J as JoopObservable } from './index-Dz0gOur2.js';
|
|
2
|
+
|
|
3
|
+
type JoopClipboardEvent = {
|
|
4
|
+
type: 'copy' | 'paste';
|
|
5
|
+
text: string;
|
|
6
|
+
};
|
|
7
|
+
declare class JoopClipboardService {
|
|
8
|
+
private _events$;
|
|
9
|
+
/** Copy text to clipboard. Falls back to execCommand for older browsers. */
|
|
10
|
+
copy(text: string): Promise<boolean>;
|
|
11
|
+
/** Read text from clipboard */
|
|
12
|
+
paste(): Promise<string | null>;
|
|
13
|
+
/** Copy a DOM element's innerText */
|
|
14
|
+
copyElement(elementOrId: HTMLElement | string): Promise<boolean>;
|
|
15
|
+
/** Observe copy/paste events */
|
|
16
|
+
events$(): JoopObservable<JoopClipboardEvent>;
|
|
17
|
+
private _execCopy;
|
|
18
|
+
}
|
|
19
|
+
/** Module-level singleton for quick use without instantiation */
|
|
20
|
+
declare const clipboard: JoopClipboardService;
|
|
21
|
+
|
|
22
|
+
interface JoopImageInfo {
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
size: number;
|
|
26
|
+
type: string;
|
|
27
|
+
name: string;
|
|
28
|
+
aspectRatio: number;
|
|
29
|
+
}
|
|
30
|
+
interface JoopImageValidation {
|
|
31
|
+
valid: boolean;
|
|
32
|
+
errors: string[];
|
|
33
|
+
}
|
|
34
|
+
interface JoopCompressOptions {
|
|
35
|
+
maxWidthOrHeight?: number;
|
|
36
|
+
quality?: number;
|
|
37
|
+
outputType?: string;
|
|
38
|
+
maxSizeBytes?: number;
|
|
39
|
+
}
|
|
40
|
+
declare class JoopImageService {
|
|
41
|
+
/** Compress and optionally resize an image file */
|
|
42
|
+
compress(file: File | Blob, options?: JoopCompressOptions): Promise<Blob>;
|
|
43
|
+
/** Resize to exact dimensions */
|
|
44
|
+
resize(file: File | Blob, width: number, height: number, outputType?: string): Promise<Blob>;
|
|
45
|
+
/** Convert a blob to base64 data URL */
|
|
46
|
+
toBase64(file: File | Blob): Promise<string>;
|
|
47
|
+
/** Get image dimensions and metadata */
|
|
48
|
+
getInfo(file: File): Promise<JoopImageInfo>;
|
|
49
|
+
/** Validate an image against size/type/dimension constraints */
|
|
50
|
+
validate(file: File, options?: {
|
|
51
|
+
maxSizeBytes?: number;
|
|
52
|
+
allowedTypes?: string[];
|
|
53
|
+
maxWidth?: number;
|
|
54
|
+
maxHeight?: number;
|
|
55
|
+
minWidth?: number;
|
|
56
|
+
minHeight?: number;
|
|
57
|
+
}): Promise<JoopImageValidation>;
|
|
58
|
+
/** Create thumbnail as data URL */
|
|
59
|
+
thumbnail(file: File | Blob, size?: number): Promise<string>;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
interface JoopPdfTextOptions {
|
|
63
|
+
font?: 'Helvetica' | 'Helvetica-Bold' | 'Times-Roman' | 'Courier';
|
|
64
|
+
size?: number;
|
|
65
|
+
color?: [number, number, number];
|
|
66
|
+
}
|
|
67
|
+
interface JoopPdfLineOptions {
|
|
68
|
+
width?: number;
|
|
69
|
+
color?: [number, number, number];
|
|
70
|
+
dash?: [number, number];
|
|
71
|
+
}
|
|
72
|
+
interface JoopPdfTableColumn {
|
|
73
|
+
header: string;
|
|
74
|
+
key: string;
|
|
75
|
+
width: number;
|
|
76
|
+
align?: 'left' | 'right' | 'center';
|
|
77
|
+
}
|
|
78
|
+
interface JoopPdfOptions {
|
|
79
|
+
pageWidth?: number;
|
|
80
|
+
pageHeight?: number;
|
|
81
|
+
margin?: number;
|
|
82
|
+
}
|
|
83
|
+
interface JoopReceiptLine {
|
|
84
|
+
label: string;
|
|
85
|
+
value: string;
|
|
86
|
+
bold?: boolean;
|
|
87
|
+
}
|
|
88
|
+
declare class _PdfBuilder {
|
|
89
|
+
private _objs;
|
|
90
|
+
private _offsets;
|
|
91
|
+
private _stream;
|
|
92
|
+
private _pw;
|
|
93
|
+
private _ph;
|
|
94
|
+
private _fonts;
|
|
95
|
+
constructor(w?: number, h?: number);
|
|
96
|
+
private _addObj;
|
|
97
|
+
private _y;
|
|
98
|
+
text(x: number, y: number, content: string, opts?: JoopPdfTextOptions): this;
|
|
99
|
+
line(x1: number, y1: number, x2: number, y2: number, opts?: JoopPdfLineOptions): this;
|
|
100
|
+
rect(x: number, y: number, w: number, h: number, fill?: [number, number, number], stroke?: [number, number, number]): this;
|
|
101
|
+
table(x: number, y: number, cols: JoopPdfTableColumn[], rows: Record<string, string>[], opts?: {
|
|
102
|
+
rowHeight?: number;
|
|
103
|
+
headerBg?: [number, number, number];
|
|
104
|
+
fontSize?: number;
|
|
105
|
+
}): number;
|
|
106
|
+
build(): Uint8Array;
|
|
107
|
+
}
|
|
108
|
+
declare class JoopPdfService {
|
|
109
|
+
private _opts;
|
|
110
|
+
constructor(opts?: JoopPdfOptions);
|
|
111
|
+
private _builder;
|
|
112
|
+
/** Generate a basic receipt PDF */
|
|
113
|
+
receipt(title: string, lines: JoopReceiptLine[], footer?: string): Uint8Array;
|
|
114
|
+
/** Generate a statement with a table */
|
|
115
|
+
statement(title: string, subtitle: string, columns: JoopPdfTableColumn[], rows: Record<string, string>[], summary?: JoopReceiptLine[]): Uint8Array;
|
|
116
|
+
/** Wrap raw bytes as a base64 data URL */
|
|
117
|
+
toDataUrl(bytes: Uint8Array): string;
|
|
118
|
+
/** Trigger browser download */
|
|
119
|
+
download(bytes: Uint8Array, filename?: string): void;
|
|
120
|
+
/** Low-level builder for custom documents */
|
|
121
|
+
builder(): _PdfBuilder;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
interface JoopGeoPosition {
|
|
125
|
+
latitude: number;
|
|
126
|
+
longitude: number;
|
|
127
|
+
accuracy: number;
|
|
128
|
+
altitude: number | null;
|
|
129
|
+
speed: number | null;
|
|
130
|
+
heading: number | null;
|
|
131
|
+
timestamp: number;
|
|
132
|
+
}
|
|
133
|
+
interface JoopGeoOptions extends PositionOptions {
|
|
134
|
+
timeout?: number;
|
|
135
|
+
maximumAge?: number;
|
|
136
|
+
enableHighAccuracy?: boolean;
|
|
137
|
+
}
|
|
138
|
+
declare class JoopGeoService {
|
|
139
|
+
isSupported(): boolean;
|
|
140
|
+
getPosition(opts?: JoopGeoOptions): Promise<JoopGeoPosition>;
|
|
141
|
+
watchPosition(onSuccess: (pos: JoopGeoPosition) => void, onError?: (err: GeolocationPositionError) => void, opts?: JoopGeoOptions): number;
|
|
142
|
+
clearWatch(id: number): void;
|
|
143
|
+
getPermissionState(): Promise<PermissionState>;
|
|
144
|
+
/** Haversine distance in kilometers */
|
|
145
|
+
distance(from: {
|
|
146
|
+
latitude: number;
|
|
147
|
+
longitude: number;
|
|
148
|
+
}, to: {
|
|
149
|
+
latitude: number;
|
|
150
|
+
longitude: number;
|
|
151
|
+
}): number;
|
|
152
|
+
isInRadius(point: {
|
|
153
|
+
latitude: number;
|
|
154
|
+
longitude: number;
|
|
155
|
+
}, center: {
|
|
156
|
+
latitude: number;
|
|
157
|
+
longitude: number;
|
|
158
|
+
}, radiusKm: number): boolean;
|
|
159
|
+
/** Compute compass bearing from `from` to `to` in degrees (0–360) */
|
|
160
|
+
bearing(from: {
|
|
161
|
+
latitude: number;
|
|
162
|
+
longitude: number;
|
|
163
|
+
}, to: {
|
|
164
|
+
latitude: number;
|
|
165
|
+
longitude: number;
|
|
166
|
+
}): number;
|
|
167
|
+
formatCoords(lat: number, lon: number, format?: 'dms' | 'decimal'): string;
|
|
168
|
+
private _map;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
interface JoopMediaConstraints {
|
|
172
|
+
video?: boolean | MediaTrackConstraints;
|
|
173
|
+
audio?: boolean | MediaTrackConstraints;
|
|
174
|
+
}
|
|
175
|
+
interface JoopRecorderOptions {
|
|
176
|
+
mimeType?: string;
|
|
177
|
+
audioBitsPerSecond?: number;
|
|
178
|
+
videoBitsPerSecond?: number;
|
|
179
|
+
timeslice?: number;
|
|
180
|
+
}
|
|
181
|
+
declare class JoopMediaRecorder {
|
|
182
|
+
private _recorder;
|
|
183
|
+
private _chunks;
|
|
184
|
+
constructor(stream: MediaStream, opts?: JoopRecorderOptions);
|
|
185
|
+
start(timeslice?: number): void;
|
|
186
|
+
stop(): Promise<Blob>;
|
|
187
|
+
pause(): void;
|
|
188
|
+
resume(): void;
|
|
189
|
+
getState(): RecordingState;
|
|
190
|
+
}
|
|
191
|
+
declare class JoopMediaService {
|
|
192
|
+
isSupported(): boolean;
|
|
193
|
+
requestStream(constraints: JoopMediaConstraints): Promise<MediaStream>;
|
|
194
|
+
requestCamera(constraints?: MediaTrackConstraints): Promise<MediaStream>;
|
|
195
|
+
requestMicrophone(constraints?: MediaTrackConstraints): Promise<MediaStream>;
|
|
196
|
+
requestScreenShare(withAudio?: boolean): Promise<MediaStream>;
|
|
197
|
+
stopStream(stream: MediaStream): void;
|
|
198
|
+
capturePhoto(stream: MediaStream, quality?: number): Promise<Blob>;
|
|
199
|
+
createRecorder(stream: MediaStream, opts?: JoopRecorderOptions): JoopMediaRecorder;
|
|
200
|
+
getDevices(kind?: MediaDeviceKind): Promise<MediaDeviceInfo[]>;
|
|
201
|
+
checkPermission(kind: 'camera' | 'microphone'): Promise<PermissionState>;
|
|
202
|
+
/** Attach a stream to a <video> element */
|
|
203
|
+
attachStream(stream: MediaStream, videoEl: HTMLVideoElement, muted?: boolean): void;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
interface JoopWatermarkOptions {
|
|
207
|
+
opacity?: number;
|
|
208
|
+
fontSize?: number;
|
|
209
|
+
color?: string;
|
|
210
|
+
rotation?: number;
|
|
211
|
+
repeat?: boolean;
|
|
212
|
+
lsb?: boolean;
|
|
213
|
+
}
|
|
214
|
+
declare class JoopWatermarkService {
|
|
215
|
+
private _watermarkedElements;
|
|
216
|
+
/**
|
|
217
|
+
* Apply a visible tiled watermark overlay to an element.
|
|
218
|
+
*/
|
|
219
|
+
apply(element: HTMLElement, text: string, opts?: JoopWatermarkOptions): void;
|
|
220
|
+
remove(element: HTMLElement): void;
|
|
221
|
+
/**
|
|
222
|
+
* Embed a payload invisibly into an ImageData using LSB steganography.
|
|
223
|
+
* Modifies the least significant bit of the R channel of each pixel.
|
|
224
|
+
*/
|
|
225
|
+
embedInImage(imageData: ImageData, payload: string): ImageData;
|
|
226
|
+
/**
|
|
227
|
+
* Extract a payload from an ImageData that was embedded with embedInImage.
|
|
228
|
+
* Returns null if no valid payload is found.
|
|
229
|
+
*/
|
|
230
|
+
extractFromImage(imageData: ImageData): string | null;
|
|
231
|
+
/** Apply invisible LSB watermark to a canvas element */
|
|
232
|
+
applyToCanvas(canvas: HTMLCanvasElement, payload: string): void;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export { JoopClipboardService as J, JoopImageService as a, JoopPdfService as b, JoopGeoService as c, JoopMediaService as d, JoopWatermarkService as e, type JoopCompressOptions as f, type JoopGeoOptions as g, type JoopGeoPosition as h, type JoopImageInfo as i, type JoopImageValidation as j, type JoopMediaConstraints as k, JoopMediaRecorder as l, type JoopPdfLineOptions as m, type JoopPdfOptions as n, type JoopPdfTableColumn as o, type JoopPdfTextOptions as p, type JoopReceiptLine as q, type JoopRecorderOptions as r, type JoopWatermarkOptions as s, clipboard as t };
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { J as JoopObservable } from './index-Dz0gOur2.mjs';
|
|
2
|
+
|
|
3
|
+
type JoopClipboardEvent = {
|
|
4
|
+
type: 'copy' | 'paste';
|
|
5
|
+
text: string;
|
|
6
|
+
};
|
|
7
|
+
declare class JoopClipboardService {
|
|
8
|
+
private _events$;
|
|
9
|
+
/** Copy text to clipboard. Falls back to execCommand for older browsers. */
|
|
10
|
+
copy(text: string): Promise<boolean>;
|
|
11
|
+
/** Read text from clipboard */
|
|
12
|
+
paste(): Promise<string | null>;
|
|
13
|
+
/** Copy a DOM element's innerText */
|
|
14
|
+
copyElement(elementOrId: HTMLElement | string): Promise<boolean>;
|
|
15
|
+
/** Observe copy/paste events */
|
|
16
|
+
events$(): JoopObservable<JoopClipboardEvent>;
|
|
17
|
+
private _execCopy;
|
|
18
|
+
}
|
|
19
|
+
/** Module-level singleton for quick use without instantiation */
|
|
20
|
+
declare const clipboard: JoopClipboardService;
|
|
21
|
+
|
|
22
|
+
interface JoopImageInfo {
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
size: number;
|
|
26
|
+
type: string;
|
|
27
|
+
name: string;
|
|
28
|
+
aspectRatio: number;
|
|
29
|
+
}
|
|
30
|
+
interface JoopImageValidation {
|
|
31
|
+
valid: boolean;
|
|
32
|
+
errors: string[];
|
|
33
|
+
}
|
|
34
|
+
interface JoopCompressOptions {
|
|
35
|
+
maxWidthOrHeight?: number;
|
|
36
|
+
quality?: number;
|
|
37
|
+
outputType?: string;
|
|
38
|
+
maxSizeBytes?: number;
|
|
39
|
+
}
|
|
40
|
+
declare class JoopImageService {
|
|
41
|
+
/** Compress and optionally resize an image file */
|
|
42
|
+
compress(file: File | Blob, options?: JoopCompressOptions): Promise<Blob>;
|
|
43
|
+
/** Resize to exact dimensions */
|
|
44
|
+
resize(file: File | Blob, width: number, height: number, outputType?: string): Promise<Blob>;
|
|
45
|
+
/** Convert a blob to base64 data URL */
|
|
46
|
+
toBase64(file: File | Blob): Promise<string>;
|
|
47
|
+
/** Get image dimensions and metadata */
|
|
48
|
+
getInfo(file: File): Promise<JoopImageInfo>;
|
|
49
|
+
/** Validate an image against size/type/dimension constraints */
|
|
50
|
+
validate(file: File, options?: {
|
|
51
|
+
maxSizeBytes?: number;
|
|
52
|
+
allowedTypes?: string[];
|
|
53
|
+
maxWidth?: number;
|
|
54
|
+
maxHeight?: number;
|
|
55
|
+
minWidth?: number;
|
|
56
|
+
minHeight?: number;
|
|
57
|
+
}): Promise<JoopImageValidation>;
|
|
58
|
+
/** Create thumbnail as data URL */
|
|
59
|
+
thumbnail(file: File | Blob, size?: number): Promise<string>;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
interface JoopPdfTextOptions {
|
|
63
|
+
font?: 'Helvetica' | 'Helvetica-Bold' | 'Times-Roman' | 'Courier';
|
|
64
|
+
size?: number;
|
|
65
|
+
color?: [number, number, number];
|
|
66
|
+
}
|
|
67
|
+
interface JoopPdfLineOptions {
|
|
68
|
+
width?: number;
|
|
69
|
+
color?: [number, number, number];
|
|
70
|
+
dash?: [number, number];
|
|
71
|
+
}
|
|
72
|
+
interface JoopPdfTableColumn {
|
|
73
|
+
header: string;
|
|
74
|
+
key: string;
|
|
75
|
+
width: number;
|
|
76
|
+
align?: 'left' | 'right' | 'center';
|
|
77
|
+
}
|
|
78
|
+
interface JoopPdfOptions {
|
|
79
|
+
pageWidth?: number;
|
|
80
|
+
pageHeight?: number;
|
|
81
|
+
margin?: number;
|
|
82
|
+
}
|
|
83
|
+
interface JoopReceiptLine {
|
|
84
|
+
label: string;
|
|
85
|
+
value: string;
|
|
86
|
+
bold?: boolean;
|
|
87
|
+
}
|
|
88
|
+
declare class _PdfBuilder {
|
|
89
|
+
private _objs;
|
|
90
|
+
private _offsets;
|
|
91
|
+
private _stream;
|
|
92
|
+
private _pw;
|
|
93
|
+
private _ph;
|
|
94
|
+
private _fonts;
|
|
95
|
+
constructor(w?: number, h?: number);
|
|
96
|
+
private _addObj;
|
|
97
|
+
private _y;
|
|
98
|
+
text(x: number, y: number, content: string, opts?: JoopPdfTextOptions): this;
|
|
99
|
+
line(x1: number, y1: number, x2: number, y2: number, opts?: JoopPdfLineOptions): this;
|
|
100
|
+
rect(x: number, y: number, w: number, h: number, fill?: [number, number, number], stroke?: [number, number, number]): this;
|
|
101
|
+
table(x: number, y: number, cols: JoopPdfTableColumn[], rows: Record<string, string>[], opts?: {
|
|
102
|
+
rowHeight?: number;
|
|
103
|
+
headerBg?: [number, number, number];
|
|
104
|
+
fontSize?: number;
|
|
105
|
+
}): number;
|
|
106
|
+
build(): Uint8Array;
|
|
107
|
+
}
|
|
108
|
+
declare class JoopPdfService {
|
|
109
|
+
private _opts;
|
|
110
|
+
constructor(opts?: JoopPdfOptions);
|
|
111
|
+
private _builder;
|
|
112
|
+
/** Generate a basic receipt PDF */
|
|
113
|
+
receipt(title: string, lines: JoopReceiptLine[], footer?: string): Uint8Array;
|
|
114
|
+
/** Generate a statement with a table */
|
|
115
|
+
statement(title: string, subtitle: string, columns: JoopPdfTableColumn[], rows: Record<string, string>[], summary?: JoopReceiptLine[]): Uint8Array;
|
|
116
|
+
/** Wrap raw bytes as a base64 data URL */
|
|
117
|
+
toDataUrl(bytes: Uint8Array): string;
|
|
118
|
+
/** Trigger browser download */
|
|
119
|
+
download(bytes: Uint8Array, filename?: string): void;
|
|
120
|
+
/** Low-level builder for custom documents */
|
|
121
|
+
builder(): _PdfBuilder;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
interface JoopGeoPosition {
|
|
125
|
+
latitude: number;
|
|
126
|
+
longitude: number;
|
|
127
|
+
accuracy: number;
|
|
128
|
+
altitude: number | null;
|
|
129
|
+
speed: number | null;
|
|
130
|
+
heading: number | null;
|
|
131
|
+
timestamp: number;
|
|
132
|
+
}
|
|
133
|
+
interface JoopGeoOptions extends PositionOptions {
|
|
134
|
+
timeout?: number;
|
|
135
|
+
maximumAge?: number;
|
|
136
|
+
enableHighAccuracy?: boolean;
|
|
137
|
+
}
|
|
138
|
+
declare class JoopGeoService {
|
|
139
|
+
isSupported(): boolean;
|
|
140
|
+
getPosition(opts?: JoopGeoOptions): Promise<JoopGeoPosition>;
|
|
141
|
+
watchPosition(onSuccess: (pos: JoopGeoPosition) => void, onError?: (err: GeolocationPositionError) => void, opts?: JoopGeoOptions): number;
|
|
142
|
+
clearWatch(id: number): void;
|
|
143
|
+
getPermissionState(): Promise<PermissionState>;
|
|
144
|
+
/** Haversine distance in kilometers */
|
|
145
|
+
distance(from: {
|
|
146
|
+
latitude: number;
|
|
147
|
+
longitude: number;
|
|
148
|
+
}, to: {
|
|
149
|
+
latitude: number;
|
|
150
|
+
longitude: number;
|
|
151
|
+
}): number;
|
|
152
|
+
isInRadius(point: {
|
|
153
|
+
latitude: number;
|
|
154
|
+
longitude: number;
|
|
155
|
+
}, center: {
|
|
156
|
+
latitude: number;
|
|
157
|
+
longitude: number;
|
|
158
|
+
}, radiusKm: number): boolean;
|
|
159
|
+
/** Compute compass bearing from `from` to `to` in degrees (0–360) */
|
|
160
|
+
bearing(from: {
|
|
161
|
+
latitude: number;
|
|
162
|
+
longitude: number;
|
|
163
|
+
}, to: {
|
|
164
|
+
latitude: number;
|
|
165
|
+
longitude: number;
|
|
166
|
+
}): number;
|
|
167
|
+
formatCoords(lat: number, lon: number, format?: 'dms' | 'decimal'): string;
|
|
168
|
+
private _map;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
interface JoopMediaConstraints {
|
|
172
|
+
video?: boolean | MediaTrackConstraints;
|
|
173
|
+
audio?: boolean | MediaTrackConstraints;
|
|
174
|
+
}
|
|
175
|
+
interface JoopRecorderOptions {
|
|
176
|
+
mimeType?: string;
|
|
177
|
+
audioBitsPerSecond?: number;
|
|
178
|
+
videoBitsPerSecond?: number;
|
|
179
|
+
timeslice?: number;
|
|
180
|
+
}
|
|
181
|
+
declare class JoopMediaRecorder {
|
|
182
|
+
private _recorder;
|
|
183
|
+
private _chunks;
|
|
184
|
+
constructor(stream: MediaStream, opts?: JoopRecorderOptions);
|
|
185
|
+
start(timeslice?: number): void;
|
|
186
|
+
stop(): Promise<Blob>;
|
|
187
|
+
pause(): void;
|
|
188
|
+
resume(): void;
|
|
189
|
+
getState(): RecordingState;
|
|
190
|
+
}
|
|
191
|
+
declare class JoopMediaService {
|
|
192
|
+
isSupported(): boolean;
|
|
193
|
+
requestStream(constraints: JoopMediaConstraints): Promise<MediaStream>;
|
|
194
|
+
requestCamera(constraints?: MediaTrackConstraints): Promise<MediaStream>;
|
|
195
|
+
requestMicrophone(constraints?: MediaTrackConstraints): Promise<MediaStream>;
|
|
196
|
+
requestScreenShare(withAudio?: boolean): Promise<MediaStream>;
|
|
197
|
+
stopStream(stream: MediaStream): void;
|
|
198
|
+
capturePhoto(stream: MediaStream, quality?: number): Promise<Blob>;
|
|
199
|
+
createRecorder(stream: MediaStream, opts?: JoopRecorderOptions): JoopMediaRecorder;
|
|
200
|
+
getDevices(kind?: MediaDeviceKind): Promise<MediaDeviceInfo[]>;
|
|
201
|
+
checkPermission(kind: 'camera' | 'microphone'): Promise<PermissionState>;
|
|
202
|
+
/** Attach a stream to a <video> element */
|
|
203
|
+
attachStream(stream: MediaStream, videoEl: HTMLVideoElement, muted?: boolean): void;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
interface JoopWatermarkOptions {
|
|
207
|
+
opacity?: number;
|
|
208
|
+
fontSize?: number;
|
|
209
|
+
color?: string;
|
|
210
|
+
rotation?: number;
|
|
211
|
+
repeat?: boolean;
|
|
212
|
+
lsb?: boolean;
|
|
213
|
+
}
|
|
214
|
+
declare class JoopWatermarkService {
|
|
215
|
+
private _watermarkedElements;
|
|
216
|
+
/**
|
|
217
|
+
* Apply a visible tiled watermark overlay to an element.
|
|
218
|
+
*/
|
|
219
|
+
apply(element: HTMLElement, text: string, opts?: JoopWatermarkOptions): void;
|
|
220
|
+
remove(element: HTMLElement): void;
|
|
221
|
+
/**
|
|
222
|
+
* Embed a payload invisibly into an ImageData using LSB steganography.
|
|
223
|
+
* Modifies the least significant bit of the R channel of each pixel.
|
|
224
|
+
*/
|
|
225
|
+
embedInImage(imageData: ImageData, payload: string): ImageData;
|
|
226
|
+
/**
|
|
227
|
+
* Extract a payload from an ImageData that was embedded with embedInImage.
|
|
228
|
+
* Returns null if no valid payload is found.
|
|
229
|
+
*/
|
|
230
|
+
extractFromImage(imageData: ImageData): string | null;
|
|
231
|
+
/** Apply invisible LSB watermark to a canvas element */
|
|
232
|
+
applyToCanvas(canvas: HTMLCanvasElement, payload: string): void;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export { JoopClipboardService as J, JoopImageService as a, JoopPdfService as b, JoopGeoService as c, JoopMediaService as d, JoopWatermarkService as e, type JoopCompressOptions as f, type JoopGeoOptions as g, type JoopGeoPosition as h, type JoopImageInfo as i, type JoopImageValidation as j, type JoopMediaConstraints as k, JoopMediaRecorder as l, type JoopPdfLineOptions as m, type JoopPdfOptions as n, type JoopPdfTableColumn as o, type JoopPdfTextOptions as p, type JoopReceiptLine as q, type JoopRecorderOptions as r, type JoopWatermarkOptions as s, clipboard as t };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
interface JoopWorkerPoolConfig {
|
|
2
|
+
size?: number;
|
|
3
|
+
timeout?: number;
|
|
4
|
+
}
|
|
5
|
+
declare class JoopWorkerPool {
|
|
6
|
+
private _slots;
|
|
7
|
+
private _queue;
|
|
8
|
+
private _size;
|
|
9
|
+
private _timeout;
|
|
10
|
+
private _terminated;
|
|
11
|
+
/** True when native Web Workers are unavailable (React Native, Node) */
|
|
12
|
+
private _fallback;
|
|
13
|
+
constructor(config?: JoopWorkerPoolConfig);
|
|
14
|
+
get size(): number;
|
|
15
|
+
get idle(): number;
|
|
16
|
+
get queueDepth(): number;
|
|
17
|
+
/**
|
|
18
|
+
* Run a serializable function in a worker thread (or main-thread fallback on RN/Node).
|
|
19
|
+
* The fn MUST be a pure, self-contained function (no closures over outer scope).
|
|
20
|
+
*/
|
|
21
|
+
run<T, R>(fn: (arg: T) => R, arg: T): Promise<R>;
|
|
22
|
+
map<T, R>(items: T[], fn: (item: T) => R): Promise<R[]>;
|
|
23
|
+
terminate(): void;
|
|
24
|
+
private _runFallback;
|
|
25
|
+
private _init;
|
|
26
|
+
private _createWorker;
|
|
27
|
+
private _runTask;
|
|
28
|
+
private _drain;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
type JoopCompressionFormat = 'gzip' | 'deflate' | 'deflate-raw';
|
|
32
|
+
declare class JoopCompressionService {
|
|
33
|
+
/** True when compression is available (native API or injected adapter) */
|
|
34
|
+
isSupported(): boolean;
|
|
35
|
+
compress(data: string | Uint8Array, format?: JoopCompressionFormat): Promise<Uint8Array>;
|
|
36
|
+
decompress(data: Uint8Array, format?: JoopCompressionFormat): Promise<Uint8Array>;
|
|
37
|
+
compressString(text: string, format?: JoopCompressionFormat): Promise<string>;
|
|
38
|
+
decompressString(b64: string, format?: JoopCompressionFormat): Promise<string>;
|
|
39
|
+
ratio(data: string | Uint8Array, format?: JoopCompressionFormat): Promise<number>;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export { type JoopCompressionFormat, JoopCompressionService, JoopWorkerPool, type JoopWorkerPoolConfig };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
interface JoopWorkerPoolConfig {
|
|
2
|
+
size?: number;
|
|
3
|
+
timeout?: number;
|
|
4
|
+
}
|
|
5
|
+
declare class JoopWorkerPool {
|
|
6
|
+
private _slots;
|
|
7
|
+
private _queue;
|
|
8
|
+
private _size;
|
|
9
|
+
private _timeout;
|
|
10
|
+
private _terminated;
|
|
11
|
+
/** True when native Web Workers are unavailable (React Native, Node) */
|
|
12
|
+
private _fallback;
|
|
13
|
+
constructor(config?: JoopWorkerPoolConfig);
|
|
14
|
+
get size(): number;
|
|
15
|
+
get idle(): number;
|
|
16
|
+
get queueDepth(): number;
|
|
17
|
+
/**
|
|
18
|
+
* Run a serializable function in a worker thread (or main-thread fallback on RN/Node).
|
|
19
|
+
* The fn MUST be a pure, self-contained function (no closures over outer scope).
|
|
20
|
+
*/
|
|
21
|
+
run<T, R>(fn: (arg: T) => R, arg: T): Promise<R>;
|
|
22
|
+
map<T, R>(items: T[], fn: (item: T) => R): Promise<R[]>;
|
|
23
|
+
terminate(): void;
|
|
24
|
+
private _runFallback;
|
|
25
|
+
private _init;
|
|
26
|
+
private _createWorker;
|
|
27
|
+
private _runTask;
|
|
28
|
+
private _drain;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
type JoopCompressionFormat = 'gzip' | 'deflate' | 'deflate-raw';
|
|
32
|
+
declare class JoopCompressionService {
|
|
33
|
+
/** True when compression is available (native API or injected adapter) */
|
|
34
|
+
isSupported(): boolean;
|
|
35
|
+
compress(data: string | Uint8Array, format?: JoopCompressionFormat): Promise<Uint8Array>;
|
|
36
|
+
decompress(data: Uint8Array, format?: JoopCompressionFormat): Promise<Uint8Array>;
|
|
37
|
+
compressString(text: string, format?: JoopCompressionFormat): Promise<string>;
|
|
38
|
+
decompressString(b64: string, format?: JoopCompressionFormat): Promise<string>;
|
|
39
|
+
ratio(data: string | Uint8Array, format?: JoopCompressionFormat): Promise<number>;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export { type JoopCompressionFormat, JoopCompressionService, JoopWorkerPool, type JoopWorkerPoolConfig };
|