import type { WatchEvent, WatchEventCallbacks } from './definitions'; import { _subscribeNativeApplicationContextEvent, _subscribeNativeFileEvents, _subscribeNativeMessageEvent, _subscribeNativeUserInfoEvent, _subscribeToNativeInstalledEvent, _subscribeToNativePairedEvent, _subscribeToNativeReachabilityEvent, _subscribeNativeApplicationContextErrorEvent, _subscribeNativeUserInfoErrorEvent, _subscribeNativeFileReceivedEvent, _subscribeNativeFileReceivedErrorEvent, _subscribeNativeActivationErrorEvent, _subscribeNativeSesssionBecameInactiveErrorEvent, _subscribeNativeSessionDidDeactivateErrorEvent, _subscribeNativeApplicationContextReceivedErrorEvent, } from './subscriptions'; import type { AddListenerFn } from './subscriptions'; import { _addListener, _once } from '../native-module'; import type { WatchPayload, QueuedFile } from '../native-module'; export type UnsubscribeFn = () => void; function listen( event: E, cb: any, listener?: AddListenerFn ): UnsubscribeFn { switch (event) { case 'reachability': return _subscribeToNativeReachabilityEvent(cb, listener); case 'file': return _subscribeNativeFileEvents(cb, listener); case 'application-context': return _subscribeNativeApplicationContextEvent(cb, listener); case 'user-info': return _subscribeNativeUserInfoEvent(cb, listener); case 'file-received': return _subscribeNativeFileReceivedEvent(cb, listener); case 'message': return _subscribeNativeMessageEvent(cb, listener); case 'paired': return _subscribeToNativePairedEvent(cb, listener); case 'installed': return _subscribeToNativeInstalledEvent(cb, listener); case 'application-context-error': return _subscribeNativeApplicationContextErrorEvent(cb, listener); case 'application-context-received-error': return _subscribeNativeApplicationContextReceivedErrorEvent(cb, listener); case 'user-info-error': return _subscribeNativeUserInfoErrorEvent(cb, listener); case 'file-received-error': return _subscribeNativeFileReceivedErrorEvent(cb, listener); case 'activation-error': return _subscribeNativeActivationErrorEvent(cb, listener); case 'session-became-inactive': return _subscribeNativeSesssionBecameInactiveErrorEvent(cb, listener); case 'session-did-deactivate': return _subscribeNativeSessionDidDeactivateErrorEvent(cb, listener); default: throw new Error(`Unknown watch event "${event}"`); } } function addListener( event: 'reachability', cb: WatchEventCallbacks['reachability'] ): UnsubscribeFn; function addListener( event: 'file', cb: WatchEventCallbacks['file'] ): UnsubscribeFn; function addListener( event: 'application-context', cb: WatchEventCallbacks['application-context'] ): UnsubscribeFn; function addListener( event: 'user-info', cb: WatchEventCallbacks['user-info'] ): UnsubscribeFn; function addListener( event: 'file-received', cb: WatchEventCallbacks['file-received'] ): UnsubscribeFn; function addListener< MessageFromWatch extends WatchPayload = WatchPayload, ReplyMessage extends WatchPayload = WatchPayload >( event: 'message', cb: WatchEventCallbacks['message'] ): UnsubscribeFn; function addListener( event: 'paired', cb: WatchEventCallbacks['paired'] ): UnsubscribeFn; function addListener( event: 'installed', cb: WatchEventCallbacks['installed'] ): UnsubscribeFn; function addListener( event: 'application-context-error', cb: WatchEventCallbacks['application-context-error'] ): UnsubscribeFn; function addListener( event: 'application-context-received-error', cb: WatchEventCallbacks['application-context-received-error'] ): UnsubscribeFn; function addListener( event: 'activation-error', cb: WatchEventCallbacks['activation-error'] ): UnsubscribeFn; function addListener( event: 'session-became-inactive', cb: WatchEventCallbacks['session-became-inactive'] ): UnsubscribeFn; function addListener( event: 'session-did-deactivate', cb: WatchEventCallbacks['session-did-deactivate'] ): UnsubscribeFn; function addListener( event: 'user-info-error', cb: WatchEventCallbacks['user-info-error'] ): UnsubscribeFn; function addListener( event: 'file-received-error', cb: WatchEventCallbacks['file-received-error'] ): UnsubscribeFn; function addListener(event: WatchEvent, cb: any): UnsubscribeFn { return listen(event, cb, _addListener); } function once( event: 'reachability', cb: WatchEventCallbacks['reachability'] ): UnsubscribeFn; function once( event: 'reachability' ): Promise[0]>; function once(event: 'file', cb: WatchEventCallbacks['file']): UnsubscribeFn; function once( event: 'file' ): Promise[0]>; function once( event: 'application-context', cb: WatchEventCallbacks['application-context'] ): UnsubscribeFn; function once( event: 'application-context' ): Promise['application-context']>[0]>; function once( event: 'user-info', cb: WatchEventCallbacks['user-info'] ): UnsubscribeFn; function once( event: 'user-info' ): Promise['user-info']>[0]>; function once( event: 'file-received', cb: WatchEventCallbacks['file-received'] ): UnsubscribeFn; function once( event: 'file-received' ): Promise[0]>; function once< MessageFromWatch extends WatchPayload = WatchPayload, ReplyMessage extends WatchPayload = WatchPayload >( event: 'message', cb: WatchEventCallbacks['message'] ): UnsubscribeFn; function once< MessageFromWatch extends WatchPayload = WatchPayload, ReplyMessage extends WatchPayload = WatchPayload >( event: 'message' ): Promise< Parameters['message']> >; function once( event: 'paired', cb: WatchEventCallbacks['paired'] ): UnsubscribeFn; function once( event: 'paired' ): Promise[0]>; function once( event: 'installed', cb: WatchEventCallbacks['installed'] ): UnsubscribeFn; function once( event: 'installed' ): Promise[0]>; function once( event: 'application-context-error', cb: WatchEventCallbacks['application-context-error'] ): UnsubscribeFn; function once( event: 'application-context-error' ): Promise< Parameters['application-context-error']>[0] >; function once( event: 'application-context-received-error', cb: WatchEventCallbacks['application-context-received-error'] ): UnsubscribeFn; function once( event: 'application-context-received-error' ): Promise< Parameters< WatchEventCallbacks['application-context-received-error'] >[0] >; function once( event: 'activation-error', cb: WatchEventCallbacks['activation-error'] ): UnsubscribeFn; function once( event: 'activation-error' ): Promise['activation-error']>[0]>; function once( event: 'session-became-inactive', cb: WatchEventCallbacks['session-became-inactive'] ): UnsubscribeFn; function once( event: 'session-became-inactive' ): Promise< Parameters['session-became-inactive']>[0] >; function once( event: 'session-did-deactivate', cb: WatchEventCallbacks['session-did-deactivate'] ): UnsubscribeFn; function once( event: 'session-did-deactivate' ): Promise< Parameters['session-did-deactivate']>[0] >; function once( event: 'user-info-error', cb: WatchEventCallbacks['user-info-error'] ): UnsubscribeFn; function once( event: 'user-info-error' ): Promise['user-info-error']>[0]>; function once( event: 'file-received-error', cb: WatchEventCallbacks['file-received-error'] ): UnsubscribeFn; function once( event: 'file-received-error' ): Promise['file-received-error']>[0]>; function once(event: WatchEvent, cb?: any): UnsubscribeFn | Promise { if (cb) { return listen(event, cb, _once); } else { return new Promise((resolve) => { listen( event, (...args: any[]) => { if (args.length === 1) { resolve(args[0]); } else { resolve(args); } }, _once ); }); } } const watchEvents = { addListener, on: addListener, once, }; export default watchEvents;