consistent-ids
Advanced tools
Comparing version
@@ -1,114 +0,91 @@ | ||
'use strict'; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
var crypto = require('crypto'); | ||
var IdGenerator = function () { | ||
function IdGenerator(secret) { | ||
_classCallCheck(this, IdGenerator); | ||
if (!secret && !process.env.HASH_KEY) { | ||
throw new Error('You must provide a secret or a hash key'); | ||
} else if (secret) { | ||
this.secret = secret; | ||
} else { | ||
this.secret = process.env.HASH_KEY; | ||
"use strict"; | ||
// @flow | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.defaultGenerator = void 0; | ||
const dotenv_1 = __importDefault(require("dotenv")); | ||
const crypto = require('crypto'); | ||
dotenv_1.default.config(); | ||
class IdGenerator { | ||
constructor(secret) { | ||
if (!secret && !process.env.HASH_KEY) { | ||
throw new Error('You must provide a secret or a hash key'); | ||
} | ||
else if (secret) { | ||
this.secret = secret; | ||
} | ||
else { | ||
this.secret = process.env.HASH_KEY; | ||
} | ||
} | ||
} | ||
// Helper | ||
_createClass(IdGenerator, [{ | ||
key: 'getUniqKey', | ||
value: function getUniqKey(length) { | ||
var moduloLen = length % 8; | ||
var partLenght = (length - moduloLen) / 8; | ||
/* Padding characters */ | ||
var paddingChars = 0; | ||
var trimmingChars = 0; | ||
if (moduloLen % 2 === 0) { | ||
paddingChars = moduloLen / 2; | ||
trimmingChars = moduloLen / 2; | ||
} else { | ||
var remaining = moduloLen % 2; | ||
paddingChars = (moduloLen - remaining) / 2; | ||
trimmingChars = paddingChars + remaining; | ||
} | ||
var date = new Date(); | ||
var yearPart = IdGenerator.hashAndCut(date.getFullYear().toString(), this.secret, partLenght); | ||
var monthPart = IdGenerator.hashAndCut(date.getMonth().toString(), this.secret, partLenght); | ||
var dayPart = IdGenerator.hashAndCut(date.getDate().toString(), this.secret, partLenght); | ||
var uuidPart = IdGenerator.hashAndCut(IdGenerator.uuidv4(), this.secret, partLenght); | ||
var hourPart = IdGenerator.hashAndCut(date.getHours().toString(), this.secret, partLenght); | ||
var minutePart = IdGenerator.hashAndCut(date.getMinutes().toString(), this.secret, partLenght); | ||
var secondsPart = IdGenerator.hashAndCut(date.getSeconds().toString(), this.secret, partLenght + paddingChars); | ||
var milisecondsPart = IdGenerator.hashAndCut(date.getMilliseconds().toString(), this.secret, partLenght + trimmingChars); | ||
return yearPart.concat(monthPart, dayPart, uuidPart, hourPart, minutePart, secondsPart, milisecondsPart); | ||
// Helper | ||
static dateStringBuilder(date) { | ||
const dateString = date | ||
.getFullYear() | ||
.toString() | ||
.concat((date.getMonth() + 1).toString(), date.getHours().toString(), date.getMinutes().toString()); | ||
return dateString; | ||
} | ||
}, { | ||
key: 'generate', | ||
value: function generate(prefix) { | ||
var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 24; | ||
if (prefix.toString().length < 2) { | ||
throw new Error('Prefix too short'); | ||
} else { | ||
return prefix.toString().concat('_', this.getUniqKey(length)); | ||
} | ||
} | ||
}], [{ | ||
key: 'dateStringBuilder', | ||
value: function dateStringBuilder(date) { | ||
var dateString = date.getFullYear().toString().concat(date.getMonth() + 1, date.getHours(), date.getMinutes()); | ||
return dateString; | ||
} | ||
// Helper | ||
}, { | ||
key: 'secondsStringBuilder', | ||
value: function secondsStringBuilder(date) { | ||
return date.getSeconds().toString().concat(date.getMilliseconds()); | ||
static secondsStringBuilder(date) { | ||
return date | ||
.getSeconds() | ||
.toString() | ||
.concat(date.getMilliseconds().toString()); | ||
} | ||
// Helper | ||
}, { | ||
key: 'uuidv4', | ||
value: function uuidv4() { | ||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { | ||
var r = Math.random() * 16 | 0; | ||
var v = c === 'x' ? r : r & 0x3 | 0x8; | ||
return v.toString(16); | ||
}); | ||
static uuidv4() { | ||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { | ||
const r = (Math.random() * 16) | 0; | ||
const v = c === 'x' ? r : (r & 0x3) | 0x8; | ||
return v.toString(16); | ||
}); | ||
} | ||
}, { | ||
key: 'hashAndCut', | ||
value: function hashAndCut(message, secret) { | ||
var len = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3; | ||
var hash = crypto.createHmac('sha512', secret).update(message).digest('base64'); | ||
return hash.replace(/\W/g, '').substr(0, len); | ||
static hashAndCut(message, secret, len = 3) { | ||
const hash = crypto | ||
.createHmac('sha512', secret) | ||
.update(message) | ||
.digest('base64'); | ||
return hash.replace(/\W/g, '').substr(0, len); | ||
} | ||
}]); | ||
return IdGenerator; | ||
}(); | ||
getUniqKey(length) { | ||
const moduloLen = length % 8; | ||
const partLenght = (length - moduloLen) / 8; | ||
/* Padding characters */ | ||
let paddingChars = 0; | ||
let trimmingChars = 0; | ||
if (moduloLen % 2 === 0) { | ||
paddingChars = moduloLen / 2; | ||
trimmingChars = moduloLen / 2; | ||
} | ||
else { | ||
const remaining = moduloLen % 2; | ||
paddingChars = (moduloLen - remaining) / 2; | ||
trimmingChars = paddingChars + remaining; | ||
} | ||
const date = new Date(); | ||
const yearPart = IdGenerator.hashAndCut(date.getFullYear().toString(), this.secret, partLenght); | ||
const monthPart = IdGenerator.hashAndCut(date.getMonth().toString(), this.secret, partLenght); | ||
const dayPart = IdGenerator.hashAndCut(date.getDate().toString(), this.secret, partLenght); | ||
const uuidPart = IdGenerator.hashAndCut(IdGenerator.uuidv4(), this.secret, partLenght); | ||
const hourPart = IdGenerator.hashAndCut(date.getHours().toString(), this.secret, partLenght); | ||
const minutePart = IdGenerator.hashAndCut(date.getMinutes().toString(), this.secret, partLenght); | ||
const secondsPart = IdGenerator.hashAndCut(date.getSeconds().toString(), this.secret, partLenght + paddingChars); | ||
const milisecondsPart = IdGenerator.hashAndCut(date.getMilliseconds().toString(), this.secret, partLenght + trimmingChars); | ||
return yearPart.concat(monthPart, dayPart, uuidPart, hourPart, minutePart, secondsPart, milisecondsPart); | ||
} | ||
generate(prefix, length = 24) { | ||
if (prefix.toString().length < 2) { | ||
throw new Error('Prefix too short (must be at least 2 characters)'); | ||
} | ||
else { | ||
return prefix.toString().concat('_', this.getUniqKey(length)); | ||
} | ||
} | ||
} | ||
exports.default = IdGenerator; | ||
var defaultGenerator = new IdGenerator(process.env.HASH_KEY); | ||
exports.defaultGenerator = defaultGenerator; | ||
const defaultGenerator = new IdGenerator(process.env.HASH_KEY); | ||
exports.defaultGenerator = defaultGenerator; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQVE7Ozs7OztBQUVSLG9EQUEyQjtBQUMzQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFakMsZ0JBQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUVoQixNQUFxQixXQUFXO0lBSTlCLFlBQVksTUFBcUI7UUFDL0IsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztTQUM1RDthQUFNLElBQUksTUFBTSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1NBQ3RCO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBa0IsQ0FBQztTQUM5QztJQUNILENBQUM7SUFDRCxTQUFTO0lBQ1QsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQVU7UUFDakMsTUFBTSxVQUFVLEdBQUcsSUFBSTthQUNwQixXQUFXLEVBQUU7YUFDYixRQUFRLEVBQUU7YUFDVixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3RHLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxTQUFTO0lBQ1QsTUFBTSxDQUFDLG9CQUFvQixDQUFDLElBQVU7UUFDcEMsT0FBTyxJQUFJO2FBQ1IsVUFBVSxFQUFFO2FBQ1osUUFBUSxFQUFFO2FBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEVB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 |
{ | ||
"name": "consistent-ids", | ||
"version": "0.5.0", | ||
"version": "0.6.0", | ||
"description": "A randomly consistent (a-la-Stripe) hash generator", | ||
@@ -17,3 +17,3 @@ "license": "MIT", | ||
"start": "nps --no-scripts", | ||
"build": "./node_modules/.bin/babel src -d dist --ignore src/*.spec.js,src/*.test.js", | ||
"build": "tsc", | ||
"prepublish": "yarn build", | ||
@@ -27,3 +27,2 @@ "precommit": "remove-lockfiles && lint-staged", | ||
], | ||
"dependencies": {}, | ||
"devDependencies": { | ||
@@ -38,2 +37,3 @@ "all-contributors-cli": "^4.5.0", | ||
"cz-conventional-changelog": "^2.0.0", | ||
"dotenv": "^10.0.0", | ||
"eslint": "^4.8.0", | ||
@@ -51,3 +51,4 @@ "eslint-config-airbnb-base": "12.0.2", | ||
"prettier": "^1.7.4", | ||
"remove-lockfiles": "^1.4.1" | ||
"remove-lockfiles": "^1.4.1", | ||
"typescript": "^4.2.4" | ||
}, | ||
@@ -54,0 +55,0 @@ "config": { |
14425
56.25%5
25%103
13.19%23
9.52%