import { AbstractStreamingSyncImplementation, AbstractStreamingSyncImplementationOptions, LockOptions, LockType } from '@powersync/common'; import { getNavigatorLocks } from '../../shared/navigator.js'; import { ResolvedWebSQLOpenOptions, WebSQLFlags } from '../adapters/web-sql-flags.js'; export interface WebStreamingSyncImplementationOptions extends AbstractStreamingSyncImplementationOptions { flags?: WebSQLFlags; sync?: { worker?: string | URL | ((options: ResolvedWebSQLOpenOptions) => SharedWorker); }; } export class WebStreamingSyncImplementation extends AbstractStreamingSyncImplementation { constructor(options: WebStreamingSyncImplementationOptions) { // Super will store and provide default values for options super(options); } get webOptions(): WebStreamingSyncImplementationOptions { return this.options as WebStreamingSyncImplementationOptions; } async obtainLock(lockOptions: LockOptions): Promise { const identifier = `streaming-sync-${lockOptions.type}-${this.webOptions.identifier}`; if (lockOptions.type == LockType.SYNC) { this.logger.debug('requesting lock for ', identifier); } return getNavigatorLocks().request(identifier, { signal: lockOptions.signal }, lockOptions.callback); } }