UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

295 lines (293 loc) • 10.7 kB
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