one
Version:
One is a React framework for web, iOS, and Android apps.
295 lines (293 loc) • 10.7 kB
JavaScript
var BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
function base64Encode(bytes) {
var out = "";
for (var i = 0; i < bytes.length; i += 3) {
var first = bytes[i];
var second = i + 1 < bytes.length ? bytes[i + 1] : 0;
var third = i + 2 < bytes.length ? bytes[i + 2] : 0;
var triple = first << 16 | second << 8 | third;
out += BASE64[triple >> 18 & 63] + BASE64[triple >> 12 & 63];
out += i + 1 < bytes.length ? BASE64[triple >> 6 & 63] : "=";
out += i + 2 < bytes.length ? BASE64[triple & 63] : "=";
}
return out;
}
function base64Decode(text) {
if (!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(text)) {
throw new TypeError(`expected base64 data`);
}
var clean = text.replace(/=+$/, "");
var out = new Uint8Array(Math.floor(clean.length * 3 / 4));
var at = 0;
for (var i = 0; i < clean.length; i += 4) {
var a = BASE64.indexOf(clean[i]);
var b = BASE64.indexOf(clean[i + 1]);
var c = i + 2 < clean.length ? BASE64.indexOf(clean[i + 2]) : 0;
var d = i + 3 < clean.length ? BASE64.indexOf(clean[i + 3]) : 0;
var triple = a << 18 | b << 12 | c << 6 | d;
out[at++] = triple >> 16 & 255;
if (i + 2 < clean.length) out[at++] = triple >> 8 & 255;
if (i + 3 < clean.length) out[at++] = triple & 255;
}
return out.slice(0, at);
}
function isRecord(value) {
return typeof value === "object" && value !== null && !Array.isArray(value);
}
function encodeValue(value, wire, structs, path) {
switch (wire.kind) {
case "date":
if (!(value instanceof Date)) throw new TypeError(`${path}: expected Date`);
return value;
case "data":
if (!(value instanceof Uint8Array)) throw new TypeError(`${path}: expected Uint8Array`);
return base64Encode(value);
case "enum":
if (typeof value !== "string" && typeof value !== "number") {
throw new TypeError(`${path}: expected an enum value`);
}
return value;
case "struct": {
if (!isRecord(value)) throw new TypeError(`${path}: expected ${wire.name}`);
var table = structs[wire.name];
if (!table) throw new TypeError(`${path}: unknown struct ${wire.name}`);
var out = {};
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
try {
var _loop = function() {
var key2 = _step.value;
if (!table.fields.some(function(field2) {
return field2.name === key2;
})) out[key2] = value[key2];
};
for (var _iterator = Object.keys(value)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) _loop();
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;
try {
for (var _iterator1 = table.fields[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
var field = _step1.value;
var present = value[field.name] !== void 0;
if (!present) {
if (!field.optional) throw new TypeError(`${path}.${field.name}: required`);
continue;
}
out[field.name] = field.wire === void 0 ? value[field.name] : encodeValue(value[field.name], field.wire, structs, `${path}.${field.name}`);
}
} catch (err) {
_didIteratorError1 = true;
_iteratorError1 = err;
} finally {
try {
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
_iterator1.return();
}
} finally {
if (_didIteratorError1) {
throw _iteratorError1;
}
}
}
return out;
}
case "array":
if (!Array.isArray(value)) throw new TypeError(`${path}: expected an array`);
return value.map(function(item, index) {
return encodeValue(item, wire.element, structs, `${path}[${index}]`);
});
case "map": {
if (!isRecord(value)) throw new TypeError(`${path}: expected an object`);
var out1 = {};
var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;
try {
for (var _iterator2 = Object.keys(value)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var key = _step2.value;
out1[key] = encodeValue(value[key], wire.value, structs, `${path}.${key}`);
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
return out1;
}
case "nullable": return value === null || value === void 0 ? null : encodeValue(value, wire.inner, structs, path);
}
}
function decodeValue(value, wire, structs, path) {
switch (wire.kind) {
case "date": {
if (typeof value !== "string") throw new TypeError(`${path}: expected an ISO date string`);
var date = new Date(value);
if (Number.isNaN(date.getTime())) throw new TypeError(`${path}: expected an ISO date string`);
return date;
}
case "data": {
if (typeof value !== "string") throw new TypeError(`${path}: expected base64 data`);
try {
return base64Decode(value);
} catch (unused) {
throw new TypeError(`${path}: expected base64 data`);
}
}
case "enum":
if (typeof value !== "string" && typeof value !== "number") {
throw new TypeError(`${path}: expected an enum value`);
}
return value;
case "struct": {
if (!isRecord(value)) throw new TypeError(`${path}: expected ${wire.name}`);
var table = structs[wire.name];
if (!table) throw new TypeError(`${path}: unknown struct ${wire.name}`);
var out = {};
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
try {
var _loop = function() {
var key2 = _step.value;
if (!table.fields.some(function(field2) {
return field2.name === key2;
})) out[key2] = value[key2];
};
for (var _iterator = Object.keys(value)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) _loop();
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;
try {
for (var _iterator1 = table.fields[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
var field = _step1.value;
var present = value[field.name] !== void 0 && value[field.name] !== null;
if (!present) {
var _field_wire;
if (value[field.name] === null && ((_field_wire = field.wire) === null || _field_wire === void 0 ? void 0 : _field_wire.kind) === "nullable") {
out[field.name] = null;
continue;
}
if (!field.optional) throw new TypeError(`${path}.${field.name}: required`);
continue;
}
out[field.name] = field.wire === void 0 ? value[field.name] : decodeValue(value[field.name], field.wire, structs, `${path}.${field.name}`);
}
} catch (err) {
_didIteratorError1 = true;
_iteratorError1 = err;
} finally {
try {
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
_iterator1.return();
}
} finally {
if (_didIteratorError1) {
throw _iteratorError1;
}
}
}
return out;
}
case "array":
if (!Array.isArray(value)) throw new TypeError(`${path}: expected an array`);
return value.map(function(item, index) {
return decodeValue(item, wire.element, structs, `${path}[${index}]`);
});
case "map": {
if (!isRecord(value)) throw new TypeError(`${path}: expected an object`);
var out1 = {};
var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;
try {
for (var _iterator2 = Object.keys(value)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var key = _step2.value;
out1[key] = decodeValue(value[key], wire.value, structs, `${path}.${key}`);
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
return out1;
}
case "nullable": return value === null || value === void 0 ? null : decodeValue(value, wire.inner, structs, path);
}
}
function encodeNativeSourceArgs(args, wires, structs) {
return args.map(function(arg, index) {
var wire = wires[index];
return wire === void 0 || wire === null ? arg : encodeValue(arg, wire, structs, `args[${index}]`);
});
}
function decodeNativeSourceResult(value, wire, structs) {
return wire === void 0 || wire === null ? value : decodeValue(value, wire, structs, "result");
}
function encodeNativeSourceProps(props, wires, structs) {
var out = { ...props };
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
try {
for (var _iterator = Object.keys(wires)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var name = _step.value;
if (out[name] === void 0) continue;
out[name] = encodeValue(out[name], wires[name], structs, `props.${name}`);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return out;
}
function decodeNativeSourceCallback(args, wires, structs, event) {
return args.map(function(arg, index) {
var wire = wires[index];
return wire === void 0 || wire === null ? arg : decodeValue(arg, wire, structs, `${event}[${index}]`);
});
}
export { base64Decode, base64Encode, decodeNativeSourceCallback, decodeNativeSourceResult, encodeNativeSourceArgs, encodeNativeSourceProps };
//# sourceMappingURL=wire.native.js.map