Testing & Bugfix - Ensure consistency of functions. (#1919)
This commit is contained in:
parent
bcbd5f3e6e
commit
d0e76e64a9
31 changed files with 471 additions and 1207 deletions
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
|
@ -103,7 +103,7 @@ jobs:
|
|||
sudo apt-get -y install protobuf-compiler libprotobuf-dev
|
||||
|
||||
- name: Run cargo test
|
||||
run: cargo test --locked --no-default-features --features storage-mem --workspace -- --skip api_integration
|
||||
run: cargo test --locked --no-default-features --features storage-mem,scripting,http --workspace -- --skip api_integration
|
||||
|
||||
ws-engine:
|
||||
name: WebSocket engine
|
||||
|
|
|
@ -294,3 +294,56 @@ pub async fn asynchronous(ctx: &Context<'_>, name: &str, args: Vec<Value>) -> Re
|
|||
"sleep" => sleep::sleep(ctx).await,
|
||||
)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
#[test]
|
||||
fn implementations_are_present() {
|
||||
// Accumulate and display all problems at once to avoid a test -> fix -> test -> fix cycle.
|
||||
let mut problems = Vec::new();
|
||||
|
||||
// Read the source code of this file
|
||||
let fnc_mod = include_str!("mod.rs");
|
||||
for line in fnc_mod.lines() {
|
||||
if !(line.contains("=>")
|
||||
&& (line.trim().starts_with('"') || line.trim().ends_with(',')))
|
||||
{
|
||||
// This line does not define a function name.
|
||||
continue;
|
||||
}
|
||||
|
||||
let (quote, _) = line.split_once("=>").unwrap();
|
||||
let name = quote.trim().trim_matches('"');
|
||||
|
||||
if crate::sql::function::function_names(&name).is_err() {
|
||||
problems.push(format!("couldn't parse {name} function"));
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "scripting", feature = "kv-mem"))]
|
||||
futures::executor::block_on(async {
|
||||
use crate::sql::Value;
|
||||
|
||||
let name = name.replace("::", ".");
|
||||
let sql =
|
||||
format!("RETURN function() {{ return typeof surrealdb.functions.{name}; }}");
|
||||
let dbs = crate::kvs::Datastore::new("memory").await.unwrap();
|
||||
let ses = crate::dbs::Session::for_kv().with_ns("test").with_db("test");
|
||||
let res = &mut dbs.execute(&sql, &ses, None, false).await.unwrap();
|
||||
let tmp = res.remove(0).result.unwrap();
|
||||
if tmp == Value::from("object") {
|
||||
// Assume this function is superseded by a module of the same name.
|
||||
} else if tmp != Value::from("function") {
|
||||
problems.push(format!("function {name} not exported to JavaScript: {tmp:?}"));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if !problems.is_empty() {
|
||||
eprintln!("Functions not fully implemented:");
|
||||
for problem in problems {
|
||||
eprintln!(" - {problem}");
|
||||
}
|
||||
panic!("ensure functions can be parsed in lib/src/sql/function.rs and are exported to JS in lib/src/fnc/script/modules/surrealdb");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,3 +13,46 @@ pub fn loader() -> ModuleLoader {
|
|||
.with_module("os", os::Package)
|
||||
.with_module("surrealdb", surrealdb::Package)
|
||||
}
|
||||
|
||||
macro_rules! impl_module_def {
|
||||
// Delegate to a sub-module.
|
||||
($ctx: expr, $path: literal, $name: literal, ($module: ident::$pkg: ident), $($wrapper: ident)?) => {
|
||||
{
|
||||
crate::fnc::script::modules::surrealdb::pkg::<$module::$pkg>($ctx, $name)
|
||||
}
|
||||
};
|
||||
// Call a (possibly-async) function.
|
||||
($ctx: expr, $path: literal, $name: literal, $call: ident, $($wrapper: ident)?) => {
|
||||
{
|
||||
js::Func::from($($wrapper)? (|v: js::Rest<crate::sql::value::Value>| $call(if $path == "" { $name } else { concat!($path, "::", $name) }, v.0)))
|
||||
}
|
||||
};
|
||||
// Return the value of an expression that can be converted to JS.
|
||||
($ctx: expr, $path: literal, $name: literal, ($e: expr), $($wrapper: ident)?) => {
|
||||
{
|
||||
$e
|
||||
}
|
||||
};
|
||||
($pkg: ident, $path: literal, $($name: literal => $action: tt $($wrapper: ident)?),*) => {
|
||||
impl js::ModuleDef for Package {
|
||||
fn load<'js>(_ctx: js::Ctx<'js>, module: &js::Module<'js, js::Created>) -> js::Result<()> {
|
||||
module.add("default")?;
|
||||
$(
|
||||
module.add($name)?;
|
||||
)*
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: js::Ctx<'js>, module: &js::Module<'js, js::Loaded<js::Native>>) -> js::Result<()> {
|
||||
let default = js::Object::new(ctx)?;
|
||||
$(
|
||||
module.set($name, crate::fnc::script::modules::impl_module_def!(ctx, $path, $name, $action, $($wrapper)?))?;
|
||||
default.set($name, crate::fnc::script::modules::impl_module_def!(ctx, $path, $name, $action, $($wrapper)?))?;
|
||||
)*
|
||||
module.set("default", default)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
pub(crate) use impl_module_def;
|
||||
|
|
|
@ -1,71 +1,35 @@
|
|||
use super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
mod sort;
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("combine")?;
|
||||
module.add("complement")?;
|
||||
module.add("concat")?;
|
||||
module.add("difference")?;
|
||||
module.add("distinct")?;
|
||||
module.add("flatten")?;
|
||||
module.add("group")?;
|
||||
module.add("insert")?;
|
||||
module.add("intersect")?;
|
||||
module.add("len")?;
|
||||
module.add("slice")?;
|
||||
module.add("sort")?;
|
||||
module.add("union")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("combine", Func::from(|v: Any| run("array::combine", v.0)))?;
|
||||
module.set("complement", Func::from(|v: Any| run("array::complement", v.0)))?;
|
||||
module.set("concat", Func::from(|v: Any| run("array::concat", v.0)))?;
|
||||
module.set("difference", Func::from(|v: Any| run("array::difference", v.0)))?;
|
||||
module.set("distinct", Func::from(|v: Any| run("array::distinct", v.0)))?;
|
||||
module.set("flatten", Func::from(|v: Any| run("array::flatten", v.0)))?;
|
||||
module.set("group", Func::from(|v: Any| run("array::group", v.0)))?;
|
||||
module.set("insert", Func::from(|v: Any| run("array::insert", v.0)))?;
|
||||
module.set("intersect", Func::from(|v: Any| run("array::intersect", v.0)))?;
|
||||
module.set("len", Func::from(|v: Any| run("array::len", v.0)))?;
|
||||
module.set("slice", Func::from(|v: Any| run("array::slice", v.0)))?;
|
||||
module.set("sort", Func::from(|v: Any| run("array::sort", v.0)))?;
|
||||
module.set("union", Func::from(|v: Any| run("array::union", v.0)))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("combine", Func::from(|v: Any| run("array::combine", v.0)))?;
|
||||
default.set("complement", Func::from(|v: Any| run("array::complement", v.0)))?;
|
||||
default.set("concat", Func::from(|v: Any| run("array::concat", v.0)))?;
|
||||
default.set("difference", Func::from(|v: Any| run("array::difference", v.0)))?;
|
||||
default.set("distinct", Func::from(|v: Any| run("array::distinct", v.0)))?;
|
||||
default.set("flatten", Func::from(|v: Any| run("array::flatten", v.0)))?;
|
||||
default.set("group", Func::from(|v: Any| run("array::group", v.0)))?;
|
||||
default.set("insert", Func::from(|v: Any| run("array::insert", v.0)))?;
|
||||
default.set("intersect", Func::from(|v: Any| run("array::intersect", v.0)))?;
|
||||
default.set("len", Func::from(|v: Any| run("array::len", v.0)))?;
|
||||
default.set("slice", Func::from(|v: Any| run("array::slice", v.0)))?;
|
||||
default.set("sort", Func::from(|v: Any| run("array::sort", v.0)))?;
|
||||
default.set("union", Func::from(|v: Any| run("array::union", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"array",
|
||||
"add" => run,
|
||||
"all" => run,
|
||||
"any" => run,
|
||||
"append" => run,
|
||||
"combine" => run,
|
||||
"complement" => run,
|
||||
"concat" => run,
|
||||
"difference" => run,
|
||||
"distinct" => run,
|
||||
"flatten" => run,
|
||||
"group" => run,
|
||||
"insert" => run,
|
||||
"intersect" => run,
|
||||
"join" => run,
|
||||
"len" => run,
|
||||
"max" => run,
|
||||
"min" => run,
|
||||
"pop" => run,
|
||||
"push" => run,
|
||||
"prepend" => run,
|
||||
"remove" => run,
|
||||
"reverse" => run,
|
||||
"slice" => run,
|
||||
"sort" => (sort::Package),
|
||||
"union" => run
|
||||
);
|
||||
|
|
11
lib/src/fnc/script/modules/surrealdb/functions/array/sort.rs
Normal file
11
lib/src/fnc/script/modules/surrealdb/functions/array/sort.rs
Normal file
|
@ -0,0 +1,11 @@
|
|||
use super::run;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"array::sort",
|
||||
"asc" => run,
|
||||
"desc" => run
|
||||
);
|
|
@ -1,16 +1,5 @@
|
|||
use super::super::pkg;
|
||||
use super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
mod argon2;
|
||||
mod bcrypt;
|
||||
|
@ -19,44 +8,15 @@ mod scrypt;
|
|||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("md5")?;
|
||||
module.add("sha1")?;
|
||||
module.add("sha256")?;
|
||||
module.add("sha512")?;
|
||||
module.add("argon2")?;
|
||||
module.add("bcrypt")?;
|
||||
module.add("pbkdf2")?;
|
||||
module.add("scrypt")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("md5", Func::from(|v: Any| run("crypto::md5", v.0)))?;
|
||||
module.set("sha1", Func::from(|v: Any| run("crypto::sha1", v.0)))?;
|
||||
module.set("sha256", Func::from(|v: Any| run("crypto::sha256", v.0)))?;
|
||||
module.set("sha512", Func::from(|v: Any| run("crypto::sha512", v.0)))?;
|
||||
module.set("argon2", pkg::<argon2::Package>(ctx, "argon2"))?;
|
||||
module.set("bcrypt", pkg::<bcrypt::Package>(ctx, "bcrypt"))?;
|
||||
module.set("pbkdf2", pkg::<pbkdf2::Package>(ctx, "pbkdf2"))?;
|
||||
module.set("scrypt", pkg::<scrypt::Package>(ctx, "scrypt"))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("md5", Func::from(|v: Any| run("crypto::md5", v.0)))?;
|
||||
default.set("sha1", Func::from(|v: Any| run("crypto::sha1", v.0)))?;
|
||||
default.set("sha256", Func::from(|v: Any| run("crypto::sha256", v.0)))?;
|
||||
default.set("sha512", Func::from(|v: Any| run("crypto::sha512", v.0)))?;
|
||||
default.set("argon2", pkg::<argon2::Package>(ctx, "argon2"))?;
|
||||
default.set("bcrypt", pkg::<bcrypt::Package>(ctx, "bcrypt"))?;
|
||||
default.set("pbkdf2", pkg::<pbkdf2::Package>(ctx, "pbkdf2"))?;
|
||||
default.set("scrypt", pkg::<scrypt::Package>(ctx, "scrypt"))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"crypto",
|
||||
"md5" => run,
|
||||
"sha1" => run,
|
||||
"sha256" => run,
|
||||
"sha512" => run,
|
||||
"argon2" => (argon2::Package),
|
||||
"bcrypt" => (bcrypt::Package),
|
||||
"pbkdf2" => (pbkdf2::Package),
|
||||
"scrypt" => (scrypt::Package)
|
||||
);
|
||||
|
|
|
@ -1,38 +1,11 @@
|
|||
use super::super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("compare")?;
|
||||
module.add("generate")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("compare", Func::from(|v: Any| run("crypto::argon2::compare", v.0)))?;
|
||||
module.set("generate", Func::from(|v: Any| run("crypto::argon2::generate", v.0)))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("compare", Func::from(|v: Any| run("crypto::argon2::compare", v.0)))?;
|
||||
default.set("generate", Func::from(|v: Any| run("crypto::argon2::generate", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"crypto::argon2",
|
||||
"compare" => run,
|
||||
"generate" => run
|
||||
);
|
||||
|
|
|
@ -1,38 +1,11 @@
|
|||
use super::super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("compare")?;
|
||||
module.add("generate")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("compare", Func::from(|v: Any| run("bcrypt::argon2::compare", v.0)))?;
|
||||
module.set("generate", Func::from(|v: Any| run("bcrypt::argon2::generate", v.0)))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("compare", Func::from(|v: Any| run("bcrypt::argon2::compare", v.0)))?;
|
||||
default.set("generate", Func::from(|v: Any| run("bcrypt::argon2::generate", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"crypto::bcrypt",
|
||||
"compare" => run,
|
||||
"generate" => run
|
||||
);
|
||||
|
|
|
@ -1,38 +1,11 @@
|
|||
use super::super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("compare")?;
|
||||
module.add("generate")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("compare", Func::from(|v: Any| run("pbkdf2::argon2::compare", v.0)))?;
|
||||
module.set("generate", Func::from(|v: Any| run("pbkdf2::argon2::generate", v.0)))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("compare", Func::from(|v: Any| run("pbkdf2::argon2::compare", v.0)))?;
|
||||
default.set("generate", Func::from(|v: Any| run("pbkdf2::argon2::generate", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"crypto::pbkdf2",
|
||||
"compare" => run,
|
||||
"generate" => run
|
||||
);
|
||||
|
|
|
@ -1,38 +1,11 @@
|
|||
use super::super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("compare")?;
|
||||
module.add("generate")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("compare", Func::from(|v: Any| run("scrypt::argon2::compare", v.0)))?;
|
||||
module.set("generate", Func::from(|v: Any| run("scrypt::argon2::generate", v.0)))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("compare", Func::from(|v: Any| run("scrypt::argon2::compare", v.0)))?;
|
||||
default.set("generate", Func::from(|v: Any| run("scrypt::argon2::generate", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"crypto::scrypt",
|
||||
"compare" => run,
|
||||
"generate" => run
|
||||
);
|
||||
|
|
|
@ -1,50 +1,21 @@
|
|||
use super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
mod from;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("days")?;
|
||||
module.add("hours")?;
|
||||
module.add("mins")?;
|
||||
module.add("secs")?;
|
||||
module.add("weeks")?;
|
||||
module.add("years")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("days", Func::from(|v: Any| run("duration::days", v.0)))?;
|
||||
module.set("hours", Func::from(|v: Any| run("duration::hours", v.0)))?;
|
||||
module.set("mins", Func::from(|v: Any| run("duration::mins", v.0)))?;
|
||||
module.set("secs", Func::from(|v: Any| run("duration::secs", v.0)))?;
|
||||
module.set("weeks", Func::from(|v: Any| run("duration::weeks", v.0)))?;
|
||||
module.set("years", Func::from(|v: Any| run("duration::years", v.0)))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("days", Func::from(|v: Any| run("duration::days", v.0)))?;
|
||||
default.set("hours", Func::from(|v: Any| run("duration::hours", v.0)))?;
|
||||
default.set("mins", Func::from(|v: Any| run("duration::mins", v.0)))?;
|
||||
default.set("secs", Func::from(|v: Any| run("duration::secs", v.0)))?;
|
||||
default.set("weeks", Func::from(|v: Any| run("duration::weeks", v.0)))?;
|
||||
default.set("years", Func::from(|v: Any| run("duration::years", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"duration",
|
||||
"days" => run,
|
||||
"hours" => run,
|
||||
"micros" => run,
|
||||
"millis" => run,
|
||||
"mins" => run,
|
||||
"nanos" => run,
|
||||
"secs" => run,
|
||||
"weeks" => run,
|
||||
"years" => run,
|
||||
"from" => (from::Package)
|
||||
);
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
use super::super::run;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"duration::from",
|
||||
"days" => run,
|
||||
"hours" => run,
|
||||
"micros" => run,
|
||||
"millis" => run,
|
||||
"mins" => run,
|
||||
"nanos" => run,
|
||||
"secs" => run,
|
||||
"weeks" => run,
|
||||
"years" => run
|
||||
);
|
|
@ -1,50 +1,16 @@
|
|||
use super::super::pkg;
|
||||
use super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
mod hash;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("area")?;
|
||||
module.add("bearing")?;
|
||||
module.add("centroid")?;
|
||||
module.add("distance")?;
|
||||
module.add("hash")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("area", Func::from(|v: Any| run("geo::area", v.0)))?;
|
||||
module.set("bearing", Func::from(|v: Any| run("geo::bearing", v.0)))?;
|
||||
module.set("centroid", Func::from(|v: Any| run("geo::centroid", v.0)))?;
|
||||
module.set("distance", Func::from(|v: Any| run("geo::distance", v.0)))?;
|
||||
module.set("hash", pkg::<hash::Package>(ctx, "hash"))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("area", Func::from(|v: Any| run("geo::area", v.0)))?;
|
||||
default.set("bearing", Func::from(|v: Any| run("geo::bearing", v.0)))?;
|
||||
default.set("centroid", Func::from(|v: Any| run("geo::centroid", v.0)))?;
|
||||
default.set("distance", Func::from(|v: Any| run("geo::distance", v.0)))?;
|
||||
default.set("hash", pkg::<hash::Package>(ctx, "hash"))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"geo",
|
||||
"area" => run,
|
||||
"bearing" => run,
|
||||
"centroid" => run,
|
||||
"distance" => run,
|
||||
"hash" => (hash::Package)
|
||||
);
|
||||
|
|
|
@ -1,38 +1,11 @@
|
|||
use super::super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("encode")?;
|
||||
module.add("decode")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("encode", Func::from(|v: Any| run("geo::hash::encode", v.0)))?;
|
||||
module.set("decode", Func::from(|v: Any| run("geo::hash::decode", v.0)))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("encode", Func::from(|v: Any| run("geo::hash::encode", v.0)))?;
|
||||
default.set("decode", Func::from(|v: Any| run("geo::hash::decode", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"geo::hash",
|
||||
"encode" => run,
|
||||
"decode" => run
|
||||
);
|
||||
|
|
|
@ -1,51 +1,16 @@
|
|||
use super::fut;
|
||||
use crate::sql::value::Value;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
use js::Async;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("head")?;
|
||||
module.add("get")?;
|
||||
module.add("put")?;
|
||||
module.add("post")?;
|
||||
module.add("patch")?;
|
||||
module.add("delete")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("head", Func::from(Async(|v: Any| fut("http::head", v.0))))?;
|
||||
module.set("get", Func::from(Async(|v: Any| fut("http::get", v.0))))?;
|
||||
module.set("put", Func::from(Async(|v: Any| fut("http::put", v.0))))?;
|
||||
module.set("post", Func::from(Async(|v: Any| fut("http::post", v.0))))?;
|
||||
module.set("patch", Func::from(Async(|v: Any| fut("http::patch", v.0))))?;
|
||||
module.set("delete", Func::from(Async(|v: Any| fut("http::delete", v.0))))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("head", Func::from(Async(|v: Any| fut("http::head", v.0))))?;
|
||||
default.set("get", Func::from(Async(|v: Any| fut("http::get", v.0))))?;
|
||||
default.set("put", Func::from(Async(|v: Any| fut("http::put", v.0))))?;
|
||||
default.set("post", Func::from(Async(|v: Any| fut("http::post", v.0))))?;
|
||||
default.set("patch", Func::from(Async(|v: Any| fut("http::patch", v.0))))?;
|
||||
default.set("delete", Func::from(Async(|v: Any| fut("http::delete", v.0))))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"http",
|
||||
"head" => fut Async,
|
||||
"get" => fut Async,
|
||||
"put" => fut Async,
|
||||
"post" => fut Async,
|
||||
"patch" => fut Async,
|
||||
"delete" => fut Async
|
||||
);
|
||||
|
|
|
@ -1,71 +1,23 @@
|
|||
use super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("alphanum")?;
|
||||
module.add("alpha")?;
|
||||
module.add("ascii")?;
|
||||
module.add("datetime")?;
|
||||
module.add("domain")?;
|
||||
module.add("email")?;
|
||||
module.add("hexadecimal")?;
|
||||
module.add("latitude")?;
|
||||
module.add("longitude")?;
|
||||
module.add("numeric")?;
|
||||
module.add("semver")?;
|
||||
module.add("url")?;
|
||||
module.add("uuid")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("alphanum", Func::from(|v: Any| run("is::alphanum", v.0)))?;
|
||||
module.set("alpha", Func::from(|v: Any| run("is::alpha", v.0)))?;
|
||||
module.set("ascii", Func::from(|v: Any| run("is::ascii", v.0)))?;
|
||||
module.set("datetime", Func::from(|v: Any| run("is::datetime", v.0)))?;
|
||||
module.set("domain", Func::from(|v: Any| run("is::domain", v.0)))?;
|
||||
module.set("email", Func::from(|v: Any| run("is::email", v.0)))?;
|
||||
module.set("hexadecimal", Func::from(|v: Any| run("is::hexadecimal", v.0)))?;
|
||||
module.set("latitude", Func::from(|v: Any| run("is::latitude", v.0)))?;
|
||||
module.set("longitude", Func::from(|v: Any| run("is::longitude", v.0)))?;
|
||||
module.set("numeric", Func::from(|v: Any| run("is::numeric", v.0)))?;
|
||||
module.set("semver", Func::from(|v: Any| run("is::semver", v.0)))?;
|
||||
module.set("url", Func::from(|v: Any| run("is::url", v.0)))?;
|
||||
module.set("uuid", Func::from(|v: Any| run("is::uuid", v.0)))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("alphanum", Func::from(|v: Any| run("is::alphanum", v.0)))?;
|
||||
default.set("alpha", Func::from(|v: Any| run("is::alpha", v.0)))?;
|
||||
default.set("ascii", Func::from(|v: Any| run("is::ascii", v.0)))?;
|
||||
default.set("datetime", Func::from(|v: Any| run("is::datetime", v.0)))?;
|
||||
default.set("domain", Func::from(|v: Any| run("is::domain", v.0)))?;
|
||||
default.set("email", Func::from(|v: Any| run("is::email", v.0)))?;
|
||||
default.set("hexadecimal", Func::from(|v: Any| run("is::hexadecimal", v.0)))?;
|
||||
default.set("latitude", Func::from(|v: Any| run("is::latitude", v.0)))?;
|
||||
default.set("longitude", Func::from(|v: Any| run("is::longitude", v.0)))?;
|
||||
default.set("numeric", Func::from(|v: Any| run("is::numeric", v.0)))?;
|
||||
default.set("semver", Func::from(|v: Any| run("is::semver", v.0)))?;
|
||||
default.set("url", Func::from(|v: Any| run("is::url", v.0)))?;
|
||||
default.set("uuid", Func::from(|v: Any| run("is::uuid", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"is",
|
||||
"alphanum" => run,
|
||||
"alpha" => run,
|
||||
"ascii" => run,
|
||||
"datetime" => run,
|
||||
"domain" => run,
|
||||
"email" => run,
|
||||
"email" => run,
|
||||
"hexadecimal" => run,
|
||||
"latitude" => run,
|
||||
"longitude" => run,
|
||||
"numeric" => run,
|
||||
"semver" => run,
|
||||
"url" => run,
|
||||
"uuid" => run
|
||||
);
|
||||
|
|
|
@ -1,104 +1,33 @@
|
|||
use super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("abs")?;
|
||||
module.add("bottom")?;
|
||||
module.add("ceil")?;
|
||||
module.add("fixed")?;
|
||||
module.add("floor")?;
|
||||
module.add("interquartile")?;
|
||||
module.add("max")?;
|
||||
module.add("mean")?;
|
||||
module.add("median")?;
|
||||
module.add("midhinge")?;
|
||||
module.add("min")?;
|
||||
module.add("mode")?;
|
||||
module.add("nearestrank")?;
|
||||
module.add("percentile")?;
|
||||
module.add("pow")?;
|
||||
module.add("product")?;
|
||||
module.add("round")?;
|
||||
module.add("spread")?;
|
||||
module.add("sqrt")?;
|
||||
module.add("stddev")?;
|
||||
module.add("sum")?;
|
||||
module.add("top")?;
|
||||
module.add("trimean")?;
|
||||
module.add("variance")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("abs", Func::from(|v: Any| run("math::abs", v.0)))?;
|
||||
module.set("bottom", Func::from(|v: Any| run("math::bottom", v.0)))?;
|
||||
module.set("ceil", Func::from(|v: Any| run("math::ceil", v.0)))?;
|
||||
module.set("fixed", Func::from(|v: Any| run("math::fixed", v.0)))?;
|
||||
module.set("floor", Func::from(|v: Any| run("math::floor", v.0)))?;
|
||||
module.set("interquartile", Func::from(|v: Any| run("math::interquartile", v.0)))?;
|
||||
module.set("max", Func::from(|v: Any| run("math::max", v.0)))?;
|
||||
module.set("mean", Func::from(|v: Any| run("math::mean", v.0)))?;
|
||||
module.set("median", Func::from(|v: Any| run("math::median", v.0)))?;
|
||||
module.set("midhinge", Func::from(|v: Any| run("math::midhinge", v.0)))?;
|
||||
module.set("min", Func::from(|v: Any| run("math::min", v.0)))?;
|
||||
module.set("mode", Func::from(|v: Any| run("math::mode", v.0)))?;
|
||||
module.set("nearestrank", Func::from(|v: Any| run("math::nearestrank", v.0)))?;
|
||||
module.set("percentile", Func::from(|v: Any| run("math::percentile", v.0)))?;
|
||||
module.set("pow", Func::from(|v: Any| run("math::pow", v.0)))?;
|
||||
module.set("product", Func::from(|v: Any| run("math::product", v.0)))?;
|
||||
module.set("round", Func::from(|v: Any| run("math::round", v.0)))?;
|
||||
module.set("spread", Func::from(|v: Any| run("math::spread", v.0)))?;
|
||||
module.set("sqrt", Func::from(|v: Any| run("math::sqrt", v.0)))?;
|
||||
module.set("stddev", Func::from(|v: Any| run("math::stddev", v.0)))?;
|
||||
module.set("sum", Func::from(|v: Any| run("math::sum", v.0)))?;
|
||||
module.set("top", Func::from(|v: Any| run("math::top", v.0)))?;
|
||||
module.set("trimean", Func::from(|v: Any| run("math::trimean", v.0)))?;
|
||||
module.set("variance", Func::from(|v: Any| run("math::variance", v.0)))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("abs", Func::from(|v: Any| run("math::abs", v.0)))?;
|
||||
default.set("bottom", Func::from(|v: Any| run("math::bottom", v.0)))?;
|
||||
default.set("ceil", Func::from(|v: Any| run("math::ceil", v.0)))?;
|
||||
default.set("fixed", Func::from(|v: Any| run("math::fixed", v.0)))?;
|
||||
default.set("floor", Func::from(|v: Any| run("math::floor", v.0)))?;
|
||||
default.set("interquartile", Func::from(|v: Any| run("math::interquartile", v.0)))?;
|
||||
default.set("max", Func::from(|v: Any| run("math::max", v.0)))?;
|
||||
default.set("mean", Func::from(|v: Any| run("math::mean", v.0)))?;
|
||||
default.set("median", Func::from(|v: Any| run("math::median", v.0)))?;
|
||||
default.set("midhinge", Func::from(|v: Any| run("math::midhinge", v.0)))?;
|
||||
default.set("min", Func::from(|v: Any| run("math::min", v.0)))?;
|
||||
default.set("mode", Func::from(|v: Any| run("math::mode", v.0)))?;
|
||||
default.set("nearestrank", Func::from(|v: Any| run("math::nearestrank", v.0)))?;
|
||||
default.set("percentile", Func::from(|v: Any| run("math::percentile", v.0)))?;
|
||||
default.set("pow", Func::from(|v: Any| run("math::pow", v.0)))?;
|
||||
default.set("product", Func::from(|v: Any| run("math::product", v.0)))?;
|
||||
default.set("round", Func::from(|v: Any| run("math::round", v.0)))?;
|
||||
default.set("spread", Func::from(|v: Any| run("math::spread", v.0)))?;
|
||||
default.set("sqrt", Func::from(|v: Any| run("math::sqrt", v.0)))?;
|
||||
default.set("stddev", Func::from(|v: Any| run("math::stddev", v.0)))?;
|
||||
default.set("sum", Func::from(|v: Any| run("math::sum", v.0)))?;
|
||||
default.set("top", Func::from(|v: Any| run("math::top", v.0)))?;
|
||||
default.set("trimean", Func::from(|v: Any| run("math::trimean", v.0)))?;
|
||||
default.set("variance", Func::from(|v: Any| run("math::variance", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"math",
|
||||
"abs" => run,
|
||||
"bottom" => run,
|
||||
"ceil" => run,
|
||||
"fixed" => run,
|
||||
"floor" => run,
|
||||
"interquartile" => run,
|
||||
"max" => run,
|
||||
"mean" => run,
|
||||
"median" => run,
|
||||
"midhinge" => run,
|
||||
"min" => run,
|
||||
"mode" => run,
|
||||
"nearestrank" => run,
|
||||
"percentile" => run,
|
||||
"pow" => run,
|
||||
"product" => run,
|
||||
"round" => run,
|
||||
"spread" => run,
|
||||
"sqrt" => run,
|
||||
"stddev" => run,
|
||||
"sum" => run,
|
||||
"top" => run,
|
||||
"trimean" => run,
|
||||
"variance" => run
|
||||
);
|
||||
|
|
|
@ -1,41 +1,12 @@
|
|||
use super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("id")?;
|
||||
module.add("table")?;
|
||||
module.add("tb")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("id", Func::from(|v: Any| run("meta::id", v.0)))?;
|
||||
module.set("table", Func::from(|v: Any| run("meta::table", v.0)))?;
|
||||
module.set("tb", Func::from(|v: Any| run("meta::tb", v.0)))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("id", Func::from(|v: Any| run("meta::id", v.0)))?;
|
||||
default.set("table", Func::from(|v: Any| run("meta::table", v.0)))?;
|
||||
default.set("tb", Func::from(|v: Any| run("meta::tb", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"meta",
|
||||
"id" => run,
|
||||
"table" => run,
|
||||
"tb" => run
|
||||
);
|
||||
|
|
|
@ -1,17 +1,8 @@
|
|||
use super::pkg;
|
||||
use crate::ctx::Context;
|
||||
use crate::fnc;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
use crate::sql::Value;
|
||||
use js::{Async, Result};
|
||||
|
||||
mod array;
|
||||
mod crypto;
|
||||
|
@ -30,68 +21,28 @@ mod r#type;
|
|||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("array")?;
|
||||
module.add("count")?;
|
||||
module.add("crypto")?;
|
||||
module.add("duration")?;
|
||||
module.add("geo")?;
|
||||
module.add("http")?;
|
||||
module.add("is")?;
|
||||
module.add("math")?;
|
||||
module.add("meta")?;
|
||||
module.add("not")?;
|
||||
module.add("parse")?;
|
||||
module.add("rand")?;
|
||||
module.add("string")?;
|
||||
module.add("time")?;
|
||||
module.add("type")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("array", pkg::<array::Package>(ctx, "array"))?;
|
||||
module.set("count", Func::from(|v: Any| run("count", v.0)))?;
|
||||
module.set("crypto", pkg::<crypto::Package>(ctx, "crypto"))?;
|
||||
module.set("duration", pkg::<duration::Package>(ctx, "duration"))?;
|
||||
module.set("geo", pkg::<geo::Package>(ctx, "geo"))?;
|
||||
module.set("http", pkg::<http::Package>(ctx, "http"))?;
|
||||
module.set("is", pkg::<is::Package>(ctx, "is"))?;
|
||||
module.set("math", pkg::<math::Package>(ctx, "math"))?;
|
||||
module.set("meta", pkg::<meta::Package>(ctx, "meta"))?;
|
||||
module.set("not", Func::from(|v: Any| run("not", v.0)))?;
|
||||
module.set("parse", pkg::<parse::Package>(ctx, "parse"))?;
|
||||
module.set("rand", pkg::<rand::Package>(ctx, "rand"))?;
|
||||
module.set("string", pkg::<string::Package>(ctx, "string"))?;
|
||||
module.set("time", pkg::<time::Package>(ctx, "time"))?;
|
||||
module.set("type", pkg::<r#type::Package>(ctx, "type"))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("array", pkg::<array::Package>(ctx, "array"))?;
|
||||
default.set("count", Func::from(|v: Any| run("count", v.0)))?;
|
||||
default.set("crypto", pkg::<crypto::Package>(ctx, "crypto"))?;
|
||||
default.set("duration", pkg::<duration::Package>(ctx, "duration"))?;
|
||||
default.set("geo", pkg::<geo::Package>(ctx, "geo"))?;
|
||||
default.set("http", pkg::<http::Package>(ctx, "http"))?;
|
||||
default.set("is", pkg::<is::Package>(ctx, "is"))?;
|
||||
default.set("math", pkg::<math::Package>(ctx, "math"))?;
|
||||
default.set("meta", pkg::<meta::Package>(ctx, "meta"))?;
|
||||
default.set("not", Func::from(|v: Any| run("not", v.0)))?;
|
||||
default.set("parse", pkg::<parse::Package>(ctx, "parse"))?;
|
||||
default.set("rand", pkg::<rand::Package>(ctx, "rand"))?;
|
||||
default.set("string", pkg::<string::Package>(ctx, "string"))?;
|
||||
default.set("time", pkg::<time::Package>(ctx, "time"))?;
|
||||
default.set("type", pkg::<r#type::Package>(ctx, "type"))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"", // root path
|
||||
"array" => (array::Package),
|
||||
"count" => run,
|
||||
"crypto" => (crypto::Package),
|
||||
"duration" => (duration::Package),
|
||||
"geo" => (geo::Package),
|
||||
"http" => (http::Package),
|
||||
"is" => (is::Package),
|
||||
"math" => (math::Package),
|
||||
"meta" => (meta::Package),
|
||||
"not" => run,
|
||||
"parse" => (parse::Package),
|
||||
"rand" => (rand::Package),
|
||||
"array" => (array::Package),
|
||||
"session" => (session::Package),
|
||||
"sleep" => fut Async,
|
||||
"string" => (string::Package),
|
||||
"time" => (time::Package),
|
||||
"type" => (r#type::Package)
|
||||
);
|
||||
|
||||
fn run(name: &str, args: Vec<Value>) -> Result<Value> {
|
||||
// Create a default context
|
||||
|
|
|
@ -1,36 +1,13 @@
|
|||
use super::super::pkg;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
mod email;
|
||||
mod url;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("email")?;
|
||||
module.add("url")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("email", pkg::<email::Package>(ctx, "email"))?;
|
||||
module.set("url", pkg::<url::Package>(ctx, "url"))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("email", pkg::<email::Package>(ctx, "email"))?;
|
||||
default.set("url", pkg::<url::Package>(ctx, "url"))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"parse",
|
||||
"email" => (email::Package),
|
||||
"url" => (url::Package)
|
||||
);
|
||||
|
|
|
@ -1,38 +1,11 @@
|
|||
use super::super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("host")?;
|
||||
module.add("user")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("host", Func::from(|v: Any| run("parse::email::host", v.0)))?;
|
||||
module.set("user", Func::from(|v: Any| run("parse::email::user", v.0)))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("host", Func::from(|v: Any| run("parse::email::host", v.0)))?;
|
||||
default.set("user", Func::from(|v: Any| run("parse::email::user", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"parse::email",
|
||||
"host" => run,
|
||||
"user" => run
|
||||
);
|
||||
|
|
|
@ -1,53 +1,16 @@
|
|||
use super::super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("domain")?;
|
||||
module.add("fragment")?;
|
||||
module.add("host")?;
|
||||
module.add("path")?;
|
||||
module.add("port")?;
|
||||
module.add("query")?;
|
||||
module.add("scheme")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("domain", Func::from(|v: Any| run("parse::url::domain", v.0)))?;
|
||||
module.set("fragment", Func::from(|v: Any| run("parse::url::fragment", v.0)))?;
|
||||
module.set("host", Func::from(|v: Any| run("parse::url::host", v.0)))?;
|
||||
module.set("path", Func::from(|v: Any| run("parse::url::path", v.0)))?;
|
||||
module.set("port", Func::from(|v: Any| run("parse::url::port", v.0)))?;
|
||||
module.set("query", Func::from(|v: Any| run("parse::url::query", v.0)))?;
|
||||
module.set("scheme", Func::from(|v: Any| run("parse::url::scheme", v.0)))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("domain", Func::from(|v: Any| run("parse::url::domain", v.0)))?;
|
||||
default.set("fragment", Func::from(|v: Any| run("parse::url::fragment", v.0)))?;
|
||||
default.set("host", Func::from(|v: Any| run("parse::url::host", v.0)))?;
|
||||
default.set("path", Func::from(|v: Any| run("parse::url::path", v.0)))?;
|
||||
default.set("port", Func::from(|v: Any| run("parse::url::port", v.0)))?;
|
||||
default.set("query", Func::from(|v: Any| run("parse::url::query", v.0)))?;
|
||||
default.set("scheme", Func::from(|v: Any| run("parse::url::scheme", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"parse::url",
|
||||
"domain" => run,
|
||||
"fragment" => run,
|
||||
"host" => run,
|
||||
"path" => run,
|
||||
"port" => run,
|
||||
"query" => run,
|
||||
"scheme" => run
|
||||
);
|
||||
|
|
|
@ -1,59 +1,20 @@
|
|||
use super::super::pkg;
|
||||
use super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
mod uuid;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("bool")?;
|
||||
module.add("enum")?;
|
||||
module.add("float")?;
|
||||
module.add("guid")?;
|
||||
module.add("int")?;
|
||||
module.add("string")?;
|
||||
module.add("time")?;
|
||||
module.add("uuid")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("bool", Func::from(|v: Any| run("rand::bool", v.0)))?;
|
||||
module.set("enum", Func::from(|v: Any| run("rand::enum", v.0)))?;
|
||||
module.set("float", Func::from(|v: Any| run("rand::float", v.0)))?;
|
||||
module.set("guid", Func::from(|v: Any| run("rand::guid", v.0)))?;
|
||||
module.set("int", Func::from(|v: Any| run("rand::int", v.0)))?;
|
||||
module.set("string", Func::from(|v: Any| run("rand::string", v.0)))?;
|
||||
module.set("time", Func::from(|v: Any| run("rand::time", v.0)))?;
|
||||
module.set("uuid", pkg::<uuid::Package>(ctx, "uuid"))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("bool", Func::from(|v: Any| run("rand::bool", v.0)))?;
|
||||
default.set("enum", Func::from(|v: Any| run("rand::enum", v.0)))?;
|
||||
default.set("float", Func::from(|v: Any| run("rand::float", v.0)))?;
|
||||
default.set("guid", Func::from(|v: Any| run("rand::guid", v.0)))?;
|
||||
default.set("int", Func::from(|v: Any| run("rand::int", v.0)))?;
|
||||
default.set("string", Func::from(|v: Any| run("rand::string", v.0)))?;
|
||||
default.set("time", Func::from(|v: Any| run("rand::time", v.0)))?;
|
||||
default.set("uuid", pkg::<uuid::Package>(ctx, "uuid"))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"rand",
|
||||
"bool" => run,
|
||||
"enum" => run,
|
||||
"float" => run,
|
||||
"guid" => run,
|
||||
"int" => run,
|
||||
"string" => run,
|
||||
"time" => run,
|
||||
"ulid" => run,
|
||||
"uuid" => (uuid::Package)
|
||||
);
|
||||
|
|
|
@ -1,38 +1,11 @@
|
|||
use super::super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("v4")?;
|
||||
module.add("v7")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("v4", Func::from(|v: Any| run("rand::uuid::v4", v.0)))?;
|
||||
module.set("v7", Func::from(|v: Any| run("rand::uuid::v7", v.0)))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("v4", Func::from(|v: Any| run("rand::uuid::v4", v.0)))?;
|
||||
default.set("v7", Func::from(|v: Any| run("rand::uuid::v7", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"rand::uuid",
|
||||
"v4" => run,
|
||||
"v7" => run
|
||||
);
|
||||
|
|
|
@ -1,56 +1,17 @@
|
|||
use super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("db")?;
|
||||
module.add("id")?;
|
||||
module.add("ip")?;
|
||||
module.add("ns")?;
|
||||
module.add("origin")?;
|
||||
module.add("sc")?;
|
||||
module.add("sd")?;
|
||||
module.add("token")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("db", Func::from(|v: Any| run("session::db", v.0)))?;
|
||||
module.set("id", Func::from(|v: Any| run("session::id", v.0)))?;
|
||||
module.set("ip", Func::from(|v: Any| run("session::ip", v.0)))?;
|
||||
module.set("ns", Func::from(|v: Any| run("session::ns", v.0)))?;
|
||||
module.set("origin", Func::from(|v: Any| run("session::origin", v.0)))?;
|
||||
module.set("sc", Func::from(|v: Any| run("session::sc", v.0)))?;
|
||||
module.set("sd", Func::from(|v: Any| run("session::sd", v.0)))?;
|
||||
module.set("token", Func::from(|v: Any| run("session::token", v.0)))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("db", Func::from(|v: Any| run("session::db", v.0)))?;
|
||||
default.set("id", Func::from(|v: Any| run("session::id", v.0)))?;
|
||||
default.set("ip", Func::from(|v: Any| run("session::ip", v.0)))?;
|
||||
default.set("ns", Func::from(|v: Any| run("session::ns", v.0)))?;
|
||||
default.set("origin", Func::from(|v: Any| run("session::origin", v.0)))?;
|
||||
default.set("sc", Func::from(|v: Any| run("session::sc", v.0)))?;
|
||||
default.set("sd", Func::from(|v: Any| run("session::sd", v.0)))?;
|
||||
default.set("token", Func::from(|v: Any| run("session::token", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"session",
|
||||
"db" => run,
|
||||
"id" => run,
|
||||
"ip" => run,
|
||||
"ns" => run,
|
||||
"origin" => run,
|
||||
"sc" => run,
|
||||
"sd" => run,
|
||||
"token" => run
|
||||
);
|
||||
|
|
|
@ -1,80 +1,25 @@
|
|||
use super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("concat")?;
|
||||
module.add("contains")?;
|
||||
module.add("endsWith")?;
|
||||
module.add("join")?;
|
||||
module.add("len")?;
|
||||
module.add("lowercase")?;
|
||||
module.add("repeat")?;
|
||||
module.add("replace")?;
|
||||
module.add("reverse")?;
|
||||
module.add("slice")?;
|
||||
module.add("slug")?;
|
||||
module.add("split")?;
|
||||
module.add("startsWith")?;
|
||||
module.add("trim")?;
|
||||
module.add("uppercase")?;
|
||||
module.add("words")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("concat", Func::from(|v: Any| run("string::concat", v.0)))?;
|
||||
module.set("contains", Func::from(|v: Any| run("string::contains", v.0)))?;
|
||||
module.set("endsWith", Func::from(|v: Any| run("string::endsWith", v.0)))?;
|
||||
module.set("join", Func::from(|v: Any| run("string::join", v.0)))?;
|
||||
module.set("len", Func::from(|v: Any| run("string::len", v.0)))?;
|
||||
module.set("lowercase", Func::from(|v: Any| run("string::lowercase", v.0)))?;
|
||||
module.set("repeat", Func::from(|v: Any| run("string::repeat", v.0)))?;
|
||||
module.set("replace", Func::from(|v: Any| run("string::replace", v.0)))?;
|
||||
module.set("reverse", Func::from(|v: Any| run("string::reverse", v.0)))?;
|
||||
module.set("slice", Func::from(|v: Any| run("string::slice", v.0)))?;
|
||||
module.set("slug", Func::from(|v: Any| run("string::slug", v.0)))?;
|
||||
module.set("split", Func::from(|v: Any| run("string::split", v.0)))?;
|
||||
module.set("startsWith", Func::from(|v: Any| run("string::startsWith", v.0)))?;
|
||||
module.set("trim", Func::from(|v: Any| run("string::trim", v.0)))?;
|
||||
module.set("uppercase", Func::from(|v: Any| run("string::uppercase", v.0)))?;
|
||||
module.set("words", Func::from(|v: Any| run("string::words", v.0)))?;
|
||||
// Set default export
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("concat", Func::from(|v: Any| run("string::concat", v.0)))?;
|
||||
default.set("contains", Func::from(|v: Any| run("string::contains", v.0)))?;
|
||||
default.set("endsWith", Func::from(|v: Any| run("string::endsWith", v.0)))?;
|
||||
default.set("join", Func::from(|v: Any| run("string::join", v.0)))?;
|
||||
default.set("len", Func::from(|v: Any| run("string::len", v.0)))?;
|
||||
default.set("lowercase", Func::from(|v: Any| run("string::lowercase", v.0)))?;
|
||||
default.set("repeat", Func::from(|v: Any| run("string::repeat", v.0)))?;
|
||||
default.set("replace", Func::from(|v: Any| run("string::replace", v.0)))?;
|
||||
default.set("reverse", Func::from(|v: Any| run("string::reverse", v.0)))?;
|
||||
default.set("slice", Func::from(|v: Any| run("string::slice", v.0)))?;
|
||||
default.set("slug", Func::from(|v: Any| run("string::slug", v.0)))?;
|
||||
default.set("split", Func::from(|v: Any| run("string::split", v.0)))?;
|
||||
default.set("startsWith", Func::from(|v: Any| run("string::startsWith", v.0)))?;
|
||||
default.set("trim", Func::from(|v: Any| run("string::trim", v.0)))?;
|
||||
default.set("uppercase", Func::from(|v: Any| run("string::uppercase", v.0)))?;
|
||||
default.set("words", Func::from(|v: Any| run("string::words", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"string",
|
||||
"concat" => run,
|
||||
"contains" => run,
|
||||
"endsWith" => run,
|
||||
"join" => run,
|
||||
"len" => run,
|
||||
"lowercase" => run,
|
||||
"repeat" => run,
|
||||
"replace" => run,
|
||||
"reverse" => run,
|
||||
"slice" => run,
|
||||
"slug" => run,
|
||||
"split" => run,
|
||||
"startsWith" => run,
|
||||
"trim" => run,
|
||||
"uppercase" => run,
|
||||
"words" => run
|
||||
);
|
||||
|
|
|
@ -1,83 +1,31 @@
|
|||
use super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
mod from;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("day")?;
|
||||
module.add("floor")?;
|
||||
module.add("format")?;
|
||||
module.add("group")?;
|
||||
module.add("hour")?;
|
||||
module.add("mins")?;
|
||||
module.add("month")?;
|
||||
module.add("nano")?;
|
||||
module.add("now")?;
|
||||
module.add("round")?;
|
||||
module.add("secs")?;
|
||||
module.add("timezone")?;
|
||||
module.add("unix")?;
|
||||
module.add("wday")?;
|
||||
module.add("week")?;
|
||||
module.add("yday")?;
|
||||
module.add("year")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("day", Func::from(|v: Any| run("time::day", v.0)))?;
|
||||
module.set("floor", Func::from(|v: Any| run("time::floor", v.0)))?;
|
||||
module.set("format", Func::from(|v: Any| run("time::format", v.0)))?;
|
||||
module.set("group", Func::from(|v: Any| run("time::group", v.0)))?;
|
||||
module.set("hour", Func::from(|v: Any| run("time::hour", v.0)))?;
|
||||
module.set("mins", Func::from(|v: Any| run("time::mins", v.0)))?;
|
||||
module.set("month", Func::from(|v: Any| run("time::month", v.0)))?;
|
||||
module.set("nano", Func::from(|v: Any| run("time::nano", v.0)))?;
|
||||
module.set("now", Func::from(|v: Any| run("time::now", v.0)))?;
|
||||
module.set("round", Func::from(|v: Any| run("time::round", v.0)))?;
|
||||
module.set("secs", Func::from(|v: Any| run("time::secs", v.0)))?;
|
||||
module.set("timezone", Func::from(|v: Any| run("time::timezone", v.0)))?;
|
||||
module.set("unix", Func::from(|v: Any| run("time::unix", v.0)))?;
|
||||
module.set("wday", Func::from(|v: Any| run("time::wday", v.0)))?;
|
||||
module.set("week", Func::from(|v: Any| run("time::week", v.0)))?;
|
||||
module.set("yday", Func::from(|v: Any| run("time::yday", v.0)))?;
|
||||
module.set("year", Func::from(|v: Any| run("time::year", v.0)))?;
|
||||
// Set default export
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("day", Func::from(|v: Any| run("time::day", v.0)))?;
|
||||
default.set("floor", Func::from(|v: Any| run("time::floor", v.0)))?;
|
||||
default.set("format", Func::from(|v: Any| run("time::format", v.0)))?;
|
||||
default.set("group", Func::from(|v: Any| run("time::group", v.0)))?;
|
||||
default.set("hour", Func::from(|v: Any| run("time::hour", v.0)))?;
|
||||
default.set("mins", Func::from(|v: Any| run("time::mins", v.0)))?;
|
||||
default.set("month", Func::from(|v: Any| run("time::month", v.0)))?;
|
||||
default.set("nano", Func::from(|v: Any| run("time::nano", v.0)))?;
|
||||
default.set("now", Func::from(|v: Any| run("time::now", v.0)))?;
|
||||
default.set("round", Func::from(|v: Any| run("time::round", v.0)))?;
|
||||
default.set("secs", Func::from(|v: Any| run("time::secs", v.0)))?;
|
||||
default.set("timezone", Func::from(|v: Any| run("time::timezone", v.0)))?;
|
||||
default.set("unix", Func::from(|v: Any| run("time::unix", v.0)))?;
|
||||
default.set("wday", Func::from(|v: Any| run("time::wday", v.0)))?;
|
||||
default.set("week", Func::from(|v: Any| run("time::week", v.0)))?;
|
||||
default.set("yday", Func::from(|v: Any| run("time::yday", v.0)))?;
|
||||
default.set("year", Func::from(|v: Any| run("time::year", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"time",
|
||||
"day" => run,
|
||||
"floor" => run,
|
||||
"format" => run,
|
||||
"group" => run,
|
||||
"hour" => run,
|
||||
"mins" => run,
|
||||
"minute" => run,
|
||||
"month" => run,
|
||||
"nano" => run,
|
||||
"now" => run,
|
||||
"round" => run,
|
||||
"second" => run,
|
||||
"secs" => run,
|
||||
"timezone" => run,
|
||||
"unix" => run,
|
||||
"wday" => run,
|
||||
"week" => run,
|
||||
"yday" => run,
|
||||
"year" => run,
|
||||
"from" => (from::Package)
|
||||
);
|
||||
|
|
13
lib/src/fnc/script/modules/surrealdb/functions/time/from.rs
Normal file
13
lib/src/fnc/script/modules/surrealdb/functions/time/from.rs
Normal file
|
@ -0,0 +1,13 @@
|
|||
use super::run;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"time::from",
|
||||
"micros" => run,
|
||||
"millis" => run,
|
||||
"secs" => run,
|
||||
"unix" => run
|
||||
);
|
|
@ -1,68 +1,21 @@
|
|||
use super::run;
|
||||
use crate::sql::value::Value;
|
||||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Func;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Rest;
|
||||
use js::Result;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
type Any = Rest<Value>;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("bool")?;
|
||||
module.add("datetime")?;
|
||||
module.add("decimal")?;
|
||||
module.add("duration")?;
|
||||
module.add("float")?;
|
||||
module.add("int")?;
|
||||
module.add("number")?;
|
||||
module.add("point")?;
|
||||
module.add("regex")?;
|
||||
module.add("string")?;
|
||||
module.add("table")?;
|
||||
module.add("thing")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("bool", Func::from(|v: Any| run("type::bool", v.0)))?;
|
||||
module.set("datetime", Func::from(|v: Any| run("type::datetime", v.0)))?;
|
||||
module.set("decimal", Func::from(|v: Any| run("type::decimal", v.0)))?;
|
||||
module.set("duration", Func::from(|v: Any| run("type::duration", v.0)))?;
|
||||
module.set("float", Func::from(|v: Any| run("type::float", v.0)))?;
|
||||
module.set("int", Func::from(|v: Any| run("type::int", v.0)))?;
|
||||
module.set("number", Func::from(|v: Any| run("type::number", v.0)))?;
|
||||
module.set("point", Func::from(|v: Any| run("type::point", v.0)))?;
|
||||
module.set("regex", Func::from(|v: Any| run("type::regex", v.0)))?;
|
||||
module.set("string", Func::from(|v: Any| run("type::string", v.0)))?;
|
||||
module.set("table", Func::from(|v: Any| run("type::table", v.0)))?;
|
||||
module.set("thing", Func::from(|v: Any| run("type::thing", v.0)))?;
|
||||
// Set default export
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("bool", Func::from(|v: Any| run("type::bool", v.0)))?;
|
||||
default.set("datetime", Func::from(|v: Any| run("type::datetime", v.0)))?;
|
||||
default.set("decimal", Func::from(|v: Any| run("type::decimal", v.0)))?;
|
||||
default.set("duration", Func::from(|v: Any| run("type::duration", v.0)))?;
|
||||
default.set("float", Func::from(|v: Any| run("type::float", v.0)))?;
|
||||
default.set("int", Func::from(|v: Any| run("type::int", v.0)))?;
|
||||
default.set("number", Func::from(|v: Any| run("type::number", v.0)))?;
|
||||
default.set("point", Func::from(|v: Any| run("type::point", v.0)))?;
|
||||
default.set("regex", Func::from(|v: Any| run("type::regex", v.0)))?;
|
||||
default.set("string", Func::from(|v: Any| run("type::string", v.0)))?;
|
||||
default.set("table", Func::from(|v: Any| run("type::table", v.0)))?;
|
||||
default.set("thing", Func::from(|v: Any| run("type::thing", v.0)))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"type",
|
||||
"bool" => run,
|
||||
"datetime" => run,
|
||||
"decimal" => run,
|
||||
"duration" => run,
|
||||
"float" => run,
|
||||
"int" => run,
|
||||
"number" => run,
|
||||
"point" => run,
|
||||
"regex" => run,
|
||||
"string" => run,
|
||||
"table" => run,
|
||||
"thing" => run
|
||||
);
|
||||
|
|
|
@ -1,38 +1,16 @@
|
|||
use js::Created;
|
||||
use js::Ctx;
|
||||
use js::Loaded;
|
||||
use js::Module;
|
||||
use js::ModuleDef;
|
||||
use js::Native;
|
||||
use js::Object;
|
||||
use js::Result;
|
||||
use js::Value;
|
||||
use crate::fnc::script::modules::impl_module_def;
|
||||
use js::{Ctx, Module, ModuleDef, Result, Value};
|
||||
|
||||
mod functions;
|
||||
|
||||
pub struct Package;
|
||||
|
||||
impl ModuleDef for Package {
|
||||
fn load<'js>(_ctx: Ctx<'js>, module: &Module<'js, Created>) -> Result<()> {
|
||||
module.add("default")?;
|
||||
module.add("functions")?;
|
||||
module.add("version")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn eval<'js>(ctx: Ctx<'js>, module: &Module<'js, Loaded<Native>>) -> Result<()> {
|
||||
// Set specific exports
|
||||
module.set("functions", pkg::<functions::Package>(ctx, "functions"))?;
|
||||
module.set("version", env!("CARGO_PKG_VERSION"))?;
|
||||
// Set default exports
|
||||
let default = Object::new(ctx)?;
|
||||
default.set("functions", pkg::<functions::Package>(ctx, "functions"))?;
|
||||
default.set("version", env!("CARGO_PKG_VERSION"))?;
|
||||
module.set("default", default)?;
|
||||
// Everything ok
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
impl_module_def!(
|
||||
Package,
|
||||
"surrealdb",
|
||||
"functions" => (functions::Package),
|
||||
"version" => (env!("CARGO_PKG_VERSION"))
|
||||
);
|
||||
|
||||
fn pkg<'js, D>(ctx: Ctx<'js>, name: &str) -> Result<Value<'js>>
|
||||
where
|
||||
|
|
|
@ -268,7 +268,7 @@ fn cast(i: &str) -> IResult<&str, Function> {
|
|||
Ok((i, Function::Cast(k, v)))
|
||||
}
|
||||
|
||||
fn function_names(i: &str) -> IResult<&str, &str> {
|
||||
pub(crate) fn function_names(i: &str) -> IResult<&str, &str> {
|
||||
recognize(alt((
|
||||
preceded(tag("array::"), function_array),
|
||||
preceded(tag("crypto::"), function_crypto),
|
||||
|
|
Loading…
Reference in a new issue