Skip to content

Commit

Permalink
expose resource assembly from neon bindings
Browse files Browse the repository at this point in the history
  • Loading branch information
antonok-edm authored and Andrius Aucinas committed Oct 28, 2019
1 parent 7711bc4 commit 3cc164e
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 6 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ const AdBlockClient = require('adblock-rs');
let el_rules = fs.readFileSync('./data/easylist.to/easylist/easylist.txt', { encoding: 'utf-8' }).split('\n');
let ubo_unbreak_rules = fs.readFileSync('./data/uBlockOrigin/unbreak.txt', { encoding: 'utf-8' }).split('\n');
let rules = el_rules.concat(ubo_unbreak_rules);
let resources = fs.readFileSync('./data/uBlockOrigin/resources.txt', { encoding: 'utf-8' });
let resources = AdBlockClient.uBlockResources('uBlockOrigin/src/web_accessible_resources', 'uBlockOrigin/src/js/redirect-engine.js', 'uBlockOrigin/assets/resources/scriptlets.js');

// create client with debug = true
const client = new AdBlockClient.Engine(rules, true);
Expand Down
1 change: 1 addition & 0 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ const blocker = require('../native');

exports.Engine = blocker.Engine;
exports.lists = blocker.lists;
exports.uBlockResources = blocker.uBlockResources;
28 changes: 23 additions & 5 deletions native/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,12 @@ extern crate serde;

use neon::prelude::*;
use serde::{Deserialize, Serialize};
use std::path::Path;
use adblock::engine::Engine;
use adblock::filter_lists;
use adblock::resources::Resource;
use adblock::resource_assembler::{assemble_web_accessible_resources, assemble_scriptlet_resources};


#[derive(Serialize, Deserialize)]
struct EngineOptions {
Expand Down Expand Up @@ -127,7 +131,8 @@ declare_types! {
}

method updateResources(mut cx) {
let resources: String = cx.argument::<JsString>(0)?.value();
let resources_arg = cx.argument::<JsValue>(0)?;
let resources: Vec<Resource> = neon_serde::from_value(&mut cx, resources_arg)?;

let mut this = cx.this();
let guard = cx.lock();
Expand Down Expand Up @@ -174,15 +179,14 @@ declare_types! {
}

method addResource(mut cx) {
let name: String = cx.argument::<JsString>(0)?.value();
let content_type: String = cx.argument::<JsString>(1)?.value();
let data: String = cx.argument::<JsString>(2)?.value();
let resource_arg = cx.argument::<JsValue>(0)?;
let resource: Resource = neon_serde::from_value(&mut cx, resource_arg)?;

let mut this = cx.this();
let guard = cx.lock();
{
let mut engine = this.borrow_mut(&guard);
engine.resource_add(&name, &content_type, &data);
engine.resource_add(resource);
}
Ok(JsNull::new().upcast())
}
Expand Down Expand Up @@ -225,10 +229,24 @@ fn validate_request(mut cx: FunctionContext) -> JsResult<JsBoolean> {
Ok(cx.boolean(request_ok))
}

fn ublock_resources(mut cx: FunctionContext) -> JsResult<JsValue> {
let web_accessible_resource_dir: String = cx.argument::<JsString>(0)?.value();
let redirect_engine_path: String = cx.argument::<JsString>(1)?.value();
let scriptlets_path: String = cx.argument::<JsString>(2)?.value();

let mut resources = assemble_web_accessible_resources(&Path::new(&web_accessible_resource_dir), &Path::new(&redirect_engine_path));
resources.append(&mut assemble_scriptlet_resources(&Path::new(&scriptlets_path)));

let js_resources = neon_serde::to_value(&mut cx, &resources)?;

Ok(js_resources)
}

register_module!(mut m, {
// Export the `JsEngine` class
m.export_class::<JsEngine>("Engine")?;
m.export_function("lists", lists)?;
m.export_function("validateRequest", validate_request)?;
m.export_function("uBlockResources", ublock_resources)?;
Ok(())
});

0 comments on commit 3cc164e

Please sign in to comment.