Skip to content

Commit

Permalink
fix(options): fix options issue
Browse files Browse the repository at this point in the history
  • Loading branch information
unadlib committed Apr 14, 2023
1 parent 7db4762 commit eb5381b
Show file tree
Hide file tree
Showing 21 changed files with 455 additions and 421 deletions.
7 changes: 5 additions & 2 deletions examples/electron/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ import * as path from 'path';
import { ElectronTransport, listen } from 'data-transport';
import { Renderer, Main } from './interface';

class MainTransport extends ElectronTransport.Main<{ listen: Main }> implements Renderer {
class MainTransport
extends ElectronTransport.Main<{ emit: Main }>
implements Renderer
{
async help() {
const response = await this.emit('help', { text: 'SOS!!!' });
return response;
Expand All @@ -24,7 +27,7 @@ function createWindow() {
height: 600,
webPreferences: {
nodeIntegration: true,
contextIsolation: false
contextIsolation: false,
},
width: 800,
});
Expand Down
2 changes: 1 addition & 1 deletion examples/electron/src/renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { ipcRenderer } from 'electron';
import { Renderer, Main } from './interface';

class RendererTransport
extends ElectronTransport.Renderer<{ listen: Renderer }>
extends ElectronTransport.Renderer<{ emit: Renderer }>
implements Main {
@listen
async help(options: { text: string }) {
Expand Down
2 changes: 1 addition & 1 deletion examples/iframe/src/iframe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { IFrameTransport, listen } from 'data-transport';
import { Main, IFrame } from './interface';

class IFrameInternalTransport
extends IFrameTransport.IFrame<{ listen: IFrame }>
extends IFrameTransport.IFrame<{ emit: IFrame }>
implements Main {
@listen
async help(options: { text: string }) {
Expand Down
2 changes: 1 addition & 1 deletion examples/iframe/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { IFrameTransport, listen } from 'data-transport';
import { Main, IFrame } from './interface';

class MainTransport extends IFrameTransport.Main<{ listen: Main }> implements IFrame {
class MainTransport extends IFrameTransport.Main<{ emit: Main }> implements IFrame {
async help() {
const response = await this.emit('help', { text: 'SOS!!!' });
return response;
Expand Down
2 changes: 1 addition & 1 deletion examples/sericeworker/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { ServiceWorkerTransport, listen } from 'data-transport';
import { Service, Client } from './interface';

class ClientTransport
extends ServiceWorkerTransport.Client<{ listen: Client }>
extends ServiceWorkerTransport.Client<{ emit: Client }>
implements Service {
async help() {
const response = await this.emit('help', { text: 'SOS!!!' });
Expand Down
2 changes: 1 addition & 1 deletion examples/sericeworker/src/serviceworker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { ServiceWorkerTransport, listen } from 'data-transport';
import { Service, Client } from './interface';

class ServiceTransport
extends ServiceWorkerTransport.Service<{ listen: Service }>
extends ServiceWorkerTransport.Service<{ emit: Service }>
implements Client {
@listen
async help(options: { text: string }) {
Expand Down
2 changes: 1 addition & 1 deletion examples/sharedworker/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { listen, SharedWorkerTransport } from 'data-transport';
import { Main, Worker } from './interface';

class MainTransport
extends SharedWorkerTransport.Main<{ listen: Main }>
extends SharedWorkerTransport.Main<{ emit: Main }>
implements Worker {
async help() {
const response = await this.emit('help', { text: 'SOS!!!' });
Expand Down
2 changes: 1 addition & 1 deletion examples/sharedworker/src/worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { SharedWorkerTransport, listen } from 'data-transport';
import { Main, Worker } from './interface';

class SharedWorkerTransportService
extends SharedWorkerTransport.Worker<{ listen: Worker }>
extends SharedWorkerTransport.Worker<{ emit: Worker }>
implements Main {
@listen
async help(options: { text: string }) {
Expand Down
2 changes: 1 addition & 1 deletion examples/webworker/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { WorkerTransport, listen } from 'data-transport';
import { Worker, Main } from './interface';

class MainTransport
extends WorkerTransport.Main<{ listen: Main }>
extends WorkerTransport.Main<{ emit: Main }>
implements Worker {
async help() {
const response = await this.emit('help', { text: 'SOS!!!' });
Expand Down
2 changes: 1 addition & 1 deletion examples/webworker/src/worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { WorkerTransport, listen } from 'data-transport';
import { Main, Worker } from './interface';

class WebWorkerTransport
extends WorkerTransport.Worker<{ listen: Worker }>
extends WorkerTransport.Worker<{ emit: Worker }>
implements Main {
@listen
async help(options: { text: string }) {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "data-transport",
"version": "4.1.0",
"version": "4.1.1",
"description": "A simple and responsible transport",
"main": "lib/index.js",
"unpkg": "dist/index.umd.js",
Expand Down
37 changes: 21 additions & 16 deletions src/transports/broadcastTransport.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import type { BaseInteraction, ListenerOptions, TransportOptions } from '../interface';
import type {
BaseInteraction,
ListenerOptions,
TransportOptions,
} from '../interface';
import { Transport } from '../transport';

const defaultChannel = '$$BroadcastChannel_Transport$$';
Expand All @@ -17,21 +21,22 @@ export interface BroadcastTransportOptions extends Partial<TransportOptions> {
abstract class BroadcastTransport<
T extends BaseInteraction = any
> extends Transport<T> {
constructor({
channel = defaultChannel,
broadcastChannel = new BroadcastChannel(channel),
listener = (callback) => {
const handler = ({ data }: MessageEvent<ListenerOptions>) => {
callback(data);
};
broadcastChannel.addEventListener('message', handler);
return () => {
broadcastChannel.removeEventListener('message', handler);
};
},
sender = (message) => broadcastChannel.postMessage(message),
...options
}: BroadcastTransportOptions = {}) {
constructor(_options: BroadcastTransportOptions = {}) {
const {
channel = defaultChannel,
broadcastChannel = new BroadcastChannel(channel),
listener = (callback) => {
const handler = ({ data }: MessageEvent<ListenerOptions>) => {
callback(data);
};
broadcastChannel.addEventListener('message', handler);
return () => {
broadcastChannel.removeEventListener('message', handler);
};
},
sender = (message) => broadcastChannel.postMessage(message),
...options
} = _options;
super({
...options,
listener,
Expand Down
149 changes: 76 additions & 73 deletions src/transports/browserExtensionsTransport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,39 +55,40 @@ export abstract class BrowserExtensionsGenericTransport<
> extends Transport<T> {
private [callbackKey]!: (options: ListenerOptions<SendResponse>) => void;

constructor({
browser = global.browser ?? global.chrome,
listener = function (this: BrowserExtensionsGenericTransport, callback) {
this[callbackKey] = callback;
const handler = (
data: ListenerOptions<SendResponse>,
sender: browser.runtime.MessageSender | chrome.runtime.MessageSender,
sendResponse: (response?: SendOptions<SendResponse>) => void
) => {
data._sendResponse = sendResponse;
callback(data);
};
browser.runtime.onMessage.addListener(handler);
return () => {
browser.runtime.onMessage.removeListener(handler);
};
},
sender = function (this: BrowserExtensionsGenericTransport, message) {
if (message._sendResponse) {
const sendResponse = message._sendResponse;
delete message._sendResponse;
sendResponse(message);
} else {
// @ts-ignore
browser.runtime.sendMessage(
message,
{},
this[callbackKey] as (response: IRequest<SendResponse>) => void
);
}
},
...options
}: BrowserExtensionsGenericTransportOptions = {}) {
constructor(_options: BrowserExtensionsGenericTransportOptions = {}) {
const {
browser = global.browser ?? global.chrome,
listener = function (this: BrowserExtensionsGenericTransport, callback) {
this[callbackKey] = callback;
const handler = (
data: ListenerOptions<SendResponse>,
sender: browser.runtime.MessageSender | chrome.runtime.MessageSender,
sendResponse: (response?: SendOptions<SendResponse>) => void
) => {
data._sendResponse = sendResponse;
callback(data);
};
browser.runtime.onMessage.addListener(handler);
return () => {
browser.runtime.onMessage.removeListener(handler);
};
},
sender = function (this: BrowserExtensionsGenericTransport, message) {
if (message._sendResponse) {
const sendResponse = message._sendResponse;
delete message._sendResponse;
sendResponse(message);
} else {
// @ts-ignore
browser.runtime.sendMessage(
message,
{},
this[callbackKey] as (response: IRequest<SendResponse>) => void
);
}
},
...options
} = _options;
super({
...options,
listener,
Expand All @@ -105,30 +106,31 @@ export abstract class BrowserExtensionsMainTransport<
options: ListenerOptions<BrowserExtensionsMainPort>
) => void;

constructor({
browser = global.browser ?? global.chrome,
listener = function (this: BrowserExtensionsMainTransport, callback) {
this[callbackKey] = callback;
return () => {
this.ports.forEach((port) => {
port.disconnect();
});
};
},
sender = function (this: BrowserExtensionsMainTransport, message) {
const port = message._port;
if (port) {
delete message._port;
port.postMessage(message);
} else {
// TODO: select an assignable port
this.ports.forEach((port) => {
constructor(_options: BrowserExtensionsMainTransportOptions = {}) {
const {
browser = global.browser ?? global.chrome,
listener = function (this: BrowserExtensionsMainTransport, callback) {
this[callbackKey] = callback;
return () => {
this.ports.forEach((port) => {
port.disconnect();
});
};
},
sender = function (this: BrowserExtensionsMainTransport, message) {
const port = message._port;
if (port) {
delete message._port;
port.postMessage(message);
});
}
},
...options
}: BrowserExtensionsMainTransportOptions = {}) {
} else {
// TODO: select an assignable port
this.ports.forEach((port) => {
port.postMessage(message);
});
}
},
...options
} = _options;
super({
...options,
listener,
Expand All @@ -154,23 +156,24 @@ export abstract class BrowserExtensionsMainTransport<
export abstract class BrowserExtensionsClientTransport<
T extends BaseInteraction = any
> extends Transport<T> {
constructor({
browser = global.browser ?? global.chrome,
port = browser.runtime.connect({ name: transportName }),
listener = (callback) => {
const handler = (options: object) => {
callback(options as ListenerOptions<{}>);
};
port.onMessage.addListener(handler);
return () => {
port.onMessage.removeListener(handler);
};
},
sender = (message) => {
port.postMessage(message);
},
...options
}: BrowserExtensionsClientTransportOptions = {}) {
constructor(_options: BrowserExtensionsClientTransportOptions = {}) {
const {
browser = global.browser ?? global.chrome,
port = browser.runtime.connect({ name: transportName }),
listener = (callback) => {
const handler = (options: object) => {
callback(options as ListenerOptions<{}>);
};
port.onMessage.addListener(handler);
return () => {
port.onMessage.removeListener(handler);
};
},
sender = (message) => {
port.postMessage(message);
},
...options
} = _options;
super({
...options,
listener,
Expand Down
Loading

0 comments on commit eb5381b

Please sign in to comment.