UNPKG

5.64 kBJavaScriptView Raw
1"use strict";
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 * ------------------------------------------------------------------------------------------ */
6Object.defineProperty(exports, "__esModule", { value: true });
7const api_1 = require("../common/api");
8class MessageBuffer extends api_1.AbstractMessageBuffer {
9 constructor(encoding = 'utf-8') {
10 super(encoding);
11 this.asciiDecoder = new TextDecoder('ascii');
12 }
13 emptyBuffer() {
14 return MessageBuffer.emptyBuffer;
15 }
16 fromString(value, _encoding) {
17 return (new TextEncoder()).encode(value);
18 }
19 toString(value, encoding) {
20 if (encoding === 'ascii') {
21 return this.asciiDecoder.decode(value);
22 }
23 else {
24 return (new TextDecoder(encoding)).decode(value);
25 }
26 }
27 asNative(buffer, length) {
28 if (length === undefined) {
29 return buffer;
30 }
31 else {
32 return buffer.slice(0, length);
33 }
34 }
35 allocNative(length) {
36 return new Uint8Array(length);
37 }
38}
39MessageBuffer.emptyBuffer = new Uint8Array(0);
40class ReadableStreamWrapper {
41 constructor(socket) {
42 this.socket = socket;
43 this._onData = new api_1.Emitter();
44 this._messageListener = (event) => {
45 const blob = event.data;
46 blob.arrayBuffer().then((buffer) => {
47 this._onData.fire(new Uint8Array(buffer));
48 }, () => {
49 (0, api_1.RAL)().console.error(`Converting blob to array buffer failed.`);
50 });
51 };
52 this.socket.addEventListener('message', this._messageListener);
53 }
54 onClose(listener) {
55 this.socket.addEventListener('close', listener);
56 return api_1.Disposable.create(() => this.socket.removeEventListener('close', listener));
57 }
58 onError(listener) {
59 this.socket.addEventListener('error', listener);
60 return api_1.Disposable.create(() => this.socket.removeEventListener('error', listener));
61 }
62 onEnd(listener) {
63 this.socket.addEventListener('end', listener);
64 return api_1.Disposable.create(() => this.socket.removeEventListener('end', listener));
65 }
66 onData(listener) {
67 return this._onData.event(listener);
68 }
69}
70class WritableStreamWrapper {
71 constructor(socket) {
72 this.socket = socket;
73 }
74 onClose(listener) {
75 this.socket.addEventListener('close', listener);
76 return api_1.Disposable.create(() => this.socket.removeEventListener('close', listener));
77 }
78 onError(listener) {
79 this.socket.addEventListener('error', listener);
80 return api_1.Disposable.create(() => this.socket.removeEventListener('error', listener));
81 }
82 onEnd(listener) {
83 this.socket.addEventListener('end', listener);
84 return api_1.Disposable.create(() => this.socket.removeEventListener('end', listener));
85 }
86 write(data, encoding) {
87 if (typeof data === 'string') {
88 if (encoding !== undefined && encoding !== 'utf-8') {
89 throw new Error(`In a Browser environments only utf-8 text encoding is supported. But got encoding: ${encoding}`);
90 }
91 this.socket.send(data);
92 }
93 else {
94 this.socket.send(data);
95 }
96 return Promise.resolve();
97 }
98 end() {
99 this.socket.close();
100 }
101}
102const _textEncoder = new TextEncoder();
103const _ril = Object.freeze({
104 messageBuffer: Object.freeze({
105 create: (encoding) => new MessageBuffer(encoding)
106 }),
107 applicationJson: Object.freeze({
108 encoder: Object.freeze({
109 name: 'application/json',
110 encode: (msg, options) => {
111 if (options.charset !== 'utf-8') {
112 throw new Error(`In a Browser environments only utf-8 text encoding is supported. But got encoding: ${options.charset}`);
113 }
114 return Promise.resolve(_textEncoder.encode(JSON.stringify(msg, undefined, 0)));
115 }
116 }),
117 decoder: Object.freeze({
118 name: 'application/json',
119 decode: (buffer, options) => {
120 if (!(buffer instanceof Uint8Array)) {
121 throw new Error(`In a Browser environments only Uint8Arrays are supported.`);
122 }
123 return Promise.resolve(JSON.parse(new TextDecoder(options.charset).decode(buffer)));
124 }
125 })
126 }),
127 stream: Object.freeze({
128 asReadableStream: (socket) => new ReadableStreamWrapper(socket),
129 asWritableStream: (socket) => new WritableStreamWrapper(socket)
130 }),
131 console: console,
132 timer: Object.freeze({
133 setTimeout(callback, ms, ...args) {
134 const handle = setTimeout(callback, ms, ...args);
135 return { dispose: () => clearTimeout(handle) };
136 },
137 setImmediate(callback, ...args) {
138 const handle = setTimeout(callback, 0, ...args);
139 return { dispose: () => clearTimeout(handle) };
140 },
141 setInterval(callback, ms, ...args) {
142 const handle = setInterval(callback, ms, ...args);
143 return { dispose: () => clearInterval(handle) };
144 },
145 })
146});
147function RIL() {
148 return _ril;
149}
150(function (RIL) {
151 function install() {
152 api_1.RAL.install(_ril);
153 }
154 RIL.install = install;
155})(RIL || (RIL = {}));
156exports.default = RIL;