@bbn/bbn 1.0.132 → 1.0.134
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/dist/fn/misc/analyzeFunction.js +54 -55
- package/dist/index.js +52 -53
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { md5 } from
|
|
2
|
-
import { log } from
|
|
1
|
+
import { md5 } from "../string/md5.js";
|
|
2
|
+
import { log } from "../browser/log.js";
|
|
3
3
|
/**
|
|
4
4
|
* Analyzes the given function and extracts details about its structure.
|
|
5
5
|
*
|
|
@@ -9,23 +9,23 @@ import { log } from '../browser/log.js';
|
|
|
9
9
|
* @throws {Error} When unexpected syntax is encountered while parsing.
|
|
10
10
|
*/
|
|
11
11
|
var analyzeFunction = function (fn) {
|
|
12
|
-
var all = typeof fn ===
|
|
13
|
-
if (typeof all !==
|
|
14
|
-
throw Error(
|
|
12
|
+
var all = typeof fn === "function" ? fn.toString() : fn;
|
|
13
|
+
if (typeof all !== "string") {
|
|
14
|
+
throw Error("Unexpected type " + typeof fn + " while parsing function");
|
|
15
15
|
}
|
|
16
16
|
log("INSIDE ANALYZE FUNCTION", all);
|
|
17
|
-
var exp =
|
|
17
|
+
var exp = "";
|
|
18
18
|
var isArrow = false;
|
|
19
19
|
var isAsync = false;
|
|
20
20
|
var hasFunction = false;
|
|
21
|
-
var name =
|
|
21
|
+
var name = "";
|
|
22
22
|
var parOpened = 0;
|
|
23
23
|
var parClosed = 0;
|
|
24
24
|
var args = [];
|
|
25
25
|
var currentArg = {};
|
|
26
26
|
var body;
|
|
27
|
-
var currentQuote =
|
|
28
|
-
var escapable = ['"', "'",
|
|
27
|
+
var currentQuote = "";
|
|
28
|
+
var escapable = ['"', "'", "`"];
|
|
29
29
|
var isEscaped = false;
|
|
30
30
|
var settingDefault = false;
|
|
31
31
|
var isComment = false;
|
|
@@ -33,129 +33,126 @@ var analyzeFunction = function (fn) {
|
|
|
33
33
|
var isDestructuring = false;
|
|
34
34
|
for (var i = 0; i < all.length; i++) {
|
|
35
35
|
// Handle string literals
|
|
36
|
-
if (!isComment && all[i] ===
|
|
36
|
+
if (!isComment && all[i] === "/" && all[i + 1] === "*") {
|
|
37
37
|
isComment = true;
|
|
38
|
-
exp =
|
|
38
|
+
exp = "";
|
|
39
39
|
}
|
|
40
|
-
else if (all[i] ===
|
|
40
|
+
else if (all[i] === "*" && all[i + 1] === "/") {
|
|
41
41
|
isComment = false;
|
|
42
42
|
}
|
|
43
|
-
else if (!isCommentLine && all[i] ===
|
|
43
|
+
else if (!isCommentLine && all[i] === "/" && all[i + 1] === "/") {
|
|
44
44
|
isCommentLine = true;
|
|
45
|
-
exp =
|
|
45
|
+
exp = "";
|
|
46
46
|
}
|
|
47
|
-
else if (all[i] ===
|
|
47
|
+
else if (all[i] === "\n") {
|
|
48
48
|
isCommentLine = false;
|
|
49
49
|
}
|
|
50
50
|
else if (isComment || isCommentLine) {
|
|
51
51
|
continue;
|
|
52
52
|
}
|
|
53
53
|
else if (all[i] === currentQuote && !isEscaped && currentQuote) {
|
|
54
|
-
currentQuote =
|
|
54
|
+
currentQuote = "";
|
|
55
55
|
exp += all[i];
|
|
56
56
|
}
|
|
57
57
|
else if (currentQuote) {
|
|
58
|
-
isEscaped = all[i] ===
|
|
58
|
+
isEscaped = all[i] === "\\" && !isEscaped;
|
|
59
59
|
exp += all[i];
|
|
60
60
|
}
|
|
61
61
|
else if (escapable.includes(all[i]) && !isEscaped) {
|
|
62
62
|
currentQuote = all[i];
|
|
63
63
|
exp += all[i];
|
|
64
64
|
}
|
|
65
|
-
else if (all[i] ===
|
|
65
|
+
else if (all[i] === "(") {
|
|
66
66
|
parOpened++;
|
|
67
|
-
if (exp.trim() !==
|
|
68
|
-
if (exp.trim() ===
|
|
67
|
+
if (exp.trim() !== "") {
|
|
68
|
+
if (exp.trim() === "function") {
|
|
69
69
|
hasFunction = true;
|
|
70
70
|
}
|
|
71
|
-
if (exp.trim() !==
|
|
71
|
+
else if (exp.trim() !== "async") {
|
|
72
72
|
name = exp.trim();
|
|
73
73
|
}
|
|
74
|
-
exp =
|
|
74
|
+
exp = "";
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
-
else if (all[i] ===
|
|
77
|
+
else if (all[i] === ")") {
|
|
78
78
|
if (parOpened === parClosed + 1) {
|
|
79
79
|
if (settingDefault) {
|
|
80
|
-
currentArg[
|
|
80
|
+
currentArg["default"] = exp.trim();
|
|
81
81
|
settingDefault = false;
|
|
82
82
|
}
|
|
83
83
|
else if (exp) {
|
|
84
|
-
currentArg[
|
|
84
|
+
currentArg["name"] = exp.trim();
|
|
85
85
|
}
|
|
86
|
-
if (currentArg[
|
|
86
|
+
if (currentArg["name"] || currentArg["default"]) {
|
|
87
87
|
args.push(currentArg);
|
|
88
88
|
currentArg = {};
|
|
89
89
|
}
|
|
90
|
-
exp =
|
|
90
|
+
exp = "";
|
|
91
91
|
}
|
|
92
92
|
parClosed++;
|
|
93
93
|
}
|
|
94
|
-
else if (all[i] ===
|
|
95
|
-
if (exp.trim() !==
|
|
96
|
-
currentArg[
|
|
94
|
+
else if (all[i] === "=" && all[i + 1] === ">") {
|
|
95
|
+
if (exp.trim() !== "" && parOpened === parClosed) {
|
|
96
|
+
currentArg["name"] = exp.trim();
|
|
97
97
|
args.push(currentArg);
|
|
98
98
|
currentArg = {};
|
|
99
|
-
exp =
|
|
99
|
+
exp = "";
|
|
100
100
|
}
|
|
101
101
|
isArrow = true;
|
|
102
102
|
i++;
|
|
103
103
|
continue;
|
|
104
104
|
}
|
|
105
|
-
else if (all[i] ===
|
|
106
|
-
currentArg[
|
|
107
|
-
exp =
|
|
105
|
+
else if (all[i] === "=" && parOpened > parClosed && !settingDefault) {
|
|
106
|
+
currentArg["name"] = exp.trim();
|
|
107
|
+
exp = "";
|
|
108
108
|
settingDefault = true;
|
|
109
109
|
}
|
|
110
|
-
else if (all[i] ===
|
|
111
|
-
if (
|
|
112
|
-
exp += all[i];
|
|
113
|
-
}
|
|
114
|
-
else if (parOpened > parClosed) {
|
|
110
|
+
else if (all[i] === ",") {
|
|
111
|
+
if (parOpened > parClosed) {
|
|
115
112
|
if (settingDefault) {
|
|
116
|
-
currentArg[
|
|
113
|
+
currentArg["default"] = exp.trim();
|
|
117
114
|
settingDefault = false;
|
|
118
115
|
}
|
|
119
116
|
else if (exp) {
|
|
120
|
-
currentArg[
|
|
117
|
+
currentArg["name"] = exp.trim();
|
|
121
118
|
}
|
|
122
|
-
if (currentArg[
|
|
119
|
+
if (currentArg["name"] || currentArg["default"]) {
|
|
123
120
|
args.push(currentArg);
|
|
124
121
|
currentArg = {};
|
|
125
122
|
}
|
|
126
|
-
exp =
|
|
123
|
+
exp = "";
|
|
127
124
|
}
|
|
128
125
|
else {
|
|
129
126
|
throw Error("Unexpected ',' while parsing function");
|
|
130
127
|
}
|
|
131
128
|
}
|
|
132
|
-
else if (all[i] ===
|
|
129
|
+
else if (all[i] === "{" || all[i] === "}") {
|
|
133
130
|
if (parOpened === parClosed) {
|
|
134
131
|
body = all.substring(i).trim();
|
|
135
132
|
break;
|
|
136
133
|
}
|
|
137
134
|
else {
|
|
138
135
|
if (parOpened > parClosed) {
|
|
139
|
-
if (all[i] ===
|
|
136
|
+
if (all[i] === "{" && !isDestructuring) {
|
|
140
137
|
isDestructuring = true;
|
|
141
138
|
}
|
|
142
|
-
else if (all[i] ===
|
|
139
|
+
else if (all[i] === "}" && isDestructuring) {
|
|
143
140
|
isDestructuring = false;
|
|
144
141
|
}
|
|
145
142
|
}
|
|
146
|
-
exp =
|
|
143
|
+
exp = "";
|
|
147
144
|
}
|
|
148
145
|
}
|
|
149
146
|
else if (isArrow) {
|
|
150
|
-
body = all.substring(all.indexOf(
|
|
147
|
+
body = all.substring(all.indexOf("=>") + 2).trim();
|
|
151
148
|
break;
|
|
152
149
|
}
|
|
153
|
-
else if (all[i] ===
|
|
154
|
-
if (exp.trim() !==
|
|
155
|
-
if (exp.trim() ===
|
|
150
|
+
else if (all[i] === " ") {
|
|
151
|
+
if (exp.trim() !== "") {
|
|
152
|
+
if (exp.trim() === "async") {
|
|
156
153
|
isAsync = true;
|
|
157
154
|
}
|
|
158
|
-
exp =
|
|
155
|
+
exp = "";
|
|
159
156
|
}
|
|
160
157
|
}
|
|
161
158
|
else {
|
|
@@ -167,11 +164,13 @@ var analyzeFunction = function (fn) {
|
|
|
167
164
|
body = exp;
|
|
168
165
|
}
|
|
169
166
|
else {
|
|
170
|
-
throw Error(
|
|
167
|
+
throw Error("Unexpected end of function while parsing function");
|
|
171
168
|
}
|
|
172
169
|
}
|
|
173
|
-
var argString = args
|
|
174
|
-
|
|
170
|
+
var argString = args
|
|
171
|
+
.map(function (arg) { return arg.name + (arg.default ? " = " + arg.default : ""); })
|
|
172
|
+
.join(", ");
|
|
173
|
+
var hash = md5(body + (name ? "-" + name : "") + (argString ? "-" + argString : ""));
|
|
175
174
|
return {
|
|
176
175
|
body: body,
|
|
177
176
|
args: args,
|
package/dist/index.js
CHANGED
|
@@ -3326,23 +3326,23 @@
|
|
|
3326
3326
|
* @throws {Error} When unexpected syntax is encountered while parsing.
|
|
3327
3327
|
*/
|
|
3328
3328
|
var analyzeFunction = function (fn) {
|
|
3329
|
-
var all = typeof fn ===
|
|
3330
|
-
if (typeof all !==
|
|
3331
|
-
throw Error(
|
|
3329
|
+
var all = typeof fn === "function" ? fn.toString() : fn;
|
|
3330
|
+
if (typeof all !== "string") {
|
|
3331
|
+
throw Error("Unexpected type " + typeof fn + " while parsing function");
|
|
3332
3332
|
}
|
|
3333
3333
|
(0, log_js_8.log)("INSIDE ANALYZE FUNCTION", all);
|
|
3334
|
-
var exp =
|
|
3334
|
+
var exp = "";
|
|
3335
3335
|
var isArrow = false;
|
|
3336
3336
|
var isAsync = false;
|
|
3337
3337
|
var hasFunction = false;
|
|
3338
|
-
var name =
|
|
3338
|
+
var name = "";
|
|
3339
3339
|
var parOpened = 0;
|
|
3340
3340
|
var parClosed = 0;
|
|
3341
3341
|
var args = [];
|
|
3342
3342
|
var currentArg = {};
|
|
3343
3343
|
var body;
|
|
3344
|
-
var currentQuote =
|
|
3345
|
-
var escapable = ['"', "'",
|
|
3344
|
+
var currentQuote = "";
|
|
3345
|
+
var escapable = ['"', "'", "`"];
|
|
3346
3346
|
var isEscaped = false;
|
|
3347
3347
|
var settingDefault = false;
|
|
3348
3348
|
var isComment = false;
|
|
@@ -3350,129 +3350,126 @@
|
|
|
3350
3350
|
var isDestructuring = false;
|
|
3351
3351
|
for (var i = 0; i < all.length; i++) {
|
|
3352
3352
|
// Handle string literals
|
|
3353
|
-
if (!isComment && all[i] ===
|
|
3353
|
+
if (!isComment && all[i] === "/" && all[i + 1] === "*") {
|
|
3354
3354
|
isComment = true;
|
|
3355
|
-
exp =
|
|
3355
|
+
exp = "";
|
|
3356
3356
|
}
|
|
3357
|
-
else if (all[i] ===
|
|
3357
|
+
else if (all[i] === "*" && all[i + 1] === "/") {
|
|
3358
3358
|
isComment = false;
|
|
3359
3359
|
}
|
|
3360
|
-
else if (!isCommentLine && all[i] ===
|
|
3360
|
+
else if (!isCommentLine && all[i] === "/" && all[i + 1] === "/") {
|
|
3361
3361
|
isCommentLine = true;
|
|
3362
|
-
exp =
|
|
3362
|
+
exp = "";
|
|
3363
3363
|
}
|
|
3364
|
-
else if (all[i] ===
|
|
3364
|
+
else if (all[i] === "\n") {
|
|
3365
3365
|
isCommentLine = false;
|
|
3366
3366
|
}
|
|
3367
3367
|
else if (isComment || isCommentLine) {
|
|
3368
3368
|
continue;
|
|
3369
3369
|
}
|
|
3370
3370
|
else if (all[i] === currentQuote && !isEscaped && currentQuote) {
|
|
3371
|
-
currentQuote =
|
|
3371
|
+
currentQuote = "";
|
|
3372
3372
|
exp += all[i];
|
|
3373
3373
|
}
|
|
3374
3374
|
else if (currentQuote) {
|
|
3375
|
-
isEscaped = all[i] ===
|
|
3375
|
+
isEscaped = all[i] === "\\" && !isEscaped;
|
|
3376
3376
|
exp += all[i];
|
|
3377
3377
|
}
|
|
3378
3378
|
else if (escapable.includes(all[i]) && !isEscaped) {
|
|
3379
3379
|
currentQuote = all[i];
|
|
3380
3380
|
exp += all[i];
|
|
3381
3381
|
}
|
|
3382
|
-
else if (all[i] ===
|
|
3382
|
+
else if (all[i] === "(") {
|
|
3383
3383
|
parOpened++;
|
|
3384
|
-
if (exp.trim() !==
|
|
3385
|
-
if (exp.trim() ===
|
|
3384
|
+
if (exp.trim() !== "") {
|
|
3385
|
+
if (exp.trim() === "function") {
|
|
3386
3386
|
hasFunction = true;
|
|
3387
3387
|
}
|
|
3388
|
-
if (exp.trim() !==
|
|
3388
|
+
else if (exp.trim() !== "async") {
|
|
3389
3389
|
name = exp.trim();
|
|
3390
3390
|
}
|
|
3391
|
-
exp =
|
|
3391
|
+
exp = "";
|
|
3392
3392
|
}
|
|
3393
3393
|
}
|
|
3394
|
-
else if (all[i] ===
|
|
3394
|
+
else if (all[i] === ")") {
|
|
3395
3395
|
if (parOpened === parClosed + 1) {
|
|
3396
3396
|
if (settingDefault) {
|
|
3397
|
-
currentArg[
|
|
3397
|
+
currentArg["default"] = exp.trim();
|
|
3398
3398
|
settingDefault = false;
|
|
3399
3399
|
}
|
|
3400
3400
|
else if (exp) {
|
|
3401
|
-
currentArg[
|
|
3401
|
+
currentArg["name"] = exp.trim();
|
|
3402
3402
|
}
|
|
3403
|
-
if (currentArg[
|
|
3403
|
+
if (currentArg["name"] || currentArg["default"]) {
|
|
3404
3404
|
args.push(currentArg);
|
|
3405
3405
|
currentArg = {};
|
|
3406
3406
|
}
|
|
3407
|
-
exp =
|
|
3407
|
+
exp = "";
|
|
3408
3408
|
}
|
|
3409
3409
|
parClosed++;
|
|
3410
3410
|
}
|
|
3411
|
-
else if (all[i] ===
|
|
3412
|
-
if (exp.trim() !==
|
|
3413
|
-
currentArg[
|
|
3411
|
+
else if (all[i] === "=" && all[i + 1] === ">") {
|
|
3412
|
+
if (exp.trim() !== "" && parOpened === parClosed) {
|
|
3413
|
+
currentArg["name"] = exp.trim();
|
|
3414
3414
|
args.push(currentArg);
|
|
3415
3415
|
currentArg = {};
|
|
3416
|
-
exp =
|
|
3416
|
+
exp = "";
|
|
3417
3417
|
}
|
|
3418
3418
|
isArrow = true;
|
|
3419
3419
|
i++;
|
|
3420
3420
|
continue;
|
|
3421
3421
|
}
|
|
3422
|
-
else if (all[i] ===
|
|
3423
|
-
currentArg[
|
|
3424
|
-
exp =
|
|
3422
|
+
else if (all[i] === "=" && parOpened > parClosed && !settingDefault) {
|
|
3423
|
+
currentArg["name"] = exp.trim();
|
|
3424
|
+
exp = "";
|
|
3425
3425
|
settingDefault = true;
|
|
3426
3426
|
}
|
|
3427
|
-
else if (all[i] ===
|
|
3428
|
-
if (
|
|
3429
|
-
exp += all[i];
|
|
3430
|
-
}
|
|
3431
|
-
else if (parOpened > parClosed) {
|
|
3427
|
+
else if (all[i] === ",") {
|
|
3428
|
+
if (parOpened > parClosed) {
|
|
3432
3429
|
if (settingDefault) {
|
|
3433
|
-
currentArg[
|
|
3430
|
+
currentArg["default"] = exp.trim();
|
|
3434
3431
|
settingDefault = false;
|
|
3435
3432
|
}
|
|
3436
3433
|
else if (exp) {
|
|
3437
|
-
currentArg[
|
|
3434
|
+
currentArg["name"] = exp.trim();
|
|
3438
3435
|
}
|
|
3439
|
-
if (currentArg[
|
|
3436
|
+
if (currentArg["name"] || currentArg["default"]) {
|
|
3440
3437
|
args.push(currentArg);
|
|
3441
3438
|
currentArg = {};
|
|
3442
3439
|
}
|
|
3443
|
-
exp =
|
|
3440
|
+
exp = "";
|
|
3444
3441
|
}
|
|
3445
3442
|
else {
|
|
3446
3443
|
throw Error("Unexpected ',' while parsing function");
|
|
3447
3444
|
}
|
|
3448
3445
|
}
|
|
3449
|
-
else if (all[i] ===
|
|
3446
|
+
else if (all[i] === "{" || all[i] === "}") {
|
|
3450
3447
|
if (parOpened === parClosed) {
|
|
3451
3448
|
body = all.substring(i).trim();
|
|
3452
3449
|
break;
|
|
3453
3450
|
}
|
|
3454
3451
|
else {
|
|
3455
3452
|
if (parOpened > parClosed) {
|
|
3456
|
-
if (all[i] ===
|
|
3453
|
+
if (all[i] === "{" && !isDestructuring) {
|
|
3457
3454
|
isDestructuring = true;
|
|
3458
3455
|
}
|
|
3459
|
-
else if (all[i] ===
|
|
3456
|
+
else if (all[i] === "}" && isDestructuring) {
|
|
3460
3457
|
isDestructuring = false;
|
|
3461
3458
|
}
|
|
3462
3459
|
}
|
|
3463
|
-
exp =
|
|
3460
|
+
exp = "";
|
|
3464
3461
|
}
|
|
3465
3462
|
}
|
|
3466
3463
|
else if (isArrow) {
|
|
3467
|
-
body = all.substring(all.indexOf(
|
|
3464
|
+
body = all.substring(all.indexOf("=>") + 2).trim();
|
|
3468
3465
|
break;
|
|
3469
3466
|
}
|
|
3470
|
-
else if (all[i] ===
|
|
3471
|
-
if (exp.trim() !==
|
|
3472
|
-
if (exp.trim() ===
|
|
3467
|
+
else if (all[i] === " ") {
|
|
3468
|
+
if (exp.trim() !== "") {
|
|
3469
|
+
if (exp.trim() === "async") {
|
|
3473
3470
|
isAsync = true;
|
|
3474
3471
|
}
|
|
3475
|
-
exp =
|
|
3472
|
+
exp = "";
|
|
3476
3473
|
}
|
|
3477
3474
|
}
|
|
3478
3475
|
else {
|
|
@@ -3484,11 +3481,13 @@
|
|
|
3484
3481
|
body = exp;
|
|
3485
3482
|
}
|
|
3486
3483
|
else {
|
|
3487
|
-
throw Error(
|
|
3484
|
+
throw Error("Unexpected end of function while parsing function");
|
|
3488
3485
|
}
|
|
3489
3486
|
}
|
|
3490
|
-
var argString = args
|
|
3491
|
-
|
|
3487
|
+
var argString = args
|
|
3488
|
+
.map(function (arg) { return arg.name + (arg.default ? " = " + arg.default : ""); })
|
|
3489
|
+
.join(", ");
|
|
3490
|
+
var hash = (0, md5_js_2.md5)(body + (name ? "-" + name : "") + (argString ? "-" + argString : ""));
|
|
3492
3491
|
return {
|
|
3493
3492
|
body: body,
|
|
3494
3493
|
args: args,
|