@fluixi/utils 1.0.0-alpha.82 → 1.0.0-alpha.84
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/index.cjs +2858 -1
- package/dist/index.mjs +2838 -1
- package/dist/lib/array/advanced.cjs +2227 -1
- package/dist/lib/array/advanced.mjs +2204 -1
- package/dist/lib/array/array.cjs +57 -1
- package/dist/lib/array/array.mjs +36 -1
- package/dist/lib/array/index.cjs +2344 -1
- package/dist/lib/array/index.mjs +2322 -1
- package/dist/lib/array/utils.cjs +103 -1
- package/dist/lib/array/utils.mjs +82 -1
- package/dist/lib/color/color.cjs +2190 -1
- package/dist/lib/color/color.mjs +2167 -1
- package/dist/lib/color/constants.cjs +380 -1
- package/dist/lib/color/constants.mjs +359 -1
- package/dist/lib/color/conversions.cjs +629 -1
- package/dist/lib/color/conversions.mjs +608 -1
- package/dist/lib/color/helpers.cjs +2534 -1
- package/dist/lib/color/helpers.mjs +2511 -1
- package/dist/lib/color/index.cjs +2641 -1
- package/dist/lib/color/index.mjs +2619 -1
- package/dist/lib/color/types.cjs +18 -1
- package/dist/lib/color/utils.cjs +962 -1
- package/dist/lib/color/utils.mjs +939 -1
- package/dist/lib/compare/comparators.cjs +171 -1
- package/dist/lib/compare/comparators.mjs +150 -1
- package/dist/lib/compare/index.cjs +172 -1
- package/dist/lib/compare/index.mjs +152 -1
- package/dist/lib/crypto/hash.cjs +83 -1
- package/dist/lib/crypto/hash.mjs +62 -1
- package/dist/lib/crypto/index.cjs +85 -1
- package/dist/lib/crypto/index.mjs +62 -1
- package/dist/lib/dom/events.cjs +40 -1
- package/dist/lib/dom/events.mjs +19 -1
- package/dist/lib/dom/index.cjs +78 -1
- package/dist/lib/dom/index.mjs +56 -1
- package/dist/lib/dom/utils.cjs +57 -1
- package/dist/lib/dom/utils.mjs +36 -1
- package/dist/lib/functions/functions.cjs +366 -1
- package/dist/lib/functions/functions.mjs +345 -1
- package/dist/lib/functions/index.cjs +369 -1
- package/dist/lib/functions/index.mjs +347 -1
- package/dist/lib/functions/types.cjs +18 -1
- package/dist/lib/helpers.cjs +78 -1
- package/dist/lib/helpers.mjs +59 -1
- package/dist/lib/index.cjs +2857 -1
- package/dist/lib/index.mjs +2836 -1
- package/dist/lib/maths/constants.cjs +70 -1
- package/dist/lib/maths/constants.mjs +50 -1
- package/dist/lib/maths/fn/advanced.cjs +231 -1
- package/dist/lib/maths/fn/advanced.mjs +208 -1
- package/dist/lib/maths/fn/basic.cjs +212 -1
- package/dist/lib/maths/fn/basic.mjs +191 -1
- package/dist/lib/maths/fn/complex.cjs +268 -1
- package/dist/lib/maths/fn/complex.mjs +247 -1
- package/dist/lib/maths/fn/index.cjs +877 -1
- package/dist/lib/maths/fn/index.mjs +855 -1
- package/dist/lib/maths/fn/trigo.cjs +179 -1
- package/dist/lib/maths/fn/trigo.mjs +156 -1
- package/dist/lib/maths/fn/vector.cjs +728 -1
- package/dist/lib/maths/fn/vector.mjs +707 -1
- package/dist/lib/maths/formatter.cjs +61 -1
- package/dist/lib/maths/formatter.mjs +40 -1
- package/dist/lib/maths/guards.cjs +164 -1
- package/dist/lib/maths/guards.mjs +144 -1
- package/dist/lib/maths/index.cjs +1152 -1
- package/dist/lib/maths/index.mjs +1130 -1
- package/dist/lib/maths/parser.cjs +75 -1
- package/dist/lib/maths/parser.mjs +54 -1
- package/dist/lib/maths/random.cjs +49 -1
- package/dist/lib/maths/random.mjs +28 -1
- package/dist/lib/maths/types/advanced.cjs +18 -1
- package/dist/lib/maths/types/basic.cjs +18 -1
- package/dist/lib/maths/types/index.cjs +19 -1
- package/dist/lib/maths/types/index.mjs +1 -0
- package/dist/lib/maths/types/negative.cjs +18 -1
- package/dist/lib/maths/types/operations.cjs +18 -1
- package/dist/lib/object/clone.cjs +88 -1
- package/dist/lib/object/clone.mjs +65 -1
- package/dist/lib/object/diff.cjs +573 -1
- package/dist/lib/object/diff.mjs +550 -1
- package/dist/lib/object/getter-setter.cjs +2351 -1
- package/dist/lib/object/getter-setter.mjs +2330 -1
- package/dist/lib/object/index.cjs +3956 -6
- package/dist/lib/object/index.mjs +3936 -6
- package/dist/lib/object/merge.cjs +1029 -1
- package/dist/lib/object/merge.mjs +1006 -1
- package/dist/lib/object/object.cjs +280 -1
- package/dist/lib/object/object.mjs +257 -1
- package/dist/lib/object/omit.cjs +2022 -1
- package/dist/lib/object/omit.mjs +1999 -1
- package/dist/lib/object/reconcile.cjs +126 -1
- package/dist/lib/object/reconcile.mjs +105 -1
- package/dist/lib/object/selector.cjs +303 -1
- package/dist/lib/object/selector.mjs +282 -1
- package/dist/lib/object/sort.cjs +209 -1
- package/dist/lib/object/sort.mjs +186 -1
- package/dist/lib/object/transform.cjs +2211 -1
- package/dist/lib/object/transform.mjs +2190 -1
- package/dist/lib/object/types.cjs +18 -1
- package/dist/lib/object/utils.cjs +326 -6
- package/dist/lib/object/utils.mjs +305 -6
- package/dist/lib/primitive/boolean/boolean.cjs +407 -1
- package/dist/lib/primitive/boolean/boolean.mjs +386 -1
- package/dist/lib/primitive/boolean/index.cjs +382 -1
- package/dist/lib/primitive/boolean/index.mjs +359 -1
- package/dist/lib/primitive/boolean/types.cjs +18 -1
- package/dist/lib/primitive/date/date.cjs +1126 -1
- package/dist/lib/primitive/date/date.mjs +1105 -1
- package/dist/lib/primitive/date/index.cjs +1128 -1
- package/dist/lib/primitive/date/index.mjs +1105 -1
- package/dist/lib/primitive/date/types.cjs +18 -1
- package/dist/lib/primitive/index.cjs +2338 -5
- package/dist/lib/primitive/index.mjs +2316 -5
- package/dist/lib/primitive/string/index.cjs +875 -5
- package/dist/lib/primitive/string/index.mjs +852 -5
- package/dist/lib/primitive/string/parser-2.cjs +543 -8
- package/dist/lib/primitive/string/parser-2.mjs +522 -8
- package/dist/lib/primitive/string/parser.cjs +236 -3
- package/dist/lib/primitive/string/parser.mjs +215 -3
- package/dist/lib/primitive/string/string.cjs +926 -5
- package/dist/lib/primitive/string/string.mjs +903 -5
- package/dist/lib/primitive/string/types.cjs +18 -1
- package/dist/lib/primitive/types.cjs +18 -1
- package/dist/lib/url/index.cjs +327 -1
- package/dist/lib/url/index.mjs +304 -1
- package/dist/lib/url/parser.cjs +325 -1
- package/dist/lib/url/parser.mjs +304 -1
- package/dist/lib/url/types.cjs +18 -1
- package/package.json +5 -5
|
@@ -1,3 +1,236 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/lib/primitive/string/parser.ts
|
|
21
|
+
var parser_exports = {};
|
|
22
|
+
__export(parser_exports, {
|
|
23
|
+
customParse: () => customParse,
|
|
24
|
+
parseJsObjectLiteral: () => parseJsObjectLiteral,
|
|
25
|
+
simpleJsObjectParse: () => simpleJsObjectParse
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(parser_exports);
|
|
28
|
+
function customParse(str, options = {}) {
|
|
29
|
+
try {
|
|
30
|
+
return JSON.parse(str);
|
|
31
|
+
} catch (e) {
|
|
32
|
+
return parseJsObjectLiteral(str, options);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function parseJsObjectLiteral(str, options = {}) {
|
|
36
|
+
const {
|
|
37
|
+
allowComments = true,
|
|
38
|
+
allowUnquotedKeys = true,
|
|
39
|
+
allowSingleQuotes = true,
|
|
40
|
+
allowTrailingCommas = true,
|
|
41
|
+
allowUndefined = false
|
|
42
|
+
} = options;
|
|
43
|
+
let fixed = str.trim();
|
|
44
|
+
if (allowComments) {
|
|
45
|
+
fixed = fixed.replace(/\/\*[\s\S]*?\*\//g, "");
|
|
46
|
+
const lines = fixed.split("\n");
|
|
47
|
+
const cleanedLines = lines.map((line) => {
|
|
48
|
+
let inString = false;
|
|
49
|
+
let stringChar = "";
|
|
50
|
+
let escapeNext = false;
|
|
51
|
+
for (let i = 0; i < line.length; i++) {
|
|
52
|
+
const char = line[i];
|
|
53
|
+
if (escapeNext) {
|
|
54
|
+
escapeNext = false;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (char === "\\") {
|
|
58
|
+
escapeNext = true;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (!inString && (char === '"' || char === "'")) {
|
|
62
|
+
inString = true;
|
|
63
|
+
stringChar = char;
|
|
64
|
+
} else if (inString && char === stringChar) {
|
|
65
|
+
inString = false;
|
|
66
|
+
stringChar = "";
|
|
67
|
+
} else if (!inString && char === "/" && line[i + 1] === "/") {
|
|
68
|
+
return line.substring(0, i);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return line;
|
|
72
|
+
});
|
|
73
|
+
fixed = cleanedLines.join("\n");
|
|
74
|
+
}
|
|
75
|
+
if (allowUnquotedKeys) {
|
|
76
|
+
fixed = fixed.replace(/([{,]\s*)([a-zA-Z_$][a-zA-Z0-9_$]*)(\s*:)/g, '$1"$2"$3');
|
|
77
|
+
}
|
|
78
|
+
if (allowSingleQuotes) {
|
|
79
|
+
let result = "";
|
|
80
|
+
let inSingleQuote = false;
|
|
81
|
+
let inDoubleQuote = false;
|
|
82
|
+
let escapeNext = false;
|
|
83
|
+
let i = 0;
|
|
84
|
+
while (i < fixed.length) {
|
|
85
|
+
const char = fixed[i];
|
|
86
|
+
if (escapeNext) {
|
|
87
|
+
result += char;
|
|
88
|
+
escapeNext = false;
|
|
89
|
+
i++;
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (char === "\\") {
|
|
93
|
+
escapeNext = true;
|
|
94
|
+
result += char;
|
|
95
|
+
i++;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (char === "'" && !inDoubleQuote) {
|
|
99
|
+
if (inSingleQuote) {
|
|
100
|
+
result += '"';
|
|
101
|
+
inSingleQuote = false;
|
|
102
|
+
} else {
|
|
103
|
+
result += '"';
|
|
104
|
+
inSingleQuote = true;
|
|
105
|
+
}
|
|
106
|
+
} else if (char === '"' && !inSingleQuote) {
|
|
107
|
+
if (inDoubleQuote) {
|
|
108
|
+
inDoubleQuote = false;
|
|
109
|
+
} else {
|
|
110
|
+
inDoubleQuote = true;
|
|
111
|
+
}
|
|
112
|
+
result += char;
|
|
113
|
+
} else {
|
|
114
|
+
result += char;
|
|
115
|
+
}
|
|
116
|
+
i++;
|
|
117
|
+
}
|
|
118
|
+
fixed = result;
|
|
119
|
+
}
|
|
120
|
+
if (allowTrailingCommas) {
|
|
121
|
+
let result = "";
|
|
122
|
+
let inString = false;
|
|
123
|
+
let stringChar = "";
|
|
124
|
+
let escapeNext = false;
|
|
125
|
+
let i = 0;
|
|
126
|
+
while (i < fixed.length) {
|
|
127
|
+
const char = fixed[i];
|
|
128
|
+
if (escapeNext) {
|
|
129
|
+
result += char;
|
|
130
|
+
escapeNext = false;
|
|
131
|
+
i++;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
if (char === "\\") {
|
|
135
|
+
escapeNext = true;
|
|
136
|
+
result += char;
|
|
137
|
+
i++;
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if ((char === '"' || char === "'") && !inString) {
|
|
141
|
+
inString = true;
|
|
142
|
+
stringChar = char;
|
|
143
|
+
result += char;
|
|
144
|
+
} else if (inString && char === stringChar) {
|
|
145
|
+
inString = false;
|
|
146
|
+
stringChar = "";
|
|
147
|
+
result += char;
|
|
148
|
+
} else if (!inString && char === ",") {
|
|
149
|
+
let j = i + 1;
|
|
150
|
+
while (j < fixed.length && /\s/.test(fixed[j])) {
|
|
151
|
+
j++;
|
|
152
|
+
}
|
|
153
|
+
if (j < fixed.length && (fixed[j] === "]" || fixed[j] === "}")) {
|
|
154
|
+
i++;
|
|
155
|
+
continue;
|
|
156
|
+
} else {
|
|
157
|
+
result += char;
|
|
158
|
+
}
|
|
159
|
+
} else {
|
|
160
|
+
result += char;
|
|
161
|
+
}
|
|
162
|
+
i++;
|
|
163
|
+
}
|
|
164
|
+
fixed = result;
|
|
165
|
+
}
|
|
166
|
+
if (allowUndefined) {
|
|
167
|
+
let result = "";
|
|
168
|
+
let inString = false;
|
|
169
|
+
let stringChar = "";
|
|
170
|
+
let escapeNext = false;
|
|
171
|
+
let i = 0;
|
|
172
|
+
while (i < fixed.length) {
|
|
173
|
+
if (escapeNext) {
|
|
174
|
+
result += fixed[i];
|
|
175
|
+
escapeNext = false;
|
|
176
|
+
i++;
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
if (fixed[i] === "\\") {
|
|
180
|
+
escapeNext = true;
|
|
181
|
+
result += fixed[i];
|
|
182
|
+
i++;
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
if ((fixed[i] === '"' || fixed[i] === "'") && !inString) {
|
|
186
|
+
inString = true;
|
|
187
|
+
stringChar = fixed[i];
|
|
188
|
+
result += fixed[i];
|
|
189
|
+
} else if (inString && fixed[i] === stringChar) {
|
|
190
|
+
inString = false;
|
|
191
|
+
stringChar = "";
|
|
192
|
+
result += fixed[i];
|
|
193
|
+
} else if (!inString && fixed.substr(i, 9) === "undefined") {
|
|
194
|
+
const before = i > 0 ? fixed[i - 1] : "";
|
|
195
|
+
const after = i + 8 < fixed.length ? fixed[i + 9] : "";
|
|
196
|
+
const isWordChar = /[a-zA-Z0-9_$]/.test(before) || /[a-zA-Z0-9_$]/.test(after);
|
|
197
|
+
if (!isWordChar) {
|
|
198
|
+
result += "null";
|
|
199
|
+
i += 9;
|
|
200
|
+
continue;
|
|
201
|
+
} else {
|
|
202
|
+
result += fixed[i];
|
|
203
|
+
}
|
|
204
|
+
} else {
|
|
205
|
+
result += fixed[i];
|
|
206
|
+
}
|
|
207
|
+
i++;
|
|
208
|
+
}
|
|
209
|
+
fixed = result;
|
|
210
|
+
}
|
|
211
|
+
try {
|
|
212
|
+
return JSON.parse(fixed);
|
|
213
|
+
} catch (e) {
|
|
214
|
+
return void 0;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
function simpleJsObjectParse(str) {
|
|
218
|
+
let fixed = str;
|
|
219
|
+
fixed = fixed.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\/\/.*$/gm, "");
|
|
220
|
+
fixed = fixed.replace(/([{,]\s*)([a-zA-Z_$][\w$]*)(\s*:)/g, (match, prefix, key, suffix) => {
|
|
221
|
+
if (key === "true" || key === "false" || key === "null" || key === "undefined") {
|
|
222
|
+
return match;
|
|
223
|
+
}
|
|
224
|
+
if (/^\d/.test(key)) {
|
|
225
|
+
return match;
|
|
226
|
+
}
|
|
227
|
+
return `${prefix}"${key}"${suffix}`;
|
|
228
|
+
});
|
|
229
|
+
fixed = fixed.replace(/'([^'\\]*(?:\\.[^'\\]*)*)'/g, '"$1"');
|
|
230
|
+
fixed = fixed.replace(/,(\s*[\]}])/g, "$1");
|
|
231
|
+
try {
|
|
232
|
+
return JSON.parse(fixed);
|
|
233
|
+
} catch (e) {
|
|
234
|
+
throw new SyntaxError(`Failed to parse JavaScript object literal: ${e}`);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
@@ -1,3 +1,215 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
// src/lib/primitive/string/parser.ts
|
|
2
|
+
function customParse(str, options = {}) {
|
|
3
|
+
try {
|
|
4
|
+
return JSON.parse(str);
|
|
5
|
+
} catch (e) {
|
|
6
|
+
return parseJsObjectLiteral(str, options);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
function parseJsObjectLiteral(str, options = {}) {
|
|
10
|
+
const {
|
|
11
|
+
allowComments = true,
|
|
12
|
+
allowUnquotedKeys = true,
|
|
13
|
+
allowSingleQuotes = true,
|
|
14
|
+
allowTrailingCommas = true,
|
|
15
|
+
allowUndefined = false
|
|
16
|
+
} = options;
|
|
17
|
+
let fixed = str.trim();
|
|
18
|
+
if (allowComments) {
|
|
19
|
+
fixed = fixed.replace(/\/\*[\s\S]*?\*\//g, "");
|
|
20
|
+
const lines = fixed.split("\n");
|
|
21
|
+
const cleanedLines = lines.map((line) => {
|
|
22
|
+
let inString = false;
|
|
23
|
+
let stringChar = "";
|
|
24
|
+
let escapeNext = false;
|
|
25
|
+
for (let i = 0; i < line.length; i++) {
|
|
26
|
+
const char = line[i];
|
|
27
|
+
if (escapeNext) {
|
|
28
|
+
escapeNext = false;
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (char === "\\") {
|
|
32
|
+
escapeNext = true;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (!inString && (char === '"' || char === "'")) {
|
|
36
|
+
inString = true;
|
|
37
|
+
stringChar = char;
|
|
38
|
+
} else if (inString && char === stringChar) {
|
|
39
|
+
inString = false;
|
|
40
|
+
stringChar = "";
|
|
41
|
+
} else if (!inString && char === "/" && line[i + 1] === "/") {
|
|
42
|
+
return line.substring(0, i);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return line;
|
|
46
|
+
});
|
|
47
|
+
fixed = cleanedLines.join("\n");
|
|
48
|
+
}
|
|
49
|
+
if (allowUnquotedKeys) {
|
|
50
|
+
fixed = fixed.replace(/([{,]\s*)([a-zA-Z_$][a-zA-Z0-9_$]*)(\s*:)/g, '$1"$2"$3');
|
|
51
|
+
}
|
|
52
|
+
if (allowSingleQuotes) {
|
|
53
|
+
let result = "";
|
|
54
|
+
let inSingleQuote = false;
|
|
55
|
+
let inDoubleQuote = false;
|
|
56
|
+
let escapeNext = false;
|
|
57
|
+
let i = 0;
|
|
58
|
+
while (i < fixed.length) {
|
|
59
|
+
const char = fixed[i];
|
|
60
|
+
if (escapeNext) {
|
|
61
|
+
result += char;
|
|
62
|
+
escapeNext = false;
|
|
63
|
+
i++;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (char === "\\") {
|
|
67
|
+
escapeNext = true;
|
|
68
|
+
result += char;
|
|
69
|
+
i++;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (char === "'" && !inDoubleQuote) {
|
|
73
|
+
if (inSingleQuote) {
|
|
74
|
+
result += '"';
|
|
75
|
+
inSingleQuote = false;
|
|
76
|
+
} else {
|
|
77
|
+
result += '"';
|
|
78
|
+
inSingleQuote = true;
|
|
79
|
+
}
|
|
80
|
+
} else if (char === '"' && !inSingleQuote) {
|
|
81
|
+
if (inDoubleQuote) {
|
|
82
|
+
inDoubleQuote = false;
|
|
83
|
+
} else {
|
|
84
|
+
inDoubleQuote = true;
|
|
85
|
+
}
|
|
86
|
+
result += char;
|
|
87
|
+
} else {
|
|
88
|
+
result += char;
|
|
89
|
+
}
|
|
90
|
+
i++;
|
|
91
|
+
}
|
|
92
|
+
fixed = result;
|
|
93
|
+
}
|
|
94
|
+
if (allowTrailingCommas) {
|
|
95
|
+
let result = "";
|
|
96
|
+
let inString = false;
|
|
97
|
+
let stringChar = "";
|
|
98
|
+
let escapeNext = false;
|
|
99
|
+
let i = 0;
|
|
100
|
+
while (i < fixed.length) {
|
|
101
|
+
const char = fixed[i];
|
|
102
|
+
if (escapeNext) {
|
|
103
|
+
result += char;
|
|
104
|
+
escapeNext = false;
|
|
105
|
+
i++;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (char === "\\") {
|
|
109
|
+
escapeNext = true;
|
|
110
|
+
result += char;
|
|
111
|
+
i++;
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if ((char === '"' || char === "'") && !inString) {
|
|
115
|
+
inString = true;
|
|
116
|
+
stringChar = char;
|
|
117
|
+
result += char;
|
|
118
|
+
} else if (inString && char === stringChar) {
|
|
119
|
+
inString = false;
|
|
120
|
+
stringChar = "";
|
|
121
|
+
result += char;
|
|
122
|
+
} else if (!inString && char === ",") {
|
|
123
|
+
let j = i + 1;
|
|
124
|
+
while (j < fixed.length && /\s/.test(fixed[j])) {
|
|
125
|
+
j++;
|
|
126
|
+
}
|
|
127
|
+
if (j < fixed.length && (fixed[j] === "]" || fixed[j] === "}")) {
|
|
128
|
+
i++;
|
|
129
|
+
continue;
|
|
130
|
+
} else {
|
|
131
|
+
result += char;
|
|
132
|
+
}
|
|
133
|
+
} else {
|
|
134
|
+
result += char;
|
|
135
|
+
}
|
|
136
|
+
i++;
|
|
137
|
+
}
|
|
138
|
+
fixed = result;
|
|
139
|
+
}
|
|
140
|
+
if (allowUndefined) {
|
|
141
|
+
let result = "";
|
|
142
|
+
let inString = false;
|
|
143
|
+
let stringChar = "";
|
|
144
|
+
let escapeNext = false;
|
|
145
|
+
let i = 0;
|
|
146
|
+
while (i < fixed.length) {
|
|
147
|
+
if (escapeNext) {
|
|
148
|
+
result += fixed[i];
|
|
149
|
+
escapeNext = false;
|
|
150
|
+
i++;
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (fixed[i] === "\\") {
|
|
154
|
+
escapeNext = true;
|
|
155
|
+
result += fixed[i];
|
|
156
|
+
i++;
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
if ((fixed[i] === '"' || fixed[i] === "'") && !inString) {
|
|
160
|
+
inString = true;
|
|
161
|
+
stringChar = fixed[i];
|
|
162
|
+
result += fixed[i];
|
|
163
|
+
} else if (inString && fixed[i] === stringChar) {
|
|
164
|
+
inString = false;
|
|
165
|
+
stringChar = "";
|
|
166
|
+
result += fixed[i];
|
|
167
|
+
} else if (!inString && fixed.substr(i, 9) === "undefined") {
|
|
168
|
+
const before = i > 0 ? fixed[i - 1] : "";
|
|
169
|
+
const after = i + 8 < fixed.length ? fixed[i + 9] : "";
|
|
170
|
+
const isWordChar = /[a-zA-Z0-9_$]/.test(before) || /[a-zA-Z0-9_$]/.test(after);
|
|
171
|
+
if (!isWordChar) {
|
|
172
|
+
result += "null";
|
|
173
|
+
i += 9;
|
|
174
|
+
continue;
|
|
175
|
+
} else {
|
|
176
|
+
result += fixed[i];
|
|
177
|
+
}
|
|
178
|
+
} else {
|
|
179
|
+
result += fixed[i];
|
|
180
|
+
}
|
|
181
|
+
i++;
|
|
182
|
+
}
|
|
183
|
+
fixed = result;
|
|
184
|
+
}
|
|
185
|
+
try {
|
|
186
|
+
return JSON.parse(fixed);
|
|
187
|
+
} catch (e) {
|
|
188
|
+
return void 0;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
function simpleJsObjectParse(str) {
|
|
192
|
+
let fixed = str;
|
|
193
|
+
fixed = fixed.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\/\/.*$/gm, "");
|
|
194
|
+
fixed = fixed.replace(/([{,]\s*)([a-zA-Z_$][\w$]*)(\s*:)/g, (match, prefix, key, suffix) => {
|
|
195
|
+
if (key === "true" || key === "false" || key === "null" || key === "undefined") {
|
|
196
|
+
return match;
|
|
197
|
+
}
|
|
198
|
+
if (/^\d/.test(key)) {
|
|
199
|
+
return match;
|
|
200
|
+
}
|
|
201
|
+
return `${prefix}"${key}"${suffix}`;
|
|
202
|
+
});
|
|
203
|
+
fixed = fixed.replace(/'([^'\\]*(?:\\.[^'\\]*)*)'/g, '"$1"');
|
|
204
|
+
fixed = fixed.replace(/,(\s*[\]}])/g, "$1");
|
|
205
|
+
try {
|
|
206
|
+
return JSON.parse(fixed);
|
|
207
|
+
} catch (e) {
|
|
208
|
+
throw new SyntaxError(`Failed to parse JavaScript object literal: ${e}`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
export {
|
|
212
|
+
customParse,
|
|
213
|
+
parseJsObjectLiteral,
|
|
214
|
+
simpleJsObjectParse
|
|
215
|
+
};
|