summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/common.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/common.js')
-rw-r--r--deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/common.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/common.js b/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/common.js
new file mode 100644
index 0000000000..47b57c794c
--- /dev/null
+++ b/deps/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/common.js
@@ -0,0 +1,92 @@
+'use strict'
+/**
+ * A set of utilities borrowed from Node.js' _http_common.js
+ */
+
+/**
+ * Verifies that the given val is a valid HTTP token
+ * per the rules defined in RFC 7230
+ * See https://tools.ietf.org/html/rfc7230#section-3.2.6
+ *
+ * Allowed characters in an HTTP token:
+ * ^_`a-z 94-122
+ * A-Z 65-90
+ * - 45
+ * 0-9 48-57
+ * ! 33
+ * #$%&' 35-39
+ * *+ 42-43
+ * . 46
+ * | 124
+ * ~ 126
+ *
+ * This implementation of checkIsHttpToken() loops over the string instead of
+ * using a regular expression since the former is up to 180% faster with v8 4.9
+ * depending on the string length (the shorter the string, the larger the
+ * performance difference)
+ *
+ * Additionally, checkIsHttpToken() is currently designed to be inlinable by v8,
+ * so take care when making changes to the implementation so that the source
+ * code size does not exceed v8's default max_inlined_source_size setting.
+ **/
+/* istanbul ignore next */
+function isValidTokenChar (ch) {
+ if (ch >= 94 && ch <= 122) { return true }
+ if (ch >= 65 && ch <= 90) { return true }
+ if (ch === 45) { return true }
+ if (ch >= 48 && ch <= 57) { return true }
+ if (ch === 34 || ch === 40 || ch === 41 || ch === 44) { return false }
+ if (ch >= 33 && ch <= 46) { return true }
+ if (ch === 124 || ch === 126) { return true }
+ return false
+}
+/* istanbul ignore next */
+function checkIsHttpToken (val) {
+ if (typeof val !== 'string' || val.length === 0) { return false }
+ if (!isValidTokenChar(val.charCodeAt(0))) { return false }
+ const len = val.length
+ if (len > 1) {
+ if (!isValidTokenChar(val.charCodeAt(1))) { return false }
+ if (len > 2) {
+ if (!isValidTokenChar(val.charCodeAt(2))) { return false }
+ if (len > 3) {
+ if (!isValidTokenChar(val.charCodeAt(3))) { return false }
+ for (var i = 4; i < len; i++) {
+ if (!isValidTokenChar(val.charCodeAt(i))) { return false }
+ }
+ }
+ }
+ }
+ return true
+}
+exports.checkIsHttpToken = checkIsHttpToken
+
+/**
+ * True if val contains an invalid field-vchar
+ * field-value = *( field-content / obs-fold )
+ * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
+ * field-vchar = VCHAR / obs-text
+ *
+ * checkInvalidHeaderChar() is currently designed to be inlinable by v8,
+ * so take care when making changes to the implementation so that the source
+ * code size does not exceed v8's default max_inlined_source_size setting.
+ **/
+/* istanbul ignore next */
+function checkInvalidHeaderChar (val) {
+ val += ''
+ if (val.length < 1) { return false }
+ var c = val.charCodeAt(0)
+ if ((c <= 31 && c !== 9) || c > 255 || c === 127) { return true }
+ if (val.length < 2) { return false }
+ c = val.charCodeAt(1)
+ if ((c <= 31 && c !== 9) || c > 255 || c === 127) { return true }
+ if (val.length < 3) { return false }
+ c = val.charCodeAt(2)
+ if ((c <= 31 && c !== 9) || c > 255 || c === 127) { return true }
+ for (var i = 3; i < val.length; ++i) {
+ c = val.charCodeAt(i)
+ if ((c <= 31 && c !== 9) || c > 255 || c === 127) { return true }
+ }
+ return false
+}
+exports.checkInvalidHeaderChar = checkInvalidHeaderChar