@ 守护/ 过滤器- 下行装入器
通过解析下载过滤列表源文件的库 预处理指令。 它处理有条件的编译,文件包含, 校验和验证,以及差分(基于patch)过滤器更新。 图书馆 在Node.js和浏览器环境中工作.
说明: 此软件包开发于 辅助软件Limited/ext-filter-downloader。 。 。 . 这个 护卫小组/拖放器 寄存器是一个公共镜像.
目录
概览
广告屏蔽器使用的过滤列表往往由多个源文件组成 并包含在预处理器指令后加门的平台专用规则. 这个 库取一个过滤器 URL(或一系列规则) 并生成一个平面, 规则清单:
- 解决
!#include指令 ——获取和内入引用文件 - 解决
!#if编号 :!#else编号 :!#endif指令 - 包括或排除规则 基于调用人提供的状态常数的块 - 验证校验和 ——可选择验证嵌入在其中的MD5校验和 过滤页眉
- 应用差异更新 - 当一个先前下载的原始过滤器是 ,试图通过二进制补丁而不是完整补丁更新 重新下载
安装
pnpm add @adguard/filters-downloader
# or
npm install @adguard/filters-downloader
# or
yarn add @adguard/filters-downloader
导入
节点js(共同JS/无害环境管理):
import { FiltersDownloader } from '@adguard/filters-downloader';
浏览器 (ESM):
import { FiltersDownloader } from '@adguard/filters-downloader/browser';
关键概念
条件常数DefinedExpressions(中文(简体) )
在编译过滤器时,您会通过 DefinedExpressions 声明对象
哪个平台常数 true 用于当前广告屏蔽器。 图书馆
评价 !#if 针对这些常数的表达式,只包括规则
适用于您的平台.
识别常数:
| 常数 | 说明 |
|---|---|
adguard | 担保产品(任何) |
adguard_ext_chromium | 基于铬的浏览器的守护 |
adguard_ext_chromium_mv3 | 铬MV3护卫 |
adguard_ext_firefox | Firefox 守护 |
adguard_ext_edge | 边缘护卫 |
adguard_ext_safari | 萨法里守护 |
adguard_ext_opera | 歌剧守护 |
adguard_ext_android_cb | Android 内容屏蔽器的守护 |
任何在 DefinedExpressions 对象被视为
false见 保护条件指令 页:1
完整的识别常数列表.
预处理指令
有条件的块
!#if (adguard && !adguard_ext_safari)
||example.org^$third-party
!#endif
!#if adguard_ext_firefox
!#include https://example.org/path/firefox-rules.txt
!#else
!#include https://example.org/path/other-rules.txt
!#endif
!#if编号 :!#else编号 :!#endif划定条件块 .- 条件支助
&&, (中文(简体) ),||, (中文(简体) ),!括号. - 只有条件评估为
true包含在产出中.
文件包含
!
! Valid (same origin, absolute path):
!#include https://example.org/path/includedfile.txt
!
! Valid (relative path):
!#include /includedfile.txt
!#include ../path2/includedfile.txt
!
! Invalid (different origin — rejected):
!#include https://example.com/path/includedfile.txt
!#include 获取引用文件,并将其规则切入输出中
那个位置 包含的文件本身可能包含指令. 只有来自
允许与母过滤器相同的来源.
校验和
过滤器文件可能会将 MD5 校验和嵌入其头部(例如.
! Checksum: <base64-md5>) (中文(简体) ). 何时 validateChecksum: true 被通过
库在下载后验证校验和。 使用 validateChecksumStrict: true 将缺失的校验和视为出错.
差异更新
downloadWithRaw 将原始(未编译)过滤文本与编译文本一起保存
输出。 在后来的电话中,通过以前存储的 rawFilter 让
库应用二进制补丁( 如果服务器提供) 而不是下载
再次使用整个过滤器,减少带宽使用.
对于包含证书的源 URL,库总是下载 完全过滤器。 只有节点.js构建支持这样的URL.
API 参考
所有方法都已经在 FiltersDownloader 对象.
download(url, definedExpressions?, options?)
下载过滤器 url,解决所有指令,并返回编译的
规则作为 string[]。 。 。 .
const rules: string[] = await FiltersDownloader.download(
'https://example.org/filter.txt',
{ adguard: true, adguard_ext_firefox: true },
);
选项 (单位:千美元)LegacyDownloadOptions:
| 选项 | 类型 | 默认 | 说明 |
|---|---|---|---|
validateChecksum | boolean | false | 校验嵌入式 MD5 校验和 |
validateChecksumStrict | boolean | false | 如果没有校验和, 错误 |
allowEmptyResponse | boolean | false | 允许下载空过滤文件 |
默认情况下, 空顶级响应会丢出 'Response is empty'包含
不论此选项为何, 文件可能为空 .
downloadWithRaw(url, options)
下载过滤器并返回编译的规则和原始规则( 未编译)
过滤文本。 在接通电话时,提供存储的 rawFilter 所以图书馆
可以应用差分补丁来代替全重下载.
// First download — no previous raw filter
const { filter, rawFilter } = await FiltersDownloader.downloadWithRaw(
'https://example.org/filter.txt',
{ definedExpressions: { adguard: true } },
);
// Store rawFilter and use it next time
const { filter: updated, rawFilter: newRaw, isPatchUpdateFailed } =
await FiltersDownloader.downloadWithRaw(
'https://example.org/filter.txt',
{
rawFilter, // previously stored raw filter
definedExpressions: { adguard: true },
},
);
回返 (单位:千美元)DownloadResult:
| 外地 | 类型 | 说明 |
|---|---|---|
filter | string[] | 编译规则 |
rawFilter | string | 指令解析前的原始过滤文本 |
isPatchUpdateFailed | boolean | undefined | true 如果一个补丁尝试但失败( 使用完全重新下载代替) |
headers | object | undefined | 过滤器下载的 HTTP 响应头(见下文) |
headers 形状 :
| 外地 | 类型 | 说明 |
|---|---|---|
lastModified | string | undefined | 其价值 Last-Modified HTTP 响应头 |
说明:
headers.lastModified可作为倒置更新时间戳 当过滤器元数据不包含TimeUpdated字段.
选项 (单位:千美元)DownloadWithRawOptions:
| 选项 | 类型 | 默认 | 说明 |
|---|---|---|---|
force | boolean | false | 跳过补丁尝试并强制全部重新下载 |
rawFilter | string | undefined | 先前存储的原始过滤器 |
definedExpressions | DefinedExpressions | undefined | 指令解析的条件常数 |
validateChecksum | boolean | false | 校验嵌入式 MD5 校验和 |
validateChecksumStrict | boolean | false | 如果没有校验和, 错误 |
allowEmptyResponse | boolean | false | 允许空过滤器响应 |
verbose | boolean | false | 启用详细记录以排除出错 |
compile(rules, filterOrigin?, definedExpressions?)
将所有指令都用已拉近的 string[] 规则。 有用时
您有内存中的原始行,不需要HTTP下载.
const rawRules = [
'!#if adguard_ext_firefox',
'||firefox-only.example.org^',
'!#endif',
'||example.org^',
];
const compiled: string[] = await FiltersDownloader.compile(
rawRules,
'https://example.org/filter.txt', // used to resolve relative !#include paths
{ adguard_ext_firefox: true },
);
// → ['||firefox-only.example.org^', '||example.org^']
resolveConditions(rules, definedExpressions?)
评价 !#if 编号 : !#else 编号 : !#endif 指令并返回新的 string[]
并删除了非匹配区块。 对 没有 获取 !#include 参考文献.
const filtered = FiltersDownloader.resolveConditions(rules, { adguard: true });
resolveIncludes(rules, filterOrigin?, definedExpressions?)
全部获取并内含 !#include 参考文献。 对 没有 评价
!#if 条件.
const expanded = await FiltersDownloader.resolveIncludes(
rules,
'https://example.org/filter.txt',
{ adguard: true },
);
getFilterUrlOrigin(url)
返回基准目录 URL url (每起事件最多包括最后一起)
/) (中文(简体) ). 内部用于解决相对问题 !#include 路径.
FiltersDownloader.getFilterUrlOrigin('https://example.org/path/filter.txt');
// → 'https://example.org/path'
文档
使用 Filters 下载器的项目
- 守护浏览器扩展 — AdGuard 浏览器扩展
- 过滤器编译器 ——从源头编译AdGuard过滤列表
- 主机列表编译器 ——从多来源编译主机块列表
- TSUrlFilter 单簧管 —— 说 代理守护符 软件包