Skip to content

Repository files navigation

Seafox

A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript.


Seafox NPMGitHub licenseTotal alertsCircleLicense

Features

  • Conforms to the standard ECMAScript® 2021 (ECMA-262 11th Edition) language specification
  • Support for additional ECMAScript features for Web Browsers
  • Optionally track syntactic node locations
  • Emits an ESTree-compatible abstract syntax tree
  • Lexical analysis
  • No backtracking
  • Low memory usage
  • Insane performance both on desktop computers and handheld devices
  • Twice as fast as other Javascript parsers
  • Very well tested (~33 000 unit tests with full code coverage)
  • Lightweight - ~84 KB minified

Installation

npm install seafox --save-dev

API

Seafox generates AST according to ESTree AST format, and can be used to perform syntactic analysis (parsing) or lexical analysis (tokenization) of a JavaScript program, and with ES2015 and later a JavaScript program can be either a script or a module.

The parse method exposed by Seafox takes an optional options object which allows you to specify whether to parse in script mode (the default) or in module mode.

This is the available options:

{// Allow parsing using Module as the goal symbolmodule?: boolean;// The flag to enable start and end offsets and line/column location information to each node
loc: false;// Disable web compatibility
disableWebCompat: false;// The flag to attach raw property to each literal and identifier node
raw: false;// Enabled directives
directives: false;// The flag to allow return in the global scope
globalReturn: false;// The flag to enable implied strict mode
impliedStrict: false;// Enable non-standard parenthesized expression node
preserveParens: false;// Allows token extraction. Accepts only a function
onToken: function(){}}

Example usage:

import{parseScript,parseModule,parse}from'./seafox';parseScript('({x: [y] = 0} = 1)');parseModule('({x: [y] = 0} = 1)',{directives: true,raw: true});parse('({x: [y] = 0} = 1)',{module: true});parse('({x: [y] = 0} = 1)');

Lexical analysis

Lexical analysis can only be done during parsing and accepts only a function type as the option

parseScript('foo = bar',{onToken: ()=>{}});

The callback function have 4 arguments.

ArgumentsDescription
tokenThe token to be extracted
valueValue of the extracted token
startStart position of the extracted token
endEnd position of the extracted token

The loc option needs to be enabled for start and end. Otherwise this values will be set to undefined

Performance

Seafox is developed for performance and low memory usage, and the parser is about 2x - 4x faster than all other javascript parsers.

About

A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript

Topics

Resources

Stars

492 stars

Watchers

14 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - KFlash/seafox: A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript · GitHub
Skip to content

Repository files navigation

Seafox

A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript.


Seafox NPMGitHub licenseTotal alertsCircleLicense

Features

  • Conforms to the standard ECMAScript® 2021 (ECMA-262 11th Edition) language specification
  • Support for additional ECMAScript features for Web Browsers
  • Optionally track syntactic node locations
  • Emits an ESTree-compatible abstract syntax tree
  • Lexical analysis
  • No backtracking
  • Low memory usage
  • Insane performance both on desktop computers and handheld devices
  • Twice as fast as other Javascript parsers
  • Very well tested (~33 000 unit tests with full code coverage)
  • Lightweight - ~84 KB minified

Installation

npm install seafox --save-dev

API

Seafox generates AST according to ESTree AST format, and can be used to perform syntactic analysis (parsing) or lexical analysis (tokenization) of a JavaScript program, and with ES2015 and later a JavaScript program can be either a script or a module.

The parse method exposed by Seafox takes an optional options object which allows you to specify whether to parse in script mode (the default) or in module mode.

This is the available options:

{// Allow parsing using Module as the goal symbolmodule?: boolean;// The flag to enable start and end offsets and line/column location information to each node
loc: false;// Disable web compatibility
disableWebCompat: false;// The flag to attach raw property to each literal and identifier node
raw: false;// Enabled directives
directives: false;// The flag to allow return in the global scope
globalReturn: false;// The flag to enable implied strict mode
impliedStrict: false;// Enable non-standard parenthesized expression node
preserveParens: false;// Allows token extraction. Accepts only a function
onToken: function(){}}

Example usage:

import{parseScript,parseModule,parse}from'./seafox';parseScript('({x: [y] = 0} = 1)');parseModule('({x: [y] = 0} = 1)',{directives: true,raw: true});parse('({x: [y] = 0} = 1)',{module: true});parse('({x: [y] = 0} = 1)');

Lexical analysis

Lexical analysis can only be done during parsing and accepts only a function type as the option

parseScript('foo = bar',{onToken: ()=>{}});

The callback function have 4 arguments.

ArgumentsDescription
tokenThe token to be extracted
valueValue of the extracted token
startStart position of the extracted token
endEnd position of the extracted token

The loc option needs to be enabled for start and end. Otherwise this values will be set to undefined

Performance

Seafox is developed for performance and low memory usage, and the parser is about 2x - 4x faster than all other javascript parsers.

About

A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript

Topics

Resources

Stars

492 stars

Watchers

14 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - KFlash/seafox: A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript · GitHub
Skip to content

Repository files navigation

Seafox

A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript.


Seafox NPMGitHub licenseTotal alertsCircleLicense

Features

  • Conforms to the standard ECMAScript® 2021 (ECMA-262 11th Edition) language specification
  • Support for additional ECMAScript features for Web Browsers
  • Optionally track syntactic node locations
  • Emits an ESTree-compatible abstract syntax tree
  • Lexical analysis
  • No backtracking
  • Low memory usage
  • Insane performance both on desktop computers and handheld devices
  • Twice as fast as other Javascript parsers
  • Very well tested (~33 000 unit tests with full code coverage)
  • Lightweight - ~84 KB minified

Installation

npm install seafox --save-dev

API

Seafox generates AST according to ESTree AST format, and can be used to perform syntactic analysis (parsing) or lexical analysis (tokenization) of a JavaScript program, and with ES2015 and later a JavaScript program can be either a script or a module.

The parse method exposed by Seafox takes an optional options object which allows you to specify whether to parse in script mode (the default) or in module mode.

This is the available options:

{// Allow parsing using Module as the goal symbolmodule?: boolean;// The flag to enable start and end offsets and line/column location information to each node
loc: false;// Disable web compatibility
disableWebCompat: false;// The flag to attach raw property to each literal and identifier node
raw: false;// Enabled directives
directives: false;// The flag to allow return in the global scope
globalReturn: false;// The flag to enable implied strict mode
impliedStrict: false;// Enable non-standard parenthesized expression node
preserveParens: false;// Allows token extraction. Accepts only a function
onToken: function(){}}

Example usage:

import{parseScript,parseModule,parse}from'./seafox';parseScript('({x: [y] = 0} = 1)');parseModule('({x: [y] = 0} = 1)',{directives: true,raw: true});parse('({x: [y] = 0} = 1)',{module: true});parse('({x: [y] = 0} = 1)');

Lexical analysis

Lexical analysis can only be done during parsing and accepts only a function type as the option

parseScript('foo = bar',{onToken: ()=>{}});

The callback function have 4 arguments.

ArgumentsDescription
tokenThe token to be extracted
valueValue of the extracted token
startStart position of the extracted token
endEnd position of the extracted token

The loc option needs to be enabled for start and end. Otherwise this values will be set to undefined

Performance

Seafox is developed for performance and low memory usage, and the parser is about 2x - 4x faster than all other javascript parsers.

About

A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript

Topics

Resources

Stars

492 stars

Watchers

14 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - KFlash/seafox: A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript · GitHub
Skip to content

Repository files navigation

Seafox

A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript.


Seafox NPMGitHub licenseTotal alertsCircleLicense

Features

  • Conforms to the standard ECMAScript® 2021 (ECMA-262 11th Edition) language specification
  • Support for additional ECMAScript features for Web Browsers
  • Optionally track syntactic node locations
  • Emits an ESTree-compatible abstract syntax tree
  • Lexical analysis
  • No backtracking
  • Low memory usage
  • Insane performance both on desktop computers and handheld devices
  • Twice as fast as other Javascript parsers
  • Very well tested (~33 000 unit tests with full code coverage)
  • Lightweight - ~84 KB minified

Installation

npm install seafox --save-dev

API

Seafox generates AST according to ESTree AST format, and can be used to perform syntactic analysis (parsing) or lexical analysis (tokenization) of a JavaScript program, and with ES2015 and later a JavaScript program can be either a script or a module.

The parse method exposed by Seafox takes an optional options object which allows you to specify whether to parse in script mode (the default) or in module mode.

This is the available options:

{// Allow parsing using Module as the goal symbolmodule?: boolean;// The flag to enable start and end offsets and line/column location information to each node
loc: false;// Disable web compatibility
disableWebCompat: false;// The flag to attach raw property to each literal and identifier node
raw: false;// Enabled directives
directives: false;// The flag to allow return in the global scope
globalReturn: false;// The flag to enable implied strict mode
impliedStrict: false;// Enable non-standard parenthesized expression node
preserveParens: false;// Allows token extraction. Accepts only a function
onToken: function(){}}

Example usage:

import{parseScript,parseModule,parse}from'./seafox';parseScript('({x: [y] = 0} = 1)');parseModule('({x: [y] = 0} = 1)',{directives: true,raw: true});parse('({x: [y] = 0} = 1)',{module: true});parse('({x: [y] = 0} = 1)');

Lexical analysis

Lexical analysis can only be done during parsing and accepts only a function type as the option

parseScript('foo = bar',{onToken: ()=>{}});

The callback function have 4 arguments.

ArgumentsDescription
tokenThe token to be extracted
valueValue of the extracted token
startStart position of the extracted token
endEnd position of the extracted token

The loc option needs to be enabled for start and end. Otherwise this values will be set to undefined

Performance

Seafox is developed for performance and low memory usage, and the parser is about 2x - 4x faster than all other javascript parsers.

About

A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript

Topics

Resources

Stars

492 stars

Watchers

14 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - KFlash/seafox: A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript · GitHub
Skip to content

Repository files navigation

Seafox

A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript.


Seafox NPMGitHub licenseTotal alertsCircleLicense

Features

  • Conforms to the standard ECMAScript® 2021 (ECMA-262 11th Edition) language specification
  • Support for additional ECMAScript features for Web Browsers
  • Optionally track syntactic node locations
  • Emits an ESTree-compatible abstract syntax tree
  • Lexical analysis
  • No backtracking
  • Low memory usage
  • Insane performance both on desktop computers and handheld devices
  • Twice as fast as other Javascript parsers
  • Very well tested (~33 000 unit tests with full code coverage)
  • Lightweight - ~84 KB minified

Installation

npm install seafox --save-dev

API

Seafox generates AST according to ESTree AST format, and can be used to perform syntactic analysis (parsing) or lexical analysis (tokenization) of a JavaScript program, and with ES2015 and later a JavaScript program can be either a script or a module.

The parse method exposed by Seafox takes an optional options object which allows you to specify whether to parse in script mode (the default) or in module mode.

This is the available options:

{// Allow parsing using Module as the goal symbolmodule?: boolean;// The flag to enable start and end offsets and line/column location information to each node
loc: false;// Disable web compatibility
disableWebCompat: false;// The flag to attach raw property to each literal and identifier node
raw: false;// Enabled directives
directives: false;// The flag to allow return in the global scope
globalReturn: false;// The flag to enable implied strict mode
impliedStrict: false;// Enable non-standard parenthesized expression node
preserveParens: false;// Allows token extraction. Accepts only a function
onToken: function(){}}

Example usage:

import{parseScript,parseModule,parse}from'./seafox';parseScript('({x: [y] = 0} = 1)');parseModule('({x: [y] = 0} = 1)',{directives: true,raw: true});parse('({x: [y] = 0} = 1)',{module: true});parse('({x: [y] = 0} = 1)');

Lexical analysis

Lexical analysis can only be done during parsing and accepts only a function type as the option

parseScript('foo = bar',{onToken: ()=>{}});

The callback function have 4 arguments.

ArgumentsDescription
tokenThe token to be extracted
valueValue of the extracted token
startStart position of the extracted token
endEnd position of the extracted token

The loc option needs to be enabled for start and end. Otherwise this values will be set to undefined

Performance

Seafox is developed for performance and low memory usage, and the parser is about 2x - 4x faster than all other javascript parsers.

About

A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript

Topics

Resources

Stars

492 stars

Watchers

14 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - KFlash/seafox: A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript · GitHub
Skip to content

Repository files navigation

Seafox

A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript.


Seafox NPMGitHub licenseTotal alertsCircleLicense

Features

  • Conforms to the standard ECMAScript® 2021 (ECMA-262 11th Edition) language specification
  • Support for additional ECMAScript features for Web Browsers
  • Optionally track syntactic node locations
  • Emits an ESTree-compatible abstract syntax tree
  • Lexical analysis
  • No backtracking
  • Low memory usage
  • Insane performance both on desktop computers and handheld devices
  • Twice as fast as other Javascript parsers
  • Very well tested (~33 000 unit tests with full code coverage)
  • Lightweight - ~84 KB minified

Installation

npm install seafox --save-dev

API

Seafox generates AST according to ESTree AST format, and can be used to perform syntactic analysis (parsing) or lexical analysis (tokenization) of a JavaScript program, and with ES2015 and later a JavaScript program can be either a script or a module.

The parse method exposed by Seafox takes an optional options object which allows you to specify whether to parse in script mode (the default) or in module mode.

This is the available options:

{// Allow parsing using Module as the goal symbolmodule?: boolean;// The flag to enable start and end offsets and line/column location information to each node
loc: false;// Disable web compatibility
disableWebCompat: false;// The flag to attach raw property to each literal and identifier node
raw: false;// Enabled directives
directives: false;// The flag to allow return in the global scope
globalReturn: false;// The flag to enable implied strict mode
impliedStrict: false;// Enable non-standard parenthesized expression node
preserveParens: false;// Allows token extraction. Accepts only a function
onToken: function(){}}

Example usage:

import{parseScript,parseModule,parse}from'./seafox';parseScript('({x: [y] = 0} = 1)');parseModule('({x: [y] = 0} = 1)',{directives: true,raw: true});parse('({x: [y] = 0} = 1)',{module: true});parse('({x: [y] = 0} = 1)');

Lexical analysis

Lexical analysis can only be done during parsing and accepts only a function type as the option

parseScript('foo = bar',{onToken: ()=>{}});

The callback function have 4 arguments.

ArgumentsDescription
tokenThe token to be extracted
valueValue of the extracted token
startStart position of the extracted token
endEnd position of the extracted token

The loc option needs to be enabled for start and end. Otherwise this values will be set to undefined

Performance

Seafox is developed for performance and low memory usage, and the parser is about 2x - 4x faster than all other javascript parsers.

About

A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript

Topics

Resources

Stars

492 stars

Watchers

14 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - KFlash/seafox: A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript · GitHub
Skip to content

Repository files navigation

Seafox

A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript.


Seafox NPMGitHub licenseTotal alertsCircleLicense

Features

  • Conforms to the standard ECMAScript® 2021 (ECMA-262 11th Edition) language specification
  • Support for additional ECMAScript features for Web Browsers
  • Optionally track syntactic node locations
  • Emits an ESTree-compatible abstract syntax tree
  • Lexical analysis
  • No backtracking
  • Low memory usage
  • Insane performance both on desktop computers and handheld devices
  • Twice as fast as other Javascript parsers
  • Very well tested (~33 000 unit tests with full code coverage)
  • Lightweight - ~84 KB minified

Installation

npm install seafox --save-dev

API

Seafox generates AST according to ESTree AST format, and can be used to perform syntactic analysis (parsing) or lexical analysis (tokenization) of a JavaScript program, and with ES2015 and later a JavaScript program can be either a script or a module.

The parse method exposed by Seafox takes an optional options object which allows you to specify whether to parse in script mode (the default) or in module mode.

This is the available options:

{// Allow parsing using Module as the goal symbolmodule?: boolean;// The flag to enable start and end offsets and line/column location information to each node
loc: false;// Disable web compatibility
disableWebCompat: false;// The flag to attach raw property to each literal and identifier node
raw: false;// Enabled directives
directives: false;// The flag to allow return in the global scope
globalReturn: false;// The flag to enable implied strict mode
impliedStrict: false;// Enable non-standard parenthesized expression node
preserveParens: false;// Allows token extraction. Accepts only a function
onToken: function(){}}

Example usage:

import{parseScript,parseModule,parse}from'./seafox';parseScript('({x: [y] = 0} = 1)');parseModule('({x: [y] = 0} = 1)',{directives: true,raw: true});parse('({x: [y] = 0} = 1)',{module: true});parse('({x: [y] = 0} = 1)');

Lexical analysis

Lexical analysis can only be done during parsing and accepts only a function type as the option

parseScript('foo = bar',{onToken: ()=>{}});

The callback function have 4 arguments.

ArgumentsDescription
tokenThe token to be extracted
valueValue of the extracted token
startStart position of the extracted token
endEnd position of the extracted token

The loc option needs to be enabled for start and end. Otherwise this values will be set to undefined

Performance

Seafox is developed for performance and low memory usage, and the parser is about 2x - 4x faster than all other javascript parsers.

About

A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript

Topics

Resources

Stars

492 stars

Watchers

14 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - KFlash/seafox: A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript · GitHub
Skip to content

Repository files navigation

Seafox

A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript.


Seafox NPMGitHub licenseTotal alertsCircleLicense

Features

  • Conforms to the standard ECMAScript® 2021 (ECMA-262 11th Edition) language specification
  • Support for additional ECMAScript features for Web Browsers
  • Optionally track syntactic node locations
  • Emits an ESTree-compatible abstract syntax tree
  • Lexical analysis
  • No backtracking
  • Low memory usage
  • Insane performance both on desktop computers and handheld devices
  • Twice as fast as other Javascript parsers
  • Very well tested (~33 000 unit tests with full code coverage)
  • Lightweight - ~84 KB minified

Installation

npm install seafox --save-dev

API

Seafox generates AST according to ESTree AST format, and can be used to perform syntactic analysis (parsing) or lexical analysis (tokenization) of a JavaScript program, and with ES2015 and later a JavaScript program can be either a script or a module.

The parse method exposed by Seafox takes an optional options object which allows you to specify whether to parse in script mode (the default) or in module mode.

This is the available options:

{// Allow parsing using Module as the goal symbolmodule?: boolean;// The flag to enable start and end offsets and line/column location information to each node
loc: false;// Disable web compatibility
disableWebCompat: false;// The flag to attach raw property to each literal and identifier node
raw: false;// Enabled directives
directives: false;// The flag to allow return in the global scope
globalReturn: false;// The flag to enable implied strict mode
impliedStrict: false;// Enable non-standard parenthesized expression node
preserveParens: false;// Allows token extraction. Accepts only a function
onToken: function(){}}

Example usage:

import{parseScript,parseModule,parse}from'./seafox';parseScript('({x: [y] = 0} = 1)');parseModule('({x: [y] = 0} = 1)',{directives: true,raw: true});parse('({x: [y] = 0} = 1)',{module: true});parse('({x: [y] = 0} = 1)');

Lexical analysis

Lexical analysis can only be done during parsing and accepts only a function type as the option

parseScript('foo = bar',{onToken: ()=>{}});

The callback function have 4 arguments.

ArgumentsDescription
tokenThe token to be extracted
valueValue of the extracted token
startStart position of the extracted token
endEnd position of the extracted token

The loc option needs to be enabled for start and end. Otherwise this values will be set to undefined

Performance

Seafox is developed for performance and low memory usage, and the parser is about 2x - 4x faster than all other javascript parsers.

About

A blazing fast 100% spec compliant, self-hosted javascript parser written in Typescript

Topics

Resources

Stars

492 stars

Watchers

14 watching

Forks

Releases

Packages

Used by

Contributors

Languages