total5 0.0.8-2 → 0.0.8
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/builders.js +18 -5
- package/changelog.txt +4 -0
- package/htmlparser.js +77 -81
- package/index.js +1 -1
- package/package.json +1 -1
- package/utils.js +1 -0
package/builders.js
CHANGED
|
@@ -47,6 +47,11 @@ Options.prototype = {
|
|
|
47
47
|
this.payload = value;
|
|
48
48
|
},
|
|
49
49
|
|
|
50
|
+
get hostname() {
|
|
51
|
+
let ctrl = this.controller;
|
|
52
|
+
return ctrl ? ((ctrl.protocol || 'https') + '://' + ctrl.headers.host) : null;
|
|
53
|
+
},
|
|
54
|
+
|
|
50
55
|
get url() {
|
|
51
56
|
return (this.controller ? this.controller.url : '') || '';
|
|
52
57
|
},
|
|
@@ -121,6 +126,7 @@ Options.prototype.promisify = function(fn, a, b, c) {
|
|
|
121
126
|
|
|
122
127
|
var callback = function(err, response) {
|
|
123
128
|
if (err)
|
|
129
|
+
|
|
124
130
|
$.invalid(err);
|
|
125
131
|
else
|
|
126
132
|
resolve(response);
|
|
@@ -941,9 +947,12 @@ function restbuilder_callback(err, response) {
|
|
|
941
947
|
|
|
942
948
|
if (self.options.custom) {
|
|
943
949
|
if (self.$resolve) {
|
|
944
|
-
if (err)
|
|
945
|
-
self
|
|
946
|
-
|
|
950
|
+
if (err) {
|
|
951
|
+
if (self.$)
|
|
952
|
+
self.$.invalid(err);
|
|
953
|
+
else
|
|
954
|
+
self.$reject(err);
|
|
955
|
+
} else
|
|
947
956
|
self.$resolve(response);
|
|
948
957
|
self.$ = null;
|
|
949
958
|
self.$reject = null;
|
|
@@ -1042,8 +1051,12 @@ function restbuilder_callback(err, response) {
|
|
|
1042
1051
|
|
|
1043
1052
|
if (self.$resolve) {
|
|
1044
1053
|
|
|
1045
|
-
if (err)
|
|
1046
|
-
self
|
|
1054
|
+
if (err) {
|
|
1055
|
+
if (self.$)
|
|
1056
|
+
self.$.invalid(err);
|
|
1057
|
+
else
|
|
1058
|
+
self.$reject(err);
|
|
1059
|
+
}
|
|
1047
1060
|
else
|
|
1048
1061
|
self.$resolve(val);
|
|
1049
1062
|
|
package/changelog.txt
CHANGED
|
@@ -11,6 +11,10 @@
|
|
|
11
11
|
- fixed context in the components
|
|
12
12
|
- fixed URL downloading templates in `TEMPLATE()` method
|
|
13
13
|
- fixed parsing of unpaired elements in HTMLParser
|
|
14
|
+
- added support for `log` extension in static file processing
|
|
15
|
+
- fixed selectors in the HTMLParser
|
|
16
|
+
- added `$.hostname {String}` to the `SchemaOptions`
|
|
17
|
+
- fixed `RESTBuilder.promise()`
|
|
14
18
|
|
|
15
19
|
========================
|
|
16
20
|
0.0.7
|
package/htmlparser.js
CHANGED
|
@@ -24,23 +24,23 @@ function parseRule(selector, output) {
|
|
|
24
24
|
rule.attrs = [];
|
|
25
25
|
rule.output = output || [];
|
|
26
26
|
|
|
27
|
+
// > div
|
|
27
28
|
// div div[name="Peter Sirka"]
|
|
28
29
|
// div > div[name="Peter Sirka"]
|
|
29
30
|
|
|
30
|
-
// for (var c of selector) {
|
|
31
|
-
// if (c === '>')
|
|
32
|
-
// console.log(c);
|
|
33
|
-
// }
|
|
34
|
-
|
|
35
31
|
var cache = [];
|
|
36
32
|
|
|
37
|
-
selector = selector.replace(/\[.*?\]/gi, text => '[' + (cache.push(text) - 1) + ']').replace(/(\s)?>(\s)?/, '>').replace(/\s{2}/g, '');
|
|
33
|
+
selector = selector.replace(/\[.*?\]/gi, text => '[' + (cache.push(text) - 1) + ']').replace(/(\s)?>(\s)?/, '>').replace(/\s{2}/g, '').trim();
|
|
34
|
+
|
|
35
|
+
rule.notravelse = selector[0] === '>';
|
|
36
|
+
|
|
37
|
+
if (rule.notravelse)
|
|
38
|
+
selector = selector.substring(1);
|
|
38
39
|
|
|
39
40
|
var m = selector.match(/>|\s/);
|
|
40
41
|
if (m) {
|
|
41
|
-
var nested = selector.substring(m.index
|
|
42
|
+
var nested = selector.substring(m.index).trim().replace(/\[\d+\]/g, text => cache[+text.substring(1, text.length - 1)]);
|
|
42
43
|
rule.nested = parseRule(nested, rule.output);
|
|
43
|
-
rule.direct = m[0] === '>';
|
|
44
44
|
selector = selector.substring(0, m.index).trim();
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -156,6 +156,48 @@ function extendarr(output) {
|
|
|
156
156
|
return output;
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
+
function compare(rule, node) {
|
|
160
|
+
|
|
161
|
+
if (rule.prefix === '*') {
|
|
162
|
+
var tagName = node.tagName;
|
|
163
|
+
if (node.prefix)
|
|
164
|
+
tagName = tagName.substring(node.prefix.length);
|
|
165
|
+
if (tagName !== rule.tagName)
|
|
166
|
+
return false;
|
|
167
|
+
} else {
|
|
168
|
+
if (rule.tagName && rule.tagName !== node.tagName)
|
|
169
|
+
return false;
|
|
170
|
+
if (rule.prefix && rule.prefix !== node.prefix)
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (rule.attrs.length) {
|
|
175
|
+
for (var attr of rule.attrs) {
|
|
176
|
+
switch (attr.id) {
|
|
177
|
+
case 'class':
|
|
178
|
+
var tmp = node.attrs[attr.id];
|
|
179
|
+
if (tmp) {
|
|
180
|
+
tmp = tmp.split(' ');
|
|
181
|
+
if (!tmp.includes(attr.value))
|
|
182
|
+
return false;
|
|
183
|
+
} else
|
|
184
|
+
return false;
|
|
185
|
+
break;
|
|
186
|
+
default:
|
|
187
|
+
if (attr.value) {
|
|
188
|
+
if (node.attrs[attr.id] !== attr.value)
|
|
189
|
+
return false;
|
|
190
|
+
} else if (node.attrs[attr.id] === undefined)
|
|
191
|
+
return false;
|
|
192
|
+
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
|
|
159
201
|
HTMLElement.prototype.find = function(selector, reverse) {
|
|
160
202
|
|
|
161
203
|
var self = this;
|
|
@@ -166,81 +208,33 @@ HTMLElement.prototype.find = function(selector, reverse) {
|
|
|
166
208
|
for (var sel of selectors)
|
|
167
209
|
rules.push(parseRule(sel.trim()));
|
|
168
210
|
|
|
169
|
-
var browse = function(rule, children
|
|
211
|
+
var browse = function(rule, children) {
|
|
170
212
|
|
|
171
|
-
for (
|
|
213
|
+
for (let node of children) {
|
|
172
214
|
|
|
173
215
|
if (!node.tagName)
|
|
174
216
|
continue;
|
|
175
217
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
if (rule.prefix === '*') {
|
|
179
|
-
|
|
180
|
-
var tagName = node.tagName;
|
|
181
|
-
if (node.prefix)
|
|
182
|
-
tagName = tagName.substring(node.prefix.length);
|
|
183
|
-
|
|
184
|
-
if (tagName !== rule.tagName)
|
|
185
|
-
skip = true;
|
|
186
|
-
|
|
187
|
-
} else {
|
|
188
|
-
if (rule.tagName && rule.tagName !== node.tagName)
|
|
189
|
-
skip = true;
|
|
190
|
-
if (rule.prefix && rule.prefix !== node.prefix)
|
|
191
|
-
skip = true;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
if (rule.attrs.length && !skip) {
|
|
195
|
-
for (var attr of rule.attrs) {
|
|
196
|
-
switch (attr.id) {
|
|
197
|
-
|
|
198
|
-
case 'class':
|
|
199
|
-
var tmp = node.attrs[attr.id];
|
|
200
|
-
if (tmp) {
|
|
201
|
-
tmp = tmp.split(' ');
|
|
202
|
-
if (!tmp.includes(attr.value))
|
|
203
|
-
skip = true;
|
|
204
|
-
} else
|
|
205
|
-
skip = true;
|
|
206
|
-
break;
|
|
207
|
-
|
|
208
|
-
default:
|
|
209
|
-
if (attr.value) {
|
|
210
|
-
if (node.attrs[attr.id] !== attr.value)
|
|
211
|
-
skip = true;
|
|
212
|
-
} else if (node.attrs[attr.id] === undefined)
|
|
213
|
-
skip = true;
|
|
214
|
-
|
|
215
|
-
break;
|
|
216
|
-
}
|
|
218
|
+
let children = reverse ? [node.parentNode] : node.children;
|
|
217
219
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
220
|
+
if (!compare(rule, node)) {
|
|
221
|
+
if (!rule.notravelse)
|
|
222
|
+
browse(rule, children);
|
|
223
|
+
continue;
|
|
221
224
|
}
|
|
222
225
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
if (skip && parent.direct)
|
|
227
|
-
continue;
|
|
228
|
-
}
|
|
226
|
+
// types complexType attribute
|
|
227
|
+
// types > complexType attribute
|
|
228
|
+
// types complexType > attribute
|
|
229
229
|
|
|
230
230
|
if (rule.nested) {
|
|
231
|
+
browse(rule.nested, children);
|
|
232
|
+
} else {
|
|
231
233
|
|
|
232
|
-
|
|
233
|
-
browse(rule.nested, reverse ? [node.parentNode] : node.children, rule);
|
|
234
|
-
|
|
235
|
-
// Again same
|
|
236
|
-
if (!parent)
|
|
237
|
-
browse(rule, reverse ? [node.parentNode] : node.children);
|
|
234
|
+
rule.output.push(node);
|
|
238
235
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
rule.output.push(node);
|
|
242
|
-
if (next)
|
|
243
|
-
browse(rule, reverse ? [node.parentNode] : node.children);
|
|
236
|
+
if (!rule.notravelse)
|
|
237
|
+
browse(rule, children);
|
|
244
238
|
}
|
|
245
239
|
}
|
|
246
240
|
};
|
|
@@ -249,7 +243,9 @@ HTMLElement.prototype.find = function(selector, reverse) {
|
|
|
249
243
|
return output;
|
|
250
244
|
|
|
251
245
|
for (var rule of rules) {
|
|
246
|
+
|
|
252
247
|
browse(rule, reverse ? [self.parentNode] : self.children);
|
|
248
|
+
|
|
253
249
|
if (rule.output.length)
|
|
254
250
|
output.push.apply(output, rule.output);
|
|
255
251
|
}
|
|
@@ -626,17 +622,23 @@ function parseHTML(html, trim, onerror, isxml) {
|
|
|
626
622
|
}
|
|
627
623
|
}
|
|
628
624
|
|
|
629
|
-
var pos =
|
|
625
|
+
var pos = -1;
|
|
630
626
|
var tagBeg = '<' + dom.raw;
|
|
631
627
|
var tagEnd = '</' + dom.raw + '>';
|
|
628
|
+
var unpair = false;
|
|
632
629
|
|
|
633
630
|
while (true) {
|
|
634
631
|
|
|
635
632
|
if (counter++ > 10000)
|
|
636
633
|
break;
|
|
637
634
|
|
|
638
|
-
|
|
635
|
+
if (unpair)
|
|
636
|
+
unpair = false;
|
|
637
|
+
else
|
|
638
|
+
end = str.indexOf(tagEnd, pos);
|
|
639
639
|
|
|
640
|
+
// Tries to find the same tag
|
|
641
|
+
beg = str.indexOf(tagBeg, pos);
|
|
640
642
|
if (beg !== -1) {
|
|
641
643
|
|
|
642
644
|
// another one with the same type
|
|
@@ -651,13 +653,11 @@ function parseHTML(html, trim, onerror, isxml) {
|
|
|
651
653
|
if (str[posend - 1] === '/') {
|
|
652
654
|
// unpair
|
|
653
655
|
pos = posend + 1;
|
|
656
|
+
unpair = true;
|
|
654
657
|
continue;
|
|
655
658
|
}
|
|
656
|
-
|
|
657
659
|
}
|
|
658
660
|
|
|
659
|
-
end = str.indexOf(tagEnd, pos);
|
|
660
|
-
|
|
661
661
|
// Fallback for the non-exists end tag
|
|
662
662
|
if (end === -1) {
|
|
663
663
|
end = str.length;
|
|
@@ -671,20 +671,17 @@ function parseHTML(html, trim, onerror, isxml) {
|
|
|
671
671
|
}
|
|
672
672
|
|
|
673
673
|
if (beg === -1 || end < beg) {
|
|
674
|
-
|
|
675
674
|
pos = end + tagEnd.length;
|
|
676
|
-
|
|
677
675
|
if (count) {
|
|
678
676
|
count--;
|
|
679
677
|
continue;
|
|
680
678
|
}
|
|
681
|
-
|
|
682
679
|
break;
|
|
683
680
|
}
|
|
681
|
+
|
|
684
682
|
}
|
|
685
683
|
|
|
686
684
|
var inner = str.substring(0, pos - tagEnd.length);
|
|
687
|
-
|
|
688
685
|
if (inner.indexOf('<') === -1 || (!isxml && (/\<(script|style|template)/).test(tag))) {
|
|
689
686
|
if (trim)
|
|
690
687
|
inner = inner.trim();
|
|
@@ -700,7 +697,6 @@ function parseHTML(html, trim, onerror, isxml) {
|
|
|
700
697
|
if (str && str.indexOf('<') === -1) {
|
|
701
698
|
if (trim)
|
|
702
699
|
str = str.trim();
|
|
703
|
-
|
|
704
700
|
// Commented because it inserts the same textContent twice
|
|
705
701
|
// str && parent.children.push(makeText(parent, str));
|
|
706
702
|
}
|
package/index.js
CHANGED
|
@@ -354,7 +354,7 @@ function unlink(arr, callback) {
|
|
|
354
354
|
CONF.$httpmaxsize = 256; // kB
|
|
355
355
|
CONF.$httprangebuffer = 5120; // 5 MB
|
|
356
356
|
CONF.$httptimeout = 5; // 5 seconds
|
|
357
|
-
CONF.$httpfiles = { flac: true, jpg: true, jpeg: true, png: true, gif: true, ico: true, wasm: true, js: true, mjs: true, css: true, txt: true, xml: true, woff: true, woff2: true, otf: true, ttf: true, eot: true, svg: true, zip: true, rar: true, pdf: true, docx: true, xlsx: true, doc: true, xls: true, html: true, htm: true, appcache: true, manifest: true, map: true, ogv: true, ogg: true, mp4: true, mp3: true, webp: true, webm: true, swf: true, package: true, json: true, ui: true, md: true, m4v: true, jsx: true, heif: true, heic: true, ics: true, ts: true, m3u8: true, wav: true, xsd: true, xsl: true, xslt: true, ipynb: true, ijsnb: true };
|
|
357
|
+
CONF.$httpfiles = { flac: true, jpg: true, jpeg: true, png: true, gif: true, ico: true, wasm: true, js: true, mjs: true, css: true, txt: true, xml: true, woff: true, woff2: true, otf: true, ttf: true, eot: true, svg: true, zip: true, rar: true, pdf: true, docx: true, xlsx: true, doc: true, xls: true, html: true, htm: true, appcache: true, manifest: true, map: true, ogv: true, ogg: true, mp4: true, mp3: true, webp: true, webm: true, swf: true, package: true, json: true, ui: true, md: true, m4v: true, jsx: true, heif: true, heic: true, ics: true, ts: true, m3u8: true, wav: true, xsd: true, xsl: true, xslt: true, ipynb: true, ijsnb: true, log: true };
|
|
358
358
|
CONF.$httpchecktypes = true; // for multipart data only
|
|
359
359
|
CONF.$httpmaxage = 60; // in seconds
|
|
360
360
|
CONF.$httpmaxkeys = 33;
|
package/package.json
CHANGED