edge-mock
Version:
types for testing an developer edge applications
91 lines • 2.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.escape_regex = exports.getType = exports.catArraysBufferViews = exports.rsFromArray = exports.rsToArrayBufferView = exports.rsToString = exports.decode = exports.encode = void 0;
const util_1 = require("util");
const models_1 = require("./models");
const encoder = new util_1.TextEncoder();
const decoder = new util_1.TextDecoder();
function encode(input) {
return encoder.encode(input);
}
exports.encode = encode;
function decode(input) {
return decoder.decode(input);
}
exports.decode = decode;
async function rsToString(rs) {
const ab = await rsToArrayBufferView(rs);
return decode(ab);
}
exports.rsToString = rsToString;
async function rsToArrayBufferView(rs) {
const reader = rs.getReader();
const chunks = [];
while (true) {
const { done, value } = await reader.read();
if (done) {
return catArraysBufferViews(chunks);
}
else {
if (typeof value == 'string') {
chunks.push(encode(value));
}
else if ('buffer' in value) {
chunks.push(value);
}
else if ('byteLength' in value) {
chunks.push(new Uint8Array(value));
}
else {
throw new TypeError(`Unexpected type "${getType(value)}", expected string, ArrayBuffer or Uint8Array`);
}
}
}
}
exports.rsToArrayBufferView = rsToArrayBufferView;
function rsFromArray(array) {
const iterator = array[Symbol.iterator]();
return new models_1.EdgeReadableStream({
pull(controller) {
const { value, done } = iterator.next();
if (done) {
controller.close();
}
else {
controller.enqueue(value);
}
},
});
}
exports.rsFromArray = rsFromArray;
function catArraysBufferViews(arrays) {
// TODO would Buffer.concat be faster here?
const byteLength = arrays.reduce((byteLength, a) => byteLength + a.byteLength, 0);
const combinedArray = new Uint8Array(byteLength);
let pos = 0;
for (const a of arrays) {
combinedArray.set(a, pos);
pos += a.byteLength;
}
return combinedArray;
}
exports.catArraysBufferViews = catArraysBufferViews;
function getType(obj) {
if (obj === null) {
return 'Null';
}
else if (obj === undefined) {
return 'Undefined';
}
else {
return Object.getPrototypeOf(obj).constructor.name;
}
}
exports.getType = getType;
/*
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
* $& means the whole matched string
*/
const escape_regex = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
exports.escape_regex = escape_regex;
//# sourceMappingURL=utils.js.map