Skip to content

Commit fad1d44

Browse files
authored
Merge pull request #945 from zloirock/annex-b
close #336
2 parents 90647c4 + 5c63b94 commit fad1d44

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+473
-60
lines changed

CHANGELOG.md

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
## Changelog
22
##### Unreleased
3+
- Added missed polyfills of [Annex B](https://tc39.es/ecma262/#sec-additional-built-in-properties) features (required mainly for some non-browser engines), [#336](https://github.com/zloirock/core-js/issues/336):
4+
- `escape`
5+
- `unescape`
6+
- `String.prototype.substr`
7+
- `Date.prototype.getYear`
8+
- `Date.prototype.setYear`
9+
- `Date.prototype.toGMTString`
310
- Fixed detection of forbidden host code points in URL polyfill
411
- Allowed `rhino` target in `core-js-compat` / `core-js-builder`, added compat data for `rhino` 1.7.13, [#942](https://github.com/zloirock/core-js/issues/942), thanks [@gausie](https://github.com/gausie)
512
- `.at` marked as supported from FF90

README.md

+45-59
Large diffs are not rendered by default.

packages/core-js-compat/src/data.js

+48
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,14 @@ const data = {
311311
safari: '7.1',
312312
rhino: '1.7.13',
313313
},
314+
'es.date.get-year': {
315+
chrome: '1',
316+
firefox: '1',
317+
ie: '3',
318+
opera: '3',
319+
safari: '1',
320+
rhino: '1.7.13',
321+
},
314322
'es.date.now': {
315323
chrome: '5',
316324
firefox: '2',
@@ -319,6 +327,22 @@ const data = {
319327
safari: '4.0',
320328
rhino: '1.7.13',
321329
},
330+
'es.date.set-year': {
331+
chrome: '1',
332+
firefox: '1',
333+
ie: '3',
334+
opera: '3',
335+
safari: '1',
336+
rhino: '1.7.13',
337+
},
338+
'es.date.to-gmt-string': {
339+
chrome: '1',
340+
firefox: '1',
341+
ie: '3',
342+
opera: '3',
343+
safari: '1',
344+
rhino: '1.7.13',
345+
},
322346
'es.date.to-iso-string': {
323347
chrome: '26',
324348
firefox: '7',
@@ -347,6 +371,14 @@ const data = {
347371
safari: '3.1',
348372
rhino: '1.7.13',
349373
},
374+
'es.escape': {
375+
chrome: '1',
376+
firefox: '1',
377+
ie: '3',
378+
opera: '3',
379+
safari: '1',
380+
rhino: '1.7.13',
381+
},
350382
'es.function.bind': {
351383
chrome: '7',
352384
firefox: '4',
@@ -1029,6 +1061,14 @@ const data = {
10291061
firefox: '40',
10301062
safari: '10.0',
10311063
},
1064+
'es.string.substr': {
1065+
chrome: '1',
1066+
ie: '4',
1067+
firefox: '1',
1068+
opera: '4',
1069+
safari: '1',
1070+
rhino: '1.7.13',
1071+
},
10321072
'es.string.trim': {
10331073
chrome: '59',
10341074
edge: '15',
@@ -1345,6 +1385,14 @@ const data = {
13451385
firefox: '51',
13461386
safari: '10.0',
13471387
},
1388+
'es.unescape': {
1389+
chrome: '1',
1390+
firefox: '1',
1391+
ie: '3',
1392+
opera: '3',
1393+
safari: '1',
1394+
rhino: '1.7.13',
1395+
},
13481396
'es.weak-map': {
13491397
chrome: '51',
13501398
edge: '15',

packages/core-js-compat/src/modules-by-versions.js

+8
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,12 @@ module.exports = {
8787
'esnext.symbol.matcher',
8888
'esnext.symbol.metadata',
8989
],
90+
3.15: [
91+
'es.date.get-year',
92+
'es.date.set-year',
93+
'es.date.to-gmt-string',
94+
'es.escape',
95+
'es.string.substr',
96+
'es.unescape',
97+
],
9098
};

packages/core-js/es/date/get-year.js

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
require('../../modules/es.date.get-year');
2+
var entryUnbind = require('../../internals/entry-unbind');
3+
4+
module.exports = entryUnbind('Date', 'getYear');

packages/core-js/es/date/index.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
require('../../modules/es.date.get-year');
12
require('../../modules/es.date.now');
2-
require('../../modules/es.date.to-json');
3+
require('../../modules/es.date.set-year');
4+
require('../../modules/es.date.to-gmt-string');
35
require('../../modules/es.date.to-iso-string');
6+
require('../../modules/es.date.to-json');
47
require('../../modules/es.date.to-string');
58
require('../../modules/es.date.to-primitive');
69
var path = require('../../internals/path');

packages/core-js/es/date/set-year.js

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
require('../../modules/es.date.set-year');
2+
var entryUnbind = require('../../internals/entry-unbind');
3+
4+
module.exports = entryUnbind('Date', 'setYear');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
require('../../modules/es.date.to-gmt-string');
2+
var entryUnbind = require('../../internals/entry-unbind');
3+
4+
module.exports = entryUnbind('Date', 'toGMTString');

packages/core-js/es/escape.js

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
require('../modules/es.escape');
2+
var global = require('../internals/global');
3+
4+
module.exports = global.escape;

packages/core-js/es/string/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ require('../../modules/es.string.replace-all');
1414
require('../../modules/es.string.search');
1515
require('../../modules/es.string.split');
1616
require('../../modules/es.string.starts-with');
17+
require('../../modules/es.string.substr');
1718
require('../../modules/es.string.trim');
1819
require('../../modules/es.string.trim-start');
1920
require('../../modules/es.string.trim-end');

packages/core-js/es/string/substr.js

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
require('../../modules/es.string.substr');
2+
var entryUnbind = require('../../internals/entry-unbind');
3+
4+
module.exports = entryUnbind('String', 'substr');

packages/core-js/es/string/virtual/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ require('../../../modules/es.string.replace-all');
1111
require('../../../modules/es.string.search');
1212
require('../../../modules/es.string.split');
1313
require('../../../modules/es.string.starts-with');
14+
require('../../../modules/es.string.substr');
1415
require('../../../modules/es.string.trim');
1516
require('../../../modules/es.string.trim-start');
1617
require('../../../modules/es.string.trim-end');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
require('../../../modules/es.string.substr');
2+
var entryVirtual = require('../../../internals/entry-virtual');
3+
4+
module.exports = entryVirtual('String').substr;

packages/core-js/es/unescape.js

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
require('../modules/es.unescape');
2+
var global = require('../internals/global');
3+
4+
module.exports = global.unescape;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var parent = require('../../stable/date/get-year');
2+
3+
module.exports = parent;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var parent = require('../../stable/date/set-year');
2+
3+
module.exports = parent;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var parent = require('../../stable/date/to-gmt-string');
2+
3+
module.exports = parent;

packages/core-js/features/escape.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var parent = require('../stable/escape');
2+
3+
module.exports = parent;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var parent = require('../../stable/string/substr');
2+
3+
module.exports = parent;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var parent = require('../../../stable/string/virtual/substr');
2+
3+
module.exports = parent;

packages/core-js/features/unescape.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var parent = require('../stable/unescape');
2+
3+
module.exports = parent;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
'use strict';
2+
var $ = require('../internals/export');
3+
4+
var getFullYear = Date.prototype.getFullYear;
5+
6+
// `Date.prototype.getYear` method
7+
// https://tc39.es/ecma262/#sec-date.prototype.getyear
8+
$({ target: 'Date', proto: true }, {
9+
getYear: function getYear() {
10+
return getFullYear.call(this) - 1900;
11+
}
12+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
'use strict';
2+
var $ = require('../internals/export');
3+
var toInteger = require('../internals/to-integer');
4+
5+
var getTime = Date.prototype.getTime;
6+
var setFullYear = Date.prototype.setFullYear;
7+
8+
// `Date.prototype.setYear` method
9+
// https://tc39.es/ecma262/#sec-date.prototype.setyear
10+
$({ target: 'Date', proto: true }, {
11+
setYear: function setYear(year) {
12+
// validate
13+
getTime.call(this);
14+
var yi = toInteger(year);
15+
var yyyy = 0 <= yi && yi <= 99 ? yi + 1900 : yi;
16+
return setFullYear.call(this, yyyy);
17+
}
18+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
var $ = require('../internals/export');
2+
3+
// `Date.prototype.toGMTString` method
4+
// https://tc39.es/ecma262/#sec-date.prototype.togmtstring
5+
$({ target: 'Date', proto: true }, {
6+
toGMTString: Date.prototype.toUTCString
7+
});

packages/core-js/modules/es.escape.js

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
'use strict';
2+
var $ = require('../internals/export');
3+
4+
var raw = /[\w*+\-./@]/;
5+
6+
var hex = function (code, length) {
7+
var result = code.toString(16);
8+
while (result.length < length) result = '0' + result;
9+
return result;
10+
};
11+
12+
// `escape` method
13+
// https://tc39.es/ecma262/#sec-escape-string
14+
$({ global: true }, {
15+
escape: function escape(string) {
16+
var str = String(string);
17+
var result = '';
18+
var length = str.length;
19+
var index = 0;
20+
var chr, code;
21+
while (index < length) {
22+
chr = str.charAt(index++);
23+
if (raw.test(chr)) {
24+
result += chr;
25+
} else {
26+
code = chr.charCodeAt(0);
27+
if (code < 256) {
28+
result += '%' + hex(code, 2);
29+
} else {
30+
result += '%u' + hex(code, 4).toUpperCase();
31+
}
32+
}
33+
} return result;
34+
}
35+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
'use strict';
2+
var $ = require('../internals/export');
3+
var requireObjectCoercible = require('../internals/require-object-coercible');
4+
var toInteger = require('../internals/to-integer');
5+
6+
var slice = ''.slice;
7+
var max = Math.max;
8+
var min = Math.min;
9+
10+
// `String.prototype.substr` method
11+
// https://tc39.es/ecma262/#sec-string.prototype.substr
12+
$({ target: 'String', proto: true }, {
13+
substr: function substr(start, length) {
14+
var that = String(requireObjectCoercible(this));
15+
var size = that.length;
16+
var intStart = toInteger(start);
17+
var intLength, intEnd;
18+
if (intStart === Infinity) intStart = 0;
19+
if (intStart < 0) intStart = max(size + intStart, 0);
20+
intLength = length === undefined ? size : toInteger(length);
21+
if (intLength <= 0 || intLength === Infinity) return '';
22+
intEnd = min(intStart + intLength, size);
23+
return intStart >= intEnd ? '' : slice.call(that, intStart, intEnd);
24+
}
25+
});
+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
'use strict';
2+
var $ = require('../internals/export');
3+
4+
var fromCharCode = String.fromCharCode;
5+
var hex2 = /^[\da-f]{2}$/i;
6+
var hex4 = /^[\da-f]{4}$/i;
7+
8+
// `unescape` method
9+
// https://tc39.es/ecma262/#sec-unescape-string
10+
$({ global: true }, {
11+
unescape: function unescape(string) {
12+
var str = String(string);
13+
var result = '';
14+
var length = str.length;
15+
var index = 0;
16+
var chr, slice;
17+
while (index < length) {
18+
chr = str.charAt(index++);
19+
if (chr === '%') {
20+
if (str.charAt(index) === 'u') {
21+
slice = str.slice(index + 1, index + 5);
22+
if (hex4.test(slice)) {
23+
result += fromCharCode(parseInt(slice, 16));
24+
index += 5;
25+
continue;
26+
}
27+
} else {
28+
slice = str.slice(index, index + 2);
29+
if (hex2.test(slice)) {
30+
result += fromCharCode(parseInt(slice, 16));
31+
index += 2;
32+
continue;
33+
}
34+
}
35+
}
36+
result += chr;
37+
} return result;
38+
}
39+
});
+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var parent = require('../../es/date/get-year');
2+
3+
module.exports = parent;
+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var parent = require('../../es/date/set-year');
2+
3+
module.exports = parent;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var parent = require('../../es/date/to-gmt-string');
2+
3+
module.exports = parent;

packages/core-js/stable/escape.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var parent = require('../es/escape');
2+
3+
module.exports = parent;
+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var parent = require('../../es/string/substr');
2+
3+
module.exports = parent;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var parent = require('../../../es/string/virtual/substr');
2+
3+
module.exports = parent;

packages/core-js/stable/unescape.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var parent = require('../es/unescape');
2+
3+
module.exports = parent;

tests/commonjs.js

+12
Original file line numberDiff line numberDiff line change
@@ -1660,6 +1660,18 @@ for (PATH of ['core-js-pure', 'core-js']) {
16601660
ok(typeof instanceValues([]) === 'function');
16611661
ok(instanceValues([]).call([1, 2, 3]).next().value === 1);
16621662

1663+
for (const key of ['es', 'stable', 'features']) {
1664+
const date = new Date();
1665+
ok(load(`${ key }/date/get-year`)(date) === date.getFullYear() - 1900);
1666+
load(`${ key }/date/set-year`)(date, 1);
1667+
ok(date.getFullYear() === 1901);
1668+
ok(load(`${ key }/date/to-gmt-string`)(date) === date.toUTCString());
1669+
ok(load(`${ key }/string/substr`)('12345', 1, 3) === '234');
1670+
ok(load(`${ key }/string/virtual/substr`).call('12345', 1, 3) === '234');
1671+
ok(load(`${ key }/escape`)('!q2ф') === '%21q2%u0444');
1672+
ok(load(`${ key }/unescape`)('%21q2%u0444') === '!q2ф');
1673+
}
1674+
16631675
for (const key in compat) load(`modules/${ key }`);
16641676
}
16651677

0 commit comments

Comments
 (0)