mirror of https://github.com/gorhill/uBlock.git
Provide basic documentation for the NPM package
This commit is contained in:
parent
5eb99a4dd6
commit
4495c37ca3
|
@ -1,6 +1,85 @@
|
||||||
# uBlock Origin Core
|
# uBlock Origin Core
|
||||||
|
|
||||||
The core filtering engines used in the uBlock Origin extension.
|
The core filtering engines used in the uBlock Origin ("uBO") extension, and has
|
||||||
|
no external dependencies.
|
||||||
|
|
||||||
## Getting started
|
## Installation
|
||||||
|
|
||||||
|
Install: `npm install --save @gorhill/ubo-core`
|
||||||
|
|
||||||
|
This is a very early version and the API is subject to change at any time.
|
||||||
|
|
||||||
|
This package uses [native JavaScript modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules).
|
||||||
|
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
The package contains uBO's static network filtering engine ("SNFE"), which
|
||||||
|
purpose is to parse and enforce filter lists. The matching algorithm is highly
|
||||||
|
efficient, and especially optimized to for large lists of hostnames.
|
||||||
|
|
||||||
|
The SNFE can be fed filter lists from a variety of sources, such as [EasyList/EasyPrivacy](https://easylist.to/),
|
||||||
|
[uBlock filters](https://github.com/uBlockOrigin/uAssets/tree/master/filters),
|
||||||
|
and also lists of domain names or hosts file format (i.e. block lists from [The Block List Project](https://github.com/blocklistproject/Lists#the-block-list-project),
|
||||||
|
[Steven Black's HOSTS](https://github.com/StevenBlack/hosts#readme), etc).
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
At the moment, there can be only one instance of the static network filtering
|
||||||
|
engine, which API must be imported as follow:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { FilteringContext, pslInit, useRawLists } from '@gorhill/ubo-core';
|
||||||
|
```
|
||||||
|
|
||||||
|
If you must import as a NodeJS module:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { FilteringContext, pslInit, useRawLists } await import from '@gorhill/ubo-core';
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
// Initialize the internal Public Suffix List database, which is necessary
|
||||||
|
// for the filtering engine to assess whether a network request is
|
||||||
|
// 3rd-party to the context from which it is fired.
|
||||||
|
await pslInit();
|
||||||
|
|
||||||
|
// Feed EasyList and EasyPrivacy to the filtering engine. A list is
|
||||||
|
// an object exposing the property `raw`, which contains the raw text of
|
||||||
|
// the filter lists.
|
||||||
|
const snfe = await useRawLists([
|
||||||
|
fetch('easylist').then(raw => ({ name: 'easylist', raw })),
|
||||||
|
fetch('easyprivacy').then(raw => ({ name: 'easyprivacy', raw })),
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Reuse a single instance of filtering context used for matching
|
||||||
|
const fctxt = new FilteringContext();
|
||||||
|
|
||||||
|
// Tests
|
||||||
|
// Not blocked
|
||||||
|
fctxt.setDocOriginFromURL('https://www.bloomberg.com/');
|
||||||
|
fctxt.setURL('https://www.bloomberg.com/tophat/assets/v2.6.1/that.css');
|
||||||
|
fctxt.setType('stylesheet');
|
||||||
|
if ( snfe.matchRequest(fctxt) !== 0 ) {
|
||||||
|
console.log(snfe.toLogData());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Blocked
|
||||||
|
fctxt.setDocOriginFromURL('https://www.bloomberg.com/');
|
||||||
|
fctxt.setURL('https://securepubads.g.doubleclick.net/tag/js/gpt.js');
|
||||||
|
fctxt.setType('script');
|
||||||
|
if ( snfe.matchRequest(fctxt) !== 0 ) {
|
||||||
|
console.log(snfe.toLogData());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unblocked
|
||||||
|
fctxt.setDocOriginFromURL('https://www.bloomberg.com/');
|
||||||
|
fctxt.setURL('https://sourcepointcmp.bloomberg.com/ccpa.js');
|
||||||
|
fctxt.setType('script');
|
||||||
|
if ( snfe.matchRequest(fctxt) !== 0 ) {
|
||||||
|
console.log(snfe.toLogData());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@gorhill/ubo-core",
|
"name": "@gorhill/ubo-core",
|
||||||
"version": "0.1.3",
|
"version": "0.1.4",
|
||||||
"description": "To create a working instance of uBlock Origin's static network filtering engine",
|
"description": "To create a working instance of uBlock Origin's static network filtering engine",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
|
|
|
@ -44,7 +44,7 @@ function fetch(listName) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
(async ( ) => {
|
async function main() {
|
||||||
try {
|
try {
|
||||||
const result = await enableWASM();
|
const result = await enableWASM();
|
||||||
if ( result !== true ) {
|
if ( result !== true ) {
|
||||||
|
@ -56,15 +56,10 @@ function fetch(listName) {
|
||||||
|
|
||||||
await pslInit();
|
await pslInit();
|
||||||
|
|
||||||
const snfe = await Promise.all([
|
const snfe = await useRawLists([
|
||||||
fetch('easylist'),
|
fetch('easylist').then(raw => ({ name: 'easylist', raw })),
|
||||||
fetch('easyprivacy'),
|
fetch('easyprivacy').then(raw => ({ name: 'easyprivacy', raw })),
|
||||||
]).then(rawLists => {
|
]);
|
||||||
return useRawLists([
|
|
||||||
{ name: 'easylist', raw: rawLists[0] },
|
|
||||||
{ name: 'easyprivacy', raw: rawLists[1] },
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Reuse filtering context: it's what uBO does
|
// Reuse filtering context: it's what uBO does
|
||||||
const fctxt = new FilteringContext();
|
const fctxt = new FilteringContext();
|
||||||
|
@ -95,6 +90,8 @@ function fetch(listName) {
|
||||||
}
|
}
|
||||||
|
|
||||||
process.exit();
|
process.exit();
|
||||||
})();
|
}
|
||||||
|
|
||||||
|
main();
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
Loading…
Reference in New Issue