init source

This commit is contained in:
Le Viet
2022-03-07 22:07:57 +07:00
parent e4376f3777
commit 8aba590a8d
11240 changed files with 1012977 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var $SyntaxError = GetIntrinsic('%SyntaxError%');
var has = require('has');
var predicates = {
// https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
'Property Descriptor': function isPropertyDescriptor(ES, Desc) {
if (ES.Type(Desc) !== 'Object') {
return false;
}
var allowed = {
'[[Configurable]]': true,
'[[Enumerable]]': true,
'[[Get]]': true,
'[[Set]]': true,
'[[Value]]': true,
'[[Writable]]': true
};
for (var key in Desc) { // eslint-disable-line
if (has(Desc, key) && !allowed[key]) {
return false;
}
}
var isData = has(Desc, '[[Value]]');
var IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');
if (isData && IsAccessor) {
throw new $TypeError('Property Descriptors may not be both accessor and data descriptors');
}
return true;
}
};
module.exports = function assertRecord(ES, recordType, argumentName, value) {
var predicate = predicates[recordType];
if (typeof predicate !== 'function') {
throw new $SyntaxError('unknown record type: ' + recordType);
}
if (!predicate(ES, value)) {
throw new $TypeError(argumentName + ' must be a ' + recordType);
}
};
+21
View File
@@ -0,0 +1,21 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var has = require('has');
var $assign = GetIntrinsic('%Object%').assign;
module.exports = function assign(target, source) {
if ($assign) {
return $assign(target, source);
}
// eslint-disable-next-line no-restricted-syntax
for (var key in source) {
if (has(source, key)) {
target[key] = source[key];
}
}
return target;
};
+17
View File
@@ -0,0 +1,17 @@
'use strict';
var bind = require('function-bind');
var GetIntrinsic = require('../GetIntrinsic');
var $Function = GetIntrinsic('%Function%');
var $apply = $Function.apply;
var $call = $Function.call;
module.exports = function callBind() {
return bind.apply($call, arguments);
};
module.exports.apply = function applyBind() {
return bind.apply($apply, arguments);
};
+15
View File
@@ -0,0 +1,15 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var callBind = require('./callBind');
var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));
module.exports = function callBoundIntrinsic(name, allowMissing) {
var intrinsic = GetIntrinsic(name, !!allowMissing);
if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.')) {
return callBind(intrinsic);
}
return intrinsic;
};
+10
View File
@@ -0,0 +1,10 @@
'use strict';
module.exports = function every(array, predicate) {
for (var i = 0; i < array.length; i += 1) {
if (!predicate(array[i], i, array)) {
return false;
}
}
return true;
};
+7
View File
@@ -0,0 +1,7 @@
'use strict';
module.exports = function forEach(array, callback) {
for (var i = 0; i < array.length; i += 1) {
callback(array[i], i, array); // eslint-disable-line callback-return
}
};
+5
View File
@@ -0,0 +1,5 @@
'use strict';
var $isNaN = Number.isNaN || function (a) { return a !== a; };
module.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };
+5
View File
@@ -0,0 +1,5 @@
'use strict';
module.exports = Number.isNaN || function isNaN(a) {
return a !== a;
};
+13
View File
@@ -0,0 +1,13 @@
'use strict';
var $strSlice = require('../helpers/callBound')('String.prototype.slice');
module.exports = function isPrefixOf(prefix, string) {
if (prefix === string) {
return true;
}
if (prefix.length > string.length) {
return false;
}
return $strSlice(string, 0, prefix.length) === prefix;
};
+5
View File
@@ -0,0 +1,5 @@
'use strict';
module.exports = function isPrimitive(value) {
return value === null || (typeof value !== 'function' && typeof value !== 'object');
};
+31
View File
@@ -0,0 +1,31 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var has = require('has');
var $TypeError = GetIntrinsic('%TypeError%');
module.exports = function IsPropertyDescriptor(ES, Desc) {
if (ES.Type(Desc) !== 'Object') {
return false;
}
var allowed = {
'[[Configurable]]': true,
'[[Enumerable]]': true,
'[[Get]]': true,
'[[Set]]': true,
'[[Value]]': true,
'[[Writable]]': true
};
for (var key in Desc) { // eslint-disable-line
if (has(Desc, key) && !allowed[key]) {
return false;
}
}
if (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {
throw new $TypeError('Property Descriptors may not be both accessor and data descriptors');
}
return true;
};
+20
View File
@@ -0,0 +1,20 @@
'use strict';
var every = require('./every');
module.exports = function isSamePropertyDescriptor(ES, D1, D2) {
var fields = [
'[[Configurable]]',
'[[Enumerable]]',
'[[Get]]',
'[[Set]]',
'[[Value]]',
'[[Writable]]'
];
return every(fields, function (field) {
if ((field in D1) !== (field in D2)) {
return false;
}
return ES.SameValue(D1[field], D2[field]);
});
};
+8
View File
@@ -0,0 +1,8 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var $Math = GetIntrinsic('%Math%');
var $Number = GetIntrinsic('%Number%');
module.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;
+6
View File
@@ -0,0 +1,6 @@
'use strict';
module.exports = function mod(number, modulo) {
var remain = number % modulo;
return Math.floor(remain >= 0 ? remain : remain + modulo);
};
+11
View File
@@ -0,0 +1,11 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var $test = GetIntrinsic('RegExp.prototype.test');
var callBind = require('./callBind');
module.exports = function regexTester(regex) {
return callBind($test, regex);
};
+5
View File
@@ -0,0 +1,5 @@
'use strict';
module.exports = function sign(number) {
return number >= 0 ? 1 : -1;
};