@techmely/utils
Version:
Collection of helpful JavaScript / TypeScript utils
90 lines (84 loc) • 2.73 kB
JavaScript
/*!
* @techmely/utils
* Copyright(c) 2021-2024 Techmely <techmely.creation@gmail.com>
* MIT Licensed
*/
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/id.ts
var id_exports = {};
__export(id_exports, {
DEFAULT_PREFIX_ID_LENGTH: () => DEFAULT_PREFIX_ID_LENGTH,
generateId: () => generateId,
generatePrefixId: () => generatePrefixId
});
module.exports = __toCommonJS(id_exports);
// ../../node_modules/nanoid/index.js
var import_node_crypto = require("crypto");
var POOL_SIZE_MULTIPLIER = 128;
var pool;
var poolOffset;
function fillPool(bytes) {
if (!pool || pool.length < bytes) {
pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER);
import_node_crypto.webcrypto.getRandomValues(pool);
poolOffset = 0;
} else if (poolOffset + bytes > pool.length) {
import_node_crypto.webcrypto.getRandomValues(pool);
poolOffset = 0;
}
poolOffset += bytes;
}
function random(bytes) {
fillPool(bytes -= 0);
return pool.subarray(poolOffset - bytes, poolOffset);
}
function customRandom(alphabet, defaultSize, getRandom) {
let mask = (2 << 31 - Math.clz32(alphabet.length - 1 | 1)) - 1;
let step = Math.ceil(1.6 * mask * defaultSize / alphabet.length);
return (size = defaultSize) => {
let id = "";
while (true) {
let bytes = getRandom(step);
let i = step;
while (i--) {
id += alphabet[bytes[i] & mask] || "";
if (id.length === size)
return id;
}
}
};
}
function customAlphabet(alphabet, size = 21) {
return customRandom(alphabet, size, random);
}
// src/id.ts
var generateId = customAlphabet(
"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
);
var DEFAULT_PREFIX_ID_LENGTH = 22;
function generatePrefixId(prefix = "key", length = DEFAULT_PREFIX_ID_LENGTH) {
return `${prefix}_${generateId(length)}`;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
DEFAULT_PREFIX_ID_LENGTH,
generateId,
generatePrefixId
});