mirror of
https://github.com/gorhill/uBlock.git
synced 2024-11-25 03:43:25 +01:00
Add demo.js to npm build
To help people to get quickly started with using the package.
This commit is contained in:
parent
26c0aa357e
commit
34508a1c2d
@ -119,6 +119,7 @@ function pslInit(raw) {
|
||||
/******************************************************************************/
|
||||
|
||||
function compileList({ name, raw }, compiler, writer, options = {}) {
|
||||
if ( typeof raw !== 'string' || raw === '' ) { return; }
|
||||
const lineIter = new LineIterator(raw);
|
||||
const events = Array.isArray(options.events) ? options.events : undefined;
|
||||
|
||||
|
120
platform/npm/demo.js
Normal file
120
platform/npm/demo.js
Normal file
@ -0,0 +1,120 @@
|
||||
/*******************************************************************************
|
||||
*
|
||||
* A simple demo to quickly get started.
|
||||
*
|
||||
* Command line:
|
||||
*
|
||||
* mkdir myproject
|
||||
* cd myproject
|
||||
* npm install @gorhill/ubo-core
|
||||
* cp node_modules/@gorhill/ubo-core/demo.js .
|
||||
*
|
||||
* There will be a `demo.js` file in your `myproject` folder, which you can
|
||||
* modify and execute:
|
||||
*
|
||||
* node demo.js
|
||||
*
|
||||
* Since the demo here uses ES module syntax, you may want to add the following
|
||||
* to the generated package.json file to avoid the warning:
|
||||
*
|
||||
* "type": "module",
|
||||
*
|
||||
* The demo will fetch filter lists from EasyList server, then serialize the
|
||||
* content of the static network filtering engine into a local `./cache/`
|
||||
* folder.
|
||||
*
|
||||
* The serialized data will be reused if available in order to avoid fetching
|
||||
* from remote server each time it is executed.
|
||||
*
|
||||
* This demo is kept as simple as possible, so there is not a lot of error
|
||||
* handling.
|
||||
*
|
||||
* */
|
||||
|
||||
import fs from 'fs/promises';
|
||||
import { StaticNetFilteringEngine } from '@gorhill/ubo-core';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
async function main() {
|
||||
const pathToSelfie = 'cache/selfie.txt';
|
||||
|
||||
const snfe = await StaticNetFilteringEngine.create();
|
||||
|
||||
// Up to date serialization data (aka selfie) available?
|
||||
let selfie;
|
||||
const ageInDays = await fs.stat(pathToSelfie).then(stat => {
|
||||
const fileDate = new Date(stat.mtime);
|
||||
return (Date.now() - fileDate.getTime()) / (7 * 24 * 60 * 60);
|
||||
}).catch(( ) => Number.MAX_SAFE_INTEGER);
|
||||
|
||||
// Use a selfie if available and not older than 7 days
|
||||
if ( ageInDays <= 7 ) {
|
||||
selfie = await fs.readFile(pathToSelfie, { encoding: 'utf8' })
|
||||
.then(data => typeof data === 'string' && data !== '' && data)
|
||||
.catch(( ) => { });
|
||||
if ( typeof selfie === 'string' ) {
|
||||
await snfe.deserialize(selfie);
|
||||
}
|
||||
}
|
||||
|
||||
// Fetch filter lists if no up to date selfie available
|
||||
if ( !selfie ) {
|
||||
console.log(`Fetching lists...`);
|
||||
await snfe.useLists([
|
||||
fetch('https://easylist.to/easylist/easylist.txt')
|
||||
.then(r => {
|
||||
return r.text();
|
||||
}).then(raw => {
|
||||
console.log(`easylist fetched`);
|
||||
return { name: 'easylist', raw };
|
||||
}).catch(reason => {
|
||||
console.error(reason);
|
||||
}),
|
||||
fetch('https://easylist.to/easylist/easyprivacy.txt')
|
||||
.then(r => {
|
||||
return r.text();
|
||||
}).then(raw => {
|
||||
console.log(`easyprivacy fetched`);
|
||||
return { name: 'easyprivacy', raw };
|
||||
}).catch(reason => {
|
||||
console.error(reason);
|
||||
}),
|
||||
]);
|
||||
const selfie = await snfe.serialize();
|
||||
await fs.mkdir('cache', { recursive: true });
|
||||
await fs.writeFile(pathToSelfie, selfie);
|
||||
}
|
||||
|
||||
// List of tests to perform
|
||||
const tests = [
|
||||
{
|
||||
originURL: 'https://www.bloomberg.com/',
|
||||
url: 'https://www.google-analytics.com/gs.js',
|
||||
type: 'script',
|
||||
}, {
|
||||
originURL: 'https://www.bloomberg.com/',
|
||||
url: 'https://securepubads.g.doubleclick.net/tag/js/gpt.js',
|
||||
type: 'script',
|
||||
}, {
|
||||
originURL: 'https://www.bloomberg.com/',
|
||||
url: 'https://bloomberg.com/main.css',
|
||||
type: 'stylesheet',
|
||||
}
|
||||
];
|
||||
|
||||
// Test each entry for a match against the content of the engine
|
||||
for ( const test of tests ) {
|
||||
console.log('\nRequest details:', test);
|
||||
const r = snfe.matchRequest(test);
|
||||
if ( r === 1 ) { // Blocked
|
||||
console.log('Blocked:', snfe.toLogData());
|
||||
} else if ( r === 2 ) { // Unblocked
|
||||
console.log('Unblocked:', snfe.toLogData());
|
||||
} else { // Not blocked
|
||||
console.log('Not blocked');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
Loading…
Reference in New Issue
Block a user