@voiceflow/common
Version:
Junk drawer of utility functions
35 lines (34 loc) • 1.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.generate = exports.generateHash = void 0;
const id_1 = require("./id");
const CHARACTERS = Array.from({ length: 26 }).map((_, index) => String.fromCharCode(97 + index));
const generateHash = (object) => {
const objectStr = typeof object === 'object' ? JSON.stringify(object) : String(object);
if (objectStr.length === 0) {
return '';
}
let hash = 0;
for (let i = 0; i < objectStr.length; i++) {
const chr = objectStr.charCodeAt(i);
// eslint-disable-next-line no-bitwise
hash = (hash << 5) - hash + chr;
// eslint-disable-next-line no-bitwise
hash |= 0; // Convert to 32bit integer
}
return Math.abs(hash).toString();
};
exports.generateHash = generateHash;
exports.generate = {
hash: exports.generateHash,
oneOf: (options) => options[exports.generate.number(0, options.length - 1)],
number: (min = 0, max = 100) => min + Math.floor(Math.random() * (max - min)),
id: (slug = true) => (slug ? id_1.cuid.slug() : (0, id_1.cuid)()),
string: (length = 10) => Array.from({ length })
.map(() => exports.generate.oneOf(CHARACTERS))
.join(''),
object: (entryCount = 3, factory = exports.generate.string) => Array.from({ length: entryCount })
.map(() => [exports.generate.string(), factory()])
.reduce((acc, [key, value]) => Object.assign(acc, { [key]: value }), {}),
array: (length = 3, factory = exports.generate.string) => Array.from({ length }).map(() => factory()),
};