wasm_impl.rs (39768B)
1 use crate::{ 2 snapshot::{EXPORT_DB_BYTES_FIELD, EXPORT_MANIFEST_FIELD, synced_export_error}, 3 utils::value_to_js, 4 }; 5 use radroots_replica_store::migrations; 6 use radroots_replica_store::{ReplicaStoreExportManifestRs, export_manifest}; 7 use radroots_replica_sync::radroots_replica_sync_status; 8 use radroots_sdk_sql_wasm_runtime::parse_json; 9 use radroots_sdk_sql_wasm_runtime::{ 10 WasmSqlExecutor, err_js, export_bytes, export_lock_begin, export_lock_end, 11 with_export_lock_bypass, 12 }; 13 use wasm_bindgen::JsValue; 14 use wasm_bindgen::prelude::*; 15 16 use radroots_replica_schema::farm::{ 17 IFarmCreate, IFarmDelete, IFarmFindMany, IFarmFindOne, IFarmUpdate, 18 }; 19 20 use radroots_replica_schema::farm_gcs_location::{ 21 IFarmGcsLocationCreate, IFarmGcsLocationDelete, IFarmGcsLocationFindMany, 22 IFarmGcsLocationFindOne, IFarmGcsLocationUpdate, 23 }; 24 25 use radroots_replica_schema::farm_member::{ 26 IFarmMemberCreate, IFarmMemberDelete, IFarmMemberFindMany, IFarmMemberFindOne, 27 IFarmMemberUpdate, 28 }; 29 30 use radroots_replica_schema::farm_member_claim::{ 31 IFarmMemberClaimCreate, IFarmMemberClaimDelete, IFarmMemberClaimFindMany, 32 IFarmMemberClaimFindOne, IFarmMemberClaimUpdate, 33 }; 34 35 use radroots_replica_schema::farm_tag::{ 36 IFarmTagCreate, IFarmTagDelete, IFarmTagFindMany, IFarmTagFindOne, IFarmTagUpdate, 37 }; 38 39 use radroots_replica_schema::gcs_location::{ 40 IGcsLocationCreate, IGcsLocationDelete, IGcsLocationFindMany, IGcsLocationFindOne, 41 IGcsLocationUpdate, 42 }; 43 44 use radroots_replica_schema::log_error::{ 45 ILogErrorCreate, ILogErrorDelete, ILogErrorFindMany, ILogErrorFindOne, ILogErrorUpdate, 46 }; 47 48 use radroots_replica_schema::media_image::{ 49 IMediaImageCreate, IMediaImageDelete, IMediaImageFindMany, IMediaImageFindOne, 50 IMediaImageUpdate, 51 }; 52 53 use radroots_replica_schema::nostr_profile::{ 54 INostrProfileCreate, INostrProfileDelete, INostrProfileFindMany, INostrProfileFindOne, 55 INostrProfileUpdate, 56 }; 57 58 use radroots_replica_schema::nostr_event_head::{ 59 INostrEventHeadCreate, INostrEventHeadDelete, INostrEventHeadFindMany, INostrEventHeadFindOne, 60 INostrEventHeadUpdate, 61 }; 62 63 use radroots_replica_schema::nostr_relay::{ 64 INostrRelayCreate, INostrRelayDelete, INostrRelayFindMany, INostrRelayFindOne, 65 INostrRelayUpdate, 66 }; 67 68 use radroots_replica_schema::trade_product::{ 69 ITradeProductCreate, ITradeProductDelete, ITradeProductFindMany, ITradeProductFindOne, 70 ITradeProductUpdate, 71 }; 72 73 use radroots_replica_schema::plot::{ 74 IPlotCreate, IPlotDelete, IPlotFindMany, IPlotFindOne, IPlotUpdate, 75 }; 76 77 use radroots_replica_schema::plot_gcs_location::{ 78 IPlotGcsLocationCreate, IPlotGcsLocationDelete, IPlotGcsLocationFindMany, 79 IPlotGcsLocationFindOne, IPlotGcsLocationUpdate, 80 }; 81 82 use radroots_replica_schema::plot_tag::{ 83 IPlotTagCreate, IPlotTagDelete, IPlotTagFindMany, IPlotTagFindOne, IPlotTagUpdate, 84 }; 85 86 use radroots_replica_schema::nostr_profile_relay::INostrProfileRelayRelation; 87 88 use radroots_replica_schema::trade_product_location::ITradeProductLocationRelation; 89 90 use radroots_replica_schema::trade_product_media::ITradeProductMediaRelation; 91 92 #[wasm_bindgen(js_name = replica_store_run_migrations)] 93 pub fn replica_store_run_migrations() -> Result<(), JsValue> { 94 let exec = WasmSqlExecutor::new(); 95 migrations::run_all_up(&exec).map_err(err_js) 96 } 97 98 #[wasm_bindgen(js_name = replica_store_reset_database)] 99 pub fn replica_store_reset_database() -> Result<(), JsValue> { 100 let exec = WasmSqlExecutor::new(); 101 migrations::run_all_down(&exec).map_err(err_js) 102 } 103 104 #[wasm_bindgen(js_name = replica_store_export_json)] 105 pub fn replica_store_export_json() -> Result<JsValue, JsValue> { 106 let exec = WasmSqlExecutor::new(); 107 let dump = radroots_replica_store::backup::export_database_backup(&exec).map_err(err_js)?; 108 value_to_js(dump) 109 } 110 111 #[wasm_bindgen(js_name = replica_store_import_json)] 112 pub fn replica_store_import_json(dump_json: &str) -> Result<(), JsValue> { 113 let exec = WasmSqlExecutor::new(); 114 radroots_replica_store::backup::restore_database_backup_json(&exec, dump_json).map_err(err_js) 115 } 116 117 #[wasm_bindgen(js_name = replica_store_export_begin)] 118 pub fn replica_store_export_begin() -> Result<JsValue, JsValue> { 119 export_lock_begin().map_err(err_js)?; 120 let exec = WasmSqlExecutor::new(); 121 let result = with_export_lock_bypass(|| export_snapshot(&exec)); 122 match result { 123 Ok(value) => Ok(value), 124 Err(err) => { 125 export_lock_end(); 126 Err(err) 127 } 128 } 129 } 130 131 #[wasm_bindgen(js_name = replica_store_export_finish)] 132 pub fn replica_store_export_finish() -> Result<(), JsValue> { 133 export_lock_end(); 134 Ok(()) 135 } 136 137 fn export_snapshot(exec: &WasmSqlExecutor) -> Result<JsValue, JsValue> { 138 let status = radroots_replica_sync_status(exec).map_err(|err| { 139 err_js(radroots_sql_core::SqlError::InvalidArgument( 140 err.to_string(), 141 )) 142 })?; 143 if let Some(message) = synced_export_error(status.pending_count, status.expected_count) { 144 return Err(err_js(radroots_sql_core::SqlError::InvalidArgument( 145 message, 146 ))); 147 } 148 let manifest = export_manifest(exec).map_err(err_js)?; 149 export_snapshot_value(manifest) 150 } 151 152 fn export_snapshot_value(manifest: ReplicaStoreExportManifestRs) -> Result<JsValue, JsValue> { 153 let bytes_js = export_bytes(); 154 export_snapshot_value_with_bytes(manifest, bytes_js) 155 } 156 157 fn export_snapshot_value_with_bytes( 158 manifest: ReplicaStoreExportManifestRs, 159 bytes_js: JsValue, 160 ) -> Result<JsValue, JsValue> { 161 let manifest_js = serde_wasm_bindgen::to_value(&manifest).map_err(|err| { 162 err_js(radroots_sql_core::SqlError::SerializationError( 163 err.to_string(), 164 )) 165 })?; 166 let obj = js_sys::Object::new(); 167 js_sys::Reflect::set( 168 &obj, 169 &JsValue::from_str(EXPORT_MANIFEST_FIELD), 170 &manifest_js, 171 ) 172 .map_err(|_| err_js(radroots_sql_core::SqlError::Internal))?; 173 js_sys::Reflect::set(&obj, &JsValue::from_str(EXPORT_DB_BYTES_FIELD), &bytes_js) 174 .map_err(|_| err_js(radroots_sql_core::SqlError::Internal))?; 175 Ok(JsValue::from(obj)) 176 } 177 178 #[cfg(all(test, target_arch = "wasm32"))] 179 mod tests { 180 use super::export_snapshot_value_with_bytes; 181 use js_sys::{Reflect, Uint8Array}; 182 use wasm_bindgen::JsValue; 183 184 #[wasm_bindgen_test::wasm_bindgen_test] 185 fn export_snapshot_value_includes_fields() { 186 let manifest = radroots_replica_store::ReplicaStoreExportManifestRs { 187 export_version: "1".to_string(), 188 replica_store_version: "0.0.0".to_string(), 189 backup_format_version: "0.0.0".to_string(), 190 schema_hash: "hash".to_string(), 191 schema: Vec::new(), 192 migrations: Vec::new(), 193 table_counts: Vec::new(), 194 }; 195 let bytes = Uint8Array::new_with_length(2); 196 let js = 197 export_snapshot_value_with_bytes(manifest, JsValue::from(bytes)).expect("snapshot"); 198 let manifest_rs = 199 Reflect::get(&js, &JsValue::from_str("manifest_rs")).expect("manifest_rs"); 200 let db_bytes = Reflect::get(&js, &JsValue::from_str("db_bytes")).expect("db_bytes"); 201 assert!(manifest_rs.is_object()); 202 assert!(db_bytes.is_object()); 203 } 204 } 205 206 #[wasm_bindgen(js_name = replica_store_farm_create)] 207 pub fn replica_store_farm_create(opts_json: &str) -> Result<JsValue, JsValue> { 208 let opts: IFarmCreate = parse_json(opts_json).map_err(err_js)?; 209 let exec = WasmSqlExecutor::new(); 210 let out = radroots_replica_store::farm::create(&exec, &opts).map_err(|e| err_js(e.error))?; 211 value_to_js(out) 212 } 213 214 #[wasm_bindgen(js_name = replica_store_farm_find_one)] 215 pub fn replica_store_farm_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 216 let opts: IFarmFindOne = parse_json(opts_json).map_err(err_js)?; 217 let exec = WasmSqlExecutor::new(); 218 let out = radroots_replica_store::farm::find_one(&exec, &opts).map_err(|e| err_js(e.error))?; 219 value_to_js(out) 220 } 221 222 #[wasm_bindgen(js_name = replica_store_farm_find_many)] 223 pub fn replica_store_farm_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 224 let opts: IFarmFindMany = parse_json(opts_json).map_err(err_js)?; 225 let exec = WasmSqlExecutor::new(); 226 let out = radroots_replica_store::farm::find_many(&exec, &opts).map_err(|e| err_js(e.error))?; 227 value_to_js(out) 228 } 229 230 #[wasm_bindgen(js_name = replica_store_farm_update)] 231 pub fn replica_store_farm_update(opts_json: &str) -> Result<JsValue, JsValue> { 232 let opts: IFarmUpdate = parse_json(opts_json).map_err(err_js)?; 233 let exec = WasmSqlExecutor::new(); 234 let out = radroots_replica_store::farm::update(&exec, &opts).map_err(|e| err_js(e.error))?; 235 value_to_js(out) 236 } 237 238 #[wasm_bindgen(js_name = replica_store_farm_delete)] 239 pub fn replica_store_farm_delete(opts_json: &str) -> Result<JsValue, JsValue> { 240 let opts: IFarmDelete = parse_json(opts_json).map_err(err_js)?; 241 let exec = WasmSqlExecutor::new(); 242 let out = radroots_replica_store::farm::delete(&exec, &opts).map_err(|e| err_js(e.error))?; 243 value_to_js(out) 244 } 245 246 #[wasm_bindgen(js_name = replica_store_plot_create)] 247 pub fn replica_store_plot_create(opts_json: &str) -> Result<JsValue, JsValue> { 248 let opts: IPlotCreate = parse_json(opts_json).map_err(err_js)?; 249 let exec = WasmSqlExecutor::new(); 250 let out = radroots_replica_store::plot::create(&exec, &opts).map_err(|e| err_js(e.error))?; 251 value_to_js(out) 252 } 253 254 #[wasm_bindgen(js_name = replica_store_plot_find_one)] 255 pub fn replica_store_plot_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 256 let opts: IPlotFindOne = parse_json(opts_json).map_err(err_js)?; 257 let exec = WasmSqlExecutor::new(); 258 let out = radroots_replica_store::plot::find_one(&exec, &opts).map_err(|e| err_js(e.error))?; 259 value_to_js(out) 260 } 261 262 #[wasm_bindgen(js_name = replica_store_plot_find_many)] 263 pub fn replica_store_plot_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 264 let opts: IPlotFindMany = parse_json(opts_json).map_err(err_js)?; 265 let exec = WasmSqlExecutor::new(); 266 let out = radroots_replica_store::plot::find_many(&exec, &opts).map_err(|e| err_js(e.error))?; 267 value_to_js(out) 268 } 269 270 #[wasm_bindgen(js_name = replica_store_plot_update)] 271 pub fn replica_store_plot_update(opts_json: &str) -> Result<JsValue, JsValue> { 272 let opts: IPlotUpdate = parse_json(opts_json).map_err(err_js)?; 273 let exec = WasmSqlExecutor::new(); 274 let out = radroots_replica_store::plot::update(&exec, &opts).map_err(|e| err_js(e.error))?; 275 value_to_js(out) 276 } 277 278 #[wasm_bindgen(js_name = replica_store_plot_delete)] 279 pub fn replica_store_plot_delete(opts_json: &str) -> Result<JsValue, JsValue> { 280 let opts: IPlotDelete = parse_json(opts_json).map_err(err_js)?; 281 let exec = WasmSqlExecutor::new(); 282 let out = radroots_replica_store::plot::delete(&exec, &opts).map_err(|e| err_js(e.error))?; 283 value_to_js(out) 284 } 285 286 #[wasm_bindgen(js_name = replica_store_gcs_location_create)] 287 pub fn replica_store_gcs_location_create(opts_json: &str) -> Result<JsValue, JsValue> { 288 let opts: IGcsLocationCreate = parse_json(opts_json).map_err(err_js)?; 289 let exec = WasmSqlExecutor::new(); 290 let out = 291 radroots_replica_store::gcs_location::create(&exec, &opts).map_err(|e| err_js(e.error))?; 292 value_to_js(out) 293 } 294 295 #[wasm_bindgen(js_name = replica_store_gcs_location_find_one)] 296 pub fn replica_store_gcs_location_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 297 let opts: IGcsLocationFindOne = parse_json(opts_json).map_err(err_js)?; 298 let exec = WasmSqlExecutor::new(); 299 let out = radroots_replica_store::gcs_location::find_one(&exec, &opts) 300 .map_err(|e| err_js(e.error))?; 301 value_to_js(out) 302 } 303 304 #[wasm_bindgen(js_name = replica_store_gcs_location_find_many)] 305 pub fn replica_store_gcs_location_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 306 let opts: IGcsLocationFindMany = parse_json(opts_json).map_err(err_js)?; 307 let exec = WasmSqlExecutor::new(); 308 let out = radroots_replica_store::gcs_location::find_many(&exec, &opts) 309 .map_err(|e| err_js(e.error))?; 310 value_to_js(out) 311 } 312 313 #[wasm_bindgen(js_name = replica_store_gcs_location_update)] 314 pub fn replica_store_gcs_location_update(opts_json: &str) -> Result<JsValue, JsValue> { 315 let opts: IGcsLocationUpdate = parse_json(opts_json).map_err(err_js)?; 316 let exec = WasmSqlExecutor::new(); 317 let out = 318 radroots_replica_store::gcs_location::update(&exec, &opts).map_err(|e| err_js(e.error))?; 319 value_to_js(out) 320 } 321 322 #[wasm_bindgen(js_name = replica_store_gcs_location_delete)] 323 pub fn replica_store_gcs_location_delete(opts_json: &str) -> Result<JsValue, JsValue> { 324 let opts: IGcsLocationDelete = parse_json(opts_json).map_err(err_js)?; 325 let exec = WasmSqlExecutor::new(); 326 let out = 327 radroots_replica_store::gcs_location::delete(&exec, &opts).map_err(|e| err_js(e.error))?; 328 value_to_js(out) 329 } 330 331 #[wasm_bindgen(js_name = replica_store_farm_gcs_location_create)] 332 pub fn replica_store_farm_gcs_location_create(opts_json: &str) -> Result<JsValue, JsValue> { 333 let opts: IFarmGcsLocationCreate = parse_json(opts_json).map_err(err_js)?; 334 let exec = WasmSqlExecutor::new(); 335 let out = radroots_replica_store::farm_gcs_location::create(&exec, &opts) 336 .map_err(|e| err_js(e.error))?; 337 value_to_js(out) 338 } 339 340 #[wasm_bindgen(js_name = replica_store_farm_gcs_location_find_one)] 341 pub fn replica_store_farm_gcs_location_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 342 let opts: IFarmGcsLocationFindOne = parse_json(opts_json).map_err(err_js)?; 343 let exec = WasmSqlExecutor::new(); 344 let out = radroots_replica_store::farm_gcs_location::find_one(&exec, &opts) 345 .map_err(|e| err_js(e.error))?; 346 value_to_js(out) 347 } 348 349 #[wasm_bindgen(js_name = replica_store_farm_gcs_location_find_many)] 350 pub fn replica_store_farm_gcs_location_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 351 let opts: IFarmGcsLocationFindMany = parse_json(opts_json).map_err(err_js)?; 352 let exec = WasmSqlExecutor::new(); 353 let out = radroots_replica_store::farm_gcs_location::find_many(&exec, &opts) 354 .map_err(|e| err_js(e.error))?; 355 value_to_js(out) 356 } 357 358 #[wasm_bindgen(js_name = replica_store_farm_gcs_location_update)] 359 pub fn replica_store_farm_gcs_location_update(opts_json: &str) -> Result<JsValue, JsValue> { 360 let opts: IFarmGcsLocationUpdate = parse_json(opts_json).map_err(err_js)?; 361 let exec = WasmSqlExecutor::new(); 362 let out = radroots_replica_store::farm_gcs_location::update(&exec, &opts) 363 .map_err(|e| err_js(e.error))?; 364 value_to_js(out) 365 } 366 367 #[wasm_bindgen(js_name = replica_store_farm_gcs_location_delete)] 368 pub fn replica_store_farm_gcs_location_delete(opts_json: &str) -> Result<JsValue, JsValue> { 369 let opts: IFarmGcsLocationDelete = parse_json(opts_json).map_err(err_js)?; 370 let exec = WasmSqlExecutor::new(); 371 let out = radroots_replica_store::farm_gcs_location::delete(&exec, &opts) 372 .map_err(|e| err_js(e.error))?; 373 value_to_js(out) 374 } 375 376 #[wasm_bindgen(js_name = replica_store_plot_gcs_location_create)] 377 pub fn replica_store_plot_gcs_location_create(opts_json: &str) -> Result<JsValue, JsValue> { 378 let opts: IPlotGcsLocationCreate = parse_json(opts_json).map_err(err_js)?; 379 let exec = WasmSqlExecutor::new(); 380 let out = radroots_replica_store::plot_gcs_location::create(&exec, &opts) 381 .map_err(|e| err_js(e.error))?; 382 value_to_js(out) 383 } 384 385 #[wasm_bindgen(js_name = replica_store_plot_gcs_location_find_one)] 386 pub fn replica_store_plot_gcs_location_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 387 let opts: IPlotGcsLocationFindOne = parse_json(opts_json).map_err(err_js)?; 388 let exec = WasmSqlExecutor::new(); 389 let out = radroots_replica_store::plot_gcs_location::find_one(&exec, &opts) 390 .map_err(|e| err_js(e.error))?; 391 value_to_js(out) 392 } 393 394 #[wasm_bindgen(js_name = replica_store_plot_gcs_location_find_many)] 395 pub fn replica_store_plot_gcs_location_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 396 let opts: IPlotGcsLocationFindMany = parse_json(opts_json).map_err(err_js)?; 397 let exec = WasmSqlExecutor::new(); 398 let out = radroots_replica_store::plot_gcs_location::find_many(&exec, &opts) 399 .map_err(|e| err_js(e.error))?; 400 value_to_js(out) 401 } 402 403 #[wasm_bindgen(js_name = replica_store_plot_gcs_location_update)] 404 pub fn replica_store_plot_gcs_location_update(opts_json: &str) -> Result<JsValue, JsValue> { 405 let opts: IPlotGcsLocationUpdate = parse_json(opts_json).map_err(err_js)?; 406 let exec = WasmSqlExecutor::new(); 407 let out = radroots_replica_store::plot_gcs_location::update(&exec, &opts) 408 .map_err(|e| err_js(e.error))?; 409 value_to_js(out) 410 } 411 412 #[wasm_bindgen(js_name = replica_store_plot_gcs_location_delete)] 413 pub fn replica_store_plot_gcs_location_delete(opts_json: &str) -> Result<JsValue, JsValue> { 414 let opts: IPlotGcsLocationDelete = parse_json(opts_json).map_err(err_js)?; 415 let exec = WasmSqlExecutor::new(); 416 let out = radroots_replica_store::plot_gcs_location::delete(&exec, &opts) 417 .map_err(|e| err_js(e.error))?; 418 value_to_js(out) 419 } 420 421 #[wasm_bindgen(js_name = replica_store_farm_tag_create)] 422 pub fn replica_store_farm_tag_create(opts_json: &str) -> Result<JsValue, JsValue> { 423 let opts: IFarmTagCreate = parse_json(opts_json).map_err(err_js)?; 424 let exec = WasmSqlExecutor::new(); 425 let out = 426 radroots_replica_store::farm_tag::create(&exec, &opts).map_err(|e| err_js(e.error))?; 427 value_to_js(out) 428 } 429 430 #[wasm_bindgen(js_name = replica_store_farm_tag_find_one)] 431 pub fn replica_store_farm_tag_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 432 let opts: IFarmTagFindOne = parse_json(opts_json).map_err(err_js)?; 433 let exec = WasmSqlExecutor::new(); 434 let out = 435 radroots_replica_store::farm_tag::find_one(&exec, &opts).map_err(|e| err_js(e.error))?; 436 value_to_js(out) 437 } 438 439 #[wasm_bindgen(js_name = replica_store_farm_tag_find_many)] 440 pub fn replica_store_farm_tag_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 441 let opts: IFarmTagFindMany = parse_json(opts_json).map_err(err_js)?; 442 let exec = WasmSqlExecutor::new(); 443 let out = 444 radroots_replica_store::farm_tag::find_many(&exec, &opts).map_err(|e| err_js(e.error))?; 445 value_to_js(out) 446 } 447 448 #[wasm_bindgen(js_name = replica_store_farm_tag_update)] 449 pub fn replica_store_farm_tag_update(opts_json: &str) -> Result<JsValue, JsValue> { 450 let opts: IFarmTagUpdate = parse_json(opts_json).map_err(err_js)?; 451 let exec = WasmSqlExecutor::new(); 452 let out = 453 radroots_replica_store::farm_tag::update(&exec, &opts).map_err(|e| err_js(e.error))?; 454 value_to_js(out) 455 } 456 457 #[wasm_bindgen(js_name = replica_store_farm_tag_delete)] 458 pub fn replica_store_farm_tag_delete(opts_json: &str) -> Result<JsValue, JsValue> { 459 let opts: IFarmTagDelete = parse_json(opts_json).map_err(err_js)?; 460 let exec = WasmSqlExecutor::new(); 461 let out = 462 radroots_replica_store::farm_tag::delete(&exec, &opts).map_err(|e| err_js(e.error))?; 463 value_to_js(out) 464 } 465 466 #[wasm_bindgen(js_name = replica_store_plot_tag_create)] 467 pub fn replica_store_plot_tag_create(opts_json: &str) -> Result<JsValue, JsValue> { 468 let opts: IPlotTagCreate = parse_json(opts_json).map_err(err_js)?; 469 let exec = WasmSqlExecutor::new(); 470 let out = 471 radroots_replica_store::plot_tag::create(&exec, &opts).map_err(|e| err_js(e.error))?; 472 value_to_js(out) 473 } 474 475 #[wasm_bindgen(js_name = replica_store_plot_tag_find_one)] 476 pub fn replica_store_plot_tag_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 477 let opts: IPlotTagFindOne = parse_json(opts_json).map_err(err_js)?; 478 let exec = WasmSqlExecutor::new(); 479 let out = 480 radroots_replica_store::plot_tag::find_one(&exec, &opts).map_err(|e| err_js(e.error))?; 481 value_to_js(out) 482 } 483 484 #[wasm_bindgen(js_name = replica_store_plot_tag_find_many)] 485 pub fn replica_store_plot_tag_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 486 let opts: IPlotTagFindMany = parse_json(opts_json).map_err(err_js)?; 487 let exec = WasmSqlExecutor::new(); 488 let out = 489 radroots_replica_store::plot_tag::find_many(&exec, &opts).map_err(|e| err_js(e.error))?; 490 value_to_js(out) 491 } 492 493 #[wasm_bindgen(js_name = replica_store_plot_tag_update)] 494 pub fn replica_store_plot_tag_update(opts_json: &str) -> Result<JsValue, JsValue> { 495 let opts: IPlotTagUpdate = parse_json(opts_json).map_err(err_js)?; 496 let exec = WasmSqlExecutor::new(); 497 let out = 498 radroots_replica_store::plot_tag::update(&exec, &opts).map_err(|e| err_js(e.error))?; 499 value_to_js(out) 500 } 501 502 #[wasm_bindgen(js_name = replica_store_plot_tag_delete)] 503 pub fn replica_store_plot_tag_delete(opts_json: &str) -> Result<JsValue, JsValue> { 504 let opts: IPlotTagDelete = parse_json(opts_json).map_err(err_js)?; 505 let exec = WasmSqlExecutor::new(); 506 let out = 507 radroots_replica_store::plot_tag::delete(&exec, &opts).map_err(|e| err_js(e.error))?; 508 value_to_js(out) 509 } 510 511 #[wasm_bindgen(js_name = replica_store_farm_member_create)] 512 pub fn replica_store_farm_member_create(opts_json: &str) -> Result<JsValue, JsValue> { 513 let opts: IFarmMemberCreate = parse_json(opts_json).map_err(err_js)?; 514 let exec = WasmSqlExecutor::new(); 515 let out = 516 radroots_replica_store::farm_member::create(&exec, &opts).map_err(|e| err_js(e.error))?; 517 value_to_js(out) 518 } 519 520 #[wasm_bindgen(js_name = replica_store_farm_member_find_one)] 521 pub fn replica_store_farm_member_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 522 let opts: IFarmMemberFindOne = parse_json(opts_json).map_err(err_js)?; 523 let exec = WasmSqlExecutor::new(); 524 let out = 525 radroots_replica_store::farm_member::find_one(&exec, &opts).map_err(|e| err_js(e.error))?; 526 value_to_js(out) 527 } 528 529 #[wasm_bindgen(js_name = replica_store_farm_member_find_many)] 530 pub fn replica_store_farm_member_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 531 let opts: IFarmMemberFindMany = parse_json(opts_json).map_err(err_js)?; 532 let exec = WasmSqlExecutor::new(); 533 let out = radroots_replica_store::farm_member::find_many(&exec, &opts) 534 .map_err(|e| err_js(e.error))?; 535 value_to_js(out) 536 } 537 538 #[wasm_bindgen(js_name = replica_store_farm_member_update)] 539 pub fn replica_store_farm_member_update(opts_json: &str) -> Result<JsValue, JsValue> { 540 let opts: IFarmMemberUpdate = parse_json(opts_json).map_err(err_js)?; 541 let exec = WasmSqlExecutor::new(); 542 let out = 543 radroots_replica_store::farm_member::update(&exec, &opts).map_err(|e| err_js(e.error))?; 544 value_to_js(out) 545 } 546 547 #[wasm_bindgen(js_name = replica_store_farm_member_delete)] 548 pub fn replica_store_farm_member_delete(opts_json: &str) -> Result<JsValue, JsValue> { 549 let opts: IFarmMemberDelete = parse_json(opts_json).map_err(err_js)?; 550 let exec = WasmSqlExecutor::new(); 551 let out = 552 radroots_replica_store::farm_member::delete(&exec, &opts).map_err(|e| err_js(e.error))?; 553 value_to_js(out) 554 } 555 556 #[wasm_bindgen(js_name = replica_store_farm_member_claim_create)] 557 pub fn replica_store_farm_member_claim_create(opts_json: &str) -> Result<JsValue, JsValue> { 558 let opts: IFarmMemberClaimCreate = parse_json(opts_json).map_err(err_js)?; 559 let exec = WasmSqlExecutor::new(); 560 let out = radroots_replica_store::farm_member_claim::create(&exec, &opts) 561 .map_err(|e| err_js(e.error))?; 562 value_to_js(out) 563 } 564 565 #[wasm_bindgen(js_name = replica_store_farm_member_claim_find_one)] 566 pub fn replica_store_farm_member_claim_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 567 let opts: IFarmMemberClaimFindOne = parse_json(opts_json).map_err(err_js)?; 568 let exec = WasmSqlExecutor::new(); 569 let out = radroots_replica_store::farm_member_claim::find_one(&exec, &opts) 570 .map_err(|e| err_js(e.error))?; 571 value_to_js(out) 572 } 573 574 #[wasm_bindgen(js_name = replica_store_farm_member_claim_find_many)] 575 pub fn replica_store_farm_member_claim_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 576 let opts: IFarmMemberClaimFindMany = parse_json(opts_json).map_err(err_js)?; 577 let exec = WasmSqlExecutor::new(); 578 let out = radroots_replica_store::farm_member_claim::find_many(&exec, &opts) 579 .map_err(|e| err_js(e.error))?; 580 value_to_js(out) 581 } 582 583 #[wasm_bindgen(js_name = replica_store_farm_member_claim_update)] 584 pub fn replica_store_farm_member_claim_update(opts_json: &str) -> Result<JsValue, JsValue> { 585 let opts: IFarmMemberClaimUpdate = parse_json(opts_json).map_err(err_js)?; 586 let exec = WasmSqlExecutor::new(); 587 let out = radroots_replica_store::farm_member_claim::update(&exec, &opts) 588 .map_err(|e| err_js(e.error))?; 589 value_to_js(out) 590 } 591 592 #[wasm_bindgen(js_name = replica_store_farm_member_claim_delete)] 593 pub fn replica_store_farm_member_claim_delete(opts_json: &str) -> Result<JsValue, JsValue> { 594 let opts: IFarmMemberClaimDelete = parse_json(opts_json).map_err(err_js)?; 595 let exec = WasmSqlExecutor::new(); 596 let out = radroots_replica_store::farm_member_claim::delete(&exec, &opts) 597 .map_err(|e| err_js(e.error))?; 598 value_to_js(out) 599 } 600 601 #[wasm_bindgen(js_name = replica_store_log_error_create)] 602 pub fn replica_store_log_error_create(opts_json: &str) -> Result<JsValue, JsValue> { 603 let opts: ILogErrorCreate = parse_json(opts_json).map_err(err_js)?; 604 let exec = WasmSqlExecutor::new(); 605 let out = 606 radroots_replica_store::log_error::create(&exec, &opts).map_err(|e| err_js(e.error))?; 607 value_to_js(out) 608 } 609 610 #[wasm_bindgen(js_name = replica_store_log_error_find_one)] 611 pub fn replica_store_log_error_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 612 let opts: ILogErrorFindOne = parse_json(opts_json).map_err(err_js)?; 613 let exec = WasmSqlExecutor::new(); 614 let out = 615 radroots_replica_store::log_error::find_one(&exec, &opts).map_err(|e| err_js(e.error))?; 616 value_to_js(out) 617 } 618 619 #[wasm_bindgen(js_name = replica_store_log_error_find_many)] 620 pub fn replica_store_log_error_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 621 let opts: ILogErrorFindMany = parse_json(opts_json).map_err(err_js)?; 622 let exec = WasmSqlExecutor::new(); 623 let out = 624 radroots_replica_store::log_error::find_many(&exec, &opts).map_err(|e| err_js(e.error))?; 625 value_to_js(out) 626 } 627 628 #[wasm_bindgen(js_name = replica_store_log_error_update)] 629 pub fn replica_store_log_error_update(opts_json: &str) -> Result<JsValue, JsValue> { 630 let opts: ILogErrorUpdate = parse_json(opts_json).map_err(err_js)?; 631 let exec = WasmSqlExecutor::new(); 632 let out = 633 radroots_replica_store::log_error::update(&exec, &opts).map_err(|e| err_js(e.error))?; 634 value_to_js(out) 635 } 636 637 #[wasm_bindgen(js_name = replica_store_log_error_delete)] 638 pub fn replica_store_log_error_delete(opts_json: &str) -> Result<JsValue, JsValue> { 639 let opts: ILogErrorDelete = parse_json(opts_json).map_err(err_js)?; 640 let exec = WasmSqlExecutor::new(); 641 let out = 642 radroots_replica_store::log_error::delete(&exec, &opts).map_err(|e| err_js(e.error))?; 643 value_to_js(out) 644 } 645 646 #[wasm_bindgen(js_name = replica_store_media_image_create)] 647 pub fn replica_store_media_image_create(opts_json: &str) -> Result<JsValue, JsValue> { 648 let opts: IMediaImageCreate = parse_json(opts_json).map_err(err_js)?; 649 let exec = WasmSqlExecutor::new(); 650 let out = 651 radroots_replica_store::media_image::create(&exec, &opts).map_err(|e| err_js(e.error))?; 652 value_to_js(out) 653 } 654 655 #[wasm_bindgen(js_name = replica_store_media_image_find_one)] 656 pub fn replica_store_media_image_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 657 let opts: IMediaImageFindOne = parse_json(opts_json).map_err(err_js)?; 658 let exec = WasmSqlExecutor::new(); 659 let out = 660 radroots_replica_store::media_image::find_one(&exec, &opts).map_err(|e| err_js(e.error))?; 661 value_to_js(out) 662 } 663 664 #[wasm_bindgen(js_name = replica_store_media_image_find_many)] 665 pub fn replica_store_media_image_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 666 let opts: IMediaImageFindMany = parse_json(opts_json).map_err(err_js)?; 667 let exec = WasmSqlExecutor::new(); 668 let out = radroots_replica_store::media_image::find_many(&exec, &opts) 669 .map_err(|e| err_js(e.error))?; 670 value_to_js(out) 671 } 672 673 #[wasm_bindgen(js_name = replica_store_media_image_update)] 674 pub fn replica_store_media_image_update(opts_json: &str) -> Result<JsValue, JsValue> { 675 let opts: IMediaImageUpdate = parse_json(opts_json).map_err(err_js)?; 676 let exec = WasmSqlExecutor::new(); 677 let out = 678 radroots_replica_store::media_image::update(&exec, &opts).map_err(|e| err_js(e.error))?; 679 value_to_js(out) 680 } 681 682 #[wasm_bindgen(js_name = replica_store_media_image_delete)] 683 pub fn replica_store_media_image_delete(opts_json: &str) -> Result<JsValue, JsValue> { 684 let opts: IMediaImageDelete = parse_json(opts_json).map_err(err_js)?; 685 let exec = WasmSqlExecutor::new(); 686 let out = 687 radroots_replica_store::media_image::delete(&exec, &opts).map_err(|e| err_js(e.error))?; 688 value_to_js(out) 689 } 690 691 #[wasm_bindgen(js_name = replica_store_nostr_profile_create)] 692 pub fn replica_store_nostr_profile_create(opts_json: &str) -> Result<JsValue, JsValue> { 693 let opts: INostrProfileCreate = parse_json(opts_json).map_err(err_js)?; 694 let exec = WasmSqlExecutor::new(); 695 let out = 696 radroots_replica_store::nostr_profile::create(&exec, &opts).map_err(|e| err_js(e.error))?; 697 value_to_js(out) 698 } 699 700 #[wasm_bindgen(js_name = replica_store_nostr_profile_find_one)] 701 pub fn replica_store_nostr_profile_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 702 let opts: INostrProfileFindOne = parse_json(opts_json).map_err(err_js)?; 703 let exec = WasmSqlExecutor::new(); 704 let out = radroots_replica_store::nostr_profile::find_one(&exec, &opts) 705 .map_err(|e| err_js(e.error))?; 706 value_to_js(out) 707 } 708 709 #[wasm_bindgen(js_name = replica_store_nostr_profile_find_many)] 710 pub fn replica_store_nostr_profile_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 711 let opts: INostrProfileFindMany = parse_json(opts_json).map_err(err_js)?; 712 let exec = WasmSqlExecutor::new(); 713 let out = radroots_replica_store::nostr_profile::find_many(&exec, &opts) 714 .map_err(|e| err_js(e.error))?; 715 value_to_js(out) 716 } 717 718 #[wasm_bindgen(js_name = replica_store_nostr_profile_update)] 719 pub fn replica_store_nostr_profile_update(opts_json: &str) -> Result<JsValue, JsValue> { 720 let opts: INostrProfileUpdate = parse_json(opts_json).map_err(err_js)?; 721 let exec = WasmSqlExecutor::new(); 722 let out = 723 radroots_replica_store::nostr_profile::update(&exec, &opts).map_err(|e| err_js(e.error))?; 724 value_to_js(out) 725 } 726 727 #[wasm_bindgen(js_name = replica_store_nostr_profile_delete)] 728 pub fn replica_store_nostr_profile_delete(opts_json: &str) -> Result<JsValue, JsValue> { 729 let opts: INostrProfileDelete = parse_json(opts_json).map_err(err_js)?; 730 let exec = WasmSqlExecutor::new(); 731 let out = 732 radroots_replica_store::nostr_profile::delete(&exec, &opts).map_err(|e| err_js(e.error))?; 733 value_to_js(out) 734 } 735 736 #[wasm_bindgen(js_name = replica_store_nostr_event_head_create)] 737 pub fn replica_store_nostr_event_head_create(opts_json: &str) -> Result<JsValue, JsValue> { 738 let opts: INostrEventHeadCreate = parse_json(opts_json).map_err(err_js)?; 739 let exec = WasmSqlExecutor::new(); 740 let out = radroots_replica_store::nostr_event_head::create(&exec, &opts) 741 .map_err(|e| err_js(e.error))?; 742 value_to_js(out) 743 } 744 745 #[wasm_bindgen(js_name = replica_store_nostr_event_head_find_one)] 746 pub fn replica_store_nostr_event_head_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 747 let opts: INostrEventHeadFindOne = parse_json(opts_json).map_err(err_js)?; 748 let exec = WasmSqlExecutor::new(); 749 let out = radroots_replica_store::nostr_event_head::find_one(&exec, &opts) 750 .map_err(|e| err_js(e.error))?; 751 value_to_js(out) 752 } 753 754 #[wasm_bindgen(js_name = replica_store_nostr_event_head_find_many)] 755 pub fn replica_store_nostr_event_head_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 756 let opts: INostrEventHeadFindMany = parse_json(opts_json).map_err(err_js)?; 757 let exec = WasmSqlExecutor::new(); 758 let out = radroots_replica_store::nostr_event_head::find_many(&exec, &opts) 759 .map_err(|e| err_js(e.error))?; 760 value_to_js(out) 761 } 762 763 #[wasm_bindgen(js_name = replica_store_nostr_event_head_update)] 764 pub fn replica_store_nostr_event_head_update(opts_json: &str) -> Result<JsValue, JsValue> { 765 let opts: INostrEventHeadUpdate = parse_json(opts_json).map_err(err_js)?; 766 let exec = WasmSqlExecutor::new(); 767 let out = radroots_replica_store::nostr_event_head::update(&exec, &opts) 768 .map_err(|e| err_js(e.error))?; 769 value_to_js(out) 770 } 771 772 #[wasm_bindgen(js_name = replica_store_nostr_event_head_delete)] 773 pub fn replica_store_nostr_event_head_delete(opts_json: &str) -> Result<JsValue, JsValue> { 774 let opts: INostrEventHeadDelete = parse_json(opts_json).map_err(err_js)?; 775 let exec = WasmSqlExecutor::new(); 776 let out = radroots_replica_store::nostr_event_head::delete(&exec, &opts) 777 .map_err(|e| err_js(e.error))?; 778 value_to_js(out) 779 } 780 781 #[wasm_bindgen(js_name = replica_store_nostr_relay_create)] 782 pub fn replica_store_nostr_relay_create(opts_json: &str) -> Result<JsValue, JsValue> { 783 let opts: INostrRelayCreate = parse_json(opts_json).map_err(err_js)?; 784 let exec = WasmSqlExecutor::new(); 785 let out = 786 radroots_replica_store::nostr_relay::create(&exec, &opts).map_err(|e| err_js(e.error))?; 787 value_to_js(out) 788 } 789 790 #[wasm_bindgen(js_name = replica_store_nostr_relay_find_one)] 791 pub fn replica_store_nostr_relay_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 792 let opts: INostrRelayFindOne = parse_json(opts_json).map_err(err_js)?; 793 let exec = WasmSqlExecutor::new(); 794 let out = 795 radroots_replica_store::nostr_relay::find_one(&exec, &opts).map_err(|e| err_js(e.error))?; 796 value_to_js(out) 797 } 798 799 #[wasm_bindgen(js_name = replica_store_nostr_relay_find_many)] 800 pub fn replica_store_nostr_relay_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 801 let opts: INostrRelayFindMany = parse_json(opts_json).map_err(err_js)?; 802 let exec = WasmSqlExecutor::new(); 803 let out = radroots_replica_store::nostr_relay::find_many(&exec, &opts) 804 .map_err(|e| err_js(e.error))?; 805 value_to_js(out) 806 } 807 808 #[wasm_bindgen(js_name = replica_store_nostr_relay_update)] 809 pub fn replica_store_nostr_relay_update(opts_json: &str) -> Result<JsValue, JsValue> { 810 let opts: INostrRelayUpdate = parse_json(opts_json).map_err(err_js)?; 811 let exec = WasmSqlExecutor::new(); 812 let out = 813 radroots_replica_store::nostr_relay::update(&exec, &opts).map_err(|e| err_js(e.error))?; 814 value_to_js(out) 815 } 816 817 #[wasm_bindgen(js_name = replica_store_nostr_relay_delete)] 818 pub fn replica_store_nostr_relay_delete(opts_json: &str) -> Result<JsValue, JsValue> { 819 let opts: INostrRelayDelete = parse_json(opts_json).map_err(err_js)?; 820 let exec = WasmSqlExecutor::new(); 821 let out = 822 radroots_replica_store::nostr_relay::delete(&exec, &opts).map_err(|e| err_js(e.error))?; 823 value_to_js(out) 824 } 825 826 #[wasm_bindgen(js_name = replica_store_trade_product_create)] 827 pub fn replica_store_trade_product_create(opts_json: &str) -> Result<JsValue, JsValue> { 828 let opts: ITradeProductCreate = parse_json(opts_json).map_err(err_js)?; 829 let exec = WasmSqlExecutor::new(); 830 let out = 831 radroots_replica_store::trade_product::create(&exec, &opts).map_err(|e| err_js(e.error))?; 832 value_to_js(out) 833 } 834 835 #[wasm_bindgen(js_name = replica_store_trade_product_find_one)] 836 pub fn replica_store_trade_product_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 837 let opts: ITradeProductFindOne = parse_json(opts_json).map_err(err_js)?; 838 let exec = WasmSqlExecutor::new(); 839 let out = radroots_replica_store::trade_product::find_one(&exec, &opts) 840 .map_err(|e| err_js(e.error))?; 841 value_to_js(out) 842 } 843 844 #[wasm_bindgen(js_name = replica_store_trade_product_find_many)] 845 pub fn replica_store_trade_product_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 846 let opts: ITradeProductFindMany = parse_json(opts_json).map_err(err_js)?; 847 let exec = WasmSqlExecutor::new(); 848 let out = radroots_replica_store::trade_product::find_many(&exec, &opts) 849 .map_err(|e| err_js(e.error))?; 850 value_to_js(out) 851 } 852 853 #[wasm_bindgen(js_name = replica_store_trade_product_update)] 854 pub fn replica_store_trade_product_update(opts_json: &str) -> Result<JsValue, JsValue> { 855 let opts: ITradeProductUpdate = parse_json(opts_json).map_err(err_js)?; 856 let exec = WasmSqlExecutor::new(); 857 let out = 858 radroots_replica_store::trade_product::update(&exec, &opts).map_err(|e| err_js(e.error))?; 859 value_to_js(out) 860 } 861 862 #[wasm_bindgen(js_name = replica_store_trade_product_delete)] 863 pub fn replica_store_trade_product_delete(opts_json: &str) -> Result<JsValue, JsValue> { 864 let opts: ITradeProductDelete = parse_json(opts_json).map_err(err_js)?; 865 let exec = WasmSqlExecutor::new(); 866 let out = 867 radroots_replica_store::trade_product::delete(&exec, &opts).map_err(|e| err_js(e.error))?; 868 value_to_js(out) 869 } 870 871 #[wasm_bindgen(js_name = replica_store_nostr_profile_relay_set)] 872 pub fn replica_store_nostr_profile_relay_set(opts_json: &str) -> Result<JsValue, JsValue> { 873 let opts: INostrProfileRelayRelation = parse_json(opts_json).map_err(err_js)?; 874 let exec = WasmSqlExecutor::new(); 875 let out = radroots_replica_store::nostr_profile_relay::set(&exec, &opts) 876 .map_err(|e| err_js(e.error))?; 877 value_to_js(out) 878 } 879 880 #[wasm_bindgen(js_name = replica_store_nostr_profile_relay_unset)] 881 pub fn replica_store_nostr_profile_relay_unset(opts_json: &str) -> Result<JsValue, JsValue> { 882 let opts: INostrProfileRelayRelation = parse_json(opts_json).map_err(err_js)?; 883 let exec = WasmSqlExecutor::new(); 884 let out = radroots_replica_store::nostr_profile_relay::unset(&exec, &opts) 885 .map_err(|e| err_js(e.error))?; 886 value_to_js(out) 887 } 888 889 #[wasm_bindgen(js_name = replica_store_trade_product_location_set)] 890 pub fn replica_store_trade_product_location_set(opts_json: &str) -> Result<JsValue, JsValue> { 891 let opts: ITradeProductLocationRelation = parse_json(opts_json).map_err(err_js)?; 892 let exec = WasmSqlExecutor::new(); 893 let out = radroots_replica_store::trade_product_location::set(&exec, &opts) 894 .map_err(|e| err_js(e.error))?; 895 value_to_js(out) 896 } 897 898 #[wasm_bindgen(js_name = replica_store_trade_product_location_unset)] 899 pub fn replica_store_trade_product_location_unset(opts_json: &str) -> Result<JsValue, JsValue> { 900 let opts: ITradeProductLocationRelation = parse_json(opts_json).map_err(err_js)?; 901 let exec = WasmSqlExecutor::new(); 902 let out = radroots_replica_store::trade_product_location::unset(&exec, &opts) 903 .map_err(|e| err_js(e.error))?; 904 value_to_js(out) 905 } 906 907 #[wasm_bindgen(js_name = replica_store_trade_product_media_set)] 908 pub fn replica_store_trade_product_media_set(opts_json: &str) -> Result<JsValue, JsValue> { 909 let opts: ITradeProductMediaRelation = parse_json(opts_json).map_err(err_js)?; 910 let exec = WasmSqlExecutor::new(); 911 let out = radroots_replica_store::trade_product_media::set(&exec, &opts) 912 .map_err(|e| err_js(e.error))?; 913 value_to_js(out) 914 } 915 916 #[wasm_bindgen(js_name = replica_store_trade_product_media_unset)] 917 pub fn replica_store_trade_product_media_unset(opts_json: &str) -> Result<JsValue, JsValue> { 918 let opts: ITradeProductMediaRelation = parse_json(opts_json).map_err(err_js)?; 919 let exec = WasmSqlExecutor::new(); 920 let out = radroots_replica_store::trade_product_media::unset(&exec, &opts) 921 .map_err(|e| err_js(e.error))?; 922 value_to_js(out) 923 }