From 0b6e0cb9946ed622f60b1cda022b171968711a6f Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Thu, 18 Jan 2024 13:50:19 +0800 Subject: [PATCH] doesUrlMatchPatterns --- index.ts | 18 ++++++++++++++++++ readme.md | 10 ++++++++++ test/patterns.js | 3 ++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/index.ts b/index.ts index 3f8cde2..bbf4b75 100644 --- a/index.ts +++ b/index.ts @@ -20,6 +20,24 @@ export function isValidPattern(matchPattern: string): boolean { return matchPattern === '' || patternValidationRegex.test(matchPattern); } +export function doesUrlMatchPatterns(url: string, ...matchPattern: string[]): boolean { + if (matchPattern.includes('') && allUrlsRegex.test(url)) { + return true; + } + + if (matchPattern.includes('*://*/*') && allStarsRegex.test(url)) { + return true; + } + + for (const pattern of matchPattern) { + if (patternToRegex(pattern).test(url)) { + return true; + } + } + + return false; +} + function getRawPatternRegex(matchPattern: string): string { assertValidPattern(matchPattern); diff --git a/readme.md b/readme.md index b16ff2b..8b5f12e 100644 --- a/readme.md +++ b/readme.md @@ -23,6 +23,7 @@ import { patternToRegex, globToRegex, excludeDuplicatePatterns + doesUrlMatchPatterns, assertValidPattern, isValidPattern, } from 'webext-patterns'; @@ -112,6 +113,15 @@ excludeDuplicatePatterns([ // Returns ["https://*/*"] ``` +#### doesUrlMatchPatterns(url, ...patterns) + +Accepts a URL and any number of patterns and returns `true` if the URL matches any of the patterns. This is a convenience method that wraps `patternToRegex` for single use. If you plan on testing multiple URLs to the same pattern, it's better to convert the patterns to a regex once and reuse that. + +```js +doesUrlMatchPatterns('https://google.com/', ['https://*.google.com/*', '*://example.com/*']); +// Returns true +``` + #### assertValidPattern(pattern) Accepts a pattern and throws an error if it's invalid. diff --git a/test/patterns.js b/test/patterns.js index e062d57..cc491f5 100644 --- a/test/patterns.js +++ b/test/patterns.js @@ -1,5 +1,5 @@ import test from 'ava'; -import {patternToRegex, isValidPattern, assertValidPattern} from '../index.js'; +import {patternToRegex, isValidPattern, assertValidPattern, doesUrlMatchPatterns} from '../index.js'; function macro(t, pattern, matching) { const regex = patternToRegex(pattern); @@ -7,6 +7,7 @@ function macro(t, pattern, matching) { t.regex(url, regex); t.true(isValidPattern(pattern)); t.notThrows(() => assertValidPattern(pattern)); + t.true(doesUrlMatchPatterns(url, 'http://never.example.com/*', pattern, 'http://nope.example.com/*')); } }