jsfunx 1.1.2 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -16
- package/jsfunx.cjs +129 -114
- package/jsfunx.mjs +134 -114
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,13 +9,13 @@ The main reason why this library was created is to:
|
|
|
9
9
|
### use
|
|
10
10
|
|
|
11
11
|
```js
|
|
12
|
-
import { isType, number } from "jsfunx"; // ESM
|
|
12
|
+
import { isType, number, useStrict } from "jsfunx"; // ESM
|
|
13
13
|
|
|
14
14
|
// or
|
|
15
15
|
|
|
16
16
|
// "use strict"; // CJS
|
|
17
17
|
|
|
18
|
-
// const { isType, number } = require("jsfunx"); // CJS
|
|
18
|
+
// const { isType, number, useStrict } = require("jsfunx"); // CJS
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Adds two numbers together and returns the result.
|
|
@@ -27,8 +27,9 @@ import { isType, number } from "jsfunx"; // ESM
|
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
29
|
function add(num1, num2) {
|
|
30
|
-
|
|
30
|
+
useStrict(add, arguments);
|
|
31
31
|
|
|
32
|
+
// 35 char
|
|
32
33
|
if (isType([num1, num2], number)) {
|
|
33
34
|
return num1 + num2;
|
|
34
35
|
}
|
|
@@ -59,7 +60,6 @@ console.log(add(Number(1), Number(3)));
|
|
|
59
60
|
|
|
60
61
|
function add(num1, num2) {
|
|
61
62
|
// 59 char
|
|
62
|
-
|
|
63
63
|
if (typeof num1 === "number" && typeof num2 === "number") {
|
|
64
64
|
return num1 + num2;
|
|
65
65
|
}
|
|
@@ -77,13 +77,13 @@ console.log(add(Number(1), Number(3)));
|
|
|
77
77
|
### and
|
|
78
78
|
|
|
79
79
|
```js
|
|
80
|
-
import { isType, number, string } from "jsfunx"; // ESM
|
|
80
|
+
import { isType, number, string, useStrict } from "jsfunx"; // ESM
|
|
81
81
|
|
|
82
82
|
// or
|
|
83
83
|
|
|
84
84
|
// "use strict"; // CJS
|
|
85
85
|
|
|
86
|
-
// const { isType, number, string } = require("jsfunx"); // CJS
|
|
86
|
+
// const { isType, number, string, useStrict } = require("jsfunx"); // CJS
|
|
87
87
|
|
|
88
88
|
/**
|
|
89
89
|
* Prints a message with the given name and age.
|
|
@@ -95,8 +95,9 @@ import { isType, number, string } from "jsfunx"; // ESM
|
|
|
95
95
|
*/
|
|
96
96
|
|
|
97
97
|
function fun(name, age) {
|
|
98
|
-
|
|
98
|
+
useStrict(fun, arguments);
|
|
99
99
|
|
|
100
|
+
// 44 char
|
|
100
101
|
if (isType([name, age], [string, number])) {
|
|
101
102
|
console.log(`your name is ${name} and your age is ${age}`);
|
|
102
103
|
return;
|
|
@@ -128,7 +129,6 @@ fun(String("mohamed"), Number(23));
|
|
|
128
129
|
|
|
129
130
|
function fun(name, age) {
|
|
130
131
|
// 58 char
|
|
131
|
-
|
|
132
132
|
if (typeof name === "string" && typeof age === "number") {
|
|
133
133
|
console.log(`your name is ${name} and your age is ${age}`);
|
|
134
134
|
return;
|
|
@@ -147,13 +147,13 @@ fun(String("mohamed"), Number(23));
|
|
|
147
147
|
### and
|
|
148
148
|
|
|
149
149
|
```js
|
|
150
|
-
import { instancesof } from "jsfunx"; // ESM
|
|
150
|
+
import { instancesof, useStrict } from "jsfunx"; // ESM
|
|
151
151
|
|
|
152
152
|
// or
|
|
153
153
|
|
|
154
154
|
// "use strict"; // CJS
|
|
155
155
|
|
|
156
|
-
// const { instancesof } = require("jsfunx"); // CJS
|
|
156
|
+
// const { instancesof, useStrict } = require("jsfunx"); // CJS
|
|
157
157
|
|
|
158
158
|
/**
|
|
159
159
|
* Adds two numbers together and returns the result.
|
|
@@ -165,8 +165,9 @@ import { instancesof } from "jsfunx"; // ESM
|
|
|
165
165
|
*/
|
|
166
166
|
|
|
167
167
|
function add(num1, num2) {
|
|
168
|
-
|
|
168
|
+
useStrict(add, arguments);
|
|
169
169
|
|
|
170
|
+
// 40 char
|
|
170
171
|
if (instancesof([num1, num2], Number)) {
|
|
171
172
|
return new Number(num1 + num2);
|
|
172
173
|
}
|
|
@@ -193,7 +194,6 @@ console.log(add(new Number(1), new Number(3)));
|
|
|
193
194
|
|
|
194
195
|
function add(num1, num2) {
|
|
195
196
|
// 55 char
|
|
196
|
-
|
|
197
197
|
if (num1 instanceof Number && num2 instanceof Number) {
|
|
198
198
|
return new Number(num1 + num2);
|
|
199
199
|
}
|
|
@@ -207,13 +207,13 @@ console.log(add(new Number(1), new Number(3)));
|
|
|
207
207
|
### and
|
|
208
208
|
|
|
209
209
|
```js
|
|
210
|
-
import { instancesof } from "jsfunx"; // ESM
|
|
210
|
+
import { instancesof, useStrict } from "jsfunx"; // ESM
|
|
211
211
|
|
|
212
212
|
// or
|
|
213
213
|
|
|
214
214
|
// "use strict"; // CJS
|
|
215
215
|
|
|
216
|
-
// const { instancesof } = require("jsfunx"); // CJS
|
|
216
|
+
// const { instancesof, useStrict } = require("jsfunx"); // CJS
|
|
217
217
|
|
|
218
218
|
/**
|
|
219
219
|
* Prints a message with the given name and age.
|
|
@@ -225,8 +225,9 @@ import { instancesof } from "jsfunx"; // ESM
|
|
|
225
225
|
*/
|
|
226
226
|
|
|
227
227
|
function fun(name, age) {
|
|
228
|
-
|
|
228
|
+
useStrict(fun, arguments);
|
|
229
229
|
|
|
230
|
+
// 49 char
|
|
230
231
|
if (instancesof([name, age], [String, Number])) {
|
|
231
232
|
console.log(`your name is ${name} and your age is ${age}`);
|
|
232
233
|
return;
|
|
@@ -254,7 +255,6 @@ fun(new String("mohamed"), new Number(23));
|
|
|
254
255
|
|
|
255
256
|
function fun(name, age) {
|
|
256
257
|
// 54 char
|
|
257
|
-
|
|
258
258
|
if (name instanceof String && age instanceof Number) {
|
|
259
259
|
console.log(`your name is ${name} and your age is ${age}`);
|
|
260
260
|
return;
|
|
@@ -268,6 +268,10 @@ fun(new String("mohamed"), new Number(23));
|
|
|
268
268
|
|
|
269
269
|
but not just this there is other funcs you can see the source code and check all the tests in the main fun.
|
|
270
270
|
|
|
271
|
+
## Note:
|
|
272
|
+
|
|
273
|
+
useStrict() was used to enforce strict argument passing in functions.
|
|
274
|
+
|
|
271
275
|
## Installation
|
|
272
276
|
|
|
273
277
|
You can install `jsfunx` via npm:
|
package/jsfunx.cjs
CHANGED
|
@@ -153,9 +153,9 @@ const undef = "undefined";
|
|
|
153
153
|
*
|
|
154
154
|
* @param {* | Array<*>} data - The value or array of values to check.
|
|
155
155
|
* @param {* | Array<*>} dataType - The expected type or array of expected types.
|
|
156
|
-
* @param {"and" | "or"} logic - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
157
|
-
* @param {boolean} match - Whether to compare type names strictly or loosely.
|
|
158
|
-
* @param {boolean} strict - If `true`, enforces strict comparison rules.
|
|
156
|
+
* @param {("and" | "or") | String} logic - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
157
|
+
* @param {boolean | Boolean} match - Whether to compare type names strictly or loosely.
|
|
158
|
+
* @param {boolean | Boolean} strict - If `true`, enforces strict comparison rules.
|
|
159
159
|
* @returns {boolean} `true` if the data matches the expected type(s) according to the given logic, otherwise `false`.
|
|
160
160
|
*/
|
|
161
161
|
|
|
@@ -783,9 +783,9 @@ function checkType(data, dataType, logic, match, strict) {
|
|
|
783
783
|
* @template T - The instance type returned by the constructor(s).
|
|
784
784
|
* @param {* | Array<*>} objs - The object or array of objects to test.
|
|
785
785
|
* @param {(new (...args: any[]) => T) | Array<new (...args: any[]) => T>} type - The constructor or list of constructors to test against.
|
|
786
|
-
* @param {"and" | "or"} logic - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
787
|
-
* @param {boolean} match - Whether to compare classes names strictly or loosely.
|
|
788
|
-
* @param {boolean} strict - If `true`, enables strict comparison behavior.
|
|
786
|
+
* @param {("and" | "or") | String} logic - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
787
|
+
* @param {boolean | Boolean} match - Whether to compare classes names strictly or loosely.
|
|
788
|
+
* @param {boolean | Boolean} strict - If `true`, enables strict comparison behavior.
|
|
789
789
|
* @returns {boolean} `true` if the provided object(s) match the given type(s) according to the chosen logic, otherwise `false`.
|
|
790
790
|
*/
|
|
791
791
|
|
|
@@ -1292,9 +1292,9 @@ function echo(data) {
|
|
|
1292
1292
|
* @template T - The instance type returned by the constructor(s).
|
|
1293
1293
|
* @param {*|Array<*>} objs - The object or array of objects to test.
|
|
1294
1294
|
* @param {(new (...args: any[]) => T) | Array<new (...args: any[]) => T>} type - The constructor or list of constructors to test against.
|
|
1295
|
-
* @param {"and" | "or" | boolean} logic_or_match - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
1296
|
-
* @param {boolean} match_or_strict - Whether to compare classes names strictly or loosely.
|
|
1297
|
-
* @param {boolean} strict - If `true`, enables strict comparison behavior.
|
|
1295
|
+
* @param {("and" | "or") | String | (boolean | Boolean)} logic_or_match - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
1296
|
+
* @param {boolean | Boolean} match_or_strict - Whether to compare classes names strictly or loosely.
|
|
1297
|
+
* @param {boolean | Boolean} strict - If `true`, enables strict comparison behavior.
|
|
1298
1298
|
* @returns {boolean} `true` if the provided object(s) match the given type(s) according to the chosen logic, otherwise `false`.
|
|
1299
1299
|
*/
|
|
1300
1300
|
|
|
@@ -1333,20 +1333,9 @@ function instancesof(
|
|
|
1333
1333
|
|
|
1334
1334
|
// ================================================================
|
|
1335
1335
|
|
|
1336
|
-
if (len
|
|
1337
|
-
if (checkType(
|
|
1338
|
-
return isinstancesof(objs, type, and, logic_or_match, strict);
|
|
1339
|
-
|
|
1340
|
-
if (len === 4) {
|
|
1341
|
-
if (
|
|
1342
|
-
not(checkType(arguments[3], boolean)) &&
|
|
1343
|
-
not(arguments[3] instanceof Boolean)
|
|
1344
|
-
)
|
|
1345
|
-
throw new TypeError("forth argument must be true or false");
|
|
1346
|
-
|
|
1347
|
-
if (checkType(arguments[2], boolean) || arguments[2] instanceof Boolean)
|
|
1336
|
+
if (len > 2 && len < 5)
|
|
1337
|
+
if (checkType(logic_or_match, boolean) || logic_or_match instanceof Boolean)
|
|
1348
1338
|
return isinstancesof(objs, type, and, logic_or_match, match_or_strict);
|
|
1349
|
-
}
|
|
1350
1339
|
|
|
1351
1340
|
return isinstancesof(objs, type, logic_or_match, match_or_strict, strict);
|
|
1352
1341
|
}
|
|
@@ -1380,9 +1369,9 @@ function isinstance(obj, cls) {
|
|
|
1380
1369
|
* @template T - The instance type returned by the constructor(s).
|
|
1381
1370
|
* @param {*|Array<*>} objs - The object or array of objects to test.
|
|
1382
1371
|
* @param {(new (...args: any[]) => T) | Array<new (...args: any[]) => T>} type - The constructor or list of constructors to test against.
|
|
1383
|
-
* @param {"and" | "or" | boolean} logic_or_match - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
1384
|
-
* @param {boolean} match_or_strict - Whether to compare classes names strictly or loosely.
|
|
1385
|
-
* @param {boolean} strict - If `true`, enables strict comparison behavior.
|
|
1372
|
+
* @param {("and" | "or") | String | (boolean | Boolean)} logic_or_match - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
1373
|
+
* @param {boolean | Boolean} match_or_strict - Whether to compare classes names strictly or loosely.
|
|
1374
|
+
* @param {boolean | Boolean} strict - If `true`, enables strict comparison behavior.
|
|
1386
1375
|
* @returns {boolean} `true` if the provided object(s) match the given type(s) according to the chosen logic, otherwise `false`.
|
|
1387
1376
|
*/
|
|
1388
1377
|
|
|
@@ -1405,9 +1394,9 @@ function isinstances(
|
|
|
1405
1394
|
*
|
|
1406
1395
|
* @param {* | Array<*>} data - The value or array of values to check.
|
|
1407
1396
|
* @param {* | Array<*>} dataType - The expected type or array of expected types.
|
|
1408
|
-
* @param {"and" | "or" | boolean} logic_or_match - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
1409
|
-
* @param {boolean} match_or_strict - Whether to compare type names strictly or loosely.
|
|
1410
|
-
* @param {boolean} strict - If `true`, enforces strict comparison rules.
|
|
1397
|
+
* @param {("and" | "or") | String | (boolean | Boolean)} logic_or_match - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
1398
|
+
* @param {boolean | Boolean} match_or_strict - Whether to compare type names strictly or loosely.
|
|
1399
|
+
* @param {boolean | Boolean} strict - If `true`, enforces strict comparison rules.
|
|
1411
1400
|
* @returns {boolean} `true` if the data matches the expected type(s) according to the given logic, otherwise `false`.
|
|
1412
1401
|
*/
|
|
1413
1402
|
|
|
@@ -1446,20 +1435,9 @@ function isType(
|
|
|
1446
1435
|
|
|
1447
1436
|
// ================================================================
|
|
1448
1437
|
|
|
1449
|
-
if (len
|
|
1450
|
-
if (checkType(
|
|
1451
|
-
return checkType(data, dataType, and, logic_or_match, strict);
|
|
1452
|
-
|
|
1453
|
-
if (len === 4) {
|
|
1454
|
-
if (
|
|
1455
|
-
not(checkType(arguments[3], boolean)) &&
|
|
1456
|
-
not(arguments[3] instanceof Boolean)
|
|
1457
|
-
)
|
|
1458
|
-
throw new TypeError("forth argument must be true or false");
|
|
1459
|
-
|
|
1460
|
-
if (checkType(arguments[2], boolean) || arguments[2] instanceof Boolean)
|
|
1438
|
+
if (len > 2 && len < 5)
|
|
1439
|
+
if (checkType(logic_or_match, boolean) || logic_or_match instanceof Boolean)
|
|
1461
1440
|
return checkType(data, dataType, and, logic_or_match, match_or_strict);
|
|
1462
|
-
}
|
|
1463
1441
|
|
|
1464
1442
|
return checkType(data, dataType, logic_or_match, match_or_strict, strict);
|
|
1465
1443
|
}
|
|
@@ -1566,12 +1544,20 @@ function log(...data) {
|
|
|
1566
1544
|
*/
|
|
1567
1545
|
|
|
1568
1546
|
function not(obj) {
|
|
1569
|
-
|
|
1570
|
-
|
|
1547
|
+
/** @type {number} */
|
|
1548
|
+
|
|
1549
|
+
let len = arguments.length;
|
|
1550
|
+
|
|
1551
|
+
if (len !== 1)
|
|
1552
|
+
throw new TypeError(`not() takes exactly one argument (${len} given)`);
|
|
1553
|
+
|
|
1554
|
+
/** @type {*} */
|
|
1555
|
+
|
|
1556
|
+
let val = obj?.valueOf();
|
|
1571
1557
|
|
|
1572
|
-
if (
|
|
1558
|
+
if (!(val instanceof Object) || val instanceof Function) return !val;
|
|
1573
1559
|
|
|
1574
|
-
return
|
|
1560
|
+
return val.length === 0 || !val; // handling the true object case
|
|
1575
1561
|
}
|
|
1576
1562
|
|
|
1577
1563
|
/**
|
|
@@ -1624,6 +1610,89 @@ function puts(...data) {
|
|
|
1624
1610
|
console.log(...data);
|
|
1625
1611
|
}
|
|
1626
1612
|
|
|
1613
|
+
/**
|
|
1614
|
+
* Validates function arguments strictly at runtime.
|
|
1615
|
+
*
|
|
1616
|
+
* Ensures that:
|
|
1617
|
+
* 1. `useStrict` is called with exactly three arguments:
|
|
1618
|
+
* - `func`: the function to validate against
|
|
1619
|
+
* - `args`: an array or array-like object of arguments intended for `func`
|
|
1620
|
+
* - `optional`: optional arguments number in the function
|
|
1621
|
+
* 2. `func` is a function.
|
|
1622
|
+
* 3. `args` is array-like.
|
|
1623
|
+
* 4. `optional` is a number.
|
|
1624
|
+
* 5. The number of elements in `args` greater than or equal the number of parameters `func` expects.
|
|
1625
|
+
* 6. The number of elements in `args` less than or equal the number of parameters `func` + `optional` expects.
|
|
1626
|
+
*
|
|
1627
|
+
* @param {Function} func - The function whose arguments are being validated.
|
|
1628
|
+
* @param {Array|IArguments} args - The array-like object of arguments to check against the function's parameter count.
|
|
1629
|
+
* @param {number | Number} optional - default arguments number in the function.
|
|
1630
|
+
* @param {boolean | Boolean} postArgs - extra argument(s) after positional and optional ones `...args: any[]`.
|
|
1631
|
+
* @throws {TypeError} If called with a number of arguments less than 2.
|
|
1632
|
+
* @throws {TypeError} If called with a number of arguments greater than 3.
|
|
1633
|
+
* @throws {TypeError} If `func` is not a function.
|
|
1634
|
+
* @throws {TypeError} If `args` is not array-like.
|
|
1635
|
+
* @throws {TypeError} If `optional` is a negative number or not a number at all.
|
|
1636
|
+
* @throws {TypeError} If the length of `args` is less than the parameters number of `func`.
|
|
1637
|
+
* @throws {TypeError} If the length of `args` is greater than the parameters number of `func` + `optional`.
|
|
1638
|
+
* @returns {void} This function does not return a value.
|
|
1639
|
+
*/
|
|
1640
|
+
|
|
1641
|
+
function strict(func, args, optional, postArgs) {
|
|
1642
|
+
if (!(func instanceof Function))
|
|
1643
|
+
throw new TypeError("first argument must be a function");
|
|
1644
|
+
|
|
1645
|
+
if (typeof args !== "object" || typeof args.length !== "number")
|
|
1646
|
+
throw new TypeError("second argument must be array-like");
|
|
1647
|
+
|
|
1648
|
+
if (
|
|
1649
|
+
(typeof optional !== "number" && !(optional instanceof Number)) ||
|
|
1650
|
+
optional < 0
|
|
1651
|
+
)
|
|
1652
|
+
throw new TypeError("third argument must be a positive number");
|
|
1653
|
+
|
|
1654
|
+
/** @type {string} */
|
|
1655
|
+
|
|
1656
|
+
const funcName = func.name;
|
|
1657
|
+
|
|
1658
|
+
/** @type {number} */
|
|
1659
|
+
|
|
1660
|
+
const paramsNumber = func.length;
|
|
1661
|
+
|
|
1662
|
+
/** @type {number} */
|
|
1663
|
+
|
|
1664
|
+
const argsNumber = args.length;
|
|
1665
|
+
|
|
1666
|
+
if (argsNumber < paramsNumber)
|
|
1667
|
+
throw new TypeError(
|
|
1668
|
+
`${funcName}() takes ${paramsNumber} positional argument(s) but ${argsNumber} were given`
|
|
1669
|
+
);
|
|
1670
|
+
|
|
1671
|
+
if (not(postArgs))
|
|
1672
|
+
if (argsNumber > paramsNumber + optional) {
|
|
1673
|
+
if (paramsNumber > 0 && optional > 0)
|
|
1674
|
+
throw new TypeError(
|
|
1675
|
+
`${funcName}() takes ${
|
|
1676
|
+
paramsNumber + optional
|
|
1677
|
+
} arguments in total but ${argsNumber} were given`
|
|
1678
|
+
);
|
|
1679
|
+
|
|
1680
|
+
if (paramsNumber > 0)
|
|
1681
|
+
throw new TypeError(
|
|
1682
|
+
`${funcName}() takes ${paramsNumber} positional argument(s) in total but ${argsNumber} were given`
|
|
1683
|
+
);
|
|
1684
|
+
|
|
1685
|
+
if (optional > 0)
|
|
1686
|
+
throw new TypeError(
|
|
1687
|
+
`${funcName}() takes ${optional} optional argument(s) in total but ${argsNumber} were given`
|
|
1688
|
+
);
|
|
1689
|
+
|
|
1690
|
+
throw new TypeError(
|
|
1691
|
+
`${funcName}() takes no argument(s) but ${argsNumber} were given`
|
|
1692
|
+
);
|
|
1693
|
+
}
|
|
1694
|
+
}
|
|
1695
|
+
|
|
1627
1696
|
/**
|
|
1628
1697
|
* Returns the JavaScript type of a value using the `typeof` operator.
|
|
1629
1698
|
*
|
|
@@ -1704,31 +1773,14 @@ function typesof(...objs) {
|
|
|
1704
1773
|
/**
|
|
1705
1774
|
* Validates function arguments strictly at runtime.
|
|
1706
1775
|
*
|
|
1707
|
-
* Ensures that:
|
|
1708
|
-
* 1. `useStrict` is called with exactly three arguments:
|
|
1709
|
-
* - `func`: the function to validate against
|
|
1710
|
-
* - `args`: an array or array-like object of arguments intended for `func`
|
|
1711
|
-
* - `optional`: optional arguments number in the function
|
|
1712
|
-
* 2. `func` is a function.
|
|
1713
|
-
* 3. `args` is array-like.
|
|
1714
|
-
* 4. `optional` is a number.
|
|
1715
|
-
* 5. The number of elements in `args` greater than or equal the number of parameters `func` expects.
|
|
1716
|
-
* 6. The number of elements in `args` less than or equal the number of parameters `func` + `optional` expects.
|
|
1717
|
-
*
|
|
1718
1776
|
* @param {Function} func - The function whose arguments are being validated.
|
|
1719
1777
|
* @param {Array|IArguments} args - The array-like object of arguments to check against the function's parameter count.
|
|
1720
|
-
* @param {number}
|
|
1721
|
-
* @
|
|
1722
|
-
* @throws {TypeError} If called with a number of arguments greater than 3.
|
|
1723
|
-
* @throws {TypeError} If `func` is not a function.
|
|
1724
|
-
* @throws {TypeError} If `args` is not array-like.
|
|
1725
|
-
* @throws {TypeError} If `optional` is a negative number or not a number at all.
|
|
1726
|
-
* @throws {TypeError} If the length of `args` is less than the parameters number of `func`.
|
|
1727
|
-
* @throws {TypeError} If the length of `args` is greater than the parameters number of `func` + `optional`.
|
|
1778
|
+
* @param {number | Number} optional_or_postArgs - default arguments number in the function.
|
|
1779
|
+
* @param {boolean | Boolean} postArgs - extra argument(s) after positional and optional ones `...args: any[]`.
|
|
1728
1780
|
* @returns {void} This function does not return a value.
|
|
1729
1781
|
*/
|
|
1730
1782
|
|
|
1731
|
-
function useStrict(func, args,
|
|
1783
|
+
function useStrict(func, args, optional_or_postArgs = 0, postArgs = false) {
|
|
1732
1784
|
/** @type {number} */
|
|
1733
1785
|
|
|
1734
1786
|
const len = arguments.length;
|
|
@@ -1740,59 +1792,22 @@ function useStrict(func, args, optional = 0) {
|
|
|
1740
1792
|
: "useStrict() missing 2 required arguments: 'func' and 'args'"
|
|
1741
1793
|
);
|
|
1742
1794
|
|
|
1743
|
-
if (len >
|
|
1744
|
-
throw TypeError(
|
|
1745
|
-
`useStrict() takes
|
|
1746
|
-
);
|
|
1747
|
-
|
|
1748
|
-
if (!(func instanceof Function))
|
|
1749
|
-
throw TypeError("first argument must be a function");
|
|
1750
|
-
|
|
1751
|
-
if (typeof args !== "object" || typeof args.length !== "number")
|
|
1752
|
-
throw TypeError("second argument must be array-like");
|
|
1753
|
-
|
|
1754
|
-
if (typeof optional !== "number" || optional < 0)
|
|
1755
|
-
throw TypeError("third argument must be a positive number");
|
|
1756
|
-
|
|
1757
|
-
/** @type {string} */
|
|
1758
|
-
|
|
1759
|
-
const funcName = func.name;
|
|
1760
|
-
|
|
1761
|
-
/** @type {number} */
|
|
1762
|
-
|
|
1763
|
-
const paramsNumber = func.length;
|
|
1764
|
-
|
|
1765
|
-
/** @type {number} */
|
|
1766
|
-
|
|
1767
|
-
const argsNumber = args.length;
|
|
1768
|
-
|
|
1769
|
-
if (argsNumber < paramsNumber)
|
|
1770
|
-
throw TypeError(
|
|
1771
|
-
`${funcName}() takes ${paramsNumber} positional argument(s) but ${argsNumber} were given`
|
|
1795
|
+
if (len > 4)
|
|
1796
|
+
throw new TypeError(
|
|
1797
|
+
`useStrict() takes 4 arguments in total but ${len} were given`
|
|
1772
1798
|
);
|
|
1773
1799
|
|
|
1774
|
-
if (
|
|
1775
|
-
if (
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
);
|
|
1781
|
-
|
|
1782
|
-
if (paramsNumber > 0)
|
|
1783
|
-
throw TypeError(
|
|
1784
|
-
`${funcName}() takes ${paramsNumber} positional argument(s) in total but ${argsNumber} were given`
|
|
1785
|
-
);
|
|
1786
|
-
|
|
1787
|
-
if (optional > 0)
|
|
1788
|
-
throw TypeError(
|
|
1789
|
-
`${funcName}() takes ${optional} optional argument(s) in total but ${argsNumber} were given`
|
|
1790
|
-
);
|
|
1800
|
+
if (len === 3) {
|
|
1801
|
+
if (
|
|
1802
|
+
typeof optional_or_postArgs === "boolean" ||
|
|
1803
|
+
optional_or_postArgs instanceof Boolean
|
|
1804
|
+
)
|
|
1805
|
+
strict(func, args, 0, optional_or_postArgs);
|
|
1791
1806
|
|
|
1792
|
-
|
|
1793
|
-
`${funcName}() takes no argument(s) but ${argsNumber} were given`
|
|
1794
|
-
);
|
|
1807
|
+
return;
|
|
1795
1808
|
}
|
|
1809
|
+
|
|
1810
|
+
strict(func, args, optional_or_postArgs, postArgs);
|
|
1796
1811
|
}
|
|
1797
1812
|
|
|
1798
1813
|
/**
|
package/jsfunx.mjs
CHANGED
|
@@ -157,9 +157,9 @@ export const undef = "undefined";
|
|
|
157
157
|
*
|
|
158
158
|
* @param {* | Array<*>} data - The value or array of values to check.
|
|
159
159
|
* @param {* | Array<*>} dataType - The expected type or array of expected types.
|
|
160
|
-
* @param {"and" | "or"} logic - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
161
|
-
* @param {boolean} match - Whether to compare type names strictly or loosely.
|
|
162
|
-
* @param {boolean} strict - If `true`, enforces strict comparison rules.
|
|
160
|
+
* @param {("and" | "or") | String} logic - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
161
|
+
* @param {boolean | Boolean} match - Whether to compare type names strictly or loosely.
|
|
162
|
+
* @param {boolean | Boolean} strict - If `true`, enforces strict comparison rules.
|
|
163
163
|
* @returns {boolean} `true` if the data matches the expected type(s) according to the given logic, otherwise `false`.
|
|
164
164
|
*/
|
|
165
165
|
|
|
@@ -787,9 +787,9 @@ function checkType(data, dataType, logic, match, strict) {
|
|
|
787
787
|
* @template T - The instance type returned by the constructor(s).
|
|
788
788
|
* @param {* | Array<*>} objs - The object or array of objects to test.
|
|
789
789
|
* @param {(new (...args: any[]) => T) | Array<new (...args: any[]) => T>} type - The constructor or list of constructors to test against.
|
|
790
|
-
* @param {"and" | "or"} logic - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
791
|
-
* @param {boolean} match - Whether to compare classes names strictly or loosely.
|
|
792
|
-
* @param {boolean} strict - If `true`, enables strict comparison behavior.
|
|
790
|
+
* @param {("and" | "or") | String} logic - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
791
|
+
* @param {boolean | Boolean} match - Whether to compare classes names strictly or loosely.
|
|
792
|
+
* @param {boolean | Boolean} strict - If `true`, enables strict comparison behavior.
|
|
793
793
|
* @returns {boolean} `true` if the provided object(s) match the given type(s) according to the chosen logic, otherwise `false`.
|
|
794
794
|
*/
|
|
795
795
|
|
|
@@ -1296,9 +1296,9 @@ export function echo(data) {
|
|
|
1296
1296
|
* @template T - The instance type returned by the constructor(s).
|
|
1297
1297
|
* @param {*|Array<*>} objs - The object or array of objects to test.
|
|
1298
1298
|
* @param {(new (...args: any[]) => T) | Array<new (...args: any[]) => T>} type - The constructor or list of constructors to test against.
|
|
1299
|
-
* @param {"and" | "or" | boolean} logic_or_match - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
1300
|
-
* @param {boolean} match_or_strict - Whether to compare classes names strictly or loosely.
|
|
1301
|
-
* @param {boolean} strict - If `true`, enables strict comparison behavior.
|
|
1299
|
+
* @param {("and" | "or") | String | (boolean | Boolean)} logic_or_match - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
1300
|
+
* @param {boolean | Boolean} match_or_strict - Whether to compare classes names strictly or loosely.
|
|
1301
|
+
* @param {boolean | Boolean} strict - If `true`, enables strict comparison behavior.
|
|
1302
1302
|
* @returns {boolean} `true` if the provided object(s) match the given type(s) according to the chosen logic, otherwise `false`.
|
|
1303
1303
|
*/
|
|
1304
1304
|
|
|
@@ -1337,20 +1337,9 @@ export function instancesof(
|
|
|
1337
1337
|
|
|
1338
1338
|
// ================================================================
|
|
1339
1339
|
|
|
1340
|
-
if (len
|
|
1341
|
-
if (checkType(
|
|
1342
|
-
return isinstancesof(objs, type, and, logic_or_match, strict);
|
|
1343
|
-
|
|
1344
|
-
if (len === 4) {
|
|
1345
|
-
if (
|
|
1346
|
-
not(checkType(arguments[3], boolean)) &&
|
|
1347
|
-
not(arguments[3] instanceof Boolean)
|
|
1348
|
-
)
|
|
1349
|
-
throw new TypeError("forth argument must be true or false");
|
|
1350
|
-
|
|
1351
|
-
if (checkType(arguments[2], boolean) || arguments[2] instanceof Boolean)
|
|
1340
|
+
if (len > 2 && len < 5)
|
|
1341
|
+
if (checkType(logic_or_match, boolean) || logic_or_match instanceof Boolean)
|
|
1352
1342
|
return isinstancesof(objs, type, and, logic_or_match, match_or_strict);
|
|
1353
|
-
}
|
|
1354
1343
|
|
|
1355
1344
|
return isinstancesof(objs, type, logic_or_match, match_or_strict, strict);
|
|
1356
1345
|
}
|
|
@@ -1384,9 +1373,9 @@ export function isinstance(obj, cls) {
|
|
|
1384
1373
|
* @template T - The instance type returned by the constructor(s).
|
|
1385
1374
|
* @param {*|Array<*>} objs - The object or array of objects to test.
|
|
1386
1375
|
* @param {(new (...args: any[]) => T) | Array<new (...args: any[]) => T>} type - The constructor or list of constructors to test against.
|
|
1387
|
-
* @param {"and" | "or" | boolean} logic_or_match - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
1388
|
-
* @param {boolean} match_or_strict - Whether to compare classes names strictly or loosely.
|
|
1389
|
-
* @param {boolean} strict - If `true`, enables strict comparison behavior.
|
|
1376
|
+
* @param {("and" | "or") | String | (boolean | Boolean)} logic_or_match - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
1377
|
+
* @param {boolean | Boolean} match_or_strict - Whether to compare classes names strictly or loosely.
|
|
1378
|
+
* @param {boolean | Boolean} strict - If `true`, enables strict comparison behavior.
|
|
1390
1379
|
* @returns {boolean} `true` if the provided object(s) match the given type(s) according to the chosen logic, otherwise `false`.
|
|
1391
1380
|
*/
|
|
1392
1381
|
|
|
@@ -1409,9 +1398,9 @@ export function isinstances(
|
|
|
1409
1398
|
*
|
|
1410
1399
|
* @param {* | Array<*>} data - The value or array of values to check.
|
|
1411
1400
|
* @param {* | Array<*>} dataType - The expected type or array of expected types.
|
|
1412
|
-
* @param {"and" | "or" | boolean} logic_or_match - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
1413
|
-
* @param {boolean} match_or_strict - Whether to compare type names strictly or loosely.
|
|
1414
|
-
* @param {boolean} strict - If `true`, enforces strict comparison rules.
|
|
1401
|
+
* @param {("and" | "or") | String | (boolean | Boolean)} logic_or_match - Logic mode: `"and"` requires all matches, `"or"` allows any match.
|
|
1402
|
+
* @param {boolean | Boolean} match_or_strict - Whether to compare type names strictly or loosely.
|
|
1403
|
+
* @param {boolean | Boolean} strict - If `true`, enforces strict comparison rules.
|
|
1415
1404
|
* @returns {boolean} `true` if the data matches the expected type(s) according to the given logic, otherwise `false`.
|
|
1416
1405
|
*/
|
|
1417
1406
|
|
|
@@ -1450,20 +1439,9 @@ export function isType(
|
|
|
1450
1439
|
|
|
1451
1440
|
// ================================================================
|
|
1452
1441
|
|
|
1453
|
-
if (len
|
|
1454
|
-
if (checkType(
|
|
1455
|
-
return checkType(data, dataType, and, logic_or_match, strict);
|
|
1456
|
-
|
|
1457
|
-
if (len === 4) {
|
|
1458
|
-
if (
|
|
1459
|
-
not(checkType(arguments[3], boolean)) &&
|
|
1460
|
-
not(arguments[3] instanceof Boolean)
|
|
1461
|
-
)
|
|
1462
|
-
throw new TypeError("forth argument must be true or false");
|
|
1463
|
-
|
|
1464
|
-
if (checkType(arguments[2], boolean) || arguments[2] instanceof Boolean)
|
|
1442
|
+
if (len > 2 && len < 5)
|
|
1443
|
+
if (checkType(logic_or_match, boolean) || logic_or_match instanceof Boolean)
|
|
1465
1444
|
return checkType(data, dataType, and, logic_or_match, match_or_strict);
|
|
1466
|
-
}
|
|
1467
1445
|
|
|
1468
1446
|
return checkType(data, dataType, logic_or_match, match_or_strict, strict);
|
|
1469
1447
|
}
|
|
@@ -1570,12 +1548,20 @@ export function log(...data) {
|
|
|
1570
1548
|
*/
|
|
1571
1549
|
|
|
1572
1550
|
export function not(obj) {
|
|
1573
|
-
|
|
1574
|
-
|
|
1551
|
+
/** @type {number} */
|
|
1552
|
+
|
|
1553
|
+
let len = arguments.length;
|
|
1554
|
+
|
|
1555
|
+
if (len !== 1)
|
|
1556
|
+
throw new TypeError(`not() takes exactly one argument (${len} given)`);
|
|
1557
|
+
|
|
1558
|
+
/** @type {*} */
|
|
1559
|
+
|
|
1560
|
+
let val = obj?.valueOf();
|
|
1575
1561
|
|
|
1576
|
-
if (
|
|
1562
|
+
if (!(val instanceof Object) || val instanceof Function) return !val;
|
|
1577
1563
|
|
|
1578
|
-
return
|
|
1564
|
+
return val.length === 0 || !val; // handling the true object case
|
|
1579
1565
|
}
|
|
1580
1566
|
|
|
1581
1567
|
/**
|
|
@@ -1628,6 +1614,89 @@ export function puts(...data) {
|
|
|
1628
1614
|
console.log(...data);
|
|
1629
1615
|
}
|
|
1630
1616
|
|
|
1617
|
+
/**
|
|
1618
|
+
* Validates function arguments strictly at runtime.
|
|
1619
|
+
*
|
|
1620
|
+
* Ensures that:
|
|
1621
|
+
* 1. `useStrict` is called with exactly three arguments:
|
|
1622
|
+
* - `func`: the function to validate against
|
|
1623
|
+
* - `args`: an array or array-like object of arguments intended for `func`
|
|
1624
|
+
* - `optional`: optional arguments number in the function
|
|
1625
|
+
* 2. `func` is a function.
|
|
1626
|
+
* 3. `args` is array-like.
|
|
1627
|
+
* 4. `optional` is a number.
|
|
1628
|
+
* 5. The number of elements in `args` greater than or equal the number of parameters `func` expects.
|
|
1629
|
+
* 6. The number of elements in `args` less than or equal the number of parameters `func` + `optional` expects.
|
|
1630
|
+
*
|
|
1631
|
+
* @param {Function} func - The function whose arguments are being validated.
|
|
1632
|
+
* @param {Array|IArguments} args - The array-like object of arguments to check against the function's parameter count.
|
|
1633
|
+
* @param {number | Number} optional - default arguments number in the function.
|
|
1634
|
+
* @param {boolean | Boolean} postArgs - extra argument(s) after positional and optional ones `...args: any[]`.
|
|
1635
|
+
* @throws {TypeError} If called with a number of arguments less than 2.
|
|
1636
|
+
* @throws {TypeError} If called with a number of arguments greater than 3.
|
|
1637
|
+
* @throws {TypeError} If `func` is not a function.
|
|
1638
|
+
* @throws {TypeError} If `args` is not array-like.
|
|
1639
|
+
* @throws {TypeError} If `optional` is a negative number or not a number at all.
|
|
1640
|
+
* @throws {TypeError} If the length of `args` is less than the parameters number of `func`.
|
|
1641
|
+
* @throws {TypeError} If the length of `args` is greater than the parameters number of `func` + `optional`.
|
|
1642
|
+
* @returns {void} This function does not return a value.
|
|
1643
|
+
*/
|
|
1644
|
+
|
|
1645
|
+
function strict(func, args, optional, postArgs) {
|
|
1646
|
+
if (!(func instanceof Function))
|
|
1647
|
+
throw new TypeError("first argument must be a function");
|
|
1648
|
+
|
|
1649
|
+
if (typeof args !== "object" || typeof args.length !== "number")
|
|
1650
|
+
throw new TypeError("second argument must be array-like");
|
|
1651
|
+
|
|
1652
|
+
if (
|
|
1653
|
+
(typeof optional !== "number" && !(optional instanceof Number)) ||
|
|
1654
|
+
optional < 0
|
|
1655
|
+
)
|
|
1656
|
+
throw new TypeError("third argument must be a positive number");
|
|
1657
|
+
|
|
1658
|
+
/** @type {string} */
|
|
1659
|
+
|
|
1660
|
+
const funcName = func.name;
|
|
1661
|
+
|
|
1662
|
+
/** @type {number} */
|
|
1663
|
+
|
|
1664
|
+
const paramsNumber = func.length;
|
|
1665
|
+
|
|
1666
|
+
/** @type {number} */
|
|
1667
|
+
|
|
1668
|
+
const argsNumber = args.length;
|
|
1669
|
+
|
|
1670
|
+
if (argsNumber < paramsNumber)
|
|
1671
|
+
throw new TypeError(
|
|
1672
|
+
`${funcName}() takes ${paramsNumber} positional argument(s) but ${argsNumber} were given`
|
|
1673
|
+
);
|
|
1674
|
+
|
|
1675
|
+
if (not(postArgs))
|
|
1676
|
+
if (argsNumber > paramsNumber + optional) {
|
|
1677
|
+
if (paramsNumber > 0 && optional > 0)
|
|
1678
|
+
throw new TypeError(
|
|
1679
|
+
`${funcName}() takes ${
|
|
1680
|
+
paramsNumber + optional
|
|
1681
|
+
} arguments in total but ${argsNumber} were given`
|
|
1682
|
+
);
|
|
1683
|
+
|
|
1684
|
+
if (paramsNumber > 0)
|
|
1685
|
+
throw new TypeError(
|
|
1686
|
+
`${funcName}() takes ${paramsNumber} positional argument(s) in total but ${argsNumber} were given`
|
|
1687
|
+
);
|
|
1688
|
+
|
|
1689
|
+
if (optional > 0)
|
|
1690
|
+
throw new TypeError(
|
|
1691
|
+
`${funcName}() takes ${optional} optional argument(s) in total but ${argsNumber} were given`
|
|
1692
|
+
);
|
|
1693
|
+
|
|
1694
|
+
throw new TypeError(
|
|
1695
|
+
`${funcName}() takes no argument(s) but ${argsNumber} were given`
|
|
1696
|
+
);
|
|
1697
|
+
}
|
|
1698
|
+
}
|
|
1699
|
+
|
|
1631
1700
|
/**
|
|
1632
1701
|
* Returns the JavaScript type of a value using the `typeof` operator.
|
|
1633
1702
|
*
|
|
@@ -1708,31 +1777,19 @@ export function typesof(...objs) {
|
|
|
1708
1777
|
/**
|
|
1709
1778
|
* Validates function arguments strictly at runtime.
|
|
1710
1779
|
*
|
|
1711
|
-
* Ensures that:
|
|
1712
|
-
* 1. `useStrict` is called with exactly three arguments:
|
|
1713
|
-
* - `func`: the function to validate against
|
|
1714
|
-
* - `args`: an array or array-like object of arguments intended for `func`
|
|
1715
|
-
* - `optional`: optional arguments number in the function
|
|
1716
|
-
* 2. `func` is a function.
|
|
1717
|
-
* 3. `args` is array-like.
|
|
1718
|
-
* 4. `optional` is a number.
|
|
1719
|
-
* 5. The number of elements in `args` greater than or equal the number of parameters `func` expects.
|
|
1720
|
-
* 6. The number of elements in `args` less than or equal the number of parameters `func` + `optional` expects.
|
|
1721
|
-
*
|
|
1722
1780
|
* @param {Function} func - The function whose arguments are being validated.
|
|
1723
1781
|
* @param {Array|IArguments} args - The array-like object of arguments to check against the function's parameter count.
|
|
1724
|
-
* @param {number}
|
|
1725
|
-
* @
|
|
1726
|
-
* @throws {TypeError} If called with a number of arguments greater than 3.
|
|
1727
|
-
* @throws {TypeError} If `func` is not a function.
|
|
1728
|
-
* @throws {TypeError} If `args` is not array-like.
|
|
1729
|
-
* @throws {TypeError} If `optional` is a negative number or not a number at all.
|
|
1730
|
-
* @throws {TypeError} If the length of `args` is less than the parameters number of `func`.
|
|
1731
|
-
* @throws {TypeError} If the length of `args` is greater than the parameters number of `func` + `optional`.
|
|
1782
|
+
* @param {number | Number} optional_or_postArgs - default arguments number in the function.
|
|
1783
|
+
* @param {boolean | Boolean} postArgs - extra argument(s) after positional and optional ones `...args: any[]`.
|
|
1732
1784
|
* @returns {void} This function does not return a value.
|
|
1733
1785
|
*/
|
|
1734
1786
|
|
|
1735
|
-
export function useStrict(
|
|
1787
|
+
export function useStrict(
|
|
1788
|
+
func,
|
|
1789
|
+
args,
|
|
1790
|
+
optional_or_postArgs = 0,
|
|
1791
|
+
postArgs = false
|
|
1792
|
+
) {
|
|
1736
1793
|
/** @type {number} */
|
|
1737
1794
|
|
|
1738
1795
|
const len = arguments.length;
|
|
@@ -1744,59 +1801,22 @@ export function useStrict(func, args, optional = 0) {
|
|
|
1744
1801
|
: "useStrict() missing 2 required arguments: 'func' and 'args'"
|
|
1745
1802
|
);
|
|
1746
1803
|
|
|
1747
|
-
if (len >
|
|
1748
|
-
throw TypeError(
|
|
1749
|
-
`useStrict() takes
|
|
1750
|
-
);
|
|
1751
|
-
|
|
1752
|
-
if (!(func instanceof Function))
|
|
1753
|
-
throw TypeError("first argument must be a function");
|
|
1754
|
-
|
|
1755
|
-
if (typeof args !== "object" || typeof args.length !== "number")
|
|
1756
|
-
throw TypeError("second argument must be array-like");
|
|
1757
|
-
|
|
1758
|
-
if (typeof optional !== "number" || optional < 0)
|
|
1759
|
-
throw TypeError("third argument must be a positive number");
|
|
1760
|
-
|
|
1761
|
-
/** @type {string} */
|
|
1762
|
-
|
|
1763
|
-
const funcName = func.name;
|
|
1764
|
-
|
|
1765
|
-
/** @type {number} */
|
|
1766
|
-
|
|
1767
|
-
const paramsNumber = func.length;
|
|
1768
|
-
|
|
1769
|
-
/** @type {number} */
|
|
1770
|
-
|
|
1771
|
-
const argsNumber = args.length;
|
|
1772
|
-
|
|
1773
|
-
if (argsNumber < paramsNumber)
|
|
1774
|
-
throw TypeError(
|
|
1775
|
-
`${funcName}() takes ${paramsNumber} positional argument(s) but ${argsNumber} were given`
|
|
1804
|
+
if (len > 4)
|
|
1805
|
+
throw new TypeError(
|
|
1806
|
+
`useStrict() takes 4 arguments in total but ${len} were given`
|
|
1776
1807
|
);
|
|
1777
1808
|
|
|
1778
|
-
if (
|
|
1779
|
-
if (
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
);
|
|
1785
|
-
|
|
1786
|
-
if (paramsNumber > 0)
|
|
1787
|
-
throw TypeError(
|
|
1788
|
-
`${funcName}() takes ${paramsNumber} positional argument(s) in total but ${argsNumber} were given`
|
|
1789
|
-
);
|
|
1790
|
-
|
|
1791
|
-
if (optional > 0)
|
|
1792
|
-
throw TypeError(
|
|
1793
|
-
`${funcName}() takes ${optional} optional argument(s) in total but ${argsNumber} were given`
|
|
1794
|
-
);
|
|
1809
|
+
if (len === 3) {
|
|
1810
|
+
if (
|
|
1811
|
+
typeof optional_or_postArgs === "boolean" ||
|
|
1812
|
+
optional_or_postArgs instanceof Boolean
|
|
1813
|
+
)
|
|
1814
|
+
strict(func, args, 0, optional_or_postArgs);
|
|
1795
1815
|
|
|
1796
|
-
|
|
1797
|
-
`${funcName}() takes no argument(s) but ${argsNumber} were given`
|
|
1798
|
-
);
|
|
1816
|
+
return;
|
|
1799
1817
|
}
|
|
1818
|
+
|
|
1819
|
+
strict(func, args, optional_or_postArgs, postArgs);
|
|
1800
1820
|
}
|
|
1801
1821
|
|
|
1802
1822
|
/**
|