Skip to content

Commit

Permalink
add .fromHex / .toHex methods
Browse files Browse the repository at this point in the history
  • Loading branch information
zloirock committed Dec 4, 2023
1 parent a0572be commit bc82b7e
Show file tree
Hide file tree
Showing 10 changed files with 87 additions and 0 deletions.
4 changes: 4 additions & 0 deletions packages/core-js-compat/src/data.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -2343,6 +2343,10 @@ export const data = {
},
// TODO: Remove from `core-js@4`
'esnext.typed-array.with': null,
'esnext.uint8-array.from-hex': {
},
'esnext.uint8-array.to-hex': {
},
'esnext.weak-map.delete-all': {
},
'esnext.weak-map.from': {
Expand Down
2 changes: 2 additions & 0 deletions packages/core-js-compat/src/modules-by-versions.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -227,5 +227,7 @@ export default {
'es.map.group-by',
'es.object.group-by',
'es.promise.with-resolvers',
'esnext.uint8-array.from-hex',
'esnext.uint8-array.to-hex',
],
};
7 changes: 7 additions & 0 deletions packages/core-js/internals/a-string.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
'use strict';
var $TypeError = TypeError;

module.exports = function (argument) {
if (typeof argument == 'string') return argument;
throw new $TypeError('Argument is not a string');
};
11 changes: 11 additions & 0 deletions packages/core-js/internals/an-uint8-array.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
'use strict';
var classof = require('../internals/classof-raw');

var $TypeError = TypeError;

// Perform ? RequireInternalSlot(argument, [[TypedArrayName]])
// If argument.[[TypedArrayName]] is not "Uint8Array", throw a TypeError exception
module.exports = function (argument) {
if (classof(argument) === 'Uint8Array') return argument;
throw new $TypeError('Argument is not an Uint8Array');
};
29 changes: 29 additions & 0 deletions packages/core-js/modules/esnext.uint8-array.from-hex.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
'use strict';
var $ = require('../internals/export');
var global = require('../internals/global');
var uncurryThis = require('../internals/function-uncurry-this');
var aString = require('../internals/a-string');

var Uint8Array = global.Uint8Array;
var SyntaxError = global.SyntaxError;
var parseInt = global.parseInt;
var NOT_HEX = /[^\da-z]/i;
var exec = uncurryThis(NOT_HEX.exec);
var stringSlice = uncurryThis(''.slice);

// `Uint8Array.fromHex` method
// https://github.com/tc39/proposal-arraybuffer-base64
if (Uint8Array) $({ target: 'Uint8Array', stat: true }, {
fromHex: function fromHex(string) {
aString(string);
var stringLength = string.length;
if (stringLength % 2) throw new SyntaxError('String should have an even number of characters');
if (exec(NOT_HEX, string)) throw new SyntaxError('String should only contain hex characters');
var resultLength = stringLength / 2;
var result = new Uint8Array(resultLength);
for (var i = 0; i < stringLength; i += 2) {
result[i / 2] = parseInt(stringSlice(string, i, i + 2), 16);
}
return result;
}
});
22 changes: 22 additions & 0 deletions packages/core-js/modules/esnext.uint8-array.to-hex.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
'use strict';
var $ = require('../internals/export');
var global = require('../internals/global');
var uncurryThis = require('../internals/function-uncurry-this');
var anUint8Array = require('../internals/an-uint8-array');

var Uint8Array = global.Uint8Array;
var numberToString = uncurryThis(1.0.toString);

// `Uint8Array..prototype.toHex` method
// https://github.com/tc39/proposal-arraybuffer-base64
if (Uint8Array) $({ target: 'Uint8Array', proto: true }, {
toHex: function toHex() {
anUint8Array(this);
var result = '';
for (var i = 0, length = this.length; i < length; i++) {
var hex = numberToString(this[i], 16);
result += hex.length === 1 ? '0' + hex : hex;
}
return result;
}
});
4 changes: 4 additions & 0 deletions packages/core-js/proposals/array-buffer-base64.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
'use strict';
// https://github.com/tc39/proposal-arraybuffer-base64
require('../modules/esnext.uint8-array.from-hex');
require('../modules/esnext.uint8-array.to-hex');
1 change: 1 addition & 0 deletions packages/core-js/stage/3.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use strict';
var parent = require('./4');

require('../proposals/array-buffer-base64');
require('../proposals/array-buffer-transfer');
require('../proposals/array-from-async-stage-2');
require('../proposals/decorator-metadata-v2');
Expand Down
6 changes: 6 additions & 0 deletions tests/compat/tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -1830,6 +1830,12 @@ GLOBAL.tests = {
'esnext.typed-array.unique-by': function () {
return Int8Array.prototype.uniqueBy;
},
'esnext.uint8-array.from-hex': function () {
return Uint8Array.fromHex;
},
'esnext.uint8-array.to-hex': function () {
return Uint8Array.prototype.toHex;
},
'esnext.weak-map.delete-all': function () {
return WeakMap.prototype.deleteAll;
},
Expand Down
1 change: 1 addition & 0 deletions tests/entries/unit.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -908,6 +908,7 @@ for (PATH of ['core-js-pure', 'core-js']) {
load('proposals/array-is-template-object');
load('proposals/array-last');
load('proposals/array-unique');
load('proposals/array-buffer-base64');
load('proposals/array-buffer-transfer');
load('proposals/async-explicit-resource-management');
load('proposals/async-iteration');
Expand Down

0 comments on commit bc82b7e

Please sign in to comment.