UNPKG

@shi-corp/objectid-converter

Version:
32 lines (31 loc) 1.54 kB
import * as __typia_transform__assertGuard from "typia/lib/internal/_assertGuard"; import { assertGuardEquals } from 'typia'; import { stringify } from 'uuid'; export function convertToObjectId(sid) { (() => { const __is = (input, _exceptionable = true) => "string" === typeof input; let _errorFactory; return (input, errorFactory) => { if (false === __is(input)) { _errorFactory = errorFactory; ((input, _path, _exceptionable = true) => "string" === typeof input || __typia_transform__assertGuard._assertGuard(true, { method: "assertGuardEquals", path: _path + "", expected: "string", value: input }, _errorFactory))(input, "$input", true); } }; })()(sid); const sidMatcher = /^S-1-12-1-\d{8,10}-\d{8,10}-\d{8,10}-\d{8,10}$/gum; if (sid.match(sidMatcher) === null) { throw new TypeError('The provided SID is not an Entra ID SID!', { 'cause': 'Input validation!' }); } const splitSid = sid .replace(/^S-1-12-1-/gum, '') .split('-') .map((element) => parseInt(element, 10)); const sidBuffer = new Uint8Array(new Uint32Array(splitSid).buffer); [sidBuffer[0], sidBuffer[3]] = [sidBuffer[3], sidBuffer[0]]; [sidBuffer[1], sidBuffer[2]] = [sidBuffer[2], sidBuffer[1]]; [sidBuffer[5], sidBuffer[4]] = [sidBuffer[4], sidBuffer[5]]; [sidBuffer[7], sidBuffer[6]] = [sidBuffer[6], sidBuffer[7]]; const objectId = stringify(sidBuffer); return objectId; }