boa_engine 0.22.0

Boa is a Javascript lexer, parser and compiler written in Rust. Currently, it has support for some of the language.
Documentation
[package]
name = "boa_engine"
keywords = ["javascript", "js", "compiler", "lexer", "parser"]
categories = ["parser-implementations", "compilers"]
readme = "../../README.md"
description.workspace = true
version.workspace = true
edition.workspace = true
authors.workspace = true
license.workspace = true
repository.workspace = true
rust-version.workspace = true

[features]
default = ["float16", "xsum", "temporal"]

embedded_lz4 = ["boa_macros/embedded_lz4", "lz4_flex"]

# Replace the NaN-boxing implementation of `JsValueInner` with an
# enum-based implementation. This implementation is less performant
# but compatible with more platforms.
# If you encounter the "assertion left == right failed: Pointer is
# not 4-bits aligned or over 51-bits." error, try this feature.
# For more details, see https://github.com/boa-dev/boa/issues/4275
# Disabled by default.
jsvalue-enum = []
deser = ["boa_interner/serde", "boa_ast/serde"]
either = ["dep:either", "boa_gc/either"]

# Enables the `Intl` builtin object and bundles a default ICU4X data provider.
# Prefer this over `intl` if you just want to enable `Intl` without dealing with the
# generation of ICU4X data.
intl_bundled = ["intl", "dep:boa_icu_provider"]

# Enables Boa's `Intl` builtin implementation.
# Prefer this over `intl_bundled` if you want to reduce the size of the final binary
# by providing a smaller ICU4X data provider.
intl = [
    "boa_gc/icu",
    "icu_normalizer/serde",
    "dep:icu_locale",
    "dep:icu_datetime",
    "dep:icu_time",
    "dep:icu_plurals",
    "dep:icu_provider",
    "dep:icu_calendar",
    "dep:icu_collator",
    "dep:icu_casemap",
    "dep:icu_list",
    "dep:icu_segmenter",
    "dep:icu_decimal",
    "dep:writeable",
    "dep:sys-locale",
    "dep:yoke",
    "dep:zerofrom",
    "dep:fixed_decimal",
    "dep:tinystr",
    "dep:timezone_provider",
    "timezone_provider/experimental_tzif",
]

fuzz = ["boa_ast/arbitrary", "boa_interner/arbitrary"]

# Enable Boa's VM instruction flowgraph generator.
flowgraph = []

# Enable Boa's VM instruction tracing.
trace = ["js"]

# Enable Boa's additional ECMAScript features for web browsers.
annex-b = ["boa_ast/annex-b", "boa_parser/annex-b"]

# Enable Boa's Temporal proposal implementation
temporal = ["dep:icu_calendar", "dep:temporal_rs", "dep:timezone_provider", "timezone_provider/experimental_tzif"]

#Enable access to host system timezone
system-time-zone = ["dep:iana-time-zone"]

# Enable experimental features, like Stage 3 proposals.
experimental = []

# Enable binding to JS APIs for system related utilities.
js = ["dep:web-time", "dep:getrandom", "getrandom/wasm_js", "time/wasm-bindgen"]

# Enable support for Float16 typed arrays
float16 = ["dep:float16"]

# Enable support for `Math.sumPrecise`
xsum = ["dep:xsum"]

# Native Backtraces
native-backtrace = []

[dependencies]
tag_ptr.workspace = true
boa_interner.workspace = true
boa_gc = { workspace = true, features = ["thin-vec", "boa_string", "arrayvec"] }
boa_macros.workspace = true
boa_ast.workspace = true
boa_parser.workspace = true
boa_string.workspace = true
cow-utils.workspace = true
futures-lite.workspace = true
float16 = { version = "0.1", optional = true }
lz4_flex = { workspace = true, optional = true }
xsum = { version = "0.1.6", optional = true }
serde = { workspace = true, features = ["derive", "rc"] }
serde_json.workspace = true
rand.workspace = true
num-traits.workspace = true
regress.workspace = true
rustc-hash = { workspace = true, features = ["std"] }
num-bigint = { workspace = true, features = ["serde"] }
num-integer.workspace = true
bitflags.workspace = true
indexmap = { workspace = true, features = ["std"] }
ryu-js.workspace = true
fast-float2.workspace = true
tap.workspace = true
small_btree.workspace = true
pastey.workspace = true
thiserror.workspace = true
dashmap.workspace = true
num_enum.workspace = true
thin-vec.workspace = true
itertools = { workspace = true, default-features = false, features = ["use_alloc"] }
icu_normalizer = { workspace = true, features = [
    "compiled_data",
    "utf16_iter",
] }
portable-atomic.workspace = true
bytemuck = { workspace = true, features = ["derive"] }
arrayvec.workspace = true
intrusive-collections.workspace = true
cfg-if.workspace = true
time.workspace = true
hashbrown.workspace = true
either = { workspace = true, optional = true }
static_assertions.workspace = true
aligned-vec.workspace = true
dynify = { workspace = true, features = ["macros"] }
futures-concurrency.workspace = true
oneshot = { workspace = true, features = ["async"] }
async-channel.workspace = true

# intl deps
boa_icu_provider = { workspace = true, features = ["std"], optional = true }
sys-locale = { workspace = true, optional = true }
icu_provider = { workspace = true, optional = true }
icu_locale = { workspace = true, default-features = false, features = [
    "serde",
], optional = true }
icu_datetime = { workspace = true, default-features = false, features = [
    "serde",
], optional = true }
icu_time = { workspace = true, default-features = false, features = [
    "serde",
], optional = true }
icu_calendar = { workspace = true, default-features = false, optional = true }
icu_collator = { workspace = true, default-features = false, features = [
    "serde",
], optional = true }
icu_plurals = { workspace = true, default-features = false, features = [
    "serde",
    "unstable",
], optional = true }
icu_list = { workspace = true, default-features = false, features = [
    "serde",
    "alloc",
], optional = true }
icu_casemap = { workspace = true, default-features = false, features = [
    "serde",
], optional = true }
icu_segmenter = { workspace = true, default-features = false, features = [
    "auto",
    "serde",
], optional = true }
icu_decimal = { workspace = true, default-features = false, features = [
    "serde", "unstable"
], optional = true }
writeable = { workspace = true, optional = true }
yoke = { workspace = true, optional = true }
zerofrom = { workspace = true, optional = true }
fixed_decimal = { workspace = true, features = [
    "ryu",
], optional = true }
tinystr = { workspace = true, optional = true }

# temporal deps
temporal_rs = { workspace = true, optional = true }
timezone_provider = { workspace = true, optional = true }
iana-time-zone = { workspace = true, optional = true }

[target.'cfg(all(target_family = "wasm", not(any(target_os = "emscripten", target_os = "wasi"))))'.dependencies]
web-time = { workspace = true, optional = true }
# NOTE: This enables the wasm_js required for rand to work on wasm
getrandom = { workspace = true, features = ["wasm_js"], optional = true }

[dev-dependencies]
criterion.workspace = true
float-cmp.workspace = true
indoc.workspace = true
textwrap.workspace = true
test-case.workspace = true
husky-rs.workspace = true

[target.x86_64-unknown-linux-gnu.dev-dependencies]
jemallocator.workspace = true

[lib]
crate-type = ["cdylib", "lib"]
name = "boa_engine"
bench = false

[[bench]]
name = "full"
harness = false

[lints]
workspace = true

[package.metadata.docs.rs]
all-features = true