UNPKG

@x5e/gink

Version:

an eventually consistent database

158 lines 8.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("../implementation/utils"); const jstreemap_1 = require("jstreemap"); it("shorterHash", async function () { (0, utils_1.ensure)(utils_1.safeMask.toString(16).match(/^f{13}$/)); await utils_1.librariesReady; const result1 = (0, utils_1.shorterHash)(utils_1.emptyBytes); (0, utils_1.ensure)(result1, result1.toString()); const bytes11 = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]); const result11 = (0, utils_1.shorterHash)(bytes11); (0, utils_1.ensure)(result11, result11.toString()); }); it("generate", async function () { await utils_1.librariesReady; const pair = (0, utils_1.createKeyPair)(); (0, utils_1.ensure)(pair.secretKey.length == 64); (0, utils_1.ensure)(pair.publicKey.length == 32); const secretHex = (0, utils_1.bytesToHex)(pair.secretKey); const publicHex = (0, utils_1.bytesToHex)(pair.publicKey); if (false) { console.log(`${secretHex}\n${publicHex}`); } }); it("merge", async function () { const a = new Uint8Array([94, 154]); const b = new Uint8Array([10, 255]); const c = (0, utils_1.mergeBytes)(a, b); const d = new Uint8Array([94, 154, 10, 255]); (0, utils_1.ensure)((0, utils_1.sameData)(c, d)); }); it("getSig", async function () { const sig1 = (0, utils_1.getSig)(new Uint8Array([3, 4])); (0, utils_1.ensure)(sig1 == 7); const sig2 = (0, utils_1.getSig)(new Uint8Array([7, 2])); (0, utils_1.ensure)(sig2 == 5); }); it("document", async function () { for (const wrapped of [ (0, utils_1.wrapValue)(new Map().set("fee", "parking").set("cost", 1000)), (0, utils_1.wrapValue)({ fee: "parking", cost: 1000 }), ]) { const unwrapped = (0, utils_1.unwrapValue)(wrapped); if (unwrapped instanceof Map) { const keys = Array.from(unwrapped.keys()).sort(); (0, utils_1.ensure)((0, utils_1.matches)(keys, ["cost", "fee"]), keys.toString()); (0, utils_1.ensure)(unwrapped.get("fee") === "parking"); (0, utils_1.ensure)(unwrapped.get("cost") === 1000); } else { throw new Error("wrap/unwrap failed"); } } }); it("canonical string representation of muids", async () => { const muidTuple = [ 1642579230975519, 555027746660010, 11, ]; const muidTupleAsString = (0, utils_1.muidTupleToString)(muidTuple); (0, utils_1.ensure)(muidTupleAsString === "05D5EAC793E61F-1F8CB77AE1EAA-0000B"); const tupleFromString = (0, utils_1.strToMuid)(muidTupleAsString); (0, utils_1.ensure)(tupleFromString.timestamp === muidTuple[0], `Timestamp: ${tupleFromString.timestamp} should be ${muidTuple[0]}`); (0, utils_1.ensure)(tupleFromString.medallion === muidTuple[1], `Medallion: ${tupleFromString.medallion} should be ${muidTuple[1]}`); (0, utils_1.ensure)(tupleFromString.offset === muidTuple[2], `Offset: ${tupleFromString.offset} should be ${muidTuple[2]}`); const muid = { timestamp: 1642579230975519, medallion: 555027746660010, offset: 11, }; const muid1String = (0, utils_1.muidToString)(muid); (0, utils_1.ensure)(muid1String === "05D5EAC793E61F-1F8CB77AE1EAA-0000B"); const muid1FromString = (0, utils_1.strToMuid)(muid1String); (0, utils_1.ensure)(muid1FromString.timestamp === muid.timestamp, `Timestamp: ${muid1FromString.timestamp} should be ${muid.timestamp}`); (0, utils_1.ensure)(muid1FromString.medallion === muid.medallion, `Medallion: ${muid1FromString.medallion} should be ${muid.medallion}`); (0, utils_1.ensure)(muid1FromString.offset === muid.offset, `Offset: ${muid1FromString.offset} should be ${muid.offset}`); const muid2 = { timestamp: -1, medallion: -1, offset: 4, }; const muid2String = (0, utils_1.muidToString)(muid2); (0, utils_1.ensure)(muid2String === "FFFFFFFFFFFFFF-FFFFFFFFFFFFF-00004"); const muid2FromString = (0, utils_1.strToMuid)(muid2String); (0, utils_1.ensure)(muid2FromString.timestamp === muid2.timestamp, `Timestamp: ${muid2FromString.timestamp} should be ${muid2.timestamp}`); (0, utils_1.ensure)(muid2FromString.medallion === muid2.medallion, `Medallion: ${muid2FromString.medallion} should be ${muid2.medallion}`); (0, utils_1.ensure)(muid2FromString.offset === muid2.offset, `Offset: ${muid2FromString.offset} should be ${muid2.offset}`); const muid3 = { timestamp: -15, medallion: -2, offset: -5, }; const muid3String = (0, utils_1.muidToString)(muid3); (0, utils_1.ensure)(muid3String === "FFFFFFFFFFFFF1-FFFFFFFFFFFFE-FFFFB"); const muid3FromString = (0, utils_1.strToMuid)(muid3String); (0, utils_1.ensure)(muid3FromString.timestamp === muid3.timestamp, `Timestamp: ${muid3FromString.timestamp} should be ${muid3.timestamp}`); (0, utils_1.ensure)(muid3FromString.medallion === muid3.medallion, `Medallion: ${muid3FromString.medallion} should be ${muid3.medallion}`); (0, utils_1.ensure)(muid3FromString.offset === muid3.offset, `Offset: ${muid3FromString.offset} should be ${muid3.offset}`); }); it("tuple", async function () { const wrapped = (0, utils_1.wrapValue)([ "yes", 32, null, new Map().set("cheese", "fries"), [], ]); const unwrapped = (0, utils_1.unwrapValue)(wrapped); var asJson = (0, utils_1.valueToJson)(unwrapped); (0, utils_1.ensure)(asJson === `["yes",32,null,{"cheese":"fries"},[]]`, asJson); }); it("timestamp", async function () { const example = new Date(1665892249196); const wrapped = (0, utils_1.wrapValue)(example); const unwrapped = (0, utils_1.unwrapValue)(wrapped); if (unwrapped instanceof Date) { (0, utils_1.ensure)(unwrapped.toISOString() === "2022-10-16T03:50:49.196Z"); } else { throw new Error("date conversion failed"); } }); it("isPathDangerous", function () { (0, utils_1.ensure)((0, utils_1.isPathDangerous)("/") === true); (0, utils_1.ensure)((0, utils_1.isPathDangerous)("/../foo") === true); (0, utils_1.ensure)((0, utils_1.isPathDangerous)("/foo/.bar") === true); (0, utils_1.ensure)((0, utils_1.isPathDangerous)("/user123@example.com/some.file") === false); (0, utils_1.ensure)((0, utils_1.isPathDangerous)("/normal-file-1234") === false); }); it("encodeToken and decodeToken", function () { const token = "adjhbajhfbajb21j4b4b5b5jkn5kj1n5kjn1"; const asHex = (0, utils_1.encodeToken)(token); const backToToken = (0, utils_1.decodeToken)(asHex); (0, utils_1.ensure)(backToToken.includes("token ")); (0, utils_1.ensure)(token === backToToken.substring(7), `original: '${token}' | fromHex: '${backToToken.substring(7)}'`); }); it("toLastWithPrefixBeforeSuffix", function () { const map = new jstreemap_1.TreeMap(); const result1 = (0, utils_1.toLastWithPrefixBeforeSuffix)(map, "foo", "bar"); (0, utils_1.ensure)(!result1); const result2 = (0, utils_1.toLastWithPrefixBeforeSuffix)(map, "foo"); (0, utils_1.ensure)(!result2); map.set("goo", "bar"); const result3 = (0, utils_1.toLastWithPrefixBeforeSuffix)(map, "foo"); (0, utils_1.ensure)(!result3); const result4 = (0, utils_1.toLastWithPrefixBeforeSuffix)(map, "zoo"); (0, utils_1.ensure)(!result4); const result5 = (0, utils_1.toLastWithPrefixBeforeSuffix)(map, "go"); (0, utils_1.ensure)(!!result5 && result5.key === "goo" && result5.value == "bar"); map.set("gool", "bat"); const result6 = (0, utils_1.toLastWithPrefixBeforeSuffix)(map, "goo"); (0, utils_1.ensure)(!!result6 && result6.value === "bat"); map.set("goz", "zzz"); const result7 = (0, utils_1.toLastWithPrefixBeforeSuffix)(map, "goo"); (0, utils_1.ensure)(!!result7 && result7.value === "bat"); const result8 = (0, utils_1.toLastWithPrefixBeforeSuffix)(map, "goo", "f"); (0, utils_1.ensure)(!!result8 && result8.key === "goo"); }); //# sourceMappingURL=utils.test.js.map