| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 6011bfd commit 1f27214
17 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -7,105 +7,80 @@ rules: | |||
| 7 | 7 | no-mixed-operators: | |
| 8 | 8 | - error | |
| 9 | 9 | - groups: [[ "&&", "||" ]] | |
| 10 | - no-restricted-globals: | ||
| 10 | + no-restricted-syntax: | ||
| 11 | + # Config copied from .eslintrc.js | ||
| 12 | + - error | ||
| 13 | + - selector: "CallExpression[callee.object.name='assert']:not([callee.property.name='ok']):not([callee.property.name='fail']):not([callee.property.name='ifError'])" | ||
| 14 | + message: "Please only use simple assertions in ./lib" | ||
| 15 | + - selector: "CallExpression[callee.name='setTimeout'][arguments.length<2]" | ||
| 16 | + message: "setTimeout() must be invoked with at least two arguments." | ||
| 17 | + - selector: "CallExpression[callee.name='setInterval'][arguments.length<2]" | ||
| 18 | + message: "setInterval() must be invoked with at least 2 arguments." | ||
| 19 | + - selector: "ThrowStatement > CallExpression[callee.name=/Error$/]" | ||
| 20 | + message: "Use new keyword when throwing an Error." | ||
| 21 | + # Config specific to lib | ||
| 22 | + - selector: "NewExpression[callee.name=/Error$/]:not([callee.name=/^(AssertionError|NghttpError)$/])" | ||
| 23 | + message: "Use an error exported by the internal/errors module." | ||
| 24 | + - selector: "CallExpression[callee.object.name='Error'][callee.property.name='captureStackTrace']" | ||
| 25 | + message: "Please use `require('internal/errors').hideStackFrames()` instead." | ||
| 26 | + - selector: "AssignmentExpression:matches([left.name='prepareStackTrace'], [left.property.name='prepareStackTrace'])" | ||
| 27 | + message: "Use 'overrideStackTrace' from 'lib/internal/errors.js' instead of 'Error.prepareStackTrace'." | ||
| 28 | + # Custom rules in tools/eslint-rules | ||
| 29 | + node-core/lowercase-name-for-primitive: error | ||
| 30 | + node-core/non-ascii-character: error | ||
| 31 | + node-core/prefer-primordials: | ||
| 11 | 32 | - error | |
| 12 | 33 | - name: Array | |
| 13 | - message: "Use `const { Array } = primordials;` instead of the global." | ||
| 14 | 34 | - name: ArrayBuffer | |
| 15 | - message: "Use `const { ArrayBuffer } = primordials;` instead of the global." | ||
| 16 | 35 | - name: BigInt | |
| 17 | - message: "Use `const { BigInt } = primordials;` instead of the global." | ||
| 18 | 36 | - name: BigInt64Array | |
| 19 | - message: "Use `const { BigInt64Array } = primordials;` instead of the global." | ||
| 20 | 37 | - name: BigUint64Array | |
| 21 | - message: "Use `const { BigUint64Array } = primordials;` instead of the global." | ||
| 22 | 38 | - name: Boolean | |
| 23 | - message: "Use `const { Boolean } = primordials;` instead of the global." | ||
| 39 | + - name: DataView | ||
| 40 | + - name: Date | ||
| 24 | 41 | - name: Error | |
| 25 | - message: "Use `const { Error } = primordials;` instead of the global." | ||
| 42 | + ignore: | ||
| 43 | + - stackTraceLimit | ||
| 44 | + - captureStackTrace | ||
| 45 | + - prepareStackTrace | ||
| 46 | + - isPrototypeOf | ||
| 26 | 47 | - name: EvalError | |
| 27 | - message: "Use `const { EvalError } = primordials;` instead of the global." | ||
| 28 | 48 | - name: Float32Array | |
| 29 | - message: "Use `const { Float32Array } = primordials;` instead of the global." | ||
| 30 | 49 | - name: Float64Array | |
| 31 | - message: "Use `const { Float64Array } = primordials;` instead of the global." | ||
| 50 | + - name: Function | ||
| 32 | 51 | - name: Int16Array | |
| 33 | - message: "Use `const { Int16Array } = primordials;` instead of the global." | ||
| 34 | 52 | - name: Int32Array | |
| 35 | - message: "Use `const { Int32Array } = primordials;` instead of the global." | ||
| 36 | 53 | - name: Int8Array | |
| 37 | - message: "Use `const { Int8Array } = primordials;` instead of the global." | ||
| 54 | + - name: isFinite | ||
| 55 | + into: Number | ||
| 56 | + - name: isNaN | ||
| 57 | + into: Number | ||
| 38 | 58 | - name: JSON | |
| 39 | - message: "Use `const { JSON } = primordials;` instead of the global." | ||
| 40 | 59 | - name: Map | |
| 41 | - message: "Use `const { Map } = primordials;` instead of the global." | ||
| 42 | 60 | - name: Math | |
| 43 | - message: "Use `const { Math } = primordials;` instead of the global." | ||
| 44 | 61 | - name: Number | |
| 45 | - message: "Use `const { Number } = primordials;` instead of the global." | ||
| 46 | 62 | - name: Object | |
| 47 | - message: "Use `const { Object } = primordials;` instead of the global." | ||
| 63 | + - name: parseFloat | ||
| 64 | + into: Number | ||
| 65 | + - name: parseInt | ||
| 66 | + into: Number | ||
| 48 | 67 | - name: Promise | |
| 49 | - message: "Use `const { Promise } = primordials;` instead of the global." | ||
| 50 | 68 | - name: RangeError | |
| 51 | - message: "Use `const { RangeError } = primordials;` instead of the global." | ||
| 52 | 69 | - name: ReferenceError | |
| 53 | - message: "Use `const { ReferenceError } = primordials;` instead of the global." | ||
| 54 | 70 | - name: Reflect | |
| 55 | - message: "Use `const { Reflect } = primordials;` instead of the global." | ||
| 56 | 71 | - name: RegExp | |
| 57 | - message: "Use `const { RegExp } = primordials;` instead of the global." | ||
| 58 | 72 | - name: Set | |
| 59 | - message: "Use `const { Set } = primordials;` instead of the global." | ||
| 60 | 73 | - name: String | |
| 61 | - message: "Use `const { String } = primordials;` instead of the global." | ||
| 62 | 74 | - name: Symbol | |
| 63 | - message: "Use `const { Symbol } = primordials;` instead of the global." | ||
| 64 | 75 | - name: SyntaxError | |
| 65 | - message: "Use `const { SyntaxError } = primordials;` instead of the global." | ||
| 66 | 76 | - name: TypeError | |
| 67 | - message: "Use `const { TypeError } = primordials;` instead of the global." | ||
| 68 | - - name: URIError | ||
| 69 | - message: "Use `const { URIError } = primordials;` instead of the global." | ||
| 70 | 77 | - name: Uint16Array | |
| 71 | - message: "Use `const { Uint16Array } = primordials;` instead of the global." | ||
| 72 | 78 | - name: Uint32Array | |
| 73 | - message: "Use `const { Uint32Array } = primordials;` instead of the global." | ||
| 74 | 79 | - name: Uint8Array | |
| 75 | - message: "Use `const { Uint8Array } = primordials;` instead of the global." | ||
| 76 | 80 | - name: Uint8ClampedArray | |
| 77 | - message: "Use `const { Uint8ClampedArray } = primordials;` instead of the global." | ||
| 81 | + - name: URIError | ||
| 78 | 82 | - name: WeakMap | |
| 79 | - message: "Use `const { WeakMap } = primordials;` instead of the global." | ||
| 80 | 83 | - name: WeakSet | |
| 81 | - message: "Use `const { WeakSet } = primordials;` instead of the global." | ||
| 82 | - - name: parseFloat | ||
| 83 | - message: "Use `const { NumberParseFloat } = primordials;` instead of the global." | ||
| 84 | - - name: parseInt | ||
| 85 | - message: "Use `const { NumberParseInt } = primordials;` instead of the global." | ||
| 86 | - no-restricted-syntax: | ||
| 87 | - # Config copied from .eslintrc.js | ||
| 88 | - - error | ||
| 89 | - - selector: "CallExpression[callee.object.name='assert']:not([callee.property.name='ok']):not([callee.property.name='fail']):not([callee.property.name='ifError'])" | ||
| 90 | - message: "Please only use simple assertions in ./lib" | ||
| 91 | - - selector: "CallExpression[callee.name='setTimeout'][arguments.length<2]" | ||
| 92 | - message: "setTimeout() must be invoked with at least two arguments." | ||
| 93 | - - selector: "CallExpression[callee.name='setInterval'][arguments.length<2]" | ||
| 94 | - message: "setInterval() must be invoked with at least 2 arguments." | ||
| 95 | - - selector: "ThrowStatement > CallExpression[callee.name=/Error$/]" | ||
| 96 | - message: "Use new keyword when throwing an Error." | ||
| 97 | - # Config specific to lib | ||
| 98 | - - selector: "NewExpression[callee.name=/Error$/]:not([callee.name=/^(AssertionError|NghttpError)$/])" | ||
| 99 | - message: "Use an error exported by the internal/errors module." | ||
| 100 | - - selector: "CallExpression[callee.object.name='Error'][callee.property.name='captureStackTrace']" | ||
| 101 | - message: "Please use `require('internal/errors').hideStackFrames()` instead." | ||
| 102 | - - selector: "AssignmentExpression:matches([left.name='prepareStackTrace'], [left.property.name='prepareStackTrace'])" | ||
| 103 | - message: "Use 'overrideStackTrace' from 'lib/internal/errors.js' instead of 'Error.prepareStackTrace'." | ||
| 104 | - - selector: "CallExpression[callee.name='isNaN']" | ||
| 105 | - message: "Use NumberIsNaN() primordial instead of the global isNaN() function." | ||
| 106 | - # Custom rules in tools/eslint-rules | ||
| 107 | - node-core/lowercase-name-for-primitive: error | ||
| 108 | - node-core/non-ascii-character: error | ||
| 109 | 84 | globals: | |
| 110 | 85 | Intl: false | |
| 111 | 86 | # Parameters passed to internal modules | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -36,7 +36,7 @@ const kEvents = Symbol('kEvents'); | |||
| 36 | 36 | const kStop = Symbol('kStop'); | |
| 37 | 37 | const kTarget = Symbol('kTarget'); | |
| 38 | 38 | ||
| 39 | - const kHybridDispatch = Symbol.for('nodejs.internal.kHybridDispatch'); | ||
| 39 | + const kHybridDispatch = SymbolFor('nodejs.internal.kHybridDispatch'); | ||
| 40 | 40 | const kCreateEvent = Symbol('kCreateEvent'); | |
| 41 | 41 | const kNewListener = Symbol('kNewListener'); | |
| 42 | 42 | const kRemoveListener = Symbol('kRemoveListener'); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -20,21 +20,61 @@ | |||
| 20 | 20 | // https://github.com/tc39/proposal-ses/blob/e5271cc42a257a05dcae2fd94713ed2f46c08620/shim/src/freeze.js | |
| 21 | 21 | ||
| 22 | 22 | /* global WebAssembly, SharedArrayBuffer, console */ | |
| 23 | - /* eslint-disable no-restricted-globals */ | ||
| 24 | 23 | 'use strict'; | |
| 25 | 24 | ||
| 25 | + const { | ||
| 26 | + Array, | ||
| 27 | + ArrayBuffer, | ||
| 28 | + ArrayPrototypeForEach, | ||
| 29 | + BigInt, | ||
| 30 | + BigInt64Array, | ||
| 31 | + BigUint64Array, | ||
| 32 | + Boolean, | ||
| 33 | + DataView, | ||
| 34 | + Date, | ||
| 35 | + Error, | ||
| 36 | + EvalError, | ||
| 37 | + Float32Array, | ||
| 38 | + Float64Array, | ||
| 39 | + Function, | ||
| 40 | + Int16Array, | ||
| 41 | + Int32Array, | ||
| 42 | + Int8Array, | ||
| 43 | + JSON, | ||
| 44 | + Map, | ||
| 45 | + Math, | ||
| 46 | + Number, | ||
| 47 | + Object, | ||
| 48 | + ObjectDefineProperty, | ||
| 49 | + ObjectFreeze, | ||
| 50 | + ObjectGetOwnPropertyDescriptor, | ||
| 51 | + ObjectGetOwnPropertyDescriptors, | ||
| 52 | + ObjectGetOwnPropertyNames, | ||
| 53 | + ObjectGetOwnPropertySymbols, | ||
| 54 | + ObjectGetPrototypeOf, | ||
| 55 | + ObjectPrototypeHasOwnProperty, | ||
| 56 | + Promise, | ||
| 57 | + RangeError, | ||
| 58 | + ReferenceError, | ||
| 59 | + Reflect, | ||
| 60 | + ReflectOwnKeys, | ||
| 61 | + RegExp, | ||
| 62 | + Set, | ||
| 63 | + String, | ||
| 64 | + Symbol, | ||
| 65 | + SymbolIterator, | ||
| 66 | + SyntaxError, | ||
| 67 | + TypeError, | ||
| 68 | + Uint16Array, | ||
| 69 | + Uint32Array, | ||
| 70 | + Uint8Array, | ||
| 71 | + Uint8ClampedArray, | ||
| 72 | + URIError, | ||
| 73 | + WeakMap, | ||
| 74 | + WeakSet, | ||
| 75 | + } = primordials; | ||
| 76 | + | ||
| 26 | 77 | module.exports = function() { | |
| 27 | - const { | ||
| 28 | - defineProperty, | ||
| 29 | - freeze, | ||
| 30 | - getOwnPropertyDescriptor, | ||
| 31 | - getOwnPropertyDescriptors, | ||
| 32 | - getOwnPropertyNames, | ||
| 33 | - getOwnPropertySymbols, | ||
| 34 | - getPrototypeOf, | ||
| 35 | - } = Object; | ||
| 36 | - const objectHasOwnProperty = Object.prototype.hasOwnProperty; | ||
| 37 | - const { ownKeys } = Reflect; | ||
| 38 | 78 | const { | |
| 39 | 79 | clearImmediate, | |
| 40 | 80 | clearInterval, | |
@@ -47,25 +87,25 @@ module.exports = function() { | |||
| 47 | 87 | const intrinsicPrototypes = [ | |
| 48 | 88 | // Anonymous Intrinsics | |
| 49 | 89 | // IteratorPrototype | |
| 50 | - getPrototypeOf( | ||
| 51 | - getPrototypeOf(new Array()[Symbol.iterator]()) | ||
| 90 | + ObjectGetPrototypeOf( | ||
| 91 | + ObjectGetPrototypeOf(new Array()[SymbolIterator]()) | ||
| 52 | 92 | ), | |
| 53 | 93 | // ArrayIteratorPrototype | |
| 54 | - getPrototypeOf(new Array()[Symbol.iterator]()), | ||
| 94 | + ObjectGetPrototypeOf(new Array()[SymbolIterator]()), | ||
| 55 | 95 | // StringIteratorPrototype | |
| 56 | - getPrototypeOf(new String()[Symbol.iterator]()), | ||
| 96 | + ObjectGetPrototypeOf(new String()[SymbolIterator]()), | ||
| 57 | 97 | // MapIteratorPrototype | |
| 58 | - getPrototypeOf(new Map()[Symbol.iterator]()), | ||
| 98 | + ObjectGetPrototypeOf(new Map()[SymbolIterator]()), | ||
| 59 | 99 | // SetIteratorPrototype | |
| 60 | - getPrototypeOf(new Set()[Symbol.iterator]()), | ||
| 100 | + ObjectGetPrototypeOf(new Set()[SymbolIterator]()), | ||
| 61 | 101 | // GeneratorFunction | |
| 62 | - getPrototypeOf(function* () {}), | ||
| 102 | + ObjectGetPrototypeOf(function* () {}), | ||
| 63 | 103 | // AsyncFunction | |
| 64 | - getPrototypeOf(async function() {}), | ||
| 104 | + ObjectGetPrototypeOf(async function() {}), | ||
| 65 | 105 | // AsyncGeneratorFunction | |
| 66 | - getPrototypeOf(async function* () {}), | ||
| 106 | + ObjectGetPrototypeOf(async function* () {}), | ||
| 67 | 107 | // TypedArray | |
| 68 | - getPrototypeOf(Uint8Array), | ||
| 108 | + ObjectGetPrototypeOf(Uint8Array), | ||
| 69 | 109 | ||
| 70 | 110 | // 19 Fundamental Objects | |
| 71 | 111 | Object.prototype, // 19.1 | |
@@ -129,33 +169,37 @@ module.exports = function() { | |||
| 129 | 169 | const intrinsics = [ | |
| 130 | 170 | // Anonymous Intrinsics | |
| 131 | 171 | // ThrowTypeError | |
| 132 | - getOwnPropertyDescriptor(Function.prototype, 'caller').get, | ||
| 172 | + ObjectGetOwnPropertyDescriptor(Function.prototype, 'caller').get, | ||
| 133 | 173 | // IteratorPrototype | |
| 134 | - getPrototypeOf( | ||
| 135 | - getPrototypeOf(new Array()[Symbol.iterator]()) | ||
| 174 | + ObjectGetPrototypeOf( | ||
| 175 | + ObjectGetPrototypeOf(new Array()[SymbolIterator]()) | ||
| 136 | 176 | ), | |
| 137 | 177 | // ArrayIteratorPrototype | |
| 138 | - getPrototypeOf(new Array()[Symbol.iterator]()), | ||
| 178 | + ObjectGetPrototypeOf(new Array()[SymbolIterator]()), | ||
| 139 | 179 | // StringIteratorPrototype | |
| 140 | - getPrototypeOf(new String()[Symbol.iterator]()), | ||
| 180 | + ObjectGetPrototypeOf(new String()[SymbolIterator]()), | ||
| 141 | 181 | // MapIteratorPrototype | |
| 142 | - getPrototypeOf(new Map()[Symbol.iterator]()), | ||
| 182 | + ObjectGetPrototypeOf(new Map()[SymbolIterator]()), | ||
| 143 | 183 | // SetIteratorPrototype | |
| 144 | - getPrototypeOf(new Set()[Symbol.iterator]()), | ||
| 184 | + ObjectGetPrototypeOf(new Set()[SymbolIterator]()), | ||
| 145 | 185 | // GeneratorFunction | |
| 146 | - getPrototypeOf(function* () {}), | ||
| 186 | + ObjectGetPrototypeOf(function* () {}), | ||
| 147 | 187 | // AsyncFunction | |
| 148 | - getPrototypeOf(async function() {}), | ||
| 188 | + ObjectGetPrototypeOf(async function() {}), | ||
| 149 | 189 | // AsyncGeneratorFunction | |
| 150 | - getPrototypeOf(async function* () {}), | ||
| 190 | + ObjectGetPrototypeOf(async function* () {}), | ||
| 151 | 191 | // TypedArray | |
| 152 | - getPrototypeOf(Uint8Array), | ||
| 192 | + ObjectGetPrototypeOf(Uint8Array), | ||
| 153 | 193 | ||
| 154 | 194 | // 18 The Global Object | |
| 155 | 195 | eval, | |
| 196 | + // eslint-disable-next-line node-core/prefer-primordials | ||
| 156 | 197 | isFinite, | |
| 198 | + // eslint-disable-next-line node-core/prefer-primordials | ||
| 157 | 199 | isNaN, | |
| 200 | + // eslint-disable-next-line node-core/prefer-primordials | ||
| 158 | 201 | parseFloat, | |
| 202 | + // eslint-disable-next-line node-core/prefer-primordials | ||
| 159 | 203 | parseInt, | |
| 160 | 204 | decodeURI, | |
| 161 | 205 | decodeURIComponent, | |
@@ -289,16 +333,16 @@ module.exports = function() { | |||
| 289 | 333 | // Object are verified before being enqueued, | |
| 290 | 334 | // therefore this is a valid candidate. | |
| 291 | 335 | // Throws if this fails (strict mode). | |
| 292 | - freeze(obj); | ||
| 336 | + ObjectFreeze(obj); | ||
| 293 | 337 | ||
| 294 | 338 | // We rely upon certain commitments of Object.freeze and proxies here | |
| 295 | 339 | ||
| 296 | 340 | // Get stable/immutable outbound links before a Proxy has a chance to do | |
| 297 | 341 | // something sneaky. | |
| 298 | - const proto = getPrototypeOf(obj); | ||
| 299 | - const descs = getOwnPropertyDescriptors(obj); | ||
| 342 | + const proto = ObjectGetPrototypeOf(obj); | ||
| 343 | + const descs = ObjectGetOwnPropertyDescriptors(obj); | ||
| 300 | 344 | enqueue(proto); | |
| 301 | - ownKeys(descs).forEach((name) => { | ||
| 345 | + ArrayPrototypeForEach(ReflectOwnKeys(descs), (name) => { | ||
| 302 | 346 | // TODO: Uncurried form | |
| 303 | 347 | // TODO: getOwnPropertyDescriptors is guaranteed to return well-formed | |
| 304 | 348 | // descriptors, but they still inherit from Object.prototype. If | |
@@ -378,10 +422,10 @@ module.exports = function() { | |||
| 378 | 422 | `Cannot assign to read only property '${prop}' of object '${obj}'` | |
| 379 | 423 | ); | |
| 380 | 424 | } | |
| 381 | - if (objectHasOwnProperty.call(this, prop)) { | ||
| 425 | + if (ObjectPrototypeHasOwnProperty(this, prop)) { | ||
| 382 | 426 | this[prop] = newValue; | |
| 383 | 427 | } else { | |
| 384 | - defineProperty(this, prop, { | ||
| 428 | + ObjectDefineProperty(this, prop, { | ||
| 385 | 429 | value: newValue, | |
| 386 | 430 | writable: true, | |
| 387 | 431 | enumerable: true, | |
@@ -390,7 +434,7 @@ module.exports = function() { | |||
| 390 | 434 | } | |
| 391 | 435 | } | |
| 392 | 436 | ||
| 393 | - defineProperty(obj, prop, { | ||
| 437 | + ObjectDefineProperty(obj, prop, { | ||
| 394 | 438 | get: getter, | |
| 395 | 439 | set: setter, | |
| 396 | 440 | enumerable: desc.enumerable, | |
@@ -403,14 +447,14 @@ module.exports = function() { | |||
| 403 | 447 | if (!obj) { | |
| 404 | 448 | return; | |
| 405 | 449 | } | |
| 406 | - const descs = getOwnPropertyDescriptors(obj); | ||
| 450 | + const descs = ObjectGetOwnPropertyDescriptors(obj); | ||
| 407 | 451 | if (!descs) { | |
| 408 | 452 | return; | |
| 409 | 453 | } | |
| 410 | - getOwnPropertyNames(obj).forEach((prop) => { | ||
| 454 | + ArrayPrototypeForEach(ObjectGetOwnPropertyNames(obj), (prop) => { | ||
| 411 | 455 | return enableDerivedOverride(obj, prop, descs[prop]); | |
| 412 | 456 | }); | |
| 413 | - getOwnPropertySymbols(obj).forEach((prop) => { | ||
| 457 | + ArrayPrototypeForEach(ObjectGetOwnPropertySymbols(obj), (prop) => { | ||
| 414 | 458 | return enableDerivedOverride(obj, prop, descs[prop]); | |
| 415 | 459 | }); | |
| 416 | 460 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -3,11 +3,13 @@ | |||
| 3 | 3 | const { | |
| 4 | 4 | ArrayIsArray, | |
| 5 | 5 | BigInt, | |
| 6 | + Date, | ||
| 6 | 7 | DateNow, | |
| 7 | 8 | ErrorCaptureStackTrace, | |
| 8 | 9 | ObjectPrototypeHasOwnProperty, | |
| 9 | 10 | Number, | |
| 10 | 11 | NumberIsFinite, | |
| 12 | + NumberIsInteger, | ||
| 11 | 13 | MathMin, | |
| 12 | 14 | ObjectSetPrototypeOf, | |
| 13 | 15 | ReflectOwnKeys, | |
@@ -785,7 +787,7 @@ const getValidMode = hideStackFrames((mode, type) => { | |||
| 785 | 787 | if (mode == null) { | |
| 786 | 788 | return def; | |
| 787 | 789 | } | |
| 788 | - if (Number.isInteger(mode) && mode >= min && mode <= max) { | ||
| 790 | + if (NumberIsInteger(mode) && mode >= min && mode <= max) { | ||
| 789 | 791 | return mode; | |
| 790 | 792 | } | |
| 791 | 793 | if (typeof mode !== 'number') { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments