Skip to content

Commit

Permalink
Merge branch 'main' into feat/shuffle-array-function
Browse files Browse the repository at this point in the history
  • Loading branch information
tobiemh committed May 8, 2024
2 parents 280a8e8 + 061ad8c commit 183c67b
Show file tree
Hide file tree
Showing 20 changed files with 63 additions and 135 deletions.
41 changes: 16 additions & 25 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ geo-types = { version = "0.7.12", features = ["arbitrary"] }
hex = { version = "0.4.3" }
indxdb = { version = "0.4.0", optional = true }
ipnet = "2.9.0"
js = { version = "0.5.1", package = "rquickjs", features = [
js = { version = "0.6.2", package = "rquickjs", features = [
"array-buffer",
"bindgen",
"classes",
Expand All @@ -115,7 +115,7 @@ pin-project-lite = "0.2.13"
quick_cache = "0.5.1"
radix_trie = { version = "0.2.1", features = ["serde"] }
rand = "0.8.5"
reblessive = { version = "0.3.3", features = ["tree"] }
reblessive = { version = "0.3.5", features = ["tree"] }
regex = "1.10.2"
regex-syntax = { version = "0.8.2", optional = true, features = ["arbitrary"] }
reqwest = { version = "0.11.22", default-features = false, features = [
Expand Down
2 changes: 1 addition & 1 deletion core/src/fnc/script/fetch/body.rs
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ impl<'js> FromJs<'js> for Body {
})
}
};
if let Some(x) = Class::<Blob>::from_object(object.clone()) {
if let Some(x) = Class::<Blob>::from_object(object) {
let borrow = x.borrow();
return Ok(Body::buffer(BodyKind::Blob(borrow.mime.clone()), borrow.data.clone()));
}
Expand Down
6 changes: 3 additions & 3 deletions core/src/fnc/script/fetch/classes/blob.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ fn append_blob_part<'js>(
const LINE_ENDING: &[u8] = b"\n";

if let Some(object) = value.as_object() {
if let Some(x) = Class::<Blob>::from_object(object.clone()) {
if let Some(x) = Class::<Blob>::from_object(object) {
data.extend_from_slice(&x.borrow().data);
return Ok(());
}
Expand Down Expand Up @@ -210,7 +210,7 @@ mod test {
const NATIVE_LINE_ENDING: &str = "\n";

ctx.globals().set("NATIVE_LINE_ENDING",NATIVE_LINE_ENDING).unwrap();
ctx.eval::<Promise<()>,_>(r#"(async () => {
ctx.eval::<Promise,_>(r#"(async () => {
let blob = new Blob();
assert.eq(blob.size,0);
assert.eq(blob.type,"");
Expand All @@ -233,7 +233,7 @@ mod test {
assert.mustThrow(() => new Blob("text"));
assert.mustThrow(() => new Blob(["text"], {endings: "invalid value"}));
})()
"#).catch(&ctx).unwrap().await.catch(&ctx).unwrap();
"#).catch(&ctx).unwrap().into_future::<()>().await.catch(&ctx).unwrap();
})
.await
}
Expand Down
4 changes: 1 addition & 3 deletions core/src/fnc/script/fetch/classes/form_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,7 @@ impl<'js> FormDataValue<'js> {
filename: Opt<Coerced<String<'js>>>,
error: &'static str,
) -> Result<Self> {
if let Some(blob) =
value.as_object().and_then(|value| Class::<Blob>::from_object(value.clone()))
{
if let Some(blob) = value.as_object().and_then(Class::<Blob>::from_object) {
let filename = filename.into_inner().map(|x| x.0);

Ok(FormDataValue::Blob {
Expand Down
8 changes: 4 additions & 4 deletions core/src/fnc/script/fetch/classes/request.rs
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ impl<'js> FromJs<'js> for RequestInit<'js> {
}

let headers = if let Some(hdrs) = object.get::<_, Option<Object>>("headers")? {
if let Some(cls) = Class::<Headers>::from_object(hdrs.clone()) {
if let Some(cls) = Class::<Headers>::from_object(&hdrs) {
cls
} else {
Class::instance(ctx.clone(), Headers::new_inner(ctx, hdrs.into_value())?)?
Expand Down Expand Up @@ -418,7 +418,7 @@ impl<'js> Request<'js> {
url,
init,
})
} else if let Some(request) = input.into_object().and_then(Class::<Self>::from_object) {
} else if let Some(request) = input.as_object().and_then(Class::<Self>::from_object) {
// existing request object, just return it
request.try_borrow()?.clone_js(ctx.clone())
} else {
Expand Down Expand Up @@ -551,7 +551,7 @@ mod test {
#[tokio::test]
async fn basic_request_use() {
create_test_context!(ctx => {
ctx.eval::<Promise<()>,_>(r#"
ctx.eval::<Promise,_>(r#"
(async () => {
assert.mustThrow(() => {
new Request("invalid url")
Expand Down Expand Up @@ -621,7 +621,7 @@ mod test {
assert.seq(await req_2.text(),"some text");
})()
"#).catch(&ctx).unwrap().await.catch(&ctx).unwrap();
"#).catch(&ctx).unwrap().into_future::<()>().await.catch(&ctx).unwrap();
})
.await;
}
Expand Down
4 changes: 2 additions & 2 deletions core/src/fnc/script/fetch/classes/response/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ mod test {
#[tokio::test]
async fn basic_response_use() {
create_test_context!(ctx => {
ctx.eval::<Promise<()>,_>(r#"
ctx.eval::<Promise,_>(r#"
(async () => {
let resp = new Response();
assert(resp.bodyUsed);
Expand Down Expand Up @@ -369,7 +369,7 @@ mod test {
})()
"#).catch(&ctx).unwrap().await.catch(&ctx).unwrap();
"#).catch(&ctx).unwrap().into_future::<()>().await.catch(&ctx).unwrap();
})
.await;
}
Expand Down
24 changes: 11 additions & 13 deletions core/src/fnc/script/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,9 @@ use crate::err::Error;
use crate::sql::value::Value;
use js::async_with;
use js::object::Property;
use js::prelude::Promise;
use js::prelude::Rest;
use js::prelude::This;
use js::prelude::*;
use js::CatchResultExt;
use js::Class;
use js::Ctx;
use js::Function;
use js::Module;
use js::{Class, Ctx, Function, Module, Promise};

/// Insert query data into the context,
///
Expand Down Expand Up @@ -95,25 +90,28 @@ pub async fn run(
// function. For the entire duration of which context, opt, txn and doc are valid.
unsafe{ create_query_data(context,opt,txn,doc,&ctx) }?;
// Register the surrealdb module as a global object
let (module,promise) = Module::evaluate_def::<modules::surrealdb::Package, _>(ctx.clone(), "surrealdb")?;
promise.finish::<()>()?;
global.set(
"surrealdb",
Module::evaluate_def::<modules::surrealdb::Package, _>(ctx.clone(), "surrealdb")?
.get::<_, js::Value>("default")?,
module.get::<_, js::Value>("default")?,
)?;
fetch::register(&ctx)?;
let console = globals::console::console(&ctx)?;
// Register the console function to the globals
global.set("console",console)?;
// Register the special SurrealDB types as classes
classes::init(&ctx)?;
// Attempt to compile the script
let res = ctx.clone().compile("script", src)?;

let (module,promise) = Module::declare(ctx.clone(),"script", src)?.eval()?;
promise.into_future::<()>().await?;

// Attempt to fetch the main export
let fnc = res.get::<_, Function>("default")?;
let fnc = module.get::<_, Function>("default")?;
// Extract the doc if any
let doc = doc.map(|v|v.doc.as_ref());
// Execute the main function
let promise: Promise<Value> = fnc.call((This(doc), Rest(arg)))?;
let promise = fnc.call::<_,Promise>((This(doc), Rest(arg)))?.into_future::<Value>();
promise.await
}.await;

Expand Down
4 changes: 2 additions & 2 deletions core/src/fnc/script/modules/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,15 @@ macro_rules! impl_module_def {
};
($pkg: ident, $path: literal, $($name: literal => $action: tt $($wrapper: ident)?),*) => {
impl js::module::ModuleDef for Package {
fn declare(decls: &mut js::module::Declarations) -> js::Result<()> {
fn declare(decls: &js::module::Declarations) -> js::Result<()> {
decls.declare("default")?;
$(
decls.declare($name)?;
)*
Ok(())
}

fn evaluate<'js>(ctx: &js::Ctx<'js>, exports: &mut js::module::Exports<'js>) -> js::Result<()> {
fn evaluate<'js>(ctx: &js::Ctx<'js>, exports: &js::module::Exports<'js>) -> js::Result<()> {
let default = js::Object::new(ctx.clone())?;
$(
let value = crate::fnc::script::modules::impl_module_def!(ctx, $path, $name, $action, $($wrapper)?);
Expand Down
4 changes: 2 additions & 2 deletions core/src/fnc/script/modules/os.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ pub fn platform() -> &'static str {
pub struct Package;

impl ModuleDef for Package {
fn declare(declare: &mut Declarations) -> Result<()> {
fn declare(declare: &Declarations) -> Result<()> {
declare.declare("arch")?;
declare.declare("platform")?;
Ok(())
}

fn evaluate<'js>(_ctx: &js::Ctx<'js>, exports: &mut Exports<'js>) -> Result<()> {
fn evaluate<'js>(_ctx: &js::Ctx<'js>, exports: &Exports<'js>) -> Result<()> {
exports.export("arch", js_arch)?;
exports.export("platform", js_platform)?;
Ok(())
Expand Down
4 changes: 2 additions & 2 deletions core/src/fnc/script/modules/surrealdb/functions/rand.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ mod uuid;
pub struct Package;

impl js::module::ModuleDef for Package {
fn declare(decls: &mut js::module::Declarations) -> js::Result<()> {
fn declare(decls: &js::module::Declarations) -> js::Result<()> {
decls.declare("default")?;
decls.declare("bool")?;
decls.declare("enum")?;
Expand All @@ -22,7 +22,7 @@ impl js::module::ModuleDef for Package {
decls.declare("uuid")?;
Ok(())
}
fn evaluate<'js>(ctx: &js::Ctx<'js>, exports: &mut js::module::Exports<'js>) -> js::Result<()> {
fn evaluate<'js>(ctx: &js::Ctx<'js>, exports: &js::module::Exports<'js>) -> js::Result<()> {
let default = js::Function::new(ctx.clone(), |ctx: Ctx<'js>, args: Rest<Value>| {
run(ctx, "rand", args.0)
})?
Expand Down
4 changes: 2 additions & 2 deletions core/src/fnc/script/modules/surrealdb/functions/rand/uuid.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ use crate::sql::value::Value;
pub struct Package;

impl js::module::ModuleDef for Package {
fn declare(decls: &mut js::module::Declarations) -> js::Result<()> {
fn declare(decls: &js::module::Declarations) -> js::Result<()> {
decls.declare("default")?;
decls.declare("v4")?;
decls.declare("v7")?;
Ok(())
}
fn evaluate<'js>(ctx: &js::Ctx<'js>, exports: &mut js::module::Exports<'js>) -> js::Result<()> {
fn evaluate<'js>(ctx: &js::Ctx<'js>, exports: &js::module::Exports<'js>) -> js::Result<()> {
let default = js::Function::new(ctx.clone(), |ctx: Ctx<'js>, args: Rest<Value>| {
run(ctx, "rand::uuid", args.0)
})?
Expand Down
8 changes: 5 additions & 3 deletions core/src/fnc/script/modules/surrealdb/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ async fn value(ctx: Ctx<'_>, value: Coerced<String>) -> Result<SurValue> {
}

impl ModuleDef for Package {
fn declare(decls: &mut js::module::Declarations) -> js::Result<()> {
fn declare(decls: &js::module::Declarations) -> js::Result<()> {
decls.declare("default")?;
decls.declare("functions")?;
decls.declare("version")?;
Expand All @@ -38,7 +38,7 @@ impl ModuleDef for Package {
Ok(())
}

fn evaluate<'js>(ctx: &js::Ctx<'js>, exports: &mut js::module::Exports<'js>) -> js::Result<()> {
fn evaluate<'js>(ctx: &js::Ctx<'js>, exports: &js::module::Exports<'js>) -> js::Result<()> {
let default = js::Object::new(ctx.clone())?;
let package = pkg::<functions::Package>(ctx, "functions")?;
exports.export("functions", package.clone())?;
Expand Down Expand Up @@ -69,5 +69,7 @@ fn pkg<'js, D>(ctx: &Ctx<'js>, name: &str) -> Result<Value<'js>>
where
D: ModuleDef,
{
Module::evaluate_def::<D, _>(ctx.clone(), name)?.get::<_, js::Value>("default")
let (m, promise) = Module::evaluate_def::<D, _>(ctx.clone(), name)?;
promise.finish()?;
m.get::<_, js::Value>("default")
}
2 changes: 1 addition & 1 deletion lib/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ tokio-util = { version = "0.7.10", optional = true, features = ["compat"] }
tracing = "0.1.40"
trice = { version = "0.4.0", optional = true }
url = "2.5.0"
reblessive = { version = "0.3.3", features = ["tree"] }
reblessive = { version = "0.3.5", features = ["tree"] }

[dev-dependencies]
criterion = { version = "0.5.1", features = ["async_tokio"] }
Expand Down
4 changes: 2 additions & 2 deletions lib/src/api/method/insert.rs
Original file line number Diff line number Diff line change
Expand Up @@ -137,10 +137,10 @@ where
}
false => {
let mut table = Table::default();
table.0 = record_id.tb.clone();
table.0.clone_from(&record_id.tb);
content.resource = Ok(table.into());
let mut ident = Ident::default();
ident.0 = "id".to_owned();
"id".clone_into(&mut ident.0);
let id = Part::Field(ident);
data.put(&[id], record_id.into());
content.content = data;
Expand Down

0 comments on commit 183c67b

Please sign in to comment.