-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
implementation.js
39 lines (27 loc) · 1.02 KB
/
implementation.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
'use strict';
var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible');
var substring = require('es-abstract/2024/substring');
var ToIntegerOrInfinity = require('es-abstract/2024/ToIntegerOrInfinity');
var ToString = require('es-abstract/2024/ToString');
var max = Math.max;
var min = Math.min;
module.exports = function substr(start, length) {
var O = RequireObjectCoercible(this); // step 1
var S = ToString(O); // step 2
var size = S.length; // step 3
var intStart = ToIntegerOrInfinity(start); // step 4
if (intStart === -Infinity) {
intStart = 0; // step 5
} else if (intStart < 0) {
intStart = max(size + intStart, 0);
} // step 6
var intLength = typeof length === 'undefined' ? size : ToIntegerOrInfinity(length); // step 7
if (intStart === Infinity || intLength <= 0 || intLength === Infinity) {
return ''; // step 8
}
var intEnd = min(intStart + intLength, size); // step 9
if (intStart >= intEnd) {
return ''; // step 10
}
return substring(S, intStart, intEnd); // step 11
};