Commit Graph

27 Commits

Author SHA1 Message Date
Raymond Hill 8ea3b0f64c
Rewrite static filtering parser
This commit is a rewrite of the static filtering parser into a
tree-based data structure, for easier maintenance and better
abstraction of parsed filters.

This simplifies greatly syntax coloring of filters and also
simplify extending filter syntax.

The minimum version of Chromium-based browsers has been raised
to version 73 because of usage of String.matchAll().
2023-01-23 16:53:18 -05:00
Raymond Hill 0bc0af9d8d
Add test to detect case of improper deserialization
Related commit:
- 8f461072f5
2022-01-12 09:03:38 -05:00
Raymond Hill d3fe0ccfe0
Fix regression with `csp=`, deprecate `queryprune`, etc
Fixed serious regression in previous dev build in applying
`csp=` filters. Reported internally by uBO team.

Promote usage of `removeparam` in code instead of `queryprune`,
which is to be deprecated.

Removed test against previously tested hostname in
FilterHostnameDict since as per various benchmark, the
test does not really help.

Remove serialization API in Node.js code as the API is now
present in SNFE itself.
2021-12-06 07:01:39 -05:00
Raymond Hill a76935b232
Add more npm tests
Also, disable wasm tests, currently erroring with:

    WebAssembly.Memory(): could not allocate memory
2021-10-04 12:47:12 -04:00
Manish Jethani b83e2d4e2b
Fix ESLint warning in useLists() (#3855) 2021-09-11 09:33:32 -04:00
Manish Jethani f316a326cf
Use native Punycode conversion (#3854) 2021-09-04 08:44:26 -04:00
Manish Jethani 9761b02c79
Convert publicsuffixlist.js into an ES module (#3846) 2021-08-23 09:42:27 -04:00
Manish Jethani 9ddbb293c0
Convert punycode.js into an ES module (#3845) 2021-08-22 12:03:59 -04:00
Manish Jethani d6339ada62
Use WebAssembly object directly in index.js (#3843) 2021-08-21 16:02:32 -04:00
Raymond Hill 02a17af810
Let the caller do the awaiting
Local useLists() no longer returns a reference to
internal snfe instance.
2021-08-19 07:34:02 -04:00
Raymond Hill 7a5c4e9547
Throw when useLists() called concurrently
Related feedback:
- https://github.com/gorhill/uBlock/pull/3836/files#r690687656
2021-08-17 16:57:39 -04:00
Raymond Hill 60e254608a
Expose hasQuery() and fix coarse test for query parameters 2021-08-17 16:49:43 -04:00
Raymond Hill 8959cea3cc
Expose matchAndFetchModifiers() in npm package
Also, add instrumentation for the method in dig-snfe.
2021-08-17 12:48:39 -04:00
Raymond Hill e9ae8e1a0f
Add static release() to StaticNetFilteringEngine class
The method ensures the actual SNFE is properly reset.
2021-08-15 11:18:01 -04:00
Raymond Hill 087da6407d
Add support for nodejs flavors
The main nodejs flavor is "npm", which is to be used to
lint/test and the publication of an official npm
package -- and by design it has dependencies on mocha,
eslint, etc.

A new flavor "dig" has been created with minimal
dependencies and which purpose is to easily allow to
write specialized code to investigate local code changes
in uBO -- and it's not meant for publication.

Consequently, "make nodejs" has been replaced with
"make npm", and a new "dig" target has been added to the
makefile, to be used for instrumenting local code changes
for investigation purpose.
2021-08-15 10:43:36 -04:00
Manish Jethani ab9f5ae100
Run build script via tools/make-nodejs.sh (#3808) 2021-08-09 20:02:58 -04:00
Manish Jethani 6b993f2f06
Fix pslInit() for install script (#3807) 2021-08-09 19:12:04 -04:00
Manish Jethani d9adf5a6fb
Add serialization API to StaticNetFilteringEngine (#3806) 2021-08-09 16:52:41 -04:00
Raymond Hill 7cd583a301
Revisit the nodejs API 2021-08-08 09:17:14 -04:00
Manish Jethani 65f0909ba0
Implement class StaticNetFilteringEngine (#3805) 2021-08-08 07:22:02 -04:00
Raymond Hill 63e55a1696
Expose ability to compile raw list into their intermeditate form
For clients who may wish to persist the intermediate compiled form
in order to be able to skip costly parsing operation when the
list is fed to the static network filtering engine.
2021-08-05 13:37:41 -04:00
Raymond Hill 4818405cf6
Remove need to pass parser at every compile() call
The compiler instance is already initialized with a
reference to the parser, no need to keep passing the
reference at each call to compile().
2021-08-05 13:30:20 -04:00
Raymond Hill 85c68116bd
Group all compiling-related code into FilterCompiler() class
In the static network filtering engine (snfe), the
compiling-related code was spread across two classes.
This commit makes it so that all the compiling-related
code is in FilterCompiler class, which clear purpose is
to compile raw filters into a form which can be persisted
and later fed to the snfe with no parsing overhead.

To compile raw static network filter, the new approach is:

    snfe.createCompiler(parser);

Then for each single raw filter to compile:

    compiler.compile(parser, writer);

The caller is responsible to keep a reference to the
compiler instance for as long as it is needed. This removes
the need for the clunky code used to keep an instance of
compiler alive in the snfe.

Additionally, snfe.tokenHistograms() has been moved to
benchmarks.js, as it has no dependency on the snfe, it's
just a utility function.
2021-08-04 15:14:48 -04:00
Manish Jethani 4094f48547
Fix style in index.js (#3802) 2021-08-03 12:03:11 -04:00
Manish Jethani 3ca5e6817d
Fix ESLint indentation warnings (#3800)
* Fix ESLint indentation warnings

* Undo code reformatting within parentheses

* Add exception for logical expressions

* Update array expression rule

* Disable rule for reProceduralOperator assignment

* Fix indentation in static-filtering-parser.js
2021-08-03 10:14:40 -04:00
Manish Jethani 502e5b0ec8
Use fs API to load serialized PSL (#3797) 2021-08-02 12:32:47 -04:00
Manish Jethani 3879835324
Remove bundle generation from Node.js package (#3796) 2021-08-02 09:17:56 -04:00