1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
//! A reference implementation for the BinJS binary source format for JavaScript. //! //! # About BinJS //! //! As websites become more sophisticated, the amount of JavaScript source code keeps //! increasing. By itself, this is not a problem. However, with the amount of code //! loaded by large websites such as Facebook's chat, it is now common to witness //! page loads during which both the loading and the parsing of JS code can take //! several seconds each – this is assuming a fast connection, and taking into //! account that the code is both compressed and optimized for loading and parsing //! speed. //! //! There is no reason to believe that the size of JS code will decrease or will //! even stop increasing, nor that every large webdev team has the means to profile //! loading and parsing speed of all their code. //! //! This crate offers a (WIP) reference implementation for BinJS, a vendor-neutral //! JavaScript format designed to optimize parsing speed and, when possible, //! loading speed. extern crate binjs_es6; extern crate binjs_generic; extern crate binjs_io; extern crate binjs_meta; extern crate binjs_shared; extern crate serde; extern crate serde_json; extern crate which; #[cfg(test)] extern crate env_logger; /// Working with a generic (i.e. JSON-based) representation /// of the JavaScript AST. pub mod generic { pub use binjs_generic::*; pub use binjs_shared::*; } /// Working with a specialized (i.e. strongly-typed) /// representation of the JavaScript AST. pub mod specialized { pub mod es6 { pub use binjs_es6::*; } } /// Language-agnostic and representation-agnostic primitives for /// tokenization and detokenization of ASTs, including (de)compression. /// /// Weakly-typed constructs (using a dynamic language specification and /// a JSON AST) based on these primitives are in module `generic::io`. /// Strongly-typed constructs (using a strongly-typed AST) based on /// these primitives will appear in modules `specialized::*::io`. pub mod io { pub use binjs_io::*; } /// Dynamic manipulation of the specifications. pub mod meta { pub use binjs_meta::*; } /// Parsing source JavaScript. pub mod source;