js-sys-0.3.35/CHANGELOG.md010066400017500001750000000031471336537147500131110ustar0000000000000000# `js-sys` Change Log -------------------------------------------------------------------------------- ## Unreleased Released YYYY-MM-DD. ### Added * TODO (or remove section if none) ### Changed * TODO (or remove section if none) ### Deprecated * TODO (or remove section if none) ### Removed * TODO (or remove section if none) ### Fixed * TODO (or remove section if none) ### Security * TODO (or remove section if none) -------------------------------------------------------------------------------- ## 0.2.1 Released 2018-08-13. ### Added * Added bindings to `Array.prototype.splice`. * Added bindings to `RegExp`. * Added bindings to `ArrayBuffer.prototype.byteLength`. * Started adding the `#[wasm_bindgen(extends = ...)]` attribute to various JS types. * Added bindings to `EvalError`. * Added bindings to `Promise`. See the new `wasm-bindgen-futures` crate for integrating JS `Promise`s into Rust `Future`s. * Added bindings to `JSON.{parse,stringify}`. * Added bindings to `Array.of`. * Added bindings to `Intl.Collator`. * Added bindings to `Object.assign`. * Added bindings to `Object.create`. * Added bindings to `RangeError`. * Added bindings to `ReferenceError`. * Added bindings to `Symbol.unscopables`. * Added bindings to `URIError`. * Added bindings to `SyntaxError`. * Added bindings to `TypeError`. ### Changed * The `Intl` namespace was previously a bound object with static methods hanging off of it. It is now a module with free functions, and nested types. -------------------------------------------------------------------------------- ## 0.2.0 Released 2018-07-26. Initial release! js-sys-0.3.35/Cargo.toml.orig010066400017500001750000000014671360514047700141630ustar0000000000000000[package] name = "js-sys" version = "0.3.35" authors = ["The wasm-bindgen Developers"] readme = "./README.md" categories = ["wasm"] repository = "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/js-sys" homepage = "https://rustwasm.github.io/wasm-bindgen/" documentation = "https://docs.rs/js-sys" description = """ Bindings for all JS global objects and functions in all JS environments like Node.js and browsers, built on `#[wasm_bindgen]` using the `wasm-bindgen` crate. """ license = "MIT/Apache-2.0" edition = "2018" [lib] test = false doctest = false [dependencies] wasm-bindgen = { path = "../..", version = "0.2.58" } [target.'cfg(target_arch = "wasm32")'.dev-dependencies] wasm-bindgen-test = { path = '../test', version = '=0.3.8' } wasm-bindgen-futures = { path = '../futures', version = '0.4.8' } js-sys-0.3.35/Cargo.toml0000644000000024631360516026400104600ustar00# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies # # If you believe there's an error in this file please file an # issue against the rust-lang/cargo repository. If you're # editing this file be aware that the upstream Cargo.toml # will likely look very different (and much more reasonable) [package] edition = "2018" name = "js-sys" version = "0.3.35" authors = ["The wasm-bindgen Developers"] description = "Bindings for all JS global objects and functions in all JS environments like\nNode.js and browsers, built on `#[wasm_bindgen]` using the `wasm-bindgen` crate.\n" homepage = "https://rustwasm.github.io/wasm-bindgen/" documentation = "https://docs.rs/js-sys" readme = "./README.md" categories = ["wasm"] license = "MIT/Apache-2.0" repository = "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/js-sys" [lib] test = false doctest = false [dependencies.wasm-bindgen] version = "0.2.58" [target."cfg(target_arch = \"wasm32\")".dev-dependencies.wasm-bindgen-futures] version = "0.4.8" [target."cfg(target_arch = \"wasm32\")".dev-dependencies.wasm-bindgen-test] version = "=0.3.8" js-sys-0.3.35/README.md010066400017500001750000000003731336537147500125550ustar0000000000000000# `js-sys` [API documentation](https://rustwasm.github.io/wasm-bindgen/api/js_sys/) Raw bindings to JS global APIs for projects using `wasm-bindgen`. This crate is handwritten and intended to work in *all* JS environments like browsers and Node.js. js-sys-0.3.35/src/lib.rs010066400017500001750000007347321360470371600132070ustar0000000000000000//! Bindings to JavaScript's standard, built-in objects, including their methods //! and properties. //! //! This does *not* include any Web, Node, or any other JS environment //! APIs. Only the things that are guaranteed to exist in the global scope by //! the ECMAScript standard. //! //! https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects //! //! ## A Note About `camelCase`, `snake_case`, and Naming Conventions //! //! JavaScript's global objects use `camelCase` naming conventions for functions //! and methods, but Rust style is to use `snake_case`. These bindings expose //! the Rust style `snake_case` name. Additionally, acronyms within a method //! name are all lower case, where as in JavaScript they are all upper case. For //! example, `decodeURI` in JavaScript is exposed as `decode_uri` in these //! bindings. #![doc(html_root_url = "https://docs.rs/js-sys/0.2")] use std::fmt; use std::mem; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; // When adding new imports: // // * Keep imports in alphabetical order. // // * Rename imports with `js_name = ...` according to the note about `camelCase` // and `snake_case` in the module's documentation above. // // * Include the one sentence summary of the import from the MDN link in the // module's documentation above, and the MDN link itself. // // * If a function or method can throw an exception, make it catchable by adding // `#[wasm_bindgen(catch)]`. // // * Add a new `#[test]` into the appropriate file in the // `crates/js-sys/tests/wasm/` directory. If the imported function or method // can throw an exception, make sure to also add test coverage for that case. // // * Arguments that are `JsValue`s or imported JavaScript types should be taken // by reference. #[wasm_bindgen] extern "C" { /// The `decodeURI()` function decodes a Uniform Resource Identifier (URI) /// previously created by `encodeURI` or by a similar routine. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI) #[wasm_bindgen(catch, js_name = decodeURI)] pub fn decode_uri(encoded: &str) -> Result; /// The `decodeURIComponent()` function decodes a Uniform Resource Identifier (URI) component /// previously created by `encodeURIComponent` or by a similar routine. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent) #[wasm_bindgen(catch, js_name = decodeURIComponent)] pub fn decode_uri_component(encoded: &str) -> Result; /// The `encodeURI()` function encodes a Uniform Resource Identifier (URI) /// by replacing each instance of certain characters by one, two, three, or /// four escape sequences representing the UTF-8 encoding of the character /// (will only be four escape sequences for characters composed of two /// "surrogate" characters). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI) #[wasm_bindgen(js_name = encodeURI)] pub fn encode_uri(decoded: &str) -> JsString; /// The `encodeURIComponent()` function encodes a Uniform Resource Identifier (URI) component /// by replacing each instance of certain characters by one, two, three, or four escape sequences /// representing the UTF-8 encoding of the character /// (will only be four escape sequences for characters composed of two "surrogate" characters). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent) #[wasm_bindgen(js_name = encodeURIComponent)] pub fn encode_uri_component(decoded: &str) -> JsString; /// The `eval()` function evaluates JavaScript code represented as a string. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) #[wasm_bindgen(catch)] pub fn eval(js_source_text: &str) -> Result; /// The global `isFinite()` function determines whether the passed value is a finite number. /// If needed, the parameter is first converted to a number. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite) #[wasm_bindgen(js_name = isFinite)] pub fn is_finite(value: &JsValue) -> bool; /// The `parseInt()` function parses a string argument and returns an integer /// of the specified radix (the base in mathematical numeral systems), or NaN on error. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt) #[wasm_bindgen(js_name = parseInt)] pub fn parse_int(text: &str, radix: u8) -> f64; /// The `parseFloat()` function parses an argument and returns a floating point number, /// or NaN on error. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat) #[wasm_bindgen(js_name = parseFloat)] pub fn parse_float(text: &str) -> f64; /// The `escape()` function computes a new string in which certain characters have been /// replaced by a hexadecimal escape sequence. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape) #[wasm_bindgen] pub fn escape(string: &str) -> JsString; /// The `unescape()` function computes a new string in which hexadecimal escape /// sequences are replaced with the character that it represents. The escape sequences might /// be introduced by a function like `escape`. Usually, `decodeURI` or `decodeURIComponent` /// are preferred over `unescape`. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/unescape) #[wasm_bindgen] pub fn unescape(string: &str) -> JsString; } // Array #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object, is_type_of = Array::is_array)] #[derive(Clone, Debug, PartialEq, Eq)] pub type Array; /// Creates a new empty array. #[wasm_bindgen(constructor)] pub fn new() -> Array; /// Creates a new array with the specified length (elements are initialized to `undefined`). #[wasm_bindgen(constructor)] pub fn new_with_length(len: u32) -> Array; /// Retrieves the element at the index (returns `undefined` if the index is out of range). #[wasm_bindgen(method, structural, indexing_getter)] pub fn get(this: &Array, index: u32) -> JsValue; /// Sets the element at the index (auto-enlarges the array if the index is out of range). #[wasm_bindgen(method, structural, indexing_setter)] pub fn set(this: &Array, index: u32, value: JsValue); /// Deletes the element at the index (does nothing if the index is out of range). /// /// The element at the index is set to `undefined`. /// /// This does not resize the array, the array will still be the same length. #[wasm_bindgen(method, structural, indexing_deleter)] pub fn delete(this: &Array, index: u32); /// The `Array.from()` method creates a new, shallow-copied `Array` instance /// from an array-like or iterable object. #[wasm_bindgen(static_method_of = Array)] pub fn from(val: &JsValue) -> Array; /// The `copyWithin()` method shallow copies part of an array to another /// location in the same array and returns it, without modifying its size. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/copyWithin) #[wasm_bindgen(method, js_name = copyWithin)] pub fn copy_within(this: &Array, target: i32, start: i32, end: i32) -> Array; /// The `concat()` method is used to merge two or more arrays. This method /// does not change the existing arrays, but instead returns a new array. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat) #[wasm_bindgen(method)] pub fn concat(this: &Array, array: &Array) -> Array; /// The `every()` method tests whether all elements in the array pass the test /// implemented by the provided function. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every) #[wasm_bindgen(method)] pub fn every(this: &Array, predicate: &mut dyn FnMut(JsValue, u32, Array) -> bool) -> bool; /// The `fill()` method fills all the elements of an array from a start index /// to an end index with a static value. The end index is not included. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill) #[wasm_bindgen(method)] pub fn fill(this: &Array, value: &JsValue, start: u32, end: u32) -> Array; /// The `filter()` method creates a new array with all elements that pass the /// test implemented by the provided function. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) #[wasm_bindgen(method)] pub fn filter(this: &Array, predicate: &mut dyn FnMut(JsValue, u32, Array) -> bool) -> Array; /// The `find()` method returns the value of the first element in the array that satisfies /// the provided testing function. Otherwise `undefined` is returned. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find) #[wasm_bindgen(method)] pub fn find(this: &Array, predicate: &mut dyn FnMut(JsValue, u32, Array) -> bool) -> JsValue; /// The `findIndex()` method returns the index of the first element in the array that /// satisfies the provided testing function. Otherwise -1 is returned. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex) #[wasm_bindgen(method, js_name = findIndex)] pub fn find_index(this: &Array, predicate: &mut dyn FnMut(JsValue, u32, Array) -> bool) -> i32; /// The `flat()` method creates a new array with all sub-array elements concatenated into it /// recursively up to the specified depth. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat) #[wasm_bindgen(method)] pub fn flat(this: &Array, depth: i32) -> Array; /// The `flatMap()` method first maps each element using a mapping function, then flattens /// the result into a new array. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap) #[wasm_bindgen(method, js_name = flatMap)] pub fn flat_map( this: &Array, callback: &mut dyn FnMut(JsValue, u32, Array) -> Vec, ) -> Array; /// The `forEach()` method executes a provided function once for each array element. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) #[wasm_bindgen(method, js_name = forEach)] pub fn for_each(this: &Array, callback: &mut dyn FnMut(JsValue, u32, Array)); /// The `includes()` method determines whether an array includes a certain /// element, returning true or false as appropriate. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes) #[wasm_bindgen(method)] pub fn includes(this: &Array, value: &JsValue, from_index: i32) -> bool; /// The `indexOf()` method returns the first index at which a given element /// can be found in the array, or -1 if it is not present. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf) #[wasm_bindgen(method, js_name = indexOf)] pub fn index_of(this: &Array, value: &JsValue, from_index: i32) -> i32; /// The `Array.isArray()` method determines whether the passed value is an Array. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray) #[wasm_bindgen(static_method_of = Array, js_name = isArray)] pub fn is_array(value: &JsValue) -> bool; /// The `join()` method joins all elements of an array (or an array-like object) /// into a string and returns this string. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join) #[wasm_bindgen(method)] pub fn join(this: &Array, delimiter: &str) -> JsString; /// The `lastIndexOf()` method returns the last index at which a given element /// can be found in the array, or -1 if it is not present. The array is /// searched backwards, starting at fromIndex. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf) #[wasm_bindgen(method, js_name = lastIndexOf)] pub fn last_index_of(this: &Array, value: &JsValue, from_index: i32) -> i32; /// The length property of an object which is an instance of type Array /// sets or returns the number of elements in that array. The value is an /// unsigned, 32-bit integer that is always numerically greater than the /// highest index in the array. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length) #[wasm_bindgen(method, getter, structural)] pub fn length(this: &Array) -> u32; /// `map()` calls a provided callback function once for each element in an array, /// in order, and constructs a new array from the results. callback is invoked /// only for indexes of the array which have assigned values, including undefined. /// It is not called for missing elements of the array (that is, indexes that have /// never been set, which have been deleted or which have never been assigned a value). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) #[wasm_bindgen(method)] pub fn map(this: &Array, predicate: &mut dyn FnMut(JsValue, u32, Array) -> JsValue) -> Array; /// The `Array.of()` method creates a new Array instance with a variable /// number of arguments, regardless of number or type of the arguments. /// /// The difference between `Array.of()` and the `Array` constructor is in the /// handling of integer arguments: `Array.of(7)` creates an array with a single /// element, `7`, whereas `Array(7)` creates an empty array with a `length` /// property of `7` (Note: this implies an array of 7 empty slots, not slots /// with actual undefined values). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of) /// /// # Notes /// /// There are a few bindings to `of` in `js-sys`: `of1`, `of2`, etc... /// with different arities. #[wasm_bindgen(static_method_of = Array, js_name = of)] pub fn of1(a: &JsValue) -> Array; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of) #[wasm_bindgen(static_method_of = Array, js_name = of)] pub fn of2(a: &JsValue, b: &JsValue) -> Array; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of) #[wasm_bindgen(static_method_of = Array, js_name = of)] pub fn of3(a: &JsValue, b: &JsValue, c: &JsValue) -> Array; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of) #[wasm_bindgen(static_method_of = Array, js_name = of)] pub fn of4(a: &JsValue, b: &JsValue, c: &JsValue, d: &JsValue) -> Array; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of) #[wasm_bindgen(static_method_of = Array, js_name = of)] pub fn of5(a: &JsValue, b: &JsValue, c: &JsValue, d: &JsValue, e: &JsValue) -> Array; /// The `pop()` method removes the last element from an array and returns that /// element. This method changes the length of the array. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop) #[wasm_bindgen(method)] pub fn pop(this: &Array) -> JsValue; /// The `push()` method adds one or more elements to the end of an array and /// returns the new length of the array. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push) #[wasm_bindgen(method)] pub fn push(this: &Array, value: &JsValue) -> u32; /// The `reduce()` method applies a function against an accumulator and each element in /// the array (from left to right) to reduce it to a single value. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce) #[wasm_bindgen(method)] pub fn reduce( this: &Array, predicate: &mut dyn FnMut(JsValue, JsValue, u32, Array) -> JsValue, initial_value: &JsValue, ) -> JsValue; /// The `reduceRight()` method applies a function against an accumulator and each value /// of the array (from right-to-left) to reduce it to a single value. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/ReduceRight) #[wasm_bindgen(method, js_name = reduceRight)] pub fn reduce_right( this: &Array, predicate: &mut dyn FnMut(JsValue, JsValue, u32, Array) -> JsValue, initial_value: &JsValue, ) -> JsValue; /// The `reverse()` method reverses an array in place. The first array /// element becomes the last, and the last array element becomes the first. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse) #[wasm_bindgen(method)] pub fn reverse(this: &Array) -> Array; /// The `shift()` method removes the first element from an array and returns /// that removed element. This method changes the length of the array. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift) #[wasm_bindgen(method)] pub fn shift(this: &Array) -> JsValue; /// The `slice()` method returns a shallow copy of a portion of an array into /// a new array object selected from begin to end (end not included). /// The original array will not be modified. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) #[wasm_bindgen(method)] pub fn slice(this: &Array, start: u32, end: u32) -> Array; /// The `some()` method tests whether at least one element in the array passes the test implemented /// by the provided function. /// Note: This method returns false for any condition put on an empty array. /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some) #[wasm_bindgen(method)] pub fn some(this: &Array, predicate: &mut dyn FnMut(JsValue) -> bool) -> bool; /// The `sort()` method sorts the elements of an array in place and returns /// the array. The sort is not necessarily stable. The default sort /// order is according to string Unicode code points. /// /// The time and space complexity of the sort cannot be guaranteed as it /// is implementation dependent. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) #[wasm_bindgen(method)] pub fn sort(this: &Array) -> Array; /// The `splice()` method changes the contents of an array by removing existing elements and/or /// adding new elements. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice) #[wasm_bindgen(method)] pub fn splice(this: &Array, start: u32, delete_count: u32, item: &JsValue) -> Array; /// The `toLocaleString()` method returns a string representing the elements of the array. /// The elements are converted to Strings using their toLocaleString methods and these /// Strings are separated by a locale-specific String (such as a comma “,”). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toLocaleString) #[wasm_bindgen(method, js_name = toLocaleString)] pub fn to_locale_string(this: &Array, locales: &JsValue, options: &JsValue) -> JsString; /// The `toString()` method returns a string representing the specified array /// and its elements. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString) #[wasm_bindgen(method, js_name = toString)] pub fn to_string(this: &Array) -> JsString; /// The `unshift()` method adds one or more elements to the beginning of an /// array and returns the new length of the array. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift) #[wasm_bindgen(method)] pub fn unshift(this: &Array, value: &JsValue) -> u32; } /// Iterator returned by `Array::iter` #[derive(Debug, Clone)] pub struct ArrayIter<'a> { range: std::ops::Range, array: &'a Array, } impl<'a> std::iter::Iterator for ArrayIter<'a> { type Item = JsValue; fn next(&mut self) -> Option { let index = self.range.next()?; Some(self.array.get(index)) } #[inline] fn size_hint(&self) -> (usize, Option) { self.range.size_hint() } } impl<'a> std::iter::DoubleEndedIterator for ArrayIter<'a> { fn next_back(&mut self) -> Option { let index = self.range.next_back()?; Some(self.array.get(index)) } } impl<'a> std::iter::FusedIterator for ArrayIter<'a> {} impl<'a> std::iter::ExactSizeIterator for ArrayIter<'a> {} impl Array { /// Returns an iterator over the values of the JS array. pub fn iter(&self) -> ArrayIter<'_> { ArrayIter { range: 0..self.length(), array: self, } } /// Converts the JS array into a new Vec. pub fn to_vec(&self) -> Vec { let len = self.length(); let mut output = Vec::with_capacity(len as usize); for i in 0..len { output.push(self.get(i)); } output } } // TODO pre-initialize the Array with the correct length using TrustedLen impl std::iter::FromIterator for Array where A: AsRef, { fn from_iter(iter: T) -> Array where T: IntoIterator, { let out = Array::new(); for value in iter { out.push(value.as_ref()); } out } } // ArrayBuffer #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type ArrayBuffer; /// The `ArrayBuffer` object is used to represent a generic, /// fixed-length raw binary data buffer. You cannot directly /// manipulate the contents of an `ArrayBuffer`; instead, you /// create one of the typed array objects or a `DataView` object /// which represents the buffer in a specific format, and use that /// to read and write the contents of the buffer. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) #[wasm_bindgen(constructor)] pub fn new(length: u32) -> ArrayBuffer; /// The byteLength property of an object which is an instance of type ArrayBuffer /// it's an accessor property whose set accessor function is undefined, /// meaning that you can only read this property. /// The value is established when the array is constructed and cannot be changed. /// This property returns 0 if this ArrayBuffer has been detached. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/byteLength) #[wasm_bindgen(method, getter, js_name = byteLength)] pub fn byte_length(this: &ArrayBuffer) -> u32; /// The `isView()` method returns true if arg is one of the `ArrayBuffer` /// views, such as typed array objects or a DataView; false otherwise. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView) #[wasm_bindgen(static_method_of = ArrayBuffer, js_name = isView)] pub fn is_view(value: &JsValue) -> bool; /// The `slice()` method returns a new `ArrayBuffer` whose contents /// are a copy of this `ArrayBuffer`'s bytes from begin, inclusive, /// up to end, exclusive. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice) #[wasm_bindgen(method)] pub fn slice(this: &ArrayBuffer, begin: u32) -> ArrayBuffer; /// Like `slice()` but with the `end` argument. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice) #[wasm_bindgen(method, js_name = slice)] pub fn slice_with_end(this: &ArrayBuffer, begin: u32, end: u32) -> ArrayBuffer; } // SharedArrayBuffer #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object)] #[derive(Clone, Debug)] pub type SharedArrayBuffer; /// The `SharedArrayBuffer` object is used to represent a generic, /// fixed-length raw binary data buffer, similar to the `ArrayBuffer` /// object, but in a way that they can be used to create views /// on shared memory. Unlike an `ArrayBuffer`, a `SharedArrayBuffer` /// cannot become detached. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) #[wasm_bindgen(constructor)] pub fn new(length: u32) -> SharedArrayBuffer; /// The byteLength accessor property represents the length of /// an `SharedArrayBuffer` in bytes. This is established when /// the `SharedArrayBuffer` is constructed and cannot be changed. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/byteLength) #[wasm_bindgen(method, getter, js_name = byteLength)] pub fn byte_length(this: &SharedArrayBuffer) -> u32; /// The `slice()` method returns a new `SharedArrayBuffer` whose contents /// are a copy of this `SharedArrayBuffer`'s bytes from begin, inclusive, /// up to end, exclusive. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/slice) #[wasm_bindgen(method)] pub fn slice(this: &SharedArrayBuffer, begin: u32) -> SharedArrayBuffer; /// Like `slice()` but with the `end` argument. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/slice) #[wasm_bindgen(method, js_name = slice)] pub fn slice_with_end(this: &SharedArrayBuffer, begin: u32, end: u32) -> SharedArrayBuffer; } // Array Iterator #[wasm_bindgen] extern "C" { /// The `keys()` method returns a new Array Iterator object that contains the /// keys for each index in the array. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/keys) #[wasm_bindgen(method)] pub fn keys(this: &Array) -> Iterator; /// The `entries()` method returns a new Array Iterator object that contains /// the key/value pairs for each index in the array. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries) #[wasm_bindgen(method)] pub fn entries(this: &Array) -> Iterator; /// The `values()` method returns a new Array Iterator object that /// contains the values for each index in the array. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values) #[wasm_bindgen(method)] pub fn values(this: &Array) -> Iterator; } /// The `Atomics` object provides atomic operations as static methods. /// They are used with `SharedArrayBuffer` objects. /// /// The Atomic operations are installed on an `Atomics` module. Unlike /// the other global objects, `Atomics` is not a constructor. You cannot /// use it with a new operator or invoke the `Atomics` object as a /// function. All properties and methods of `Atomics` are static /// (as is the case with the Math object, for example). /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics) #[allow(non_snake_case)] pub mod Atomics { use super::*; #[wasm_bindgen] extern "C" { /// The static `Atomics.add()` method adds a given value at a given /// position in the array and returns the old value at that position. /// This atomic operation guarantees that no other write happens /// until the modified value is written back. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/add) #[wasm_bindgen(js_namespace = Atomics, catch)] pub fn add(typed_array: &JsValue, index: u32, value: i32) -> Result; /// The static `Atomics.and()` method computes a bitwise AND with a given /// value at a given position in the array, and returns the old value /// at that position. /// This atomic operation guarantees that no other write happens /// until the modified value is written back. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/and) #[wasm_bindgen(js_namespace = Atomics, catch)] pub fn and(typed_array: &JsValue, index: u32, value: i32) -> Result; /// The static `Atomics.compareExchange()` method exchanges a given /// replacement value at a given position in the array, if a given expected /// value equals the old value. It returns the old value at that position /// whether it was equal to the expected value or not. /// This atomic operation guarantees that no other write happens /// until the modified value is written back. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/compareExchange) #[wasm_bindgen(js_namespace = Atomics, catch, js_name = compareExchange)] pub fn compare_exchange( typed_array: &JsValue, index: u32, expected_value: i32, replacement_value: i32, ) -> Result; /// The static `Atomics.exchange()` method stores a given value at a given /// position in the array and returns the old value at that position. /// This atomic operation guarantees that no other write happens /// until the modified value is written back. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/exchange) #[wasm_bindgen(js_namespace = Atomics, catch)] pub fn exchange(typed_array: &JsValue, index: u32, value: i32) -> Result; /// The static `Atomics.isLockFree()` method is used to determine /// whether to use locks or atomic operations. It returns true, /// if the given size is one of the `BYTES_PER_ELEMENT` property /// of integer `TypedArray` types. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/isLockFree) #[wasm_bindgen(js_namespace = Atomics, js_name = isLockFree)] pub fn is_lock_free(size: u32) -> bool; /// The static `Atomics.load()` method returns a value at a given /// position in the array. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/load) #[wasm_bindgen(js_namespace = Atomics, catch)] pub fn load(typed_array: &JsValue, index: u32) -> Result; /// The static `Atomics.notify()` method notifies up some agents that /// are sleeping in the wait queue. /// Note: This operation works with a shared `Int32Array` only. /// If `count` is not provided, notifies all the agents in the queue. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/notify) #[wasm_bindgen(js_namespace = Atomics, catch)] pub fn notify(typed_array: &Int32Array, index: u32) -> Result; /// Notifies up to `count` agents in the wait queue. #[wasm_bindgen(js_namespace = Atomics, catch, js_name = notify)] pub fn notify_with_count( typed_array: &Int32Array, index: u32, count: u32, ) -> Result; /// The static `Atomics.or()` method computes a bitwise OR with a given value /// at a given position in the array, and returns the old value at that position. /// This atomic operation guarantees that no other write happens /// until the modified value is written back. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/or) #[wasm_bindgen(js_namespace = Atomics, catch)] pub fn or(typed_array: &JsValue, index: u32, value: i32) -> Result; /// The static `Atomics.store()` method stores a given value at the given /// position in the array and returns that value. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/store) #[wasm_bindgen(js_namespace = Atomics, catch)] pub fn store(typed_array: &JsValue, index: u32, value: i32) -> Result; /// The static `Atomics.sub()` method substracts a given value at a /// given position in the array and returns the old value at that position. /// This atomic operation guarantees that no other write happens /// until the modified value is written back. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/sub) #[wasm_bindgen(js_namespace = Atomics, catch)] pub fn sub(typed_array: &JsValue, index: u32, value: i32) -> Result; /// The static `Atomics.wait()` method verifies that a given /// position in an `Int32Array` still contains a given value /// and if so sleeps, awaiting a wakeup or a timeout. /// It returns a string which is either "ok", "not-equal", or "timed-out". /// Note: This operation only works with a shared `Int32Array` /// and may not be allowed on the main thread. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/wait) #[wasm_bindgen(js_namespace = Atomics, catch)] pub fn wait(typed_array: &Int32Array, index: u32, value: i32) -> Result; /// Like `wait()`, but with timeout /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/wait) #[wasm_bindgen(js_namespace = Atomics, catch, js_name = wait)] pub fn wait_with_timeout( typed_array: &Int32Array, index: u32, value: i32, timeout: f64, ) -> Result; /// The static `Atomics.xor()` method computes a bitwise XOR /// with a given value at a given position in the array, /// and returns the old value at that position. /// This atomic operation guarantees that no other write happens /// until the modified value is written back. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/xor) #[wasm_bindgen(js_namespace = Atomics, catch)] pub fn xor(typed_array: &JsValue, index: u32, value: i32) -> Result; } } // Boolean #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object, is_type_of = |v| v.as_bool().is_some())] #[derive(Clone, PartialEq, Eq)] pub type Boolean; /// The `Boolean()` constructor creates an object wrapper for a boolean value. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean) #[wasm_bindgen(constructor)] #[deprecated(note = "recommended to use `Boolean::from` instead")] pub fn new(value: &JsValue) -> Boolean; /// The `valueOf()` method returns the primitive value of a `Boolean` object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/valueOf) #[wasm_bindgen(method, js_name = valueOf)] pub fn value_of(this: &Boolean) -> bool; } impl From for Boolean { #[inline] fn from(b: bool) -> Boolean { Boolean::unchecked_from_js(JsValue::from(b)) } } impl From for bool { #[inline] fn from(b: Boolean) -> bool { b.value_of() } } impl PartialEq for Boolean { #[inline] fn eq(&self, other: &bool) -> bool { self.value_of() == *other } } impl fmt::Debug for Boolean { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { self.value_of().fmt(f) } } // DataView #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type DataView; /// The `DataView` view provides a low-level interface for reading and /// writing multiple number types in an `ArrayBuffer` irrespective of the /// platform's endianness. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView) #[wasm_bindgen(constructor)] pub fn new(buffer: &ArrayBuffer, byteOffset: usize, byteLength: usize) -> DataView; /// The ArrayBuffer referenced by this view. Fixed at construction time and thus read only. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/buffer) #[wasm_bindgen(method, getter, structural)] pub fn buffer(this: &DataView) -> ArrayBuffer; /// The length (in bytes) of this view from the start of its ArrayBuffer. /// Fixed at construction time and thus read only. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/byteLength) #[wasm_bindgen(method, getter, structural, js_name = byteLength)] pub fn byte_length(this: &DataView) -> usize; /// The offset (in bytes) of this view from the start of its ArrayBuffer. /// Fixed at construction time and thus read only. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/byteOffset) #[wasm_bindgen(method, getter, structural, js_name = byteOffset)] pub fn byte_offset(this: &DataView) -> usize; /// The `getInt8()` method gets a signed 8-bit integer (byte) at the /// specified byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getInt8) #[wasm_bindgen(method, js_name = getInt8)] pub fn get_int8(this: &DataView, byte_offset: usize) -> i8; /// The `getUint8()` method gets a unsigned 8-bit integer (byte) at the specified /// byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint8) #[wasm_bindgen(method, js_name = getUint8)] pub fn get_uint8(this: &DataView, byte_offset: usize) -> u8; /// The `getInt16()` method gets a signed 16-bit integer (short) at the specified /// byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getInt16) #[wasm_bindgen(method, js_name = getInt16)] pub fn get_int16(this: &DataView, byte_offset: usize) -> i16; /// The `getInt16()` method gets a signed 16-bit integer (short) at the specified /// byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getInt16) #[wasm_bindgen(method, js_name = getInt16)] pub fn get_int16_endian(this: &DataView, byte_offset: usize, little_endian: bool) -> i16; /// The `getUint16()` method gets an unsigned 16-bit integer (unsigned short) at the specified /// byte offset from the start of the view. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint16) #[wasm_bindgen(method, js_name = getUint16)] pub fn get_uint16(this: &DataView, byte_offset: usize) -> u16; /// The `getUint16()` method gets an unsigned 16-bit integer (unsigned short) at the specified /// byte offset from the start of the view. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint16) #[wasm_bindgen(method, js_name = getUint16)] pub fn get_uint16_endian(this: &DataView, byte_offset: usize, little_endian: bool) -> u16; /// The `getInt32()` method gets a signed 32-bit integer (long) at the specified /// byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getInt32) #[wasm_bindgen(method, js_name = getInt32)] pub fn get_int32(this: &DataView, byte_offset: usize) -> i32; /// The `getInt32()` method gets a signed 32-bit integer (long) at the specified /// byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getInt32) #[wasm_bindgen(method, js_name = getInt32)] pub fn get_int32_endian(this: &DataView, byte_offset: usize, little_endian: bool) -> i32; /// The `getUint32()` method gets an unsigned 32-bit integer (unsigned long) at the specified /// byte offset from the start of the view. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint32) #[wasm_bindgen(method, js_name = getUint32)] pub fn get_uint32(this: &DataView, byte_offset: usize) -> u32; /// The `getUint32()` method gets an unsigned 32-bit integer (unsigned long) at the specified /// byte offset from the start of the view. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint32) #[wasm_bindgen(method, js_name = getUint32)] pub fn get_uint32_endian(this: &DataView, byte_offset: usize, little_endian: bool) -> u32; /// The `getFloat32()` method gets a signed 32-bit float (float) at the specified /// byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getFloat32) #[wasm_bindgen(method, js_name = getFloat32)] pub fn get_float32(this: &DataView, byte_offset: usize) -> f32; /// The `getFloat32()` method gets a signed 32-bit float (float) at the specified /// byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getFloat32) #[wasm_bindgen(method, js_name = getFloat32)] pub fn get_float32_endian(this: &DataView, byte_offset: usize, little_endian: bool) -> f32; /// The `getFloat64()` method gets a signed 64-bit float (double) at the specified /// byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getFloat64) #[wasm_bindgen(method, js_name = getFloat64)] pub fn get_float64(this: &DataView, byte_offset: usize) -> f64; /// The `getFloat64()` method gets a signed 64-bit float (double) at the specified /// byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getFloat64) #[wasm_bindgen(method, js_name = getFloat64)] pub fn get_float64_endian(this: &DataView, byte_offset: usize, little_endian: bool) -> f64; /// The `setInt8()` method stores a signed 8-bit integer (byte) value at the /// specified byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setInt8) #[wasm_bindgen(method, js_name = setInt8)] pub fn set_int8(this: &DataView, byte_offset: usize, value: i8); /// The `setUint8()` method stores an unsigned 8-bit integer (byte) value at the /// specified byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setUint8) #[wasm_bindgen(method, js_name = setUint8)] pub fn set_uint8(this: &DataView, byte_offset: usize, value: u8); /// The `setInt16()` method stores a signed 16-bit integer (short) value at the /// specified byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setInt16) #[wasm_bindgen(method, js_name = setInt16)] pub fn set_int16(this: &DataView, byte_offset: usize, value: i16); /// The `setInt16()` method stores a signed 16-bit integer (short) value at the /// specified byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setInt16) #[wasm_bindgen(method, js_name = setInt16)] pub fn set_int16_endian(this: &DataView, byte_offset: usize, value: i16, little_endian: bool); /// The `setUint16()` method stores an unsigned 16-bit integer (unsigned short) value at the /// specified byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setUint16) #[wasm_bindgen(method, js_name = setUint16)] pub fn set_uint16(this: &DataView, byte_offset: usize, value: u16); /// The `setUint16()` method stores an unsigned 16-bit integer (unsigned short) value at the /// specified byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setUint16) #[wasm_bindgen(method, js_name = setUint16)] pub fn set_uint16_endian(this: &DataView, byte_offset: usize, value: u16, little_endian: bool); /// The `setInt32()` method stores a signed 32-bit integer (long) value at the /// specified byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setInt32) #[wasm_bindgen(method, js_name = setInt32)] pub fn set_int32(this: &DataView, byte_offset: usize, value: i32); /// The `setInt32()` method stores a signed 32-bit integer (long) value at the /// specified byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setInt32) #[wasm_bindgen(method, js_name = setInt32)] pub fn set_int32_endian(this: &DataView, byte_offset: usize, value: i32, little_endian: bool); /// The `setUint32()` method stores an unsigned 32-bit integer (unsigned long) value at the /// specified byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setUint32) #[wasm_bindgen(method, js_name = setUint32)] pub fn set_uint32(this: &DataView, byte_offset: usize, value: u32); /// The `setUint32()` method stores an unsigned 32-bit integer (unsigned long) value at the /// specified byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setUint32) #[wasm_bindgen(method, js_name = setUint32)] pub fn set_uint32_endian(this: &DataView, byte_offset: usize, value: u32, little_endian: bool); /// The `setFloat32()` method stores a signed 32-bit float (float) value at the /// specified byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setFloat32) #[wasm_bindgen(method, js_name = setFloat32)] pub fn set_float32(this: &DataView, byte_offset: usize, value: f32); /// The `setFloat32()` method stores a signed 32-bit float (float) value at the /// specified byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setFloat32) #[wasm_bindgen(method, js_name = setFloat32)] pub fn set_float32_endian(this: &DataView, byte_offset: usize, value: f32, little_endian: bool); /// The `setFloat64()` method stores a signed 64-bit float (double) value at the /// specified byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setFloat64) #[wasm_bindgen(method, js_name = setFloat64)] pub fn set_float64(this: &DataView, byte_offset: usize, value: f64); /// The `setFloat64()` method stores a signed 64-bit float (double) value at the /// specified byte offset from the start of the DataView. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setFloat64) #[wasm_bindgen(method, js_name = setFloat64)] pub fn set_float64_endian(this: &DataView, byte_offset: usize, value: f64, little_endian: bool); } // Error #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type Error; /// The Error constructor creates an error object. /// Instances of Error objects are thrown when runtime errors occur. /// The Error object can also be used as a base object for user-defined exceptions. /// See below for standard built-in error types. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) #[wasm_bindgen(constructor)] pub fn new(message: &str) -> Error; /// The message property is a human-readable description of the error. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message) #[wasm_bindgen(method, getter, structural)] pub fn message(this: &Error) -> JsString; #[wasm_bindgen(method, setter, structural)] pub fn set_message(this: &Error, message: &str); /// The name property represents a name for the type of error. The initial value is "Error". /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name) #[wasm_bindgen(method, getter, structural)] pub fn name(this: &Error) -> JsString; #[wasm_bindgen(method, setter, structural)] pub fn set_name(this: &Error, name: &str); /// The `toString()` method returns a string representing the specified Error object /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/toString) #[wasm_bindgen(method, js_name = toString)] pub fn to_string(this: &Error) -> JsString; } // EvalError #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object, extends = Error)] #[derive(Clone, Debug, PartialEq, Eq)] pub type EvalError; /// The EvalError object indicates an error regarding the global eval() function. This /// exception is not thrown by JavaScript anymore, however the EvalError object remains for /// compatibility. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/EvalError) #[wasm_bindgen(constructor)] pub fn new(message: &str) -> EvalError; } // Function #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object, is_type_of = JsValue::is_function)] #[derive(Clone, Debug, PartialEq, Eq)] pub type Function; /// The `Function` constructor creates a new `Function` object. Calling the /// constructor directly can create functions dynamically, but suffers from /// security and similar (but far less significant) performance issues /// similar to `eval`. However, unlike `eval`, the `Function` constructor /// allows executing code in the global scope, prompting better programming /// habits and allowing for more efficient code minification. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function) #[wasm_bindgen(constructor)] pub fn new_with_args(args: &str, body: &str) -> Function; /// The `Function` constructor creates a new `Function` object. Calling the /// constructor directly can create functions dynamically, but suffers from /// security and similar (but far less significant) performance issues /// similar to `eval`. However, unlike `eval`, the `Function` constructor /// allows executing code in the global scope, prompting better programming /// habits and allowing for more efficient code minification. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function) #[wasm_bindgen(constructor)] pub fn new_no_args(body: &str) -> Function; /// The `apply()` method calls a function with a given this value, and arguments provided as an array /// (or an array-like object). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply) #[wasm_bindgen(method, catch)] pub fn apply(this: &Function, context: &JsValue, args: &Array) -> Result; /// The `call()` method calls a function with a given this value and /// arguments provided individually. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call) #[wasm_bindgen(method, catch, js_name = call)] pub fn call0(this: &Function, context: &JsValue) -> Result; /// The `call()` method calls a function with a given this value and /// arguments provided individually. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call) #[wasm_bindgen(method, catch, js_name = call)] pub fn call1(this: &Function, context: &JsValue, arg1: &JsValue) -> Result; /// The `call()` method calls a function with a given this value and /// arguments provided individually. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call) #[wasm_bindgen(method, catch, js_name = call)] pub fn call2( this: &Function, context: &JsValue, arg1: &JsValue, arg2: &JsValue, ) -> Result; /// The `call()` method calls a function with a given this value and /// arguments provided individually. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call) #[wasm_bindgen(method, catch, js_name = call)] pub fn call3( this: &Function, context: &JsValue, arg1: &JsValue, arg2: &JsValue, arg3: &JsValue, ) -> Result; /// The `bind()` method creates a new function that, when called, has its this keyword set to the provided value, /// with a given sequence of arguments preceding any provided when the new function is called. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) #[wasm_bindgen(method, js_name = bind)] pub fn bind(this: &Function, context: &JsValue) -> Function; /// The `bind()` method creates a new function that, when called, has its this keyword set to the provided value, /// with a given sequence of arguments preceding any provided when the new function is called. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) #[wasm_bindgen(method, js_name = bind)] pub fn bind0(this: &Function, context: &JsValue) -> Function; /// The `bind()` method creates a new function that, when called, has its this keyword set to the provided value, /// with a given sequence of arguments preceding any provided when the new function is called. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) #[wasm_bindgen(method, js_name = bind)] pub fn bind1(this: &Function, context: &JsValue, arg1: &JsValue) -> Function; /// The `bind()` method creates a new function that, when called, has its this keyword set to the provided value, /// with a given sequence of arguments preceding any provided when the new function is called. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) #[wasm_bindgen(method, js_name = bind)] pub fn bind2(this: &Function, context: &JsValue, arg1: &JsValue, arg2: &JsValue) -> Function; /// The `bind()` method creates a new function that, when called, has its this keyword set to the provided value, /// with a given sequence of arguments preceding any provided when the new function is called. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) #[wasm_bindgen(method, js_name = bind)] pub fn bind3( this: &Function, context: &JsValue, arg1: &JsValue, arg2: &JsValue, arg3: &JsValue, ) -> Function; /// The length property indicates the number of arguments expected by the function. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/length) #[wasm_bindgen(method, getter, structural)] pub fn length(this: &Function) -> u32; /// A Function object's read-only name property indicates the function's /// name as specified when it was created or "anonymous" for functions /// created anonymously. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name) #[wasm_bindgen(method, getter, structural)] pub fn name(this: &Function) -> JsString; /// The `toString()` method returns a string representing the source code of the function. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/toString) #[wasm_bindgen(method, js_name = toString)] pub fn to_string(this: &Function) -> JsString; } impl Function { /// Returns the `Function` value of this JS value if it's an instance of a /// function. /// /// If this JS value is not an instance of a function then this returns /// `None`. #[deprecated(note = "recommended to use dyn_ref instead which is now equivalent")] pub fn try_from(val: &JsValue) -> Option<&Function> { val.dyn_ref() } } // Generator #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type Generator; /// The `next()` method returns an object with two properties done and value. /// You can also provide a parameter to the next method to send a value to the generator. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/next) #[wasm_bindgen(method, structural, catch)] pub fn next(this: &Generator, value: &JsValue) -> Result; /// The `return()` method returns the given value and finishes the generator. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/return) #[wasm_bindgen(method, structural, js_name = return)] pub fn return_(this: &Generator, value: &JsValue) -> JsValue; /// The `throw()` method resumes the execution of a generator by throwing an error into it /// and returns an object with two properties done and value. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/throw) #[wasm_bindgen(method, structural, catch)] pub fn throw(this: &Generator, error: &Error) -> Result; } // Map #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type Map; /// The `clear()` method removes all elements from a Map object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/clear) #[wasm_bindgen(method)] pub fn clear(this: &Map); /// The `delete()` method removes the specified element from a Map object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/delete) #[wasm_bindgen(method)] pub fn delete(this: &Map, key: &JsValue) -> bool; /// The `forEach()` method executes a provided function once per each /// key/value pair in the Map object, in insertion order. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/forEach) #[wasm_bindgen(method, js_name = forEach)] pub fn for_each(this: &Map, callback: &mut dyn FnMut(JsValue, JsValue)); /// The `get()` method returns a specified element from a Map object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/get) #[wasm_bindgen(method)] pub fn get(this: &Map, key: &JsValue) -> JsValue; /// The `has()` method returns a boolean indicating whether an element with /// the specified key exists or not. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/has) #[wasm_bindgen(method)] pub fn has(this: &Map, key: &JsValue) -> bool; /// The Map object holds key-value pairs. Any value (both objects and /// primitive values) maybe used as either a key or a value. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) #[wasm_bindgen(constructor)] pub fn new() -> Map; /// The `set()` method adds or updates an element with a specified key /// and value to a Map object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/set) #[wasm_bindgen(method)] pub fn set(this: &Map, key: &JsValue, value: &JsValue) -> Map; /// The value of size is an integer representing how many entries /// the Map object has. A set accessor function for size is undefined; /// you can not change this property. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/size) #[wasm_bindgen(method, getter, structural)] pub fn size(this: &Map) -> u32; } // Map Iterator #[wasm_bindgen] extern "C" { /// The `entries()` method returns a new Iterator object that contains /// the [key, value] pairs for each element in the Map object in /// insertion order. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/entries) #[wasm_bindgen(method)] pub fn entries(this: &Map) -> Iterator; /// The `keys()` method returns a new Iterator object that contains the /// keys for each element in the Map object in insertion order. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/keys) #[wasm_bindgen(method)] pub fn keys(this: &Map) -> Iterator; /// The `values()` method returns a new Iterator object that contains the /// values for each element in the Map object in insertion order. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/values) #[wasm_bindgen(method)] pub fn values(this: &Map) -> Iterator; } // Iterator #[wasm_bindgen] extern "C" { /// Any object that conforms to the JS iterator protocol. For example, /// something returned by `myArray[Symbol.iterator]()`. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) #[derive(Clone, Debug)] #[wasm_bindgen(is_type_of = Iterator::looks_like_iterator)] pub type Iterator; /// The `next()` method always has to return an object with appropriate /// properties including done and value. If a non-object value gets returned /// (such as false or undefined), a TypeError ("iterator.next() returned a /// non-object value") will be thrown. #[wasm_bindgen(catch, method, structural)] pub fn next(this: &Iterator) -> Result; } impl Iterator { fn looks_like_iterator(it: &JsValue) -> bool { #[wasm_bindgen] extern "C" { type MaybeIterator; #[wasm_bindgen(method, getter)] fn next(this: &MaybeIterator) -> JsValue; } if !it.is_object() { return false; } let it = it.unchecked_ref::(); it.next().is_function() } } // Async Iterator #[wasm_bindgen] extern "C" { /// Any object that conforms to the JS async iterator protocol. For example, /// something returned by `myObject[Symbol.asyncIterator]()`. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of) #[derive(Clone, Debug)] #[wasm_bindgen(is_type_of = Iterator::looks_like_iterator)] pub type AsyncIterator; /// The `next()` method always has to return a Promise which resolves to an object /// with appropriate properties including done and value. If a non-object value /// gets returned (such as false or undefined), a TypeError ("iterator.next() /// returned a non-object value") will be thrown. #[wasm_bindgen(catch, method, structural)] pub fn next(this: &AsyncIterator) -> Result; } /// An iterator over the JS `Symbol.iterator` iteration protocol. /// /// Use the `IntoIterator for &js_sys::Iterator` implementation to create this. pub struct Iter<'a> { js: &'a Iterator, state: IterState, } /// An iterator over the JS `Symbol.iterator` iteration protocol. /// /// Use the `IntoIterator for js_sys::Iterator` implementation to create this. pub struct IntoIter { js: Iterator, state: IterState, } struct IterState { done: bool, } impl<'a> IntoIterator for &'a Iterator { type Item = Result; type IntoIter = Iter<'a>; fn into_iter(self) -> Iter<'a> { Iter { js: self, state: IterState::new(), } } } impl<'a> std::iter::Iterator for Iter<'a> { type Item = Result; fn next(&mut self) -> Option { self.state.next(self.js) } } impl IntoIterator for Iterator { type Item = Result; type IntoIter = IntoIter; fn into_iter(self) -> IntoIter { IntoIter { js: self, state: IterState::new(), } } } impl std::iter::Iterator for IntoIter { type Item = Result; fn next(&mut self) -> Option { self.state.next(&self.js) } } impl IterState { fn new() -> IterState { IterState { done: false } } fn next(&mut self, js: &Iterator) -> Option> { if self.done { return None; } let next = match js.next() { Ok(val) => val, Err(e) => { self.done = true; return Some(Err(e)); } }; if next.done() { self.done = true; None } else { Some(Ok(next.value())) } } } /// Create an iterator over `val` using the JS iteration protocol and /// `Symbol.iterator`. pub fn try_iter(val: &JsValue) -> Result, JsValue> { let iter_sym = Symbol::iterator(); let iter_fn = Reflect::get(val, iter_sym.as_ref())?; let iter_fn: Function = match iter_fn.dyn_into() { Ok(iter_fn) => iter_fn, Err(_) => return Ok(None), }; let it: Iterator = match iter_fn.call0(val)?.dyn_into() { Ok(it) => it, Err(_) => return Ok(None), }; Ok(Some(it.into_iter())) } // IteratorNext #[wasm_bindgen] extern "C" { /// The result of calling `next()` on a JS iterator. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) #[wasm_bindgen(extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type IteratorNext; /// Has the value `true` if the iterator is past the end of the iterated /// sequence. In this case value optionally specifies the return value of /// the iterator. /// /// Has the value `false` if the iterator was able to produce the next value /// in the sequence. This is equivalent of not specifying the done property /// altogether. #[wasm_bindgen(method, getter, structural)] pub fn done(this: &IteratorNext) -> bool; /// Any JavaScript value returned by the iterator. Can be omitted when done /// is true. #[wasm_bindgen(method, getter, structural)] pub fn value(this: &IteratorNext) -> JsValue; } #[allow(non_snake_case)] pub mod Math { use super::*; // Math #[wasm_bindgen] extern "C" { /// The `Math.abs()` function returns the absolute value of a number, that is /// Math.abs(x) = |x| /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/abs) #[wasm_bindgen(js_namespace = Math)] pub fn abs(x: f64) -> f64; /// The `Math.acos()` function returns the arccosine (in radians) of a /// number, that is ∀x∊[-1;1] /// Math.acos(x) = arccos(x) = the unique y∊[0;π] such that cos(y)=x /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acos) #[wasm_bindgen(js_namespace = Math)] pub fn acos(x: f64) -> f64; /// The `Math.acosh()` function returns the hyperbolic arc-cosine of a /// number, that is ∀x ≥ 1 /// Math.acosh(x) = arcosh(x) = the unique y ≥ 0 such that cosh(y) = x /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acosh) #[wasm_bindgen(js_namespace = Math)] pub fn acosh(x: f64) -> f64; /// The `Math.asin()` function returns the arcsine (in radians) of a /// number, that is ∀x ∊ [-1;1] /// Math.asin(x) = arcsin(x) = the unique y∊[-π2;π2] such that sin(y) = x /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asin) #[wasm_bindgen(js_namespace = Math)] pub fn asin(x: f64) -> f64; /// The `Math.asinh()` function returns the hyperbolic arcsine of a /// number, that is Math.asinh(x) = arsinh(x) = the unique y such that sinh(y) = x /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asinh) #[wasm_bindgen(js_namespace = Math)] pub fn asinh(x: f64) -> f64; /// The `Math.atan()` function returns the arctangent (in radians) of a /// number, that is Math.atan(x) = arctan(x) = the unique y ∊ [-π2;π2]such that /// tan(y) = x #[wasm_bindgen(js_namespace = Math)] pub fn atan(x: f64) -> f64; /// The `Math.atan2()` function returns the arctangent of the quotient of /// its arguments. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan2) #[wasm_bindgen(js_namespace = Math)] pub fn atan2(y: f64, x: f64) -> f64; /// The `Math.atanh()` function returns the hyperbolic arctangent of a number, /// that is ∀x ∊ (-1,1), Math.atanh(x) = arctanh(x) = the unique y such that /// tanh(y) = x /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atanh) #[wasm_bindgen(js_namespace = Math)] pub fn atanh(x: f64) -> f64; /// The `Math.cbrt() `function returns the cube root of a number, that is /// Math.cbrt(x) = ∛x = the unique y such that y^3 = x /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cbrt) #[wasm_bindgen(js_namespace = Math)] pub fn cbrt(x: f64) -> f64; /// The `Math.ceil()` function returns the smallest integer greater than /// or equal to a given number. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil) #[wasm_bindgen(js_namespace = Math)] pub fn ceil(x: f64) -> f64; /// The `Math.clz32()` function returns the number of leading zero bits in /// the 32-bit binary representation of a number. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32) #[wasm_bindgen(js_namespace = Math)] pub fn clz32(x: i32) -> u32; /// The `Math.cos()` static function returns the cosine of the specified angle, /// which must be specified in radians. This value is length(adjacent)/length(hypotenuse). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cos) #[wasm_bindgen(js_namespace = Math)] pub fn cos(x: f64) -> f64; /// The `Math.cosh()` function returns the hyperbolic cosine of a number, /// that can be expressed using the constant e. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cosh) #[wasm_bindgen(js_namespace = Math)] pub fn cosh(x: f64) -> f64; /// The `Math.exp()` function returns e^x, where x is the argument, and e is Euler's number /// (also known as Napier's constant), the base of the natural logarithms. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/exp) #[wasm_bindgen(js_namespace = Math)] pub fn exp(x: f64) -> f64; /// The `Math.expm1()` function returns e^x - 1, where x is the argument, and e the base of the /// natural logarithms. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/expm1) #[wasm_bindgen(js_namespace = Math)] pub fn expm1(x: f64) -> f64; /// The `Math.floor()` function returns the largest integer less than or /// equal to a given number. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor) #[wasm_bindgen(js_namespace = Math)] pub fn floor(x: f64) -> f64; /// The `Math.fround()` function returns the nearest 32-bit single precision float representation /// of a Number. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround) #[wasm_bindgen(js_namespace = Math)] pub fn fround(x: f64) -> f32; /// The `Math.hypot()` function returns the square root of the sum of squares of its arguments. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/hypot) #[wasm_bindgen(js_namespace = Math)] pub fn hypot(x: f64, y: f64) -> f64; /// The `Math.imul()` function returns the result of the C-like 32-bit multiplication of the /// two parameters. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul) #[wasm_bindgen(js_namespace = Math)] pub fn imul(x: i32, y: i32) -> i32; /// The `Math.log()` function returns the natural logarithm (base e) of a number. /// The JavaScript `Math.log()` function is equivalent to ln(x) in mathematics. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log) #[wasm_bindgen(js_namespace = Math)] pub fn log(x: f64) -> f64; /// The `Math.log10()` function returns the base 10 logarithm of a number. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10) #[wasm_bindgen(js_namespace = Math)] pub fn log10(x: f64) -> f64; /// The `Math.log1p()` function returns the natural logarithm (base e) of 1 + a number. /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log1p) #[wasm_bindgen(js_namespace = Math)] pub fn log1p(x: f64) -> f64; /// The `Math.log2()` function returns the base 2 logarithm of a number. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2) #[wasm_bindgen(js_namespace = Math)] pub fn log2(x: f64) -> f64; /// The `Math.max()` function returns the largest of two numbers. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max) #[wasm_bindgen(js_namespace = Math)] pub fn max(x: f64, y: f64) -> f64; /// The static function `Math.min()` returns the lowest-valued number passed into it. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min) #[wasm_bindgen(js_namespace = Math)] pub fn min(x: f64, y: f64) -> f64; /// The `Math.pow()` function returns the base to the exponent power, that is, base^exponent. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/pow) #[wasm_bindgen(js_namespace = Math)] pub fn pow(base: f64, exponent: f64) -> f64; /// The `Math.random()` function returns a floating-point, pseudo-random number /// in the range 0–1 (inclusive of 0, but not 1) with approximately uniform distribution /// over that range — which you can then scale to your desired range. /// The implementation selects the initial seed to the random number generation algorithm; /// it cannot be chosen or reset by the user. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random) #[wasm_bindgen(js_namespace = Math)] pub fn random() -> f64; /// The `Math.round()` function returns the value of a number rounded to the nearest integer. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round) #[wasm_bindgen(js_namespace = Math)] pub fn round(x: f64) -> f64; /// The `Math.sign()` function returns the sign of a number, indicating whether the number is /// positive, negative or zero. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign) #[wasm_bindgen(js_namespace = Math)] pub fn sign(x: f64) -> f64; /// The `Math.sin()` function returns the sine of a number. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sin) #[wasm_bindgen(js_namespace = Math)] pub fn sin(x: f64) -> f64; /// The `Math.sinh()` function returns the hyperbolic sine of a number, that can be expressed /// using the constant e: Math.sinh(x) = (e^x - e^-x)/2 /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sinh) #[wasm_bindgen(js_namespace = Math)] pub fn sinh(x: f64) -> f64; /// The `Math.sqrt()` function returns the square root of a number, that is /// ∀x ≥ 0, Math.sqrt(x) = √x = the unique y ≥ 0 such that y^2 = x /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sqrt) #[wasm_bindgen(js_namespace = Math)] pub fn sqrt(x: f64) -> f64; /// The `Math.tan()` function returns the tangent of a number. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/tan) #[wasm_bindgen(js_namespace = Math)] pub fn tan(x: f64) -> f64; /// The `Math.tanh()` function returns the hyperbolic tangent of a number, that is /// tanh x = sinh x / cosh x = (e^x - e^-x)/(e^x + e^-x) = (e^2x - 1)/(e^2x + 1) /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/tanh) #[wasm_bindgen(js_namespace = Math)] pub fn tanh(x: f64) -> f64; /// The `Math.trunc()` function returns the integer part of a number by removing any fractional /// digits. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc) #[wasm_bindgen(js_namespace = Math)] pub fn trunc(x: f64) -> f64; } } // Number. #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object, is_type_of = |v| v.as_f64().is_some())] #[derive(Clone)] pub type Number; /// The `Number.isFinite()` method determines whether the passed value is a finite number. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite) #[wasm_bindgen(static_method_of = Number, js_name = isFinite)] pub fn is_finite(value: &JsValue) -> bool; /// The `Number.isInteger()` method determines whether the passed value is an integer. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger) #[wasm_bindgen(static_method_of = Number, js_name = isInteger)] pub fn is_integer(value: &JsValue) -> bool; /// The `Number.isNaN()` method determines whether the passed value is `NaN` and its type is Number. /// It is a more robust version of the original, global isNaN(). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN) #[wasm_bindgen(static_method_of = Number, js_name = isNaN)] pub fn is_nan(value: &JsValue) -> bool; /// The `Number.isSafeInteger()` method determines whether the provided value is a number /// that is a safe integer. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger) #[wasm_bindgen(static_method_of = Number, js_name = isSafeInteger)] pub fn is_safe_integer(value: &JsValue) -> bool; /// The `Number` JavaScript object is a wrapper object allowing /// you to work with numerical values. A `Number` object is /// created using the `Number()` constructor. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number) #[wasm_bindgen(constructor)] #[deprecated(note = "recommended to use `Number::from` instead")] pub fn new(value: &JsValue) -> Number; /// The `Number.parseInt()` method parses a string argument and returns an /// integer of the specified radix or base. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseInt) #[wasm_bindgen(static_method_of = Number, js_name = parseInt)] pub fn parse_int(text: &str, radix: u8) -> f64; /// The `Number.parseFloat()` method parses a string argument and returns a /// floating point number. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseFloat) #[wasm_bindgen(static_method_of = Number, js_name = parseFloat)] pub fn parse_float(text: &str) -> f64; /// The `toLocaleString()` method returns a string with a language sensitive /// representation of this number. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString) #[wasm_bindgen(method, js_name = toLocaleString)] pub fn to_locale_string(this: &Number, locale: &str) -> JsString; /// The `toPrecision()` method returns a string representing the Number /// object to the specified precision. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toPrecision) #[wasm_bindgen(catch, method, js_name = toPrecision)] pub fn to_precision(this: &Number, precision: u8) -> Result; /// The `toFixed()` method returns a string representing the Number /// object using fixed-point notation. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed) #[wasm_bindgen(catch, method, js_name = toFixed)] pub fn to_fixed(this: &Number, digits: u8) -> Result; /// The `toExponential()` method returns a string representing the Number /// object in exponential notation. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toExponential) #[wasm_bindgen(catch, method, js_name = toExponential)] pub fn to_exponential(this: &Number, fraction_digits: u8) -> Result; /// The `toString()` method returns a string representing the /// specified Number object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString) #[wasm_bindgen(catch, method, js_name = toString)] pub fn to_string(this: &Number, radix: u8) -> Result; /// The `valueOf()` method returns the wrapped primitive value of /// a Number object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/valueOf) #[wasm_bindgen(method, js_name = valueOf)] pub fn value_of(this: &Number) -> f64; } macro_rules! number_from { ($($x:ident)*) => ($( impl From<$x> for Number { #[inline] fn from(x: $x) -> Number { Number::unchecked_from_js(JsValue::from(x)) } } impl PartialEq<$x> for Number { #[inline] fn eq(&self, other: &$x) -> bool { self.value_of() == f64::from(*other) } } )*) } number_from!(i8 u8 i16 u16 i32 u32 f32 f64); impl From for f64 { #[inline] fn from(n: Number) -> f64 { n.value_of() } } impl fmt::Debug for Number { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { self.value_of().fmt(f) } } // Date. #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type Date; /// The `getDate()` method returns the day of the month for the /// specified date according to local time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDate) #[wasm_bindgen(method, js_name = getDate)] pub fn get_date(this: &Date) -> u32; /// The `getDay()` method returns the day of the week for the specified date according to local time, /// where 0 represents Sunday. For the day of the month see getDate(). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay) #[wasm_bindgen(method, js_name = getDay)] pub fn get_day(this: &Date) -> u32; /// The `getFullYear()` method returns the year of the specified date according to local time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getFullYear) #[wasm_bindgen(method, js_name = getFullYear)] pub fn get_full_year(this: &Date) -> u32; /// The `getHours()` method returns the hour for the specified date, according to local time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getHours) #[wasm_bindgen(method, js_name = getHours)] pub fn get_hours(this: &Date) -> u32; /// The `getMilliseconds()` method returns the milliseconds in the specified date according to local time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds) #[wasm_bindgen(method, js_name = getMilliseconds)] pub fn get_milliseconds(this: &Date) -> u32; /// The `getMinutes()` method returns the minutes in the specified date according to local time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMinutes) #[wasm_bindgen(method, js_name = getMinutes)] pub fn get_minutes(this: &Date) -> u32; /// The `getMonth()` method returns the month in the specified date according to local time, /// as a zero-based value (where zero indicates the first month of the year). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMonth) #[wasm_bindgen(method, js_name = getMonth)] pub fn get_month(this: &Date) -> u32; /// The `getSeconds()` method returns the seconds in the specified date according to local time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getSeconds) #[wasm_bindgen(method, js_name = getSeconds)] pub fn get_seconds(this: &Date) -> u32; /// The `getTime()` method returns the numeric value corresponding to the time for the specified date /// according to universal time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime) #[wasm_bindgen(method, js_name = getTime)] pub fn get_time(this: &Date) -> f64; /// The `getTimezoneOffset()` method returns the time zone difference, in minutes, /// from current locale (host system settings) to UTC. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset) #[wasm_bindgen(method, js_name = getTimezoneOffset)] pub fn get_timezone_offset(this: &Date) -> f64; /// The `getUTCDate()` method returns the day (date) of the month in the specified date /// according to universal time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDate) #[wasm_bindgen(method, js_name = getUTCDate)] pub fn get_utc_date(this: &Date) -> u32; /// The `getUTCDay()` method returns the day of the week in the specified date according to universal time, /// where 0 represents Sunday. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDay) #[wasm_bindgen(method, js_name = getUTCDay)] pub fn get_utc_day(this: &Date) -> u32; /// The `getUTCFullYear()` method returns the year in the specified date according to universal time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear) #[wasm_bindgen(method, js_name = getUTCFullYear)] pub fn get_utc_full_year(this: &Date) -> u32; /// The `getUTCHours()` method returns the hours in the specified date according to universal time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCHours) #[wasm_bindgen(method, js_name = getUTCHours)] pub fn get_utc_hours(this: &Date) -> u32; /// The `getUTCMilliseconds()` method returns the milliseconds in the specified date /// according to universal time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds) #[wasm_bindgen(method, js_name = getUTCMilliseconds)] pub fn get_utc_milliseconds(this: &Date) -> u32; /// The `getUTCMinutes()` method returns the minutes in the specified date according to universal time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes) #[wasm_bindgen(method, js_name = getUTCMinutes)] pub fn get_utc_minutes(this: &Date) -> u32; /// The `getUTCMonth()` returns the month of the specified date according to universal time, /// as a zero-based value (where zero indicates the first month of the year). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth) #[wasm_bindgen(method, js_name = getUTCMonth)] pub fn get_utc_month(this: &Date) -> u32; /// The `getUTCSeconds()` method returns the seconds in the specified date according to universal time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds) #[wasm_bindgen(method, js_name = getUTCSeconds)] pub fn get_utc_seconds(this: &Date) -> u32; /// Creates a JavaScript `Date` instance that represents /// a single moment in time. `Date` objects are based on a time value that is /// the number of milliseconds since 1 January 1970 UTC. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) #[wasm_bindgen(constructor)] pub fn new(init: &JsValue) -> Date; /// Creates a JavaScript `Date` instance that represents the current moment in /// time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) #[wasm_bindgen(constructor)] pub fn new_0() -> Date; /// Creates a JavaScript `Date` instance that represents /// a single moment in time. `Date` objects are based on a time value that is /// the number of milliseconds since 1 January 1970 UTC. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) #[wasm_bindgen(constructor)] pub fn new_with_year_month(year: u32, month: i32) -> Date; /// Creates a JavaScript `Date` instance that represents /// a single moment in time. `Date` objects are based on a time value that is /// the number of milliseconds since 1 January 1970 UTC. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) #[wasm_bindgen(constructor)] pub fn new_with_year_month_day(year: u32, month: i32, day: i32) -> Date; /// Creates a JavaScript `Date` instance that represents /// a single moment in time. `Date` objects are based on a time value that is /// the number of milliseconds since 1 January 1970 UTC. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) #[wasm_bindgen(constructor)] pub fn new_with_year_month_day_hr(year: u32, month: i32, day: i32, hr: i32) -> Date; /// Creates a JavaScript `Date` instance that represents /// a single moment in time. `Date` objects are based on a time value that is /// the number of milliseconds since 1 January 1970 UTC. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) #[wasm_bindgen(constructor)] pub fn new_with_year_month_day_hr_min( year: u32, month: i32, day: i32, hr: i32, min: i32, ) -> Date; /// Creates a JavaScript `Date` instance that represents /// a single moment in time. `Date` objects are based on a time value that is /// the number of milliseconds since 1 January 1970 UTC. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) #[wasm_bindgen(constructor)] pub fn new_with_year_month_day_hr_min_sec( year: u32, month: i32, day: i32, hr: i32, min: i32, sec: i32, ) -> Date; /// Creates a JavaScript `Date` instance that represents /// a single moment in time. `Date` objects are based on a time value that is /// the number of milliseconds since 1 January 1970 UTC. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) #[wasm_bindgen(constructor)] pub fn new_with_year_month_day_hr_min_sec_milli( year: u32, month: i32, day: i32, hr: i32, min: i32, sec: i32, milli: i32, ) -> Date; /// The `Date.now()` method returns the number of milliseconds /// elapsed since January 1, 1970 00:00:00 UTC. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now) #[wasm_bindgen(static_method_of = Date)] pub fn now() -> f64; /// The `Date.parse()` method parses a string representation of a date, and returns the number of milliseconds /// since January 1, 1970, 00:00:00 UTC or `NaN` if the string is unrecognized or, in some cases, /// contains illegal date values (e.g. 2015-02-31). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse) #[wasm_bindgen(static_method_of = Date)] pub fn parse(date: &str) -> f64; /// The `setDate()` method sets the day of the Date object relative to the beginning of the currently set month. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate) #[wasm_bindgen(method, js_name = setDate)] pub fn set_date(this: &Date, day: u32) -> f64; /// The `setFullYear()` method sets the full year for a specified date according to local time. /// Returns new timestamp. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear) #[wasm_bindgen(method, js_name = setFullYear)] pub fn set_full_year(this: &Date, year: u32) -> f64; /// The `setFullYear()` method sets the full year for a specified date according to local time. /// Returns new timestamp. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear) #[wasm_bindgen(method, js_name = setFullYear)] pub fn set_full_year_with_month(this: &Date, year: u32, month: i32) -> f64; /// The `setFullYear()` method sets the full year for a specified date according to local time. /// Returns new timestamp. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear) #[wasm_bindgen(method, js_name = setFullYear)] pub fn set_full_year_with_month_date(this: &Date, year: u32, month: i32, date: i32) -> f64; /// The `setHours()` method sets the hours for a specified date according to local time, /// and returns the number of milliseconds since January 1, 1970 00:00:00 UTC until the time represented /// by the updated Date instance. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setHours) #[wasm_bindgen(method, js_name = setHours)] pub fn set_hours(this: &Date, hours: u32) -> f64; /// The `setMilliseconds()` method sets the milliseconds for a specified date according to local time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds) #[wasm_bindgen(method, js_name = setMilliseconds)] pub fn set_milliseconds(this: &Date, milliseconds: u32) -> f64; /// The `setMinutes()` method sets the minutes for a specified date according to local time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMinutes) #[wasm_bindgen(method, js_name = setMinutes)] pub fn set_minutes(this: &Date, minutes: u32) -> f64; /// The `setMonth()` method sets the month for a specified date according to the currently set year. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth) #[wasm_bindgen(method, js_name = setMonth)] pub fn set_month(this: &Date, month: u32) -> f64; /// The `setSeconds()` method sets the seconds for a specified date according to local time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setSeconds) #[wasm_bindgen(method, js_name = setSeconds)] pub fn set_seconds(this: &Date, seconds: u32) -> f64; /// The `setTime()` method sets the Date object to the time represented by a number of milliseconds /// since January 1, 1970, 00:00:00 UTC. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setTime) #[wasm_bindgen(method, js_name = setTime)] pub fn set_time(this: &Date, time: f64) -> f64; /// The `setUTCDate()` method sets the day of the month for a specified date /// according to universal time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCDate) #[wasm_bindgen(method, js_name = setUTCDate)] pub fn set_utc_date(this: &Date, day: u32) -> f64; /// The `setUTCFullYear()` method sets the full year for a specified date according to universal time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear) #[wasm_bindgen(method, js_name = setUTCFullYear)] pub fn set_utc_full_year(this: &Date, year: u32) -> f64; /// The `setUTCFullYear()` method sets the full year for a specified date according to universal time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear) #[wasm_bindgen(method, js_name = setUTCFullYear)] pub fn set_utc_full_year_with_month(this: &Date, year: u32, month: i32) -> f64; /// The `setUTCFullYear()` method sets the full year for a specified date according to universal time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear) #[wasm_bindgen(method, js_name = setUTCFullYear)] pub fn set_utc_full_year_with_month_date(this: &Date, year: u32, month: i32, date: i32) -> f64; /// The `setUTCHours()` method sets the hour for a specified date according to universal time, /// and returns the number of milliseconds since January 1, 1970 00:00:00 UTC until the time /// represented by the updated Date instance. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCHours) #[wasm_bindgen(method, js_name = setUTCHours)] pub fn set_utc_hours(this: &Date, hours: u32) -> f64; /// The `setUTCMilliseconds()` method sets the milliseconds for a specified date /// according to universal time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds) #[wasm_bindgen(method, js_name = setUTCMilliseconds)] pub fn set_utc_milliseconds(this: &Date, milliseconds: u32) -> f64; /// The `setUTCMinutes()` method sets the minutes for a specified date according to universal time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes) #[wasm_bindgen(method, js_name = setUTCMinutes)] pub fn set_utc_minutes(this: &Date, minutes: u32) -> f64; /// The `setUTCMonth()` method sets the month for a specified date according to universal time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth) #[wasm_bindgen(method, js_name = setUTCMonth)] pub fn set_utc_month(this: &Date, month: u32) -> f64; /// The `setUTCSeconds()` method sets the seconds for a specified date according to universal time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds) #[wasm_bindgen(method, js_name = setUTCSeconds)] pub fn set_utc_seconds(this: &Date, seconds: u32) -> f64; /// The `toDateString()` method returns the date portion of a Date object /// in human readable form in American English. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toDateString) #[wasm_bindgen(method, js_name = toDateString)] pub fn to_date_string(this: &Date) -> JsString; /// The `toISOString()` method returns a string in simplified extended ISO format (ISO /// 8601), which is always 24 or 27 characters long (YYYY-MM-DDTHH:mm:ss.sssZ or /// ±YYYYYY-MM-DDTHH:mm:ss.sssZ, respectively). The timezone is always zero UTC offset, /// as denoted by the suffix "Z" /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) #[wasm_bindgen(method, js_name = toISOString)] pub fn to_iso_string(this: &Date) -> JsString; /// The `toJSON()` method returns a string representation of the Date object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON) #[wasm_bindgen(method, js_name = toJSON)] pub fn to_json(this: &Date) -> JsString; /// The `toLocaleDateString()` method returns a string with a language sensitive /// representation of the date portion of this date. The new locales and options /// arguments let applications specify the language whose formatting conventions /// should be used and allow to customize the behavior of the function. /// In older implementations, which ignore the locales and options arguments, /// the locale used and the form of the string /// returned are entirely implementation dependent. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString) #[wasm_bindgen(method, js_name = toLocaleDateString)] pub fn to_locale_date_string(this: &Date, locale: &str, options: &JsValue) -> JsString; /// The `toLocaleString()` method returns a string with a language sensitive /// representation of this date. The new locales and options arguments /// let applications specify the language whose formatting conventions /// should be used and customize the behavior of the function. /// In older implementations, which ignore the locales /// and options arguments, the locale used and the form of the string /// returned are entirely implementation dependent. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString) #[wasm_bindgen(method, js_name = toLocaleString)] pub fn to_locale_string(this: &Date, locale: &str, options: &JsValue) -> JsString; /// The `toLocaleTimeString()` method returns a string with a language sensitive /// representation of the time portion of this date. The new locales and options /// arguments let applications specify the language whose formatting conventions should be /// used and customize the behavior of the function. In older implementations, which ignore /// the locales and options arguments, the locale used and the form of the string /// returned are entirely implementation dependent. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString) #[wasm_bindgen(method, js_name = toLocaleTimeString)] pub fn to_locale_time_string(this: &Date, locale: &str) -> JsString; /// The `toString()` method returns a string representing /// the specified Date object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toString) #[wasm_bindgen(method, js_name = toString)] pub fn to_string(this: &Date) -> JsString; /// The `toTimeString()` method returns the time portion of a Date object in human /// readable form in American English. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toTimeString) #[wasm_bindgen(method, js_name = toTimeString)] pub fn to_time_string(this: &Date) -> JsString; /// The `toUTCString()` method converts a date to a string, /// using the UTC time zone. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString) #[wasm_bindgen(method, js_name = toUTCString)] pub fn to_utc_string(this: &Date) -> JsString; /// The `Date.UTC()` method accepts the same parameters as the /// longest form of the constructor, and returns the number of /// milliseconds in a `Date` object since January 1, 1970, /// 00:00:00, universal time. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC) #[wasm_bindgen(static_method_of = Date, js_name = UTC)] pub fn utc(year: f64, month: f64) -> f64; /// The `valueOf()` method returns the primitive value of /// a Date object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/valueOf) #[wasm_bindgen(method, js_name = valueOf)] pub fn value_of(this: &Date) -> f64; } // Object. #[wasm_bindgen] extern "C" { #[derive(Clone, Debug)] pub type Object; /// The `Object.assign()` method is used to copy the values of all enumerable /// own properties from one or more source objects to a target object. It /// will return the target object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) #[wasm_bindgen(static_method_of = Object)] pub fn assign(target: &Object, source: &Object) -> Object; /// The `Object.assign()` method is used to copy the values of all enumerable /// own properties from one or more source objects to a target object. It /// will return the target object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) #[wasm_bindgen(static_method_of = Object, js_name = assign)] pub fn assign2(target: &Object, source1: &Object, source2: &Object) -> Object; /// The `Object.assign()` method is used to copy the values of all enumerable /// own properties from one or more source objects to a target object. It /// will return the target object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) #[wasm_bindgen(static_method_of = Object, js_name = assign)] pub fn assign3(target: &Object, source1: &Object, source2: &Object, source3: &Object) -> Object; /// The constructor property returns a reference to the `Object` constructor /// function that created the instance object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor) #[wasm_bindgen(method, getter)] pub fn constructor(this: &Object) -> Function; /// The `Object.create()` method creates a new object, using an existing /// object to provide the newly created object's prototype. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create) #[wasm_bindgen(static_method_of = Object)] pub fn create(prototype: &Object) -> Object; /// The static method `Object.defineProperty()` defines a new /// property directly on an object, or modifies an existing /// property on an object, and returns the object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty) #[wasm_bindgen(static_method_of = Object, js_name = defineProperty)] pub fn define_property(obj: &Object, prop: &JsValue, descriptor: &Object) -> Object; /// The `Object.defineProperties()` method defines new or modifies /// existing properties directly on an object, returning the /// object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties) #[wasm_bindgen(static_method_of = Object, js_name = defineProperties)] pub fn define_properties(obj: &Object, props: &Object) -> Object; /// The `Object.entries()` method returns an array of a given /// object's own enumerable property [key, value] pairs, in the /// same order as that provided by a for...in loop (the difference /// being that a for-in loop enumerates properties in the /// prototype chain as well). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries) #[wasm_bindgen(static_method_of = Object)] pub fn entries(object: &Object) -> Array; /// The `Object.freeze()` method freezes an object: that is, prevents new /// properties from being added to it; prevents existing properties from /// being removed; and prevents existing properties, or their enumerability, /// configurability, or writability, from being changed, it also prevents /// the prototype from being changed. The method returns the passed object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze) #[wasm_bindgen(static_method_of = Object)] pub fn freeze(value: &Object) -> Object; /// The `Object.fromEntries()` method transforms a list of key-value pairs /// into an object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries) #[wasm_bindgen(static_method_of = Object, catch, js_name = fromEntries)] pub fn from_entries(iterable: &JsValue) -> Result; /// The `Object.getOwnPropertyDescriptor()` method returns a /// property descriptor for an own property (that is, one directly /// present on an object and not in the object's prototype chain) /// of a given object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor) #[wasm_bindgen(static_method_of = Object, js_name = getOwnPropertyDescriptor)] pub fn get_own_property_descriptor(obj: &Object, prop: &JsValue) -> JsValue; /// The `Object.getOwnPropertyDescriptors()` method returns all own /// property descriptors of a given object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors) #[wasm_bindgen(static_method_of = Object, js_name = getOwnPropertyDescriptors)] pub fn get_own_property_descriptors(obj: &Object) -> JsValue; /// The `Object.getOwnPropertyNames()` method returns an array of /// all properties (including non-enumerable properties except for /// those which use Symbol) found directly upon a given object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames) #[wasm_bindgen(static_method_of = Object, js_name = getOwnPropertyNames)] pub fn get_own_property_names(obj: &Object) -> Array; /// The `Object.getOwnPropertySymbols()` method returns an array of /// all symbol properties found directly upon a given object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols) #[wasm_bindgen(static_method_of = Object, js_name = getOwnPropertySymbols)] pub fn get_own_property_symbols(obj: &Object) -> Array; /// The `Object.getPrototypeOf()` method returns the prototype /// (i.e. the value of the internal [[Prototype]] property) of the /// specified object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf) #[wasm_bindgen(static_method_of = Object, js_name = getPrototypeOf)] pub fn get_prototype_of(obj: &JsValue) -> Object; /// The `hasOwnProperty()` method returns a boolean indicating whether the /// object has the specified property as its own property (as opposed to /// inheriting it). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty) #[wasm_bindgen(method, js_name = hasOwnProperty)] pub fn has_own_property(this: &Object, property: &JsValue) -> bool; /// The `Object.is()` method determines whether two values are the same value. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is) #[wasm_bindgen(static_method_of = Object)] pub fn is(value_1: &JsValue, value_2: &JsValue) -> bool; /// The `Object.isExtensible()` method determines if an object is extensible /// (whether it can have new properties added to it). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible) #[wasm_bindgen(static_method_of = Object, js_name = isExtensible)] pub fn is_extensible(object: &Object) -> bool; /// The `Object.isFrozen()` determines if an object is frozen. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen) #[wasm_bindgen(static_method_of = Object, js_name = isFrozen)] pub fn is_frozen(object: &Object) -> bool; /// The `Object.isSealed()` method determines if an object is sealed. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed) #[wasm_bindgen(static_method_of = Object, js_name = isSealed)] pub fn is_sealed(object: &Object) -> bool; /// The `isPrototypeOf()` method checks if an object exists in another /// object's prototype chain. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf) #[wasm_bindgen(method, js_name = isPrototypeOf)] pub fn is_prototype_of(this: &Object, value: &JsValue) -> bool; /// The `Object.keys()` method returns an array of a given object's property /// names, in the same order as we get with a normal loop. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) #[wasm_bindgen(static_method_of = Object)] pub fn keys(object: &Object) -> Array; /// The [`Object`] constructor creates an object wrapper. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) #[wasm_bindgen(constructor)] pub fn new() -> Object; /// The `Object.preventExtensions()` method prevents new properties from /// ever being added to an object (i.e. prevents future extensions to the /// object). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/preventExtensions) #[wasm_bindgen(static_method_of = Object, js_name = preventExtensions)] pub fn prevent_extensions(object: &Object); /// The `propertyIsEnumerable()` method returns a Boolean indicating /// whether the specified property is enumerable. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable) #[wasm_bindgen(method, js_name = propertyIsEnumerable)] pub fn property_is_enumerable(this: &Object, property: &JsValue) -> bool; /// The `Object.seal()` method seals an object, preventing new properties /// from being added to it and marking all existing properties as /// non-configurable. Values of present properties can still be changed as /// long as they are writable. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/seal) #[wasm_bindgen(static_method_of = Object)] pub fn seal(value: &Object) -> Object; /// The `Object.setPrototypeOf()` method sets the prototype (i.e., the /// internal `[[Prototype]]` property) of a specified object to another /// object or `null`. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf) #[wasm_bindgen(static_method_of = Object, js_name = setPrototypeOf)] pub fn set_prototype_of(object: &Object, prototype: &Object) -> Object; /// The `toLocaleString()` method returns a string representing the object. /// This method is meant to be overridden by derived objects for /// locale-specific purposes. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toLocaleString) #[wasm_bindgen(method, js_name = toLocaleString)] pub fn to_locale_string(this: &Object) -> JsString; /// The `toString()` method returns a string representing the object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString) #[wasm_bindgen(method, js_name = toString)] pub fn to_string(this: &Object) -> JsString; /// The `valueOf()` method returns the primitive value of the /// specified object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf) #[wasm_bindgen(method, js_name = valueOf)] pub fn value_of(this: &Object) -> Object; /// The `Object.values()` method returns an array of a given object's own /// enumerable property values, in the same order as that provided by a /// `for...in` loop (the difference being that a for-in loop enumerates /// properties in the prototype chain as well). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values) #[wasm_bindgen(static_method_of = Object)] pub fn values(object: &Object) -> Array; } impl Object { /// Returns the `Object` value of this JS value if it's an instance of an /// object. /// /// If this JS value is not an instance of an object then this returns /// `None`. pub fn try_from(val: &JsValue) -> Option<&Object> { if val.is_object() { Some(val.unchecked_ref()) } else { None } } } impl PartialEq for Object { #[inline] fn eq(&self, other: &Object) -> bool { Object::is(self.as_ref(), other.as_ref()) } } impl Eq for Object {} // Proxy #[wasm_bindgen] extern "C" { #[derive(Clone, Debug)] pub type Proxy; /// The [`Proxy`] object is used to define custom behavior for fundamental /// operations (e.g. property lookup, assignment, enumeration, function /// invocation, etc). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) #[wasm_bindgen(constructor)] pub fn new(target: &JsValue, handler: &Object) -> Proxy; /// The `Proxy.revocable()` method is used to create a revocable [`Proxy`] /// object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/revocable) #[wasm_bindgen(static_method_of = Proxy)] pub fn revocable(target: &JsValue, handler: &Object) -> Object; } // RangeError #[wasm_bindgen] extern "C" { /// The `RangeError` object indicates an error when a value is not in the set /// or range of allowed values. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError) #[wasm_bindgen(extends = Error, extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type RangeError; /// The `RangeError` object indicates an error when a value is not in the set /// or range of allowed values. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError) #[wasm_bindgen(constructor)] pub fn new(message: &str) -> RangeError; } // ReferenceError #[wasm_bindgen] extern "C" { /// The `ReferenceError` object represents an error when a non-existent /// variable is referenced. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError) #[wasm_bindgen(extends = Error, extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type ReferenceError; /// The `ReferenceError` object represents an error when a non-existent /// variable is referenced. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError) #[wasm_bindgen(constructor)] pub fn new(message: &str) -> ReferenceError; } #[allow(non_snake_case)] pub mod Reflect { use super::*; // Reflect #[wasm_bindgen] extern "C" { /// The static `Reflect.apply()` method calls a target function with /// arguments as specified. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply) #[wasm_bindgen(js_namespace = Reflect, catch)] pub fn apply( target: &Function, this_argument: &JsValue, arguments_list: &Array, ) -> Result; /// The static `Reflect.construct()` method acts like the new operator, but /// as a function. It is equivalent to calling `new target(...args)`. It /// gives also the added option to specify a different prototype. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct) #[wasm_bindgen(js_namespace = Reflect, catch)] pub fn construct(target: &Function, arguments_list: &Array) -> Result; /// The static `Reflect.construct()` method acts like the new operator, but /// as a function. It is equivalent to calling `new target(...args)`. It /// gives also the added option to specify a different prototype. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct) #[wasm_bindgen(js_namespace = Reflect, js_name = construct, catch)] pub fn construct_with_new_target( target: &Function, arguments_list: &Array, new_target: &Function, ) -> Result; /// The static `Reflect.defineProperty()` method is like /// `Object.defineProperty()` but returns a `Boolean`. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty) #[wasm_bindgen(js_namespace = Reflect, js_name = defineProperty, catch)] pub fn define_property( target: &Object, property_key: &JsValue, attributes: &Object, ) -> Result; /// The static `Reflect.deleteProperty()` method allows to delete /// properties. It is like the `delete` operator as a function. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty) #[wasm_bindgen(js_namespace = Reflect, js_name = deleteProperty, catch)] pub fn delete_property(target: &Object, key: &JsValue) -> Result; /// The static `Reflect.get()` method works like getting a property from /// an object (`target[propertyKey]`) as a function. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get) #[wasm_bindgen(js_namespace = Reflect, catch)] pub fn get(target: &JsValue, key: &JsValue) -> Result; /// The same as [`get`](fn.get.html) /// except the key is an `f64`, which is slightly faster. #[wasm_bindgen(js_namespace = Reflect, js_name = "get", catch)] pub fn get_f64(target: &JsValue, key: f64) -> Result; /// The same as [`get`](fn.get.html) /// except the key is a `u32`, which is slightly faster. #[wasm_bindgen(js_namespace = Reflect, js_name = "get", catch)] pub fn get_u32(target: &JsValue, key: u32) -> Result; /// The static `Reflect.getOwnPropertyDescriptor()` method is similar to /// `Object.getOwnPropertyDescriptor()`. It returns a property descriptor /// of the given property if it exists on the object, `undefined` otherwise. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor) #[wasm_bindgen(js_namespace = Reflect, js_name = getOwnPropertyDescriptor, catch)] pub fn get_own_property_descriptor( target: &Object, property_key: &JsValue, ) -> Result; /// The static `Reflect.getPrototypeOf()` method is almost the same /// method as `Object.getPrototypeOf()`. It returns the prototype /// (i.e. the value of the internal `[[Prototype]]` property) of /// the specified object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf) #[wasm_bindgen(js_namespace = Reflect, js_name = getPrototypeOf, catch)] pub fn get_prototype_of(target: &JsValue) -> Result; /// The static `Reflect.has()` method works like the in operator as a /// function. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has) #[wasm_bindgen(js_namespace = Reflect, catch)] pub fn has(target: &JsValue, property_key: &JsValue) -> Result; /// The static `Reflect.isExtensible()` method determines if an object is /// extensible (whether it can have new properties added to it). It is /// similar to `Object.isExtensible()`, but with some differences. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible) #[wasm_bindgen(js_namespace = Reflect, js_name = isExtensible, catch)] pub fn is_extensible(target: &Object) -> Result; /// The static `Reflect.ownKeys()` method returns an array of the /// target object's own property keys. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys) #[wasm_bindgen(js_namespace = Reflect, js_name = ownKeys, catch)] pub fn own_keys(target: &JsValue) -> Result; /// The static `Reflect.preventExtensions()` method prevents new /// properties from ever being added to an object (i.e. prevents /// future extensions to the object). It is similar to /// `Object.preventExtensions()`, but with some differences. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions) #[wasm_bindgen(js_namespace = Reflect, js_name = preventExtensions, catch)] pub fn prevent_extensions(target: &Object) -> Result; /// The static `Reflect.set()` method works like setting a /// property on an object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set) #[wasm_bindgen(js_namespace = Reflect, catch)] pub fn set( target: &JsValue, property_key: &JsValue, value: &JsValue, ) -> Result; /// The same as [`set`](fn.set.html) /// except the key is an `f64`, which is slightly faster. #[wasm_bindgen(js_namespace = Reflect, js_name = "set", catch)] pub fn set_f64( target: &JsValue, property_key: f64, value: &JsValue, ) -> Result; /// The same as [`set`](fn.set.html) /// except the key is a `u32`, which is slightly faster. #[wasm_bindgen(js_namespace = Reflect, js_name = "set", catch)] pub fn set_u32( target: &JsValue, property_key: u32, value: &JsValue, ) -> Result; /// The static `Reflect.set()` method works like setting a /// property on an object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set) #[wasm_bindgen(js_namespace = Reflect, js_name = set, catch)] pub fn set_with_receiver( target: &JsValue, property_key: &JsValue, value: &JsValue, receiver: &JsValue, ) -> Result; /// The static `Reflect.setPrototypeOf()` method is the same /// method as `Object.setPrototypeOf()`. It sets the prototype /// (i.e., the internal `[[Prototype]]` property) of a specified /// object to another object or to null. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf) #[wasm_bindgen(js_namespace = Reflect, js_name = setPrototypeOf, catch)] pub fn set_prototype_of(target: &Object, prototype: &JsValue) -> Result; } } // RegExp #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type RegExp; /// The `exec()` method executes a search for a match in a specified /// string. Returns a result array, or null. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec) #[wasm_bindgen(method)] pub fn exec(this: &RegExp, text: &str) -> Option; /// The flags property returns a string consisting of the flags of /// the current regular expression object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags) #[wasm_bindgen(method, getter)] pub fn flags(this: &RegExp) -> JsString; /// The global property indicates whether or not the "g" flag is /// used with the regular expression. global is a read-only /// property of an individual regular expression instance. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/global) #[wasm_bindgen(method, getter)] pub fn global(this: &RegExp) -> bool; /// The ignoreCase property indicates whether or not the "i" flag /// is used with the regular expression. ignoreCase is a read-only /// property of an individual regular expression instance. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase) #[wasm_bindgen(method, getter, js_name = ignoreCase)] pub fn ignore_case(this: &RegExp) -> bool; /// The non-standard input property is a static property of /// regular expressions that contains the string against which a /// regular expression is matched. RegExp.$_ is an alias for this /// property. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/input) #[wasm_bindgen(static_method_of = RegExp, getter)] pub fn input() -> JsString; /// The lastIndex is a read/write integer property of regular expression /// instances that specifies the index at which to start the next match. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex) #[wasm_bindgen(structural, getter = lastIndex, method)] pub fn last_index(this: &RegExp) -> u32; /// The lastIndex is a read/write integer property of regular expression /// instances that specifies the index at which to start the next match. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex) #[wasm_bindgen(structural, setter = lastIndex, method)] pub fn set_last_index(this: &RegExp, index: u32); /// The non-standard lastMatch property is a static and read-only /// property of regular expressions that contains the last matched /// characters. `RegExp.$&` is an alias for this property. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastMatch) #[wasm_bindgen(static_method_of = RegExp, getter, js_name = lastMatch)] pub fn last_match() -> JsString; /// The non-standard lastParen property is a static and read-only /// property of regular expressions that contains the last /// parenthesized substring match, if any. `RegExp.$+` is an alias /// for this property. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastParen) #[wasm_bindgen(static_method_of = RegExp, getter, js_name = lastParen)] pub fn last_paren() -> JsString; /// The non-standard leftContext property is a static and /// read-only property of regular expressions that contains the /// substring preceding the most recent match. `RegExp.$`` is an /// alias for this property. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/leftContext) #[wasm_bindgen(static_method_of = RegExp, getter, js_name = leftContext)] pub fn left_context() -> JsString; /// The multiline property indicates whether or not the "m" flag /// is used with the regular expression. multiline is a read-only /// property of an individual regular expression instance. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/multiline) #[wasm_bindgen(method, getter)] pub fn multiline(this: &RegExp) -> bool; /// The non-standard $1, $2, $3, $4, $5, $6, $7, $8, $9 properties /// are static and read-only properties of regular expressions /// that contain parenthesized substring matches. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/n) #[wasm_bindgen(static_method_of = RegExp, getter, js_name = "$1")] pub fn n1() -> JsString; #[wasm_bindgen(static_method_of = RegExp, getter, js_name = "$2")] pub fn n2() -> JsString; #[wasm_bindgen(static_method_of = RegExp, getter, js_name = "$3")] pub fn n3() -> JsString; #[wasm_bindgen(static_method_of = RegExp, getter, js_name = "$4")] pub fn n4() -> JsString; #[wasm_bindgen(static_method_of = RegExp, getter, js_name = "$5")] pub fn n5() -> JsString; #[wasm_bindgen(static_method_of = RegExp, getter, js_name = "$6")] pub fn n6() -> JsString; #[wasm_bindgen(static_method_of = RegExp, getter, js_name = "$7")] pub fn n7() -> JsString; #[wasm_bindgen(static_method_of = RegExp, getter, js_name = "$8")] pub fn n8() -> JsString; #[wasm_bindgen(static_method_of = RegExp, getter, js_name = "$9")] pub fn n9() -> JsString; /// The `RegExp` constructor creates a regular expression object for matching text with a pattern. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp) #[wasm_bindgen(constructor)] pub fn new(pattern: &str, flags: &str) -> RegExp; #[wasm_bindgen(constructor)] pub fn new_regexp(pattern: &RegExp, flags: &str) -> RegExp; /// The non-standard rightContext property is a static and /// read-only property of regular expressions that contains the /// substring following the most recent match. `RegExp.$'` is an /// alias for this property. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/rightContext) #[wasm_bindgen(static_method_of = RegExp, getter, js_name = rightContext)] pub fn right_context() -> JsString; /// The source property returns a String containing the source /// text of the regexp object, and it doesn't contain the two /// forward slashes on both sides and any flags. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/source) #[wasm_bindgen(method, getter)] pub fn source(this: &RegExp) -> JsString; /// The sticky property reflects whether or not the search is /// sticky (searches in strings only from the index indicated by /// the lastIndex property of this regular expression). sticky is /// a read-only property of an individual regular expression /// object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/sticky) #[wasm_bindgen(method, getter)] pub fn sticky(this: &RegExp) -> bool; /// The `test()` method executes a search for a match between a /// regular expression and a specified string. Returns true or /// false. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test) #[wasm_bindgen(method)] pub fn test(this: &RegExp, text: &str) -> bool; /// The `toString()` method returns a string representing the /// regular expression. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/toString) #[wasm_bindgen(method, js_name = toString)] pub fn to_string(this: &RegExp) -> JsString; /// The unicode property indicates whether or not the "u" flag is /// used with a regular expression. unicode is a read-only /// property of an individual regular expression instance. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/unicode) #[wasm_bindgen(method, getter)] pub fn unicode(this: &RegExp) -> bool; } // Set #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type Set; /// The `add()` method appends a new element with a specified value to the /// end of a [`Set`] object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/add) #[wasm_bindgen(method)] pub fn add(this: &Set, value: &JsValue) -> Set; /// The `clear()` method removes all elements from a [`Set`] object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/clear) #[wasm_bindgen(method)] pub fn clear(this: &Set); /// The `delete()` method removes the specified element from a [`Set`] /// object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/delete) #[wasm_bindgen(method)] pub fn delete(this: &Set, value: &JsValue) -> bool; /// The `forEach()` method executes a provided function once for each value /// in the Set object, in insertion order. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/forEach) #[wasm_bindgen(method, js_name = forEach)] pub fn for_each(this: &Set, callback: &mut dyn FnMut(JsValue, JsValue, Set)); /// The `has()` method returns a boolean indicating whether an element with /// the specified value exists in a [`Set`] object or not. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/has) #[wasm_bindgen(method)] pub fn has(this: &Set, value: &JsValue) -> bool; /// The [`Set`] object lets you store unique values of any type, whether /// primitive values or object references. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) #[wasm_bindgen(constructor)] pub fn new(init: &JsValue) -> Set; /// The size accessor property returns the number of elements in a [`Set`] /// object. /// /// [MDN documentation](https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Set/size) #[wasm_bindgen(method, getter, structural)] pub fn size(this: &Set) -> u32; } // SetIterator #[wasm_bindgen] extern "C" { /// The `entries()` method returns a new Iterator object that contains an /// array of [value, value] for each element in the Set object, in insertion /// order. For Set objects there is no key like in Map objects. However, to /// keep the API similar to the Map object, each entry has the same value /// for its key and value here, so that an array [value, value] is returned. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/entries) #[wasm_bindgen(method)] pub fn entries(set: &Set) -> Iterator; /// The `keys()` method is an alias for this method (for similarity with /// Map objects); it behaves exactly the same and returns values /// of Set elements. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/values) #[wasm_bindgen(method)] pub fn keys(set: &Set) -> Iterator; /// The `values()` method returns a new Iterator object that contains the /// values for each element in the Set object in insertion order. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/values) #[wasm_bindgen(method)] pub fn values(set: &Set) -> Iterator; } // SyntaxError #[wasm_bindgen] extern "C" { /// A `SyntaxError` is thrown when the JavaScript engine encounters tokens or /// token order that does not conform to the syntax of the language when /// parsing code. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError) #[wasm_bindgen(extends = Error, extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type SyntaxError; /// A `SyntaxError` is thrown when the JavaScript engine encounters tokens or /// token order that does not conform to the syntax of the language when /// parsing code. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError) #[wasm_bindgen(constructor)] pub fn new(message: &str) -> SyntaxError; } // TypeError #[wasm_bindgen] extern "C" { /// The `TypeError` object represents an error when a value is not of the /// expected type. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError) #[wasm_bindgen(extends = Error, extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type TypeError; /// The `TypeError` object represents an error when a value is not of the /// expected type. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError) #[wasm_bindgen(constructor)] pub fn new(message: &str) -> TypeError; } // URIError #[wasm_bindgen] extern "C" { /// The `URIError` object represents an error when a global URI handling /// function was used in a wrong way. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError) #[wasm_bindgen(extends = Error, extends = Object, js_name = URIError)] #[derive(Clone, Debug, PartialEq, Eq)] pub type UriError; /// The `URIError` object represents an error when a global URI handling /// function was used in a wrong way. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError) #[wasm_bindgen(constructor, js_class = "URIError")] pub fn new(message: &str) -> UriError; } // WeakMap #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type WeakMap; /// The [`WeakMap`] object is a collection of key/value pairs in which the /// keys are weakly referenced. The keys must be objects and the values can /// be arbitrary values. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap) #[wasm_bindgen(constructor)] pub fn new() -> WeakMap; /// The `set()` method sets the value for the key in the [`WeakMap`] object. /// Returns the [`WeakMap`] object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/set) #[wasm_bindgen(method, js_class = "WeakMap")] pub fn set(this: &WeakMap, key: &Object, value: &JsValue) -> WeakMap; /// The `get()` method returns a specified by key element /// from a [`WeakMap`] object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/get) #[wasm_bindgen(method)] pub fn get(this: &WeakMap, key: &Object) -> JsValue; /// The `has()` method returns a boolean indicating whether an element with /// the specified key exists in the [`WeakMap`] object or not. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/has) #[wasm_bindgen(method)] pub fn has(this: &WeakMap, key: &Object) -> bool; /// The `delete()` method removes the specified element from a [`WeakMap`] /// object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/delete) #[wasm_bindgen(method)] pub fn delete(this: &WeakMap, key: &Object) -> bool; } // WeakSet #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type WeakSet; /// The `WeakSet` object lets you store weakly held objects in a collection. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet) #[wasm_bindgen(constructor)] pub fn new() -> WeakSet; /// The `has()` method returns a boolean indicating whether an object exists /// in a WeakSet or not. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet/has) #[wasm_bindgen(method)] pub fn has(this: &WeakSet, value: &Object) -> bool; /// The `add()` method appends a new object to the end of a WeakSet object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet/add) #[wasm_bindgen(method)] pub fn add(this: &WeakSet, value: &Object) -> WeakSet; /// The `delete()` method removes the specified element from a WeakSet /// object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet/delete) #[wasm_bindgen(method)] pub fn delete(this: &WeakSet, value: &Object) -> bool; } #[allow(non_snake_case)] pub mod WebAssembly { use super::*; // WebAssembly #[wasm_bindgen] extern "C" { /// The `WebAssembly.compile()` function compiles a `WebAssembly.Module` /// from WebAssembly binary code. This function is useful if it is /// necessary to a compile a module before it can be instantiated /// (otherwise, the `WebAssembly.instantiate()` function should be used). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/compile) #[wasm_bindgen(js_namespace = WebAssembly)] pub fn compile(buffer_source: &JsValue) -> Promise; /// The `WebAssembly.instantiate()` function allows you to compile and /// instantiate WebAssembly code. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiate) #[wasm_bindgen(js_namespace = WebAssembly, js_name = instantiate)] pub fn instantiate_buffer(buffer: &[u8], imports: &Object) -> Promise; /// The `WebAssembly.instantiate()` function allows you to compile and /// instantiate WebAssembly code. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiate) #[wasm_bindgen(js_namespace = WebAssembly, js_name = instantiate)] pub fn instantiate_module(module: &Module, imports: &Object) -> Promise; /// The `WebAssembly.instantiateStreaming()` function compiles and /// instantiates a WebAssembly module directly from a streamed /// underlying source. This is the most efficient, optimized way to load /// wasm code. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming) #[wasm_bindgen(js_namespace = WebAssembly, js_name = instantiateStreaming)] pub fn instantiate_streaming(response: &Promise, imports: &Object) -> Promise; /// The `WebAssembly.validate()` function validates a given typed /// array of WebAssembly binary code, returning whether the bytes /// form a valid wasm module (`true`) or not (`false`). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/validate) #[wasm_bindgen(js_namespace = WebAssembly, catch)] pub fn validate(buffer_source: &JsValue) -> Result; } // WebAssembly.CompileError #[wasm_bindgen] extern "C" { /// The `WebAssembly.CompileError()` constructor creates a new /// WebAssembly `CompileError` object, which indicates an error during /// WebAssembly decoding or validation. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/CompileError) #[wasm_bindgen(extends = Error, js_namespace = WebAssembly)] #[derive(Clone, Debug, PartialEq, Eq)] pub type CompileError; /// The `WebAssembly.CompileError()` constructor creates a new /// WebAssembly `CompileError` object, which indicates an error during /// WebAssembly decoding or validation. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/CompileError) #[wasm_bindgen(constructor, js_namespace = WebAssembly)] pub fn new(message: &str) -> CompileError; } // WebAssembly.Instance #[wasm_bindgen] extern "C" { /// A `WebAssembly.Instance` object is a stateful, executable instance /// of a `WebAssembly.Module`. Instance objects contain all the exported /// WebAssembly functions that allow calling into WebAssembly code from /// JavaScript. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance) #[wasm_bindgen(extends = Object, js_namespace = WebAssembly)] #[derive(Clone, Debug, PartialEq, Eq)] pub type Instance; /// The `WebAssembly.Instance()` constructor function can be called to /// synchronously instantiate a given `WebAssembly.Module` /// object. However, the primary way to get an `Instance` is through the /// asynchronous `WebAssembly.instantiateStreaming()` function. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance) #[wasm_bindgen(catch, constructor, js_namespace = WebAssembly)] pub fn new(module: &Module, imports: &Object) -> Result; /// The `exports` readonly property of the `WebAssembly.Instance` object /// prototype returns an object containing as its members all the /// functions exported from the WebAssembly module instance, to allow /// them to be accessed and used by JavaScript. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance/exports) #[wasm_bindgen(getter, method, js_namespace = WebAssembly)] pub fn exports(this: &Instance) -> Object; } // WebAssembly.LinkError #[wasm_bindgen] extern "C" { /// The `WebAssembly.LinkError()` constructor creates a new WebAssembly /// LinkError object, which indicates an error during module /// instantiation (besides traps from the start function). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/LinkError) #[wasm_bindgen(extends = Error, js_namespace = WebAssembly)] #[derive(Clone, Debug, PartialEq, Eq)] pub type LinkError; /// The `WebAssembly.LinkError()` constructor creates a new WebAssembly /// LinkError object, which indicates an error during module /// instantiation (besides traps from the start function). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/LinkError) #[wasm_bindgen(constructor, js_namespace = WebAssembly)] pub fn new(message: &str) -> LinkError; } // WebAssembly.RuntimeError #[wasm_bindgen] extern "C" { /// The `WebAssembly.RuntimeError()` constructor creates a new WebAssembly /// `RuntimeError` object — the type that is thrown whenever WebAssembly /// specifies a trap. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/RuntimeError) #[wasm_bindgen(extends = Error, js_namespace = WebAssembly)] #[derive(Clone, Debug, PartialEq, Eq)] pub type RuntimeError; /// The `WebAssembly.RuntimeError()` constructor creates a new WebAssembly /// `RuntimeError` object — the type that is thrown whenever WebAssembly /// specifies a trap. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/RuntimeError) #[wasm_bindgen(constructor, js_namespace = WebAssembly)] pub fn new(message: &str) -> RuntimeError; } // WebAssembly.Module #[wasm_bindgen] extern "C" { /// A `WebAssembly.Module` object contains stateless WebAssembly code /// that has already been compiled by the browser and can be /// efficiently shared with Workers, and instantiated multiple times. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module) #[wasm_bindgen(js_namespace = WebAssembly, extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type Module; /// A `WebAssembly.Module` object contains stateless WebAssembly code /// that has already been compiled by the browser and can be /// efficiently shared with Workers, and instantiated multiple times. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module) #[wasm_bindgen(constructor, js_namespace = WebAssembly, catch)] pub fn new(buffer_source: &JsValue) -> Result; /// The `WebAssembly.customSections()` function returns a copy of the /// contents of all custom sections in the given module with the given /// string name. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/customSections) #[wasm_bindgen(static_method_of = Module, js_namespace = WebAssembly, js_name = customSections)] pub fn custom_sections(module: &Module, sectionName: &str) -> Array; /// The `WebAssembly.exports()` function returns an array containing /// descriptions of all the declared exports of the given `Module`. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/exports) #[wasm_bindgen(static_method_of = Module, js_namespace = WebAssembly)] pub fn exports(module: &Module) -> Array; /// The `WebAssembly.imports()` function returns an array containing /// descriptions of all the declared imports of the given `Module`. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/imports) #[wasm_bindgen(static_method_of = Module, js_namespace = WebAssembly)] pub fn imports(module: &Module) -> Array; } // WebAssembly.Table #[wasm_bindgen] extern "C" { /// The `WebAssembly.Table()` constructor creates a new `Table` object /// of the given size and element type. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Table) #[wasm_bindgen(js_namespace = WebAssembly, extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type Table; /// The `WebAssembly.Table()` constructor creates a new `Table` object /// of the given size and element type. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Table) #[wasm_bindgen(constructor, js_namespace = WebAssembly, catch)] pub fn new(table_descriptor: &Object) -> Result; /// The length prototype property of the `WebAssembly.Table` object /// returns the length of the table, i.e. the number of elements in the /// table. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/length) #[wasm_bindgen(method, getter, js_namespace = WebAssembly)] pub fn length(this: &Table) -> u32; /// The `get()` prototype method of the `WebAssembly.Table()` object /// retrieves a function reference stored at a given index. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/get) #[wasm_bindgen(method, catch, js_namespace = WebAssembly)] pub fn get(this: &Table, index: u32) -> Result; /// The `grow()` prototype method of the `WebAssembly.Table` object /// increases the size of the `Table` instance by a specified number of /// elements. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/grow) #[wasm_bindgen(method, catch, js_namespace = WebAssembly)] pub fn grow(this: &Table, additional_capacity: u32) -> Result; /// The `set()` prototype method of the `WebAssembly.Table` object mutates a /// reference stored at a given index to a different value. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/set) #[wasm_bindgen(method, catch, js_namespace = WebAssembly)] pub fn set(this: &Table, index: u32, function: &Function) -> Result<(), JsValue>; } // WebAssembly.Memory #[wasm_bindgen] extern "C" { /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory) #[wasm_bindgen(js_namespace = WebAssembly, extends = Object)] #[derive(Clone, Debug, PartialEq, Eq)] pub type Memory; /// The `WebAssembly.Memory()` constructor creates a new `Memory` object /// which is a resizable `ArrayBuffer` that holds the raw bytes of /// memory accessed by a WebAssembly `Instance`. /// /// A memory created by JavaScript or in WebAssembly code will be /// accessible and mutable from both JavaScript and WebAssembly. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory) #[wasm_bindgen(constructor, js_namespace = WebAssembly, catch)] pub fn new(descriptor: &Object) -> Result; /// An accessor property that returns the buffer contained in the /// memory. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/buffer) #[wasm_bindgen(method, getter, js_namespace = WebAssembly)] pub fn buffer(this: &Memory) -> JsValue; /// The `grow()` protoype method of the `Memory` object increases the /// size of the memory instance by a specified number of WebAssembly /// pages. /// /// Takes the number of pages to grow (64KiB in size) and returns the /// previous size of memory, in pages. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/grow) #[wasm_bindgen(method, js_namespace = WebAssembly)] pub fn grow(this: &Memory, pages: u32) -> u32; } } /// The `JSON` object contains methods for parsing [JavaScript Object /// Notation (JSON)](https://json.org/) and converting values to JSON. It /// can't be called or constructed, and aside from its two method /// properties, it has no interesting functionality of its own. #[allow(non_snake_case)] pub mod JSON { use super::*; // JSON #[wasm_bindgen] extern "C" { /// The `JSON.parse()` method parses a JSON string, constructing the /// JavaScript value or object described by the string. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) #[wasm_bindgen(catch, js_namespace = JSON)] pub fn parse(text: &str) -> Result; /// The `JSON.stringify()` method converts a JavaScript value to a JSON string. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) #[wasm_bindgen(catch, js_namespace = JSON)] pub fn stringify(obj: &JsValue) -> Result; /// The `JSON.stringify()` method converts a JavaScript value to a JSON string. /// /// The `replacer` argument is a function that alters the behavior of the stringification /// process, or an array of String and Number objects that serve as a whitelist /// for selecting/filtering the properties of the value object to be included /// in the JSON string. If this value is null or not provided, all properties /// of the object are included in the resulting JSON string. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) #[wasm_bindgen(catch, js_namespace = JSON, js_name = stringify)] pub fn stringify_with_replacer( obj: &JsValue, replacer: &JsValue, ) -> Result; /// The `JSON.stringify()` method converts a JavaScript value to a JSON string. /// /// The `replacer` argument is a function that alters the behavior of the stringification /// process, or an array of String and Number objects that serve as a whitelist /// for selecting/filtering the properties of the value object to be included /// in the JSON string. If this value is null or not provided, all properties /// of the object are included in the resulting JSON string. /// /// The `space` argument is a String or Number object that's used to insert white space into /// the output JSON string for readability purposes. If this is a Number, it /// indicates the number of space characters to use as white space; this number /// is capped at 10 (if it is greater, the value is just 10). Values less than /// 1 indicate that no space should be used. If this is a String, the string /// (or the first 10 characters of the string, if it's longer than that) is /// used as white space. If this parameter is not provided (or is null), no /// white space is used. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) #[wasm_bindgen(catch, js_namespace = JSON, js_name = stringify)] pub fn stringify_with_replacer_and_space( obj: &JsValue, replacer: &JsValue, space: &JsValue, ) -> Result; } } // JsString #[wasm_bindgen] extern "C" { #[wasm_bindgen(js_name = String, extends = Object, is_type_of = JsValue::is_string)] #[derive(Clone, PartialEq, Eq)] pub type JsString; /// The length property of a String object indicates the length of a string, /// in UTF-16 code units. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length) #[wasm_bindgen(method, getter, structural)] pub fn length(this: &JsString) -> u32; /// The String object's `charAt()` method returns a new string consisting of /// the single UTF-16 code unit located at the specified offset into the /// string. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt) #[wasm_bindgen(method, js_class = "String", js_name = charAt)] pub fn char_at(this: &JsString, index: u32) -> JsString; /// The `charCodeAt()` method returns an integer between 0 and 65535 /// representing the UTF-16 code unit at the given index (the UTF-16 code /// unit matches the Unicode code point for code points representable in a /// single UTF-16 code unit, but might also be the first code unit of a /// surrogate pair for code points not representable in a single UTF-16 code /// unit, e.g. Unicode code points > 0x10000). If you want the entire code /// point value, use `codePointAt()`. /// /// Returns `NaN` if index is out of range. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt) #[wasm_bindgen(method, js_class = "String", js_name = charCodeAt)] pub fn char_code_at(this: &JsString, index: u32) -> f64; /// The `codePointAt()` method returns a non-negative integer that is the /// Unicode code point value. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt) #[wasm_bindgen(method, js_class = "String", js_name = codePointAt)] pub fn code_point_at(this: &JsString, pos: u32) -> JsValue; /// The `concat()` method concatenates the string arguments to the calling /// string and returns a new string. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/concat) #[wasm_bindgen(method, js_class = "String")] pub fn concat(this: &JsString, string_2: &JsValue) -> JsString; /// The `endsWith()` method determines whether a string ends with the characters of a /// specified string, returning true or false as appropriate. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith) #[wasm_bindgen(method, js_class = "String", js_name = endsWith)] pub fn ends_with(this: &JsString, search_string: &str, length: i32) -> bool; /// The static `String.fromCharCode()` method returns a string created from /// the specified sequence of UTF-16 code units. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode) /// /// # Notes /// /// There are a few bindings to `from_char_code` in `js-sys`: `from_char_code1`, `from_char_code2`, etc... /// with different arities. /// /// Additionally, this function accepts `u16` for character codes, but /// fixing others requires a breaking change release /// (see https://github.com/rustwasm/wasm-bindgen/issues/1460 for details). #[wasm_bindgen(static_method_of = JsString, js_class = "String", js_name = fromCharCode, variadic)] pub fn from_char_code(char_codes: &[u16]) -> JsString; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode) #[wasm_bindgen(static_method_of = JsString, js_class = "String", js_name = fromCharCode)] pub fn from_char_code1(a: u32) -> JsString; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode) #[wasm_bindgen(static_method_of = JsString, js_class = "String", js_name = fromCharCode)] pub fn from_char_code2(a: u32, b: u32) -> JsString; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode) #[wasm_bindgen(static_method_of = JsString, js_class = "String", js_name = fromCharCode)] pub fn from_char_code3(a: u32, b: u32, c: u32) -> JsString; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode) #[wasm_bindgen(static_method_of = JsString, js_class = "String", js_name = fromCharCode)] pub fn from_char_code4(a: u32, b: u32, c: u32, d: u32) -> JsString; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode) #[wasm_bindgen(static_method_of = JsString, js_class = "String", js_name = fromCharCode)] pub fn from_char_code5(a: u32, b: u32, c: u32, d: u32, e: u32) -> JsString; /// The static `String.fromCodePoint()` method returns a string created by /// using the specified sequence of code points. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint) /// /// # Exceptions /// /// A RangeError is thrown if an invalid Unicode code point is given /// /// # Notes /// /// There are a few bindings to `from_code_point` in `js-sys`: `from_code_point1`, `from_code_point2`, etc... /// with different arities. #[wasm_bindgen(catch, static_method_of = JsString, js_class = "String", js_name = fromCodePoint, variadic)] pub fn from_code_point(code_points: &[u32]) -> Result; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint) #[wasm_bindgen(catch, static_method_of = JsString, js_class = "String", js_name = fromCodePoint)] pub fn from_code_point1(a: u32) -> Result; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint) #[wasm_bindgen(catch, static_method_of = JsString, js_class = "String", js_name = fromCodePoint)] pub fn from_code_point2(a: u32, b: u32) -> Result; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint) #[wasm_bindgen(catch, static_method_of = JsString, js_class = "String", js_name = fromCodePoint)] pub fn from_code_point3(a: u32, b: u32, c: u32) -> Result; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint) #[wasm_bindgen(catch, static_method_of = JsString, js_class = "String", js_name = fromCodePoint)] pub fn from_code_point4(a: u32, b: u32, c: u32, d: u32) -> Result; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint) #[wasm_bindgen(catch, static_method_of = JsString, js_class = "String", js_name = fromCodePoint)] pub fn from_code_point5(a: u32, b: u32, c: u32, d: u32, e: u32) -> Result; /// The `includes()` method determines whether one string may be found /// within another string, returning true or false as appropriate. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes) #[wasm_bindgen(method, js_class = "String")] pub fn includes(this: &JsString, search_string: &str, position: i32) -> bool; /// The `indexOf()` method returns the index within the calling String /// object of the first occurrence of the specified value, starting the /// search at fromIndex. Returns -1 if the value is not found. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf) #[wasm_bindgen(method, js_class = "String", js_name = indexOf)] pub fn index_of(this: &JsString, search_value: &str, from_index: i32) -> i32; /// The `lastIndexOf()` method returns the index within the calling String /// object of the last occurrence of the specified value, searching /// backwards from fromIndex. Returns -1 if the value is not found. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf) #[wasm_bindgen(method, js_class = "String", js_name = lastIndexOf)] pub fn last_index_of(this: &JsString, search_value: &str, from_index: i32) -> i32; /// The `localeCompare()` method returns a number indicating whether /// a reference string comes before or after or is the same as /// the given string in sort order. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare) #[wasm_bindgen(method, js_class = "String", js_name = localeCompare)] pub fn locale_compare( this: &JsString, compare_string: &str, locales: &Array, options: &Object, ) -> i32; /// The `match()` method retrieves the matches when matching a string against a regular expression. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match) #[wasm_bindgen(method, js_class = "String", js_name = match)] pub fn match_(this: &JsString, pattern: &RegExp) -> Option; /// The `normalize()` method returns the Unicode Normalization Form /// of a given string (if the value isn't a string, it will be converted to one first). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize) #[wasm_bindgen(method, js_class = "String")] pub fn normalize(this: &JsString, form: &str) -> JsString; /// The `padEnd()` method pads the current string with a given string /// (repeated, if needed) so that the resulting string reaches a given /// length. The padding is applied from the end (right) of the current /// string. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd) #[wasm_bindgen(method, js_class = "String", js_name = padEnd)] pub fn pad_end(this: &JsString, target_length: u32, pad_string: &str) -> JsString; /// The `padStart()` method pads the current string with another string /// (repeated, if needed) so that the resulting string reaches the given /// length. The padding is applied from the start (left) of the current /// string. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart) #[wasm_bindgen(method, js_class = "String", js_name = padStart)] pub fn pad_start(this: &JsString, target_length: u32, pad_string: &str) -> JsString; /// The `repeat()` method constructs and returns a new string which contains the specified /// number of copies of the string on which it was called, concatenated together. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat) #[wasm_bindgen(method, js_class = "String")] pub fn repeat(this: &JsString, count: i32) -> JsString; /// The `replace()` method returns a new string with some or all matches of a pattern /// replaced by a replacement. The pattern can be a string or a RegExp, and /// the replacement can be a string or a function to be called for each match. /// /// Note: The original string will remain unchanged. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace) #[wasm_bindgen(method, js_class = "String")] pub fn replace(this: &JsString, pattern: &str, replacement: &str) -> JsString; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace) #[wasm_bindgen(method, js_class = "String", js_name = replace)] pub fn replace_with_function( this: &JsString, pattern: &str, replacement: &Function, ) -> JsString; #[wasm_bindgen(method, js_class = "String", js_name = replace)] pub fn replace_by_pattern(this: &JsString, pattern: &RegExp, replacement: &str) -> JsString; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace) #[wasm_bindgen(method, js_class = "String", js_name = replace)] pub fn replace_by_pattern_with_function( this: &JsString, pattern: &RegExp, replacement: &Function, ) -> JsString; /// The `search()` method executes a search for a match between /// a regular expression and this String object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search) #[wasm_bindgen(method, js_class = "String")] pub fn search(this: &JsString, pattern: &RegExp) -> i32; /// The `slice()` method extracts a section of a string and returns it as a /// new string, without modifying the original string. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice) #[wasm_bindgen(method, js_class = "String")] pub fn slice(this: &JsString, start: u32, end: u32) -> JsString; /// The `split()` method splits a String object into an array of strings by separating the string /// into substrings, using a specified separator string to determine where to make each split. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split) #[wasm_bindgen(method, js_class = "String")] pub fn split(this: &JsString, separator: &str) -> Array; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split) #[wasm_bindgen(method, js_class = "String", js_name = split)] pub fn split_limit(this: &JsString, separator: &str, limit: u32) -> Array; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split) #[wasm_bindgen(method, js_class = "String", js_name = split)] pub fn split_by_pattern(this: &JsString, pattern: &RegExp) -> Array; /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split) #[wasm_bindgen(method, js_class = "String", js_name = split)] pub fn split_by_pattern_limit(this: &JsString, pattern: &RegExp, limit: u32) -> Array; /// The `startsWith()` method determines whether a string begins with the /// characters of a specified string, returning true or false as /// appropriate. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith) #[wasm_bindgen(method, js_class = "String", js_name = startsWith)] pub fn starts_with(this: &JsString, search_string: &str, position: u32) -> bool; /// The `substring()` method returns the part of the string between the /// start and end indexes, or to the end of the string. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring) #[wasm_bindgen(method, js_class = "String")] pub fn substring(this: &JsString, index_start: u32, index_end: u32) -> JsString; /// The `substr()` method returns the part of a string between /// the start index and a number of characters after it. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr) #[wasm_bindgen(method, js_class = "String")] pub fn substr(this: &JsString, start: i32, length: i32) -> JsString; /// The `toLocaleLowerCase()` method returns the calling string value converted to lower case, /// according to any locale-specific case mappings. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase) #[wasm_bindgen(method, js_class = "String", js_name = toLocaleLowerCase)] pub fn to_locale_lower_case(this: &JsString, locale: Option<&str>) -> JsString; /// The `toLocaleUpperCase()` method returns the calling string value converted to upper case, /// according to any locale-specific case mappings. /// /// [MDN documentation](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase) #[wasm_bindgen(method, js_class = "String", js_name = toLocaleUpperCase)] pub fn to_locale_upper_case(this: &JsString, locale: Option<&str>) -> JsString; /// The `toLowerCase()` method returns the calling string value /// converted to lower case. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase) #[wasm_bindgen(method, js_class = "String", js_name = toLowerCase)] pub fn to_lower_case(this: &JsString) -> JsString; /// The `toString()` method returns a string representing the specified /// object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toString) #[wasm_bindgen(method, js_class = "String", js_name = toString)] pub fn to_string(this: &JsString) -> JsString; /// The `toUpperCase()` method returns the calling string value converted to /// uppercase (the value will be converted to a string if it isn't one). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase) #[wasm_bindgen(method, js_class = "String", js_name = toUpperCase)] pub fn to_upper_case(this: &JsString) -> JsString; /// The `trim()` method removes whitespace from both ends of a string. /// Whitespace in this context is all the whitespace characters (space, tab, /// no-break space, etc.) and all the line terminator characters (LF, CR, /// etc.). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim) #[wasm_bindgen(method, js_class = "String")] pub fn trim(this: &JsString) -> JsString; /// The `trimEnd()` method removes whitespace from the end of a string. /// `trimRight()` is an alias of this method. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimEnd) #[wasm_bindgen(method, js_class = "String", js_name = trimEnd)] pub fn trim_end(this: &JsString) -> JsString; /// The `trimEnd()` method removes whitespace from the end of a string. /// `trimRight()` is an alias of this method. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimEnd) #[wasm_bindgen(method, js_class = "String", js_name = trimRight)] pub fn trim_right(this: &JsString) -> JsString; /// The `trimStart()` method removes whitespace from the beginning of a /// string. `trimLeft()` is an alias of this method. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimStart) #[wasm_bindgen(method, js_class = "String", js_name = trimStart)] pub fn trim_start(this: &JsString) -> JsString; /// The `trimStart()` method removes whitespace from the beginning of a /// string. `trimLeft()` is an alias of this method. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimStart) #[wasm_bindgen(method, js_class = "String", js_name = trimLeft)] pub fn trim_left(this: &JsString) -> JsString; /// The `valueOf()` method returns the primitive value of a `String` object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/valueOf) #[wasm_bindgen(method, js_class = "String", js_name = valueOf)] pub fn value_of(this: &JsString) -> JsString; /// The static `raw()` method is a tag function of template literals, /// similar to the `r` prefix in Python or the `@` prefix in C# for string literals. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw) #[wasm_bindgen(catch, variadic, static_method_of = JsString, js_class = "String")] pub fn raw(call_site: &Object, substitutions: &Array) -> Result; /// The static `raw()` method is a tag function of template literals, /// similar to the `r` prefix in Python or the `@` prefix in C# for string literals. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw) #[wasm_bindgen(catch, static_method_of = JsString, js_class = "String", js_name = raw)] pub fn raw_0(call_site: &Object) -> Result; /// The static `raw()` method is a tag function of template literals, /// similar to the `r` prefix in Python or the `@` prefix in C# for string literals. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw) #[wasm_bindgen(catch, static_method_of = JsString, js_class = "String", js_name = raw)] pub fn raw_1(call_site: &Object, substitutions_1: &str) -> Result; /// The static `raw()` method is a tag function of template literals, /// similar to the `r` prefix in Python or the `@` prefix in C# for string literals. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw) #[wasm_bindgen(catch, static_method_of = JsString, js_class = "String", js_name = raw)] pub fn raw_2( call_site: &Object, substitutions_1: &str, substitutions_2: &str, ) -> Result; /// The static `raw()` method is a tag function of template literals, /// similar to the `r` prefix in Python or the `@` prefix in C# for string literals. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw) #[wasm_bindgen(catch, static_method_of = JsString, js_class = "String", js_name = raw)] pub fn raw_3( call_site: &Object, substitutions_1: &str, substitutions_2: &str, substitutions_3: &str, ) -> Result; /// The static `raw()` method is a tag function of template literals, /// similar to the `r` prefix in Python or the `@` prefix in C# for string literals. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw) #[wasm_bindgen(catch, static_method_of = JsString, js_class = "String", js_name = raw)] pub fn raw_4( call_site: &Object, substitutions_1: &str, substitutions_2: &str, substitutions_3: &str, substitutions_4: &str, ) -> Result; /// The static `raw()` method is a tag function of template literals, /// similar to the `r` prefix in Python or the `@` prefix in C# for string literals. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw) #[wasm_bindgen(catch, static_method_of = JsString, js_class = "String", js_name = raw)] pub fn raw_5( call_site: &Object, substitutions_1: &str, substitutions_2: &str, substitutions_3: &str, substitutions_4: &str, substitutions_5: &str, ) -> Result; /// The static `raw()` method is a tag function of template literals, /// similar to the `r` prefix in Python or the `@` prefix in C# for string literals. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw) #[wasm_bindgen(catch, static_method_of = JsString, js_class = "String", js_name = raw)] pub fn raw_6( call_site: &Object, substitutions_1: &str, substitutions_2: &str, substitutions_3: &str, substitutions_4: &str, substitutions_5: &str, substitutions_6: &str, ) -> Result; /// The static `raw()` method is a tag function of template literals, /// similar to the `r` prefix in Python or the `@` prefix in C# for string literals. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw) #[wasm_bindgen(catch, static_method_of = JsString, js_class = "String", js_name = raw)] pub fn raw_7( call_site: &Object, substitutions_1: &str, substitutions_2: &str, substitutions_3: &str, substitutions_4: &str, substitutions_5: &str, substitutions_6: &str, substitutions_7: &str, ) -> Result; } impl JsString { /// Returns the `JsString` value of this JS value if it's an instance of a /// string. /// /// If this JS value is not an instance of a string then this returns /// `None`. #[deprecated(note = "recommended to use dyn_ref instead which is now equivalent")] pub fn try_from(val: &JsValue) -> Option<&JsString> { val.dyn_ref() } /// Returns whether this string is a valid UTF-16 string. /// /// This is useful for learning whether `String::from(..)` will return a /// lossless representation of the JS string. If this string contains /// unpaired surrogates then `String::from` will succeed but it will be a /// lossy representation of the JS string because unpaired surrogates will /// become replacement characters. /// /// If this function returns `false` then to get a lossless representation /// of the string you'll need to manually use the `iter` method (or the /// `char_code_at` accessor) to view the raw character codes. /// /// For more information, see the documentation on [JS strings vs Rust /// strings][docs] /// /// [docs]: https://rustwasm.github.io/docs/wasm-bindgen/reference/types/str.html pub fn is_valid_utf16(&self) -> bool { std::char::decode_utf16(self.iter()).all(|i| i.is_ok()) } /// Returns an iterator over the `u16` character codes that make up this JS /// string. /// /// This method will call `char_code_at` for each code in this JS string, /// returning an iterator of the codes in sequence. pub fn iter<'a>( &'a self, ) -> impl ExactSizeIterator + DoubleEndedIterator + 'a { (0..self.length()).map(move |i| self.char_code_at(i) as u16) } /// If this string consists of a single Unicode code point, then this method /// converts it into a Rust `char` without doing any allocations. /// /// If this JS value is not a valid UTF-8 or consists of more than a single /// codepoint, then this returns `None`. /// /// Note that a single Unicode code point might be represented as more than /// one code unit on the JavaScript side. For example, a JavaScript string /// `"\uD801\uDC37"` is actually a single Unicode code point U+10437 which /// corresponds to a character '𐐷'. pub fn as_char(&self) -> Option { let len = self.length(); if len == 0 || len > 2 { return None; } // This will be simplified when definitions are fixed: // https://github.com/rustwasm/wasm-bindgen/issues/1362 let cp = self.code_point_at(0).as_f64().unwrap_throw() as u32; let c = std::char::from_u32(cp)?; if c.len_utf16() as u32 == len { Some(c) } else { None } } } impl PartialEq for JsString { fn eq(&self, other: &str) -> bool { String::from(self) == other } } impl<'a> PartialEq<&'a str> for JsString { fn eq(&self, other: &&'a str) -> bool { >::eq(self, other) } } impl PartialEq for JsString { fn eq(&self, other: &String) -> bool { >::eq(self, other) } } impl<'a> PartialEq<&'a String> for JsString { fn eq(&self, other: &&'a String) -> bool { >::eq(self, other) } } impl<'a> From<&'a str> for JsString { fn from(s: &'a str) -> Self { JsString::unchecked_from_js(JsValue::from_str(s)) } } impl From for JsString { fn from(s: String) -> Self { From::from(&*s) } } impl From for JsString { #[inline] fn from(c: char) -> Self { JsString::from_code_point1(c as u32).unwrap_throw() } } impl<'a> From<&'a JsString> for String { fn from(s: &'a JsString) -> Self { s.obj.as_string().unwrap_throw() } } impl From for String { fn from(s: JsString) -> Self { From::from(&s) } } impl fmt::Debug for JsString { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { String::from(self).fmt(f) } } // Symbol #[wasm_bindgen] extern "C" { #[wasm_bindgen(is_type_of = JsValue::is_symbol)] #[derive(Clone, Debug)] pub type Symbol; /// The `Symbol.hasInstance` well-known symbol is used to determine /// if a constructor object recognizes an object as its instance. /// The `instanceof` operator's behavior can be customized by this symbol. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance) #[wasm_bindgen(static_method_of = Symbol, getter, structural, js_name = hasInstance)] pub fn has_instance() -> Symbol; /// The `Symbol.isConcatSpreadable` well-known symbol is used to configure /// if an object should be flattened to its array elements when using the /// `Array.prototype.concat()` method. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable) #[wasm_bindgen(static_method_of = Symbol, getter, structural, js_name = isConcatSpreadable)] pub fn is_concat_spreadable() -> Symbol; /// The `Symbol.asyncIterator` well-known symbol specifies the default AsyncIterator for an object. /// If this property is set on an object, it is an async iterable and can be used in a `for await...of` loop. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator) #[wasm_bindgen(static_method_of = Symbol, getter, structural, js_name = asyncIterator)] pub fn async_iterator() -> Symbol; /// The `Symbol.iterator` well-known symbol specifies the default iterator /// for an object. Used by `for...of`. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator) #[wasm_bindgen(static_method_of = Symbol, getter, structural)] pub fn iterator() -> Symbol; /// The `Symbol.match` well-known symbol specifies the matching of a regular /// expression against a string. This function is called by the /// `String.prototype.match()` method. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/match) #[wasm_bindgen(static_method_of = Symbol, getter, structural, js_name = match)] pub fn match_() -> Symbol; /// The `Symbol.replace` well-known symbol specifies the method that /// replaces matched substrings of a string. This function is called by the /// `String.prototype.replace()` method. /// /// For more information, see `RegExp.prototype[@@replace]()` and /// `String.prototype.replace()`. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/replace) #[wasm_bindgen(static_method_of = Symbol, getter, structural)] pub fn replace() -> Symbol; /// The `Symbol.search` well-known symbol specifies the method that returns /// the index within a string that matches the regular expression. This /// function is called by the `String.prototype.search()` method. /// /// For more information, see `RegExp.prototype[@@search]()` and /// `String.prototype.search()`. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/search) #[wasm_bindgen(static_method_of = Symbol, getter, structural)] pub fn search() -> Symbol; /// The well-known symbol `Symbol.species` specifies a function-valued /// property that the constructor function uses to create derived objects. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/species) #[wasm_bindgen(static_method_of = Symbol, getter, structural)] pub fn species() -> Symbol; /// The `Symbol.split` well-known symbol specifies the method that splits a /// string at the indices that match a regular expression. This function is /// called by the `String.prototype.split()` method. /// /// For more information, see `RegExp.prototype[@@split]()` and /// `String.prototype.split()`. /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/split) #[wasm_bindgen(static_method_of = Symbol, getter, structural)] pub fn split() -> Symbol; /// The `Symbol.toPrimitive` is a symbol that specifies a function valued /// property that is called to convert an object to a corresponding /// primitive value. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive) #[wasm_bindgen(static_method_of = Symbol, getter, structural, js_name = toPrimitive)] pub fn to_primitive() -> Symbol; /// The `Symbol.toStringTag` well-known symbol is a string valued property /// that is used in the creation of the default string description of an /// object. It is accessed internally by the `Object.prototype.toString()` /// method. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toString) #[wasm_bindgen(static_method_of = Symbol, getter, structural, js_name = toStringTag)] pub fn to_string_tag() -> Symbol; /// The `Symbol.for(key)` method searches for existing symbols in a runtime-wide symbol registry with /// the given key and returns it if found. /// Otherwise a new symbol gets created in the global symbol registry with this key. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/for) #[wasm_bindgen(static_method_of = Symbol, js_name = for)] pub fn for_(key: &str) -> Symbol; /// The `Symbol.keyFor(sym)` method retrieves a shared symbol key from the global symbol registry for the given symbol. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/keyFor) #[wasm_bindgen(static_method_of = Symbol, js_name = keyFor)] pub fn key_for(sym: &Symbol) -> JsValue; /// The `toString()` method returns a string representing the specified Symbol object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toString) #[wasm_bindgen(method, js_name = toString)] pub fn to_string(this: &Symbol) -> JsString; /// The `Symbol.unscopables` well-known symbol is used to specify an object /// value of whose own and inherited property names are excluded from the /// with environment bindings of the associated object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/unscopables) #[wasm_bindgen(static_method_of = Symbol, getter, structural)] pub fn unscopables() -> Symbol; /// The `valueOf()` method returns the primitive value of a Symbol object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/valueOf) #[wasm_bindgen(method, js_name = valueOf)] pub fn value_of(this: &Symbol) -> Symbol; } #[allow(non_snake_case)] pub mod Intl { use super::*; // Intl #[wasm_bindgen] extern "C" { /// The `Intl.getCanonicalLocales()` method returns an array containing /// the canonical locale names. Duplicates will be omitted and elements /// will be validated as structurally valid language tags. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/getCanonicalLocales) #[wasm_bindgen(js_name = getCanonicalLocales, js_namespace = Intl)] pub fn get_canonical_locales(s: &JsValue) -> Array; } // Intl.Collator #[wasm_bindgen] extern "C" { /// The `Intl.Collator` object is a constructor for collators, objects /// that enable language sensitive string comparison. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Collator) #[wasm_bindgen(extends = Object, js_namespace = Intl)] #[derive(Clone, Debug)] pub type Collator; /// The `Intl.Collator` object is a constructor for collators, objects /// that enable language sensitive string comparison. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Collator) #[wasm_bindgen(constructor, js_namespace = Intl)] pub fn new(locales: &Array, options: &Object) -> Collator; /// The Intl.Collator.prototype.compare property returns a function that /// compares two strings according to the sort order of this Collator /// object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Collator/compare) #[wasm_bindgen(method, getter, js_class = "Intl.Collator")] pub fn compare(this: &Collator) -> Function; /// The `Intl.Collator.prototype.resolvedOptions()` method returns a new /// object with properties reflecting the locale and collation options /// computed during initialization of this Collator object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Collator/resolvedOptions) #[wasm_bindgen(method, js_namespace = Intl, js_name = resolvedOptions)] pub fn resolved_options(this: &Collator) -> Object; /// The `Intl.Collator.supportedLocalesOf()` method returns an array /// containing those of the provided locales that are supported in /// collation without having to fall back to the runtime's default /// locale. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Collator/supportedLocalesOf) #[wasm_bindgen(static_method_of = Collator, js_namespace = Intl, js_name = supportedLocalesOf)] pub fn supported_locales_of(locales: &Array, options: &Object) -> Array; } // Intl.DateTimeFormat #[wasm_bindgen] extern "C" { /// The `Intl.DateTimeFormat` object is a constructor for objects /// that enable language-sensitive date and time formatting. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat) #[wasm_bindgen(extends = Object, js_namespace = Intl)] #[derive(Clone, Debug)] pub type DateTimeFormat; /// The `Intl.DateTimeFormat` object is a constructor for objects /// that enable language-sensitive date and time formatting. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat) #[wasm_bindgen(constructor, js_namespace = Intl)] pub fn new(locales: &Array, options: &Object) -> DateTimeFormat; /// The Intl.DateTimeFormat.prototype.format property returns a getter function that /// formats a date according to the locale and formatting options of this /// Intl.DateTimeFormat object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/format) #[wasm_bindgen(method, getter, js_class = "Intl.DateTimeFormat")] pub fn format(this: &DateTimeFormat) -> Function; /// The `Intl.DateTimeFormat.prototype.formatToParts()` method allows locale-aware /// formatting of strings produced by DateTimeFormat formatters. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts) #[wasm_bindgen(method, js_class = "Intl.DateTimeFormat", js_name = formatToParts)] pub fn format_to_parts(this: &DateTimeFormat, date: &Date) -> Array; /// The `Intl.DateTimeFormat.prototype.resolvedOptions()` method returns a new /// object with properties reflecting the locale and date and time formatting /// options computed during initialization of this DateTimeFormat object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/resolvedOptions) #[wasm_bindgen(method, js_namespace = Intl, js_name = resolvedOptions)] pub fn resolved_options(this: &DateTimeFormat) -> Object; /// The `Intl.DateTimeFormat.supportedLocalesOf()` method returns an array /// containing those of the provided locales that are supported in date /// and time formatting without having to fall back to the runtime's default /// locale. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/supportedLocalesOf) #[wasm_bindgen(static_method_of = DateTimeFormat, js_namespace = Intl, js_name = supportedLocalesOf)] pub fn supported_locales_of(locales: &Array, options: &Object) -> Array; } // Intl.NumberFormat #[wasm_bindgen] extern "C" { /// The `Intl.NumberFormat` object is a constructor for objects /// that enable language sensitive number formatting. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat) #[wasm_bindgen(extends = Object, js_namespace = Intl)] #[derive(Clone, Debug)] pub type NumberFormat; /// The `Intl.NumberFormat` object is a constructor for objects /// that enable language sensitive number formatting. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat) #[wasm_bindgen(constructor, js_namespace = Intl)] pub fn new(locales: &Array, options: &Object) -> NumberFormat; /// The Intl.NumberFormat.prototype.format property returns a getter function that /// formats a number according to the locale and formatting options of this /// NumberFormat object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat/format) #[wasm_bindgen(method, getter, js_class = "Intl.NumberFormat")] pub fn format(this: &NumberFormat) -> Function; /// The `Intl.Numberformat.prototype.formatToParts()` method allows locale-aware /// formatting of strings produced by NumberTimeFormat formatters. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat/formatToParts) #[wasm_bindgen(method, js_class = "Intl.NumberFormat", js_name = formatToParts)] pub fn format_to_parts(this: &NumberFormat, number: f64) -> Array; /// The `Intl.NumberFormat.prototype.resolvedOptions()` method returns a new /// object with properties reflecting the locale and number formatting /// options computed during initialization of this NumberFormat object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat/resolvedOptions) #[wasm_bindgen(method, js_namespace = Intl, js_name = resolvedOptions)] pub fn resolved_options(this: &NumberFormat) -> Object; /// The `Intl.NumberFormat.supportedLocalesOf()` method returns an array /// containing those of the provided locales that are supported in number /// formatting without having to fall back to the runtime's default locale. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat/supportedLocalesOf) #[wasm_bindgen(static_method_of = NumberFormat, js_namespace = Intl, js_name = supportedLocalesOf)] pub fn supported_locales_of(locales: &Array, options: &Object) -> Array; } // Intl.PluralRules #[wasm_bindgen] extern "C" { /// The `Intl.PluralRules` object is a constructor for objects /// that enable plural sensitive formatting and plural language rules. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules) #[wasm_bindgen(extends = Object, js_namespace = Intl)] #[derive(Clone, Debug)] pub type PluralRules; /// The `Intl.PluralRules` object is a constructor for objects /// that enable plural sensitive formatting and plural language rules. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules) #[wasm_bindgen(constructor, js_namespace = Intl)] pub fn new(locales: &Array, options: &Object) -> PluralRules; /// The `Intl.PluralRules.prototype.resolvedOptions()` method returns a new /// object with properties reflecting the locale and plural formatting /// options computed during initialization of this PluralRules object. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/resolvedOptions) #[wasm_bindgen(method, js_namespace = Intl, js_name = resolvedOptions)] pub fn resolved_options(this: &PluralRules) -> Object; /// The `Intl.PluralRules.prototype.select()` method returns a String indicating /// which plural rule to use for locale-aware formatting. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/select) #[wasm_bindgen(method, js_namespace = Intl)] pub fn select(this: &PluralRules, number: f64) -> JsString; /// The `Intl.PluralRules.supportedLocalesOf()` method returns an array /// containing those of the provided locales that are supported in plural /// formatting without having to fall back to the runtime's default locale. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/supportedLocalesOf) #[wasm_bindgen(static_method_of = PluralRules, js_namespace = Intl, js_name = supportedLocalesOf)] pub fn supported_locales_of(locales: &Array, options: &Object) -> Array; } } // Promise #[wasm_bindgen] extern "C" { /// The `Promise` object represents the eventual completion (or failure) of /// an asynchronous operation, and its resulting value. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) #[must_use] #[wasm_bindgen(extends = Object)] #[derive(Clone, Debug)] pub type Promise; /// Creates a new `Promise` with the provided executor `cb` /// /// The `cb` is a function that is passed with the arguments `resolve` and /// `reject`. The `cb` function is executed immediately by the `Promise` /// implementation, passing `resolve` and `reject` functions (the executor /// is called before the `Promise` constructor even returns the created /// object). The `resolve` and `reject` functions, when called, resolve or /// reject the promise, respectively. The executor normally initiates /// some asynchronous work, and then, once that completes, either calls /// the `resolve` function to resolve the promise or else rejects it if an /// error occurred. /// /// If an error is thrown in the executor function, the promise is rejected. /// The return value of the executor is ignored. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) #[wasm_bindgen(constructor)] pub fn new(cb: &mut dyn FnMut(Function, Function)) -> Promise; /// The `Promise.all(iterable)` method returns a single `Promise` that /// resolves when all of the promises in the iterable argument have resolved /// or when the iterable argument contains no promises. It rejects with the /// reason of the first promise that rejects. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all) #[wasm_bindgen(static_method_of = Promise)] pub fn all(obj: &JsValue) -> Promise; /// The `Promise.race(iterable)` method returns a promise that resolves or /// rejects as soon as one of the promises in the iterable resolves or /// rejects, with the value or reason from that promise. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/race) #[wasm_bindgen(static_method_of = Promise)] pub fn race(obj: &JsValue) -> Promise; /// The `Promise.reject(reason)` method returns a `Promise` object that is /// rejected with the given reason. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/reject) #[wasm_bindgen(static_method_of = Promise)] pub fn reject(obj: &JsValue) -> Promise; /// The `Promise.resolve(value)` method returns a `Promise` object that is /// resolved with the given value. If the value is a promise, that promise /// is returned; if the value is a thenable (i.e. has a "then" method), the /// returned promise will "follow" that thenable, adopting its eventual /// state; otherwise the returned promise will be fulfilled with the value. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve) #[wasm_bindgen(static_method_of = Promise)] pub fn resolve(obj: &JsValue) -> Promise; /// The `catch()` method returns a `Promise` and deals with rejected cases /// only. It behaves the same as calling `Promise.prototype.then(undefined, /// onRejected)` (in fact, calling `obj.catch(onRejected)` internally calls /// `obj.then(undefined, onRejected)`). /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch) #[wasm_bindgen(method)] pub fn catch(this: &Promise, cb: &Closure) -> Promise; /// The `then()` method returns a `Promise`. It takes up to two arguments: /// callback functions for the success and failure cases of the `Promise`. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) #[wasm_bindgen(method)] pub fn then(this: &Promise, cb: &Closure) -> Promise; /// Same as `then`, only with both arguments provided. #[wasm_bindgen(method, js_name = then)] pub fn then2( this: &Promise, resolve: &Closure, reject: &Closure, ) -> Promise; /// The `finally()` method returns a `Promise`. When the promise is settled, /// whether fulfilled or rejected, the specified callback function is /// executed. This provides a way for code that must be executed once the /// `Promise` has been dealt with to be run whether the promise was /// fulfilled successfully or rejected. /// /// This lets you avoid duplicating code in both the promise's `then()` and /// `catch()` handlers. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/finally) #[wasm_bindgen(method)] pub fn finally(this: &Promise, cb: &Closure) -> Promise; } /// Returns a handle to the global scope object. /// /// This allows access to the global properties and global names by accessing /// the `Object` returned. pub fn global() -> Object { thread_local!(static GLOBAL: Object = get_global_object()); return GLOBAL.with(|g| g.clone()); fn get_global_object() -> Object { // This is a bit wonky, but we're basically using `#[wasm_bindgen]` // attributes to synthesize imports so we can access properties of the // form: // // * `globalThis.globalThis` // * `self.self` // * ... (etc) // // Accessing the global object is not an easy thing to do, and what we // basically want is `globalThis` but we can't rely on that existing // everywhere. In the meantime we've got the fallbacks mentioned in: // // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis // // Note that this is pretty heavy code-size wise but it at least gets // the job largely done for now and avoids the `Function` constructor at // the end which triggers CSP errors. #[wasm_bindgen] extern "C" { type Global; #[wasm_bindgen(getter, catch, static_method_of = Global, js_class = globalThis, js_name = globalThis)] fn get_global_this() -> Result; #[wasm_bindgen(getter, catch, static_method_of = Global, js_class = self, js_name = self)] fn get_self() -> Result; #[wasm_bindgen(getter, catch, static_method_of = Global, js_class = window, js_name = window)] fn get_window() -> Result; #[wasm_bindgen(getter, catch, static_method_of = Global, js_class = global, js_name = global)] fn get_global() -> Result; } let static_object = Global::get_global_this() .or_else(|_| Global::get_self()) .or_else(|_| Global::get_window()) .or_else(|_| Global::get_global()); if let Ok(obj) = static_object { if !obj.is_undefined() { return obj; } } // According to StackOverflow you can access the global object via: // // const global = Function('return this')(); // // I think that's because the manufactured function isn't in "strict" mode. // It also turns out that non-strict functions will ignore `undefined` // values for `this` when using the `apply` function. // // As a result we use the equivalent of this snippet to get a handle to the // global object in a sort of roundabout way that should hopefully work in // all contexts like ESM, node, browsers, etc. let this = Function::new_no_args("return this") .call0(&JsValue::undefined()) .ok(); // Note that we avoid `unwrap()` on `call0` to avoid code size bloat, we // just handle the `Err` case as returning a different object. debug_assert!(this.is_some()); match this { Some(this) => this.unchecked_into(), None => JsValue::undefined().unchecked_into(), } } } macro_rules! arrays { ($(#[doc = $ctor:literal] #[doc = $mdn:literal] $name:ident: $ty:ident,)*) => ($( #[wasm_bindgen] extern "C" { #[wasm_bindgen(extends = Object)] #[derive(Clone, Debug)] pub type $name; /// The #[doc = $ctor] /// constructor creates an array of unsigned 8-bit integers. /// /// [MDN documentation]( #[doc = $mdn] /// ) #[wasm_bindgen(constructor)] pub fn new(constructor_arg: &JsValue) -> $name; /// An #[doc = $ctor] /// which creates an array with an internal buffer large /// enough for `length` elements. /// /// [MDN documentation]( #[doc = $mdn] /// ) #[wasm_bindgen(constructor)] pub fn new_with_length(length: u32) -> $name; /// An #[doc = $ctor] /// which creates an array with the given buffer but is a /// view starting at `byte_offset`. /// /// [MDN documentation]( #[doc = $mdn] /// ) #[wasm_bindgen(constructor)] pub fn new_with_byte_offset(buffer: &JsValue, byte_offset: u32) -> $name; /// An #[doc = $ctor] /// which creates an array with the given buffer but is a /// view starting at `byte_offset` for `length` elements. /// /// [MDN documentation]( #[doc = $mdn] /// ) #[wasm_bindgen(constructor)] pub fn new_with_byte_offset_and_length( buffer: &JsValue, byte_offset: u32, length: u32, ) -> $name; /// The `fill()` method fills all the elements of an array from a start index /// to an end index with a static value. The end index is not included. /// /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/fill) #[wasm_bindgen(method)] pub fn fill(this: &$name, value: $ty, start: u32, end: u32) -> $name; /// The buffer accessor property represents the `ArrayBuffer` referenced /// by a `TypedArray` at construction time. #[wasm_bindgen(getter, method)] pub fn buffer(this: &$name) -> ArrayBuffer; /// The `subarray()` method stores multiple values in the typed array, /// reading input values from a specified array. #[wasm_bindgen(method)] pub fn subarray(this: &$name, begin: u32, end: u32) -> $name; /// The `slice()` method returns a shallow copy of a portion of a typed /// array into a new typed array object. This method has the same algorithm /// as `Array.prototype.slice()`. #[wasm_bindgen(method)] pub fn slice(this: &$name, begin: u32, end: u32) -> $name; /// The `forEach()` method executes a provided function once per array /// element. This method has the same algorithm as /// `Array.prototype.forEach()`. `TypedArray` is one of the typed array /// types here. #[wasm_bindgen(method, js_name = forEach)] pub fn for_each(this: &$name, callback: &mut dyn FnMut($ty, u32, $name)); /// The length accessor property represents the length (in elements) of a /// typed array. #[wasm_bindgen(method, getter)] pub fn length(this: &$name) -> u32; /// The byteLength accessor property represents the length (in bytes) of a /// typed array. #[wasm_bindgen(method, getter, js_name = byteLength)] pub fn byte_length(this: &$name) -> u32; /// The byteOffset accessor property represents the offset (in bytes) of a /// typed array from the start of its `ArrayBuffer`. #[wasm_bindgen(method, getter, js_name = byteOffset)] pub fn byte_offset(this: &$name) -> u32; /// The `set()` method stores multiple values in the typed array, reading /// input values from a specified array. #[wasm_bindgen(method)] pub fn set(this: &$name, src: &JsValue, offset: u32); } impl $name { /// Creates a JS typed array which is a view into wasm's linear /// memory at the slice specified. /// /// This function returns a new typed array which is a view into /// wasm's memory. This view does not copy the underlying data. /// /// # Unsafety /// /// Views into WebAssembly memory are only valid so long as the /// backing buffer isn't resized in JS. Once this function is called /// any future calls to `Box::new` (or malloc of any form) may cause /// the returned value here to be invalidated. Use with caution! /// /// Additionally the returned object can be safely mutated but the /// input slice isn't guaranteed to be mutable. /// /// Finally, the returned object is disconnected from the input /// slice's lifetime, so there's no guarantee that the data is read /// at the right time. pub unsafe fn view(rust: &[$ty]) -> $name { let buf = wasm_bindgen::memory(); let mem = buf.unchecked_ref::(); $name::new_with_byte_offset_and_length( &mem.buffer(), rust.as_ptr() as u32, rust.len() as u32, ) } /// Creates a JS typed array which is a view into wasm's linear /// memory at the specified pointer with specified length. /// /// This function returns a new typed array which is a view into /// wasm's memory. This view does not copy the underlying data. /// /// # Unsafety /// /// Views into WebAssembly memory are only valid so long as the /// backing buffer isn't resized in JS. Once this function is called /// any future calls to `Box::new` (or malloc of any form) may cause /// the returned value here to be invalidated. Use with caution! /// /// Additionally the returned object can be safely mutated, /// the changes are guranteed to be reflected in the input array. pub unsafe fn view_mut_raw(ptr: *mut $ty, length: usize) -> $name { let buf = wasm_bindgen::memory(); let mem = buf.unchecked_ref::(); $name::new_with_byte_offset_and_length( &mem.buffer(), ptr as u32, length as u32 ) } fn raw_copy_to(&self, dst: &mut [$ty]) { let buf = wasm_bindgen::memory(); let mem = buf.unchecked_ref::(); let all_wasm_memory = $name::new(&mem.buffer()); let offset = dst.as_ptr() as usize / mem::size_of::<$ty>(); all_wasm_memory.set(self, offset as u32); } /// Copy the contents of this JS typed array into the destination /// Rust slice. /// /// This function will efficiently copy the memory from a typed /// array into this wasm module's own linear memory, initializing /// the memory destination provided. /// /// # Panics /// /// This function will panic if this typed array's length is /// different than the length of the provided `dst` array. pub fn copy_to(&self, dst: &mut [$ty]) { assert_eq!(self.length() as usize, dst.len()); self.raw_copy_to(dst); } /// Efficiently copies the contents of this JS typed array into a new Vec. pub fn to_vec(&self) -> Vec<$ty> { let mut output = vec![$ty::default(); self.length() as usize]; self.raw_copy_to(&mut output); output } } impl<'a> From<&'a [$ty]> for $name { #[inline] fn from(slice: &'a [$ty]) -> $name { // This is safe because the `new` function makes a copy if its argument is a TypedArray unsafe { $name::new(&$name::view(slice)) } } } )*); } arrays! { /// `Int8Array()` /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array Int8Array: i8, /// `Int16Array()` /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array Int16Array: i16, /// `Int32Array()` /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array Int32Array: i32, /// `Uint8Array()` /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array Uint8Array: u8, /// `Uint8ClampedArray()` /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray Uint8ClampedArray: u8, /// `Uint16Array()` /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array Uint16Array: u16, /// `Uint32Array()` /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array Uint32Array: u32, /// `Float32Array()` /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array: f32, /// `Float64Array()` /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array Float64Array: f64, } js-sys-0.3.35/tests/headless.js010066400017500001750000000001471334577436300145660ustar0000000000000000export function is_array_values_supported() { return typeof Array.prototype.values === 'function'; } js-sys-0.3.35/tests/headless.rs010066400017500001750000000021531354317317300145650ustar0000000000000000#![cfg(target_arch = "wasm32")] extern crate js_sys; extern crate wasm_bindgen; extern crate wasm_bindgen_test; use js_sys::Array; use wasm_bindgen::prelude::*; use wasm_bindgen_test::*; wasm_bindgen_test_configure!(run_in_browser); #[wasm_bindgen(module = "/tests/headless.js")] extern "C" { fn is_array_values_supported() -> bool; } #[wasm_bindgen] extern "C" { type ValuesIterator; #[wasm_bindgen(method, structural)] fn next(this: &ValuesIterator) -> IterNext; type IterNext; #[wasm_bindgen(method, getter, structural)] fn value(this: &IterNext) -> JsValue; #[wasm_bindgen(method, getter, structural)] fn done(this: &IterNext) -> bool; } #[wasm_bindgen_test] fn array_iterator_values() { if !is_array_values_supported() { return; } let array = Array::new(); array.push(&8.into()); array.push(&3.into()); array.push(&2.into()); let iter = ValuesIterator::from(JsValue::from(array.values())); assert_eq!(iter.next().value(), 8); assert_eq!(iter.next().value(), 3); assert_eq!(iter.next().value(), 2); assert!(iter.next().done()); } js-sys-0.3.35/tests/wasm/Array.js010066400017500001750000000002201356105656700150120ustar0000000000000000// Used for `Array.rs` tests exports.populate_array = function(arr, start, len) { for (i = 0; i < len; i++) { arr[i] = start + i; } }; js-sys-0.3.35/tests/wasm/Array.rs010066400017500001750000000406731360512735500150330ustar0000000000000000use js_sys::*; use std::iter::FromIterator; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use wasm_bindgen::JsValue; use wasm_bindgen_test::*; macro_rules! js_array { ($($e:expr),*) => ({ let __x = Array::new(); $(__x.push(&JsValue::from($e));)* __x }) } macro_rules! array { ($($e:expr),*) => ({ let mut __x = Vec::new(); $(__x.push(JsValue::from($e));)* __x }) } fn to_rust(arr: &Array) -> Vec { let mut result = Vec::with_capacity(arr.length() as usize); arr.for_each(&mut |x, _, _| result.push(x)); result } #[wasm_bindgen_test] fn from_iter() { assert_eq!( to_rust( &vec![JsValue::from("a"), JsValue::from("b"), JsValue::from("c"),] .into_iter() .collect() ), vec!["a", "b", "c"], ); assert_eq!( to_rust( &vec![JsValue::from("a"), JsValue::from("b"), JsValue::from("c"),] .iter() .collect() ), vec!["a", "b", "c"], ); let array = js_array![1u32, 2u32, 3u32]; assert_eq!( to_rust(&vec![array.clone(),].into_iter().collect()), vec![JsValue::from(array.clone())], ); assert_eq!( to_rust(&vec![array.clone(),].iter().collect()), vec![JsValue::from(array)], ); assert_eq!( to_rust(&vec![5, 10, 20,].into_iter().map(JsValue::from).collect()), vec![5, 10, 20], ); assert_eq!( to_rust(&Array::from_iter(&[ JsValue::from("a"), JsValue::from("b"), JsValue::from("c"), ])), vec!["a", "b", "c"], ); let v = vec!["a", "b", "c"]; assert_eq!( to_rust(&Array::from_iter(v.into_iter().map(|s| JsValue::from(s)))), vec!["a", "b", "c"], ); } #[wasm_bindgen_test] fn to_vec() { let array = vec![JsValue::from("a"), JsValue::from("b"), JsValue::from("c")] .into_iter() .collect::(); assert_eq!( array.to_vec(), vec![JsValue::from("a"), JsValue::from("b"), JsValue::from("c")] ); } #[wasm_bindgen_test] fn iter() { let array = vec![JsValue::from("a"), JsValue::from("b"), JsValue::from("c")] .into_iter() .collect::(); assert_eq!( array.iter().collect::>(), vec![JsValue::from("a"), JsValue::from("b"), JsValue::from("c")] ); let mut iter = array.iter(); assert_eq!(iter.size_hint(), (3, Some(3))); assert_eq!(iter.next(), Some(JsValue::from("a"))); assert_eq!(iter.size_hint(), (2, Some(2))); assert_eq!(iter.next_back(), Some(JsValue::from("c"))); assert_eq!(iter.size_hint(), (1, Some(1))); assert_eq!(iter.next_back(), Some(JsValue::from("b"))); assert_eq!(iter.size_hint(), (0, Some(0))); assert_eq!(iter.next(), None); assert_eq!(iter.size_hint(), (0, Some(0))); assert_eq!(iter.next_back(), None); let mut iter = array.iter(); assert_eq!(iter.size_hint(), (3, Some(3))); assert_eq!(iter.next(), Some(JsValue::from("a"))); assert_eq!(iter.size_hint(), (2, Some(2))); assert_eq!(iter.next(), Some(JsValue::from("b"))); assert_eq!(iter.size_hint(), (1, Some(1))); assert_eq!(iter.next(), Some(JsValue::from("c"))); assert_eq!(iter.size_hint(), (0, Some(0))); assert_eq!(iter.next(), None); let mut iter = array.iter(); assert_eq!(iter.size_hint(), (3, Some(3))); assert_eq!(iter.next_back(), Some(JsValue::from("c"))); assert_eq!(iter.size_hint(), (2, Some(2))); assert_eq!(iter.next_back(), Some(JsValue::from("b"))); assert_eq!(iter.size_hint(), (1, Some(1))); assert_eq!(iter.next_back(), Some(JsValue::from("a"))); assert_eq!(iter.size_hint(), (0, Some(0))); assert_eq!(iter.next_back(), None); } #[wasm_bindgen_test] fn new_with_length() { let array = Array::new_with_length(5); assert_eq!(array.length(), 5); assert_eq!(array.get(4), JsValue::undefined()); array.set(4, JsValue::from("a")); assert_eq!(array.get(4), "a"); assert_eq!(array.length(), 5); } #[wasm_bindgen_test] fn get() { let array = js_array!["a", "c", "x", "n"]; assert_eq!(array.length(), 4); assert_eq!(array.get(0), "a"); assert_eq!(array.get(3), "n"); assert_eq!(array.get(4), JsValue::undefined()); } #[wasm_bindgen_test] fn set() { let array = js_array!["a", "c", "x", "n"]; assert_eq!(array.length(), 4); assert_eq!(array.get(0), "a"); array.set(0, JsValue::from("b")); assert_eq!(array.get(0), "b"); assert_eq!(array.get(4), JsValue::undefined()); assert_eq!(array.length(), 4); array.set(4, JsValue::from("d")); assert_eq!(array.length(), 5); assert_eq!(array.get(4), "d"); assert_eq!(array.get(10), JsValue::undefined()); assert_eq!(array.length(), 5); array.set(10, JsValue::from("z")); assert_eq!(array.length(), 11); assert_eq!(array.get(10), "z"); assert_eq!(array.get(9), JsValue::undefined()); } #[wasm_bindgen_test] fn delete() { let array = js_array!["a", "c", "x", "n"]; assert_eq!(array.length(), 4); assert_eq!(array.get(0), "a"); array.delete(0); assert_eq!(array.get(0), JsValue::undefined()); } #[wasm_bindgen_test] fn filter() { let array = js_array!["a", "c", "x", "n"]; assert!(array.filter(&mut |x, _, _| x.as_f64().is_some()).length() == 0); let array = js_array![1, 2, 3, 4]; assert_eq!( array.filter(&mut |x, _, _| x.as_f64().is_some()).length(), 4 ); let array = js_array!["a", 1, "b", 2]; assert_eq!( array.filter(&mut |x, _, _| x.as_f64().is_some()).length(), 2 ); } #[wasm_bindgen_test] fn flat() { let array = js_array![ js_array!["a", "b", "c"], "d", js_array!["e", js_array!["f", "g"]] ]; assert_eq!( to_rust(&array.flat(1).slice(0, 5)), vec!["a", "b", "c", "d", "e"] ); assert_eq!(array.flat(1).length(), 6); assert_eq!( to_rust(&array.flat(2)), vec!["a", "b", "c", "d", "e", "f", "g"] ); } #[wasm_bindgen_test] fn flat_map() { let array = js_array![1, 2, 3, 1]; assert_eq!( to_rust( &array.flat_map(&mut |val, _, _| match val.as_f64().map(|v| v as i32) { Some(1) => vec![JsString::from("x").into(), JsString::from("x").into()], Some(2) => vec![], Some(3) => vec![JsString::from("z").into()], _ => panic!("Unexpected conversion"), }) ), vec!["x", "x", "z", "x", "x"] ); } #[wasm_bindgen_test] fn index_of() { let chars = js_array!["a", "c", "x", "n"]; assert_eq!(chars.index_of(&"x".into(), 0), 2); assert_eq!(chars.index_of(&"z".into(), 0), -1); assert_eq!(chars.index_of(&"x".into(), -3), 2); assert_eq!(chars.index_of(&"z".into(), -2), -1); } #[wasm_bindgen_test] fn is_array() { assert!(Array::is_array(&Array::new().into())); assert!(Array::is_array(&js_array![1].into())); assert!(!Array::is_array(&JsValue::null())); assert!(!Array::is_array(&JsValue::undefined())); assert!(!Array::is_array(&10.into())); assert!(!Array::is_array(&"x".into())); assert!(!Array::is_array(&true.into())); assert!(!Array::is_array(&false.into())); } #[wasm_bindgen_test] fn sort() { let array = js_array![3, 1, 6, 2]; let sorted = array.sort(); assert_eq!(to_rust(&sorted), array![1, 2, 3, 6]); } #[wasm_bindgen_test] fn some() { let array = js_array!["z", 1, "y", 2]; assert!(array.some(&mut |e| e == JsValue::from(2))); assert!(array.some(&mut |e| e == JsValue::from("y"))); assert!(!array.some(&mut |e| e == JsValue::from("nope"))); } #[wasm_bindgen_test] fn last_index_of() { let characters = js_array!["a", "x", "c", "x", "n"]; assert_eq!(characters.last_index_of(&"x".into(), 5), 3); assert_eq!(characters.last_index_of(&"z".into(), 5), -1); assert_eq!(characters.last_index_of(&"x".into(), 2), 1); assert_eq!(characters.last_index_of(&"x".into(), 0), -1); } #[wasm_bindgen_test] fn join() { let characters = js_array!["a", "c", "x", "n"]; assert_eq!(String::from(characters.join(", ")), "a, c, x, n"); assert_eq!(String::from(characters.join("/")), "a/c/x/n"); } #[wasm_bindgen_test] fn slice() { let characters = js_array!["a", "c", "x", "n", 1, "8"]; let subset = characters.slice(1, 3); assert_eq!(to_rust(&subset), array!["c", "x"]); } #[wasm_bindgen_test] fn splice() { let characters = js_array!["a", "c", "x", "n", 1, "8"]; let removed = characters.splice(1, 3, &"b".into()); assert_eq!(to_rust(&removed), array!["c", "x", "n"]); assert_eq!(to_rust(&characters), array!["a", "b", 1, "8"]); } #[wasm_bindgen_test] fn fill() { let characters = js_array!["a", "c", "x", "n", 1, "8"]; let subset = characters.fill(&0.into(), 0, 3); assert_eq!(to_rust(&subset), array![0, 0, 0, "n", 1, "8"]); } #[wasm_bindgen_test] fn copy_within() { let characters = js_array![8, 5, 4, 3, 1, 2]; characters.copy_within(1, 4, 5); assert_eq!(to_rust(&characters)[1], JsValue::from(1)); // if negatives were used characters.copy_within(-1, -3, -2); assert_eq!(to_rust(&characters)[5], JsValue::from(3)); } #[wasm_bindgen_test] fn of() { let a = JsValue::from("a"); let b = JsValue::from("b"); let c = JsValue::from("c"); let arr = Array::of3(&a, &b, &c); let vec = to_rust(&arr); assert_eq!(vec.len(), 3); assert_eq!(vec[0], a); assert_eq!(vec[1], b); assert_eq!(vec[2], c); } #[wasm_bindgen_test] fn pop() { let characters = js_array![8, 5, 4, 3, 1, 2]; let item = characters.pop(); assert_eq!(item, JsValue::from(2)); assert_eq!(characters.length(), 5); } #[wasm_bindgen_test] fn push() { let characters = js_array![8, 5, 4, 3, 1, 2]; let length = characters.push(&"a".into()); assert_eq!(length, 7); assert_eq!(to_rust(&characters)[6], "a"); } #[wasm_bindgen_test] fn reverse() { let characters = js_array![8, 5, 4, 3, 1, 2]; let reversed = characters.reverse(); assert_eq!(to_rust(&reversed), array![2, 1, 3, 4, 5, 8]); } #[wasm_bindgen_test] fn shift() { let characters = js_array![8, 5, 4, 3, 1, 2]; let shiftedItem = characters.shift(); assert_eq!(shiftedItem, 8); assert_eq!(characters.length(), 5); } #[wasm_bindgen_test] fn unshift() { let characters = js_array![8, 5, 4, 3, 1, 2]; let length = characters.unshift(&"abba".into()); assert_eq!(length, 7); assert_eq!(to_rust(&characters)[0], "abba"); } #[wasm_bindgen_test] fn to_string() { let characters = js_array![8, 5, 4, 3, 1, 2]; assert_eq!(String::from(characters.to_string()), "8,5,4,3,1,2"); } #[wasm_bindgen_test] fn includes() { let characters = js_array![8, 5, 4, 3, 1, 2]; assert!(characters.includes(&2.into(), 0)); assert!(!characters.includes(&9.into(), 0)); assert!(!characters.includes(&3.into(), 4)); } #[wasm_bindgen_test] fn concat() { let arr1 = js_array![1, 2, 3]; let arr2 = js_array![4, 5, 6]; let new_array = arr1.concat(&arr2); assert_eq!(to_rust(&new_array), array![1, 2, 3, 4, 5, 6]); } #[wasm_bindgen_test] fn length() { let characters = js_array![8, 5, 4, 3, 1, 2]; assert_eq!(characters.length(), 6); assert_eq!(Array::new().length(), 0); } #[wasm_bindgen_test] fn every() { let even = js_array![2, 4, 6, 8]; assert!(even.every(&mut |x, _, _| x.as_f64().unwrap() % 2.0 == 0.0)); let odd = js_array![1, 3, 5, 7]; assert!(!odd.every(&mut |x, _, _| x.as_f64().unwrap() % 2.0 == 0.0)); let mixed = js_array![2, 3, 4, 5]; assert!(!mixed.every(&mut |x, _, _| x.as_f64().unwrap() % 2.0 == 0.0)); } #[wasm_bindgen_test] fn find() { let even = js_array![2, 4, 6, 8]; assert_eq!( even.find(&mut |x, _, _| x.as_f64().unwrap() % 2.0 == 0.0), 2 ); let odd = js_array![1, 3, 5, 7]; assert_eq!( odd.find(&mut |x, _, _| x.as_f64().unwrap() % 2.0 == 0.0), JsValue::undefined(), ); let mixed = js_array![3, 5, 7, 10]; assert_eq!( mixed.find(&mut |x, _, _| x.as_f64().unwrap() % 2.0 == 0.0), 10 ); } #[wasm_bindgen_test] fn map() { let numbers = js_array![1, 4, 9]; let sqrt = numbers.map(&mut |x, _, _| x.as_f64().unwrap().sqrt().into()); assert_eq!(to_rust(&sqrt), array![1, 2, 3]); } #[wasm_bindgen_test] fn reduce() { let arr = js_array!["0", "1", "2", "3", "4"].reduce( &mut |ac, cr, _, _| { format!("{}{}", &ac.as_string().unwrap(), &cr.as_string().unwrap()).into() }, &"".into(), ); assert_eq!(arr, "01234"); } #[wasm_bindgen_test] fn reduce_right() { let arr = js_array!["0", "1", "2", "3", "4"].reduce_right( &mut |ac, cr, _, _| { format!("{}{}", &ac.as_string().unwrap(), &cr.as_string().unwrap()).into() }, &"".into(), ); assert_eq!(arr, "43210"); } #[wasm_bindgen_test] fn find_index() { let even = js_array![2, 4, 6, 8]; assert_eq!( even.find_index(&mut |e, _, _| e.as_f64().unwrap() % 2. == 0.), 0 ); let odd = js_array![1, 3, 5, 7]; assert_eq!( odd.find_index(&mut |e, _, _| e.as_f64().unwrap() % 2. == 0.), -1 ); let mixed = js_array![3, 5, 7, 10]; assert_eq!( mixed.find_index(&mut |e, _, _| e.as_f64().unwrap() % 2. == 0.), 3 ); } #[wasm_bindgen_test] fn to_locale_string() { let output = js_array![1, "a", Date::new(&"21 Dec 1997 14:12:00 UTC".into())] .to_locale_string(&"en".into(), &JsValue::undefined()); assert!(String::from(output).len() > 0); } #[wasm_bindgen_test] fn for_each() { fn sum_indices_of_evens(array: &Array) -> u32 { let mut res = 0; array.for_each(&mut |elem: JsValue, i, _| match elem.as_f64() { Some(val) if val % 2. == 0. => res += i, _ => {} }); res } assert_eq!(sum_indices_of_evens(&js_array![2, 4, 6, 8]), 0 + 1 + 2 + 3); assert_eq!(sum_indices_of_evens(&js_array![1, 3, 5, 7]), 0); assert_eq!(sum_indices_of_evens(&js_array![3, 5, 7, 10]), 3); } #[wasm_bindgen_test] fn array_inheritance() { let array = Array::new(); assert!(array.is_instance_of::()); assert!(array.is_instance_of::()); let _: &Object = array.as_ref(); } #[wasm_bindgen(module = "tests/wasm/Array.js")] extern "C" { fn populate_array(arr: JsValue, start: JsValue, len: JsValue) -> JsValue; } fn test_array_view_mut_raw( sut: unsafe fn(*mut ElemT, usize) -> ArrT, u8ToElem: fn(u8) -> ElemT, arrToJsValue: fn(ArrT) -> JsValue, ) { let start: u8 = 10; let len: usize = 32; let end: u8 = start + len as u8; let mut buffer: Vec = Vec::new(); buffer.reserve(len); unsafe { let array: ArrT = sut(buffer.as_mut_ptr(), len); populate_array( arrToJsValue(array), JsValue::from(start), JsValue::from(len as u32), ); buffer.set_len(len); } let expected: Vec = (start..end).map(u8ToElem).collect(); assert_eq!(buffer, expected) } #[wasm_bindgen_test] fn Int8Array_view_mut_raw() { fn u8Toi8_unsafe(x: u8) -> i8 { x as i8 } test_array_view_mut_raw( js_sys::Int8Array::view_mut_raw, u8Toi8_unsafe, JsValue::from, ); } #[wasm_bindgen_test] fn Int16Array_view_mut_raw() { test_array_view_mut_raw(js_sys::Int16Array::view_mut_raw, i16::from, JsValue::from); } #[wasm_bindgen_test] fn Int32Array_view_mut_raw() { test_array_view_mut_raw(js_sys::Int32Array::view_mut_raw, i32::from, JsValue::from); } #[wasm_bindgen_test] fn Uint8Array_view_mut_raw() { test_array_view_mut_raw(js_sys::Uint8Array::view_mut_raw, u8::from, JsValue::from); } #[wasm_bindgen_test] fn Uint8ClampedArray_view_mut_raw() { test_array_view_mut_raw( js_sys::Uint8ClampedArray::view_mut_raw, u8::from, JsValue::from, ); } #[wasm_bindgen_test] fn Uint16Array_view_mut_raw() { test_array_view_mut_raw(js_sys::Uint16Array::view_mut_raw, u16::from, JsValue::from); } #[wasm_bindgen_test] fn Uint32Array_view_mut_raw() { test_array_view_mut_raw(js_sys::Uint32Array::view_mut_raw, u32::from, JsValue::from); } #[wasm_bindgen_test] fn Float32Array_view_mut_raw() { test_array_view_mut_raw(js_sys::Float32Array::view_mut_raw, f32::from, JsValue::from); } #[wasm_bindgen_test] fn Float64Array_view_mut_raw() { test_array_view_mut_raw(js_sys::Float64Array::view_mut_raw, f64::from, JsValue::from); } js-sys-0.3.35/tests/wasm/ArrayBuffer.rs010066400017500001750000000017751347603543600161710ustar0000000000000000use js_sys::*; use wasm_bindgen::JsCast; use wasm_bindgen::JsValue; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn new() { let x = ArrayBuffer::new(42); let y: JsValue = x.into(); assert!(y.is_object()); } #[wasm_bindgen_test] fn byte_length() { let buf = ArrayBuffer::new(42); assert_eq!(buf.byte_length(), 42); } #[wasm_bindgen_test] fn is_view() { let x = Uint8Array::new(&JsValue::from(42)); assert!(ArrayBuffer::is_view(&JsValue::from(x))); } #[wasm_bindgen_test] fn slice() { let buf = ArrayBuffer::new(4); let slice = buf.slice(2); assert!(JsValue::from(slice).is_object()); } #[wasm_bindgen_test] fn slice_with_end() { let buf = ArrayBuffer::new(4); let slice = buf.slice_with_end(1, 2); assert!(JsValue::from(slice).is_object()); } #[wasm_bindgen_test] fn arraybuffer_inheritance() { let buf = ArrayBuffer::new(4); assert!(buf.is_instance_of::()); assert!(buf.is_instance_of::()); let _: &Object = buf.as_ref(); } js-sys-0.3.35/tests/wasm/ArrayIterator.rs010066400017500001750000000021331346762025200165320ustar0000000000000000use js_sys::*; use wasm_bindgen::JsValue; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn keys() { let array = Array::new(); array.push(&JsValue::from(1)); array.push(&JsValue::from(2)); array.push(&JsValue::from(3)); array.push(&JsValue::from(4)); array.push(&JsValue::from(5)); let new_array = Array::from(&array.keys().into()); let mut result = Vec::new(); new_array.for_each(&mut |i, _, _| result.push(i.as_f64().unwrap())); assert_eq!(result, [0.0, 1.0, 2.0, 3.0, 4.0]); } #[wasm_bindgen_test] fn entries() { let array = Array::new(); array.push(&JsValue::from(1)); array.push(&JsValue::from(2)); array.push(&JsValue::from(3)); array.push(&JsValue::from(4)); array.push(&JsValue::from(5)); let new_array = Array::from(&array.entries().into()); new_array.for_each(&mut |a, i, _| { assert!(a.is_object()); let array: Array = a.into(); assert_eq!(array.shift().as_f64().unwrap(), i as f64); assert_eq!(array.shift().as_f64().unwrap(), (i + 1) as f64); assert_eq!(array.length(), 0); }); } js-sys-0.3.35/tests/wasm/Boolean.rs010066400017500001750000000011341347603543600153250ustar0000000000000000use js_sys::*; use wasm_bindgen::JsCast; use wasm_bindgen::JsValue; use wasm_bindgen_test::*; #[allow(deprecated)] #[wasm_bindgen_test] fn new_undefined() { assert_eq!(Boolean::new(&JsValue::undefined()).value_of(), false); } #[allow(deprecated)] #[wasm_bindgen_test] fn new_truely() { assert_eq!(Boolean::new(&JsValue::from("foo")).value_of(), true); } #[allow(deprecated)] #[wasm_bindgen_test] fn boolean_inheritance() { let b = Boolean::new(&JsValue::from(true)); assert!(b.is_instance_of::()); assert!(b.is_instance_of::()); let _: &Object = b.as_ref(); } js-sys-0.3.35/tests/wasm/DataView.rs010066400017500001750000000052011346762025200154450ustar0000000000000000use js_sys::*; use wasm_bindgen::JsCast; use wasm_bindgen::JsValue; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn test() { let bytes = Int8Array::new(&JsValue::from(10)); // TODO: figure out how to do `bytes[2] = 2` bytes.subarray(2, 3).fill(2, 0, 1); let v = DataView::new(&bytes.buffer(), 2, 8); assert_eq!(v.byte_offset(), 2); assert_eq!(v.byte_length(), 8); assert_eq!(v.get_int8(0), 2); assert_eq!(v.get_uint8(0), 2); v.set_int8(0, 42); assert_eq!(v.get_int8(0), 42); v.set_uint8(0, 255); assert_eq!(v.get_uint8(0), 255); v.set_int16(0, 32767); assert_eq!(v.get_int16(0), 32767); v.set_int16_endian(0, 0x1122, true); assert_eq!(v.get_int16_endian(0, true), 0x1122); assert_eq!(v.get_int16_endian(0, false), 0x2211); v.set_uint16(0, 65535); assert_eq!(v.get_uint16(0), 65535); v.set_uint16_endian(0, 0x1122, true); assert_eq!(v.get_uint16_endian(0, true), 0x1122); assert_eq!(v.get_uint16_endian(0, false), 0x2211); v.set_int32(0, 123456789); assert_eq!(v.get_int32(0), 123456789); v.set_int32_endian(0, 0x11223344, true); assert_eq!(v.get_int32_endian(0, true), 0x11223344); assert_eq!(v.get_int32_endian(0, false), 0x44332211); v.set_uint32(0, 3_123_456_789); assert_eq!(v.get_uint32(0), 3_123_456_789); v.set_uint32_endian(0, 0x11223344, true); assert_eq!(v.get_uint32_endian(0, true), 0x11223344); assert_eq!(v.get_uint32_endian(0, false), 0x44332211); v.set_float32(0, 100.123); assert_eq!(v.get_float32(0), 100.123); v.set_float32_endian(0, f32::from_bits(0x11223344), true); assert_eq!(v.get_float32_endian(0, true), f32::from_bits(0x11223344)); assert_eq!(v.get_float32_endian(0, false), f32::from_bits(0x44332211)); v.set_float64(0, 123456789.123456); assert_eq!(v.get_float64(0), 123456789.123456); v.set_float64_endian(0, f64::from_bits(0x1122334411223344), true); assert_eq!( v.get_float64_endian(0, true), f64::from_bits(0x1122334411223344) ); assert_eq!( v.get_float64_endian(0, false), f64::from_bits(0x4433221144332211) ); v.set_int8(0, 42); // TODO: figure out how to do `bytes[2]` bytes .subarray(2, 3) .for_each(&mut |x, _, _| assert_eq!(x, 42)); } #[wasm_bindgen_test] fn dataview_inheritance() { let bytes = Int8Array::new(&JsValue::from(10)); // TODO: figure out how to do `bytes[2] = 2` bytes.subarray(2, 3).fill(2, 0, 1); let v = DataView::new(&bytes.buffer(), 2, 8); assert!(v.is_instance_of::()); assert!(v.is_instance_of::()); let _: &Object = v.as_ref(); } js-sys-0.3.35/tests/wasm/Date.rs010066400017500001750000000350171354271045500146250ustar0000000000000000use js_sys::*; use wasm_bindgen::JsCast; use wasm_bindgen::JsValue; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn get_date() { let date = Date::new(&"August 19, 1975 23:15:30".into()); assert_eq!(date.get_date(), 19); } #[wasm_bindgen_test] fn get_day() { let date = Date::new(&"August 19, 1975 23:15:30".into()); assert_eq!(date.get_day(), 2); } #[wasm_bindgen_test] fn get_full_year() { let date = Date::new(&"July 20, 1969 00:20:18".into()); let abbr = Date::new(&"Thu, 06 Sep 12 00:00:00".into()); assert_eq!(date.get_full_year(), 1969); assert_eq!(abbr.get_full_year(), 2012); } #[wasm_bindgen_test] fn get_hours() { let date = Date::new(&"March 13, 08 04:20".into()); assert_eq!(date.get_hours(), 4); } #[wasm_bindgen_test] fn get_milliseconds() { let date = Date::new(&"1995-12-17T09:24:00Z".into()); let ms = Date::new(&"1995-12-17T09:24:00.123Z".into()); assert_eq!(date.get_milliseconds(), 0); assert_eq!(ms.get_milliseconds(), 123); } #[wasm_bindgen_test] fn get_minutes() { let date = Date::new(&"March 13, 08 04:20".into()); assert_eq!(date.get_minutes(), 20); } #[wasm_bindgen_test] fn get_month() { let date = Date::new(&"July 20, 69 00:20:18".into()); assert_eq!(date.get_month(), 6); } #[wasm_bindgen_test] fn get_seconds() { let date = Date::new(&"July 20, 69 00:20:18".into()); assert_eq!(date.get_seconds(), 18); } #[wasm_bindgen_test] fn get_time() { let date = Date::new(&"July 20, 69 00:20:18 GMT+00:00".into()); assert_eq!(date.get_time(), -14254782000.0); } #[wasm_bindgen_test] fn get_timezone_offset() { let date1 = Date::new(&"August 19, 1975 23:15:30 GMT+07:00".into()); let date2 = Date::new(&"August 19, 1975 23:15:30 GMT-02:00".into()); assert_eq!(date1.get_timezone_offset(), date2.get_timezone_offset()); } #[wasm_bindgen_test] fn get_utc_date() { let date1 = Date::new(&"August 19, 1975 23:15:30 GMT+11:00".into()); let date2 = Date::new(&"August 19, 1975 23:15:30 GMT-11:00".into()); assert_eq!(date1.get_utc_date(), 19); assert_eq!(date2.get_utc_date(), 20); } #[wasm_bindgen_test] fn get_utc_day() { let date1 = Date::new(&"August 19, 1975 23:15:30 GMT+11:00".into()); let date2 = Date::new(&"August 19, 1975 23:15:30 GMT-11:00".into()); assert_eq!(date1.get_utc_day(), 2); assert_eq!(date2.get_utc_day(), 3); } #[wasm_bindgen_test] fn get_utc_full_year() { let date1 = Date::new(&"December 31, 1975, 23:15:30 GMT+11:00".into()); let date2 = Date::new(&"December 31, 1975, 23:15:30 GMT-11:00".into()); assert_eq!(date1.get_utc_full_year(), 1975); assert_eq!(date2.get_utc_full_year(), 1976); } #[wasm_bindgen_test] fn get_utc_hours() { let date1 = Date::new(&"December 31, 1975, 23:15:30 GMT+11:00".into()); let date2 = Date::new(&"December 31, 1975, 23:15:30 GMT-11:00".into()); assert_eq!(date1.get_utc_hours(), 12); assert_eq!(date2.get_utc_hours(), 10); } #[wasm_bindgen_test] fn get_utc_milliseconds() { let date = Date::new(&"2018-01-02T03:04:05.678Z".into()); assert_eq!(date.get_utc_milliseconds(), 678); } #[wasm_bindgen_test] fn get_utc_minutes() { let date1 = Date::new(&"1 January 2000 03:15:30 GMT+07:00".into()); let date2 = Date::new(&"1 January 2000 03:15:30 GMT+03:30".into()); assert_eq!(date1.get_utc_minutes(), 15); assert_eq!(date2.get_utc_minutes(), 45); } #[wasm_bindgen_test] fn get_utc_month() { let date1 = Date::new(&"December 31, 1975, 23:15:30 GMT+11:00".into()); let date2 = Date::new(&"December 31, 1975, 23:15:30 GMT-11:00".into()); assert_eq!(date1.get_utc_month(), 11); assert_eq!(date2.get_utc_month(), 0); } #[wasm_bindgen_test] fn get_utc_seconds() { let date = Date::new(&"July 20, 1969, 20:18:04 UTC".into()); assert_eq!(date.get_utc_seconds(), 4); } #[wasm_bindgen_test] fn new() { assert!(JsValue::from(Date::new(&JsValue::undefined())).is_object()); } #[wasm_bindgen_test] fn new_with_year_month() { let date1 = Date::new_with_year_month(1975, 7); assert_eq!(date1.get_full_year(), 1975); assert_eq!(date1.get_month(), 7); } #[wasm_bindgen_test] fn new_with_year_month_day() { let date1 = Date::new_with_year_month_day(1975, 7, 8); assert_eq!(date1.get_full_year(), 1975); assert_eq!(date1.get_month(), 7); assert_eq!(date1.get_date(), 8); } #[wasm_bindgen_test] fn new_with_year_month_day_hr() { let date1 = Date::new_with_year_month_day_hr(1975, 7, 8, 4); assert_eq!(date1.get_full_year(), 1975); assert_eq!(date1.get_month(), 7); assert_eq!(date1.get_date(), 8); assert_eq!(date1.get_hours(), 4); } #[wasm_bindgen_test] fn new_with_year_month_day_hr_min() { let date1 = Date::new_with_year_month_day_hr_min(1975, 7, 8, 4, 35); assert_eq!(date1.get_full_year(), 1975); assert_eq!(date1.get_month(), 7); assert_eq!(date1.get_date(), 8); assert_eq!(date1.get_hours(), 4); assert_eq!(date1.get_minutes(), 35); } #[wasm_bindgen_test] fn new_with_year_month_day_hr_min_sec() { let date1 = Date::new_with_year_month_day_hr_min_sec(1975, 7, 8, 4, 35, 25); assert_eq!(date1.get_full_year(), 1975); assert_eq!(date1.get_month(), 7); assert_eq!(date1.get_date(), 8); assert_eq!(date1.get_hours(), 4); assert_eq!(date1.get_minutes(), 35); assert_eq!(date1.get_seconds(), 25); } #[wasm_bindgen_test] fn new_with_year_month_day_hr_min_sec_milli() { let date1 = Date::new_with_year_month_day_hr_min_sec_milli(1975, 7, 8, 4, 35, 25, 300); assert_eq!(date1.get_full_year(), 1975); assert_eq!(date1.get_month(), 7); assert_eq!(date1.get_date(), 8); assert_eq!(date1.get_hours(), 4); assert_eq!(date1.get_minutes(), 35); assert_eq!(date1.get_seconds(), 25); assert_eq!(date1.get_milliseconds(), 300); } #[wasm_bindgen_test] fn now() { assert!(Date::now() > 0.); } #[wasm_bindgen_test] fn parse() { let date = Date::parse("04 Dec 1995 00:12:00 GMT"); let zero = Date::parse("01 Jan 1970 00:00:00 GMT"); assert_eq!(date, 818035920000.0); assert_eq!(zero, 0.0); } #[wasm_bindgen_test] fn set_date() { let event1 = Date::new(&"August 19, 1975 23:15:30".into()); let event2 = Date::new(&"August 24, 1975 23:15:30".into()); let ms = event1.set_date(24); assert_eq!(ms, event2.get_time()); assert_eq!(event1.get_time(), event2.get_time()); assert_eq!(event1.get_date(), 24); } #[wasm_bindgen_test] fn set_full_year() { let event1 = Date::new(&"August 19, 1975 23:15:30".into()); let event2 = Date::new(&"August 19, 1976 23:15:30".into()); let ms = event1.set_full_year(1976); assert_eq!(ms, event2.get_time()); assert_eq!(event1.get_time(), event2.get_time()); assert_eq!(event1.get_full_year(), 1976); } #[wasm_bindgen_test] fn set_full_year_with_month() { let event1 = Date::new(&"August 19, 1976 23:15:30".into()); event1.set_full_year_with_month(1979, 4); assert_eq!(event1.get_full_year(), 1979); assert_eq!(event1.get_month(), 4); } #[wasm_bindgen_test] fn set_full_year_with_month_date() { let event1 = Date::new(&"August 19, 1976 23:15:30".into()); event1.set_full_year_with_month_date(1979, -1, 25); assert_eq!(event1.get_full_year(), 1978); assert_eq!(event1.get_month(), 11); assert_eq!(event1.get_date(), 25); } #[wasm_bindgen_test] fn set_hours() { let event1 = Date::new(&"August 19, 1975 23:15:30".into()); let event2 = Date::new(&"August 19, 1975 20:15:30".into()); let ms = event1.set_hours(20); assert_eq!(ms, event2.get_time()); assert_eq!(event1.get_time(), event2.get_time()); assert_eq!(event1.get_hours(), 20); } #[wasm_bindgen_test] fn set_milliseconds() { let event = Date::new(&"August 19, 1975 23:15:30".into()); let ms = event.set_milliseconds(456); assert_eq!(ms, event.get_time()); assert_eq!(event.get_milliseconds(), 456); } #[wasm_bindgen_test] fn set_minutes() { let event1 = Date::new(&"August 19, 1975 23:15:30".into()); let event2 = Date::new(&"August 19, 1975 23:45:30".into()); let ms = event1.set_minutes(45); assert_eq!(ms, event2.get_time()); assert_eq!(event1.get_time(), event2.get_time()); assert_eq!(event1.get_minutes(), 45); } #[wasm_bindgen_test] fn set_month() { let event1 = Date::new(&"August 19, 1975 23:15:30".into()); let event2 = Date::new(&"April 19, 1975 23:15:30".into()); let ms = event1.set_month(3); assert_eq!(ms, event2.get_time()); assert_eq!(event1.get_time(), event2.get_time()); assert_eq!(event1.get_month(), 3); } #[wasm_bindgen_test] fn set_seconds() { let event1 = Date::new(&"August 19, 1975 23:15:30".into()); let event2 = Date::new(&"August 19, 1975 23:15:42".into()); let ms = event1.set_seconds(42); assert_eq!(ms, event2.get_time()); assert_eq!(event1.get_time(), event2.get_time()); assert_eq!(event1.get_seconds(), 42); } #[wasm_bindgen_test] fn set_time() { let event1 = Date::new(&"July 1, 1999".into()); let event2 = Date::new(&JsValue::undefined()); let ms = event2.set_time(event1.get_time()); assert_eq!(ms, event2.get_time()); assert_eq!(event1.get_time(), event2.get_time()); } #[wasm_bindgen_test] fn set_utc_date() { let event1 = Date::new(&"August 19, 1975 23:15:30 GMT-3:00".into()); let event2 = Date::new(&"August 19, 1975 02:15:30 GMT".into()); let ms = event1.set_utc_date(19); assert_eq!(ms, event2.get_time()); assert_eq!(event1.get_time(), event2.get_time()); assert_eq!(event1.get_utc_date(), 19); } #[wasm_bindgen_test] fn set_utc_full_year() { let event1 = Date::new(&"December 31, 1975 23:15:30 GMT-3:00".into()); let event2 = Date::new(&"January 01, 1975 02:15:30 GMT".into()); let ms = event1.set_utc_full_year(1975); assert_eq!(ms, event2.get_time()); assert_eq!(event1.get_time(), event2.get_time()); assert_eq!(event1.get_utc_full_year(), 1975); } #[wasm_bindgen_test] fn set_utc_full_year_with_month() { let event1 = Date::new(&"December 31, 1975 23:15:30 GMT-3:00".into()); event1.set_utc_full_year_with_month(1975, 6); assert_eq!(event1.get_utc_full_year(), 1975); assert_eq!(event1.get_utc_month(), 6); } #[wasm_bindgen_test] fn set_utc_full_year_with_month_date() { let event1 = Date::new(&"December 31, 1975 23:15:30 GMT-3:00".into()); event1.set_utc_full_year_with_month_date(1975, -2, 21); assert_eq!(event1.get_utc_full_year(), 1974); assert_eq!(event1.get_utc_month(), 10); assert_eq!(event1.get_utc_date(), 21); } #[wasm_bindgen_test] fn set_utc_hours() { let event1 = Date::new(&"August 19, 1975 23:15:30 GMT-3:00".into()); let event2 = Date::new(&"August 20, 1975 23:15:30 GMT".into()); let ms = event1.set_utc_hours(23); assert_eq!(ms, event2.get_time()); assert_eq!(event1.get_time(), event2.get_time()); assert_eq!(event1.get_utc_hours(), 23); } #[wasm_bindgen_test] fn set_utc_milliseconds() { let event1 = Date::new(&"1995-12-17T09:24:00Z".into()); let event2 = Date::new(&"1995-12-17T09:24:00.420Z".into()); let ms = event1.set_utc_milliseconds(420); assert_eq!(ms, event2.get_time()); assert_eq!(event1.get_time(), event2.get_time()); assert_eq!(event1.get_utc_milliseconds(), 420); } #[wasm_bindgen_test] fn set_utc_minutes() { let event1 = Date::new(&"December 31, 1975, 23:15:30 GMT-3:00".into()); let event2 = Date::new(&"January 01, 1976 02:25:30 GMT".into()); let ms = event1.set_utc_minutes(25); assert_eq!(ms, event2.get_time()); assert_eq!(event1.get_time(), event2.get_time()); assert_eq!(event1.get_utc_minutes(), 25); } #[wasm_bindgen_test] fn set_utc_month() { let event1 = Date::new(&"December 31, 1975 23:15:30 GMT-3:00".into()); let event2 = Date::new(&"December 01, 1976 02:15:30 GMT".into()); let ms = event1.set_utc_month(11); assert_eq!(ms, event2.get_time()); assert_eq!(event1.get_time(), event2.get_time()); assert_eq!(event1.get_utc_month(), 11); } #[wasm_bindgen_test] fn set_utc_seconds() { let event1 = Date::new(&"December 31, 1975 23:15:30 GMT-3:00".into()); let event2 = Date::new(&"January 01, 1976 02:15:39 GMT".into()); let ms = event1.set_utc_seconds(39); assert_eq!(ms, event2.get_time()); assert_eq!(event1.get_time(), event2.get_time()); assert_eq!(event1.get_utc_seconds(), 39); } #[wasm_bindgen_test] fn to_date_string() { let date = Date::new(&"05 October 2011 14:48 UTC".into()); assert_eq!(JsValue::from(date.to_date_string()), "Wed Oct 05 2011"); } #[wasm_bindgen_test] fn to_iso_string() { let date = Date::new(&"05 October 2011 14:48 UTC".into()); assert_eq!( JsValue::from(date.to_iso_string()), "2011-10-05T14:48:00.000Z" ); } #[wasm_bindgen_test] fn to_json() { let date = Date::new(&"August 19, 1975 23:15:30 UTC".into()); assert_eq!(JsValue::from(date.to_json()), "1975-08-19T23:15:30.000Z"); } #[wasm_bindgen_test] fn to_locale_date_string() { let date = Date::new(&"August 19, 1975 23:15:30 UTC".into()); let s = date.to_locale_date_string("de-DE", &JsValue::undefined()); assert!(s.length() > 0); } #[wasm_bindgen_test] fn to_locale_string() { let date = Date::new(&"August 19, 1975 23:15:30 UTC".into()); let s = date.to_locale_string("de-DE", &JsValue::undefined()); assert!(s.length() > 0); } #[wasm_bindgen_test] fn to_locale_time_string() { let date = Date::new(&"August 19, 1975 23:15:30".into()); assert_eq!( JsValue::from(date.to_locale_time_string("en-US")), "11:15:30 PM", ); } #[wasm_bindgen_test] fn to_string() { let date = Date::new(&"August 19, 1975 23:15:30".into()); let s = JsValue::from(date.to_string()).as_string().unwrap(); assert_eq!(&s[0..15], "Tue Aug 19 1975"); } #[wasm_bindgen_test] fn to_time_string() { let date = Date::new(&"August 19, 1975 23:15:30".into()); let s = JsValue::from(date.to_time_string()).as_string().unwrap(); assert_eq!(&s[0..8], "23:15:30"); } #[wasm_bindgen_test] fn to_utc_string() { let date = Date::new(&"14 Jun 2017 00:00:00 PDT".into()); let s = JsValue::from(date.to_utc_string()).as_string().unwrap(); assert_eq!(s, "Wed, 14 Jun 2017 07:00:00 GMT"); } #[wasm_bindgen_test] fn utc() { assert_eq!(Date::utc(2018f64, 6f64), 1530403200000.0); } #[wasm_bindgen_test] fn value_of() { let date = Date::new(&Date::utc(2018f64, 6f64).into()); assert_eq!(date.value_of(), 1530403200000.0); } #[wasm_bindgen_test] fn date_inheritance() { let date = Date::new(&"August 19, 1975 23:15:30".into()); assert!(date.is_instance_of::()); assert!(date.is_instance_of::()); let _: &Object = date.as_ref(); } js-sys-0.3.35/tests/wasm/Error.rs010066400017500001750000000023061346762025200150350ustar0000000000000000use js_sys::*; use wasm_bindgen::JsCast; use wasm_bindgen::JsValue; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn new() { let error = Error::new("some message"); assert_eq!(JsValue::from(error.message()), "some message"); } #[wasm_bindgen_test] fn set_message() { let error = Error::new("test"); error.set_message("another"); assert_eq!(JsValue::from(error.message()), "another"); } #[wasm_bindgen_test] fn name() { let error = Error::new("test"); assert_eq!(JsValue::from(error.name()), "Error"); } #[wasm_bindgen_test] fn set_name() { let error = Error::new("test"); error.set_name("different"); assert_eq!(JsValue::from(error.name()), "different"); } #[wasm_bindgen_test] fn to_string() { let error = Error::new("error message 1"); assert_eq!(JsValue::from(error.to_string()), "Error: error message 1"); error.set_name("error_name_1"); assert_eq!( JsValue::from(error.to_string()), "error_name_1: error message 1" ); } #[wasm_bindgen_test] fn error_inheritance() { let error = Error::new("test"); assert!(error.is_instance_of::()); assert!(error.is_instance_of::()); let _: &Object = error.as_ref(); } js-sys-0.3.35/tests/wasm/EvalError.rs010066400017500001750000000034611346762025200156500ustar0000000000000000use js_sys::*; use wasm_bindgen::JsCast; use wasm_bindgen::JsValue; use wasm_bindgen_test::*; // Note: This error is not thrown any more, so there are no tests that will generate this error. // Instead we just have to manually construct it #[wasm_bindgen_test] fn new() { let error = EvalError::new("some message"); let base_error: &Error = error.dyn_ref().unwrap(); assert_eq!(JsValue::from(base_error.message()), "some message"); } #[wasm_bindgen_test] fn set_message() { let error = EvalError::new("test"); let base_error: &Error = error.dyn_ref().unwrap(); base_error.set_message("another"); assert_eq!(JsValue::from(base_error.message()), "another"); } #[wasm_bindgen_test] fn name() { let error = EvalError::new("test"); let base_error: &Error = error.dyn_ref().unwrap(); assert_eq!(JsValue::from(base_error.name()), "EvalError"); } #[wasm_bindgen_test] fn set_name() { let error = EvalError::new("test"); let base_error: &Error = error.dyn_ref().unwrap(); base_error.set_name("different"); assert_eq!(JsValue::from(base_error.name()), "different"); } #[wasm_bindgen_test] fn to_string() { let error = EvalError::new("error message 1"); let base_error: &Error = error.dyn_ref().unwrap(); assert_eq!( JsValue::from(base_error.to_string()), "EvalError: error message 1" ); base_error.set_name("error_name_1"); assert_eq!( JsValue::from(base_error.to_string()), "error_name_1: error message 1" ); } #[wasm_bindgen_test] fn evalerror_inheritance() { let error = EvalError::new("some message"); assert!(error.is_instance_of::()); assert!(error.is_instance_of::()); assert!(error.is_instance_of::()); let _: &Error = error.as_ref(); let _: &Object = error.as_ref(); } js-sys-0.3.35/tests/wasm/Function.js010066400017500001750000000007711351216350600155200ustar0000000000000000// Used for `Function.rs` tests exports.get_function_to_bind = function() { return function() { return this.x || 1; } }; exports.get_value_to_bind_to = function() { return { x: 2 }; }; exports.list = function() { return function() {return Array.prototype.slice.call(arguments);} }; exports.add_arguments = function() { return function(arg1, arg2) {return arg1 + arg2} }; exports.call_function = function(f) { return f(); }; exports.call_function_arg = function(f, arg1) { return f(arg1); };js-sys-0.3.35/tests/wasm/Function.rs010066400017500001750000000067541351216350600155370ustar0000000000000000use js_sys::*; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use wasm_bindgen_test::*; #[wasm_bindgen] extern "C" { #[wasm_bindgen(js_name = max, js_namespace = Math)] static MAX: Function; type ArrayPrototype; #[wasm_bindgen(method, getter, structural)] pub fn push(this: &ArrayPrototype) -> Function; #[wasm_bindgen(js_name = prototype, js_namespace = Array)] static ARRAY_PROTOTYPE2: ArrayPrototype; } #[wasm_bindgen_test] fn apply() { let args = Array::new(); args.push(&1.into()); args.push(&2.into()); args.push(&3.into()); assert_eq!(MAX.apply(&JsValue::undefined(), &args).unwrap(), 3); let arr = JsValue::from(Array::new()); let args = Array::new(); args.push(&1.into()); ARRAY_PROTOTYPE2.push().apply(&arr, &args).unwrap(); assert_eq!(Array::from(&arr).length(), 1); } #[wasm_bindgen(module = "tests/wasm/Function.js")] extern "C" { fn get_function_to_bind() -> Function; fn get_value_to_bind_to() -> JsValue; fn list() -> Function; fn add_arguments() -> Function; fn call_function(f: &Function) -> JsValue; fn call_function_arg(f: &Function, arg0: JsValue) -> JsValue; } #[wasm_bindgen_test] fn bind() { let f = get_function_to_bind(); let new_f = f.bind(&get_value_to_bind_to()); assert_eq!(call_function(&f), 1); assert_eq!(call_function(&new_f), 2); } #[wasm_bindgen_test] fn bind0() { let f = get_function_to_bind(); let new_f = f.bind0(&get_value_to_bind_to()); assert_eq!(call_function(&f), 1); assert_eq!(call_function(&new_f), 2); } #[wasm_bindgen_test] fn bind1() { let a_list = list(); let prepended_list = a_list.bind1(&JsValue::NULL, &JsValue::from(2)); assert_eq!(Array::from(&call_function(&prepended_list)).pop(), 2); let adder = add_arguments(); let add_42 = adder.bind1(&JsValue::NULL, &JsValue::from(42)); assert_eq!(call_function_arg(&add_42, JsValue::from(1)), 43); assert_eq!(call_function_arg(&add_42, JsValue::from(378)), 420); } #[wasm_bindgen_test] fn bind2() { let a_list = list(); let prepended_list = a_list.bind2(&JsValue::NULL, &JsValue::from(2), &JsValue::from(3)); let arr = Array::from(&call_function(&prepended_list)); assert_eq!(arr.pop(), 3); assert_eq!(arr.pop(), 2); let adder = add_arguments(); let always_69 = adder.bind2(&JsValue::NULL, &JsValue::from(66), &JsValue::from(3)); assert_eq!(call_function(&always_69), 69); } #[wasm_bindgen_test] fn bind3() { let a_list = list(); let prepended_list = a_list.bind3( &JsValue::NULL, &JsValue::from(2), &JsValue::from(3), &JsValue::from(4), ); let arr = Array::from(&call_function(&prepended_list)); assert_eq!(arr.pop(), 4); assert_eq!(arr.pop(), 3); assert_eq!(arr.pop(), 2); let adder = add_arguments(); let always_69 = adder.bind2(&JsValue::NULL, &JsValue::from(66), &JsValue::from(3)); assert_eq!(call_function(&always_69), 69); } #[wasm_bindgen_test] fn length() { assert_eq!(MAX.length(), 2); assert_eq!(ARRAY_PROTOTYPE2.push().length(), 1); } #[wasm_bindgen_test] fn name() { assert_eq!(JsValue::from(MAX.name()), "max"); assert_eq!(JsValue::from(ARRAY_PROTOTYPE2.push().name()), "push"); } #[wasm_bindgen_test] fn to_string() { assert!(MAX.to_string().length() > 0); } #[wasm_bindgen_test] fn function_inheritance() { assert!(MAX.is_instance_of::()); assert!(MAX.is_instance_of::()); let _: &Object = MAX.as_ref(); } js-sys-0.3.35/tests/wasm/Generator.js010066400017500001750000000006701334577436300156740ustar0000000000000000exports.one_two_generator = function() { function* generator() { yield 1; yield 2; } return generator(); }; exports.dummy_generator = function() { function* generator() { const reply = yield '2 * 2'; return reply === 4; } return generator(); }; exports.broken_generator = function() { function* brokenGenerator() { throw new Error('Something went wrong'); yield 1; } return brokenGenerator(); }; js-sys-0.3.35/tests/wasm/Generator.rs010066400017500001750000000033651346762025200157000ustar0000000000000000use js_sys::*; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use wasm_bindgen_test::*; #[wasm_bindgen(module = "tests/wasm/Generator.js")] extern "C" { fn one_two_generator() -> Generator; fn dummy_generator() -> Generator; fn broken_generator() -> Generator; type GeneratorResult; #[wasm_bindgen(method, getter, structural)] fn value(this: &GeneratorResult) -> JsValue; #[wasm_bindgen(method, getter, structural)] fn done(this: &GeneratorResult) -> bool; } #[wasm_bindgen_test] fn return_() { let gen = one_two_generator(); gen.next(&JsValue::undefined()).unwrap(); let res = GeneratorResult::from(gen.return_(&42.into())); assert_eq!(res.value(), 42); assert!(res.done()); let next = GeneratorResult::from(gen.next(&JsValue::undefined()).unwrap()); assert!(next.value().is_undefined()); assert!(next.done()); } #[wasm_bindgen_test] fn next() { let gen = dummy_generator(); let result = GeneratorResult::from(gen.next(&JsValue::undefined()).unwrap()); assert!(!result.done()); assert_eq!(result.value(), "2 * 2"); let result = GeneratorResult::from(gen.next(&4.into()).unwrap()); assert!(result.done()); assert_eq!(result.value(), true); assert!(broken_generator().next(&3.into()).is_err()); } #[wasm_bindgen_test] fn throw() { let gen = one_two_generator(); gen.next(&JsValue::undefined()).unwrap(); assert!(gen.throw(&Error::new("something went wrong")).is_err()); let next = GeneratorResult::from(gen.next(&JsValue::undefined()).unwrap()); assert!(next.value().is_undefined()); assert!(next.done()); } #[wasm_bindgen_test] fn generator_inheritance() { let gen = dummy_generator(); assert!(gen.is_instance_of::()); } js-sys-0.3.35/tests/wasm/Intl.rs010066400017500001750000000074541346762025200146630ustar0000000000000000use js_sys::*; use wasm_bindgen::{JsCast, JsValue}; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn get_canonical_locales() { let locales = Array::new(); locales.push(&"EN-US".into()); locales.push(&"Fr".into()); let locales = JsValue::from(locales); let canonical_locales = Intl::get_canonical_locales(&locales); assert_eq!(canonical_locales.length(), 2); canonical_locales.for_each(&mut |l, i, _| { if i == 0 { assert_eq!(l, "en-US"); } else { assert_eq!(l, "fr"); } }); let canonical_locales = Intl::get_canonical_locales(&"EN-US".into()); assert_eq!(canonical_locales.length(), 1); canonical_locales.for_each(&mut |l, _, _| { assert_eq!(l, "en-US"); }); } #[wasm_bindgen_test] fn collator() { let locales = Array::of1(&JsValue::from("en-US")); let opts = Object::new(); let c = Intl::Collator::new(&locales, &opts); assert!(c.compare().is_instance_of::()); assert!(c.resolved_options().is_instance_of::()); let a = Intl::Collator::supported_locales_of(&locales, &opts); assert!(a.is_instance_of::()); } #[wasm_bindgen_test] fn collator_inheritance() { let locales = Array::of1(&JsValue::from("en-US")); let opts = Object::new(); let c = Intl::Collator::new(&locales, &opts); assert!(c.is_instance_of::()); assert!(c.is_instance_of::()); let _: &Object = c.as_ref(); } #[wasm_bindgen_test] fn date_time_format() { let locales = Array::of1(&JsValue::from("en-US")); let opts = Object::new(); let epoch = Date::new(&JsValue::from(0)); let c = Intl::DateTimeFormat::new(&locales, &opts); assert!(c.format().is_instance_of::()); assert!(c.format_to_parts(&epoch).is_instance_of::()); assert!(c.resolved_options().is_instance_of::()); let a = Intl::DateTimeFormat::supported_locales_of(&locales, &opts); assert!(a.is_instance_of::()); } #[wasm_bindgen_test] fn date_time_format_inheritance() { let locales = Array::of1(&JsValue::from("en-US")); let opts = Object::new(); let c = Intl::DateTimeFormat::new(&locales, &opts); assert!(c.is_instance_of::()); assert!(c.is_instance_of::()); let _: &Object = c.as_ref(); } #[wasm_bindgen_test] fn number_format() { let locales = Array::of1(&JsValue::from("en-US")); let opts = Object::new(); let n = Intl::NumberFormat::new(&locales, &opts); assert!(n.format().is_instance_of::()); assert!(n.format_to_parts(42.5).is_instance_of::()); assert!(n.resolved_options().is_instance_of::()); let a = Intl::NumberFormat::supported_locales_of(&locales, &opts); assert!(a.is_instance_of::()); } #[wasm_bindgen_test] fn number_format_inheritance() { let locales = Array::of1(&JsValue::from("en-US")); let opts = Object::new(); let n = Intl::NumberFormat::new(&locales, &opts); assert!(n.is_instance_of::()); assert!(n.is_instance_of::()); let _: &Object = n.as_ref(); } #[wasm_bindgen_test] fn plural_rules() { let locales = Array::of1(&JsValue::from("en-US")); let opts = Object::new(); let r = Intl::PluralRules::new(&locales, &opts); assert!(r.resolved_options().is_instance_of::()); assert_eq!(r.select(1_f64), "one"); let a = Intl::PluralRules::supported_locales_of(&locales, &opts); assert!(a.is_instance_of::()); } #[wasm_bindgen_test] fn plural_rules_inheritance() { let locales = Array::of1(&JsValue::from("en-US")); let opts = Object::new(); let r = Intl::PluralRules::new(&locales, &opts); assert!(r.is_instance_of::()); assert!(r.is_instance_of::()); let _: &Object = r.as_ref(); } js-sys-0.3.35/tests/wasm/Iterator.js010066400017500001750000000007551336537147500155420ustar0000000000000000exports.get_iterable = () => ["one", "two", "three"]; exports.get_not_iterable = () => new Object; exports.get_symbol_iterator_throws = () => ({ [Symbol.iterator]: () => { throw new Error("nope"); }, }); exports.get_symbol_iterator_not_function = () => ({ [Symbol.iterator]: 5, }); exports.get_symbol_iterator_returns_not_object = () => ({ [Symbol.iterator]: () => 5, }); exports.get_symbol_iterator_returns_object_without_next = () => ({ [Symbol.iterator]: () => new Object, }); js-sys-0.3.35/tests/wasm/Iterator.rs010066400017500001750000000022311346762025200155320ustar0000000000000000use js_sys::*; use wasm_bindgen::prelude::*; use wasm_bindgen_test::*; #[wasm_bindgen(module = "tests/wasm/Iterator.js")] extern "C" { fn get_iterable() -> JsValue; fn get_not_iterable() -> JsValue; fn get_symbol_iterator_throws() -> JsValue; fn get_symbol_iterator_not_function() -> JsValue; fn get_symbol_iterator_returns_not_object() -> JsValue; fn get_symbol_iterator_returns_object_without_next() -> JsValue; } #[wasm_bindgen_test] fn try_iter_handles_iteration_protocol() { assert_eq!( try_iter(&get_iterable()) .unwrap() .unwrap() .map(|x| x.unwrap().as_string().unwrap()) .collect::>(), vec!["one", "two", "three"] ); assert!(try_iter(&get_not_iterable()).unwrap().is_none()); assert!(try_iter(&get_symbol_iterator_throws()).is_err()); assert!(try_iter(&get_symbol_iterator_not_function()) .unwrap() .is_none()); assert!(try_iter(&get_symbol_iterator_returns_not_object()) .unwrap() .is_none()); assert!(try_iter(&get_symbol_iterator_returns_object_without_next()) .unwrap() .is_none()); } js-sys-0.3.35/tests/wasm/JSON.rs010066400017500001750000000141161356355373600145300ustar0000000000000000use js_sys::*; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn parse_array() { let js_array = JSON::parse("[1, 2, 3]").unwrap(); assert!(Array::is_array(&js_array)); let array = Array::from(&js_array); assert_eq!(array.length(), 3); assert_eq!(array.pop(), 3); assert_eq!(array.pop(), 2); assert_eq!(array.pop(), 1); } #[wasm_bindgen_test] fn parse_object() { let js_object = JSON::parse("{\"x\": 5, \"y\": true, \"z\": [\"foo\", \"bar\"]}").unwrap(); assert!(js_object.is_object()); let obj = Object::from(js_object); let keys = Object::keys(&obj); assert_eq!(keys.length(), 3); assert_eq!(keys.pop().as_string().unwrap(), "z"); assert_eq!(keys.pop().as_string().unwrap(), "y"); assert_eq!(keys.pop().as_string().unwrap(), "x"); let values = Object::values(&obj); assert_eq!(values.length(), 3); let z = values.pop(); assert!(Array::is_array(&z)); let z_array = Array::from(&z); assert_eq!(z_array.length(), 2); let y = values.pop(); assert_eq!(y.as_bool(), Some(true)); let x = values.pop(); assert_eq!(x.as_f64().unwrap(), 5.0); } #[wasm_bindgen_test] fn parse_error() { let js_object = JSON::parse("invalid json"); assert!(js_object.is_err()); let err = js_object.unwrap_err(); assert!(err.is_instance_of::()); } #[wasm_bindgen_test] fn stringify() { let arr = Array::new(); arr.push(&JsValue::from(1)); arr.push(&JsValue::from(true)); arr.push(&JsValue::from("hello")); let str1: String = JSON::stringify(&JsValue::from(arr)).unwrap().into(); assert_eq!(str1, "[1,true,\"hello\"]"); let obj = Object::new(); Reflect::set(obj.as_ref(), &JsValue::from("foo"), &JsValue::from("bar")).unwrap(); let str2: String = JSON::stringify(&JsValue::from(obj)).unwrap().into(); assert_eq!(str2, "{\"foo\":\"bar\"}"); } #[wasm_bindgen_test] fn stringify_error() { let func = Function::new_no_args("throw new Error(\"rust really rocks\")"); let obj = Object::new(); Reflect::set(obj.as_ref(), &JsValue::from("toJSON"), func.as_ref()).unwrap(); let result = JSON::stringify(&JsValue::from(obj)); assert!(result.is_err()); let err_obj = result.unwrap_err(); assert!(err_obj.is_instance_of::()); let err: &Error = err_obj.dyn_ref().unwrap(); let err_msg: String = From::from(err.message()); assert!(err_msg.contains("rust really rocks")); } #[wasm_bindgen_test] fn stringify_with_replacer() { let obj = Object::new(); Reflect::set(obj.as_ref(), &JsValue::from("foo"), &JsValue::from("bar")).unwrap(); Reflect::set( obj.as_ref(), &JsValue::from("hello"), &JsValue::from("world"), ) .unwrap(); let replacer_array = Array::new(); replacer_array.push(&JsValue::from("hello")); let output1: String = JSON::stringify_with_replacer(&JsValue::from(obj.clone()), &JsValue::from(replacer_array)) .unwrap() .into(); assert_eq!(output1, "{\"hello\":\"world\"}"); let replacer_func = Function::new_with_args("key, value", "return key === 'hello' ? undefined : value"); let output2: String = JSON::stringify_with_replacer(&JsValue::from(obj), &JsValue::from(replacer_func)) .unwrap() .into(); assert_eq!(output2, "{\"foo\":\"bar\"}"); } #[wasm_bindgen_test] fn stringify_with_replacer_error() { let arr = Array::new(); arr.push(&JsValue::from(1)); arr.push(&JsValue::from(true)); arr.push(&JsValue::from("hello")); let replacer = Function::new_no_args("throw new Error(\"rust really rocks\")"); let result = JSON::stringify_with_replacer(&JsValue::from(arr), &JsValue::from(replacer)); assert!(result.is_err()); let err_obj = result.unwrap_err(); assert!(err_obj.is_instance_of::()); let err: &Error = err_obj.dyn_ref().unwrap(); let err_msg: String = From::from(err.message()); assert!(err_msg.contains("rust really rocks")); } #[wasm_bindgen_test] fn stringify_with_replacer_and_space() { let arr = Array::new(); arr.push(&JsValue::from(1)); arr.push(&JsValue::from(true)); arr.push(&JsValue::from("hello")); let output1: String = JSON::stringify_with_replacer_and_space( &JsValue::from(arr), &JsValue::NULL, &JsValue::from(4), ) .unwrap() .into(); assert_eq!(output1, "[\n 1,\n true,\n \"hello\"\n]"); let obj = Object::new(); Reflect::set(obj.as_ref(), &JsValue::from("foo"), &JsValue::from("bar")).unwrap(); Reflect::set( obj.as_ref(), &JsValue::from("hello"), &JsValue::from("world"), ) .unwrap(); let replacer_array = Array::new(); replacer_array.push(&JsValue::from("hello")); let output2: String = JSON::stringify_with_replacer_and_space( &JsValue::from(obj.clone()), &JsValue::from(replacer_array), &JsValue::from(4), ) .unwrap() .into(); assert_eq!(output2, "{\n \"hello\": \"world\"\n}"); let replacer_func = Function::new_with_args("key, value", "return key === 'hello' ? undefined : value"); let output3: String = JSON::stringify_with_replacer_and_space( &JsValue::from(obj), &JsValue::from(replacer_func), &JsValue::from(4), ) .unwrap() .into(); assert_eq!(output3, "{\n \"foo\": \"bar\"\n}"); } #[wasm_bindgen_test] fn stringify_with_replacer_and_space_error() { let arr = Array::new(); arr.push(&JsValue::from(1)); arr.push(&JsValue::from(true)); arr.push(&JsValue::from("hello")); let replacer = Function::new_no_args("throw new Error(\"rust really rocks\")"); let result = JSON::stringify_with_replacer_and_space( &JsValue::from(arr), &JsValue::from(replacer), &JsValue::from(4), ); assert!(result.is_err()); let err_obj = result.unwrap_err(); assert!(err_obj.is_instance_of::()); let err: &Error = err_obj.dyn_ref().unwrap(); let err_msg: String = From::from(err.message()); assert!(err_msg.contains("rust really rocks")); } js-sys-0.3.35/tests/wasm/JsString.js010066400017500001750000000003361336537147500155070ustar0000000000000000exports.new_string_object = () => new String("hi"); exports.get_replacer_function = function() { return function upperToHyphenLower(match, offset, string) { return (offset > 0 ? '-' : '') + match.toLowerCase(); }; }; js-sys-0.3.35/tests/wasm/JsString.rs010066400017500001750000000445361347603543600155260ustar0000000000000000use js_sys::*; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use wasm_bindgen::JsValue; use wasm_bindgen_test::*; #[wasm_bindgen(module = "tests/wasm/JsString.js")] extern "C" { fn new_string_object() -> JsValue; fn get_replacer_function() -> Function; } #[wasm_bindgen_test] fn js_string_inheritance() { let string = new_string_object(); assert!(string.is_instance_of::()); assert!(string.is_instance_of::()); } #[wasm_bindgen_test] fn length() { fn test(s: &str) { assert_eq!(JsString::from(s).length(), s.len() as u32); } test("Mozilla"); test(""); } #[wasm_bindgen_test] fn char_at() { let s = JsString::from("Brave new world"); assert_eq!(JsValue::from(s.char_at(0)), "B"); assert_eq!(JsValue::from(s.char_at(999)), ""); } #[wasm_bindgen_test] fn char_code_at() { let s = "Brave new world"; let js = JsString::from(s); for (i, b) in s.char_indices() { assert_eq!(js.char_code_at(i as u32), b as u32 as f64); } assert!(js.char_code_at(s.len() as u32).is_nan()); } #[wasm_bindgen_test] fn code_point_at() { assert_eq!(JsString::from("ABC").code_point_at(1), b'B'); assert!(JsString::from("ABC").code_point_at(42).is_undefined()); } #[wasm_bindgen_test] fn concat() { // TODO: Implement ability to receive multiple optional arguments let s = JsString::from("Hello ").concat(&"World".into()); assert_eq!(JsValue::from(s), "Hello World"); let foo = JsString::from("foo"); assert_eq!( JsValue::from(foo.concat(&Object::new().into())), "foo[object Object]" ); assert_eq!(JsValue::from(foo.concat(&Array::new().into())), "foo"); assert_eq!(JsValue::from(foo.concat(&JsValue::null())), "foonull"); assert_eq!(JsValue::from(foo.concat(&true.into())), "footrue"); assert_eq!(JsValue::from(foo.concat(&1234.into())), "foo1234"); } #[wasm_bindgen_test] fn ends_with() { let s = "To be, or not to be, that is the question."; let js = JsString::from(s); // TODO: remove third parameter once we have optional parameters assert_eq!(js.ends_with("question.", s.len() as i32), true); assert_eq!(js.ends_with("to be", s.len() as i32), false); assert_eq!(js.ends_with("to be", 19), true); } #[wasm_bindgen_test] fn from_char_code() { let s = "½+¾="; let codes: Vec = s.chars().map(|char| char as u32).collect(); assert_eq!(JsString::from_char_code1(codes[0]), "½"); assert_eq!(JsString::from_char_code2(codes[0], codes[1]), "½+"); assert_eq!( JsString::from_char_code3(codes[0], codes[1], codes[2]), "½+¾" ); assert_eq!( JsString::from_char_code4(codes[0], codes[1], codes[2], codes[3]), "½+¾=" ); let codes_u16: Vec = codes .into_iter() .map(|code| { assert!(code <= u32::from(u16::max_value())); code as u16 }) .collect(); assert_eq!(JsString::from_char_code(&codes_u16), "½+¾="); } #[wasm_bindgen_test] fn from_code_point() { let s = "☃★♲你"; let codes: Vec = s.chars().map(|char| char as u32).collect(); assert_eq!(JsString::from_code_point1(codes[0]).unwrap(), "☃"); assert_eq!( JsString::from_code_point2(codes[0], codes[1]).unwrap(), "☃★" ); assert_eq!( JsString::from_code_point3(codes[0], codes[1], codes[2]).unwrap(), "☃★♲" ); assert_eq!( JsString::from_code_point4(codes[0], codes[1], codes[2], codes[3]).unwrap(), "☃★♲你" ); assert_eq!(JsString::from_code_point(&codes).unwrap(), "☃★♲你"); assert!(!JsString::from_code_point1(0x10FFFF).is_err()); assert!(JsString::from_code_point1(0x110000).is_err()); assert!(JsString::from_code_point1(u32::max_value()).is_err()); } #[wasm_bindgen_test] fn includes() { let str = JsString::from("Blue Whale"); // TODO: remove second parameter once we have optional parameters assert_eq!(str.includes("Blue", 0), true); assert_eq!(str.includes("Blute", 0), false); assert_eq!(str.includes("Whale", 0), true); assert_eq!(str.includes("Whale", 5), true); assert_eq!(str.includes("Whale", 7), false); assert_eq!(str.includes("", 0), true); assert_eq!(str.includes("", 16), true); } #[wasm_bindgen_test] fn index_of() { let str = JsString::from("Blue Whale"); // TODO: remove second parameter once we have optional parameters assert_eq!(str.index_of("Blue", 0), 0); // TODO: remove second parameter once we have optional parameters assert_eq!(str.index_of("Blute", 0), -1); assert_eq!(str.index_of("Whale", 0), 5); assert_eq!(str.index_of("Whale", 5), 5); assert_eq!(str.index_of("Whale", 7), -1); // TODO: remove second parameter once we have optional parameters assert_eq!(str.index_of("", 0), 0); assert_eq!(str.index_of("", 9), 9); assert_eq!(str.index_of("", 10), 10); assert_eq!(str.index_of("", 11), 10); } #[wasm_bindgen_test] fn last_index_of() { let js = JsString::from("canal"); let len = js.length() as i32; // TODO: remove second parameter once we have optional parameters assert_eq!(js.last_index_of("a", len), 3); assert_eq!(js.last_index_of("a", 2), 1); assert_eq!(js.last_index_of("a", 0), -1); // TODO: remove second parameter once we have optional parameters assert_eq!(js.last_index_of("x", len), -1); assert_eq!(js.last_index_of("c", -5), 0); assert_eq!(js.last_index_of("c", 0), 0); // TODO: remove second parameter once we have optional parameters assert_eq!(js.last_index_of("", len), 5); assert_eq!(js.last_index_of("", 2), 2); } #[wasm_bindgen_test] fn locale_compare() { let a = "résumé"; let b = "RESUME"; let js_a = JsString::from(a); let js_b = JsString::from(b); let locales = Array::new(); let options = Object::new(); assert_eq!(js_a.locale_compare(a, &locales, &options), 0); assert_eq!(js_b.locale_compare(b, &locales, &options), 0); assert!(js_a.locale_compare(b, &locales, &options) > 0); assert!(js_b.locale_compare(a, &locales, &options) < 0); locales.push(&"en".into()); Reflect::set(options.as_ref(), &"sensitivity".into(), &"base".into()).unwrap(); assert_eq!(js_a.locale_compare(a, &locales, &options), 0); assert_eq!(js_a.locale_compare(b, &locales, &options), 0); assert_eq!(js_b.locale_compare(a, &locales, &options), 0); assert_eq!(js_b.locale_compare(b, &locales, &options), 0); let a = "ä"; let z = "z"; let js_a = JsString::from(a); let js_z = JsString::from(z); let locales_de = Array::of1(&"de".into()); let locales_sv = Array::of1(&"sv".into()); let options = Object::new(); assert_eq!(js_a.locale_compare(a, &locales_de, &options), 0); assert_eq!(js_z.locale_compare(z, &locales_de, &options), 0); assert!(js_a.locale_compare(z, &locales_de, &options) < 0); assert!(js_z.locale_compare(a, &locales_de, &options) > 0); assert_eq!(js_a.locale_compare(a, &locales_sv, &options), 0); assert_eq!(js_z.locale_compare(z, &locales_sv, &options), 0); assert!(js_a.locale_compare(z, &locales_sv, &options) < 0); assert!(js_z.locale_compare(a, &locales_sv, &options) > 0); let two = "2"; let ten = "10"; let js_two = JsString::from(two); let js_ten = JsString::from(ten); let locales = Array::new(); let options = Object::new(); assert_eq!(js_two.locale_compare(two, &locales, &options), 0); assert_eq!(js_ten.locale_compare(ten, &locales, &options), 0); assert!(js_two.locale_compare(ten, &locales, &options) > 0); assert!(js_ten.locale_compare(two, &locales, &options) < 0); locales.push(&"en-u-kn-true".into()); assert!(js_two.locale_compare(ten, &locales, &options) < 0); assert!(js_ten.locale_compare(two, &locales, &options) > 0); let locales = Array::new(); Reflect::set(options.as_ref(), &"numeric".into(), &JsValue::TRUE).unwrap(); assert!(js_two.locale_compare(ten, &locales, &options) < 0); assert!(js_ten.locale_compare(two, &locales, &options) > 0); } #[wasm_bindgen_test] fn match_() { let s = "The quick brown fox jumped over the lazy dog. It barked."; let re = RegExp::new("[A-Z]", "g"); let result = JsString::from(s).match_(&re); let obj = result.unwrap(); assert_eq!(Reflect::get(obj.as_ref(), &"0".into()).unwrap(), "T"); assert_eq!(Reflect::get(obj.as_ref(), &"1".into()).unwrap(), "I"); let result = JsString::from("foo").match_(&re); assert!(result.is_none()); let s = "For more information, see Chapter 3.4.5.1"; let re = RegExp::new("see (chapter \\d+(\\.\\d)*)", "i"); let result = JsString::from(s).match_(&re); let obj = result.unwrap(); assert_eq!( Reflect::get(obj.as_ref(), &"0".into()).unwrap(), "see Chapter 3.4.5.1" ); assert_eq!( Reflect::get(obj.as_ref(), &"1".into()).unwrap(), "Chapter 3.4.5.1" ); assert_eq!(Reflect::get(obj.as_ref(), &"2".into()).unwrap(), ".1"); assert_eq!(Reflect::get(obj.as_ref(), &"index".into()).unwrap(), 22); assert_eq!(Reflect::get(obj.as_ref(), &"input".into()).unwrap(), s); } #[wasm_bindgen_test] fn normalize() { let js = JsString::from("\u{1E9B}\u{0323}"); // TODO: Handle undefined assert_eq!(JsValue::from(js.normalize("NFC")), "\u{1E9B}\u{0323}"); assert_eq!( JsValue::from(js.normalize("NFD")), "\u{017F}\u{0323}\u{0307}" ); assert_eq!(JsValue::from(js.normalize("NFKC")), "\u{1E69}"); assert_eq!( JsValue::from(js.normalize("NFKD")), "\u{0073}\u{0323}\u{0307}" ); } #[wasm_bindgen_test] fn pad_end() { let js = JsString::from("abc"); // TODO: remove second parameter once we have optional parameters assert_eq!(JsValue::from(js.pad_end(10, " ")), "abc "); // TODO: remove second parameter once we have optional parameters assert_eq!(JsValue::from(js.pad_end(10, " ")), "abc "); assert_eq!(JsValue::from(js.pad_end(10, "foo")), "abcfoofoof"); assert_eq!(JsValue::from(js.pad_end(6, "123456")), "abc123"); // TODO: remove second parameter once we have optional parameters assert_eq!(JsValue::from(js.pad_end(1, " ")), "abc"); } #[wasm_bindgen_test] fn pad_start() { let js = JsString::from("abc"); // TODO: remove second parameter once we have optional parameters assert_eq!(js.pad_start(10, " "), " abc"); assert_eq!(js.pad_start(10, "foo"), "foofoofabc"); assert_eq!(js.pad_start(6, "123465"), "123abc"); assert_eq!(js.pad_start(8, "0"), "00000abc"); // TODO: remove second parameter once we have optional parameters assert_eq!(js.pad_start(1, " "), "abc"); } #[wasm_bindgen_test] fn repeat() { assert_eq!(JsString::from("test").repeat(3), "testtesttest"); } #[wasm_bindgen_test] fn replace() { let js = JsString::from( "The quick brown fox jumped over the lazy dog. If the dog reacted, was it really lazy?", ); let result = js.replace("dog", "ferret"); assert_eq!( result, "The quick brown fox jumped over the lazy ferret. If the dog reacted, was it really lazy?" ); let js = JsString::from("borderTop"); let result = js.replace_with_function("T", &get_replacer_function()); assert_eq!(result, "border-top"); let js = JsString::from( "The quick brown fox jumped over the lazy dog. If the dog reacted, was it really lazy?", ); let re = RegExp::new("dog", "g"); let result = js.replace_by_pattern(&re, "ferret"); assert_eq!(result, "The quick brown fox jumped over the lazy ferret. If the ferret reacted, was it really lazy?"); let js = JsString::from("borderTop"); let re = RegExp::new("[A-Z]", "g"); let result = js.replace_by_pattern_with_function(&re, &get_replacer_function()); assert_eq!(result, "border-top"); } #[wasm_bindgen_test] fn search() { let js = JsString::from( "The quick brown fox jumped over the lazy dog. If the dog reacted, was it really lazy?", ); let re = RegExp::new("[^\\w\\s]", "g"); assert_eq!(js.search(&re), 44); let js = JsString::from("hey JudE"); let re1 = RegExp::new("[A-Z]", "g"); let re2 = RegExp::new("[.]", "g"); assert_eq!(js.search(&re1), 4); assert_eq!(js.search(&re2), -1); } #[wasm_bindgen_test] fn slice() { let characters = JsString::from("acxn18"); assert_eq!(characters.slice(1, 3), "cx"); } #[wasm_bindgen_test] fn split() { let js = JsString::from("Oh brave new world"); let result = js.split(" "); let mut v = Vec::with_capacity(result.length() as usize); result.for_each(&mut |x, _, _| v.push(x)); assert_eq!(v[0], "Oh"); assert_eq!(v[1], "brave"); assert_eq!(v[2], "new"); assert_eq!(v[3], "world"); let js = JsString::from("Oct,Nov,Dec"); let result = js.split(","); let mut v = Vec::with_capacity(result.length() as usize); result.for_each(&mut |x, _, _| v.push(x)); assert_eq!(v[0], "Oct"); assert_eq!(v[1], "Nov"); assert_eq!(v[2], "Dec"); let result = js.split_limit(",", 2); let mut v = Vec::with_capacity(result.length() as usize); result.for_each(&mut |x, _, _| v.push(x)); assert_eq!(result.length(), 2); assert_eq!(v[0], "Oct"); assert_eq!(v[1], "Nov"); let js = JsString::from("Oh brave new world"); let re = RegExp::new("\\s", "g"); let result = js.split_by_pattern(&re); let mut v = Vec::with_capacity(result.length() as usize); result.for_each(&mut |x, _, _| v.push(x)); assert_eq!(v[0], "Oh"); assert_eq!(v[1], "brave"); assert_eq!(v[2], "new"); assert_eq!(v[3], "world"); let result = js.split_by_pattern_limit(&re, 2); let mut v = Vec::with_capacity(result.length() as usize); result.for_each(&mut |x, _, _| v.push(x)); assert_eq!(result.length(), 2); assert_eq!(v[0], "Oh"); assert_eq!(v[1], "brave"); } #[wasm_bindgen_test] fn starts_with() { let js = JsString::from("To be, or not to be, that is the question."); // TODO: remove second parameter for both assertions once we have optional parameters assert!(js.starts_with("To be", 0)); assert!(!js.starts_with("not to be", 0)); assert!(js.starts_with("not to be", 10)); } #[wasm_bindgen_test] fn substring() { let js = JsString::from("Mozilla"); assert_eq!(js.substring(0, 1), "M"); assert_eq!(js.substring(1, 0), "M"); assert_eq!(js.substring(0, 6), "Mozill"); // TODO: Add test once we have optional parameters // assert_eq!(js.substring(4), "lla"); assert_eq!(js.substring(4, 7), "lla"); assert_eq!(js.substring(7, 4), "lla"); assert_eq!(js.substring(0, 7), "Mozilla"); assert_eq!(js.substring(0, 10), "Mozilla"); } #[wasm_bindgen_test] fn substr() { let js = JsString::from("Mozilla"); assert_eq!(js.substr(0, 1), "M"); assert_eq!(js.substr(1, 0), ""); assert_eq!(js.substr(-1, 1), "a"); assert_eq!(js.substr(1, -1), ""); // TODO: Uncomment and test these assertions, once we have support for optional parameters // assert_eq!(js.substr(-3), "lla"); // assert_eq!(js.substr(1), "ozilla"); assert_eq!(js.substr(-20, 2), "Mo"); assert_eq!(js.substr(20, 2), ""); } #[wasm_bindgen_test] fn to_locale_lower_case() { let js = JsString::from("Mozilla"); assert_eq!(js.to_locale_lower_case(None), "mozilla"); let s = JsString::from("\u{0130}"); assert_eq!(s.to_locale_lower_case(Some("tr".into())), "i"); assert_ne!(s.to_locale_lower_case(Some("en-US".into())), "i"); } #[wasm_bindgen_test] fn to_locale_upper_case() { let js = JsString::from("mozilla"); assert_eq!(js.to_locale_upper_case(None), "MOZILLA"); let s = JsString::from("i\u{0307}"); assert_eq!(s.to_locale_upper_case(Some("lt".into())), "I"); assert_ne!(s.to_locale_upper_case(Some("en-US".into())), "I"); } #[wasm_bindgen_test] fn to_lower_case() { assert_eq!(JsString::from("Mozilla").to_lower_case(), "mozilla"); } #[wasm_bindgen_test] fn to_string() { assert_eq!(JsString::from("foo").to_string(), "foo"); } #[wasm_bindgen_test] fn to_upper_case() { assert_eq!(JsString::from("Mozilla").to_upper_case(), "MOZILLA"); } #[wasm_bindgen_test] fn trim() { assert_eq!(JsString::from(" foo ").trim(), "foo"); // Another example of .trim() removing whitespace from just one side. assert_eq!(JsString::from("foo ").trim(), "foo"); } #[wasm_bindgen_test] fn trim_end_and_trim_right() { let greeting = JsString::from(" Hello world! "); let trimmed = " Hello world!"; assert_eq!(greeting.trim_end(), trimmed); assert_eq!(greeting.trim_right(), trimmed); } #[wasm_bindgen_test] fn trim_start_and_trim_left() { let greeting = JsString::from(" Hello world! "); let trimmed = "Hello world! "; assert_eq!(greeting.trim_start(), trimmed); assert_eq!(greeting.trim_left(), trimmed); } #[wasm_bindgen_test] fn value_of() { let greeting = JsString::from("Hello world!"); assert_eq!(greeting.value_of(), "Hello world!"); } #[wasm_bindgen_test] fn raw() { let call_site = Object::new(); let raw = Array::of3(&"foo".into(), &"bar".into(), &"123".into()); Reflect::set(&call_site.as_ref(), &"raw".into(), &raw.into()).unwrap(); assert_eq!( JsString::raw_2(&call_site, "5", "JavaScript").unwrap(), "foo5barJavaScript123" ); let substitutions = Array::of2(&"5".into(), &"JavaScript".into()); assert_eq!( JsString::raw(&call_site, &substitutions).unwrap(), "foo5barJavaScript123" ); assert!(JsString::raw_0(&JsValue::null().unchecked_into()).is_err()); } #[wasm_bindgen_test] fn is_valid_utf16() { assert!(JsString::from("a").is_valid_utf16()); assert!(JsString::from("").is_valid_utf16()); assert!(JsString::from("🥑").is_valid_utf16()); assert!(JsString::from("Why hello there this, 🥑, is 🥑 and is 🥑").is_valid_utf16()); assert!(JsString::from_char_code1(0x00).is_valid_utf16()); assert!(!JsString::from_char_code1(0xd800).is_valid_utf16()); assert!(!JsString::from_char_code1(0xdc00).is_valid_utf16()); } #[wasm_bindgen_test] fn as_char() { assert_eq!(JsString::from('a').as_char(), Some('a')); assert_eq!(JsString::from('🥑').as_char(), Some('🥑')); assert_eq!(JsString::from("").as_char(), None); assert_eq!(JsString::from("ab").as_char(), None); assert_eq!(JsString::from_char_code1(0xd800).as_char(), None); assert_eq!(JsString::from_char_code1(0xdc00).as_char(), None); assert_eq!(JsString::from_char_code1(0xdfff).as_char(), None); } js-sys-0.3.35/tests/wasm/Map.rs010066400017500001750000000045311346762025200144630ustar0000000000000000use js_sys::*; use wasm_bindgen::JsCast; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn clear() { let map = Map::new(); map.set(&"foo".into(), &"bar".into()); map.set(&"bar".into(), &"baz".into()); assert_eq!(map.size(), 2); map.clear(); assert_eq!(map.size(), 0); map.clear(); assert_eq!(map.size(), 0); } #[wasm_bindgen_test] fn delete() { let map = Map::new(); map.set(&"foo".into(), &"bar".into()); assert_eq!(map.size(), 1); assert_eq!(map.delete(&"foo".into()), true); assert_eq!(map.delete(&"bar".into()), false); assert_eq!(map.size(), 0); } #[wasm_bindgen_test] fn for_each() { let map = Map::new(); map.set(&1.into(), &true.into()); map.set(&2.into(), &false.into()); map.set(&3.into(), &"awoo".into()); map.set(&4.into(), &100.into()); map.set(&5.into(), &Array::new().into()); map.set(&6.into(), &Object::new().into()); let mut res = Vec::new(); map.for_each(&mut |value, key| { if value.as_bool().is_some() { res.push((key, value)); } }); assert_eq!(map.size(), 6); assert_eq!(res.len(), 2); assert_eq!(res[0].0, 1); assert_eq!(res[0].1, true); assert_eq!(res[1].0, 2); assert_eq!(res[1].1, false); } #[wasm_bindgen_test] fn get() { let map = Map::new(); map.set(&"foo".into(), &"bar".into()); map.set(&1.into(), &2.into()); assert_eq!(map.get(&"foo".into()), "bar"); assert_eq!(map.get(&1.into()), 2); assert!(map.get(&2.into()).is_undefined()); } #[wasm_bindgen_test] fn has() { let map = Map::new(); map.set(&"foo".into(), &"bar".into()); assert_eq!(map.has(&"foo".into()), true); assert_eq!(map.has(&"bar".into()), false); } #[wasm_bindgen_test] fn new() { assert_eq!(Map::new().size(), 0); } #[wasm_bindgen_test] fn set() { let map = Map::new(); let new = map.set(&"foo".into(), &"bar".into()); assert_eq!(map.has(&"foo".into()), true); assert_eq!(new.has(&"foo".into()), true); } #[wasm_bindgen_test] fn size() { let map = Map::new(); map.set(&"foo".into(), &"bar".into()); map.set(&"bar".into(), &"baz".into()); assert_eq!(map.size(), 2); } #[wasm_bindgen_test] fn map_inheritance() { let map = Map::new(); assert!(map.is_instance_of::()); assert!(map.is_instance_of::()); let _: &Object = map.as_ref(); } js-sys-0.3.35/tests/wasm/MapIterator.rs010066400017500001750000000023321346762025200161720ustar0000000000000000use js_sys::*; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn entries() { let map = Map::new(); map.set(&"uno".into(), &1.into()); let entries = map.entries(); let next = entries.next().unwrap(); assert_eq!(next.done(), false); assert!(next.value().is_object()); assert_eq!(Reflect::get(&next.value(), &0.into()).unwrap(), "uno"); assert_eq!(Reflect::get(&next.value(), &1.into()).unwrap(), 1); let next = entries.next().unwrap(); assert!(next.done()); assert!(next.value().is_undefined()); } #[wasm_bindgen_test] fn keys() { let map = Map::new(); map.set(&"uno".into(), &1.into()); let keys = map.keys(); let next = keys.next().unwrap(); assert_eq!(next.done(), false); assert_eq!(next.value(), "uno"); let next = keys.next().unwrap(); assert!(next.done()); assert!(next.value().is_undefined()); } #[wasm_bindgen_test] fn values() { let map = Map::new(); map.set(&"uno".into(), &1.into()); let values = map.values(); let next = values.next().unwrap(); assert_eq!(next.done(), false); assert_eq!(next.value(), 1); let next = values.next().unwrap(); assert!(next.done()); assert!(next.value().is_undefined()); } js-sys-0.3.35/tests/wasm/Math.rs010066400017500001750000000146061347603543600146470ustar0000000000000000use std::f64::consts::PI; use std::f64::{NAN, NEG_INFINITY}; use js_sys::*; use wasm_bindgen_test::*; macro_rules! assert_eq { ($a:expr, $b:expr) => {{ let (a, b) = (&$a, &$b); if f64::is_infinite(*a) && f64::is_infinite(*b) { assert!(a == b); } else { assert!( (*a - *b).abs() < 1.0e-6, "not approximately equal {:?} ?= {:?}", a, b ); } }}; } #[wasm_bindgen_test] fn abs() { assert_eq!(Math::abs(-32.), 32.); assert_eq!(Math::abs(-32.), 32.); assert_eq!(Math::abs(-4.7), 4.7); } #[wasm_bindgen_test] fn acos() { assert_eq!(Math::acos(-1.), PI); assert_eq!(Math::acos(0.5), 1.0471975511965979); assert!(Math::acos(2.).is_nan()); } #[wasm_bindgen_test] fn acosh() { assert_eq!(Math::acosh(1.), 0.); assert_eq!(Math::acosh(2.), 2.0f64.acosh()); assert!(Math::acosh(0.5).is_nan()); } #[wasm_bindgen_test] fn asin() { assert_eq!(Math::asin(1.), 1.0f64.asin()); assert_eq!(Math::asin(0.5), 0.5f64.asin()); assert!(Math::asin(2.).is_nan()); } #[wasm_bindgen_test] fn asinh() { assert_eq!(Math::asinh(1.0), 1f64.asinh()); assert_eq!(Math::asinh(0.5), 0.5f64.asinh()); } #[wasm_bindgen_test] fn atan() { assert_eq!(Math::atan(1.0), 1f64.atan()); assert_eq!(Math::atan(0.5), 0.5f64.atan()); } #[wasm_bindgen_test] fn atan2() { assert_eq!(Math::atan2(1.0, 2.0), 1f64.atan2(2.)); assert_eq!(Math::atan2(0.7, 3.8), 0.7f64.atan2(3.8f64)); } #[wasm_bindgen_test] fn atanh() { assert_eq!(Math::atanh(1.), 1f64.atanh()); assert_eq!(Math::atanh(0.5), 0.5f64.atanh()); assert!(Math::atanh(2.).is_nan()); } #[wasm_bindgen_test] fn cbrt() { assert_eq!(Math::cbrt(27.), 3.); assert_eq!(Math::cbrt(12.3), 12.3f64.cbrt()); } #[wasm_bindgen_test] fn ceil() { assert_eq!(Math::ceil(1.1), 2.); assert_eq!(Math::ceil(-1.1), -1.); } #[wasm_bindgen_test] fn clz32() { assert!(Math::clz32(1) == 31); assert!(Math::clz32(1000) == 22); } #[wasm_bindgen_test] fn cos() { assert_eq!(Math::cos(0.0), 1.); assert_eq!(Math::cos(1.5), 1.5f64.cos()); } #[wasm_bindgen_test] fn cosh() { assert_eq!(Math::cosh(0.), 1.); assert_eq!(Math::cosh(2.), 3.7621956910836314); } #[wasm_bindgen_test] fn exp() { assert_eq!(Math::exp(0.), 1.); assert_eq!(Math::exp(-1.), 0.36787944117144233); assert_eq!(Math::exp(2.), 7.38905609893065); } #[wasm_bindgen_test] fn expm1() { assert_eq!(Math::expm1(0.), 0.); assert_eq!(Math::expm1(1.), 1.718281828459045); assert_eq!(Math::expm1(-1.), -0.6321205588285577); assert_eq!(Math::expm1(2.), 6.38905609893065); } #[wasm_bindgen_test] fn floor() { assert_eq!(Math::floor(5.95), 5.); assert_eq!(Math::floor(-5.05), -6.); } #[wasm_bindgen_test] fn fround() { assert!(Math::fround(5.5) == 5.5); assert!(Math::fround(5.05) == 5.050000190734863); assert!(Math::fround(5.) == 5.); assert!(Math::fround(-5.05) == -5.050000190734863); } #[wasm_bindgen_test] fn hypot() { assert!(Math::hypot(3., 4.) == 5.); assert!(Math::hypot(3.9, 5.2) == 6.5); assert!(Math::hypot(6., 8.) == 10.); assert!(Math::hypot(7., 24.) == 25.); } #[wasm_bindgen_test] fn imul() { assert!(Math::imul(3, 4) == 12); assert!(Math::imul(-5, 12) == -60); assert!(Math::imul(0xffffffffu32 as i32, 5) == 0xffffffffu32.wrapping_mul(5) as i32); } #[wasm_bindgen_test] fn log() { assert_eq!(Math::log(8.) / Math::log(2.), 3.); assert_eq!(Math::log(625.) / Math::log(5.), 4.); } #[wasm_bindgen_test] fn log10() { assert_eq!(Math::log10(100000.), 5.); assert_eq!(Math::log10(1.), 0.); assert_eq!(Math::log10(2.), 0.3010299956639812); } #[wasm_bindgen_test] fn log1p() { assert_eq!(Math::log1p(1.), 0.6931471805599453); assert_eq!(Math::log1p(0.), 0.); assert_eq!(Math::log1p(-1.), NEG_INFINITY); assert!(Math::log1p(-2.).is_nan()); } #[wasm_bindgen_test] fn log2() { assert_eq!(Math::log2(3.), 1.584962500721156); assert_eq!(Math::log2(2.), 1.); assert_eq!(Math::log2(1.), 0.); assert_eq!(Math::log2(0.), NEG_INFINITY); } #[wasm_bindgen_test] fn max() { assert_eq!(Math::max(3., 1.), 3.); assert_eq!(Math::max(-3., 1.), 1.); assert_eq!(Math::max(9913., 43.4), 9913.); assert_eq!(Math::max(-27., -43.), -27.); assert_eq!(Math::max(-423.27, -43.1), -43.1); } #[wasm_bindgen_test] fn min() { assert_eq!(Math::min(3., 1.), 1.); assert_eq!(Math::min(-3., 1.), -3.); assert_eq!(Math::min(9913., 43.4), 43.4); assert_eq!(Math::min(-27., -43.), -43.); assert_eq!(Math::min(-423.27, -43.1), -423.27); } #[wasm_bindgen_test] fn pow() { assert_eq!(Math::pow(7., 2.), 49.); assert_eq!(Math::pow(3.8, 0.5), 3.8f64.powf(0.5f64)); assert!(Math::pow(-2., 0.5).is_nan()); } #[wasm_bindgen_test] fn random() { assert!(Math::random() < 1.); assert!(Math::random() >= 0.); } #[wasm_bindgen_test] fn round() { assert_eq!(Math::round(20.49), 20.); assert_eq!(Math::round(20.5), 21.); assert_eq!(Math::round(42.), 42.); assert_eq!(Math::round(-20.5), -20.); assert_eq!(Math::round(-20.51), -21.); } #[wasm_bindgen_test] fn sign() { assert_eq!(Math::sign(3.), 1.); assert_eq!(Math::sign(-3.), -1.); assert_eq!(Math::sign(2.3), 1.); assert_eq!(Math::sign(0.), 0.); assert!(Math::sign(NAN).is_nan()); } #[wasm_bindgen_test] fn sin() { assert_eq!(Math::sin(0.), 0.); assert_eq!(Math::sin(1.), 1f64.sin()); assert_eq!(Math::sin(PI / 2.), 1.); } #[wasm_bindgen_test] fn sinh() { assert_eq!(Math::sinh(0.), 0.); assert_eq!(Math::sinh(1.), 1f64.sinh()); assert_eq!(Math::sinh(2.3), 2.3f64.sinh()); } #[wasm_bindgen_test] fn sqrt() { assert_eq!(Math::sqrt(9.), 3.); assert_eq!(Math::sqrt(2.), 2f64.sqrt()); assert_eq!(Math::sqrt(42.42), 42.42f64.sqrt()); assert_eq!(Math::sqrt(1.), 1.); assert!(Math::sqrt(-1.).is_nan()); } #[wasm_bindgen_test] fn tan() { assert_eq!(Math::tan(0.), 0.); assert_eq!(Math::tan(1.), 1f64.tan()); assert_eq!(Math::tan(0.5), 0.5f64.tan()); } #[wasm_bindgen_test] fn tanh() { assert_eq!(Math::tanh(0.), 0.); assert_eq!(Math::tanh(1.), 1f64.tanh()); assert_eq!(Math::tanh(0.5), 0.5f64.tanh()); } #[wasm_bindgen_test] fn trunc() { assert_eq!(Math::trunc(13.37), 13.); assert_eq!(Math::trunc(42.84), 42.); assert_eq!(Math::trunc(0.123), 0.); assert_eq!(Math::trunc(-0.123), 0.); } js-sys-0.3.35/tests/wasm/Number.rs010066400017500001750000000071241347603543600152030ustar0000000000000000use std::f64::{INFINITY, NAN}; use js_sys::*; use wasm_bindgen::JsCast; use wasm_bindgen::JsValue; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn is_finite() { assert!(Number::is_finite(&42.into())); assert!(Number::is_finite(&42.1.into())); assert!(!Number::is_finite(&"42".into())); assert!(!Number::is_finite(&NAN.into())); assert!(!Number::is_finite(&INFINITY.into())); } #[wasm_bindgen_test] fn is_integer() { assert!(Number::is_integer(&42.into())); assert!(!Number::is_integer(&42.1.into())); } #[wasm_bindgen_test] fn is_nan() { assert!(Number::is_nan(&NAN.into())); assert!(!Number::is_nan(&JsValue::TRUE)); assert!(!Number::is_nan(&JsValue::NULL)); assert!(!Number::is_nan(&37.into())); assert!(!Number::is_nan(&"37".into())); assert!(!Number::is_nan(&"37.37".into())); assert!(!Number::is_nan(&"".into())); assert!(!Number::is_nan(&" ".into())); // These would all return true with the global isNaN() assert!(!Number::is_nan(&"NaN".into())); assert!(!Number::is_nan(&JsValue::UNDEFINED)); assert!(!Number::is_nan(&"blabla".into())); } #[wasm_bindgen_test] fn is_safe_integer() { assert_eq!(Number::is_safe_integer(&42.into()), true); assert_eq!( Number::is_safe_integer(&(Math::pow(2., 53.) - 1.).into()), true ); assert_eq!(Number::is_safe_integer(&Math::pow(2., 53.).into()), false); assert_eq!(Number::is_safe_integer(&"42".into()), false); assert_eq!(Number::is_safe_integer(&42.1.into()), false); assert_eq!(Number::is_safe_integer(&NAN.into()), false); assert_eq!(Number::is_safe_integer(&INFINITY.into()), false); } #[allow(deprecated)] #[wasm_bindgen_test] fn new() { let n = Number::new(&JsValue::from(42)); let v = JsValue::from(n); assert!(v.is_object()); assert_eq!(Number::from(v).value_of(), 42.); } #[wasm_bindgen_test] fn parse_int_float() { assert_eq!(Number::parse_int("42", 10), 42.); assert_eq!(Number::parse_int("42", 16), 66.); // 0x42 == 66 assert!(Number::parse_int("invalid int", 10).is_nan()); assert_eq!(Number::parse_float("123456.789"), 123456.789); assert!(Number::parse_float("invalid float").is_nan()); } #[wasm_bindgen_test] fn to_locale_string() { let number = Number::from(1234.45); assert_eq!(number.to_locale_string("en-US"), "1,234.45"); // TODO: these tests seems to be system dependent, disable for now // assert_eq!(wasm.to_locale_string(number, "de-DE"), "1,234.45"); // assert_eq!(wasm.to_locale_string(number, "zh-Hans-CN-u-nu-hanidec"), "1,234.45"); } #[wasm_bindgen_test] fn to_precision() { assert_eq!(Number::from(0.1).to_precision(3).unwrap(), "0.100"); assert!(Number::from(10).to_precision(101).is_err()); } #[wasm_bindgen_test] fn to_string() { assert_eq!(Number::from(42).to_string(10).unwrap(), "42"); assert_eq!(Number::from(233).to_string(16).unwrap(), "e9"); assert!(Number::from(100).to_string(100).is_err()); } #[wasm_bindgen_test] fn value_of() { assert_eq!(Number::from(42).value_of(), 42.); } #[wasm_bindgen_test] fn to_fixed() { assert_eq!(Number::from(123.456).to_fixed(2).unwrap(), "123.46"); assert!(Number::from(10).to_fixed(101).is_err()); } #[wasm_bindgen_test] fn to_exponential() { assert_eq!(Number::from(123456).to_exponential(2).unwrap(), "1.23e+5"); assert!(Number::from(10).to_exponential(101).is_err()); } #[allow(deprecated)] #[wasm_bindgen_test] fn number_inheritance() { let n = Number::new(&JsValue::from(42)); assert!(n.is_instance_of::()); assert!(n.is_instance_of::()); let _: &Object = n.as_ref(); } js-sys-0.3.35/tests/wasm/Object.js010066400017500001750000000003261334577436300151520ustar0000000000000000const symbol_key = Symbol(); exports.map_with_symbol_key = function() { return { [symbol_key]: 42 }; }; exports.symbol_key = function() { return symbol_key; }; exports.Foo = class {}; exports.Bar = class {}; js-sys-0.3.35/tests/wasm/Object.rs010066400017500001750000000212221347603543600151540ustar0000000000000000use js_sys::*; use std::f64::NAN; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use wasm_bindgen_test::*; #[wasm_bindgen] extern "C" { type Foo42; #[wasm_bindgen(method, setter, structural)] fn set_foo(this: &Foo42, val: JsValue); #[wasm_bindgen(js_name = prototype, js_namespace = Object)] static OBJECT_PROTOTYPE: JsValue; #[wasm_bindgen(js_name = prototype, js_namespace = Array)] static ARRAY_PROTOTYPE: JsValue; type DefinePropertyAttrs; #[wasm_bindgen(method, setter, structural)] fn set_value(this: &DefinePropertyAttrs, val: &JsValue); type PropertyDescriptor; #[wasm_bindgen(method, getter, structural)] fn value(this: &PropertyDescriptor) -> JsValue; } #[wasm_bindgen(module = "tests/wasm/Object.js")] extern "C" { fn map_with_symbol_key() -> Object; fn symbol_key() -> JsValue; type Foo; #[wasm_bindgen(constructor)] fn new() -> Foo; #[wasm_bindgen(js_name = prototype, js_namespace = Foo)] static FOO_PROTOTYPE: Object; #[wasm_bindgen(js_name = prototype, js_namespace = Bar)] static BAR_PROTOTYPE: Object; } fn foo_42() -> Object { let foo = Foo42::from(JsValue::from(Object::new())); foo.set_foo(42.into()); JsValue::from(foo).into() } #[wasm_bindgen_test] fn new() { assert!(JsValue::from(Object::new()).is_object()); } #[wasm_bindgen_test] fn assign() { let a = JsValue::from("a"); let b = JsValue::from("b"); let c = JsValue::from("c"); let target = Object::new(); Reflect::set(target.as_ref(), a.as_ref(), a.as_ref()).unwrap(); let src1 = Object::new(); Reflect::set(src1.as_ref(), &a, &c).unwrap(); let src2 = Object::new(); Reflect::set(src2.as_ref(), &b, &b).unwrap(); let src3 = Object::new(); Reflect::set(src3.as_ref(), &c, &c).unwrap(); let res = Object::assign3(&target, &src1, &src2, &src3); assert!(Object::is(target.as_ref(), res.as_ref())); assert_eq!(Reflect::get(target.as_ref(), &a).unwrap(), c); assert_eq!(Reflect::get(target.as_ref(), &b).unwrap(), b); assert_eq!(Reflect::get(target.as_ref(), &c).unwrap(), c); } #[wasm_bindgen_test] fn create() { let array_proto = eval("Array.prototype") .unwrap() .dyn_into::() .unwrap(); let my_array = Object::create(&array_proto); assert!(my_array.is_instance_of::()); } #[wasm_bindgen_test] fn define_property() { let value = DefinePropertyAttrs::from(JsValue::from(Object::new())); value.set_value(&43.into()); let descriptor = Object::from(JsValue::from(value)); let foo = foo_42(); let foo = Object::define_property(&foo, &"bar".into(), &descriptor); assert!(foo.has_own_property(&"bar".into())); } #[wasm_bindgen_test] fn define_properties() { let props = Object::new(); let descriptor = DefinePropertyAttrs::from(JsValue::from(Object::new())); descriptor.set_value(&42.into()); let descriptor = JsValue::from(descriptor); Reflect::set(props.as_ref(), &JsValue::from("bar"), &descriptor).unwrap(); Reflect::set(props.as_ref(), &JsValue::from("car"), &descriptor).unwrap(); let foo = foo_42(); let foo = Object::define_properties(&foo, &props); assert!(foo.has_own_property(&"bar".into())); assert!(foo.has_own_property(&"car".into())); } #[wasm_bindgen_test] fn entries() { let entries = Object::entries(&foo_42()); assert_eq!(entries.length(), 1); entries.for_each(&mut |x, _, _| { assert!(x.is_object()); let array: Array = x.into(); assert_eq!(array.shift(), "foo"); assert_eq!(array.shift(), 42); assert_eq!(array.length(), 0); }); } #[wasm_bindgen_test] fn from_entries() { let array = Array::new(); let entry_one = Array::new(); let entry_two = Array::new(); entry_one.push(&"foo".into()); entry_one.push(&"bar".into()); entry_two.push(&"baz".into()); entry_two.push(&42.into()); array.push(&entry_one); array.push(&entry_two); let object = Object::from_entries(&array).unwrap(); assert_eq!(Reflect::get(object.as_ref(), &"foo".into()).unwrap(), "bar"); assert_eq!(Reflect::get(object.as_ref(), &"baz".into()).unwrap(), 42); let not_iterable = Object::new(); let error = Object::from_entries(¬_iterable).unwrap_err(); assert!(error.is_instance_of::()); } #[wasm_bindgen_test] fn get_own_property_descriptor() { let foo = foo_42(); let desc = Object::get_own_property_descriptor(&foo, &"foo".into()); assert_eq!(PropertyDescriptor::from(desc).value(), 42); let desc = Object::get_own_property_descriptor(&foo, &"bar".into()); assert!(desc.is_undefined()); } #[wasm_bindgen_test] fn get_own_property_descriptors() { let foo = foo_42(); let descriptors = Object::get_own_property_descriptors(&foo); let foo_desc = Reflect::get(&descriptors, &"foo".into()).unwrap(); assert_eq!(PropertyDescriptor::from(foo_desc).value(), 42); } #[wasm_bindgen_test] fn get_own_property_names() { let names = Object::get_own_property_names(&foo_42()); assert_eq!(names.length(), 1); names.for_each(&mut |x, _, _| { assert_eq!(x, "foo"); }); } #[wasm_bindgen_test] fn get_own_property_symbols() { let symbols = Object::get_own_property_symbols(&map_with_symbol_key()); assert_eq!(symbols.length(), 1); } #[wasm_bindgen_test] fn get_prototype_of() { let proto = JsValue::from(Object::get_prototype_of(&Object::new().into())); assert_eq!(proto, *OBJECT_PROTOTYPE); let proto = JsValue::from(Object::get_prototype_of(&Array::new().into())); assert_eq!(proto, *ARRAY_PROTOTYPE); } #[wasm_bindgen_test] fn has_own_property() { assert!(foo_42().has_own_property(&"foo".into())); assert!(!foo_42().has_own_property(&"bar".into())); assert!(map_with_symbol_key().has_own_property(&symbol_key())); } #[wasm_bindgen_test] fn to_string() { assert_eq!(Object::new().to_string(), "[object Object]"); assert_eq!(foo_42().to_string(), "[object Object]"); } #[wasm_bindgen_test] fn is() { let object = JsValue::from(Object::new()); assert!(Object::is(&object, &object)); assert!(Object::is(&JsValue::undefined(), &JsValue::undefined())); assert!(Object::is(&JsValue::null(), &JsValue::null())); assert!(Object::is(&JsValue::TRUE, &JsValue::TRUE)); assert!(Object::is(&JsValue::FALSE, &JsValue::FALSE)); assert!(Object::is(&"foo".into(), &"foo".into())); assert!(Object::is(&JsValue::from(42), &JsValue::from(42))); assert!(Object::is(&JsValue::from(NAN), &JsValue::from(NAN))); let another_object = JsValue::from(Object::new()); assert!(!Object::is(&object, &another_object)); assert!(!Object::is(&JsValue::TRUE, &JsValue::FALSE)); assert!(!Object::is(&"foo".into(), &"bar".into())); assert!(!Object::is(&JsValue::from(23), &JsValue::from(42))); } #[wasm_bindgen_test] fn is_extensible() { let object = Object::new(); assert!(Object::is_extensible(&object)); Object::prevent_extensions(&object); assert!(!Object::is_extensible(&object)); } #[wasm_bindgen_test] fn is_frozen() { let object = Object::new(); assert!(!Object::is_frozen(&object)); Object::freeze(&object); assert!(Object::is_frozen(&object)); } #[wasm_bindgen_test] fn is_sealed() { let object = Object::new(); assert!(!Object::is_sealed(&object)); Object::seal(&object); assert!(Object::is_sealed(&object)); } #[wasm_bindgen_test] fn is_prototype_of() { let foo = JsValue::from(Foo::new()); assert!(FOO_PROTOTYPE.is_prototype_of(&foo)); assert!(!BAR_PROTOTYPE.is_prototype_of(&foo)); } #[wasm_bindgen_test] fn keys() { let keys = Object::keys(&foo_42()); assert_eq!(keys.length(), 1); keys.for_each(&mut |x, _, _| { assert_eq!(x, "foo"); }); } #[wasm_bindgen_test] fn values() { let values = Object::values(&foo_42()); assert_eq!(values.length(), 1); values.for_each(&mut |x, _, _| { assert_eq!(x, 42); }); } #[wasm_bindgen_test] fn property_is_enumerable() { assert!(foo_42().property_is_enumerable(&"foo".into())); assert!(!foo_42().property_is_enumerable(&42.into())); assert!(!Object::new().property_is_enumerable(&"foo".into())); } #[wasm_bindgen_test] fn set_prototype_of() { let a = foo_42(); let b = foo_42(); Object::set_prototype_of(&a, &b); assert!(b.is_prototype_of(&a.into())); } #[wasm_bindgen_test] fn to_locale_string() { assert_eq!(Object::new().to_locale_string(), "[object Object]"); } #[wasm_bindgen_test] fn value_of() { let a = JsValue::from(foo_42()); let b = JsValue::from(foo_42()); let a2 = JsValue::from(Object::from(a.clone()).value_of()); assert_eq!(a, a); assert_eq!(a, a2); assert_ne!(a, b); assert_ne!(a2, b); } js-sys-0.3.35/tests/wasm/Promise.rs010066400017500001750000000004601346762025200153610ustar0000000000000000use js_sys::*; use wasm_bindgen::JsCast; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn promise_inheritance() { let promise = Promise::new(&mut |_, _| ()); assert!(promise.is_instance_of::()); assert!(promise.is_instance_of::()); let _: &Object = promise.as_ref(); } js-sys-0.3.35/tests/wasm/Proxy.js010066400017500001750000000003051334577436300150620ustar0000000000000000exports.proxy_target = function() { return { a: 100 }; }; exports.proxy_handler = function() { return { get: function(obj, prop) { return prop in obj ? obj[prop] : 37; } }; }; js-sys-0.3.35/tests/wasm/Proxy.rs010066400017500001750000000026001346762025200150620ustar0000000000000000use js_sys::*; use wasm_bindgen::prelude::*; use wasm_bindgen_test::*; #[wasm_bindgen(module = "tests/wasm/Proxy.js")] extern "C" { fn proxy_target() -> JsValue; fn proxy_handler() -> Object; type Custom; #[wasm_bindgen(method, getter, structural, catch)] fn a(this: &Custom) -> Result; #[wasm_bindgen(method, getter, structural, catch)] fn b(this: &Custom) -> Result; type RevocableResult; #[wasm_bindgen(method, getter, structural)] fn proxy(this: &RevocableResult) -> JsValue; #[wasm_bindgen(method, getter, structural)] fn revoke(this: &RevocableResult) -> Function; } #[wasm_bindgen_test] fn new() { let proxy = Proxy::new(&proxy_target(), &proxy_handler()); let proxy = Custom::from(JsValue::from(proxy)); assert_eq!(proxy.a().unwrap(), 100); assert_eq!(proxy.b().unwrap(), 37); } #[wasm_bindgen_test] fn revocable() { let result = Proxy::revocable(&proxy_target(), &proxy_handler()); let result = RevocableResult::from(JsValue::from(result)); let proxy = result.proxy(); let revoke = result.revoke(); let obj = Custom::from(proxy); assert_eq!(obj.a().unwrap(), 100); assert_eq!(obj.b().unwrap(), 37); revoke.apply(&JsValue::undefined(), &Array::new()).unwrap(); assert!(obj.a().is_err()); assert!(obj.b().is_err()); assert!(JsValue::from(obj).is_object()); } js-sys-0.3.35/tests/wasm/RangeError.rs010066400017500001750000000010001346762025200160000ustar0000000000000000use js_sys::*; use wasm_bindgen::JsCast; use wasm_bindgen::JsValue; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn range_error() { let error = RangeError::new("out of range yo"); assert!(error.is_instance_of::()); assert!(error.is_instance_of::()); assert!(error.is_instance_of::()); let _: &Error = error.as_ref(); let _: &Object = error.as_ref(); let base: &Error = error.as_ref(); assert_eq!(JsValue::from(base.message()), "out of range yo"); } js-sys-0.3.35/tests/wasm/ReferenceError.rs010066400017500001750000000010241346762025200166500ustar0000000000000000use js_sys::*; use wasm_bindgen::JsCast; use wasm_bindgen::JsValue; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn reference_error() { let error = ReferenceError::new("bad reference, fool"); assert!(error.is_instance_of::()); assert!(error.is_instance_of::()); assert!(error.is_instance_of::()); let _: &Error = error.as_ref(); let _: &Object = error.as_ref(); let base: &Error = error.as_ref(); assert_eq!(JsValue::from(base.message()), "bad reference, fool"); } js-sys-0.3.35/tests/wasm/Reflect.js010066400017500001750000000017221336537147500153300ustar0000000000000000exports.get_char_at = function() { return "foo".charAt; }; exports.Rectangle = class { constructor(x, y){ this.x = x, this.y = y } static eq(x, y) { return x === y; } }; exports.Rectangle2 = class { constructor(x, y){ this.x = x, this.y = y } static eq(x, y) { return x === y; } }; exports.throw_all_the_time = () => new Proxy({}, { getPrototypeOf() { throw new Error("nope"); }, setPrototypeOf() { throw new Error("nope"); }, isExtensible() { throw new Error("nope"); }, preventExtensions() { throw new Error("nope"); }, getOwnPropertyDescriptor() { throw new Error("nope"); }, defineProperty() { throw new Error("nope"); }, has() { throw new Error("nope"); }, get() { throw new Error("nope"); }, set() { throw new Error("nope"); }, deleteProperty() { throw new Error("nope"); }, ownKeys() { throw new Error("nope"); }, apply() { throw new Error("nope"); }, construct() { throw new Error("nope"); }, }); js-sys-0.3.35/tests/wasm/Reflect.rs010066400017500001750000000175521347603543600153450ustar0000000000000000use js_sys::*; use wasm_bindgen::prelude::*; use wasm_bindgen_test::*; #[wasm_bindgen(module = "tests/wasm/Reflect.js")] extern "C" { fn get_char_at() -> Function; #[wasm_bindgen(js_name = Rectangle)] static RECTANGLE_CLASS: Function; #[wasm_bindgen(js_name = Rectangle2)] static RECTANGLE2_CLASS: Function; #[derive(Clone)] type Rectangle; #[wasm_bindgen(constructor)] fn new() -> Rectangle; #[wasm_bindgen(method, getter, structural)] fn x(this: &Rectangle) -> u32; #[wasm_bindgen(method, getter, structural, js_name = x)] fn x_jsval(this: &Rectangle) -> JsValue; #[wasm_bindgen(method, setter, structural)] fn set_x(this: &Rectangle, x: u32); fn throw_all_the_time() -> Object; } #[wasm_bindgen] extern "C" { #[wasm_bindgen(js_name = prototype, js_namespace = Object)] static OBJECT_PROTOTYPE: JsValue; #[wasm_bindgen(js_name = prototype, js_namespace = Array)] static ARRAY_PROTOTYPE: JsValue; type DefinePropertyAttrs; #[wasm_bindgen(method, setter, structural)] fn set_value(this: &DefinePropertyAttrs, val: &JsValue); type PropertyDescriptor; #[wasm_bindgen(method, getter, structural)] fn value(this: &PropertyDescriptor) -> JsValue; } #[wasm_bindgen_test] fn apply() { let args = Array::new(); args.push(&3.into()); assert_eq!( Reflect::apply(&get_char_at(), &"ponies".into(), &args).unwrap(), "i" ); } #[wasm_bindgen_test] fn construct() { let args = Array::new(); args.push(&10.into()); args.push(&10.into()); let instance = Reflect::construct(&RECTANGLE_CLASS, &args).unwrap(); assert_eq!(Rectangle::from(instance).x(), 10); } #[wasm_bindgen_test] fn construct_with_new_target() { let args = Array::new(); args.push(&10.into()); args.push(&10.into()); let instance = Reflect::construct_with_new_target(&RECTANGLE_CLASS, &args, &RECTANGLE2_CLASS).unwrap(); assert_eq!(Rectangle::from(instance).x(), 10); } #[wasm_bindgen_test] fn define_property() { let value = DefinePropertyAttrs::from(JsValue::from(Object::new())); value.set_value(&42.into()); let obj = Object::from(JsValue::from(value)); assert!(Reflect::define_property(&obj, &"key".into(), &obj).unwrap()); } #[wasm_bindgen_test] fn delete_property() { let r = Rectangle::new(); r.set_x(10); let obj = Object::from(JsValue::from(r.clone())); Reflect::delete_property(&obj, &"x".into()).unwrap(); assert!(r.x_jsval().is_undefined()); let array = Array::new(); array.push(&1.into()); let obj = Object::from(JsValue::from(array)); Reflect::delete_property(&obj, &0.into()).unwrap(); let array = Array::from(&JsValue::from(obj)); assert!(array.length() == 1); array.for_each(&mut |x, _, _| assert!(x.is_undefined())); } #[wasm_bindgen_test] fn get() { let r = Rectangle::new(); r.set_x(10); let obj = JsValue::from(r.clone()); assert_eq!(Reflect::get(&obj, &"x".into()).unwrap(), 10); } #[wasm_bindgen_test] fn get_f64() { let a = Array::new(); assert_eq!(Reflect::get_f64(&a, 0.0).unwrap(), JsValue::UNDEFINED); assert_eq!(a.push(&JsValue::from_str("Hi!")), 1); assert_eq!(Reflect::get_f64(&a, 0.0).unwrap(), JsValue::from_str("Hi!")); } #[wasm_bindgen_test] fn get_u32() { let a = Array::new(); assert_eq!(Reflect::get_u32(&a, 0).unwrap(), JsValue::UNDEFINED); assert_eq!(a.push(&JsValue::from_str("Hi!")), 1); assert_eq!(Reflect::get_u32(&a, 0).unwrap(), JsValue::from_str("Hi!")); } #[wasm_bindgen_test] fn get_own_property_descriptor() { let r = Rectangle::new(); r.set_x(10); let obj = Object::from(JsValue::from(r.clone())); let desc = Reflect::get_own_property_descriptor(&obj, &"x".into()).unwrap(); assert_eq!(PropertyDescriptor::from(desc).value(), 10); let desc = Reflect::get_own_property_descriptor(&obj, &"foo".into()).unwrap(); assert!(desc.is_undefined()); } #[wasm_bindgen_test] fn get_prototype_of() { let proto = JsValue::from(Reflect::get_prototype_of(&Object::new().into()).unwrap()); assert_eq!(proto, *OBJECT_PROTOTYPE); let proto = JsValue::from(Reflect::get_prototype_of(&Array::new().into()).unwrap()); assert_eq!(proto, *ARRAY_PROTOTYPE); } #[wasm_bindgen_test] fn has() { let obj = JsValue::from(Rectangle::new()); assert!(Reflect::has(&obj, &"x".into()).unwrap()); assert!(!Reflect::has(&obj, &"foo".into()).unwrap()); } #[wasm_bindgen_test] fn is_extensible() { let obj = Object::from(JsValue::from(Rectangle::new())); assert!(Reflect::is_extensible(&obj).unwrap()); Reflect::prevent_extensions(&obj).unwrap(); assert!(!Reflect::is_extensible(&obj).unwrap()); let obj = Object::seal(&Object::new()); assert!(!Reflect::is_extensible(&obj).unwrap()); } #[wasm_bindgen_test] fn own_keys() { let obj = JsValue::from(Rectangle::new()); let keys = Reflect::own_keys(&obj).unwrap(); assert!(keys.length() == 2); keys.for_each(&mut |k, _, _| { assert!(k == "x" || k == "y"); }); } #[wasm_bindgen_test] fn prevent_extensions() { let obj = Object::new(); Reflect::prevent_extensions(&obj).unwrap(); assert!(!Reflect::is_extensible(&obj).unwrap()); } #[wasm_bindgen_test] fn set() { let obj = JsValue::from(Object::new()); assert!(Reflect::set(&obj, &"key".into(), &"value".into()).unwrap()); assert_eq!(Reflect::get(&obj, &"key".into()).unwrap(), "value"); } #[wasm_bindgen_test] fn set_f64() { let a = Array::new(); a.push(&JsValue::from_str("Hi!")); assert_eq!(Reflect::get_f64(&a, 0.0).unwrap(), JsValue::from_str("Hi!")); Reflect::set_f64(&a, 0.0, &JsValue::from_str("Bye!")).unwrap(); assert_eq!( Reflect::get_f64(&a, 0.0).unwrap(), JsValue::from_str("Bye!") ); } #[wasm_bindgen_test] fn set_u32() { let a = Array::new(); a.push(&JsValue::from_str("Hi!")); assert_eq!(Reflect::get_u32(&a, 0).unwrap(), JsValue::from_str("Hi!")); Reflect::set_u32(&a, 0, &JsValue::from_str("Bye!")).unwrap(); assert_eq!(Reflect::get_u32(&a, 0).unwrap(), JsValue::from_str("Bye!")); } #[wasm_bindgen_test] fn set_with_receiver() { let obj1 = JsValue::from(Object::new()); let obj2 = JsValue::from(Object::new()); assert!(Reflect::set_with_receiver(&obj2, &"key".into(), &"value".into(), &obj2).unwrap()); assert!(Reflect::get(&obj1, &"key".into()).unwrap().is_undefined()); assert_eq!(Reflect::get(&obj2, &"key".into()).unwrap(), "value"); } #[wasm_bindgen_test] fn set_prototype_of() { let obj = Object::new(); assert!(Reflect::set_prototype_of(&obj, &JsValue::null()).unwrap()); let obj = JsValue::from(obj); assert_eq!( JsValue::from(Reflect::get_prototype_of(&obj).unwrap()), JsValue::null() ); } #[wasm_bindgen_test] fn reflect_bindings_handle_proxies_that_just_throw_for_everything() { let p = throw_all_the_time(); let desc = Object::new(); Reflect::set(desc.as_ref(), &"value".into(), &1.into()).unwrap(); assert!(Reflect::define_property(&p, &"a".into(), &desc).is_err()); assert!(Reflect::delete_property(&p, &"a".into()).is_err()); assert!(Reflect::get(p.as_ref(), &"a".into()).is_err()); assert!(Reflect::get_f64(p.as_ref(), 0.0).is_err()); assert!(Reflect::get_u32(p.as_ref(), 0).is_err()); assert!(Reflect::get_own_property_descriptor(&p, &"a".into()).is_err()); assert!(Reflect::get_prototype_of(p.as_ref()).is_err()); assert!(Reflect::has(p.as_ref(), &"a".into()).is_err()); assert!(Reflect::is_extensible(&p).is_err()); assert!(Reflect::own_keys(p.as_ref()).is_err()); assert!(Reflect::prevent_extensions(&p).is_err()); assert!(Reflect::set(p.as_ref(), &"a".into(), &1.into()).is_err()); assert!(Reflect::set_f64(p.as_ref(), 0.0, &1.into()).is_err()); assert!(Reflect::set_u32(p.as_ref(), 0, &1.into()).is_err()); assert!(Reflect::set_prototype_of(&p, Object::new().as_ref()).is_err()); } js-sys-0.3.35/tests/wasm/RegExp.rs010066400017500001750000000070241346762025200151400ustar0000000000000000use js_sys::*; use wasm_bindgen::JsCast; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn regexp_inheritance() { let re = RegExp::new(".", ""); assert!(re.is_instance_of::()); assert!(re.is_instance_of::()); let _: &Object = re.as_ref(); } #[wasm_bindgen_test] fn exec() { let re = RegExp::new("quick\\s(brown).+?(jumps)", "ig"); let result = re.exec("The Quick Brown Fox Jumps Over The Lazy Dog"); let mut v = vec![]; result.unwrap().for_each(&mut |x, _, _| v.push(x)); assert_eq!(v[0], "Quick Brown Fox Jumps"); assert_eq!(v[1], "Brown"); assert_eq!(v[2], "Jumps"); let result = re.exec("foo"); assert!(result.is_none()); } #[wasm_bindgen_test] fn flags() { let re = RegExp::new("foo", "ig"); assert_eq!(re.flags(), "gi"); } #[wasm_bindgen_test] fn global() { let re = RegExp::new("foo", "g"); assert!(re.global()); let re = RegExp::new("bar", "i"); assert!(!re.global()); } #[wasm_bindgen_test] fn ignore_case() { let re = RegExp::new("foo", ""); assert!(!re.ignore_case()); let re = RegExp::new("foo", "i"); assert!(re.ignore_case()); } #[wasm_bindgen_test] fn input() { let re = RegExp::new("hi", "g"); re.test("hi there!"); assert_eq!(RegExp::input(), "hi there!"); } #[wasm_bindgen_test] fn last_index() { let re = RegExp::new("hi", "g"); assert_eq!(re.last_index(), 0); re.set_last_index(42); assert_eq!(re.last_index(), 42); } #[wasm_bindgen_test] fn last_match() { let re = RegExp::new("hi", "g"); re.test("hi there!"); assert_eq!(RegExp::last_match(), "hi"); } #[wasm_bindgen_test] fn last_paren() { let re = RegExp::new("(hi)", "g"); re.test("hi there!"); assert_eq!(RegExp::last_paren(), "hi"); } #[wasm_bindgen_test] fn left_context() { let re = RegExp::new("world", "g"); re.test("hello world!"); assert_eq!(RegExp::left_context(), "hello "); } #[wasm_bindgen_test] fn multiline() { let re = RegExp::new("foo", "m"); assert!(re.multiline()); } #[wasm_bindgen_test] fn n1_to_n9() { let re = RegExp::new( r"(\w+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)", "", ); re.test("The Quick Brown Fox Jumps Over The Lazy Dog"); assert_eq!(RegExp::n1(), "The"); assert_eq!(RegExp::n2(), "Quick"); assert_eq!(RegExp::n3(), "Brown"); assert_eq!(RegExp::n4(), "Fox"); assert_eq!(RegExp::n5(), "Jumps"); assert_eq!(RegExp::n6(), "Over"); assert_eq!(RegExp::n7(), "The"); assert_eq!(RegExp::n8(), "Lazy"); assert_eq!(RegExp::n9(), "Dog"); } #[wasm_bindgen_test] fn new() { let re = RegExp::new("foo", ""); let re = RegExp::new_regexp(&re, "g"); assert_eq!(re.to_string(), "/foo/g"); } #[wasm_bindgen_test] fn right_context() { let re = RegExp::new("hello", "g"); re.test("hello world!"); assert_eq!(RegExp::right_context(), " world!"); } #[wasm_bindgen_test] fn source() { let re = RegExp::new("fooBar", "ig"); assert_eq!(re.source(), "fooBar"); let re = RegExp::new("", "ig"); assert_eq!(re.source(), "(?:)"); } #[wasm_bindgen_test] fn sticky() { let re = RegExp::new("foo", "y"); assert!(re.sticky()); } #[wasm_bindgen_test] fn test() { let re = RegExp::new("foo", ""); assert!(re.test("football")); assert!(!re.test("bar")); } #[wasm_bindgen_test] fn to_string() { let re = RegExp::new("a+b+c", "g"); assert_eq!(re.to_string(), "/a+b+c/g"); } #[wasm_bindgen_test] fn unicode() { let re = RegExp::new("\u{61}", "u"); assert!(re.unicode()); } js-sys-0.3.35/tests/wasm/Set.rs010066400017500001750000000055641346762025200145100ustar0000000000000000use js_sys::*; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use wasm_bindgen_test::*; fn set2vec(s: &Set) -> Vec { let mut result = Vec::new(); s.for_each(&mut |x, _, _| result.push(x)); return result; } #[wasm_bindgen_test] fn add() { let set = Set::new(&JsValue::undefined()); set.add(&100.into()); assert_eq!(set.size(), 1); assert_eq!(set2vec(&set)[0], 100); } #[wasm_bindgen_test] fn clear() { let set = Set::new(&JsValue::undefined()); set.add(&1.into()); set.add(&2.into()); set.add(&3.into()); assert_eq!(set.size(), 3); set.clear(); assert_eq!(set.size(), 0); } #[wasm_bindgen_test] fn delete() { let set = Set::new(&JsValue::undefined()); set.add(&1.into()); set.add(&2.into()); set.add(&3.into()); assert!(set.delete(&3.into())); assert!(!set.delete(&3.into())); assert!(!set.delete(&4.into())); } #[wasm_bindgen_test] fn for_each() { let set = Set::new(&JsValue::undefined()); set.add(&1.into()); set.add(&2.into()); set.add(&3.into()); let v = set2vec(&set); assert_eq!(v.len(), 3); assert!(v.iter().any(|v| *v == 1)); assert!(v.iter().any(|v| *v == 2)); assert!(v.iter().any(|v| *v == 3)); } #[wasm_bindgen_test] fn has() { let set = Set::new(&JsValue::undefined()); set.add(&1.into()); set.add(&2.into()); set.add(&3.into()); assert!(set.has(&1.into())); assert!(!set.has(&1.3.into())); } #[wasm_bindgen_test] fn new() { assert_eq!(Set::new(&JsValue::undefined()).size(), 0); } #[wasm_bindgen_test] fn size() { let set = Set::new(&JsValue::undefined()); assert_eq!(set.size(), 0); set.add(&1.into()); assert_eq!(set.size(), 1); set.add(&2.into()); assert_eq!(set.size(), 2); set.add(&3.into()); assert_eq!(set.size(), 3); } #[wasm_bindgen_test] fn set_inheritance() { let set = Set::new(&JsValue::undefined()); assert!(set.is_instance_of::()); assert!(set.is_instance_of::()); let _: &Object = set.as_ref(); } #[wasm_bindgen_test] fn keys() { let set = Set::new(&JsValue::undefined()); set.add(&1.into()); set.add(&2.into()); set.add(&3.into()); let list = set .keys() .into_iter() .map(|e| e.unwrap()) .collect::>(); assert_eq!(list.len(), 3); assert!(list.iter().any(|l| *l == 1)); assert!(list.iter().any(|l| *l == 2)); assert!(list.iter().any(|l| *l == 3)); } #[wasm_bindgen_test] fn values() { let set = Set::new(&JsValue::undefined()); set.add(&1.into()); set.add(&2.into()); set.add(&3.into()); let list = set .values() .into_iter() .map(|e| e.unwrap()) .collect::>(); assert_eq!(list.len(), 3); assert!(list.iter().any(|l| *l == 1)); assert!(list.iter().any(|l| *l == 2)); assert!(list.iter().any(|l| *l == 3)); } js-sys-0.3.35/tests/wasm/SetIterator.rs010066400017500001750000000017361346762025200162170ustar0000000000000000use js_sys::*; use wasm_bindgen::prelude::*; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn entries() { let s = Set::new(&JsValue::undefined()); s.add(&1.into()); let iter = s.entries(); let obj = iter.next().unwrap(); assert!(!obj.done()); let array = Array::from(&obj.value()); assert_eq!(array.length(), 2); array.for_each(&mut |a, _, _| { assert_eq!(a, 1); }); assert!(iter.next().unwrap().done()); } #[wasm_bindgen_test] fn keys() { let s = Set::new(&JsValue::undefined()); s.add(&1.into()); let iter = s.keys(); let obj = iter.next().unwrap(); assert!(!obj.done()); assert_eq!(obj.value(), 1); assert!(iter.next().unwrap().done()); } #[wasm_bindgen_test] fn values() { let s = Set::new(&JsValue::undefined()); s.add(&1.into()); let iter = s.values(); let obj = iter.next().unwrap(); assert!(!obj.done()); assert_eq!(obj.value(), 1); assert!(iter.next().unwrap().done()); } js-sys-0.3.35/tests/wasm/SharedArrayBuffer.js010066400017500001750000000001601347603543600172730ustar0000000000000000exports.is_shared_array_buffer_supported = function () { return typeof SharedArrayBuffer === 'function'; }; js-sys-0.3.35/tests/wasm/SharedArrayBuffer.rs010066400017500001750000000025521347603543600173120ustar0000000000000000use js_sys::*; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use wasm_bindgen_test::*; #[wasm_bindgen(module = "tests/wasm/SharedArrayBuffer.js")] extern "C" { fn is_shared_array_buffer_supported() -> bool; } #[wasm_bindgen_test] fn new() { if !is_shared_array_buffer_supported() { return; } let x = SharedArrayBuffer::new(42); let y: JsValue = x.into(); assert!(y.is_object()); } #[wasm_bindgen_test] fn byte_length() { if !is_shared_array_buffer_supported() { return; } let buf = SharedArrayBuffer::new(42); assert_eq!(buf.byte_length(), 42); } #[wasm_bindgen_test] fn slice() { if !is_shared_array_buffer_supported() { return; } let buf = SharedArrayBuffer::new(4); let slice = buf.slice(2); assert!(JsValue::from(slice).is_object()); } #[wasm_bindgen_test] fn slice_with_end() { if !is_shared_array_buffer_supported() { return; } let buf = SharedArrayBuffer::new(4); let slice = buf.slice_with_end(1, 2); assert!(JsValue::from(slice).is_object()); } #[wasm_bindgen_test] fn sharedarraybuffer_inheritance() { if !is_shared_array_buffer_supported() { return; } let buf = SharedArrayBuffer::new(4); assert!(buf.is_instance_of::()); assert!(buf.is_instance_of::()); let _: &Object = buf.as_ref(); } js-sys-0.3.35/tests/wasm/Symbol.js010066400017500001750000000061721357224506100152040ustar0000000000000000const assert = require('assert'); exports.test_has_instance = function(sym) { class Array1 { static [sym](instance) { return Array.isArray(instance); } } assert.equal(typeof sym, "symbol"); assert.ok([] instanceof Array1); }; exports.test_is_concat_spreadable = function(sym) { const alpha = ['a', 'b', 'c']; const numeric = [1, 2, 3]; let alphaNumeric = alpha.concat(numeric); assert.deepEqual(alphaNumeric, ["a", "b", "c", 1, 2, 3]); numeric[sym] = false; alphaNumeric = alpha.concat(numeric); assert.deepEqual(alphaNumeric, ["a", "b", "c", numeric]); }; exports.test_iterator = function(sym) { const iterable1 = new Object(); iterable1[sym] = function* () { yield 1; yield 2; yield 3; }; assert.deepEqual([...iterable1], [1, 2, 3]); }; exports.test_async_iterator = async function(sym) { const iterable1 = new Object(); iterable1[sym] = function () { let done = false; return { next() { if (done) { return Promise.resolve({ done: true, value: 1 }); } else { done = true; return Promise.resolve({ done: false, value: 0 }); } } }; }; const values = []; for await (let value of iterable1) { values.push(value); } assert.deepEqual(values, [0]); }; exports.test_match = function(sym) { const regexp1 = /foo/; assert.throws(() => '/foo/'.startsWith(regexp1)); regexp1[sym] = false; assert.ok('/foo/'.startsWith(regexp1)); assert.equal('/baz/'.endsWith(regexp1), false); }; exports.test_replace = function(sym) { class Replace1 { constructor(value) { this.value = value; } [sym](string) { return `s/${string}/${this.value}/g`; } } assert.equal('foo'.replace(new Replace1('bar')), 's/foo/bar/g'); }; exports.test_search = function(sym) { class Search1 { constructor(value) { this.value = value; } [sym](string) { return string.indexOf(this.value); } } assert.equal('foobar'.search(new Search1('bar')), 3); }; exports.test_species = function(sym) { class Array1 extends Array { static get [sym]() { return Array; } } const a = new Array1(1, 2, 3); const mapped = a.map(x => x * x); assert.equal(mapped instanceof Array1, false); assert.ok(mapped instanceof Array); }; exports.test_split = function(sym) { class Split1 { constructor(value) { this.value = value; } [sym](string) { var index = string.indexOf(this.value); return this.value + string.substr(0, index) + "/" + string.substr(index + this.value.length); } } assert.equal('foobar'.split(new Split1('foo')), 'foo/bar'); }; exports.test_to_primitive = function(sym) { const object1 = { [sym](hint) { if (hint == 'number') { return 42; } return null; } }; assert.equal(+object1, 42); }; exports.test_to_string_tag = function(sym) { class ValidatorClass { get [sym]() { return 'Validator'; } } assert.equal(Object.prototype.toString.call(new ValidatorClass()), '[object Validator]'); }; js-sys-0.3.35/tests/wasm/Symbol.rs010066400017500001750000000060341360512735500152130ustar0000000000000000use js_sys::*; use wasm_bindgen::prelude::*; use wasm_bindgen_futures::JsFuture; use wasm_bindgen_test::*; #[wasm_bindgen(module = "tests/wasm/Symbol.js")] extern "C" { fn test_has_instance(sym: &Symbol); fn test_is_concat_spreadable(sym: &Symbol); fn test_iterator(sym: &Symbol); fn test_async_iterator(sym: &Symbol) -> Promise; fn test_match(sym: &Symbol); fn test_replace(sym: &Symbol); fn test_search(sym: &Symbol); fn test_species(sym: &Symbol); fn test_split(sym: &Symbol); fn test_to_primitive(sym: &Symbol); fn test_to_string_tag(sym: &Symbol); } #[wasm_bindgen] extern "C" { #[wasm_bindgen(js_name = Symbol)] fn gensym(val: JsValue) -> Symbol; } #[wasm_bindgen_test] fn has_instance() { test_has_instance(&Symbol::has_instance()); } #[wasm_bindgen_test] fn is_concat_spreadable() { test_is_concat_spreadable(&Symbol::is_concat_spreadable()); } #[wasm_bindgen_test] fn iterator() { test_iterator(&Symbol::iterator()); } #[wasm_bindgen_test] async fn async_iterator() { JsFuture::from(test_async_iterator(&Symbol::async_iterator())) .await .unwrap_throw(); } #[wasm_bindgen_test] fn match_() { test_match(&Symbol::match_()); } #[wasm_bindgen_test] fn replace() { test_replace(&Symbol::replace()); } #[wasm_bindgen_test] fn search() { test_search(&Symbol::search()); } #[wasm_bindgen_test] fn species() { test_species(&Symbol::species()); } #[wasm_bindgen_test] fn split() { test_split(&Symbol::split()); } #[wasm_bindgen_test] fn to_primitive() { test_to_primitive(&Symbol::to_primitive()); } #[wasm_bindgen_test] fn to_string_tag() { test_to_string_tag(&Symbol::to_string_tag()); } #[wasm_bindgen_test] fn for_() { let foo = JsValue::from(Symbol::for_("foo")); let bar = JsValue::from(Symbol::for_("bar")); assert_eq!(foo, foo); assert_eq!(bar, bar); assert_ne!(foo, bar); assert_ne!(bar, foo); assert_eq!(Symbol::for_("mario").to_string(), "Symbol(mario)"); } #[wasm_bindgen_test] fn key_for() { let sym = Symbol::for_("foo"); assert_eq!(Symbol::key_for(&sym), "foo"); assert!(Symbol::key_for(&Symbol::iterator()).is_undefined()); assert!(Symbol::key_for(&Symbol::async_iterator()).is_undefined()); assert!(Symbol::key_for(&gensym(JsValue::undefined())).is_undefined()); } #[wasm_bindgen_test] fn to_string() { assert_eq!(Symbol::iterator().to_string(), "Symbol(Symbol.iterator)"); assert_eq!( Symbol::async_iterator().to_string(), "Symbol(Symbol.asyncIterator)" ); assert_eq!(Symbol::for_("foo").to_string(), "Symbol(foo)"); assert_eq!(gensym("desc".into()).to_string(), "Symbol(desc)"); } #[wasm_bindgen_test] fn unscopables() { assert_eq!( Symbol::unscopables().to_string(), "Symbol(Symbol.unscopables)" ); } #[wasm_bindgen_test] fn value_of() { let a = Symbol::for_("foo"); assert_eq!(JsValue::from(a.value_of()), JsValue::from(a)); let a = gensym(JsValue::undefined()); assert_eq!(JsValue::from(a.value_of()), JsValue::from(a)); } js-sys-0.3.35/tests/wasm/SyntaxError.rs010066400017500001750000000007531346762025200162500ustar0000000000000000use js_sys::*; use wasm_bindgen::JsCast; use wasm_bindgen::JsValue; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn syntax_error() { let error = SyntaxError::new("msg"); assert!(error.is_instance_of::()); assert!(error.is_instance_of::()); assert!(error.is_instance_of::()); let _: &Error = error.as_ref(); let _: &Object = error.as_ref(); let base: &Error = error.as_ref(); assert_eq!(JsValue::from(base.message()), "msg"); } js-sys-0.3.35/tests/wasm/TypeError.rs010066400017500001750000000007451346762025200157040ustar0000000000000000use js_sys::*; use wasm_bindgen::JsCast; use wasm_bindgen::JsValue; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn type_error() { let error = TypeError::new("msg"); assert!(error.is_instance_of::()); assert!(error.is_instance_of::()); assert!(error.is_instance_of::()); let _: &Error = error.as_ref(); let _: &Object = error.as_ref(); let base: &Error = error.as_ref(); assert_eq!(JsValue::from(base.message()), "msg"); } js-sys-0.3.35/tests/wasm/TypedArray.rs010066400017500001750000000062041355660747200160410ustar0000000000000000use js_sys::*; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use wasm_bindgen_test::*; macro_rules! each { ($m:ident) => { $m!(Uint8Array); $m!(Uint8ClampedArray); $m!(Uint16Array); $m!(Uint32Array); $m!(Int8Array); $m!(Int16Array); $m!(Int32Array); $m!(Float32Array); $m!(Float64Array); }; } macro_rules! test_inheritence { ($arr:ident) => {{ let arr = $arr::new(&JsValue::undefined()); assert!(arr.is_instance_of::<$arr>()); let _: &Object = arr.as_ref(); assert!(arr.is_instance_of::()); }}; } #[wasm_bindgen_test] fn inheritence() { each!(test_inheritence); } macro_rules! test_undefined { ($arr:ident) => {{ let arr = $arr::new(&JsValue::undefined()); assert_eq!(arr.length(), 0); assert_eq!(arr.byte_length(), 0); assert_eq!(arr.byte_offset(), 0); assert!(JsValue::from(arr.buffer()).is_object()); }}; } #[wasm_bindgen_test] fn new_undefined() { each!(test_undefined); } macro_rules! test_length { ($arr:ident) => {{ let arr = $arr::new(&4.into()); assert_eq!(arr.length(), 4); assert!(arr.byte_length() != 0); assert_eq!(arr.byte_offset(), 0); assert!(JsValue::from(arr.buffer()).is_object()); }}; } #[wasm_bindgen_test] fn new_length() { each!(test_length); } macro_rules! test_subarray { ($arr:ident) => {{ assert_eq!($arr::new(&4.into()).subarray(0, 1).length(), 1); }}; } #[wasm_bindgen_test] fn new_subarray() { each!(test_subarray); } macro_rules! test_fill { ($arr:ident) => {{ let arr = $arr::new(&4.into()); arr.for_each(&mut |x, _, _| { assert_eq!(x as f64, 0.0); }); arr.fill(2 as _, 0, 2); arr.for_each(&mut |x, i, _| { if i < 2 { assert_eq!(x as f64, 2.0); } else { assert_eq!(x as f64, 0.0); } }); }}; } #[wasm_bindgen_test] fn new_fill() { each!(test_fill); } macro_rules! test_slice { ($arr:ident) => {{ let arr = $arr::new(&4.into()); assert_eq!(arr.length(), 4); assert_eq!(arr.slice(1, 2).length(), 1); }}; } #[wasm_bindgen_test] fn new_slice() { each!(test_slice); } #[wasm_bindgen_test] fn view() { let x = [1, 2, 3]; let array = unsafe { Int32Array::view(&x) }; assert_eq!(array.length(), 3); array.for_each(&mut |x, i, _| { assert_eq!(x, (i + 1) as i32); }); } #[wasm_bindgen_test] fn from() { let x: Vec = vec![1, 2, 3]; let array = Int32Array::from(x.as_slice()); assert_eq!(array.length(), 3); array.for_each(&mut |x, i, _| { assert_eq!(x, (i + 1) as i32); }); } #[wasm_bindgen_test] fn copy_to() { let mut x = [0; 10]; let array = Int32Array::new(&10.into()); array.fill(5, 0, 10); array.copy_to(&mut x); for i in x.iter() { assert_eq!(*i, 5); } } #[wasm_bindgen_test] fn to_vec() { let array = Int32Array::new(&10.into()); array.fill(5, 0, 10); assert_eq!(array.to_vec(), vec![5, 5, 5, 5, 5, 5, 5, 5, 5, 5]); } js-sys-0.3.35/tests/wasm/UriError.rs010066400017500001750000000007421346762025200155170ustar0000000000000000use js_sys::*; use wasm_bindgen::JsCast; use wasm_bindgen::JsValue; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn uri_error() { let error = UriError::new("msg"); assert!(error.is_instance_of::()); assert!(error.is_instance_of::()); assert!(error.is_instance_of::()); let _: &Error = error.as_ref(); let _: &Object = error.as_ref(); let base: &Error = error.as_ref(); assert_eq!(JsValue::from(base.message()), "msg"); } js-sys-0.3.35/tests/wasm/WeakMap.rs010066400017500001750000000026671346762025200153030ustar0000000000000000use js_sys::*; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use wasm_bindgen_test::*; #[wasm_bindgen] extern "C" { type SomeKey; #[wasm_bindgen(method, setter, structural)] fn set_some(this: &SomeKey, val: JsValue); } fn some_key() -> Object { let key = SomeKey::from(JsValue::from(Object::new())); key.set_some("key".into()); Object::from(JsValue::from(key)) } #[wasm_bindgen_test] fn new() { assert!(JsValue::from(WeakMap::new()).is_object()); } #[wasm_bindgen_test] fn get_and_set() { let map = WeakMap::new(); let key = some_key(); map.set(&key, &"value".into()); assert_eq!(map.get(&key), "value"); assert_eq!(map.get(&Object::new()), JsValue::undefined()); assert_eq!(map.get(&some_key()), JsValue::undefined()); } #[wasm_bindgen_test] fn has() { let map = WeakMap::new(); let key = some_key(); map.set(&key, &"value".into()); assert!(map.has(&key)); assert!(!map.has(&Object::new())); assert!(!map.has(&some_key())); } #[wasm_bindgen_test] fn delete() { let map = WeakMap::new(); let key = some_key(); assert!(!map.has(&key)); map.set(&key, &"value".into()); assert!(map.has(&key)); map.delete(&key); assert!(!map.has(&key)); } #[wasm_bindgen_test] fn weakmap_inheritance() { let map = WeakMap::new(); assert!(map.is_instance_of::()); assert!(map.is_instance_of::()); let _: &Object = map.as_ref(); } js-sys-0.3.35/tests/wasm/WeakSet.rs010066400017500001750000000022261346762025200153100ustar0000000000000000use js_sys::*; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use wasm_bindgen_test::*; #[wasm_bindgen] extern "C" { type SomeValue; #[wasm_bindgen(method, setter, structural)] fn set_some(this: &SomeValue, val: JsValue); } fn some_value() -> Object { let value = SomeValue::from(JsValue::from(Object::new())); value.set_some("value".into()); Object::from(JsValue::from(value)) } #[wasm_bindgen_test] fn new() { assert!(JsValue::from(WeakSet::new()).is_object()) } #[wasm_bindgen_test] fn has() { let set = WeakSet::new(); let value = some_value(); assert!(!set.has(&value)); set.add(&value); assert!(set.has(&value)); assert!(!set.has(&some_value())); } #[wasm_bindgen_test] fn delete() { let set = WeakSet::new(); let value = some_value(); set.add(&value); assert!(set.has(&value)); assert!(set.delete(&value)); assert!(!set.has(&value)); assert!(!set.delete(&value)); } #[wasm_bindgen_test] fn weakset_inheritance() { let set = WeakSet::new(); assert!(set.is_instance_of::()); assert!(set.is_instance_of::()); let _: &Object = set.as_ref(); } js-sys-0.3.35/tests/wasm/WebAssembly.js010066400017500001750000000020751336537147500161630ustar0000000000000000const { TextEncoder } = require("util"); const data = "\u0000asm\u0001\u0000\u0000\u0000\u0001\b\u0002`\u0001\u007f\u0000`\u0000" + "\u0000\u0002\u0019\u0001\u0007imports\rimported_func\u0000\u0000\u0003" + "\u0002\u0001\u0001\u0007\u0011\u0001\rexported_func\u0000\u0001\n\b\u0001" + "\u0006\u0000A*\u0010\u0000\u000b"; const encoder = new TextEncoder(); const wasmArray = encoder.encode(data); function getWasmArray() { return wasmArray; } function getTableObject() { return { element: "anyfunc", initial: 1 } } function getInvalidTableObject() { return { element: "anyfunc", initial: 1, maximum: 0 } } function getImports() { return { imports: { imported_func: function () { return 1; } } }; } // Polyfill `WebAssembly.instantiateStreaming` for node. if (!global.WebAssembly.instantiateStreaming) { global.WebAssembly.instantiateStreaming = (response, imports) => response.then(buf => WebAssembly.instantiate(buf, imports)); } module.exports = { getInvalidTableObject, getTableObject, getWasmArray, getImports, }; js-sys-0.3.35/tests/wasm/WebAssembly.rs010066400017500001750000000142401354271045500161600ustar0000000000000000use js_sys::*; use wasm_bindgen::{prelude::*, JsCast}; use wasm_bindgen_futures::JsFuture; use wasm_bindgen_test::*; #[wasm_bindgen(module = "tests/wasm/WebAssembly.js")] extern "C" { #[wasm_bindgen(js_name = getWasmArray)] fn get_wasm_array() -> Uint8Array; #[wasm_bindgen(js_name = getTableObject)] fn get_table_object() -> Object; #[wasm_bindgen(js_name = getInvalidTableObject)] fn get_invalid_table_object() -> Object; #[wasm_bindgen(js_name = getImports)] fn get_imports() -> Object; } fn get_invalid_wasm() -> JsValue { ArrayBuffer::new(42).into() } fn get_bad_type_wasm() -> JsValue { 2.into() } fn get_valid_wasm() -> JsValue { get_wasm_array().into() } #[wasm_bindgen_test] fn validate() { assert!(!WebAssembly::validate(&get_invalid_wasm()).unwrap()); assert!(WebAssembly::validate(&get_bad_type_wasm()).is_err()); } #[wasm_bindgen_test] async fn compile_compile_error() { let p = WebAssembly::compile(&get_invalid_wasm()); let e = JsFuture::from(p).await.unwrap_err(); assert!(e.is_instance_of::()); } #[wasm_bindgen_test] async fn compile_type_error() { let p = WebAssembly::compile(&get_bad_type_wasm()); let e = JsFuture::from(p).await.unwrap_err(); assert!(e.is_instance_of::()); } #[wasm_bindgen_test] async fn compile_valid() { let p = WebAssembly::compile(&get_valid_wasm()); let module = JsFuture::from(p).await.unwrap(); assert!(module.is_instance_of::()); } #[wasm_bindgen_test] fn module_inheritance() { let module = WebAssembly::Module::new(&get_valid_wasm()).unwrap(); assert!(module.is_instance_of::()); assert!(module.is_instance_of::()); let _: &Object = module.as_ref(); } #[wasm_bindgen_test] fn module_error() { let error = WebAssembly::Module::new(&get_invalid_wasm()).err().unwrap(); assert!(error.is_instance_of::()); let error = WebAssembly::Module::new(&get_bad_type_wasm()) .err() .unwrap(); assert!(error.is_instance_of::()); } #[wasm_bindgen_test] fn module_custom_sections() { let module = WebAssembly::Module::new(&get_valid_wasm()).unwrap(); let cust_sec = WebAssembly::Module::custom_sections(&module, "abcd"); assert_eq!(cust_sec.length(), 0); } #[wasm_bindgen_test] fn module_exports() { let module = WebAssembly::Module::new(&get_valid_wasm()).unwrap(); let exports = WebAssembly::Module::exports(&module); assert_eq!(exports.length(), 1); } #[wasm_bindgen_test] fn module_imports() { let module = WebAssembly::Module::new(&get_valid_wasm()).unwrap(); let imports = WebAssembly::Module::imports(&module); assert_eq!(imports.length(), 1); } #[wasm_bindgen_test] fn table_inheritance() { let table = WebAssembly::Table::new(&get_table_object().into()).unwrap(); assert!(table.is_instance_of::()); assert!(table.is_instance_of::()); let _: &Object = table.as_ref(); } #[wasm_bindgen_test] fn table_error() { let error = WebAssembly::Table::new(&get_invalid_table_object()) .err() .unwrap(); assert!(error.is_instance_of::()); } #[wasm_bindgen_test] fn table() { let table = WebAssembly::Table::new(&get_table_object().into()).unwrap(); assert_eq!(table.length(), 1); assert!(table.get(0).is_ok()); assert!(table.get(999).is_err()); table.grow(1).unwrap(); assert_eq!(table.length(), 2); let f = table.get(0).unwrap(); table.set(1, &f).unwrap(); } #[wasm_bindgen_test] fn compile_error_inheritance() { let error = WebAssembly::CompileError::new(""); assert!(error.is_instance_of::()); assert!(error.is_instance_of::()); let _: &Error = error.as_ref(); } #[wasm_bindgen_test] fn link_error_inheritance() { let error = WebAssembly::LinkError::new(""); assert!(error.is_instance_of::()); assert!(error.is_instance_of::()); let _: &Error = error.as_ref(); } #[wasm_bindgen_test] fn runtime_error_inheritance() { let error = WebAssembly::RuntimeError::new(""); assert!(error.is_instance_of::()); assert!(error.is_instance_of::()); let _: &Error = error.as_ref(); } #[wasm_bindgen_test] fn webassembly_instance() { let module = WebAssembly::Module::new(&get_valid_wasm()).unwrap(); let imports = get_imports(); let instance = WebAssembly::Instance::new(&module, &imports).unwrap(); // Inheritance chain is correct. assert!(instance.is_instance_of::()); assert!(instance.is_instance_of::()); let _: &Object = instance.as_ref(); // Has expected exports. let exports = instance.exports(); assert!(Reflect::has(exports.as_ref(), &"exported_func".into()).unwrap()); } #[wasm_bindgen_test] async fn instantiate_module() { let module = WebAssembly::Module::new(&get_valid_wasm()).unwrap(); let imports = get_imports(); let p = WebAssembly::instantiate_module(&module, &imports); let inst = JsFuture::from(p).await.unwrap(); assert!(inst.is_instance_of::()); } #[wasm_bindgen_test] async fn instantiate_streaming() { let response = Promise::resolve(&get_valid_wasm()); let imports = get_imports(); let p = WebAssembly::instantiate_streaming(&response, &imports); let obj = JsFuture::from(p).await.unwrap(); assert!(Reflect::get(obj.as_ref(), &"instance".into()) .unwrap() .is_instance_of::()); } #[wasm_bindgen_test] fn memory_works() { let obj = Object::new(); Reflect::set(obj.as_ref(), &"initial".into(), &1.into()).unwrap(); let mem = WebAssembly::Memory::new(&obj).unwrap(); assert!(mem.is_instance_of::()); assert!(mem.is_instance_of::()); assert!(mem.buffer().is_instance_of::()); assert_eq!(mem.grow(1), 1); assert_eq!(mem.grow(2), 2); assert_eq!(mem.grow(3), 4); assert_eq!( mem.buffer() .dyn_into::() .unwrap() .byte_length(), 7 * 64 * 1024, ); } js-sys-0.3.35/tests/wasm/global_fns.rs010066400017500001750000000046071346762025200160600ustar0000000000000000use std::f64::{INFINITY, NAN}; use js_sys::*; use wasm_bindgen_test::*; #[wasm_bindgen_test] fn test_decode_uri() { let x = decode_uri("https://mozilla.org/?x=%D1%88%D0%B5%D0%BB%D0%BB%D1%8B") .ok() .expect("should decode URI OK"); assert_eq!(String::from(x), "https://mozilla.org/?x=шеллы"); assert!(decode_uri("%E0%A4%A").is_err()); } #[wasm_bindgen_test] fn test_decode_uri_component() { let x = decode_uri_component("%3Fx%3Dtest") .ok() .expect("should decode URI OK"); assert_eq!(String::from(x), "?x=test"); assert!(decode_uri_component("%E0%A4%A").is_err()); } #[wasm_bindgen_test] fn test_encode_uri() { let x = encode_uri("ABC abc 123"); assert_eq!(String::from(x), "ABC%20abc%20123"); } #[wasm_bindgen_test] fn test_encode_uri_component() { let x = encode_uri_component("?x=шеллы"); assert_eq!(String::from(x), "%3Fx%3D%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"); } #[wasm_bindgen_test] fn test_eval() { let x = eval("42").ok().expect("should eval OK"); assert_eq!(x.as_f64().unwrap(), 42.0); let err = eval("(function () { throw 42; }())") .err() .expect("eval should throw"); assert_eq!(err.as_f64().unwrap(), 42.0); } #[wasm_bindgen_test] fn test_is_finite() { assert!(is_finite(&42.into())); assert!(is_finite(&42.1.into())); assert!(is_finite(&"42".into())); assert!(!is_finite(&NAN.into())); assert!(!is_finite(&INFINITY.into())); } #[wasm_bindgen_test] fn test_parse_int_float() { let i = parse_int("42", 10); assert_eq!(i as i64, 42); let i = parse_int("42", 16); assert_eq!(i as i64, 66); // 0x42 == 66 let i = parse_int("invalid int", 10); assert!(i.is_nan()); let f = parse_float("123456.789"); assert_eq!(f, 123456.789); let f = parse_float("invalid float"); assert!(f.is_nan()); } #[wasm_bindgen_test] fn test_escape() { assert_eq!(String::from(escape("test")), "test"); assert_eq!(String::from(escape("äöü")), "%E4%F6%FC"); assert_eq!(String::from(escape("ć")), "%u0107"); assert_eq!(String::from(escape("@*_+-./")), "@*_+-./"); } #[wasm_bindgen_test] fn test_unescape() { assert_eq!(String::from(unescape("abc123")), "abc123"); assert_eq!(String::from(unescape("%E4%F6%FC")), "äöü"); assert_eq!(String::from(unescape("%u0107")), "ć"); assert_eq!(String::from(unescape("@*_+-./")), "@*_+-./"); } js-sys-0.3.35/tests/wasm/main.rs010066400017500001750000000013211354317317300146640ustar0000000000000000#![cfg(target_arch = "wasm32")] #![allow(non_snake_case)] pub mod Array; pub mod ArrayBuffer; pub mod ArrayIterator; pub mod Boolean; pub mod DataView; pub mod Date; pub mod Error; pub mod EvalError; pub mod Function; pub mod Generator; pub mod Intl; pub mod Iterator; pub mod JSON; pub mod JsString; pub mod Map; pub mod MapIterator; pub mod Math; pub mod Number; pub mod Object; pub mod Promise; pub mod Proxy; pub mod RangeError; pub mod ReferenceError; pub mod Reflect; pub mod RegExp; pub mod Set; pub mod SetIterator; pub mod SharedArrayBuffer; pub mod Symbol; pub mod SyntaxError; pub mod TypeError; pub mod TypedArray; pub mod UriError; pub mod WeakMap; pub mod WeakSet; pub mod WebAssembly; pub mod global_fns;