UNPKG

@qiniu/miku-delivery-mp-ks

Version:

Kuaishou Mini Program SDK for Miku Delivery

103 lines (102 loc) 2.84 kB
/** * @file class Headers 实现 * @desc 参考 https://github.com/github/fetch */ function normalizeName(name) { if (typeof name !== 'string') { name = String(name); } if (/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name) || name === '') { throw new TypeError('Invalid character in header field name: "' + name + '"'); } return name.toLowerCase(); } function normalizeValue(value) { if (typeof value !== 'string') { value = String(value); } return value; } // Build a destructive iterator for the value list function iteratorFor(items) { const iterator = { next: function () { const value = items.shift(); return { done: value === undefined, value: value }; }, [Symbol.iterator]: () => iterator }; return iterator; } export default class Headers { constructor(headers) { Object.defineProperty(this, "map", { enumerable: true, configurable: true, writable: true, value: {} }); if (headers instanceof Headers) { headers.forEach((value, name) => { this.append(name, value); }); } else if (Array.isArray(headers)) { headers.forEach(header => { this.append(header[0], header[1]); }); } else if (headers != null) { Object.getOwnPropertyNames(headers).forEach(name => { this.append(name, headers[name]); }); } } append(name, value) { name = normalizeName(name); value = normalizeValue(value); var oldValue = this.map[name]; this.map[name] = oldValue ? oldValue + ', ' + value : value; } delete(name) { delete this.map[normalizeName(name)]; } get(name) { name = normalizeName(name); return this.has(name) ? this.map[name] : null; } has(name) { return this.map.hasOwnProperty(normalizeName(name)); } set(name, value) { this.map[normalizeName(name)] = normalizeValue(value); } forEach(callback, thisArg) { for (var name in this.map) { if (this.map.hasOwnProperty(name)) { callback.call(thisArg, this.map[name], name, this); } } } keys() { const items = []; this.forEach((_, name) => { items.push(name); }); return iteratorFor(items); } values() { const items = []; this.forEach(value => { items.push(value); }); return iteratorFor(items); } entries() { const items = []; this.forEach((value, name) => { items.push([name, value]); }); return iteratorFor(items); } }