util.js
3.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*jshint -W100*/
'use strict';
var he = require('he');
var typeOf = require('type-of');
var colors = require('colors/safe');
/**
* 汎用関数 - エンティティのデコード
*
* @param str エンティティ化された文字列
*/
module.exports.decodeEntities = function (str) {
// 文字列でない場合(cheerioオブジェクトなど)はそのまま返す
if (typeOf(str) !== 'string') {
return str;
}
return he.decode(str);
};
/**
* 汎用関数 - パラメータの正規化
*
* @param val GET/POSTパラメータ
*/
module.exports.paramFilter = function (val) {
// 0はパラメータとして有効なので残す
// null/undefinedは空文字にして返す
if (typeOf(val) !== 'number' && ! val) {
val = '';
}
return val;
};
/**
* 汎用関数 - cheerio拡張情報_documentInfo取得
*
* @param $ 拡張cheerioオブジェクト
* @return client.jsでWEBページ情報取得時にセットされた_documentInfo
*/
module.exports.documentInfo = function ($) {
if ($.cheerio !== '[cheerio object]') {
throw new Error('argument is not cheerio object');
}
// 大元の_rootは_originalRootという名称で保持されているらしい by cheerio/lib/static.js
return $._root[0]._documentInfo || $._originalRoot._documentInfo;
};
/**
* 汎用関数 - PHPでいうin_array()
* cheerioとは無関係
*
* @param array 調べる配列
* @param val 調べる値
* @return true or false
*/
module.exports.inArray = function (array, val) {
if (typeOf(array) !== 'array') {
throw new Error(array + ' is not Array');
}
return (array.indexOf(val) !== -1);
};
/**
* 汎用関数 - Buffer初期化
* Buffer.fromが実装されているバージョンならそちらを優先して使用
* cheerioとは無関係
*
* @param val 初期化内容
* @param type 初期化型
* @return Buffer
*/
module.exports.newBuffer = function (val, type) {
return (Buffer.from) ? Buffer.from(val, type) : new Buffer(val, type);
};
/**
* 汎用関数 - 色付きメッセージ表示
* cheerioとは無関係
*
* @param type メッセージの種類
* @param msg 表示するメッセージ
*/
module.exports.colorMessage = function (type, msg) {
/*eslint-disable key-spacing*/
var colorConf = {
DEPRECATED : 'yellow',
WARNING : 'magenta'
};
/*eslint-enable key-spacing*/
// スタックトレースを取得
var stackTrace = null;
try {
throw new Error('dummy');
} catch (e) {
stackTrace = e.stack.split(/[\r\n]+/).filter(function (v, v2, v3) {
return /^\s*at\s+.*:[\d]+:[\d]+/.test(v);
}).map(function (v) {
return v.trim();
});
}
// メッセージのトリガーとなった箇所を取得
var at = '';
for (var i = 0; i < stackTrace.length; i++) {
var trace = stackTrace[i];
if (! /^at/.test(trace)) continue;
if (/[\\\/]cheerio-httpcli[\\\/]lib[\\\/]/.test(trace)) continue;
at = trace;
break;
}
console.warn(colors[colorConf[type] || 'white'](
'[' + type + '] ' + msg + ' ' + at
));
};