mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-22 17:23:00 +02:00
Updated documentation for new Netscript. Added new polyfills for new JS interpreter
This commit is contained in:
+139
-42
@@ -910,6 +910,66 @@ Interpreter.prototype.initArray = function(scope) {
|
||||
"}",
|
||||
"});",
|
||||
|
||||
// Polyfill copied from:
|
||||
// https://tc39.github.io/ecma262/#sec-array.prototype.find
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
|
||||
"if (!Array.prototype.find) {",
|
||||
"Object.defineProperty(Array.prototype, 'find', {",
|
||||
"value: function(predicate) {",
|
||||
"if (this == null) {",
|
||||
"throw new TypeError('\"this\" is null or not defined');",
|
||||
"}",
|
||||
"var o = Object(this);",
|
||||
"var len = o.length >>> 0;",
|
||||
"if (typeof predicate !== 'function') {",
|
||||
"throw new TypeError('predicate must be a function');",
|
||||
"}",
|
||||
"var thisArg = arguments[1];",
|
||||
"var k = 0;",
|
||||
"while (k < len) {",
|
||||
"var kValue = o[k];",
|
||||
"if (predicate.call(thisArg, kValue, k, o)) {",
|
||||
"return kValue;",
|
||||
"}",
|
||||
"k++;",
|
||||
"}",
|
||||
"return undefined;",
|
||||
"},",
|
||||
"configurable: true,",
|
||||
"writable: true",
|
||||
"});",
|
||||
"}",
|
||||
|
||||
// Poly fill copied from:
|
||||
// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex
|
||||
"if (!Array.prototype.findIndex) {",
|
||||
"Object.defineProperty(Array.prototype, 'findIndex', {",
|
||||
"value: function(predicate) {",
|
||||
"if (this == null) {",
|
||||
"throw new TypeError('\"this\" is null or not defined');",
|
||||
"}",
|
||||
"var o = Object(this);",
|
||||
"var len = o.length >>> 0;",
|
||||
"if (typeof predicate !== 'function') {",
|
||||
"throw new TypeError('predicate must be a function');",
|
||||
"}",
|
||||
"var thisArg = arguments[1];",
|
||||
"var k = 0;",
|
||||
"while (k < len) {",
|
||||
"var kValue = o[k];",
|
||||
"if (predicate.call(thisArg, kValue, k, o)) {",
|
||||
"return k;",
|
||||
"}",
|
||||
"k++;",
|
||||
"}",
|
||||
"return -1;",
|
||||
"},",
|
||||
"configurable: true,",
|
||||
"writable: true",
|
||||
"});",
|
||||
"}",
|
||||
|
||||
// Polyfill copied from:
|
||||
// developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
|
||||
"Object.defineProperty(Array.prototype, 'forEach',",
|
||||
@@ -928,6 +988,48 @@ Interpreter.prototype.initArray = function(scope) {
|
||||
"}",
|
||||
"});",
|
||||
|
||||
// Polyfill copied from:
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes#Polyfill
|
||||
"Object.defineProperty(Array.prototype, 'includes', {",
|
||||
"value: function(searchElement, fromIndex) {",
|
||||
"if (this == null) {",
|
||||
"throw new TypeError('\"this\" is null or not defined');",
|
||||
"}",
|
||||
"// 1. Let O be ? ToObject(this value).",
|
||||
"var o = Object(this);",
|
||||
"// 2. Let len be ? ToLength(? Get(O, \"length\")).",
|
||||
"var len = o.length >>> 0;",
|
||||
"// 3. If len is 0, return false.",
|
||||
"if (len === 0) {",
|
||||
"return false;",
|
||||
"}",
|
||||
"// 4. Let n be ? ToInteger(fromIndex).",
|
||||
"// (If fromIndex is undefined, this step produces the value 0.)",
|
||||
"var n = fromIndex | 0;",
|
||||
"// 5. If n ≥ 0, then",
|
||||
"// a. Let k be n.",
|
||||
"// 6. Else n < 0,",
|
||||
"// a. Let k be len + n.",
|
||||
"// b. If k < 0, let k be 0.",
|
||||
"var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);",
|
||||
"function sameValueZero(x, y) {",
|
||||
"return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));",
|
||||
"}",
|
||||
"// 7. Repeat, while k < len",
|
||||
"while (k < len) {",
|
||||
"// a. Let elementK be the result of ? Get(O, ! ToString(k)).",
|
||||
"// b. If SameValueZero(searchElement, elementK) is true, return true.",
|
||||
"if (sameValueZero(o[k], searchElement)) {",
|
||||
"return true;",
|
||||
"}",
|
||||
"// c. Increase k by 1. ",
|
||||
"k++;",
|
||||
"}",
|
||||
"// 8. Return false",
|
||||
"return false;",
|
||||
"}",
|
||||
"});",
|
||||
|
||||
// Polyfill copied from:
|
||||
// developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map
|
||||
"Object.defineProperty(Array.prototype, 'map',",
|
||||
@@ -1012,48 +1114,6 @@ Interpreter.prototype.initArray = function(scope) {
|
||||
"}",
|
||||
"});",
|
||||
|
||||
// Polyfill copied from:
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes#Polyfill
|
||||
"Object.defineProperty(Array.prototype, 'includes', {",
|
||||
"value: function(searchElement, fromIndex) {",
|
||||
"if (this == null) {",
|
||||
"throw new TypeError('\"this\" is null or not defined');",
|
||||
"}",
|
||||
"// 1. Let O be ? ToObject(this value).",
|
||||
"var o = Object(this);",
|
||||
"// 2. Let len be ? ToLength(? Get(O, \"length\")).",
|
||||
"var len = o.length >>> 0;",
|
||||
"// 3. If len is 0, return false.",
|
||||
"if (len === 0) {",
|
||||
"return false;",
|
||||
"}",
|
||||
"// 4. Let n be ? ToInteger(fromIndex).",
|
||||
"// (If fromIndex is undefined, this step produces the value 0.)",
|
||||
"var n = fromIndex | 0;",
|
||||
"// 5. If n ≥ 0, then",
|
||||
"// a. Let k be n.",
|
||||
"// 6. Else n < 0,",
|
||||
"// a. Let k be len + n.",
|
||||
"// b. If k < 0, let k be 0.",
|
||||
"var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);",
|
||||
"function sameValueZero(x, y) {",
|
||||
"return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));",
|
||||
"}",
|
||||
"// 7. Repeat, while k < len",
|
||||
"while (k < len) {",
|
||||
"// a. Let elementK be the result of ? Get(O, ! ToString(k)).",
|
||||
"// b. If SameValueZero(searchElement, elementK) is true, return true.",
|
||||
"if (sameValueZero(o[k], searchElement)) {",
|
||||
"return true;",
|
||||
"}",
|
||||
"// c. Increase k by 1. ",
|
||||
"k++;",
|
||||
"}",
|
||||
"// 8. Return false",
|
||||
"return false;",
|
||||
"}",
|
||||
"});",
|
||||
|
||||
"(function() {",
|
||||
"var sort_ = Array.prototype.sort;",
|
||||
"Array.prototype.sort = function(opt_comp) {",
|
||||
@@ -1203,6 +1263,43 @@ Interpreter.prototype.initString = function(scope) {
|
||||
"return str;",
|
||||
"};",
|
||||
"})();",
|
||||
|
||||
// Polyfill copied from:
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
|
||||
"if (!String.prototype.endsWith) {",
|
||||
"String.prototype.endsWith = function(search, this_len) {",
|
||||
"if (this_len === undefined || this_len > this.length) {",
|
||||
"this_len = this.length;",
|
||||
"}",
|
||||
"return this.substring(this_len - search.length, this_len) === search;",
|
||||
"};",
|
||||
"}",
|
||||
|
||||
//Polyfill copied from:
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
|
||||
"if (!String.prototype.includes) {",
|
||||
"String.prototype.includes = function(search, start) {",
|
||||
"'use strict';",
|
||||
"if (typeof start !== 'number') {",
|
||||
"start = 0;",
|
||||
"}",
|
||||
" ",
|
||||
"if (start + search.length > this.length) {",
|
||||
"return false;",
|
||||
"} else {",
|
||||
"return this.indexOf(search, start) !== -1;",
|
||||
"}",
|
||||
"};",
|
||||
"}",
|
||||
|
||||
// Polyfill copied from:
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
|
||||
"if (!String.prototype.startsWith) {",
|
||||
"String.prototype.startsWith = function(search, pos) {",
|
||||
"return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;",
|
||||
"};",
|
||||
"}",
|
||||
|
||||
"");
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user