Jurassic
A .NET library to parse and execute JavaScript code.
Install / Use
/learn @paulbartrum/JurassicREADME

What is Jurassic?
Jurassic is an implementation of the ECMAScript language and runtime. It aims to provide the best performing and most standards-compliant implementation of JavaScript for .NET. Jurassic is not intended for end-users; instead it is intended to be integrated into .NET programs. If you are the author of a .NET program, you can use Jurassic to compile and execute JavaScript code.
Features
- Supports all ECMAScript 3 and ECMAScript 5 functionality, including ES5 strict mode
- Well tested - passes over five thousand unit tests (with over thirty thousand asserts)
- Simple yet powerful API
- Compiles JavaScript into .NET bytecode (CIL); not an interpreter
- Deployed as a single .NET assembly (no native code)
- Basic support for integrated debugging within Visual Studio
- Uses light-weight code generation, so generated code is fully garbage collected
- Tested on .NET 3.5, .NET 4 and Silverlight
How do I get it?
Install the NuGet package.
Usage
See the wiki for full usage details.
ECMAScript 6 status
Support for ECMAScript 6 is in progress. See http://kangax.github.io/compat-table/es6/ for the definition of each feature. The table below is correct as of version 3.1.
Feature|Status -------|------ Optimisation| proper tail calls (tail call optimisation)|:x: Syntax| default function parameters|4/7 rest parameters|:x: spread syntax for iterable objects|:x: object literal extensions|:white_check_mark: 6/6 for..of loops|6/9 octal and binary literals|:white_check_mark: 4/4 template literals|6/7 RegExp "y" and "u" flags|:x: destructuring, declarations|:x: destructuring, assignment|:x: destructuring, parameters|:x: Unicode code point escapes|:white_check_mark: 4/4 new.target|:white_check_mark: 2/2 Bindings| const|:white_check_mark: 18/18 let|14/16 block-level function declaration[18]|:x: Functions| arrow functions|:x: class|:white_check_mark: 24/24 super|:white_check_mark: 8/8 generators|:x: Built-ins| typed arrays|45/46 Map|18/19 Set|18/19 WeakMap|11/12 WeakSet|10/11 Proxy [25]|33/34 Reflect [26]|18/20 Promise|4/8 Symbol|:white_check_mark: 12/12 well-known symbols[27]|23/26 Built-in extensions| Object static methods|:white_check_mark: 4/4 function "name" property|10/17 String static methods|:white_check_mark: 2/2 String.prototype methods|:white_check_mark: 10/10 RegExp.prototype properties|:white_check_mark: 6/6 Array static methods|8/11 Array.prototype methods|:white_check_mark: 10/10 Number properties|:white_check_mark: 9/9 Math methods|:white_check_mark: 17/17 Date.prototype[Symbol.toPrimitive]|:white_check_mark: 1/1 Subclassing| Array is subclassable|9/11 RegExp is subclassable|:white_check_mark: 4/4 Function is subclassable|4/6 Promise is subclassable|:x: miscellaneous subclassables|:x: Misc| prototype of bound functions|1/5 Proxy, internal 'get' calls|19/36 Proxy, internal 'set' calls|7/11 Proxy, internal 'defineProperty' calls|:x: Proxy, internal 'deleteProperty' calls|:x: Proxy, internal 'getOwnPropertyDescriptor' calls|2/4 Proxy, internal 'ownKeys' calls|:white_check_mark: 3/3 Object static methods accept primitives|:white_check_mark: 10/10 own property order|5/7 Updated identifier syntax|1/3 miscellaneous|8/9 Annex b| non-strict function semantics[35]|2/3 __proto__ in object literals [36]|:x: Object.prototype.__proto__|1/6 String.prototype HTML methods|:white_check_mark: 3/3 RegExp.prototype.compile|1/2 RegExp syntax extensions|4/8 HTML-style comments|:x:
