UNPKG

@tai-kun/surrealdb

Version:

The SurrealDB SDK for JavaScript

185 lines (183 loc) 19.4 kB
var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); // src/formatters/cbor/formatter.ts import { CONTINUE, decode, decodeStream, encode } from "../../cbor/index.mjs"; import { CBOR_TAG_BOUND_EXCLUDED, CBOR_TAG_BOUND_INCLUDED, CBOR_TAG_DATETIME, CBOR_TAG_DECIMAL, CBOR_TAG_DURATION, CBOR_TAG_FUTURE, CBOR_TAG_GEOMETRY_COLLECTION, CBOR_TAG_GEOMETRY_LINE, CBOR_TAG_GEOMETRY_MULTILINE, CBOR_TAG_GEOMETRY_MULTIPOINT, CBOR_TAG_GEOMETRY_MULTIPOLYGON, CBOR_TAG_GEOMETRY_POINT, CBOR_TAG_GEOMETRY_POLYGON, CBOR_TAG_NONE, CBOR_TAG_RANGE, CBOR_TAG_RECORDID, CBOR_TAG_TABLE, CBOR_TAG_UUID } from "../../data-types/encodable/index.mjs"; import { SurrealTypeError } from "../../errors/index.mjs"; import { EncodedCBOR } from "../../formatter/index.mjs"; import { isArrayBuffer, utf8 } from "../../utils/index.mjs"; var hasBuffer = typeof Buffer !== "undefined"; var _CborFormatter = class _CborFormatter { constructor(options) { this.contentType = "application/cbor"; this.wsProtocols = ["cbor"]; const { encode: encode2 = {}, decode: decode2 = {}, Uuid, Range, Table, Thing, Future, Decimal, Datetime, Duration, GeometryLine, BoundIncluded, BoundExcluded, GeometryPoint, GeometryPolygon, GeometryMultiLine, GeometryCollection, GeometryMultiPoint, GeometryMultiPolygon } = options; this.dataTypes = { Uuid, Range, Table, Thing, Future, Decimal, Datetime, Duration, GeometryLine, BoundIncluded, BoundExcluded, GeometryPoint, GeometryPolygon, GeometryMultiLine, GeometryCollection, GeometryMultiPoint, GeometryMultiPolygon }; this.encodeOptions = encode2; this.decodeOptions = Object.assign({ reviver: { tagged: /* @__PURE__ */ __name((t) => { switch (t.tag) { case CBOR_TAG_NONE: return void 0; case CBOR_TAG_TABLE: return new Table(t.value); case CBOR_TAG_RECORDID: return new Thing(t.value); case CBOR_TAG_DECIMAL: return new Decimal(t.value); case CBOR_TAG_DATETIME: return new Datetime(t.value); case CBOR_TAG_DURATION: return new Duration(t.value); case CBOR_TAG_FUTURE: return new Future(t.value); case CBOR_TAG_UUID: return new Uuid(t.value); case CBOR_TAG_RANGE: return new Range(t.value); case CBOR_TAG_BOUND_INCLUDED: return new BoundIncluded(t.value); case CBOR_TAG_BOUND_EXCLUDED: return new BoundExcluded(t.value); case CBOR_TAG_GEOMETRY_POINT: return new GeometryPoint(t.value); case CBOR_TAG_GEOMETRY_LINE: return new GeometryLine(t.value); case CBOR_TAG_GEOMETRY_POLYGON: return new GeometryPolygon(t.value); case CBOR_TAG_GEOMETRY_MULTIPOINT: return new GeometryMultiPoint(t.value); case CBOR_TAG_GEOMETRY_MULTILINE: return new GeometryMultiLine(t.value); case CBOR_TAG_GEOMETRY_MULTIPOLYGON: return new GeometryMultiPolygon(t.value); case CBOR_TAG_GEOMETRY_COLLECTION: return new GeometryCollection(t.value); default: return CONTINUE; } }, "tagged") } }, decode2); } toEncoded(data) { if (data instanceof EncodedCBOR) { return data; } return new EncodedCBOR( this.encodeSync(data), /* @__PURE__ */ __name(function toCBOR(w) { w.writeBytes(this); }, "toCBOR") ); } encodeSync(data) { return encode(data, this.encodeOptions); } decodeSync(data) { return decode(toEncodedData(data), this.decodeOptions); } decodeStream(data, signal) { return decodeStream(data, Object.assign({ signal }, this.decodeOptions)); } // /** @experimental */ // decodingStrategy(ctx: DecodingContext): DecodingStrategy { // // TODO(tai-kun): 8 KiB は適当。要調整。 // if (ctx.length > (this.decodeOptions.streamThreshold || 8192)) { // return "stream"; // } // return "sync"; // } }; __name(_CborFormatter, "CborFormatter"); var CborFormatter = _CborFormatter; function toEncodedData(data) { switch (true) { case data instanceof Uint8Array: return hasBuffer && data instanceof Buffer ? new Uint8Array(data) : data; case isArrayBuffer(data): return new Uint8Array(data); case (hasBuffer && Array.isArray(data) && data.every((b) => Buffer.isBuffer(b))): return Buffer.concat(data); case typeof data === "string": return utf8.encode(data); default: throw new SurrealTypeError( ["String", "Buffer", "ArrayBuffer", "Uint8Array", "Buffer[]"], data ); } } __name(toEncodedData, "toEncodedData"); export { CborFormatter as default }; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Zvcm1hdHRlcnMvY2Jvci9mb3JtYXR0ZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7XG4gIENPTlRJTlVFLFxuICBkZWNvZGUsXG4gIHR5cGUgRGVjb2RlT3B0aW9ucyBhcyBDYm9yRGVjb2RlT3B0aW9ucyxcbiAgZGVjb2RlU3RyZWFtLFxuICBlbmNvZGUsXG4gIHR5cGUgRW5jb2RlT3B0aW9ucyBhcyBDYm9yRW5jb2RlT3B0aW9ucyxcbiAgVGFnZ2VkLFxufSBmcm9tIFwiQHRhaS1rdW4vc3VycmVhbGRiL2Nib3JcIjtcbmltcG9ydCB0eXBlIHtcbiAgQm91bmRFeGNsdWRlZFNvdXJjZSxcbiAgQm91bmRJbmNsdWRlZFNvdXJjZSxcbiAgRGF0ZXRpbWVTb3VyY2UsXG4gIERlY2ltYWxTb3VyY2UsXG4gIER1cmF0aW9uU291cmNlLFxuICBGdXR1cmVTb3VyY2UsXG4gIEdlb21ldHJ5TGluZVNvdXJjZSxcbiAgR2VvbWV0cnlNdWx0aUxpbmVTb3VyY2UsXG4gIEdlb21ldHJ5TXVsdGlQb2ludFNvdXJjZSxcbiAgR2VvbWV0cnlNdWx0aVBvbHlnb25Tb3VyY2UsXG4gIEdlb21ldHJ5UG9pbnRTb3VyY2UsXG4gIEdlb21ldHJ5UG9seWdvblNvdXJjZSxcbiAgLy8gUmFuZ2VTb3VyY2UsXG4gIFRhYmxlU291cmNlLFxuICBUaGluZ1NvdXJjZSxcbiAgVXVpZFNvdXJjZSxcbn0gZnJvbSBcIkB0YWkta3VuL3N1cnJlYWxkYi9kZWNvZGVvbmx5LWRhdGF0eXBlc1wiO1xuaW1wb3J0IHtcbiAgQ0JPUl9UQUdfQk9VTkRfRVhDTFVERUQsXG4gIENCT1JfVEFHX0JPVU5EX0lOQ0xVREVELFxuICBDQk9SX1RBR19EQVRFVElNRSxcbiAgQ0JPUl9UQUdfREVDSU1BTCxcbiAgQ0JPUl9UQUdfRFVSQVRJT04sXG4gIENCT1JfVEFHX0ZVVFVSRSxcbiAgQ0JPUl9UQUdfR0VPTUVUUllfQ09MTEVDVElPTixcbiAgQ0JPUl9UQUdfR0VPTUVUUllfTElORSxcbiAgQ0JPUl9UQUdfR0VPTUVUUllfTVVMVElMSU5FLFxuICBDQk9SX1RBR19HRU9NRVRSWV9NVUxUSVBPSU5ULFxuICBDQk9SX1RBR19HRU9NRVRSWV9NVUxUSVBPTFlHT04sXG4gIENCT1JfVEFHX0dFT01FVFJZX1BPSU5ULFxuICBDQk9SX1RBR19HRU9NRVRSWV9QT0xZR09OLFxuICBDQk9SX1RBR19OT05FLFxuICBDQk9SX1RBR19SQU5HRSxcbiAgQ0JPUl9UQUdfUkVDT1JESUQsXG4gIENCT1JfVEFHX1RBQkxFLFxuICBDQk9SX1RBR19VVUlELFxufSBmcm9tIFwiQHRhaS1rdW4vc3VycmVhbGRiL2VuY29kYWJsZS1kYXRhdHlwZXNcIjtcbmltcG9ydCB7IFN1cnJlYWxUeXBlRXJyb3IgfSBmcm9tIFwiQHRhaS1rdW4vc3VycmVhbGRiL2Vycm9yc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBEYXRhLFxuICBFbmNvZGVkQ0JPUixcbiAgdHlwZSBGb3JtYXR0ZXIsXG59IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvZm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSB7IFVpbnQ4QXJyYXlMaWtlIH0gZnJvbSBcIkB0YWkta3VuL3N1cnJlYWxkYi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgaXNBcnJheUJ1ZmZlcixcbiAgdHlwZSBTdGF0ZWZ1bFByb21pc2UsXG4gIHV0ZjgsXG59IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvdXRpbHNcIjtcblxuY29uc3QgaGFzQnVmZmVyID0gdHlwZW9mIEJ1ZmZlciAhPT0gXCJ1bmRlZmluZWRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDYm9yRGF0YVR5cGVzIHtcbiAgcmVhZG9ubHkgVXVpZDogbmV3KHNvdXJjZTogVXVpZFNvdXJjZSkgPT4gYW55O1xuICByZWFkb25seSBSYW5nZTogbmV3KHNvdXJjZTogcmVhZG9ubHkgW2FueSwgYW55XSkgPT4gYW55O1xuICByZWFkb25seSBUYWJsZTogbmV3KHNvdXJjZTogVGFibGVTb3VyY2UpID0+IGFueTtcbiAgcmVhZG9ubHkgVGhpbmc6IG5ldyhzb3VyY2U6IFRoaW5nU291cmNlKSA9PiBhbnk7XG4gIHJlYWRvbmx5IEZ1dHVyZTogbmV3KHNvdXJjZTogRnV0dXJlU291cmNlKSA9PiBhbnk7XG4gIHJlYWRvbmx5IERlY2ltYWw6IG5ldyhzb3VyY2U6IERlY2ltYWxTb3VyY2UpID0+IGFueTtcbiAgcmVhZG9ubHkgRGF0ZXRpbWU6IG5ldyhzb3VyY2U6IERhdGV0aW1lU291cmNlKSA9PiBhbnk7XG4gIHJlYWRvbmx5IER1cmF0aW9uOiBuZXcoc291cmNlOiBEdXJhdGlvblNvdXJjZSkgPT4gYW55O1xuICByZWFkb25seSBHZW9tZXRyeUxpbmU6IG5ldyhzb3VyY2U6IEdlb21ldHJ5TGluZVNvdXJjZSkgPT4gYW55O1xuICByZWFkb25seSBCb3VuZEluY2x1ZGVkOiBuZXcoc291cmNlOiBCb3VuZEluY2x1ZGVkU291cmNlKSA9PiBhbnk7XG4gIHJlYWRvbmx5IEJvdW5kRXhjbHVkZWQ6IG5ldyhzb3VyY2U6IEJvdW5kRXhjbHVkZWRTb3VyY2UpID0+IGFueTtcbiAgcmVhZG9ubHkgR2VvbWV0cnlQb2ludDogbmV3KHNvdXJjZTogR2VvbWV0cnlQb2ludFNvdXJjZSkgPT4gYW55O1xuICByZWFkb25seSBHZW9tZXRyeVBvbHlnb246IG5ldyhzb3VyY2U6IEdlb21ldHJ5UG9seWdvblNvdXJjZSkgPT4gYW55O1xuICByZWFkb25seSBHZW9tZXRyeU11bHRpTGluZTogbmV3KHNvdXJjZTogR2VvbWV0cnlNdWx0aUxpbmVTb3VyY2UpID0+IGFueTtcbiAgcmVhZG9ubHkgR2VvbWV0cnlNdWx0aVBvaW50OiBuZXcoc291cmNlOiBHZW9tZXRyeU11bHRpUG9pbnRTb3VyY2UpID0+IGFueTtcbiAgcmVhZG9ubHkgR2VvbWV0cnlDb2xsZWN0aW9uOiBuZXcoc291cmNlOiByZWFkb25seSBhbnlbXSkgPT4gYW55O1xuICByZWFkb25seSBHZW9tZXRyeU11bHRpUG9seWdvbjogbmV3KHNvdXJjZTogR2VvbWV0cnlNdWx0aVBvbHlnb25Tb3VyY2UpID0+IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVPcHRpb25zIGV4dGVuZHMgQ2JvckVuY29kZU9wdGlvbnMge31cblxuZXhwb3J0IGludGVyZmFjZSBEZWNvZGVPcHRpb25zIGV4dGVuZHMgQ2JvckRlY29kZU9wdGlvbnMge1xuICByZWFkb25seSBzdHJlYW1UaHJlc2hvbGQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2JvckZvcm1hdHRlck9wdGlvbnMgZXh0ZW5kcyBDYm9yRGF0YVR5cGVzIHtcbiAgcmVhZG9ubHkgZW5jb2RlPzogRW5jb2RlT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZGVjb2RlPzogRGVjb2RlT3B0aW9ucyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2JvckZvcm1hdHRlciBpbXBsZW1lbnRzIEZvcm1hdHRlciB7XG4gIHByb3RlY3RlZCBkYXRhVHlwZXM6IENib3JEYXRhVHlwZXM7XG4gIHByb3RlY3RlZCBlbmNvZGVPcHRpb25zOiBFbmNvZGVPcHRpb25zO1xuICBwcm90ZWN0ZWQgZGVjb2RlT3B0aW9uczogRGVjb2RlT3B0aW9ucztcblxuICBjb250ZW50VHlwZSA9IFwiYXBwbGljYXRpb24vY2JvclwiO1xuICB3c1Byb3RvY29scyA9IFtcImNib3JcIl07XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ2JvckZvcm1hdHRlck9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBlbmNvZGUgPSB7fSxcbiAgICAgIGRlY29kZSA9IHt9LFxuICAgICAgVXVpZCxcbiAgICAgIFJhbmdlLFxuICAgICAgVGFibGUsXG4gICAgICBUaGluZyxcbiAgICAgIEZ1dHVyZSxcbiAgICAgIERlY2ltYWwsXG4gICAgICBEYXRldGltZSxcbiAgICAgIER1cmF0aW9uLFxuICAgICAgR2VvbWV0cnlMaW5lLFxuICAgICAgQm91bmRJbmNsdWRlZCxcbiAgICAgIEJvdW5kRXhjbHVkZWQsXG4gICAgICBHZW9tZXRyeVBvaW50LFxuICAgICAgR2VvbWV0cnlQb2x5Z29uLFxuICAgICAgR2VvbWV0cnlNdWx0aUxpbmUsXG4gICAgICBHZW9tZXRyeUNvbGxlY3Rpb24sXG4gICAgICBHZW9tZXRyeU11bHRpUG9pbnQsXG4gICAgICBHZW9tZXRyeU11bHRpUG9seWdvbixcbiAgICB9ID0gb3B0aW9ucztcbiAgICB0aGlzLmRhdGFUeXBlcyA9IHtcbiAgICAgIFV1aWQsXG4gICAgICBSYW5nZSxcbiAgICAgIFRhYmxlLFxuICAgICAgVGhpbmcsXG4gICAgICBGdXR1cmUsXG4gICAgICBEZWNpbWFsLFxuICAgICAgRGF0ZXRpbWUsXG4gICAgICBEdXJhdGlvbixcbiAgICAgIEdlb21ldHJ5TGluZSxcbiAgICAgIEJvdW5kSW5jbHVkZWQsXG4gICAgICBCb3VuZEV4Y2x1ZGVkLFxuICAgICAgR2VvbWV0cnlQb2ludCxcbiAgICAgIEdlb21ldHJ5UG9seWdvbixcbiAgICAgIEdlb21ldHJ5TXVsdGlMaW5lLFxuICAgICAgR2VvbWV0cnlDb2xsZWN0aW9uLFxuICAgICAgR2VvbWV0cnlNdWx0aVBvaW50LFxuICAgICAgR2VvbWV0cnlNdWx0aVBvbHlnb24sXG4gICAgfTtcbiAgICB0aGlzLmVuY29kZU9wdGlvbnMgPSBlbmNvZGU7XG4gICAgdGhpcy5kZWNvZGVPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICByZXZpdmVyOiB7XG4gICAgICAgIHRhZ2dlZDogKHQ6IFRhZ2dlZDxhbnk+KSA9PiB7XG4gICAgICAgICAgc3dpdGNoICh0LnRhZykge1xuICAgICAgICAgICAgY2FzZSBDQk9SX1RBR19OT05FOlxuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBjYXNlIENCT1JfVEFHX1RBQkxFOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IFRhYmxlKHQudmFsdWUpO1xuXG4gICAgICAgICAgICBjYXNlIENCT1JfVEFHX1JFQ09SRElEOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IFRoaW5nKHQudmFsdWUpO1xuXG4gICAgICAgICAgICBjYXNlIENCT1JfVEFHX0RFQ0lNQUw6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgRGVjaW1hbCh0LnZhbHVlKTtcblxuICAgICAgICAgICAgY2FzZSBDQk9SX1RBR19EQVRFVElNRTpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRldGltZSh0LnZhbHVlKTtcblxuICAgICAgICAgICAgY2FzZSBDQk9SX1RBR19EVVJBVElPTjpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEdXJhdGlvbih0LnZhbHVlKTtcblxuICAgICAgICAgICAgY2FzZSBDQk9SX1RBR19GVVRVUkU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgRnV0dXJlKHQudmFsdWUpO1xuXG4gICAgICAgICAgICBjYXNlIENCT1JfVEFHX1VVSUQ6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVXVpZCh0LnZhbHVlKTtcblxuICAgICAgICAgICAgY2FzZSBDQk9SX1RBR19SQU5HRTpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0LnZhbHVlKTtcblxuICAgICAgICAgICAgY2FzZSBDQk9SX1RBR19CT1VORF9JTkNMVURFRDpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCb3VuZEluY2x1ZGVkKHQudmFsdWUpO1xuXG4gICAgICAgICAgICBjYXNlIENCT1JfVEFHX0JPVU5EX0VYQ0xVREVEOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IEJvdW5kRXhjbHVkZWQodC52YWx1ZSk7XG5cbiAgICAgICAgICAgIGNhc2UgQ0JPUl9UQUdfR0VPTUVUUllfUE9JTlQ6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgR2VvbWV0cnlQb2ludCh0LnZhbHVlKTtcblxuICAgICAgICAgICAgY2FzZSBDQk9SX1RBR19HRU9NRVRSWV9MSU5FOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IEdlb21ldHJ5TGluZSh0LnZhbHVlKTtcblxuICAgICAgICAgICAgY2FzZSBDQk9SX1RBR19HRU9NRVRSWV9QT0xZR09OOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IEdlb21ldHJ5UG9seWdvbih0LnZhbHVlKTtcblxuICAgICAgICAgICAgY2FzZSBDQk9SX1RBR19HRU9NRVRSWV9NVUxUSVBPSU5UOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IEdlb21ldHJ5TXVsdGlQb2ludCh0LnZhbHVlKTtcblxuICAgICAgICAgICAgY2FzZSBDQk9SX1RBR19HRU9NRVRSWV9NVUxUSUxJTkU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgR2VvbWV0cnlNdWx0aUxpbmUodC52YWx1ZSk7XG5cbiAgICAgICAgICAgIGNhc2UgQ0JPUl9UQUdfR0VPTUVUUllfTVVMVElQT0xZR09OOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IEdlb21ldHJ5TXVsdGlQb2x5Z29uKHQudmFsdWUpO1xuXG4gICAgICAgICAgICBjYXNlIENCT1JfVEFHX0dFT01FVFJZX0NPTExFQ1RJT046XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgR2VvbWV0cnlDb2xsZWN0aW9uKHQudmFsdWUpO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gQ09OVElOVUU7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LCBkZWNvZGUpO1xuICB9XG5cbiAgdG9FbmNvZGVkPFREYXRhID0gdW5rbm93bj4oZGF0YTogVERhdGEpOiBFbmNvZGVkQ0JPUjxURGF0YT4ge1xuICAgIGlmIChkYXRhIGluc3RhbmNlb2YgRW5jb2RlZENCT1IpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRW5jb2RlZENCT1IoXG4gICAgICB0aGlzLmVuY29kZVN5bmMoZGF0YSksXG4gICAgICBmdW5jdGlvbiB0b0NCT1Iodykge1xuICAgICAgICB3LndyaXRlQnl0ZXModGhpcyk7XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBlbmNvZGVTeW5jKGRhdGE6IHVua25vd24pOiBVaW50OEFycmF5IHtcbiAgICByZXR1cm4gZW5jb2RlKGRhdGEsIHRoaXMuZW5jb2RlT3B0aW9ucyk7XG4gIH1cblxuICBkZWNvZGVTeW5jKGRhdGE6IERhdGEpOiB1bmtub3duIHtcbiAgICByZXR1cm4gZGVjb2RlKHRvRW5jb2RlZERhdGEoZGF0YSksIHRoaXMuZGVjb2RlT3B0aW9ucyk7XG4gIH1cblxuICBkZWNvZGVTdHJlYW0oXG4gICAgZGF0YTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4sXG4gICAgc2lnbmFsOiBBYm9ydFNpZ25hbCxcbiAgKTogU3RhdGVmdWxQcm9taXNlPHVua25vd24+IHtcbiAgICByZXR1cm4gZGVjb2RlU3RyZWFtKGRhdGEsIE9iamVjdC5hc3NpZ24oeyBzaWduYWwgfSwgdGhpcy5kZWNvZGVPcHRpb25zKSk7XG4gIH1cblxuICAvLyAvKiogQGV4cGVyaW1lbnRhbCAqL1xuICAvLyBkZWNvZGluZ1N0cmF0ZWd5KGN0eDogRGVjb2RpbmdDb250ZXh0KTogRGVjb2RpbmdTdHJhdGVneSB7XG4gIC8vICAgLy8gVE9ETyh0YWkta3VuKTogOCBLaUIgXHUzMDZGXHU5MDY5XHU1RjUzXHUzMDAyXHU4OTgxXHU4QUJGXHU2NTc0XHUzMDAyXG4gIC8vICAgaWYgKGN0eC5sZW5ndGggPiAodGhpcy5kZWNvZGVPcHRpb25zLnN0cmVhbVRocmVzaG9sZCB8fCA4MTkyKSkge1xuICAvLyAgICAgcmV0dXJuIFwic3RyZWFtXCI7XG4gIC8vICAgfVxuXG4gIC8vICAgcmV0dXJuIFwic3luY1wiO1xuICAvLyB9XG59XG5cbmZ1bmN0aW9uIHRvRW5jb2RlZERhdGEoZGF0YTogRGF0YSk6IFVpbnQ4QXJyYXlMaWtlIHtcbiAgc3dpdGNoICh0cnVlKSB7XG4gICAgY2FzZSBkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheTpcbiAgICAgIHJldHVybiBoYXNCdWZmZXIgJiYgZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlclxuICAgICAgICA/IG5ldyBVaW50OEFycmF5KGRhdGEpXG4gICAgICAgIDogZGF0YSBhcyBVaW50OEFycmF5O1xuXG4gICAgY2FzZSBpc0FycmF5QnVmZmVyKGRhdGEpOlxuICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEpO1xuXG4gICAgY2FzZSBoYXNCdWZmZXJcbiAgICAgICYmIEFycmF5LmlzQXJyYXkoZGF0YSlcbiAgICAgICYmIGRhdGEuZXZlcnkoYiA9PiBCdWZmZXIuaXNCdWZmZXIoYikpOlxuICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoZGF0YSk7XG5cbiAgICBjYXNlIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIHV0ZjguZW5jb2RlKGRhdGEpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBTdXJyZWFsVHlwZUVycm9yKFxuICAgICAgICBbXCJTdHJpbmdcIiwgXCJCdWZmZXJcIiwgXCJBcnJheUJ1ZmZlclwiLCBcIlVpbnQ4QXJyYXlcIiwgXCJCdWZmZXJbXVwiXSxcbiAgICAgICAgZGF0YSxcbiAgICAgICk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7QUFBQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFFQTtBQUFBLEVBQ0E7QUFBQSxPQUdLO0FBbUJQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsd0JBQXdCO0FBQ2pDO0FBQUEsRUFFRTtBQUFBLE9BRUs7QUFFUDtBQUFBLEVBQ0U7QUFBQSxFQUVBO0FBQUEsT0FDSztBQUVQLElBQU0sWUFBWSxPQUFPLFdB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