mirror of
https://github.com/denoland/deno.git
synced 2024-11-25 15:29:32 -05:00
886f330ec8
Following JS ops were moved to separate files in cli/js/ops directory: - io - process - worker_host - web_worker - plugins - timers - signal - permissions
56 lines
1.3 KiB
TypeScript
56 lines
1.3 KiB
TypeScript
import { openPlugin as openPluginOp } from "./ops/plugins.ts";
|
|
import { core } from "./core.ts";
|
|
|
|
export interface AsyncHandler {
|
|
(msg: Uint8Array): void;
|
|
}
|
|
|
|
interface PluginOp {
|
|
dispatch(
|
|
control: Uint8Array,
|
|
zeroCopy?: ArrayBufferView | null
|
|
): Uint8Array | null;
|
|
setAsyncHandler(handler: AsyncHandler): void;
|
|
}
|
|
|
|
class PluginOpImpl implements PluginOp {
|
|
constructor(private readonly opId: number) {}
|
|
|
|
dispatch(
|
|
control: Uint8Array,
|
|
zeroCopy?: ArrayBufferView | null
|
|
): Uint8Array | null {
|
|
return core.dispatch(this.opId, control, zeroCopy);
|
|
}
|
|
|
|
setAsyncHandler(handler: AsyncHandler): void {
|
|
core.setAsyncHandler(this.opId, handler);
|
|
}
|
|
}
|
|
|
|
// TODO(afinch7): add close method.
|
|
|
|
interface Plugin {
|
|
ops: {
|
|
[name: string]: PluginOp;
|
|
};
|
|
}
|
|
|
|
class PluginImpl implements Plugin {
|
|
private _ops: { [name: string]: PluginOp } = {};
|
|
|
|
constructor(private readonly rid: number, ops: { [name: string]: number }) {
|
|
for (const op in ops) {
|
|
this._ops[op] = new PluginOpImpl(ops[op]);
|
|
}
|
|
}
|
|
|
|
get ops(): { [name: string]: PluginOp } {
|
|
return Object.assign({}, this._ops);
|
|
}
|
|
}
|
|
|
|
export function openPlugin(filename: string): Plugin {
|
|
const response = openPluginOp(filename);
|
|
return new PluginImpl(response.rid, response.ops);
|
|
}
|