{"version":3,"sources":["../ts/modules/utilities/id.ts"],"names":["hexCharset","shorterIdCharset","idPattern","shortIdPattern","fixEndian","bits","bytes","index","count","slice","bytesReverse","arr","let","i","concat","apply","call","isId","id","trim","test","isShortId","isShorterId","length","split","filter","c","indexOf","toShortId","toUpperCase","replace","binary_1","getString","getBits","exports","isIdValid","toId","toShorterId","equals","id1","id2","id1empty","id2empty","shortId1","shortId2"],"mappings":"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","file":"id.js","sourcesContent":["import { getString, getBits } from 'utilities/binary';\r\n\r\nconst hexCharset = '0123456789ABCDEF',\r\n\tshorterIdCharset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\r\n\tidPattern = /^\\{([0-9A-F]{8})-([0-9A-F]{4})-([0-9A-F]{4})-([0-9A-F]{4})-([0-9A-F]{12})\\}$/i,\r\n\tshortIdPattern = /^([0-9A-F]{8})([0-9A-F]{4})([0-9A-F]{4})([0-9A-F]{4})([0-9A-F]{12})$/i;\r\n\r\nfunction fixEndian( bits: boolean[] ): boolean[] {\r\n\tfunction bytes( index: number, count: number ) {\r\n\t\treturn bits.slice( index * 8, index * 8 + count * 8 );\r\n\t}\r\n\r\n\tfunction bytesReverse( index: number, count: number ): boolean[] {\r\n\t\tconst arr: boolean[][] = [];\r\n\t\tfor( let i = 0; i < count; ++i ) arr[ i ] = bytes( index + count - i - 1, 1 );\r\n\t\treturn [].concat.apply( [], arr );\r\n\t}\r\n\r\n\treturn [].concat.call(\r\n\t\tbytesReverse( 0, 4 ),\r\n\t\tbytesReverse( 4, 2 ),\r\n\t\tbytesReverse( 6, 2 ),\r\n\t\tbytes( 8, 8 )\r\n\t);\r\n}\r\n\r\nexport function isId( id: string ) {\r\n\tif( typeof id !== 'string' || !id ) return false;\r\n\tid = id.trim();\r\n\treturn idPattern.test( id.trim() );\r\n}\r\n\r\nexport function isShortId( id: string ) {\r\n\tif( typeof id !== 'string' || !id ) return false;\r\n\tid = id.trim();\r\n\treturn shortIdPattern.test( id.trim() );\r\n}\r\n\r\nexport function isShorterId( id: string ) {\r\n\tif( typeof id !== 'string' || !id ) return false;\r\n\tid = id.trim();\r\n\tif( id.length !== 22 ) return false;\r\n\treturn id.split( '' ).filter( c => shorterIdCharset.indexOf( c ) < 0 ).length === 0;\r\n}\r\n\r\nexport function isIdValid( id: string ) {\r\n\tif( !id ) return false;\r\n\treturn isId( id ) || isShortId( id ) || isShorterId( id );\r\n}\r\n\r\nexport function toId( id: string ) {\r\n\tif( typeof id !== 'string' || !id ) return null;\r\n\tid = id.trim();\r\n\r\n\tif( isId( id ) ) {\r\n\t\treturn id.toUpperCase();\r\n\t}\r\n\r\n\tif( isShorterId( id ) ) {\r\n\t\tid = toShortId( id );\r\n\t}\r\n\r\n\tif( isShortId( id ) ) {\r\n\t\treturn id.toUpperCase().replace( shortIdPattern, '{$1-$2-$3-$4-$5}' );\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n\r\nexport function toShortId( id: string ) {\r\n\tif( typeof id !== 'string' || !id ) return null;\r\n\tid = id.trim();\r\n\r\n\tif( isShortId( id ) ) {\r\n\t\treturn id.toUpperCase();\r\n\t}\r\n\r\n\tif( isId( id ) ) {\r\n\t\treturn id.toUpperCase().replace( idPattern, '$1$2$3$4$5' );\r\n\t}\r\n\r\n\tif( isShorterId( id ) ) {\r\n\t\treturn getString( fixEndian( getBits( id, shorterIdCharset ) ), hexCharset ).slice( 0, 32 );\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n\r\nexport function toShorterId( id: string ) {\r\n\tif( typeof id !== 'string' || !id ) return null;\r\n\tid = id.trim();\r\n\r\n\tif( isShorterId( id ) ) {\r\n\t\treturn id;\r\n\t}\r\n\r\n\tif( isId( id ) ) {\r\n\t\tid = toShortId( id );\r\n\t}\r\n\r\n\tif( isShortId( id ) ) {\r\n\t\treturn getString( fixEndian( getBits( id.toUpperCase(), hexCharset ) ), shorterIdCharset );\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n\r\nexport function equals( id1: string, id2: string ) {\r\n\tconst id1empty = id1 === null || id1 === undefined || ( typeof id1 === 'string' && id1.trim() === '' ),\r\n\t\tid2empty = id2 === null || id2 === undefined || ( typeof id2 === 'string' && id2.trim() === '' );\r\n\tif( id1empty && id2empty ) return true;\r\n\tconst shortId1 = toShortId( id1 ),\r\n\t\tshortId2 = toShortId( id2 );\r\n\treturn !!shortId1 && !!shortId2 && shortId1 === shortId2;\r\n}"]}