You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.1 KiB
43 lines
1.1 KiB
'use strict'; |
|
var $ = require('../internals/export'); |
|
var uncurryThis = require('../internals/function-uncurry-this'); |
|
var toString = require('../internals/to-string'); |
|
|
|
var charAt = uncurryThis(''.charAt); |
|
var charCodeAt = uncurryThis(''.charCodeAt); |
|
var exec = uncurryThis(/./.exec); |
|
var numberToString = uncurryThis(1.0.toString); |
|
var toUpperCase = uncurryThis(''.toUpperCase); |
|
|
|
var raw = /[\w*+\-./@]/; |
|
|
|
var hex = function (code, length) { |
|
var result = numberToString(code, 16); |
|
while (result.length < length) result = '0' + result; |
|
return result; |
|
}; |
|
|
|
// `escape` method |
|
// https://tc39.es/ecma262/#sec-escape-string |
|
$({ global: true }, { |
|
escape: function escape(string) { |
|
var str = toString(string); |
|
var result = ''; |
|
var length = str.length; |
|
var index = 0; |
|
var chr, code; |
|
while (index < length) { |
|
chr = charAt(str, index++); |
|
if (exec(raw, chr)) { |
|
result += chr; |
|
} else { |
|
code = charCodeAt(chr, 0); |
|
if (code < 256) { |
|
result += '%' + hex(code, 2); |
|
} else { |
|
result += '%u' + toUpperCase(hex(code, 4)); |
|
} |
|
} |
|
} return result; |
|
} |
|
});
|
|
|