diff --git a/Cargo.lock b/Cargo.lock index ebb84d0..8ea2530 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,6 +8,18 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -17,6 +29,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + [[package]] name = "anstream" version = "0.6.14" @@ -122,15 +140,6 @@ dependencies = [ "serde", ] -[[package]] -name = "btoi" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd6407f73a9b8b6162d8a2ef999fe6afd7cc15902ebf42c5cd296addf17e0ad" -dependencies = [ - "num-traits", -] - [[package]] name = "bumpalo" version = "3.16.0" @@ -171,9 +180,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.105" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5208975e568d83b6b05cc0a063c8e7e9acc2b43bee6da15616a5b73e109d7437" +checksum = "eaff6f8ce506b9773fa786672d63fc7a191ffea1be33f72bbd4aeacefca9ffc8" [[package]] name = "cfg-if" @@ -183,9 +192,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.5.8" +version = "4.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b3edb18336f4df585bc9aa31dd99c036dfa5dc5e9a2939a722a188f3a8970d" +checksum = "64acc1846d54c1fe936a78dc189c34e28d3f5afc348403f28ecf53660b9b8462" dependencies = [ "clap_builder", "clap_derive", @@ -193,9 +202,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.8" +version = "4.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1c09dd5ada6c6c78075d6fd0da3f90d8080651e2d6cc8eb2f1aaa4034ced708" +checksum = "6fb8393d67ba2e7bfaf28a23458e4e2b543cc73a99595511eb207fdb8aede942" dependencies = [ "anstream", "anstyle", @@ -279,6 +288,7 @@ dependencies = [ "titlecase", "unicode_titlecase", "vergen", + "wasm-bindgen", ] [[package]] @@ -361,6 +371,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -372,9 +388,9 @@ dependencies = [ [[package]] name = "gix" -version = "0.57.1" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd025382892c7b500a9ce1582cd803f9c2ebfe44aff52e9c7f86feee7ced75e" +checksum = "984c5018adfa7a4536ade67990b3ebc6e11ab57b3d6cd9968de0947ca99b4b06" dependencies = [ "gix-actor", "gix-commitgraph", @@ -410,18 +426,17 @@ dependencies = [ "signal-hook", "smallvec", "thiserror", - "unicode-normalization", ] [[package]] name = "gix-actor" -version = "0.29.1" +version = "0.31.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da27b5ab4ab5c75ff891dccd48409f8cc53c28a79480f1efdd33184b2dc1d958" +checksum = "d9b8ee65074b2bbb91d9d97c15d172ea75043aefebf9869b5b329149dc76501c" dependencies = [ "bstr", - "btoi", "gix-date", + "gix-utils", "itoa", "thiserror", "winnow", @@ -447,9 +462,9 @@ dependencies = [ [[package]] name = "gix-commitgraph" -version = "0.23.2" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8dcbf434951fa477063e05fea59722615af70dc2567377e58c2f7853b010fc" +checksum = "f7b102311085da4af18823413b5176d7c500fb2272eaf391cfa8635d8bcb12c4" dependencies = [ "bstr", "gix-chunk", @@ -461,9 +476,9 @@ dependencies = [ [[package]] name = "gix-config" -version = "0.33.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "367304855b369cadcac4ee5fb5a3a20da9378dd7905106141070b79f85241079" +checksum = "53fafe42957e11d98e354a66b6bd70aeea00faf2f62dd11164188224a507c840" dependencies = [ "bstr", "gix-config-value", @@ -507,9 +522,9 @@ dependencies = [ [[package]] name = "gix-diff" -version = "0.39.1" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6a0454f8c42d686f17e7f084057c717c082b7dbb8209729e4e8f26749eb93a" +checksum = "40b9bd8b2d07b6675a840b56a6c177d322d45fa082672b0dad8f063b25baf0a4" dependencies = [ "bstr", "gix-hash", @@ -519,12 +534,13 @@ dependencies = [ [[package]] name = "gix-discover" -version = "0.28.1" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8d7b2896edc3d899d28a646ccc6df729827a6600e546570b2783466404a42d6" +checksum = "fc27c699b63da66b50d50c00668bc0b7e90c3a382ef302865e891559935f3dbf" dependencies = [ "bstr", "dunce", + "gix-fs", "gix-hash", "gix-path", "gix-ref", @@ -534,14 +550,15 @@ dependencies = [ [[package]] name = "gix-features" -version = "0.37.2" +version = "0.38.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d50270e8dcc665f30ba0735b17984b9535bdf1e646c76e638e007846164d57af" +checksum = "ac7045ac9fe5f9c727f38799d002a7ed3583cd777e3322a7c4b43e3cf437dc69" dependencies = [ "crc32fast", "flate2", "gix-hash", "gix-trace", + "gix-utils", "libc", "once_cell", "prodash", @@ -552,18 +569,20 @@ dependencies = [ [[package]] name = "gix-fs" -version = "0.9.1" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7555c23a005537434bbfcb8939694e18cad42602961d0de617f8477cc2adecdd" +checksum = "c3338ff92a2164f5209f185ec0cd316f571a72676bb01d27e22f2867ba69f77a" dependencies = [ + "fastrand", "gix-features", + "gix-utils", ] [[package]] name = "gix-glob" -version = "0.15.1" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae6232f18b262770e343dcdd461c0011c9b9ae27f0c805e115012aa2b902c1b8" +checksum = "c2a29ad0990cf02c48a7aac76ed0dbddeb5a0d070034b83675cc3bbf937eace4" dependencies = [ "bitflags 2.6.0", "bstr", @@ -594,14 +613,14 @@ dependencies = [ [[package]] name = "gix-index" -version = "0.28.2" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e50e63df6c8d4137f7fb882f27643b3a9756c468a1a2cdbe1ce443010ca8778" +checksum = "2d8c5a5f1c58edcbc5692b174cda2703aba82ed17d7176ff4c1752eb48b1b167" dependencies = [ "bitflags 2.6.0", "bstr", - "btoi", "filetime", + "fnv", "gix-bitmap", "gix-features", "gix-fs", @@ -609,6 +628,9 @@ dependencies = [ "gix-lock", "gix-object", "gix-traverse", + "gix-utils", + "gix-validate", + "hashbrown", "itoa", "libc", "memmap2", @@ -619,9 +641,9 @@ dependencies = [ [[package]] name = "gix-lock" -version = "12.0.1" +version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40a439397f1e230b54cf85d52af87e5ea44cc1e7748379785d3f6d03d802b00" +checksum = "e3bc7fe297f1f4614774989c00ec8b1add59571dc9b024b4c00acb7dedd4e19d" dependencies = [ "gix-tempfile", "gix-utils", @@ -641,16 +663,16 @@ dependencies = [ [[package]] name = "gix-object" -version = "0.40.1" +version = "0.42.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c89402e8faa41b49fde348665a8f38589e461036475af43b6b70615a6a313a2" +checksum = "25da2f46b4e7c2fa7b413ce4dffb87f69eaf89c2057e386491f4c55cadbfe386" dependencies = [ "bstr", - "btoi", "gix-actor", "gix-date", "gix-features", "gix-hash", + "gix-utils", "gix-validate", "itoa", "smallvec", @@ -660,13 +682,14 @@ dependencies = [ [[package]] name = "gix-odb" -version = "0.56.1" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46ae6da873de41c6c2b73570e82c571b69df5154dcd8f46dfafc6687767c33b1" +checksum = "e92b9790e2c919166865d0825b26cc440a387c175bed1b43a2fa99c0e9d45e98" dependencies = [ "arc-swap", "gix-date", "gix-features", + "gix-fs", "gix-hash", "gix-object", "gix-pack", @@ -679,9 +702,9 @@ dependencies = [ [[package]] name = "gix-pack" -version = "0.46.1" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "782b4d42790a14072d5c400deda9851f5765f50fe72bca6dece0da1cd6f05a9a" +checksum = "7a8da51212dbff944713edb2141ed7e002eea326b8992070374ce13a6cb610b3" dependencies = [ "clru", "gix-chunk", @@ -723,9 +746,9 @@ dependencies = [ [[package]] name = "gix-ref" -version = "0.40.1" +version = "0.44.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64d9bd1984638d8f3511a2fcbe84fcedb8a5b5d64df677353620572383f42649" +checksum = "3394a2997e5bc6b22ebc1e1a87b41eeefbcfcff3dbfa7c4bd73cb0ac8f1f3e2e" dependencies = [ "gix-actor", "gix-date", @@ -736,6 +759,7 @@ dependencies = [ "gix-object", "gix-path", "gix-tempfile", + "gix-utils", "gix-validate", "memmap2", "thiserror", @@ -744,9 +768,9 @@ dependencies = [ [[package]] name = "gix-refspec" -version = "0.21.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be219df5092c1735abb2a53eccdf775e945eea6986ee1b6e7a5896dccc0be704" +checksum = "dde848865834a54fe4d9b4573f15d0e9a68eaf3d061b42d3ed52b4b8acf880b2" dependencies = [ "bstr", "gix-hash", @@ -758,9 +782,9 @@ dependencies = [ [[package]] name = "gix-revision" -version = "0.25.1" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa78e1df3633bc937d4db15f8dca2abdb1300ca971c0fabcf9fa97e38cf4cd9f" +checksum = "63e08f8107ed1f93a83bcfbb4c38084c7cb3f6cd849793f1d5eec235f9b13b2b" dependencies = [ "bstr", "gix-date", @@ -774,9 +798,9 @@ dependencies = [ [[package]] name = "gix-revwalk" -version = "0.11.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702de5fe5c2bbdde80219f3a8b9723eb927466e7ecd187cfd1b45d986408e45f" +checksum = "4181db9cfcd6d1d0fd258e91569dbb61f94cb788b441b5294dd7f1167a3e788f" dependencies = [ "gix-commitgraph", "gix-date", @@ -801,9 +825,9 @@ dependencies = [ [[package]] name = "gix-tempfile" -version = "12.0.1" +version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8ef376d718b1f5f119b458e21b00fbf576bc9d4e26f8f383d29f5ffe3ba3eaa" +checksum = "d3b0e276cd08eb2a22e9f286a4f13a222a01be2defafa8621367515375644b99" dependencies = [ "gix-fs", "libc", @@ -822,10 +846,11 @@ checksum = "f924267408915fddcd558e3f37295cc7d6a3e50f8bd8b606cee0808c3915157e" [[package]] name = "gix-traverse" -version = "0.36.2" +version = "0.39.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65109e445ba7a409b48f34f570a4d7db72eade1dc1bcff81990a490e86c07161" +checksum = "f20cb69b63eb3e4827939f42c05b7756e3488ef49c25c412a876691d568ee2a0" dependencies = [ + "bitflags 2.6.0", "gix-commitgraph", "gix-date", "gix-hash", @@ -838,9 +863,9 @@ dependencies = [ [[package]] name = "gix-url" -version = "0.26.1" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f0f17cceb7552a231d1fec690bc2740c346554e3be6f5d2c41dfa809594dc44" +checksum = "0db829ebdca6180fbe32be7aed393591df6db4a72dbbc0b8369162390954d1cf" dependencies = [ "bstr", "gix-features", @@ -875,6 +900,10 @@ name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] [[package]] name = "heck" @@ -1413,9 +1442,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.69" +version = "2.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201fcda3845c23e8212cd466bfebf0bd20694490fc0356ae8e428e0824a915a6" +checksum = "2f0209b68b3613b093e0ec905354eccaedcfe83b8cb37cbdeae64026c3064c16" dependencies = [ "proc-macro2", "quote", @@ -1424,9 +1453,9 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.12.14" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" +checksum = "4873307b7c257eddcb50c9bedf158eb669578359fb28428bef438fec8e6ba7c2" [[package]] name = "tempfile" @@ -1511,9 +1540,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6b6a2fb3a985e99cebfaefa9faa3024743da73304ca1c683a36429613d3d22" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -1526,12 +1555,11 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "titlecase" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acc5e312c2e5385c8d3d31487041ca8ceaec09a8a1174bdfa9c6418c5f6b36fa" +checksum = "e0e20e744fbec1913fa168f3ffbef64324bbcb152c6cda8394baa79fa5ec9142" dependencies = [ "regex", - "wasm-bindgen", ] [[package]] @@ -1592,9 +1620,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "vergen" -version = "8.3.1" +version = "8.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27d6bdd219887a9eadd19e1c34f32e47fa332301184935c6d9bca26f3cca525" +checksum = "2990d9ea5967266ea0ccf413a4aa5c42a93dbcfda9cb49a97de6931726b12566" dependencies = [ "anyhow", "cargo_metadata", @@ -1605,6 +1633,12 @@ dependencies = [ "time", ] +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + [[package]] name = "wait-timeout" version = "0.2.0" @@ -1828,9 +1862,29 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.5.40" +version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" dependencies = [ "memchr", ] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml index baccb4c..d6fb7ef 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,6 +38,7 @@ lua52 = ["luamodule", "mlua/lua52"] lua51 = ["luamodule", "mlua/lua51"] luajit = ["luamodule", "mlua/luajit"] pythonmodule = ["pyo3"] +wasm = ["wasm-bindgen"] [profile.release] lto = true @@ -64,9 +65,13 @@ unicode_titlecase = "2.3" features = [ "extension-module" ] [dependencies.titlecase] - version = "3.2" + version = "3.3" features = [ "perf" ] + [dependencies.wasm-bindgen] + version = "0.2" + optional = true + [build-dependencies] strum = "0.26" strum_macros = "0.26" diff --git a/Makefile.am b/Makefile.am index 3de80ac..d3d4de3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -10,7 +10,7 @@ docdir = $(datarootdir)/doc/$(TRANSFORMED_PACKAGE_NAME) licensedir = $(datarootdir)/licenses/$(TRANSFORMED_PACKAGE_NAME) bin_PROGRAMS = decasify -decasify_SOURCES = src/bin/decasify.rs src/cli.rs src/lib.rs src/lua.rs src/python.rs src/types.rs +decasify_SOURCES = src/bin/decasify.rs src/cli.rs src/lib.rs src/lua.rs src/python.rs src/types.rs src/wasm.rs EXTRA_decasify_SOURCES = tests/cli.rs EXTRA_DIST = pyproject.toml spec/decasify_spec.lua tests/test_all.py dist_doc_DATA = README.md CHANGELOG.md diff --git a/README.md b/README.md index d8e5812..05967bf 100644 --- a/README.md +++ b/README.md @@ -162,3 +162,22 @@ input = "title with a twist: a colon" output = titlecase(input, InputLocale.EN, StyleGuide.DaringFireball) print(output) ``` + +## Use as JavaScript (WASM) Module + +Depend on the WASM based JavaScript module in your project with `npm add decasify`: + +Then import and use the provided functions and classes: + +```javascript +import { titlecase, uppercase, lowercase, InputLocale, StyleGuide } from 'decasify'; + +var input = "ILIK SU VE İTEN RÜZGARLAR" +var output = titlecase(input, InputLocale.TR) +console.log(output) + +var input = "title with a twist: a colon" +var output = titlecase(input, InputLocale.EN, StyleGuide.DaringFireball) +console.log(output) +``` + diff --git a/configure.ac b/configure.ac index 625ff3f..98d2c72 100644 --- a/configure.ac +++ b/configure.ac @@ -23,6 +23,9 @@ AM_COND_IF([DEVELOPER_MODE], [ QUE_PROGVAR([maturin]) QUE_PROGVAR([pytest]) QUE_PROGVAR([uv]) + # WASM build and testing dependencies + QUE_PROGVAR([npm]) + QUE_PROGVAR([wasmpack], [wasm-pack]) # Release tooling QUE_PROGVAR([gitcliff], [git-cliff]) ]) diff --git a/src/lib.rs b/src/lib.rs index 0b297f0..22b27b2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -18,6 +18,9 @@ pub mod lua; #[cfg(feature = "pythonmodule")] pub mod python; +#[cfg(feature = "wasm")] +pub mod wasm; + /// Convert a string to title case following typesetting conventions for a target locale pub fn to_titlecase(string: &str, locale: InputLocale, style: Option) -> String { let words: Vec<&str> = string.split_whitespace().collect(); diff --git a/src/types.rs b/src/types.rs index 5318c58..b5bfd57 100644 --- a/src/types.rs +++ b/src/types.rs @@ -4,6 +4,9 @@ use strum_macros::{Display, VariantNames}; #[cfg(feature = "pythonmodule")] use pyo3::prelude::*; +#[cfg(feature = "wasm")] +use wasm_bindgen::prelude::*; + pub type Result = result::Result>; #[derive(Debug)] @@ -20,6 +23,7 @@ impl error::Error for DecasifyError {} /// Locale selector to change language support rules of case functions. #[derive(Default, Display, VariantNames, Debug, Clone, PartialEq)] #[cfg_attr(feature = "pythonmodule", pyclass(eq, eq_int))] +#[cfg_attr(feature = "wasm", wasm_bindgen)] #[strum(serialize_all = "lowercase")] pub enum InputLocale { #[default] @@ -41,6 +45,7 @@ pub enum TargetCase { /// Style guide selector to change grammar and context rules used for title casing. #[derive(Default, Display, VariantNames, Debug, Clone, PartialEq)] #[cfg_attr(feature = "pythonmodule", pyclass(eq, eq_int))] +#[cfg_attr(feature = "wasm", wasm_bindgen)] #[strum(serialize_all = "lowercase")] pub enum StyleGuide { #[strum(serialize = "ap")] diff --git a/src/wasm.rs b/src/wasm.rs new file mode 100644 index 0000000..8e5e372 --- /dev/null +++ b/src/wasm.rs @@ -0,0 +1,24 @@ +use crate::*; +use std::result::Result; +use wasm_bindgen::prelude::*; + +pub use crate::types::{InputLocale, StyleGuide}; + +#[wasm_bindgen] +pub fn titlecase( + input: &str, + locale: InputLocale, + style: Option, +) -> Result { + Ok(to_titlecase(input, locale, style)) +} + +#[wasm_bindgen] +pub fn lowercase(input: &str, locale: InputLocale) -> Result { + Ok(to_lowercase(input, locale)) +} + +#[wasm_bindgen] +pub fn uppercase(input: &str, locale: InputLocale) -> Result { + Ok(to_uppercase(input, locale)) +} diff --git a/tests/wasm.js b/tests/wasm.js new file mode 100644 index 0000000..e0f4934 --- /dev/null +++ b/tests/wasm.js @@ -0,0 +1,9 @@ +import { titlecase, uppercase, lowercase, InputLocale, StyleGuide } from '../pkg'; + +var input = "ILIK SU VE İTEN RÜZGARLAR" +var output = titlecase(input, InputLocale.TR) +console.log(output) + +var input = "title with a twist: a colon" +var output = titlecase(input, InputLocale.EN, StyleGuide.DaringFireball) +console.log(output)