UNPKG

lib0

Version:

> Monorepo of isomorphic utility functions

1 lines 1.62 kB
{"version":3,"file":"fingerprint.cjs","sources":["../trait/fingerprint.js"],"sourcesContent":["import * as encoding from '../encoding.js'\nimport * as rabin from '../hash/rabin.js'\nimport * as buffer from '../buffer.js'\n\nexport const FingerprintTraitSymbol = Symbol('Fingerprint')\n\n/**\n * When implementing this trait, it is recommended to write some sort of \"magic number\" first to\n * ensure that different types of objects don't have the same fingerprint.\n *\n * The recommended pracice is to generate a random u32 number as your magic number. e.g. using\n * `console.log(random.uint32().toString(16))`\n *\n * @typedef {{ [FingerprintTraitSymbol]:()=>string } | import('../encoding.js').AnyEncodable} Fingerprintable\n */\n\n/**\n * @param {Fingerprintable} a\n * @return {string}\n */\nexport const fingerprint = a => (a != null && /** @type {any} */ (a)[FingerprintTraitSymbol]?.()) || buffer.toBase64(rabin.fingerprint(rabin.StandardIrreducible128, encoding.encode(encoder => { encoding.writeUint32(encoder, 0x8de1c475); encoding.writeAny(encoder, a) })))\n"],"names":["buffer.toBase64","rabin.fingerprint","rabin.StandardIrreducible128","encoding.encode","encoding.writeUint32","encoding.writeAny"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAIY,MAAC,sBAAsB,GAAG,MAAM,CAAC,aAAa,EAAC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,uBAAuB,CAAC,CAAC,EAAE,sBAAsB,CAAC,IAAI,KAAKA,eAAe,CAACC,iBAAiB,CAACC,4BAA4B,EAAEC,eAAe,CAAC,OAAO,IAAI,EAAEC,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAACC,iBAAiB,CAAC,OAAO,EAAE,CAAC,EAAC,EAAE,CAAC,CAAC;;;;;"}