{"version":3,"file":"enc-utf16.mjs","names":["Utf16BE: Encoder","utf16Chars: string[]","words: number[]","Utf16: Encoder","Utf16LE: Encoder"],"sources":["../src/enc-utf16.ts"],"sourcesContent":["import {\n  WordArray,\n  Encoder,\n} from './core';\n\n/**\n * Swaps endian of a word\n * @param word - The word to swap\n * @returns The word with swapped endian\n */\nconst swapEndian = (word: number): number => ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\n/**\n * UTF-16 BE encoding strategy.\n */\nexport const Utf16BE: Encoder = {\n  /**\n   * Converts a word array to a UTF-16 BE string.\n   *\n   * @param wordArray - The word array.\n   * @returns The UTF-16 BE string.\n   *\n   * @example\n   * ```js\n   * const utf16String = Utf16.stringify(wordArray);\n   * ```\n   */\n  stringify(wordArray: WordArray): string {\n    // Shortcuts\n    const { words, sigBytes } = wordArray;\n\n    // Convert\n    const utf16Chars: string[] = [];\n    for (let i = 0; i < sigBytes; i += 2) {\n      const codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n      utf16Chars.push(String.fromCharCode(codePoint));\n    }\n\n    return utf16Chars.join('');\n  },\n\n  /**\n   * Converts a UTF-16 BE string to a word array.\n   *\n   * @param utf16Str - The UTF-16 BE string.\n   * @returns The word array.\n   *\n   * @example\n   * ```js\n   * const wordArray = Utf16.parse(utf16String);\n   * ```\n   */\n  parse(utf16Str: string): WordArray {\n    // Shortcut\n    const utf16StrLength = utf16Str.length;\n\n    // Convert\n    const words: number[] = [];\n    for (let i = 0; i < utf16StrLength; i += 1) {\n      words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n    }\n\n    return WordArray.create(words, utf16StrLength * 2);\n  },\n};\n\n/**\n * UTF-16 encoding strategy (defaults to UTF-16 BE).\n */\nexport const Utf16: Encoder = Utf16BE;\n\n/**\n * UTF-16 LE encoding strategy.\n */\nexport const Utf16LE: Encoder = {\n  /**\n   * Converts a word array to a UTF-16 LE string.\n   *\n   * @param wordArray - The word array.\n   * @returns The UTF-16 LE string.\n   *\n   * @example\n   * ```js\n   * const utf16Str = Utf16LE.stringify(wordArray);\n   * ```\n   */\n  stringify(wordArray: WordArray): string {\n    // Shortcuts\n    const { words, sigBytes } = wordArray;\n\n    // Convert\n    const utf16Chars: string[] = [];\n    for (let i = 0; i < sigBytes; i += 2) {\n      const codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n      utf16Chars.push(String.fromCharCode(codePoint));\n    }\n\n    return utf16Chars.join('');\n  },\n\n  /**\n   * Converts a UTF-16 LE string to a word array.\n   *\n   * @param utf16Str - The UTF-16 LE string.\n   * @returns The word array.\n   *\n   * @example\n   * ```js\n   * const wordArray = Utf16LE.parse(utf16Str);\n   * ```\n   */\n  parse(utf16Str: string): WordArray {\n    // Shortcut\n    const utf16StrLength = utf16Str.length;\n\n    // Convert\n    const words: number[] = [];\n    for (let i = 0; i < utf16StrLength; i += 1) {\n      words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n    }\n\n    return WordArray.create(words, utf16StrLength * 2);\n  },\n};"],"mappings":";;;;;;;;AAUA,MAAM,cAAc,SAA2B,QAAQ,IAAK,aAAgB,SAAS,IAAK;;;;AAK1F,MAAaA,UAAmB;CAY9B,UAAU,WAA8B;EAEtC,MAAM,EAAE,OAAO,UAAU,GAAG;EAG5B,MAAMC,aAAuB,EAAE;AAC/B,OAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAAK,GAAG;GACpC,MAAM,YAAa,MAAM,MAAM,OAAQ,KAAM,IAAI,IAAK,IAAM;AAC5D,cAAW,KAAK,OAAO,aAAa;EACrC;AAED,SAAO,WAAW,KAAK;CACxB;CAaD,MAAM,UAA6B;EAEjC,MAAM,iBAAiB,SAAS;EAGhC,MAAMC,QAAkB,EAAE;AAC1B,OAAK,IAAI,IAAI,GAAG,IAAI,gBAAgB,KAAK,EACvC,OAAM,MAAM,MAAM,SAAS,WAAW,MAAO,KAAM,IAAI,IAAK;AAG9D,SAAO,UAAU,OAAO,OAAO,iBAAiB;CACjD;CACF;;;;AAKD,MAAaC,QAAiB;;;;AAK9B,MAAaC,UAAmB;CAY9B,UAAU,WAA8B;EAEtC,MAAM,EAAE,OAAO,UAAU,GAAG;EAG5B,MAAMH,aAAuB,EAAE;AAC/B,OAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAAK,GAAG;GACpC,MAAM,YAAY,WAAY,MAAM,MAAM,OAAQ,KAAM,IAAI,IAAK,IAAM;AACvE,cAAW,KAAK,OAAO,aAAa;EACrC;AAED,SAAO,WAAW,KAAK;CACxB;CAaD,MAAM,UAA6B;EAEjC,MAAM,iBAAiB,SAAS;EAGhC,MAAMC,QAAkB,EAAE;AAC1B,OAAK,IAAI,IAAI,GAAG,IAAI,gBAAgB,KAAK,EACvC,OAAM,MAAM,MAAM,WAAW,SAAS,WAAW,MAAO,KAAM,IAAI,IAAK;AAGzE,SAAO,UAAU,OAAO,OAAO,iBAAiB;CACjD;CACF"}