UNPKG

@qrsln/utils

Version:
85 lines (80 loc) 9.83 kB
/** @dynamic */ export class Guid { constructor(value) { this.Value = this.Empty; this.ToString = () => this.Value; this.Value = Guid.Empty; if (value && Guid.IsValid(value)) { this.Value = value; } } // public static Empty = '00000000-0000-0000-0000-000000000000'; static get Empty() { return '00000000-0000-0000-0000-000000000000'; } get Empty() { return Guid.Empty; } static Parse(guid) { return new Guid(guid); } static NewGuid() { return new Guid(Guid.Raw()); } static IsValid(guid) { const value = guid.toString(); return guid && (guid instanceof Guid || Guid.validator.test(value)); } static Raw() { return [Guid.Generate(2), Guid.Generate(1), Guid.Generate(1), Guid.Generate(1), Guid.Generate(3)].join('-'); } static Generate(count) { let out = ''; for (let i = 0; i < count; i++) { // tslint:disable-next-line:no-bitwise out += (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); } return out; } Equals(other) { // Comparing string `value` against provided `guid` will auto-call // toString on `guid` for comparison return Guid.IsValid(other) && this.Value === other.ToString(); } IsEmpty() { return this.Empty === Guid.Empty; } ToJSON() { return { Value: this.Value, }; } } Guid.validator = new RegExp('^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$', 'i'); /* usage import {Guid} from '@qrsln/loot-box/Utils'; ... guid: Guid; GuidStringify = () => JSON.stringify(this.guid); Guid() { this.guid = new Guid(); console.log(this.guid); // Guid {Value: "00000000-0000-0000-0000-000000000000"} console.log(this.guid.ToString()); // 00000000-0000-0000-0000-000000000000 console.log(this.guid.ToJSON()); // {Value: "00000000-0000-0000-0000-000000000000"} console.log(JSON.stringify(this.guid)); // {Value: "00000000-0000-0000-0000-000000000000"} console.log('IsEmpty', this.guid.IsEmpty()); // true } GuidNew() { this.guid = Guid.NewGuid(); console.log(this.guid); // Guid { Value: 'bb90ef83-1a7e-42b1-90ba-39cdebb6366c' } console.log(JSON.stringify(this.guid)); // "bb90ef83-1a7e-42b1-90ba-39cdebb6366c" } GuidCheck() { console.log('IsValid', Guid.IsValid(this.guid)); // true console.log(Guid.Empty); // 00000000-0000-0000-0000-000000000000 console.log('IsValid Guid.IsValid(Guid.Empty)', Guid.IsValid(Guid.Empty)); // false console.log('Equals this.guid.Equals(this.guid));', this.guid.Equals(this.guid)); // true console.log('Equals this.guid.Equals(Guid.NewGuid())', this.guid.Equals(Guid.NewGuid())); // false } */ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3V0aWxzL0NvcmUvc3JjL0d1aWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZTtBQUNmLE1BQU0sT0FBTyxJQUFJO0lBV2YsWUFBWSxLQUFjO1FBVVQsVUFBSyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUM7UUFzQ3JDLGFBQVEsR0FBRyxHQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBL0N6QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFeEIsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUNwQjtJQUNILENBQUM7SUFmRCxnRUFBZ0U7SUFDekQsTUFBTSxLQUFLLEtBQUs7UUFDckIsT0FBTyxzQ0FBc0MsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFjTSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQVk7UUFDOUIsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRU0sTUFBTSxDQUFDLE9BQU87UUFDbkIsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFTO1FBQzdCLE1BQU0sS0FBSyxHQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0QyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksWUFBWSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU0sTUFBTSxDQUFDLEdBQUc7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFTyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQWE7UUFDbkMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM5QixzQ0FBc0M7WUFDdEMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQVc7UUFDdkIsa0VBQWtFO1FBQ2xFLG9DQUFvQztRQUNwQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUVNLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBSU0sTUFBTTtRQUNYLE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDbEIsQ0FBQztJQUNKLENBQUM7O0FBOUNjLGNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxnRUFBZ0UsRUFBRSxHQUFHLENBQUMsQ0FBQztBQWlEL0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAZHluYW1pYyAqL1xyXG5leHBvcnQgY2xhc3MgR3VpZCB7XHJcblxyXG4gIC8vIHB1YmxpYyBzdGF0aWMgRW1wdHkgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcclxuICBwdWJsaWMgc3RhdGljIGdldCBFbXB0eSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBFbXB0eSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEd1aWQuRW1wdHk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcih2YWx1ZT86IHN0cmluZykge1xyXG4gICAgdGhpcy5WYWx1ZSA9IEd1aWQuRW1wdHk7XHJcblxyXG4gICAgaWYgKHZhbHVlICYmIEd1aWQuSXNWYWxpZCh2YWx1ZSkpIHtcclxuICAgICAgdGhpcy5WYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdG9yID0gbmV3IFJlZ0V4cCgnXlthLXowLTldezh9LVthLXowLTldezR9LVthLXowLTldezR9LVthLXowLTldezR9LVthLXowLTldezEyfSQnLCAnaScpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IFZhbHVlOiBzdHJpbmcgPSB0aGlzLkVtcHR5O1xyXG5cclxuICBwdWJsaWMgc3RhdGljIFBhcnNlKGd1aWQ6IHN0cmluZyk6IEd1aWQge1xyXG4gICAgcmV0dXJuIG5ldyBHdWlkKGd1aWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBOZXdHdWlkKCk6IEd1aWQge1xyXG4gICAgcmV0dXJuIG5ldyBHdWlkKEd1aWQuUmF3KCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBJc1ZhbGlkKGd1aWQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdmFsdWU6IHN0cmluZyA9IGd1aWQudG9TdHJpbmcoKTtcclxuICAgIHJldHVybiBndWlkICYmIChndWlkIGluc3RhbmNlb2YgR3VpZCB8fCBHdWlkLnZhbGlkYXRvci50ZXN0KHZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIFJhdygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFtHdWlkLkdlbmVyYXRlKDIpLCBHdWlkLkdlbmVyYXRlKDEpLCBHdWlkLkdlbmVyYXRlKDEpLCBHdWlkLkdlbmVyYXRlKDEpLCBHdWlkLkdlbmVyYXRlKDMpXS5qb2luKCctJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBHZW5lcmF0ZShjb3VudDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBvdXQgPSAnJztcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG4gICAgICBvdXQgKz0gKCgoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMCkgfCAwKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBFcXVhbHMob3RoZXI6IEd1aWQpOiBib29sZWFuIHtcclxuICAgIC8vIENvbXBhcmluZyBzdHJpbmcgYHZhbHVlYCBhZ2FpbnN0IHByb3ZpZGVkIGBndWlkYCB3aWxsIGF1dG8tY2FsbFxyXG4gICAgLy8gdG9TdHJpbmcgb24gYGd1aWRgIGZvciBjb21wYXJpc29uXHJcbiAgICByZXR1cm4gR3VpZC5Jc1ZhbGlkKG90aGVyKSAmJiB0aGlzLlZhbHVlID09PSBvdGhlci5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIElzRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5FbXB0eSA9PT0gR3VpZC5FbXB0eTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBUb1N0cmluZyA9ICgpOiBzdHJpbmcgPT4gdGhpcy5WYWx1ZTtcclxuXHJcbiAgcHVibGljIFRvSlNPTigpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgVmFsdWU6IHRoaXMuVmFsdWUsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG5cclxuLyogICAgdXNhZ2VcclxuaW1wb3J0IHtHdWlkfSBmcm9tICdAcXJzbG4vbG9vdC1ib3gvVXRpbHMnO1xyXG4uLi5cclxuXHJcbiAgZ3VpZDogR3VpZDtcclxuXHJcbiAgR3VpZFN0cmluZ2lmeSA9ICgpID0+IEpTT04uc3RyaW5naWZ5KHRoaXMuZ3VpZCk7XHJcblxyXG4gIEd1aWQoKSB7XHJcbiAgICB0aGlzLmd1aWQgPSBuZXcgR3VpZCgpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5ndWlkKTsgLy8gR3VpZCB7VmFsdWU6IFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCJ9XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmd1aWQuVG9TdHJpbmcoKSk7IC8vIDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFxyXG4gICAgY29uc29sZS5sb2codGhpcy5ndWlkLlRvSlNPTigpKTsgLy8ge1ZhbHVlOiBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwifVxyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGhpcy5ndWlkKSk7IC8vIHtWYWx1ZTogXCIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIn1cclxuICAgIGNvbnNvbGUubG9nKCdJc0VtcHR5JywgdGhpcy5ndWlkLklzRW1wdHkoKSk7IC8vIHRydWVcclxuICB9XHJcblxyXG4gIEd1aWROZXcoKSB7XHJcbiAgICB0aGlzLmd1aWQgPSBHdWlkLk5ld0d1aWQoKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuZ3VpZCk7IC8vIEd1aWQgeyBWYWx1ZTogJ2JiOTBlZjgzLTFhN2UtNDJiMS05MGJhLTM5Y2RlYmI2MzY2YycgfVxyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGhpcy5ndWlkKSk7ICAvLyBcImJiOTBlZjgzLTFhN2UtNDJiMS05MGJhLTM5Y2RlYmI2MzY2Y1wiXHJcbiAgfVxyXG5cclxuICBHdWlkQ2hlY2soKSB7XHJcbiAgICBjb25zb2xlLmxvZygnSXNWYWxpZCcsIEd1aWQuSXNWYWxpZCh0aGlzLmd1aWQpKTsgLy8gdHJ1ZVxyXG4gICAgY29uc29sZS5sb2coR3VpZC5FbXB0eSk7IC8vIDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFxyXG4gICAgY29uc29sZS5sb2coJ0lzVmFsaWQgR3VpZC5Jc1ZhbGlkKEd1aWQuRW1wdHkpJywgR3VpZC5Jc1ZhbGlkKEd1aWQuRW1wdHkpKTsgLy8gZmFsc2VcclxuICAgIGNvbnNvbGUubG9nKCdFcXVhbHMgdGhpcy5ndWlkLkVxdWFscyh0aGlzLmd1aWQpKTsnLCB0aGlzLmd1aWQuRXF1YWxzKHRoaXMuZ3VpZCkpOyAvLyB0cnVlXHJcbiAgICBjb25zb2xlLmxvZygnRXF1YWxzIHRoaXMuZ3VpZC5FcXVhbHMoR3VpZC5OZXdHdWlkKCkpJywgdGhpcy5ndWlkLkVxdWFscyhHdWlkLk5ld0d1aWQoKSkpOyAvLyBmYWxzZVxyXG4gIH1cclxuICovXHJcbiJdfQ==