Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80537 views
1
module.exports = mine;
2
3
function mine (js) {
4
js = String(js);
5
var names = [];
6
var state = 0;
7
var ident;
8
var quote;
9
var name;
10
var start;
11
12
var isIdent = /[a-z0-9_.]/i;
13
var isWhitespace = /[ \r\n\t]/;
14
15
function $start (char) {
16
if (char === "/") {
17
return $slash;
18
}
19
if (char === "'" || char === '"') {
20
quote = char;
21
return $string;
22
}
23
if (isIdent.test(char)) {
24
ident = char;
25
return $ident;
26
}
27
return $start;
28
}
29
30
function $ident (char) {
31
if (isIdent.test(char)) {
32
ident += char;
33
return $ident;
34
}
35
if (char === "(" && ident === "require") {
36
ident = undefined;
37
return $call;
38
}
39
else if (isWhitespace.test(char)){
40
if (ident !== 'yield' && ident !== 'return'){
41
return $ident;
42
}
43
}
44
return $start(char);
45
}
46
47
function $call (char) {
48
if (isWhitespace.test(char)) return $call;
49
if (char === "'" || char === '"') {
50
quote = char;
51
name = "";
52
start = i + 1;
53
return $name;
54
}
55
return $start(char);
56
}
57
58
function $name (char) {
59
if (char === quote) {
60
return $close;
61
}
62
name += char;
63
return $name;
64
}
65
66
function $close (char) {
67
if (isWhitespace.test(char)) return $close;
68
if (char === ")" || char === ',') {
69
names.push({
70
name: name,
71
offset: start
72
});
73
}
74
name = undefined;
75
return $start(char);
76
}
77
78
function $string (char) {
79
if (char === "\\") {
80
return $escape;
81
}
82
if (char === quote) {
83
return $start;
84
}
85
return $string;
86
}
87
88
function $escape (char) {
89
return $string;
90
}
91
92
function $slash (char) {
93
if (char === "/") return $lineComment;
94
if (char === "*") return $multilineComment;
95
return $start(char);
96
}
97
98
function $lineComment (char) {
99
if (char === "\r" || char === "\n") return $start;
100
return $lineComment;
101
}
102
103
function $multilineComment (char) {
104
if (char === "*") return $multilineEnding;
105
return $multilineComment;
106
}
107
108
function $multilineEnding (char) {
109
if (char === "/") return $start;
110
if (char === "*") return $multilineEnding;
111
return $multilineComment;
112
}
113
114
var state = $start;
115
for (var i = 0, l = js.length; i < l; i++) {
116
state = state(js[i]);
117
}
118
return names;
119
}
120
121