Jurassic

A .NET library to parse and execute JavaScript code.


Keywords
ECMAScript, JavaScript, compiler, library
License
MIT
Install
Install-Package Jurassic -Version 3.0.0-alpha

Documentation

Jurassic

Build status

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)
Syntax
  default function parameters 4/7
  rest parameters
  spread syntax for iterable objects
  object literal extensions ✅ 6/6
  for..of loops 6/9
  octal and binary literals ✅ 4/4
  template literals 6/7
  RegExp "y" and "u" flags
  destructuring, declarations
  destructuring, assignment
  destructuring, parameters
  Unicode code point escapes ✅ 4/4
  new.target ✅ 2/2
Bindings
  const ✅ 18/18
  let 14/16
  block-level function declaration[18]
Functions
  arrow functions
  class ✅ 24/24
  super ✅ 8/8
  generators
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 ✅ 12/12
  well-known symbols[27] 23/26
Built-in extensions
  Object static methods ✅ 4/4
  function "name" property 10/17
  String static methods ✅ 2/2
  String.prototype methods ✅ 10/10
  RegExp.prototype properties ✅ 6/6
  Array static methods 8/11
  Array.prototype methods ✅ 10/10
  Number properties ✅ 9/9
  Math methods ✅ 17/17
  Date.prototype[Symbol.toPrimitive] ✅ 1/1
Subclassing
  Array is subclassable 9/11
  RegExp is subclassable ✅ 4/4
  Function is subclassable 4/6
  Promise is subclassable
  miscellaneous subclassables
Misc
  prototype of bound functions 1/5
  Proxy, internal 'get' calls 19/36
  Proxy, internal 'set' calls 7/11
  Proxy, internal 'defineProperty' calls
  Proxy, internal 'deleteProperty' calls
  Proxy, internal 'getOwnPropertyDescriptor' calls 2/4
  Proxy, internal 'ownKeys' calls ✅ 3/3
  Object static methods accept primitives ✅ 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]
  Object.prototype.__proto__ 1/6
  String.prototype HTML methods ✅ 3/3
  RegExp.prototype.compile 1/2
  RegExp syntax extensions 4/8
  HTML-style comments