@sergdudko/objectstream 3.1.0 → 3.1.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/CHANGELOG.md +15 -1
- package/README.md +80 -70
- package/lib/classes/Parser.js +38 -34
- package/lib/classes/Parser.js.map +1 -1
- package/lib/classes/Stringifer.js +36 -21
- package/lib/classes/Stringifer.js.map +1 -1
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/lib/utils/global.js +2 -2
- package/lib/utils/global.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
|
+
# 3.1.1 / 2022-06-22
|
|
2
|
+
|
|
3
|
+
## :tada: Enhancements
|
|
4
|
+
|
|
5
|
+
- Updated code style
|
|
6
|
+
|
|
7
|
+
# 3.1.0 / 2022-06-22
|
|
8
|
+
|
|
9
|
+
## :tada: Enhancements
|
|
10
|
+
|
|
11
|
+
- Updated libraries
|
|
12
|
+
- Fixes for node 18 and new versions of libraries
|
|
13
|
+
|
|
1
14
|
# 3.0.0 / 2021-05-10
|
|
2
15
|
|
|
3
16
|
## :tada: Enhancements
|
|
4
|
-
|
|
17
|
+
|
|
18
|
+
- Removed support Node v8.x
|
package/README.md
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Creates a stream to convert json from string or convert json to drain. The stream is based on the incoming object stream.
|
|
1
|
+
# @sergdudko/objectstream
|
|
2
|
+
|
|
3
|
+
Creates a stream to convert json from string or convert json to drain. The stream is based on the incoming object stream.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@sergdudko/objectstream)
|
|
6
6
|
[](https://www.npmjs.com/package/@sergdudko/objectstream)
|
|
7
7
|
[](https://www.npmjs.com/package/@sergdudko/objectstream)
|
|
8
8
|

|
|
9
9
|

|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
- Based on native methods of NodeJS
|
|
12
|
-
|
|
13
12
|
|
|
14
|
-
## INSTALL
|
|
15
|
-
|
|
13
|
+
## INSTALL
|
|
14
|
+
|
|
16
15
|
```bash
|
|
17
16
|
npm i @sergdudko/objectstream --save
|
|
18
17
|
```
|
|
@@ -23,80 +22,91 @@ Creates a stream to convert json from string or convert json to drain. The strea
|
|
|
23
22
|
|
|
24
23
|
## SUPPORTED ENCODING
|
|
25
24
|
|
|
26
|
-
|
|
|
27
|
-
|
|
28
|
-
|
|
|
29
|
-
|
|
|
25
|
+
| Stream | incoming stream | outgoing stream |
|
|
26
|
+
| ---------- | --------------------------------- | --------------------------------- |
|
|
27
|
+
| Stringifer | utf8 (object mode) | utf8, base64, latin1, binary, hex |
|
|
28
|
+
| Parser | utf8, base64, latin1, binary, hex | utf8 (object mode) |
|
|
30
29
|
|
|
31
30
|
## USE
|
|
32
31
|
|
|
33
32
|
```js
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
33
|
+
// REQUIRE OR IMPORT CLASS
|
|
34
|
+
|
|
35
|
+
const Stringifer = require("@sergdudko/objectstream").Stringifer;
|
|
36
|
+
const Parser = require("@sergdudko/objectstream").Parser;
|
|
37
|
+
// or use import
|
|
38
|
+
import { Stringifer, Parser } from "@sergdudko/objectstream";
|
|
39
|
+
|
|
40
|
+
// CREATE STREAM
|
|
41
|
+
|
|
42
|
+
const firstSeparator = "[";
|
|
43
|
+
const middleSeparator = ",";
|
|
44
|
+
const endSeparator = "]";
|
|
45
|
+
const stringToObject = new Parser(
|
|
46
|
+
firstSeparator,
|
|
47
|
+
middleSeparator,
|
|
48
|
+
endSeparator
|
|
49
|
+
);
|
|
50
|
+
const objectToString = new Stringifer(
|
|
51
|
+
firstSeparator,
|
|
52
|
+
middleSeparator,
|
|
53
|
+
endSeparator
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
// EVENTS
|
|
57
|
+
|
|
58
|
+
stringToObject.on("data", (e) => {
|
|
59
|
+
// e - is Object
|
|
60
|
+
});
|
|
61
|
+
stringToObject.on("error", (d) => {
|
|
62
|
+
// e - Array of Error
|
|
63
|
+
});
|
|
64
|
+
stringToObject.on("end", () => {
|
|
65
|
+
// end event
|
|
66
|
+
});
|
|
67
|
+
stringToObject.on("finish", () => {
|
|
68
|
+
// finish event
|
|
69
|
+
});
|
|
70
|
+
objectToString.on("data", (e) => {
|
|
71
|
+
// e - is Buffer (deault, if you need a string use setEncoding)
|
|
72
|
+
});
|
|
73
|
+
objectToString.on("error", (d) => {
|
|
74
|
+
// e - Array of Error
|
|
75
|
+
});
|
|
76
|
+
objectToString.on("end", () => {
|
|
77
|
+
// end event
|
|
78
|
+
});
|
|
79
|
+
objectToString.on("finish", () => {
|
|
80
|
+
// finish event
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
// CHANGE ENCODING
|
|
84
|
+
|
|
85
|
+
stringToObject.setEncoding("latin1");
|
|
86
|
+
objectToString.setEncoding("latin1");
|
|
87
|
+
|
|
88
|
+
// WRITE DATA (example for utf8)
|
|
89
|
+
|
|
90
|
+
stringToObject.write('{"boolean":true}');
|
|
91
|
+
objectToString.write({ boolean: true });
|
|
92
|
+
|
|
93
|
+
// PIPE
|
|
94
|
+
|
|
95
|
+
stringToObject.pipe(objectToString);
|
|
89
96
|
```
|
|
90
97
|
|
|
91
98
|
## WARNING
|
|
99
|
+
|
|
92
100
|
Streams behave unexpectedly when processing errors in versions node 14 and later. In these versions, you need to make sure that in case of an error the stream will be destroyed or the processing of the stream will continue.
|
|
93
101
|
|
|
94
102
|
## EXAMPLE
|
|
103
|
+
|
|
95
104
|
[see test directory](https://github.com/siarheidudko/objectstream/tree/master/test)
|
|
96
105
|
|
|
97
106
|
## OLDER VERSIONS
|
|
107
|
+
|
|
98
108
|
- [v2.0.5](https://www.npmjs.com/package/@sergdudko/objectstream/v/2.0.5) - supported Node 8
|
|
99
|
-
|
|
100
|
-
## LICENSE
|
|
101
|
-
|
|
102
|
-
MIT
|
|
109
|
+
|
|
110
|
+
## LICENSE
|
|
111
|
+
|
|
112
|
+
MIT
|
package/lib/classes/Parser.js
CHANGED
|
@@ -17,25 +17,25 @@ class Parser extends stream_1.Transform {
|
|
|
17
17
|
*/
|
|
18
18
|
constructor(start, middle, end) {
|
|
19
19
|
super({ highWaterMark: 64 * 1024, objectMode: true });
|
|
20
|
-
if (
|
|
21
|
-
(
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
if (typeof start !== "undefined" &&
|
|
21
|
+
(typeof start !== "string" ||
|
|
22
|
+
Buffer.byteLength(start) > 1 ||
|
|
23
|
+
start.match(/["{}]/)))
|
|
24
24
|
throw new Error("Argument start require one byte String!");
|
|
25
|
-
if (
|
|
26
|
-
(
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
if (typeof middle !== "undefined" &&
|
|
26
|
+
(typeof middle !== "string" ||
|
|
27
|
+
Buffer.byteLength(middle) > 1 ||
|
|
28
|
+
middle.match(/["{}]/)))
|
|
29
29
|
throw new Error("Argument separator require one byte String!");
|
|
30
|
-
if (
|
|
31
|
-
(
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
if (typeof end !== "undefined" &&
|
|
31
|
+
(typeof end !== "string" ||
|
|
32
|
+
Buffer.byteLength(end) > 1 ||
|
|
33
|
+
end.match(/["{}]/)))
|
|
34
34
|
throw new Error("Argument end require one byte String!");
|
|
35
35
|
this.__separators = {
|
|
36
36
|
start: Buffer.from(start ? start : "", "utf8")[0],
|
|
37
37
|
middle: Buffer.from(middle ? middle : "", "utf8")[0],
|
|
38
|
-
end: Buffer.from(end ? end : "", "utf8")[0]
|
|
38
|
+
end: Buffer.from(end ? end : "", "utf8")[0],
|
|
39
39
|
};
|
|
40
40
|
this.__clear();
|
|
41
41
|
this.__bytesRead = 0;
|
|
@@ -69,16 +69,17 @@ class Parser extends stream_1.Transform {
|
|
|
69
69
|
if (this.__leftBrace !== 0) {
|
|
70
70
|
this.__buffers.push(buffer.slice(s, s + 1));
|
|
71
71
|
}
|
|
72
|
-
else if (
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
72
|
+
else if (this.__separators.start !== buffer[s] &&
|
|
73
|
+
this.__separators.end !== buffer[s] &&
|
|
74
|
+
this.__separators.middle !== buffer[s] &&
|
|
75
|
+
0x20 !== buffer[s] &&
|
|
76
|
+
0x0d !== buffer[s] &&
|
|
77
|
+
0x0a !== buffer[s] &&
|
|
78
|
+
0x09 !== buffer[s]) {
|
|
79
79
|
errors.push(new Error("Unexpected token " +
|
|
80
80
|
buffer.slice(s, s + 1).toString(this.__encoding) +
|
|
81
|
-
" in JSON at position " +
|
|
81
|
+
" in JSON at position " +
|
|
82
|
+
(this.__bytesRead + s)));
|
|
82
83
|
}
|
|
83
84
|
}
|
|
84
85
|
/**
|
|
@@ -91,8 +92,10 @@ class Parser extends stream_1.Transform {
|
|
|
91
92
|
*/
|
|
92
93
|
_transform(string,
|
|
93
94
|
// eslint-disable-next-line
|
|
94
|
-
encoding = this.__encoding, callback = () => {
|
|
95
|
-
|
|
95
|
+
encoding = this.__encoding, callback = () => {
|
|
96
|
+
return;
|
|
97
|
+
}) {
|
|
98
|
+
if (typeof string === "undefined") {
|
|
96
99
|
callback();
|
|
97
100
|
return;
|
|
98
101
|
}
|
|
@@ -102,13 +105,12 @@ class Parser extends stream_1.Transform {
|
|
|
102
105
|
});
|
|
103
106
|
return;
|
|
104
107
|
}
|
|
105
|
-
const _buffer =
|
|
106
|
-
Buffer.from(string, encoding) : string;
|
|
108
|
+
const _buffer = typeof string === "string" ? Buffer.from(string, encoding) : string;
|
|
107
109
|
if (!(_buffer instanceof Buffer)) {
|
|
108
110
|
callback([
|
|
109
111
|
new Error("Incoming data type is " +
|
|
110
|
-
typeof
|
|
111
|
-
", require data type is String!")
|
|
112
|
+
typeof _buffer +
|
|
113
|
+
", require data type is String!"),
|
|
112
114
|
]);
|
|
113
115
|
return;
|
|
114
116
|
}
|
|
@@ -134,7 +136,7 @@ class Parser extends stream_1.Transform {
|
|
|
134
136
|
case 0x0d:
|
|
135
137
|
case 0x00:
|
|
136
138
|
case 0x0b:
|
|
137
|
-
if (this.__openQuotes &&
|
|
139
|
+
if (this.__openQuotes && this.__leftBrace !== 0)
|
|
138
140
|
this.__buffers.push(Buffer.from("\\u" + ("0000" + _buffer[s].toString(16)).slice(-4), "utf8"));
|
|
139
141
|
break;
|
|
140
142
|
case 0x22:
|
|
@@ -149,7 +151,7 @@ class Parser extends stream_1.Transform {
|
|
|
149
151
|
this.__handler(_buffer, s, errors);
|
|
150
152
|
break;
|
|
151
153
|
}
|
|
152
|
-
if (
|
|
154
|
+
if (this.__leftBrace !== 0 && this.__leftBrace === this.__rightBrace) {
|
|
153
155
|
try {
|
|
154
156
|
const _buf = Buffer.concat(this.__buffers);
|
|
155
157
|
const _str = _buf.toString("utf8");
|
|
@@ -185,7 +187,9 @@ class Parser extends stream_1.Transform {
|
|
|
185
187
|
* @private
|
|
186
188
|
* @param callback - callback function
|
|
187
189
|
*/
|
|
188
|
-
_flush(callback = () => {
|
|
190
|
+
_flush(callback = () => {
|
|
191
|
+
return;
|
|
192
|
+
}) {
|
|
189
193
|
this.__clear();
|
|
190
194
|
callback();
|
|
191
195
|
}
|
|
@@ -195,7 +199,9 @@ class Parser extends stream_1.Transform {
|
|
|
195
199
|
* @private
|
|
196
200
|
* @param callback - callback function
|
|
197
201
|
*/
|
|
198
|
-
_final(callback = () => {
|
|
202
|
+
_final(callback = () => {
|
|
203
|
+
return;
|
|
204
|
+
}) {
|
|
199
205
|
if (this.__buffers.length === 0) {
|
|
200
206
|
callback();
|
|
201
207
|
return;
|
|
@@ -204,9 +210,7 @@ class Parser extends stream_1.Transform {
|
|
|
204
210
|
const _buf = Buffer.concat(this.__buffers);
|
|
205
211
|
const _str = _buf.toString("utf8");
|
|
206
212
|
JSON.parse(_str);
|
|
207
|
-
callback([
|
|
208
|
-
new Error("Raw object detected!")
|
|
209
|
-
]);
|
|
213
|
+
callback([new Error("Raw object detected!")]);
|
|
210
214
|
}
|
|
211
215
|
catch (err) {
|
|
212
216
|
callback([err]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Parser.js","sourceRoot":"","sources":["../../src/classes/Parser.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"Parser.js","sourceRoot":"","sources":["../../src/classes/Parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,25 +17,25 @@ class Stringifer extends stream_1.Transform {
|
|
|
17
17
|
*/
|
|
18
18
|
constructor(start, middle, end) {
|
|
19
19
|
super({ highWaterMark: 64 * 1024, objectMode: true });
|
|
20
|
-
if (
|
|
21
|
-
(
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
if (typeof start !== "undefined" &&
|
|
21
|
+
(typeof start !== "string" ||
|
|
22
|
+
Buffer.byteLength(start) > 1 ||
|
|
23
|
+
start.match(/["{}]/)))
|
|
24
24
|
throw new Error("Argument start require one byte String!");
|
|
25
|
-
if (
|
|
26
|
-
(
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
if (typeof middle !== "undefined" &&
|
|
26
|
+
(typeof middle !== "string" ||
|
|
27
|
+
Buffer.byteLength(middle) > 1 ||
|
|
28
|
+
middle.match(/["{}]/)))
|
|
29
29
|
throw new Error("Argument separator require one byte String!");
|
|
30
|
-
if (
|
|
31
|
-
(
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
if (typeof end !== "undefined" &&
|
|
31
|
+
(typeof end !== "string" ||
|
|
32
|
+
Buffer.byteLength(end) > 1 ||
|
|
33
|
+
end.match(/["{}]/)))
|
|
34
34
|
throw new Error("Argument end require one byte String!");
|
|
35
35
|
this.__separators = {
|
|
36
36
|
start: Buffer.from(start ? start : "", "utf8"),
|
|
37
37
|
middle: Buffer.from(middle ? middle : "", "utf8"),
|
|
38
|
-
end: Buffer.from(end ? end : "", "utf8")
|
|
38
|
+
end: Buffer.from(end ? end : "", "utf8"),
|
|
39
39
|
};
|
|
40
40
|
this.__isString = false;
|
|
41
41
|
this.__bytesWrite = 0;
|
|
@@ -53,8 +53,10 @@ class Stringifer extends stream_1.Transform {
|
|
|
53
53
|
// eslint-disable-next-line
|
|
54
54
|
_transform(object,
|
|
55
55
|
// eslint-disable-next-line
|
|
56
|
-
encoding = this.__encoding, callback = () => {
|
|
57
|
-
|
|
56
|
+
encoding = this.__encoding, callback = () => {
|
|
57
|
+
return;
|
|
58
|
+
}) {
|
|
59
|
+
if (typeof object === "undefined") {
|
|
58
60
|
callback();
|
|
59
61
|
return;
|
|
60
62
|
}
|
|
@@ -64,11 +66,13 @@ class Stringifer extends stream_1.Transform {
|
|
|
64
66
|
});
|
|
65
67
|
return;
|
|
66
68
|
}
|
|
67
|
-
switch (typeof
|
|
69
|
+
switch (typeof object) {
|
|
68
70
|
case "object":
|
|
69
71
|
try {
|
|
70
72
|
if ((0, global_1.validator)(object, false) !== true) {
|
|
71
|
-
callback([
|
|
73
|
+
callback([
|
|
74
|
+
new Error("Validation failed, incoming data type is not pure Object!"),
|
|
75
|
+
]);
|
|
72
76
|
return;
|
|
73
77
|
}
|
|
74
78
|
let _buffer = Buffer.from(JSON.stringify(object), "utf8");
|
|
@@ -94,7 +98,11 @@ class Stringifer extends stream_1.Transform {
|
|
|
94
98
|
callback();
|
|
95
99
|
return;
|
|
96
100
|
default:
|
|
97
|
-
callback([
|
|
101
|
+
callback([
|
|
102
|
+
new Error("Incoming data type is " +
|
|
103
|
+
typeof object +
|
|
104
|
+
", require data type is pure Object!"),
|
|
105
|
+
]);
|
|
98
106
|
return;
|
|
99
107
|
}
|
|
100
108
|
}
|
|
@@ -104,7 +112,9 @@ class Stringifer extends stream_1.Transform {
|
|
|
104
112
|
* @private
|
|
105
113
|
* @param callback - callback function
|
|
106
114
|
*/
|
|
107
|
-
_flush(callback = () => {
|
|
115
|
+
_flush(callback = () => {
|
|
116
|
+
return;
|
|
117
|
+
}) {
|
|
108
118
|
callback();
|
|
109
119
|
}
|
|
110
120
|
/**
|
|
@@ -113,9 +123,14 @@ class Stringifer extends stream_1.Transform {
|
|
|
113
123
|
* @private
|
|
114
124
|
* @param callback - callback function
|
|
115
125
|
*/
|
|
116
|
-
_final(callback = () => {
|
|
126
|
+
_final(callback = () => {
|
|
127
|
+
return;
|
|
128
|
+
}) {
|
|
117
129
|
if (this.__bytesWrite === 0) {
|
|
118
|
-
const _buffer = Buffer.concat([
|
|
130
|
+
const _buffer = Buffer.concat([
|
|
131
|
+
this.__separators.start,
|
|
132
|
+
this.__separators.end,
|
|
133
|
+
]);
|
|
119
134
|
if (this.__isString)
|
|
120
135
|
this.push(_buffer.toString(this.__encoding));
|
|
121
136
|
else
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stringifer.js","sourceRoot":"","sources":["../../src/classes/Stringifer.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"Stringifer.js","sourceRoot":"","sources":["../../src/classes/Stringifer.ts"],"names":[],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
const Parser_1 = require("./classes/Parser");
|
|
12
12
|
const Stringifer_1 = require("./classes/Stringifer");
|
|
13
|
-
module.exports = module.exports = {
|
|
13
|
+
module.exports = (module.exports = {
|
|
14
14
|
/**
|
|
15
15
|
* Object to String stream
|
|
16
16
|
*/
|
|
@@ -18,6 +18,6 @@ module.exports = module.exports = {
|
|
|
18
18
|
/**
|
|
19
19
|
* String to Object stream
|
|
20
20
|
*/
|
|
21
|
-
Parser: Parser_1.Parser
|
|
22
|
-
};
|
|
21
|
+
Parser: Parser_1.Parser,
|
|
22
|
+
});
|
|
23
23
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;AAEH,6CAA0C;AAC1C,qDAAkD;AAElD,iBAAS,CAAC,MAAM,CAAC,OAAO,GAAG;IACzB;;OAEG;IACH,UAAU,EAAV,uBAAU;IACV;;OAEG;IACH,MAAM,EAAN,eAAM;CACP,CAAC,CAAC"}
|
package/lib/utils/global.js
CHANGED
|
@@ -9,7 +9,7 @@ exports.validator = void 0;
|
|
|
9
9
|
* @param it - internal flag
|
|
10
10
|
*/
|
|
11
11
|
const validator = (obj, it = true) => {
|
|
12
|
-
switch (typeof
|
|
12
|
+
switch (typeof obj) {
|
|
13
13
|
case "boolean":
|
|
14
14
|
return true;
|
|
15
15
|
case "number":
|
|
@@ -25,7 +25,7 @@ const validator = (obj, it = true) => {
|
|
|
25
25
|
return false;
|
|
26
26
|
return true;
|
|
27
27
|
}
|
|
28
|
-
if (it &&
|
|
28
|
+
if (it && obj.__proto__ === [].__proto__) {
|
|
29
29
|
for (const key of obj)
|
|
30
30
|
if ((0, exports.validator)(key) === false)
|
|
31
31
|
return false;
|
package/lib/utils/global.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.js","sourceRoot":"","sources":["../../src/utils/global.ts"],"names":[],"mappings":";;;AAAA;;;;;;GAMG;AACI,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAE,KAAc,IAAI,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"global.js","sourceRoot":"","sources":["../../src/utils/global.ts"],"names":[],"mappings":";;;AAAA;;;;;;GAMG;AACI,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAE,KAAc,IAAI,EAAE,EAAE;IACxD,QAAQ,OAAO,GAAG,EAAE;QAClB,KAAK,SAAS;YACZ,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC9B,IAAI,GAAG,CAAC,SAAS,KAAM,EAAU,CAAC,SAAS,EAAE;gBAC3C,KAAK,MAAM,GAAG,IAAI,GAAG;oBAAE,IAAI,IAAA,iBAAS,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK;wBAAE,OAAO,KAAK,CAAC;gBACvE,OAAO,IAAI,CAAC;aACb;YACD,IAAI,EAAE,IAAI,GAAG,CAAC,SAAS,KAAM,EAAU,CAAC,SAAS,EAAE;gBACjD,KAAK,MAAM,GAAG,IAAI,GAAG;oBAAE,IAAI,IAAA,iBAAS,EAAC,GAAG,CAAC,KAAK,KAAK;wBAAE,OAAO,KAAK,CAAC;gBAClE,OAAO,IAAI,CAAC;aACb;YACD,OAAO,KAAK,CAAC;QACf;YACE,OAAO,KAAK,CAAC;KAChB;AACH,CAAC,CAAC;AAtBW,QAAA,SAAS,aAsBpB"}
|