diff --git a/bun.lockb b/bun.lockb index a6dd87c..121cafc 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 8a88cbf..1429067 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "@adguard/tsurlfilter": "^2.1.11", - "@ghostery/abp2dnr": "ghostery/abp2dnr#9e52b185e03d2d24170daaa5de0832e473d4b09f" + "@eyeo/webext-ad-filtering-solution": "^1.2.0" }, "devDependencies": { "@ghostery/trackerdb": "^1.0.36", diff --git a/src/converters/abp.js b/src/converters/abp.js index b223705..0f34a62 100644 --- a/src/converters/abp.js +++ b/src/converters/abp.js @@ -1,19 +1,24 @@ -import { convertFilter } from "@ghostery/abp2dnr"; -import { Filter } from "adblockpluscore/lib/filterClasses"; +import { FilterParsingError, normalize } from "@eyeo/webext-ad-filtering-solution/adblockpluscore/lib/filters/index.js"; +import { createConverter } from "@eyeo/webext-ad-filtering-solution/adblockpluscore/lib/dnr/index.js"; import { normalizeFilter, normalizeRule } from "./helpers"; export default async function convert(filters) { + const converter = createConverter({ isRegexSupported: () => true }); const rules = []; const errors = []; + let nextId = 1; for (const filter of filters) { try { - const normalizedFilter = normalizeFilter(Filter.normalize(filter)); - const abpFilter = Filter.fromText(normalizedFilter); - const dnrRules = await convertFilter(abpFilter, () => ({ - isSupported: true, - })); + const normalizedFilter = normalizeFilter(normalize(filter)); + const dnrRules = converter(normalizedFilter); + if (dnrRules instanceof FilterParsingError) { + throw dnrRules; + } if (dnrRules.length > 0) { - rules.push(...dnrRules); + for (const rule of dnrRules) { + rule.id = nextId++; + rules.push(rule); + } } else { throw new Error("Unknown problem"); } diff --git a/src/converters/helpers.js b/src/converters/helpers.js index 4b22b7b..f2d51d4 100644 --- a/src/converters/helpers.js +++ b/src/converters/helpers.js @@ -49,5 +49,17 @@ export function normalizeRule(rule) { ) { newRule.condition.regexFilter = `/${newRule.condition.regexFilter}/`; } + + if (newRule.condition && newRule.condition.excludedDomains) { + newRule.condition.excludedInitiatorDomains = + newRule.condition.excludedDomains; + delete newRule.condition.excludedDomains; + } + + if (newRule.condition && newRule.condition.domains) { + newRule.condition.initiatorDomains = newRule.condition.domains; + delete newRule.condition.domains; + } + return newRule; } diff --git a/test/e2e/index.spec.js b/test/e2e/index.spec.js index 3145068..14ef89b 100644 --- a/test/e2e/index.spec.js +++ b/test/e2e/index.spec.js @@ -60,6 +60,7 @@ test.describe("converts rules with postMessage", () => { errors: [], rules: [ { + id: 1, priority: 1000, condition: { isUrlFilterCaseSensitive: false, diff --git a/test/unit/converters/abp.spec.js b/test/unit/converters/abp.spec.js index c536bb7..52ed917 100644 --- a/test/unit/converters/abp.spec.js +++ b/test/unit/converters/abp.spec.js @@ -30,7 +30,8 @@ describe('abp converter', () => { isUrlFilterCaseSensitive: false, urlFilter: "tinypass.com" }, - priority: 2000 + priority: 2000, + id: 1 }); }); diff --git a/test/unit/converters/helpers.spec.js b/test/unit/converters/helpers.spec.js index 5ff9659..b87fe34 100644 --- a/test/unit/converters/helpers.spec.js +++ b/test/unit/converters/helpers.spec.js @@ -86,7 +86,6 @@ describe('normalizeRule', () => { }) }) - it('wraps regex rules in //', () => { expect(normalizeRule({ condition: { @@ -98,4 +97,28 @@ describe('normalizeRule', () => { }, }); }); + + it('replaces domains with initiatorDomains', () => { + expect(normalizeRule({ + condition: { + domains: ['test'], + }, + })).toEqual({ + condition: { + initiatorDomains: ['test'], + }, + }); + }); + + it('replaces excludedDomains with excludedInitiatorDomains', () => { + expect(normalizeRule({ + condition: { + excludedDomains: ['test'], + }, + })).toEqual({ + condition: { + excludedInitiatorDomains: ['test'], + }, + }); + }); });