2 /* --------------------------------------------------------------------------------------------
3 * Copyright (c) Microsoft Corporation. All rights reserved.
4 * Licensed under the MIT License. See License.txt in the project root for license information.
5 * ------------------------------------------------------------------------------------------ */
6 Object.defineProperty(exports, "__esModule", { value: true });
7 const ral_1 = require("../common/ral");
8 const disposable_1 = require("../common/disposable");
9 const events_1 = require("../common/events");
10 const messageBuffer_1 = require("../common/messageBuffer");
11 class MessageBuffer extends messageBuffer_1.AbstractMessageBuffer {
12 constructor(encoding = 'utf-8') {
14 this.asciiDecoder = new TextDecoder('ascii');
17 return MessageBuffer.emptyBuffer;
19 fromString(value, _encoding) {
20 return (new TextEncoder()).encode(value);
22 toString(value, encoding) {
23 if (encoding === 'ascii') {
24 return this.asciiDecoder.decode(value);
27 return (new TextDecoder(encoding)).decode(value);
30 asNative(buffer, length) {
31 if (length === undefined) {
35 return buffer.slice(0, length);
39 return new Uint8Array(length);
42 MessageBuffer.emptyBuffer = new Uint8Array(0);
43 class ReadableStreamWrapper {
46 this._onData = new events_1.Emitter();
47 this._messageListener = (event) => {
48 const blob = event.data;
49 blob.arrayBuffer().then((buffer) => {
50 this._onData.fire(new Uint8Array(buffer));
53 this.socket.addEventListener('message', this._messageListener);
56 this.socket.addEventListener('close', listener);
57 return disposable_1.Disposable.create(() => this.socket.removeEventListener('close', listener));
60 this.socket.addEventListener('error', listener);
61 return disposable_1.Disposable.create(() => this.socket.removeEventListener('error', listener));
64 this.socket.addEventListener('end', listener);
65 return disposable_1.Disposable.create(() => this.socket.removeEventListener('end', listener));
68 return this._onData.event(listener);
71 class WritableStreamWrapper {
76 this.socket.addEventListener('close', listener);
77 return disposable_1.Disposable.create(() => this.socket.removeEventListener('close', listener));
80 this.socket.addEventListener('error', listener);
81 return disposable_1.Disposable.create(() => this.socket.removeEventListener('error', listener));
84 this.socket.addEventListener('end', listener);
85 return disposable_1.Disposable.create(() => this.socket.removeEventListener('end', listener));
87 write(data, encoding) {
88 if (typeof data === 'string') {
89 if (encoding !== undefined && encoding !== 'utf-8') {
90 throw new Error(`In a Browser environments only utf-8 text encding is supported. But got encoding: ${encoding}`);
92 this.socket.send(data);
95 this.socket.send(data);
97 return Promise.resolve();
103 const _textEncoder = new TextEncoder();
104 const _ril = Object.freeze({
105 messageBuffer: Object.freeze({
106 create: (encoding) => new MessageBuffer(encoding)
108 applicationJson: Object.freeze({
109 encoder: Object.freeze({
110 name: 'application/json',
111 encode: (msg, options) => {
112 if (options.charset !== 'utf-8') {
113 throw new Error(`In a Browser environments only utf-8 text encding is supported. But got encoding: ${options.charset}`);
115 return Promise.resolve(_textEncoder.encode(JSON.stringify(msg, undefined, 0)));
118 decoder: Object.freeze({
119 name: 'application/json',
120 decode: (buffer, options) => {
121 if (!(buffer instanceof Uint8Array)) {
122 throw new Error(`In a Browser environments only Uint8Arrays are supported.`);
124 return Promise.resolve(JSON.parse(new TextDecoder(options.charset).decode(buffer)));
128 stream: Object.freeze({
129 asReadableStream: (socket) => new ReadableStreamWrapper(socket),
130 asWritableStream: (socket) => new WritableStreamWrapper(socket)
133 timer: Object.freeze({
134 setTimeout(callback, ms, ...args) {
135 return setTimeout(callback, ms, ...args);
137 clearTimeout(handle) {
138 clearTimeout(handle);
140 setImmediate(callback, ...args) {
141 return setTimeout(callback, 0, ...args);
143 clearImmediate(handle) {
144 clearTimeout(handle);
153 ral_1.default.install(_ril);
155 RIL.install = install;
156 })(RIL || (RIL = {}));
157 exports.default = RIL;
158 //# sourceMappingURL=ril.js.map