@bbn/bbn 1.0.131 → 1.0.133
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 -54
- package/dist/index.js +52 -52
- 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,128 +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
|
+
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
|
-
}
|
|
113
|
-
else if (parOpened > parClosed) {
|
|
110
|
+
else if (all[i] === ",") {
|
|
111
|
+
if (parOpened > parClosed) {
|
|
114
112
|
if (settingDefault) {
|
|
115
|
-
currentArg[
|
|
113
|
+
currentArg["default"] = exp.trim();
|
|
116
114
|
settingDefault = false;
|
|
117
115
|
}
|
|
118
116
|
else if (exp) {
|
|
119
|
-
currentArg[
|
|
117
|
+
currentArg["name"] = exp.trim();
|
|
120
118
|
}
|
|
121
|
-
if (currentArg[
|
|
119
|
+
if (currentArg["name"] || currentArg["default"]) {
|
|
122
120
|
args.push(currentArg);
|
|
123
121
|
currentArg = {};
|
|
124
122
|
}
|
|
125
|
-
exp =
|
|
123
|
+
exp = "";
|
|
126
124
|
}
|
|
127
125
|
else {
|
|
128
126
|
throw Error("Unexpected ',' while parsing function");
|
|
129
127
|
}
|
|
130
128
|
}
|
|
131
|
-
else if (all[i] ===
|
|
129
|
+
else if (all[i] === "{" || all[i] === "}") {
|
|
132
130
|
if (parOpened === parClosed) {
|
|
133
131
|
body = all.substring(i).trim();
|
|
134
132
|
break;
|
|
135
133
|
}
|
|
136
134
|
else {
|
|
137
135
|
if (parOpened > parClosed) {
|
|
138
|
-
if (all[i] ===
|
|
136
|
+
if (all[i] === "{" && !isDestructuring) {
|
|
139
137
|
isDestructuring = true;
|
|
140
138
|
}
|
|
141
|
-
else if (all[i] ===
|
|
139
|
+
else if (all[i] === "}" && isDestructuring) {
|
|
142
140
|
isDestructuring = false;
|
|
143
141
|
}
|
|
144
142
|
}
|
|
145
|
-
exp =
|
|
143
|
+
exp = "";
|
|
146
144
|
}
|
|
147
145
|
}
|
|
148
146
|
else if (isArrow) {
|
|
149
|
-
body = all.substring(all.indexOf(
|
|
147
|
+
body = all.substring(all.indexOf("=>") + 2).trim();
|
|
150
148
|
break;
|
|
151
149
|
}
|
|
152
|
-
else if (all[i] ===
|
|
153
|
-
if (exp.trim() !==
|
|
154
|
-
if (exp.trim() ===
|
|
150
|
+
else if (all[i] === " ") {
|
|
151
|
+
if (exp.trim() !== "") {
|
|
152
|
+
if (exp.trim() === "async") {
|
|
155
153
|
isAsync = true;
|
|
156
154
|
}
|
|
157
|
-
exp =
|
|
155
|
+
exp = "";
|
|
158
156
|
}
|
|
159
157
|
}
|
|
160
158
|
else {
|
|
@@ -166,11 +164,13 @@ var analyzeFunction = function (fn) {
|
|
|
166
164
|
body = exp;
|
|
167
165
|
}
|
|
168
166
|
else {
|
|
169
|
-
throw Error(
|
|
167
|
+
throw Error("Unexpected end of function while parsing function");
|
|
170
168
|
}
|
|
171
169
|
}
|
|
172
|
-
var argString = args
|
|
173
|
-
|
|
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 : ""));
|
|
174
174
|
return {
|
|
175
175
|
body: body,
|
|
176
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,128 +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
|
+
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
|
-
}
|
|
3430
|
-
else if (parOpened > parClosed) {
|
|
3427
|
+
else if (all[i] === ",") {
|
|
3428
|
+
if (parOpened > parClosed) {
|
|
3431
3429
|
if (settingDefault) {
|
|
3432
|
-
currentArg[
|
|
3430
|
+
currentArg["default"] = exp.trim();
|
|
3433
3431
|
settingDefault = false;
|
|
3434
3432
|
}
|
|
3435
3433
|
else if (exp) {
|
|
3436
|
-
currentArg[
|
|
3434
|
+
currentArg["name"] = exp.trim();
|
|
3437
3435
|
}
|
|
3438
|
-
if (currentArg[
|
|
3436
|
+
if (currentArg["name"] || currentArg["default"]) {
|
|
3439
3437
|
args.push(currentArg);
|
|
3440
3438
|
currentArg = {};
|
|
3441
3439
|
}
|
|
3442
|
-
exp =
|
|
3440
|
+
exp = "";
|
|
3443
3441
|
}
|
|
3444
3442
|
else {
|
|
3445
3443
|
throw Error("Unexpected ',' while parsing function");
|
|
3446
3444
|
}
|
|
3447
3445
|
}
|
|
3448
|
-
else if (all[i] ===
|
|
3446
|
+
else if (all[i] === "{" || all[i] === "}") {
|
|
3449
3447
|
if (parOpened === parClosed) {
|
|
3450
3448
|
body = all.substring(i).trim();
|
|
3451
3449
|
break;
|
|
3452
3450
|
}
|
|
3453
3451
|
else {
|
|
3454
3452
|
if (parOpened > parClosed) {
|
|
3455
|
-
if (all[i] ===
|
|
3453
|
+
if (all[i] === "{" && !isDestructuring) {
|
|
3456
3454
|
isDestructuring = true;
|
|
3457
3455
|
}
|
|
3458
|
-
else if (all[i] ===
|
|
3456
|
+
else if (all[i] === "}" && isDestructuring) {
|
|
3459
3457
|
isDestructuring = false;
|
|
3460
3458
|
}
|
|
3461
3459
|
}
|
|
3462
|
-
exp =
|
|
3460
|
+
exp = "";
|
|
3463
3461
|
}
|
|
3464
3462
|
}
|
|
3465
3463
|
else if (isArrow) {
|
|
3466
|
-
body = all.substring(all.indexOf(
|
|
3464
|
+
body = all.substring(all.indexOf("=>") + 2).trim();
|
|
3467
3465
|
break;
|
|
3468
3466
|
}
|
|
3469
|
-
else if (all[i] ===
|
|
3470
|
-
if (exp.trim() !==
|
|
3471
|
-
if (exp.trim() ===
|
|
3467
|
+
else if (all[i] === " ") {
|
|
3468
|
+
if (exp.trim() !== "") {
|
|
3469
|
+
if (exp.trim() === "async") {
|
|
3472
3470
|
isAsync = true;
|
|
3473
3471
|
}
|
|
3474
|
-
exp =
|
|
3472
|
+
exp = "";
|
|
3475
3473
|
}
|
|
3476
3474
|
}
|
|
3477
3475
|
else {
|
|
@@ -3483,11 +3481,13 @@
|
|
|
3483
3481
|
body = exp;
|
|
3484
3482
|
}
|
|
3485
3483
|
else {
|
|
3486
|
-
throw Error(
|
|
3484
|
+
throw Error("Unexpected end of function while parsing function");
|
|
3487
3485
|
}
|
|
3488
3486
|
}
|
|
3489
|
-
var argString = args
|
|
3490
|
-
|
|
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 : ""));
|
|
3491
3491
|
return {
|
|
3492
3492
|
body: body,
|
|
3493
3493
|
args: args,
|