Fix #767 #763 - Improve type definition for headers

This commit is contained in:
Faisal Salman 2024-11-22 20:21:07 +07:00
parent b4bc86ac6d
commit bcf249da06
3 changed files with 19 additions and 4 deletions

View File

@ -221,8 +221,11 @@
"@babel/traverse": "7.23.2", "@babel/traverse": "7.23.2",
"@jazzer.js/core": "^1.4.0", "@jazzer.js/core": "^1.4.0",
"@playwright/test": "~1.32.2", "@playwright/test": "~1.32.2",
"@types/node": "^22.9.1",
"@types/node-fetch": "^2.6.12",
"jshint": "~2.13.6", "jshint": "~2.13.6",
"mocha": "~8.2.0", "mocha": "~8.2.0",
"node-fetch": "^2.7.0",
"requirejs": "2.3.2", "requirejs": "2.3.2",
"safe-regex": "^2.1.1", "safe-regex": "^2.1.1",
"tsd": "^0.29.0", "tsd": "^0.29.0",

View File

@ -2,6 +2,9 @@
// Project: https://github.com/faisalman/ua-parser-js // Project: https://github.com/faisalman/ua-parser-js
// Definitions by: Faisal Salman <https://github.com/faisalman> // Definitions by: Faisal Salman <https://github.com/faisalman>
import type { IncomingHttpHeaders } from 'http';
import type { Headers as FetchAPIHeaders } from 'node-fetch';
declare namespace UAParser { declare namespace UAParser {
interface IData<T> { interface IData<T> {
@ -50,11 +53,12 @@ declare namespace UAParser {
type RegexMap = ((RegExp | string | (string | RegExp | Function)[])[])[]; type RegexMap = ((RegExp | string | (string | RegExp | Function)[])[])[];
type UAParserProps = 'browser' | 'cpu' | 'device' | 'engine' | 'os'; type UAParserProps = 'browser' | 'cpu' | 'device' | 'engine' | 'os';
type UAParserExt = Partial<Record<UAParserProps, RegexMap>> | Partial<Record<UAParserProps, RegexMap>>[]; type UAParserExt = Partial<Record<UAParserProps, RegexMap>> | Partial<Record<UAParserProps, RegexMap>>[];
type UAParserHeaders = Record<string, string> | IncomingHttpHeaders | FetchAPIHeaders;
export function UAParser(uastring?: string, extensions?: UAParserExt, headers?: Record<string, string>): IResult; export function UAParser(uastring?: string, extensions?: UAParserExt, headers?: UAParserHeaders): IResult;
export function UAParser(uastring?: string, headers?: Record<string, string>): IResult; export function UAParser(uastring?: string, headers?: UAParserHeaders): IResult;
export function UAParser(extensions?: UAParserExt, headers?: Record<string, string>): IResult; export function UAParser(extensions?: UAParserExt, headers?: UAParserHeaders): IResult;
export function UAParser(headers?: Record<string, string>): IResult; export function UAParser(headers?: UAParserHeaders): IResult;
export class UAParser { export class UAParser {

View File

@ -10,6 +10,7 @@ var cpus = require('./specs/cpu-all.json');
var devices = readJsonFiles('test/specs/devices'); var devices = readJsonFiles('test/specs/devices');
var engines = require('./specs/engine-all.json'); var engines = require('./specs/engine-all.json');
var os = require('./specs/os-all.json'); var os = require('./specs/os-all.json');
var { Headers } = require('node-fetch');
function readJsonFiles(dir) { function readJsonFiles(dir) {
var list = []; var list = [];
@ -354,6 +355,13 @@ describe('Read user-agent data from req.headers', function () {
let engine = UAParser(req.headers).engine; let engine = UAParser(req.headers).engine;
assert.strictEqual(engine.name, "EdgeHTML"); assert.strictEqual(engine.name, "EdgeHTML");
}); });
it('Fetch API\'s Header can be passed directly into headers', () => {
const reqHeaders = new Headers();
reqHeaders.append('User-Agent', 'Midori/0.2.2 (X11; Linux i686; U; en-us) WebKit/531.2+');
const { browser } = UAParser(reqHeaders);
assert.strictEqual(browser.is('Midori'), true);
});
}); });
describe('Map UA-CH headers', function () { describe('Map UA-CH headers', function () {