web_lib

Common web application libraries
git clone https://radroots.dev/git/web_lib.git
Log | Files | Refs | LICENSE

bridge.ts (1783B)


      1 import type { SqlJsParams, SqlJsValue } from "../sql/types.js";
      2 import { WebSqlEngine } from "../sql/web.js";
      3 
      4 const is_record = (value: unknown): value is Record<string, unknown> =>
      5     typeof value === "object" && value !== null && !Array.isArray(value);
      6 
      7 const is_sql_value = (value: unknown): value is SqlJsValue => {
      8     if (value === null) return true;
      9     if (typeof value === "string") return true;
     10     if (typeof value === "number") return Number.isFinite(value);
     11     return value instanceof Uint8Array;
     12 };
     13 
     14 const is_sql_value_array = (value: unknown): value is ReadonlyArray<SqlJsValue> =>
     15     Array.isArray(value) && value.every(is_sql_value);
     16 
     17 const is_sql_value_record = (value: unknown): value is Readonly<Record<string, SqlJsValue>> =>
     18     is_record(value) && Object.values(value).every(is_sql_value);
     19 
     20 function parse_sql_params(params_json: string): SqlJsParams {
     21     const trimmed = params_json.trim();
     22     if (!trimmed) return [];
     23     try {
     24         const raw = JSON.parse(trimmed);
     25         if (is_sql_value_array(raw)) return raw;
     26         if (is_sql_value_record(raw)) return raw;
     27         return [];
     28     } catch {
     29         return [];
     30     }
     31 }
     32 
     33 export function radroots_sql_install_bridges(engine: WebSqlEngine): void {
     34     Object.assign(globalThis, {
     35         __radroots_sql_wasm_exec: (sql: string, params_json: string) => {
     36             const params = parse_sql_params(params_json);
     37             const res = engine.exec(sql, params);
     38             return res;
     39         },
     40         __radroots_sql_wasm_query: (sql: string, params_json: string) => {
     41             const params = parse_sql_params(params_json);
     42             const res = engine.query(sql, params);
     43             return res;
     44         },
     45         __radroots_sql_wasm_export_bytes: () => engine.export_bytes()
     46     });
     47 }