all files / adal-ts2/src/ guid.generator.ts

84% Statements 21/25
100% Branches 8/8
75% Functions 3/4
84% Lines 21/25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36  1× 1×     1× 34× 34× 34× 34× 34× 1224×   1054×   1224× 1020×   204×   34× 34× 34×     170×     34×   1×          
export class GuidGenerator {
 
 
    public generate(): string {
        let guidHolder = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
        let hex = '0123456789abcdef';
        let r = 0;
        let guidResponse = '';
        for (let i = 0; i < 36; i++) {
            if (guidHolder[i] !== '-' && guidHolder[i] !== '4') {
                // each x and y needs to be random
                r = Math.random() * 16 | 0;
            }
            if (guidHolder[i] === 'x') {
                guidResponse += hex[r];
            } else if (guidHolder[i] === 'y') {
                // clock-seq-and-reserved first hex is filtered and remaining hex values are random
                r &= 0x3; // bit and with 0011 to set pos 2 to zero ?0??
                r |= 0x8; // set pos 3 to 1 as 1???
                guidResponse += hex[r];
            } else {
                guidResponse += guidHolder[i];
            }
        }
        return guidResponse;
    }
 
    private decimalToHex(value: number): string {
        var hex = value.toString(16);
        while (hex.length < 2) {
            hex = '0' + hex;
        }
        return hex;
    }
}