irctokens
Version:
RFC1459 and IRCv3 protocol tokeniser
88 lines • 5.58 kB
JavaScript
"use strict";
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _StatefulDecoder_encoding, _StatefulDecoder_fallback, _StatefulDecoder_buffer, _StatefulEncoder_encoder, _StatefulEncoder_buffer, _StatefulEncoder_bufferedLines;
Object.defineProperty(exports, "__esModule", { value: true });
exports.StatefulEncoder = exports.StatefulDecoder = void 0;
const line_1 = require("./line");
class StatefulDecoder {
constructor(encoding = 'utf8', fallback = 'latin1') {
_StatefulDecoder_encoding.set(this, void 0);
_StatefulDecoder_fallback.set(this, void 0);
_StatefulDecoder_buffer.set(this, new Uint8Array());
__classPrivateFieldSet(this, _StatefulDecoder_encoding, encoding, "f");
__classPrivateFieldSet(this, _StatefulDecoder_fallback, fallback, "f");
this.clear();
}
clear() {
__classPrivateFieldSet(this, _StatefulDecoder_buffer, new Uint8Array(), "f");
}
pending() {
return __classPrivateFieldGet(this, _StatefulDecoder_buffer, "f");
}
push(data) {
if (!data.length)
return;
const newBuffer = new Uint8Array(__classPrivateFieldGet(this, _StatefulDecoder_buffer, "f").length + data.length);
newBuffer.set(__classPrivateFieldGet(this, _StatefulDecoder_buffer, "f"));
newBuffer.set(data, __classPrivateFieldGet(this, _StatefulDecoder_buffer, "f").length);
__classPrivateFieldSet(this, _StatefulDecoder_buffer, newBuffer, "f");
const lineBuffers = [];
while (__classPrivateFieldGet(this, _StatefulDecoder_buffer, "f").includes('\n'.charCodeAt(0))) {
const lfIdx = __classPrivateFieldGet(this, _StatefulDecoder_buffer, "f").indexOf('\n'.charCodeAt(0));
const crIdx = __classPrivateFieldGet(this, _StatefulDecoder_buffer, "f").indexOf('\r'.charCodeAt(0));
lineBuffers.push(__classPrivateFieldGet(this, _StatefulDecoder_buffer, "f").slice(0, crIdx < lfIdx ? crIdx : lfIdx));
__classPrivateFieldSet(this, _StatefulDecoder_buffer, __classPrivateFieldGet(this, _StatefulDecoder_buffer, "f").slice(lfIdx + 1), "f");
}
const lines = [];
for (const line of lineBuffers) {
lines.push(line_1.tokenise(line, __classPrivateFieldGet(this, _StatefulDecoder_encoding, "f"), __classPrivateFieldGet(this, _StatefulDecoder_fallback, "f")));
}
return lines;
}
}
exports.StatefulDecoder = StatefulDecoder;
_StatefulDecoder_encoding = new WeakMap(), _StatefulDecoder_fallback = new WeakMap(), _StatefulDecoder_buffer = new WeakMap();
class StatefulEncoder {
constructor() {
// #encoding: TextEncodingLabel // TODO only supports utf8 at the moment because of TextEncoder
_StatefulEncoder_encoder.set(this, new TextEncoder());
_StatefulEncoder_buffer.set(this, new Uint8Array());
_StatefulEncoder_bufferedLines.set(this, []);
this.clear();
}
clear() {
__classPrivateFieldSet(this, _StatefulEncoder_buffer, new Uint8Array(), "f");
__classPrivateFieldSet(this, _StatefulEncoder_bufferedLines, [], "f");
}
pending() {
return __classPrivateFieldGet(this, _StatefulEncoder_buffer, "f");
}
push(line) {
const lineBuffer = __classPrivateFieldGet(this, _StatefulEncoder_encoder, "f").encode(`${line.format()}\r\n`);
const newBuffer = new Uint8Array(__classPrivateFieldGet(this, _StatefulEncoder_buffer, "f").length + lineBuffer.length);
newBuffer.set(__classPrivateFieldGet(this, _StatefulEncoder_buffer, "f"));
newBuffer.set(lineBuffer, __classPrivateFieldGet(this, _StatefulEncoder_buffer, "f").length);
__classPrivateFieldSet(this, _StatefulEncoder_buffer, newBuffer, "f");
__classPrivateFieldGet(this, _StatefulEncoder_bufferedLines, "f").push(line);
}
pop(byteCount) {
const sent = __classPrivateFieldGet(this, _StatefulEncoder_buffer, "f").slice(0, byteCount).reduce((acc, curr) => {
return acc + (curr === '\n'.charCodeAt(0) ? 1 : 0);
}, 0);
__classPrivateFieldSet(this, _StatefulEncoder_buffer, __classPrivateFieldGet(this, _StatefulEncoder_buffer, "f").slice(byteCount), "f");
return new Array(sent).fill(null).map(_ => __classPrivateFieldGet(this, _StatefulEncoder_bufferedLines, "f").shift());
}
}
exports.StatefulEncoder = StatefulEncoder;
_StatefulEncoder_encoder = new WeakMap(), _StatefulEncoder_buffer = new WeakMap(), _StatefulEncoder_bufferedLines = new WeakMap();
//# sourceMappingURL=stateful.js.map