Skip to content

Commit

Permalink
change: improve thing validation
Browse files Browse the repository at this point in the history
  • Loading branch information
Julian Mills committed Dec 13, 2023
1 parent c9c0df7 commit 1fd36c7
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 76 deletions.
7 changes: 6 additions & 1 deletion src-embed/src/schema.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use concat_string::concat_string;
use serde::Serialize;
use serde_wasm_bindgen::to_value;
use surrealdb::sql::{parse, statements::DefineStatement, Index, Permissions, Statement, Strand};
use surrealdb::sql::{parse, statements::DefineStatement, Index, Permissions, Statement, Strand, thing};
use wasm_bindgen::prelude::*;

fn to_response<T: serde::ser::Serialize>(value: &T, name: &str) -> Result<JsValue, String> {
Expand Down Expand Up @@ -349,3 +349,8 @@ pub fn validate_live_query(query: &str) -> Option<String> {
}
}
}

#[wasm_bindgen]
pub fn validate_thing(value: &str) -> bool {
thing(&value).is_ok()
}
4 changes: 2 additions & 2 deletions src/components/DataTable/datatypes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import { OpenFn } from "~/types";
import { TRUNCATE_STYLE } from "~/util/helpers";
import { Icon } from "../Icon";
import { RecordLink } from "../RecordLink";
import { validate_thing } from "~/generated/surrealist-embed";

const THING_REGEX = /^(\w+|[`][^`]+[`]):(\w+|[`][^`]+[`])$/;
const DATETIME_REGEX = /^\d{4}-\d\d-\d\dt\d\d:\d\d:\d\d(\.\d+)?(([+-]\d\d:\d\d)|z)?$/i;

export interface DataCellType {
Expand Down Expand Up @@ -126,7 +126,7 @@ const DataCellTypes = [
component: NullishCell,
},
{
match: (value: any) => typeof value == "string" && THING_REGEX.test(value),
match: (value: any) => typeof value == "string" && validate_thing(value),
component: ThingCell,
},
{
Expand Down
20 changes: 13 additions & 7 deletions src/generated/surrealist-embed.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ export function query_version(): Promise<any | undefined>;
*/
export function execute_remote_query(query: string, params: string): Promise<string>;
/**
*/
export function initialize_embed(): void;
/**
* @param {any} details
* @param {string} query
* @param {string} params
Expand Down Expand Up @@ -77,8 +80,10 @@ export function validate_where_clause(clause: string): boolean;
*/
export function validate_live_query(query: string): string | undefined;
/**
* @param {string} value
* @returns {boolean}
*/
export function initialize_embed(): void;
export function validate_thing(value: string): boolean;

export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;

Expand All @@ -88,6 +93,7 @@ export interface InitOutput {
readonly close_connection: () => number;
readonly query_version: () => number;
readonly execute_remote_query: (a: number, b: number, c: number, d: number) => number;
readonly initialize_embed: () => void;
readonly execute_local_query: (a: number, b: number, c: number, d: number, e: number) => number;
readonly extract_scope_definition: (a: number, b: number, c: number) => void;
readonly extract_table_definition: (a: number, b: number, c: number) => void;
Expand All @@ -99,19 +105,19 @@ export interface InitOutput {
readonly validate_query: (a: number, b: number, c: number) => void;
readonly validate_where_clause: (a: number, b: number) => number;
readonly validate_live_query: (a: number, b: number, c: number) => void;
readonly initialize_embed: () => void;
readonly validate_thing: (a: number, b: number) => number;
readonly ring_core_0_17_5_bn_mul_mont: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
readonly __wbindgen_malloc: (a: number, b: number) => number;
readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
readonly __wbindgen_export_2: WebAssembly.Table;
readonly wasm_bindgen__convert__closures__invoke1_mut__h71dccea636298a34: (a: number, b: number, c: number) => void;
readonly wasm_bindgen__convert__closures__invoke1_mut__ha14eccfabdcf55cc: (a: number, b: number, c: number) => void;
readonly _dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h3c0bb2d98c1bdc61: (a: number, b: number) => void;
readonly _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h362688a5e9153ef2: (a: number, b: number, c: number) => void;
readonly _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h5018271a13d74dd4: (a: number, b: number, c: number) => void;
readonly _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hd1581cd8a6cae8b0: (a: number, b: number, c: number) => void;
readonly _dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__ha89374e8247c74d8: (a: number, b: number) => void;
readonly _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__he8512b5dc5406f70: (a: number, b: number, c: number) => void;
readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
readonly __wbindgen_free: (a: number, b: number, c: number) => void;
readonly __wbindgen_exn_store: (a: number) => void;
readonly wasm_bindgen__convert__closures__invoke2_mut__h522e75888bc4761a: (a: number, b: number, c: number, d: number) => void;
readonly wasm_bindgen__convert__closures__invoke2_mut__haf794559bddae9e5: (a: number, b: number, c: number, d: number) => void;
}

export type SyncInitInput = BufferSource | WebAssembly.Module;
Expand Down
131 changes: 71 additions & 60 deletions src/generated/surrealist-embed.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,5 @@
let wasm;

const heap = new Array(128).fill(undefined);

heap.push(undefined, null, true, false);

function getObject(idx) { return heap[idx]; }

let heap_next = heap.length;

function dropObject(idx) {
if (idx < 132) return;
heap[idx] = heap_next;
heap_next = idx;
}

function takeObject(idx) {
const ret = getObject(idx);
dropObject(idx);
return ret;
}

const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } );

if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); };
Expand All @@ -38,6 +18,12 @@ function getStringFromWasm0(ptr, len) {
return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));
}

const heap = new Array(128).fill(undefined);

heap.push(undefined, null, true, false);

let heap_next = heap.length;

function addHeapObject(obj) {
if (heap_next === heap.length) heap.push(heap.length + 1);
const idx = heap_next;
Expand All @@ -47,6 +33,20 @@ function addHeapObject(obj) {
return idx;
}

function getObject(idx) { return heap[idx]; }

function dropObject(idx) {
if (idx < 132) return;
heap[idx] = heap_next;
heap_next = idx;
}

function takeObject(idx) {
const ret = getObject(idx);
dropObject(idx);
return ret;
}

let WASM_VECTOR_LEN = 0;

const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } );
Expand Down Expand Up @@ -214,19 +214,19 @@ function makeMutClosure(arg0, arg1, dtor, f) {
return real;
}
function __wbg_adapter_40(arg0, arg1, arg2) {
wasm.wasm_bindgen__convert__closures__invoke1_mut__h71dccea636298a34(arg0, arg1, addHeapObject(arg2));
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h5018271a13d74dd4(arg0, arg1, addHeapObject(arg2));
}

function __wbg_adapter_43(arg0, arg1, arg2) {
wasm.wasm_bindgen__convert__closures__invoke1_mut__ha14eccfabdcf55cc(arg0, arg1, addHeapObject(arg2));
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hd1581cd8a6cae8b0(arg0, arg1, addHeapObject(arg2));
}

function __wbg_adapter_46(arg0, arg1) {
wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h3c0bb2d98c1bdc61(arg0, arg1);
wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__ha89374e8247c74d8(arg0, arg1);
}

function __wbg_adapter_49(arg0, arg1, arg2) {
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h362688a5e9153ef2(arg0, arg1, addHeapObject(arg2));
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__he8512b5dc5406f70(arg0, arg1, addHeapObject(arg2));
}

/**
Expand Down Expand Up @@ -268,6 +268,12 @@ export function execute_remote_query(query, params) {
return takeObject(ret);
}

/**
*/
export function initialize_embed() {
wasm.initialize_embed();
}

/**
* @param {any} details
* @param {string} query
Expand Down Expand Up @@ -495,9 +501,14 @@ export function validate_live_query(query) {
}

/**
* @param {string} value
* @returns {boolean}
*/
export function initialize_embed() {
wasm.initialize_embed();
export function validate_thing(value) {
const ptr0 = passStringToWasm0(value, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len0 = WASM_VECTOR_LEN;
const ret = wasm.validate_thing(ptr0, len0);
return ret !== 0;
}

function handleError(f, args) {
Expand All @@ -512,8 +523,8 @@ function getArrayU8FromWasm0(ptr, len) {
ptr = ptr >>> 0;
return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);
}
function __wbg_adapter_180(arg0, arg1, arg2, arg3) {
wasm.wasm_bindgen__convert__closures__invoke2_mut__h522e75888bc4761a(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
function __wbg_adapter_181(arg0, arg1, arg2, arg3) {
wasm.wasm_bindgen__convert__closures__invoke2_mut__haf794559bddae9e5(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
}

async function __wbg_load(module, imports) {
Expand Down Expand Up @@ -550,16 +561,16 @@ async function __wbg_load(module, imports) {
function __wbg_get_imports() {
const imports = {};
imports.wbg = {};
imports.wbg.__wbindgen_string_new = function(arg0, arg1) {
const ret = getStringFromWasm0(arg0, arg1);
return addHeapObject(ret);
};
imports.wbg.__wbg_log_f1113a64955b3af4 = function(arg0, arg1) {
console.log(getStringFromWasm0(arg0, arg1));
};
imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
takeObject(arg0);
};
imports.wbg.__wbindgen_string_new = function(arg0, arg1) {
const ret = getStringFromWasm0(arg0, arg1);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_is_object = function(arg0) {
const val = getObject(arg0);
const ret = typeof(val) === 'object' && val !== null;
Expand Down Expand Up @@ -620,21 +631,6 @@ function __wbg_get_imports() {
const ret = typeof(getObject(arg0)) === 'string';
return ret;
};
imports.wbg.__wbg_wasClean_74cf0c4d617e8bf5 = function(arg0) {
const ret = getObject(arg0).wasClean;
return ret;
};
imports.wbg.__wbg_code_858da7147ef5fb52 = function(arg0) {
const ret = getObject(arg0).code;
return ret;
};
imports.wbg.__wbg_reason_cab9df8d5ef57aa2 = function(arg0, arg1) {
const ret = getObject(arg1).reason;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_data_ab99ae4a2e1e8bc9 = function(arg0) {
const ret = getObject(arg0).data;
return addHeapObject(ret);
Expand All @@ -657,6 +653,21 @@ function __wbg_get_imports() {
const ret = getObject(arg0).code;
return ret;
};
imports.wbg.__wbg_wasClean_74cf0c4d617e8bf5 = function(arg0) {
const ret = getObject(arg0).wasClean;
return ret;
};
imports.wbg.__wbg_code_858da7147ef5fb52 = function(arg0) {
const ret = getObject(arg0).code;
return ret;
};
imports.wbg.__wbg_reason_cab9df8d5ef57aa2 = function(arg0, arg1) {
const ret = getObject(arg1).reason;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_url_dd40dfd6f3dbe3f9 = function(arg0, arg1) {
const ret = getObject(arg1).url;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
Expand Down Expand Up @@ -700,10 +711,6 @@ function __wbg_get_imports() {
imports.wbg.__wbg_send_1a008ea2eb3a1951 = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).send(getArrayU8FromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
const ret = getObject(arg0);
return addHeapObject(ret);
};
imports.wbg.__wbg_performance_1430613edb72ce03 = function(arg0) {
const ret = getObject(arg0).performance;
return addHeapObject(ret);
Expand All @@ -716,6 +723,10 @@ function __wbg_get_imports() {
const ret = getObject(arg0).setTimeout(getObject(arg1), arg2);
return ret;
}, arguments) };
imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
const ret = getObject(arg0);
return addHeapObject(ret);
};
imports.wbg.__wbg_crypto_c48a774b022d20ac = function(arg0) {
const ret = getObject(arg0).crypto;
return addHeapObject(ret);
Expand Down Expand Up @@ -896,7 +907,7 @@ function __wbg_get_imports() {
const a = state0.a;
state0.a = 0;
try {
return __wbg_adapter_180(a, state0.b, arg0, arg1);
return __wbg_adapter_181(a, state0.b, arg0, arg1);
} finally {
state0.a = a;
}
Expand Down Expand Up @@ -966,20 +977,20 @@ function __wbg_get_imports() {
const ret = wasm.memory;
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper11804 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 444, __wbg_adapter_40);
imports.wbg.__wbindgen_closure_wrapper14944 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 785, __wbg_adapter_40);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper25586 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 2400, __wbg_adapter_43);
imports.wbg.__wbindgen_closure_wrapper25987 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 2498, __wbg_adapter_43);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper25993 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 2449, __wbg_adapter_46);
imports.wbg.__wbindgen_closure_wrapper26303 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 2527, __wbg_adapter_46);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper26040 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 2471, __wbg_adapter_49);
imports.wbg.__wbindgen_closure_wrapper26393 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 2551, __wbg_adapter_49);
return addHeapObject(ret);
};

Expand Down
Binary file modified src/generated/surrealist-embed_bg.wasm
Binary file not shown.
13 changes: 7 additions & 6 deletions src/generated/surrealist-embed_bg.wasm.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ export function open_connection(a: number): number;
export function close_connection(): number;
export function query_version(): number;
export function execute_remote_query(a: number, b: number, c: number, d: number): number;
export function initialize_embed(): void;
export function execute_local_query(a: number, b: number, c: number, d: number, e: number): number;
export function extract_scope_definition(a: number, b: number, c: number): void;
export function extract_table_definition(a: number, b: number, c: number): void;
Expand All @@ -16,16 +17,16 @@ export function extract_user_definition(a: number, b: number, c: number): void;
export function validate_query(a: number, b: number, c: number): void;
export function validate_where_clause(a: number, b: number): number;
export function validate_live_query(a: number, b: number, c: number): void;
export function initialize_embed(): void;
export function validate_thing(a: number, b: number): number;
export function ring_core_0_17_5_bn_mul_mont(a: number, b: number, c: number, d: number, e: number, f: number): void;
export function __wbindgen_malloc(a: number, b: number): number;
export function __wbindgen_realloc(a: number, b: number, c: number, d: number): number;
export const __wbindgen_export_2: WebAssembly.Table;
export function wasm_bindgen__convert__closures__invoke1_mut__h71dccea636298a34(a: number, b: number, c: number): void;
export function wasm_bindgen__convert__closures__invoke1_mut__ha14eccfabdcf55cc(a: number, b: number, c: number): void;
export function _dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h3c0bb2d98c1bdc61(a: number, b: number): void;
export function _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h362688a5e9153ef2(a: number, b: number, c: number): void;
export function _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h5018271a13d74dd4(a: number, b: number, c: number): void;
export function _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hd1581cd8a6cae8b0(a: number, b: number, c: number): void;
export function _dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__ha89374e8247c74d8(a: number, b: number): void;
export function _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__he8512b5dc5406f70(a: number, b: number, c: number): void;
export function __wbindgen_add_to_stack_pointer(a: number): number;
export function __wbindgen_free(a: number, b: number, c: number): void;
export function __wbindgen_exn_store(a: number): void;
export function wasm_bindgen__convert__closures__invoke2_mut__h522e75888bc4761a(a: number, b: number, c: number, d: number): void;
export function wasm_bindgen__convert__closures__invoke2_mut__haf794559bddae9e5(a: number, b: number, c: number, d: number): void;

0 comments on commit 1fd36c7

Please sign in to comment.