es6-crawler-detect 3.2.0 → 4.0.0-beta.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.
Files changed (361) hide show
  1. package/.babelrc +1 -1
  2. package/.mocharc.json +5 -0
  3. package/README.md +1 -0
  4. package/dist/main.bundle.js +1 -1
  5. package/eslint.config.mjs +62 -0
  6. package/example/node/package.json +1 -1
  7. package/example/node/server.js +38 -32
  8. package/example/node/yarn.lock +222 -99
  9. package/package.json +30 -25
  10. package/src/index.js +20 -14
  11. package/src/index.ts +18 -0
  12. package/src/lib/crawler/crawlers.js +9 -12
  13. package/src/lib/crawler/crawlers.ts +1397 -0
  14. package/src/lib/crawler/exclusions.js +7 -11
  15. package/src/lib/crawler/exclusions.ts +56 -0
  16. package/src/lib/crawler/headers.js +6 -10
  17. package/src/lib/crawler/headers.ts +18 -0
  18. package/src/lib/crawler/provider.js +1 -10
  19. package/src/lib/crawler/provider.ts +3 -0
  20. package/src/lib/crawler.js +61 -98
  21. package/src/lib/crawler.ts +128 -0
  22. package/src/types.js +2 -0
  23. package/src/types.ts +15 -0
  24. package/test/lib/crawler.spec.js +149 -0
  25. package/test/lib/crawler.spec.ts +116 -0
  26. package/test/lib/database/crawlers.txt +3651 -0
  27. package/test/lib/database/devices.txt +165636 -0
  28. package/tsconfig.json +16 -0
  29. package/webpack.common.js +20 -20
  30. package/webpack.dev.js +7 -7
  31. package/webpack.prod.js +14 -14
  32. package/.eslintignore +0 -6
  33. package/.eslintrc.json +0 -30
  34. package/example/node/node_modules/.bin/mime +0 -15
  35. package/example/node/node_modules/.bin/mime.cmd +0 -7
  36. package/example/node/node_modules/.yarn-integrity +0 -67
  37. package/example/node/node_modules/accepts/HISTORY.md +0 -236
  38. package/example/node/node_modules/accepts/LICENSE +0 -23
  39. package/example/node/node_modules/accepts/README.md +0 -142
  40. package/example/node/node_modules/accepts/index.js +0 -238
  41. package/example/node/node_modules/accepts/package.json +0 -47
  42. package/example/node/node_modules/array-flatten/LICENSE +0 -21
  43. package/example/node/node_modules/array-flatten/README.md +0 -43
  44. package/example/node/node_modules/array-flatten/array-flatten.js +0 -64
  45. package/example/node/node_modules/array-flatten/package.json +0 -39
  46. package/example/node/node_modules/body-parser/HISTORY.md +0 -624
  47. package/example/node/node_modules/body-parser/LICENSE +0 -23
  48. package/example/node/node_modules/body-parser/README.md +0 -456
  49. package/example/node/node_modules/body-parser/index.js +0 -157
  50. package/example/node/node_modules/body-parser/lib/read.js +0 -181
  51. package/example/node/node_modules/body-parser/lib/types/json.js +0 -230
  52. package/example/node/node_modules/body-parser/lib/types/raw.js +0 -101
  53. package/example/node/node_modules/body-parser/lib/types/text.js +0 -121
  54. package/example/node/node_modules/body-parser/lib/types/urlencoded.js +0 -284
  55. package/example/node/node_modules/body-parser/package.json +0 -52
  56. package/example/node/node_modules/bytes/History.md +0 -92
  57. package/example/node/node_modules/bytes/LICENSE +0 -23
  58. package/example/node/node_modules/bytes/Readme.md +0 -152
  59. package/example/node/node_modules/bytes/index.js +0 -166
  60. package/example/node/node_modules/bytes/package.json +0 -42
  61. package/example/node/node_modules/content-disposition/HISTORY.md +0 -60
  62. package/example/node/node_modules/content-disposition/LICENSE +0 -22
  63. package/example/node/node_modules/content-disposition/README.md +0 -142
  64. package/example/node/node_modules/content-disposition/index.js +0 -458
  65. package/example/node/node_modules/content-disposition/package.json +0 -44
  66. package/example/node/node_modules/content-type/HISTORY.md +0 -24
  67. package/example/node/node_modules/content-type/LICENSE +0 -22
  68. package/example/node/node_modules/content-type/README.md +0 -92
  69. package/example/node/node_modules/content-type/index.js +0 -222
  70. package/example/node/node_modules/content-type/package.json +0 -40
  71. package/example/node/node_modules/cookie/HISTORY.md +0 -128
  72. package/example/node/node_modules/cookie/LICENSE +0 -24
  73. package/example/node/node_modules/cookie/README.md +0 -257
  74. package/example/node/node_modules/cookie/index.js +0 -202
  75. package/example/node/node_modules/cookie/package.json +0 -40
  76. package/example/node/node_modules/cookie-signature/History.md +0 -38
  77. package/example/node/node_modules/cookie-signature/Readme.md +0 -42
  78. package/example/node/node_modules/cookie-signature/index.js +0 -51
  79. package/example/node/node_modules/cookie-signature/package.json +0 -18
  80. package/example/node/node_modules/debug/.coveralls.yml +0 -1
  81. package/example/node/node_modules/debug/.eslintrc +0 -11
  82. package/example/node/node_modules/debug/.travis.yml +0 -14
  83. package/example/node/node_modules/debug/CHANGELOG.md +0 -362
  84. package/example/node/node_modules/debug/LICENSE +0 -19
  85. package/example/node/node_modules/debug/Makefile +0 -50
  86. package/example/node/node_modules/debug/README.md +0 -312
  87. package/example/node/node_modules/debug/component.json +0 -19
  88. package/example/node/node_modules/debug/karma.conf.js +0 -70
  89. package/example/node/node_modules/debug/node.js +0 -1
  90. package/example/node/node_modules/debug/package.json +0 -49
  91. package/example/node/node_modules/debug/src/browser.js +0 -185
  92. package/example/node/node_modules/debug/src/debug.js +0 -202
  93. package/example/node/node_modules/debug/src/index.js +0 -10
  94. package/example/node/node_modules/debug/src/inspector-log.js +0 -15
  95. package/example/node/node_modules/debug/src/node.js +0 -248
  96. package/example/node/node_modules/depd/History.md +0 -96
  97. package/example/node/node_modules/depd/LICENSE +0 -22
  98. package/example/node/node_modules/depd/Readme.md +0 -280
  99. package/example/node/node_modules/depd/index.js +0 -522
  100. package/example/node/node_modules/depd/lib/browser/index.js +0 -77
  101. package/example/node/node_modules/depd/lib/compat/callsite-tostring.js +0 -103
  102. package/example/node/node_modules/depd/lib/compat/event-listener-count.js +0 -22
  103. package/example/node/node_modules/depd/lib/compat/index.js +0 -79
  104. package/example/node/node_modules/depd/package.json +0 -41
  105. package/example/node/node_modules/destroy/LICENSE +0 -22
  106. package/example/node/node_modules/destroy/README.md +0 -60
  107. package/example/node/node_modules/destroy/index.js +0 -75
  108. package/example/node/node_modules/destroy/package.json +0 -37
  109. package/example/node/node_modules/ee-first/LICENSE +0 -22
  110. package/example/node/node_modules/ee-first/README.md +0 -80
  111. package/example/node/node_modules/ee-first/index.js +0 -95
  112. package/example/node/node_modules/ee-first/package.json +0 -29
  113. package/example/node/node_modules/encodeurl/HISTORY.md +0 -14
  114. package/example/node/node_modules/encodeurl/LICENSE +0 -22
  115. package/example/node/node_modules/encodeurl/README.md +0 -128
  116. package/example/node/node_modules/encodeurl/index.js +0 -60
  117. package/example/node/node_modules/encodeurl/package.json +0 -40
  118. package/example/node/node_modules/escape-html/LICENSE +0 -24
  119. package/example/node/node_modules/escape-html/Readme.md +0 -43
  120. package/example/node/node_modules/escape-html/index.js +0 -78
  121. package/example/node/node_modules/escape-html/package.json +0 -24
  122. package/example/node/node_modules/etag/HISTORY.md +0 -83
  123. package/example/node/node_modules/etag/LICENSE +0 -22
  124. package/example/node/node_modules/etag/README.md +0 -159
  125. package/example/node/node_modules/etag/index.js +0 -131
  126. package/example/node/node_modules/etag/package.json +0 -47
  127. package/example/node/node_modules/express/History.md +0 -3510
  128. package/example/node/node_modules/express/LICENSE +0 -24
  129. package/example/node/node_modules/express/Readme.md +0 -158
  130. package/example/node/node_modules/express/index.js +0 -11
  131. package/example/node/node_modules/express/lib/application.js +0 -644
  132. package/example/node/node_modules/express/lib/express.js +0 -116
  133. package/example/node/node_modules/express/lib/middleware/init.js +0 -43
  134. package/example/node/node_modules/express/lib/middleware/query.js +0 -47
  135. package/example/node/node_modules/express/lib/request.js +0 -525
  136. package/example/node/node_modules/express/lib/response.js +0 -1147
  137. package/example/node/node_modules/express/lib/router/index.js +0 -668
  138. package/example/node/node_modules/express/lib/router/layer.js +0 -181
  139. package/example/node/node_modules/express/lib/router/route.js +0 -216
  140. package/example/node/node_modules/express/lib/utils.js +0 -302
  141. package/example/node/node_modules/express/lib/view.js +0 -182
  142. package/example/node/node_modules/express/package.json +0 -99
  143. package/example/node/node_modules/finalhandler/HISTORY.md +0 -187
  144. package/example/node/node_modules/finalhandler/LICENSE +0 -22
  145. package/example/node/node_modules/finalhandler/README.md +0 -148
  146. package/example/node/node_modules/finalhandler/index.js +0 -331
  147. package/example/node/node_modules/finalhandler/package.json +0 -45
  148. package/example/node/node_modules/forwarded/HISTORY.md +0 -21
  149. package/example/node/node_modules/forwarded/LICENSE +0 -22
  150. package/example/node/node_modules/forwarded/README.md +0 -57
  151. package/example/node/node_modules/forwarded/index.js +0 -90
  152. package/example/node/node_modules/forwarded/package.json +0 -45
  153. package/example/node/node_modules/fresh/HISTORY.md +0 -70
  154. package/example/node/node_modules/fresh/LICENSE +0 -23
  155. package/example/node/node_modules/fresh/README.md +0 -119
  156. package/example/node/node_modules/fresh/index.js +0 -137
  157. package/example/node/node_modules/fresh/package.json +0 -46
  158. package/example/node/node_modules/http-errors/HISTORY.md +0 -165
  159. package/example/node/node_modules/http-errors/LICENSE +0 -23
  160. package/example/node/node_modules/http-errors/README.md +0 -169
  161. package/example/node/node_modules/http-errors/index.js +0 -299
  162. package/example/node/node_modules/http-errors/package.json +0 -49
  163. package/example/node/node_modules/iconv-lite/Changelog.md +0 -162
  164. package/example/node/node_modules/iconv-lite/LICENSE +0 -21
  165. package/example/node/node_modules/iconv-lite/README.md +0 -156
  166. package/example/node/node_modules/iconv-lite/encodings/dbcs-codec.js +0 -555
  167. package/example/node/node_modules/iconv-lite/encodings/dbcs-data.js +0 -176
  168. package/example/node/node_modules/iconv-lite/encodings/index.js +0 -22
  169. package/example/node/node_modules/iconv-lite/encodings/internal.js +0 -188
  170. package/example/node/node_modules/iconv-lite/encodings/sbcs-codec.js +0 -72
  171. package/example/node/node_modules/iconv-lite/encodings/sbcs-data-generated.js +0 -451
  172. package/example/node/node_modules/iconv-lite/encodings/sbcs-data.js +0 -174
  173. package/example/node/node_modules/iconv-lite/encodings/tables/big5-added.json +0 -122
  174. package/example/node/node_modules/iconv-lite/encodings/tables/cp936.json +0 -264
  175. package/example/node/node_modules/iconv-lite/encodings/tables/cp949.json +0 -273
  176. package/example/node/node_modules/iconv-lite/encodings/tables/cp950.json +0 -177
  177. package/example/node/node_modules/iconv-lite/encodings/tables/eucjp.json +0 -182
  178. package/example/node/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +0 -1
  179. package/example/node/node_modules/iconv-lite/encodings/tables/gbk-added.json +0 -55
  180. package/example/node/node_modules/iconv-lite/encodings/tables/shiftjis.json +0 -125
  181. package/example/node/node_modules/iconv-lite/encodings/utf16.js +0 -177
  182. package/example/node/node_modules/iconv-lite/encodings/utf7.js +0 -290
  183. package/example/node/node_modules/iconv-lite/lib/bom-handling.js +0 -52
  184. package/example/node/node_modules/iconv-lite/lib/extend-node.js +0 -217
  185. package/example/node/node_modules/iconv-lite/lib/index.d.ts +0 -24
  186. package/example/node/node_modules/iconv-lite/lib/index.js +0 -153
  187. package/example/node/node_modules/iconv-lite/lib/streams.js +0 -121
  188. package/example/node/node_modules/iconv-lite/package.json +0 -46
  189. package/example/node/node_modules/inherits/LICENSE +0 -16
  190. package/example/node/node_modules/inherits/README.md +0 -42
  191. package/example/node/node_modules/inherits/inherits.js +0 -9
  192. package/example/node/node_modules/inherits/inherits_browser.js +0 -27
  193. package/example/node/node_modules/inherits/package.json +0 -29
  194. package/example/node/node_modules/ipaddr.js/LICENSE +0 -19
  195. package/example/node/node_modules/ipaddr.js/README.md +0 -233
  196. package/example/node/node_modules/ipaddr.js/ipaddr.min.js +0 -1
  197. package/example/node/node_modules/ipaddr.js/lib/ipaddr.js +0 -673
  198. package/example/node/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +0 -68
  199. package/example/node/node_modules/ipaddr.js/package.json +0 -35
  200. package/example/node/node_modules/media-typer/HISTORY.md +0 -22
  201. package/example/node/node_modules/media-typer/LICENSE +0 -22
  202. package/example/node/node_modules/media-typer/README.md +0 -81
  203. package/example/node/node_modules/media-typer/index.js +0 -270
  204. package/example/node/node_modules/media-typer/package.json +0 -26
  205. package/example/node/node_modules/merge-descriptors/HISTORY.md +0 -21
  206. package/example/node/node_modules/merge-descriptors/LICENSE +0 -23
  207. package/example/node/node_modules/merge-descriptors/README.md +0 -48
  208. package/example/node/node_modules/merge-descriptors/index.js +0 -60
  209. package/example/node/node_modules/merge-descriptors/package.json +0 -32
  210. package/example/node/node_modules/methods/HISTORY.md +0 -29
  211. package/example/node/node_modules/methods/LICENSE +0 -24
  212. package/example/node/node_modules/methods/README.md +0 -51
  213. package/example/node/node_modules/methods/index.js +0 -69
  214. package/example/node/node_modules/methods/package.json +0 -36
  215. package/example/node/node_modules/mime/CHANGELOG.md +0 -164
  216. package/example/node/node_modules/mime/LICENSE +0 -21
  217. package/example/node/node_modules/mime/README.md +0 -90
  218. package/example/node/node_modules/mime/cli.js +0 -8
  219. package/example/node/node_modules/mime/mime.js +0 -108
  220. package/example/node/node_modules/mime/package.json +0 -44
  221. package/example/node/node_modules/mime/src/build.js +0 -53
  222. package/example/node/node_modules/mime/src/test.js +0 -60
  223. package/example/node/node_modules/mime/types.json +0 -1
  224. package/example/node/node_modules/mime-db/HISTORY.md +0 -499
  225. package/example/node/node_modules/mime-db/LICENSE +0 -22
  226. package/example/node/node_modules/mime-db/README.md +0 -100
  227. package/example/node/node_modules/mime-db/db.json +0 -8471
  228. package/example/node/node_modules/mime-db/index.js +0 -11
  229. package/example/node/node_modules/mime-db/package.json +0 -59
  230. package/example/node/node_modules/mime-types/HISTORY.md +0 -388
  231. package/example/node/node_modules/mime-types/LICENSE +0 -23
  232. package/example/node/node_modules/mime-types/README.md +0 -113
  233. package/example/node/node_modules/mime-types/index.js +0 -188
  234. package/example/node/node_modules/mime-types/package.json +0 -44
  235. package/example/node/node_modules/ms/index.js +0 -152
  236. package/example/node/node_modules/ms/license.md +0 -21
  237. package/example/node/node_modules/ms/package.json +0 -37
  238. package/example/node/node_modules/ms/readme.md +0 -51
  239. package/example/node/node_modules/negotiator/HISTORY.md +0 -103
  240. package/example/node/node_modules/negotiator/LICENSE +0 -24
  241. package/example/node/node_modules/negotiator/README.md +0 -203
  242. package/example/node/node_modules/negotiator/index.js +0 -124
  243. package/example/node/node_modules/negotiator/lib/charset.js +0 -169
  244. package/example/node/node_modules/negotiator/lib/encoding.js +0 -184
  245. package/example/node/node_modules/negotiator/lib/language.js +0 -179
  246. package/example/node/node_modules/negotiator/lib/mediaType.js +0 -294
  247. package/example/node/node_modules/negotiator/package.json +0 -42
  248. package/example/node/node_modules/on-finished/HISTORY.md +0 -88
  249. package/example/node/node_modules/on-finished/LICENSE +0 -23
  250. package/example/node/node_modules/on-finished/README.md +0 -154
  251. package/example/node/node_modules/on-finished/index.js +0 -196
  252. package/example/node/node_modules/on-finished/package.json +0 -31
  253. package/example/node/node_modules/parseurl/HISTORY.md +0 -58
  254. package/example/node/node_modules/parseurl/LICENSE +0 -24
  255. package/example/node/node_modules/parseurl/README.md +0 -133
  256. package/example/node/node_modules/parseurl/index.js +0 -158
  257. package/example/node/node_modules/parseurl/package.json +0 -40
  258. package/example/node/node_modules/path-to-regexp/History.md +0 -36
  259. package/example/node/node_modules/path-to-regexp/LICENSE +0 -21
  260. package/example/node/node_modules/path-to-regexp/Readme.md +0 -35
  261. package/example/node/node_modules/path-to-regexp/index.js +0 -129
  262. package/example/node/node_modules/path-to-regexp/package.json +0 -30
  263. package/example/node/node_modules/proxy-addr/HISTORY.md +0 -161
  264. package/example/node/node_modules/proxy-addr/LICENSE +0 -22
  265. package/example/node/node_modules/proxy-addr/README.md +0 -139
  266. package/example/node/node_modules/proxy-addr/index.js +0 -327
  267. package/example/node/node_modules/proxy-addr/package.json +0 -47
  268. package/example/node/node_modules/qs/.editorconfig +0 -39
  269. package/example/node/node_modules/qs/.eslintignore +0 -2
  270. package/example/node/node_modules/qs/.eslintrc +0 -35
  271. package/example/node/node_modules/qs/.github/FUNDING.yml +0 -12
  272. package/example/node/node_modules/qs/.nycrc +0 -13
  273. package/example/node/node_modules/qs/CHANGELOG.md +0 -359
  274. package/example/node/node_modules/qs/LICENSE.md +0 -29
  275. package/example/node/node_modules/qs/README.md +0 -604
  276. package/example/node/node_modules/qs/dist/qs.js +0 -832
  277. package/example/node/node_modules/qs/lib/formats.js +0 -23
  278. package/example/node/node_modules/qs/lib/index.js +0 -11
  279. package/example/node/node_modules/qs/lib/parse.js +0 -257
  280. package/example/node/node_modules/qs/lib/stringify.js +0 -278
  281. package/example/node/node_modules/qs/lib/utils.js +0 -251
  282. package/example/node/node_modules/qs/package.json +0 -69
  283. package/example/node/node_modules/qs/test/parse.js +0 -772
  284. package/example/node/node_modules/qs/test/stringify.js +0 -793
  285. package/example/node/node_modules/qs/test/utils.js +0 -136
  286. package/example/node/node_modules/range-parser/HISTORY.md +0 -56
  287. package/example/node/node_modules/range-parser/LICENSE +0 -23
  288. package/example/node/node_modules/range-parser/README.md +0 -84
  289. package/example/node/node_modules/range-parser/index.js +0 -162
  290. package/example/node/node_modules/range-parser/package.json +0 -44
  291. package/example/node/node_modules/raw-body/HISTORY.md +0 -284
  292. package/example/node/node_modules/raw-body/LICENSE +0 -22
  293. package/example/node/node_modules/raw-body/README.md +0 -217
  294. package/example/node/node_modules/raw-body/index.d.ts +0 -87
  295. package/example/node/node_modules/raw-body/index.js +0 -286
  296. package/example/node/node_modules/raw-body/package.json +0 -48
  297. package/example/node/node_modules/safe-buffer/LICENSE +0 -21
  298. package/example/node/node_modules/safe-buffer/README.md +0 -584
  299. package/example/node/node_modules/safe-buffer/index.d.ts +0 -187
  300. package/example/node/node_modules/safe-buffer/index.js +0 -65
  301. package/example/node/node_modules/safe-buffer/package.json +0 -51
  302. package/example/node/node_modules/safer-buffer/LICENSE +0 -21
  303. package/example/node/node_modules/safer-buffer/Porting-Buffer.md +0 -268
  304. package/example/node/node_modules/safer-buffer/Readme.md +0 -156
  305. package/example/node/node_modules/safer-buffer/dangerous.js +0 -58
  306. package/example/node/node_modules/safer-buffer/package.json +0 -34
  307. package/example/node/node_modules/safer-buffer/safer.js +0 -77
  308. package/example/node/node_modules/safer-buffer/tests.js +0 -406
  309. package/example/node/node_modules/send/HISTORY.md +0 -506
  310. package/example/node/node_modules/send/LICENSE +0 -23
  311. package/example/node/node_modules/send/README.md +0 -327
  312. package/example/node/node_modules/send/index.js +0 -1133
  313. package/example/node/node_modules/send/node_modules/.bin/mime +0 -15
  314. package/example/node/node_modules/send/node_modules/.bin/mime.cmd +0 -7
  315. package/example/node/node_modules/send/node_modules/ms/index.js +0 -162
  316. package/example/node/node_modules/send/node_modules/ms/license.md +0 -21
  317. package/example/node/node_modules/send/node_modules/ms/package.json +0 -38
  318. package/example/node/node_modules/send/node_modules/ms/readme.md +0 -59
  319. package/example/node/node_modules/send/package.json +0 -61
  320. package/example/node/node_modules/serve-static/HISTORY.md +0 -459
  321. package/example/node/node_modules/serve-static/LICENSE +0 -25
  322. package/example/node/node_modules/serve-static/README.md +0 -257
  323. package/example/node/node_modules/serve-static/index.js +0 -210
  324. package/example/node/node_modules/serve-static/package.json +0 -42
  325. package/example/node/node_modules/setprototypeof/LICENSE +0 -13
  326. package/example/node/node_modules/setprototypeof/README.md +0 -31
  327. package/example/node/node_modules/setprototypeof/index.d.ts +0 -2
  328. package/example/node/node_modules/setprototypeof/index.js +0 -17
  329. package/example/node/node_modules/setprototypeof/package.json +0 -38
  330. package/example/node/node_modules/setprototypeof/test/index.js +0 -24
  331. package/example/node/node_modules/statuses/HISTORY.md +0 -65
  332. package/example/node/node_modules/statuses/LICENSE +0 -23
  333. package/example/node/node_modules/statuses/README.md +0 -127
  334. package/example/node/node_modules/statuses/codes.json +0 -66
  335. package/example/node/node_modules/statuses/index.js +0 -113
  336. package/example/node/node_modules/statuses/package.json +0 -48
  337. package/example/node/node_modules/toidentifier/HISTORY.md +0 -9
  338. package/example/node/node_modules/toidentifier/LICENSE +0 -21
  339. package/example/node/node_modules/toidentifier/README.md +0 -61
  340. package/example/node/node_modules/toidentifier/index.js +0 -32
  341. package/example/node/node_modules/toidentifier/package.json +0 -38
  342. package/example/node/node_modules/type-is/HISTORY.md +0 -259
  343. package/example/node/node_modules/type-is/LICENSE +0 -23
  344. package/example/node/node_modules/type-is/README.md +0 -170
  345. package/example/node/node_modules/type-is/index.js +0 -266
  346. package/example/node/node_modules/type-is/package.json +0 -45
  347. package/example/node/node_modules/unpipe/HISTORY.md +0 -4
  348. package/example/node/node_modules/unpipe/LICENSE +0 -22
  349. package/example/node/node_modules/unpipe/README.md +0 -43
  350. package/example/node/node_modules/unpipe/index.js +0 -69
  351. package/example/node/node_modules/unpipe/package.json +0 -27
  352. package/example/node/node_modules/utils-merge/LICENSE +0 -20
  353. package/example/node/node_modules/utils-merge/README.md +0 -34
  354. package/example/node/node_modules/utils-merge/index.js +0 -23
  355. package/example/node/node_modules/utils-merge/package.json +0 -40
  356. package/example/node/node_modules/vary/HISTORY.md +0 -39
  357. package/example/node/node_modules/vary/LICENSE +0 -22
  358. package/example/node/node_modules/vary/README.md +0 -101
  359. package/example/node/node_modules/vary/index.js +0 -149
  360. package/example/node/node_modules/vary/package.json +0 -43
  361. package/test/lib/crawler.test.js +0 -52
@@ -1,12 +1,9 @@
1
1
  'use strict';
2
-
3
- const Provider = require('./provider');
4
-
5
- class Exclusions extends Provider {
6
- constructor() {
7
- super();
8
-
9
- this.data = [
2
+ Object.defineProperty(exports, '__esModule', { value: true });
3
+ exports.Exclusions = void 0;
4
+ class Exclusions {
5
+ getAll() {
6
+ return [
10
7
  'Safari.[\\d\\.]*',
11
8
  'Firefox.[\\d\\.]*',
12
9
  ' Chrome.[\\d\\.]*',
@@ -54,9 +51,8 @@ class Exclusions extends Provider {
54
51
  '; IDbot',
55
52
  '; ID bot',
56
53
  '; POWER BOT',
57
- ';',
54
+ 'OCTOPUS-CORE',
58
55
  ];
59
56
  }
60
57
  }
61
-
62
- module.exports = Exclusions;
58
+ exports.Exclusions = Exclusions;
@@ -0,0 +1,56 @@
1
+ import { Provider } from './provider';
2
+
3
+ export class Exclusions implements Provider {
4
+ getAll(): string[] {
5
+ return [
6
+ 'Safari.[\\d\\.]*',
7
+ 'Firefox.[\\d\\.]*',
8
+ ' Chrome.[\\d\\.]*',
9
+ 'Chromium.[\\d\\.]*',
10
+ 'MSIE.[\\d\\.]',
11
+ 'Opera\\/[\\d\\.]*',
12
+ 'Mozilla.[\\d\\.]*',
13
+ 'AppleWebKit.[\\d\\.]*',
14
+ 'Trident.[\\d\\.]*',
15
+ 'Windows NT.[\\d\\.]*',
16
+ 'Android [\\d\\.]*',
17
+ 'Macintosh.',
18
+ 'Ubuntu',
19
+ 'Linux',
20
+ '[ ]Intel',
21
+ 'Mac OS X [\\d_]*',
22
+ '(like )?Gecko(.[\\d\\.]*)?',
23
+ 'KHTML,',
24
+ 'CriOS.[\\d\\.]*',
25
+ 'CPU iPhone OS ([0-9_])* like Mac OS X',
26
+ 'CPU OS ([0-9_])* like Mac OS X',
27
+ 'iPod',
28
+ 'compatible',
29
+ 'x86_..',
30
+ 'i686',
31
+ 'x64',
32
+ 'X11',
33
+ 'rv:[\\d\\.]*',
34
+ 'Version.[\\d\\.]*',
35
+ 'WOW64',
36
+ 'Win64',
37
+ 'Dalvik.[\\d\\.]*',
38
+ ' \\.NET CLR [\\d\\.]*',
39
+ 'Presto.[\\d\\.]*',
40
+ 'Media Center PC',
41
+ 'BlackBerry',
42
+ 'Build',
43
+ 'Opera Mini\\/\\d{1,2}\\.\\d{1,2}\\.[\\d\\.]*\\/\\d{1,2}\\.',
44
+ 'Opera',
45
+ ' \\.NET[\\d\\.]*',
46
+ 'cubot',
47
+ '; M bot',
48
+ '; CRONO',
49
+ '; B bot',
50
+ '; IDbot',
51
+ '; ID bot',
52
+ '; POWER BOT',
53
+ 'OCTOPUS-CORE',
54
+ ];
55
+ }
56
+ }
@@ -1,12 +1,9 @@
1
1
  'use strict';
2
-
3
- const Provider = require('./provider');
4
-
5
- class Headers extends Provider {
6
- constructor() {
7
- super();
8
-
9
- this.data = [
2
+ Object.defineProperty(exports, '__esModule', { value: true });
3
+ exports.Headers = void 0;
4
+ class Headers {
5
+ getAll() {
6
+ return [
10
7
  'USER-AGENT',
11
8
  'X-OPERAMINI-PHONE-UA',
12
9
  'X-DEVICE-USER-AGENT',
@@ -20,5 +17,4 @@ class Headers extends Provider {
20
17
  ];
21
18
  }
22
19
  }
23
-
24
- module.exports = Headers;
20
+ exports.Headers = Headers;
@@ -0,0 +1,18 @@
1
+ import { Provider } from './provider';
2
+
3
+ export class Headers implements Provider {
4
+ getAll(): string[] {
5
+ return [
6
+ 'USER-AGENT',
7
+ 'X-OPERAMINI-PHONE-UA',
8
+ 'X-DEVICE-USER-AGENT',
9
+ 'X-ORIGINAL-USER-AGENT',
10
+ 'X-SKYFIRE-PHONE',
11
+ 'X-BOLT-PHONE-UA',
12
+ 'DEVICE-STOCK-UA',
13
+ 'X-UCBROWSER-DEVICE-UA',
14
+ 'FROM',
15
+ 'X-SCANNER',
16
+ ];
17
+ }
18
+ }
@@ -1,11 +1,2 @@
1
1
  'use strict';
2
-
3
- class Provider {
4
- constructor() {}
5
-
6
- getAll() {
7
- return this.data;
8
- }
9
- }
10
-
11
- module.exports = Provider;
2
+ Object.defineProperty(exports, '__esModule', { value: true });
@@ -0,0 +1,3 @@
1
+ export interface Provider {
2
+ getAll(): string[];
3
+ }
@@ -1,135 +1,98 @@
1
1
  'use strict';
2
-
3
- const Crawlers = require('./crawler/crawlers');
4
- const Exclusions = require('./crawler/exclusions');
5
- const Headers = require('./crawler/headers');
6
-
2
+ Object.defineProperty(exports, '__esModule', { value: true });
3
+ exports.Crawler = void 0;
4
+ const crawlers_1 = require('./crawler/crawlers');
5
+ const exclusions_1 = require('./crawler/exclusions');
6
+ const headers_1 = require('./crawler/headers');
7
7
  class Crawler {
8
+ crawlers;
9
+ headers;
10
+ exclusions;
11
+ request;
12
+ compiledRegexList;
13
+ compiledExclusions;
14
+ httpHeaders;
15
+ userAgent;
16
+ matches;
8
17
  constructor(request, headers, userAgent) {
9
- /**
10
- * Init classes
11
- */
12
- this._init();
13
-
14
- /**
15
- * This request must be an object
16
- */
17
- this.request = typeof request === 'object' ? request : {};
18
-
18
+ this.crawlers = new crawlers_1.Crawlers();
19
+ this.headers = new headers_1.Headers();
20
+ this.exclusions = new exclusions_1.Exclusions();
21
+ this.request = request ?? {};
19
22
  // The regex-list must not be used with g-flag!
20
23
  // See: https://stackoverflow.com/questions/1520800/why-does-a-regexp-with-global-flag-give-wrong-results
21
24
  this.compiledRegexList = this.compileRegex(this.crawlers.getAll(), 'i');
22
-
23
25
  // The exclusions should be used with g-flag in order to remove each value.
24
- this.compiledExclusions = this.compileRegex(this.exclusions.getAll(), 'g');
25
-
26
- /**
27
- * Set http headers
28
- */
29
- this.setHttpHeaders(headers);
30
-
31
- /**
32
- * Set userAgent
33
- */
26
+ this.compiledExclusions = this.compileRegex(this.exclusions.getAll(), 'gi');
27
+ this.httpHeaders = this.setHttpHeaders(headers);
34
28
  this.userAgent = this.setUserAgent(userAgent);
35
29
  }
36
-
37
- /**
38
- * Init Classes Instances
39
- */
40
- _init() {
41
- this.crawlers = new Crawlers();
42
- this.headers = new Headers();
43
- this.exclusions = new Exclusions();
44
- }
45
-
46
30
  compileRegex(patterns, flags) {
47
- return new RegExp(patterns.join('|').trim(), flags);
31
+ return new RegExp(patterns.join('|'), flags);
48
32
  }
49
-
50
- /**
51
- * Set HTTP headers.
52
- */
53
33
  setHttpHeaders(headers) {
54
34
  // Use the Request headers if httpHeaders is not defined
55
- if (typeof headers === 'undefined' || Object.keys(headers).length === 0) {
56
- headers = Object.keys(this.request).length ? this.request.headers : {};
57
- }
58
-
59
- // Clear existing headers.
60
- this.httpHeaders = [];
61
-
62
- // Only save HTTP headers.
63
- for (const key in headers) {
64
- this.httpHeaders[key] = headers[key];
35
+ if (!headers || Object.keys(headers).length === 0) {
36
+ if (Object.keys(this.request).length) {
37
+ if (this.request.headers) {
38
+ return this.request.headers;
39
+ }
40
+ }
41
+ return '';
65
42
  }
43
+ // Save the headers.
44
+ return headers;
66
45
  }
67
-
68
- /**
69
- * Set user agent
70
- */
71
46
  setUserAgent(userAgent) {
72
- if (
73
- typeof userAgent === 'undefined' ||
74
- userAgent === null ||
75
- !userAgent.length
76
- ) {
47
+ if (!userAgent?.length) {
48
+ userAgent = '';
77
49
  for (const header of this.getUaHttpHeaders()) {
78
- if (Object.keys(this.httpHeaders).indexOf(header.toLowerCase()) >= 0) {
79
- userAgent += this.httpHeaders[header] + ' ';
50
+ if (
51
+ typeof this.httpHeaders === 'object' &&
52
+ !Array.isArray(this.httpHeaders)
53
+ ) {
54
+ if (Object.hasOwn(this.httpHeaders, header.toLowerCase())) {
55
+ const headerValue = this.httpHeaders[header.toLowerCase()];
56
+ if (typeof headerValue === 'string') {
57
+ const separator = userAgent.length > 0 ? ' ' : '';
58
+ userAgent += separator + headerValue;
59
+ } else if (Array.isArray(headerValue)) {
60
+ const separator = userAgent.length > 0 ? ' ' : '';
61
+ userAgent += separator + headerValue.join(' ');
62
+ }
63
+ }
80
64
  }
81
65
  }
82
66
  }
83
-
84
67
  return userAgent;
85
68
  }
86
-
87
- /**
88
- * Get user agent headers
89
- */
90
69
  getUaHttpHeaders() {
91
70
  return this.headers.getAll();
92
71
  }
93
-
94
- /**
95
- * Check user agent string against the regex.
96
- */
97
- isCrawler(userAgent = undefined) {
98
- if (Buffer.byteLength(userAgent || '', 'utf8') > 4096) {
72
+ getMatches() {
73
+ if (this.matches !== undefined) {
74
+ if (this.matches?.length) {
75
+ return this.matches[0];
76
+ }
77
+ return null;
78
+ }
79
+ return {};
80
+ }
81
+ isCrawler(userAgent) {
82
+ if (Buffer.byteLength(userAgent ?? '', 'utf8') > 4096) {
99
83
  return false;
100
84
  }
101
-
102
- var agent =
103
- typeof userAgent === 'undefined' || userAgent === null
104
- ? this.userAgent
105
- : userAgent;
106
-
85
+ let agent = userAgent ?? this.userAgent;
107
86
  // test on compiled regx
108
87
  agent = agent.replace(this.compiledExclusions, '');
109
-
110
88
  if (agent.trim().length === 0) {
111
89
  return false;
112
90
  }
113
-
114
- var matches = this.compiledRegexList.exec(agent.trim());
115
-
91
+ const matches = this.compiledRegexList.exec(agent);
116
92
  if (matches) {
117
93
  this.matches = matches;
118
94
  }
119
-
120
- return matches !== null ? (matches.length ? true : false) : false;
121
- }
122
-
123
- /**
124
- * Return the matches.
125
- */
126
- getMatches() {
127
- return this.matches !== undefined
128
- ? this.matches.length
129
- ? this.matches[0]
130
- : null
131
- : {};
95
+ return matches !== null && matches.length > 0;
132
96
  }
133
97
  }
134
-
135
- module.exports = Crawler;
98
+ exports.Crawler = Crawler;
@@ -0,0 +1,128 @@
1
+ import { Request } from 'express-serve-static-core';
2
+ import { IncomingHttpHeaders } from 'http2';
3
+
4
+ import { Crawlers } from './crawler/crawlers';
5
+ import { Exclusions } from './crawler/exclusions';
6
+ import { Headers } from './crawler/headers';
7
+
8
+ export class Crawler {
9
+ private crawlers: Crawlers;
10
+ private headers: Headers;
11
+ private exclusions: Exclusions;
12
+
13
+ private request: Request | NodeJS.Dict<string | string[]>;
14
+ private compiledRegexList: RegExp;
15
+ private compiledExclusions: RegExp;
16
+ private httpHeaders: string | string[] | IncomingHttpHeaders;
17
+ private userAgent: string;
18
+ private matches?: RegExpExecArray | null;
19
+
20
+ constructor(
21
+ request?: Request,
22
+ headers?: IncomingHttpHeaders,
23
+ userAgent?: string
24
+ ) {
25
+ this.crawlers = new Crawlers();
26
+ this.headers = new Headers();
27
+ this.exclusions = new Exclusions();
28
+
29
+ this.request = request ?? {};
30
+
31
+ // The regex-list must not be used with g-flag!
32
+ // See: https://stackoverflow.com/questions/1520800/why-does-a-regexp-with-global-flag-give-wrong-results
33
+ this.compiledRegexList = this.compileRegex(this.crawlers.getAll(), 'i');
34
+
35
+ // The exclusions should be used with g-flag in order to remove each value.
36
+ this.compiledExclusions = this.compileRegex(this.exclusions.getAll(), 'gi');
37
+
38
+ this.httpHeaders = this.setHttpHeaders(headers);
39
+ this.userAgent = this.setUserAgent(userAgent);
40
+ }
41
+
42
+ public compileRegex(patterns: string[], flags?: string): RegExp {
43
+ return new RegExp(patterns.join('|'), flags);
44
+ }
45
+
46
+ private setHttpHeaders(
47
+ headers?: string | string[] | IncomingHttpHeaders
48
+ ): string | string[] | IncomingHttpHeaders {
49
+ // Use the Request headers if httpHeaders is not defined
50
+ if (!headers || Object.keys(headers).length === 0) {
51
+ if (Object.keys(this.request).length) {
52
+ if (this.request.headers) {
53
+ return this.request.headers;
54
+ }
55
+ }
56
+
57
+ return '';
58
+ }
59
+
60
+ // Save the headers.
61
+ return headers;
62
+ }
63
+
64
+ private setUserAgent(userAgent?: string): string {
65
+ if (!userAgent?.length) {
66
+ userAgent = '';
67
+ for (const header of this.getUaHttpHeaders()) {
68
+ if (
69
+ typeof this.httpHeaders === 'object' &&
70
+ !Array.isArray(this.httpHeaders)
71
+ ) {
72
+ if (Object.hasOwn(this.httpHeaders, header.toLowerCase())) {
73
+ const headerValue = this.httpHeaders[header.toLowerCase()];
74
+
75
+ if (typeof headerValue === 'string') {
76
+ const separator = userAgent.length > 0 ? ' ' : '';
77
+ userAgent += separator + headerValue;
78
+ } else if (Array.isArray(headerValue)) {
79
+ const separator = userAgent.length > 0 ? ' ' : '';
80
+ userAgent += separator + headerValue.join(' ');
81
+ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+
87
+ return userAgent;
88
+ }
89
+
90
+ private getUaHttpHeaders() {
91
+ return this.headers.getAll();
92
+ }
93
+
94
+ public getMatches(): string | null | object {
95
+ if (this.matches !== undefined) {
96
+ if (this.matches?.length) {
97
+ return this.matches[0];
98
+ }
99
+
100
+ return null;
101
+ }
102
+
103
+ return {};
104
+ }
105
+
106
+ public isCrawler(userAgent?: string): boolean {
107
+ if (Buffer.byteLength(userAgent ?? '', 'utf8') > 4096) {
108
+ return false;
109
+ }
110
+
111
+ let agent = userAgent ?? this.userAgent;
112
+
113
+ // test on compiled regx
114
+ agent = agent.replace(this.compiledExclusions, '');
115
+
116
+ if (agent.trim().length === 0) {
117
+ return false;
118
+ }
119
+
120
+ const matches = this.compiledRegexList.exec(agent);
121
+
122
+ if (matches) {
123
+ this.matches = matches;
124
+ }
125
+
126
+ return matches !== null && matches.length > 0;
127
+ }
128
+ }
package/src/types.js ADDED
@@ -0,0 +1,2 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, '__esModule', { value: true });
package/src/types.ts ADDED
@@ -0,0 +1,15 @@
1
+ import { NextFunction, Request, Response } from 'express-serve-static-core';
2
+
3
+ import { Crawler } from './lib/crawler';
4
+
5
+ export type Middleware = (
6
+ request: Request,
7
+ response: Response,
8
+ next: NextFunction
9
+ ) => Promise<Response>;
10
+
11
+ declare module 'express-serve-static-core' {
12
+ interface Request {
13
+ Crawler: Crawler;
14
+ }
15
+ }
@@ -0,0 +1,149 @@
1
+ 'use strict';
2
+ var __createBinding =
3
+ (this && this.__createBinding) ||
4
+ (Object.create
5
+ ? function (o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (
9
+ !desc ||
10
+ ('get' in desc ? !m.__esModule : desc.writable || desc.configurable)
11
+ ) {
12
+ desc = {
13
+ enumerable: true,
14
+ get: function () {
15
+ return m[k];
16
+ },
17
+ };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }
21
+ : function (o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ });
25
+ var __setModuleDefault =
26
+ (this && this.__setModuleDefault) ||
27
+ (Object.create
28
+ ? function (o, v) {
29
+ Object.defineProperty(o, 'default', { enumerable: true, value: v });
30
+ }
31
+ : function (o, v) {
32
+ o['default'] = v;
33
+ });
34
+ var __importStar =
35
+ (this && this.__importStar) ||
36
+ function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null)
40
+ for (var k in mod)
41
+ if (k !== 'default' && Object.prototype.hasOwnProperty.call(mod, k))
42
+ __createBinding(result, mod, k);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ var __importDefault =
47
+ (this && this.__importDefault) ||
48
+ function (mod) {
49
+ return mod && mod.__esModule ? mod : { default: mod };
50
+ };
51
+ Object.defineProperty(exports, '__esModule', { value: true });
52
+ const fs = __importStar(require('fs'));
53
+ const readline = __importStar(require('readline'));
54
+ const assert_1 = __importDefault(require('assert'));
55
+ const src_1 = require('../../src');
56
+ let crawler = new src_1.Crawler();
57
+ describe('regex-compilation', () => {
58
+ it('will join list of patterns with pipes', () => {
59
+ assert_1.default.strictEqual(
60
+ crawler.compileRegex(['some', 'patterns']).source,
61
+ 'some|patterns'
62
+ );
63
+ assert_1.default.strictEqual(
64
+ crawler.compileRegex(['single']).source,
65
+ 'single'
66
+ );
67
+ });
68
+ it('keeps the whitespace', () => {
69
+ assert_1.default.strictEqual(
70
+ crawler.compileRegex([' keep-whitespaces ']).source,
71
+ ' keep-whitespaces '
72
+ );
73
+ });
74
+ it('will accept regex-flags for compilation', () => {
75
+ const patterns = ['some', 'patterns'];
76
+ assert_1.default.strictEqual(
77
+ crawler.compileRegex(patterns, 'g').flags,
78
+ 'g'
79
+ );
80
+ assert_1.default.strictEqual(
81
+ crawler.compileRegex(patterns, 'i').flags,
82
+ 'i'
83
+ );
84
+ });
85
+ it('should be case insensitive', () => {
86
+ assert_1.default.strictEqual(crawler.isCrawler('Facebot\\1.0'), true);
87
+ assert_1.default.strictEqual(
88
+ crawler.getMatches(),
89
+ 'Facebot',
90
+ 'Crawler was not able to identify crawler correctly'
91
+ );
92
+ });
93
+ });
94
+ describe('crawler-identification', () => {
95
+ it('should be able to identify crawlers', async () => {
96
+ const rl = readline.createInterface({
97
+ input: fs.createReadStream('./test/lib/database/crawlers.txt'),
98
+ crlfDelay: Infinity,
99
+ });
100
+ for await (const line of rl) {
101
+ assert_1.default.strictEqual(
102
+ crawler.isCrawler(line),
103
+ true,
104
+ `${line} is not a crawler`
105
+ );
106
+ }
107
+ rl.close();
108
+ });
109
+ it('should be able to identify devices', async () => {
110
+ const rl = readline.createInterface({
111
+ input: fs.createReadStream('./test/lib/database/devices.txt'),
112
+ crlfDelay: Infinity,
113
+ });
114
+ for await (const line of rl) {
115
+ assert_1.default.strictEqual(
116
+ crawler.isCrawler(line),
117
+ false,
118
+ `${line} is not a device`
119
+ );
120
+ }
121
+ rl.close();
122
+ });
123
+ it('should identify the crawler from given headers', async () => {
124
+ crawler = new src_1.Crawler(undefined, {
125
+ host: '127.0.0.1:3000',
126
+ 'user-agent': 'curl/7.73.0',
127
+ accept: '*/*',
128
+ });
129
+ assert_1.default.strictEqual(crawler.isCrawler(), true);
130
+ });
131
+ it('should identify the crawler from request headers', async () => {
132
+ crawler = new src_1.Crawler({
133
+ headers: { 'user-agent': 'curl/7.73.0', accept: '*/*' },
134
+ });
135
+ assert_1.default.strictEqual(crawler.isCrawler(), true);
136
+ });
137
+ it('should identify the crawler from request headers with exact pattern', async () => {
138
+ crawler = new src_1.Crawler({
139
+ headers: { 'user-agent': 'b0t', accept: '*/*' },
140
+ });
141
+ assert_1.default.strictEqual(crawler.isCrawler(), true);
142
+ });
143
+ it('should not throw an exception on empty request header', async () => {
144
+ crawler = new src_1.Crawler({
145
+ headers: { accept: '*/*' },
146
+ });
147
+ assert_1.default.doesNotThrow(() => crawler.isCrawler());
148
+ });
149
+ });