heyujie
2021-05-24 4885600ecc369aa2e30a65de8dd7a410f13c34df
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
37
// Based on:
// http://norbertlindenberg.com/2012/05/ecmascript-supplementary-characters/
// and:
// https://github.com/mathiasbynens/String.fromCodePoint/blob/master
// /fromcodepoint.js
 
"use strict";
 
var floor = Math.floor, fromCharCode = String.fromCharCode;
 
// eslint-disable-next-line no-unused-vars
module.exports = function (codePoint1/*, …codePoints*/) {
    var chars = [], length = arguments.length, i, codePoint, result = "";
    for (i = 0; i < length; ++i) {
        codePoint = Number(arguments[i]);
        if (
            !isFinite(codePoint) ||
            codePoint < 0 ||
            codePoint > 0x10ffff ||
            floor(codePoint) !== codePoint
        ) {
            throw new RangeError("Invalid code point " + codePoint);
        }
 
        if (codePoint < 0x10000) {
            chars.push(codePoint);
        } else {
            codePoint -= 0x10000;
            // eslint-disable-next-line no-bitwise
            chars.push((codePoint >> 10) + 0xd800, (codePoint % 0x400) + 0xdc00);
        }
        if (i + 1 !== length && chars.length <= 0x4000) continue;
        result += fromCharCode.apply(null, chars);
        chars.length = 0;
    }
    return result;
};