wasm_impl.rs (38623B)
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_db::migrations; 6 use radroots_replica_db::{ReplicaDbExportManifestRs, 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_db_schema::farm::{ 17 IFarmCreate, IFarmDelete, IFarmFindMany, IFarmFindOne, IFarmUpdate, 18 }; 19 20 use radroots_replica_db_schema::farm_gcs_location::{ 21 IFarmGcsLocationCreate, IFarmGcsLocationDelete, IFarmGcsLocationFindMany, 22 IFarmGcsLocationFindOne, IFarmGcsLocationUpdate, 23 }; 24 25 use radroots_replica_db_schema::farm_member::{ 26 IFarmMemberCreate, IFarmMemberDelete, IFarmMemberFindMany, IFarmMemberFindOne, 27 IFarmMemberUpdate, 28 }; 29 30 use radroots_replica_db_schema::farm_member_claim::{ 31 IFarmMemberClaimCreate, IFarmMemberClaimDelete, IFarmMemberClaimFindMany, 32 IFarmMemberClaimFindOne, IFarmMemberClaimUpdate, 33 }; 34 35 use radroots_replica_db_schema::farm_tag::{ 36 IFarmTagCreate, IFarmTagDelete, IFarmTagFindMany, IFarmTagFindOne, IFarmTagUpdate, 37 }; 38 39 use radroots_replica_db_schema::gcs_location::{ 40 IGcsLocationCreate, IGcsLocationDelete, IGcsLocationFindMany, IGcsLocationFindOne, 41 IGcsLocationUpdate, 42 }; 43 44 use radroots_replica_db_schema::log_error::{ 45 ILogErrorCreate, ILogErrorDelete, ILogErrorFindMany, ILogErrorFindOne, ILogErrorUpdate, 46 }; 47 48 use radroots_replica_db_schema::media_image::{ 49 IMediaImageCreate, IMediaImageDelete, IMediaImageFindMany, IMediaImageFindOne, 50 IMediaImageUpdate, 51 }; 52 53 use radroots_replica_db_schema::nostr_profile::{ 54 INostrProfileCreate, INostrProfileDelete, INostrProfileFindMany, INostrProfileFindOne, 55 INostrProfileUpdate, 56 }; 57 58 use radroots_replica_db_schema::nostr_event_head::{ 59 INostrEventHeadCreate, INostrEventHeadDelete, INostrEventHeadFindMany, INostrEventHeadFindOne, 60 INostrEventHeadUpdate, 61 }; 62 63 use radroots_replica_db_schema::nostr_relay::{ 64 INostrRelayCreate, INostrRelayDelete, INostrRelayFindMany, INostrRelayFindOne, 65 INostrRelayUpdate, 66 }; 67 68 use radroots_replica_db_schema::trade_product::{ 69 ITradeProductCreate, ITradeProductDelete, ITradeProductFindMany, ITradeProductFindOne, 70 ITradeProductUpdate, 71 }; 72 73 use radroots_replica_db_schema::plot::{ 74 IPlotCreate, IPlotDelete, IPlotFindMany, IPlotFindOne, IPlotUpdate, 75 }; 76 77 use radroots_replica_db_schema::plot_gcs_location::{ 78 IPlotGcsLocationCreate, IPlotGcsLocationDelete, IPlotGcsLocationFindMany, 79 IPlotGcsLocationFindOne, IPlotGcsLocationUpdate, 80 }; 81 82 use radroots_replica_db_schema::plot_tag::{ 83 IPlotTagCreate, IPlotTagDelete, IPlotTagFindMany, IPlotTagFindOne, IPlotTagUpdate, 84 }; 85 86 use radroots_replica_db_schema::nostr_profile_relay::INostrProfileRelayRelation; 87 88 use radroots_replica_db_schema::trade_product_location::ITradeProductLocationRelation; 89 90 use radroots_replica_db_schema::trade_product_media::ITradeProductMediaRelation; 91 92 #[wasm_bindgen(js_name = replica_db_run_migrations)] 93 pub fn replica_db_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_db_reset_database)] 99 pub fn replica_db_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_db_export_json)] 105 pub fn replica_db_export_json() -> Result<JsValue, JsValue> { 106 let exec = WasmSqlExecutor::new(); 107 let dump = radroots_replica_db::backup::export_database_backup(&exec).map_err(err_js)?; 108 value_to_js(dump) 109 } 110 111 #[wasm_bindgen(js_name = replica_db_import_json)] 112 pub fn replica_db_import_json(dump_json: &str) -> Result<(), JsValue> { 113 let exec = WasmSqlExecutor::new(); 114 radroots_replica_db::backup::restore_database_backup_json(&exec, dump_json).map_err(err_js) 115 } 116 117 #[wasm_bindgen(js_name = replica_db_export_begin)] 118 pub fn replica_db_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_db_export_finish)] 132 pub fn replica_db_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: ReplicaDbExportManifestRs) -> 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: ReplicaDbExportManifestRs, 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_db::ReplicaDbExportManifestRs { 187 export_version: "1".to_string(), 188 replica_db_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_db_farm_create)] 207 pub fn replica_db_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_db::farm::create(&exec, &opts).map_err(|e| err_js(e.err))?; 211 value_to_js(out) 212 } 213 214 #[wasm_bindgen(js_name = replica_db_farm_find_one)] 215 pub fn replica_db_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_db::farm::find_one(&exec, &opts).map_err(|e| err_js(e.err))?; 219 value_to_js(out) 220 } 221 222 #[wasm_bindgen(js_name = replica_db_farm_find_many)] 223 pub fn replica_db_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_db::farm::find_many(&exec, &opts).map_err(|e| err_js(e.err))?; 227 value_to_js(out) 228 } 229 230 #[wasm_bindgen(js_name = replica_db_farm_update)] 231 pub fn replica_db_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_db::farm::update(&exec, &opts).map_err(|e| err_js(e.err))?; 235 value_to_js(out) 236 } 237 238 #[wasm_bindgen(js_name = replica_db_farm_delete)] 239 pub fn replica_db_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_db::farm::delete(&exec, &opts).map_err(|e| err_js(e.err))?; 243 value_to_js(out) 244 } 245 246 #[wasm_bindgen(js_name = replica_db_plot_create)] 247 pub fn replica_db_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_db::plot::create(&exec, &opts).map_err(|e| err_js(e.err))?; 251 value_to_js(out) 252 } 253 254 #[wasm_bindgen(js_name = replica_db_plot_find_one)] 255 pub fn replica_db_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_db::plot::find_one(&exec, &opts).map_err(|e| err_js(e.err))?; 259 value_to_js(out) 260 } 261 262 #[wasm_bindgen(js_name = replica_db_plot_find_many)] 263 pub fn replica_db_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_db::plot::find_many(&exec, &opts).map_err(|e| err_js(e.err))?; 267 value_to_js(out) 268 } 269 270 #[wasm_bindgen(js_name = replica_db_plot_update)] 271 pub fn replica_db_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_db::plot::update(&exec, &opts).map_err(|e| err_js(e.err))?; 275 value_to_js(out) 276 } 277 278 #[wasm_bindgen(js_name = replica_db_plot_delete)] 279 pub fn replica_db_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_db::plot::delete(&exec, &opts).map_err(|e| err_js(e.err))?; 283 value_to_js(out) 284 } 285 286 #[wasm_bindgen(js_name = replica_db_gcs_location_create)] 287 pub fn replica_db_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 = radroots_replica_db::gcs_location::create(&exec, &opts).map_err(|e| err_js(e.err))?; 291 value_to_js(out) 292 } 293 294 #[wasm_bindgen(js_name = replica_db_gcs_location_find_one)] 295 pub fn replica_db_gcs_location_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 296 let opts: IGcsLocationFindOne = parse_json(opts_json).map_err(err_js)?; 297 let exec = WasmSqlExecutor::new(); 298 let out = 299 radroots_replica_db::gcs_location::find_one(&exec, &opts).map_err(|e| err_js(e.err))?; 300 value_to_js(out) 301 } 302 303 #[wasm_bindgen(js_name = replica_db_gcs_location_find_many)] 304 pub fn replica_db_gcs_location_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 305 let opts: IGcsLocationFindMany = parse_json(opts_json).map_err(err_js)?; 306 let exec = WasmSqlExecutor::new(); 307 let out = 308 radroots_replica_db::gcs_location::find_many(&exec, &opts).map_err(|e| err_js(e.err))?; 309 value_to_js(out) 310 } 311 312 #[wasm_bindgen(js_name = replica_db_gcs_location_update)] 313 pub fn replica_db_gcs_location_update(opts_json: &str) -> Result<JsValue, JsValue> { 314 let opts: IGcsLocationUpdate = parse_json(opts_json).map_err(err_js)?; 315 let exec = WasmSqlExecutor::new(); 316 let out = radroots_replica_db::gcs_location::update(&exec, &opts).map_err(|e| err_js(e.err))?; 317 value_to_js(out) 318 } 319 320 #[wasm_bindgen(js_name = replica_db_gcs_location_delete)] 321 pub fn replica_db_gcs_location_delete(opts_json: &str) -> Result<JsValue, JsValue> { 322 let opts: IGcsLocationDelete = parse_json(opts_json).map_err(err_js)?; 323 let exec = WasmSqlExecutor::new(); 324 let out = radroots_replica_db::gcs_location::delete(&exec, &opts).map_err(|e| err_js(e.err))?; 325 value_to_js(out) 326 } 327 328 #[wasm_bindgen(js_name = replica_db_farm_gcs_location_create)] 329 pub fn replica_db_farm_gcs_location_create(opts_json: &str) -> Result<JsValue, JsValue> { 330 let opts: IFarmGcsLocationCreate = parse_json(opts_json).map_err(err_js)?; 331 let exec = WasmSqlExecutor::new(); 332 let out = 333 radroots_replica_db::farm_gcs_location::create(&exec, &opts).map_err(|e| err_js(e.err))?; 334 value_to_js(out) 335 } 336 337 #[wasm_bindgen(js_name = replica_db_farm_gcs_location_find_one)] 338 pub fn replica_db_farm_gcs_location_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 339 let opts: IFarmGcsLocationFindOne = parse_json(opts_json).map_err(err_js)?; 340 let exec = WasmSqlExecutor::new(); 341 let out = radroots_replica_db::farm_gcs_location::find_one(&exec, &opts) 342 .map_err(|e| err_js(e.err))?; 343 value_to_js(out) 344 } 345 346 #[wasm_bindgen(js_name = replica_db_farm_gcs_location_find_many)] 347 pub fn replica_db_farm_gcs_location_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 348 let opts: IFarmGcsLocationFindMany = parse_json(opts_json).map_err(err_js)?; 349 let exec = WasmSqlExecutor::new(); 350 let out = radroots_replica_db::farm_gcs_location::find_many(&exec, &opts) 351 .map_err(|e| err_js(e.err))?; 352 value_to_js(out) 353 } 354 355 #[wasm_bindgen(js_name = replica_db_farm_gcs_location_update)] 356 pub fn replica_db_farm_gcs_location_update(opts_json: &str) -> Result<JsValue, JsValue> { 357 let opts: IFarmGcsLocationUpdate = parse_json(opts_json).map_err(err_js)?; 358 let exec = WasmSqlExecutor::new(); 359 let out = 360 radroots_replica_db::farm_gcs_location::update(&exec, &opts).map_err(|e| err_js(e.err))?; 361 value_to_js(out) 362 } 363 364 #[wasm_bindgen(js_name = replica_db_farm_gcs_location_delete)] 365 pub fn replica_db_farm_gcs_location_delete(opts_json: &str) -> Result<JsValue, JsValue> { 366 let opts: IFarmGcsLocationDelete = parse_json(opts_json).map_err(err_js)?; 367 let exec = WasmSqlExecutor::new(); 368 let out = 369 radroots_replica_db::farm_gcs_location::delete(&exec, &opts).map_err(|e| err_js(e.err))?; 370 value_to_js(out) 371 } 372 373 #[wasm_bindgen(js_name = replica_db_plot_gcs_location_create)] 374 pub fn replica_db_plot_gcs_location_create(opts_json: &str) -> Result<JsValue, JsValue> { 375 let opts: IPlotGcsLocationCreate = parse_json(opts_json).map_err(err_js)?; 376 let exec = WasmSqlExecutor::new(); 377 let out = 378 radroots_replica_db::plot_gcs_location::create(&exec, &opts).map_err(|e| err_js(e.err))?; 379 value_to_js(out) 380 } 381 382 #[wasm_bindgen(js_name = replica_db_plot_gcs_location_find_one)] 383 pub fn replica_db_plot_gcs_location_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 384 let opts: IPlotGcsLocationFindOne = parse_json(opts_json).map_err(err_js)?; 385 let exec = WasmSqlExecutor::new(); 386 let out = radroots_replica_db::plot_gcs_location::find_one(&exec, &opts) 387 .map_err(|e| err_js(e.err))?; 388 value_to_js(out) 389 } 390 391 #[wasm_bindgen(js_name = replica_db_plot_gcs_location_find_many)] 392 pub fn replica_db_plot_gcs_location_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 393 let opts: IPlotGcsLocationFindMany = parse_json(opts_json).map_err(err_js)?; 394 let exec = WasmSqlExecutor::new(); 395 let out = radroots_replica_db::plot_gcs_location::find_many(&exec, &opts) 396 .map_err(|e| err_js(e.err))?; 397 value_to_js(out) 398 } 399 400 #[wasm_bindgen(js_name = replica_db_plot_gcs_location_update)] 401 pub fn replica_db_plot_gcs_location_update(opts_json: &str) -> Result<JsValue, JsValue> { 402 let opts: IPlotGcsLocationUpdate = parse_json(opts_json).map_err(err_js)?; 403 let exec = WasmSqlExecutor::new(); 404 let out = 405 radroots_replica_db::plot_gcs_location::update(&exec, &opts).map_err(|e| err_js(e.err))?; 406 value_to_js(out) 407 } 408 409 #[wasm_bindgen(js_name = replica_db_plot_gcs_location_delete)] 410 pub fn replica_db_plot_gcs_location_delete(opts_json: &str) -> Result<JsValue, JsValue> { 411 let opts: IPlotGcsLocationDelete = parse_json(opts_json).map_err(err_js)?; 412 let exec = WasmSqlExecutor::new(); 413 let out = 414 radroots_replica_db::plot_gcs_location::delete(&exec, &opts).map_err(|e| err_js(e.err))?; 415 value_to_js(out) 416 } 417 418 #[wasm_bindgen(js_name = replica_db_farm_tag_create)] 419 pub fn replica_db_farm_tag_create(opts_json: &str) -> Result<JsValue, JsValue> { 420 let opts: IFarmTagCreate = parse_json(opts_json).map_err(err_js)?; 421 let exec = WasmSqlExecutor::new(); 422 let out = radroots_replica_db::farm_tag::create(&exec, &opts).map_err(|e| err_js(e.err))?; 423 value_to_js(out) 424 } 425 426 #[wasm_bindgen(js_name = replica_db_farm_tag_find_one)] 427 pub fn replica_db_farm_tag_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 428 let opts: IFarmTagFindOne = parse_json(opts_json).map_err(err_js)?; 429 let exec = WasmSqlExecutor::new(); 430 let out = radroots_replica_db::farm_tag::find_one(&exec, &opts).map_err(|e| err_js(e.err))?; 431 value_to_js(out) 432 } 433 434 #[wasm_bindgen(js_name = replica_db_farm_tag_find_many)] 435 pub fn replica_db_farm_tag_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 436 let opts: IFarmTagFindMany = parse_json(opts_json).map_err(err_js)?; 437 let exec = WasmSqlExecutor::new(); 438 let out = radroots_replica_db::farm_tag::find_many(&exec, &opts).map_err(|e| err_js(e.err))?; 439 value_to_js(out) 440 } 441 442 #[wasm_bindgen(js_name = replica_db_farm_tag_update)] 443 pub fn replica_db_farm_tag_update(opts_json: &str) -> Result<JsValue, JsValue> { 444 let opts: IFarmTagUpdate = parse_json(opts_json).map_err(err_js)?; 445 let exec = WasmSqlExecutor::new(); 446 let out = radroots_replica_db::farm_tag::update(&exec, &opts).map_err(|e| err_js(e.err))?; 447 value_to_js(out) 448 } 449 450 #[wasm_bindgen(js_name = replica_db_farm_tag_delete)] 451 pub fn replica_db_farm_tag_delete(opts_json: &str) -> Result<JsValue, JsValue> { 452 let opts: IFarmTagDelete = parse_json(opts_json).map_err(err_js)?; 453 let exec = WasmSqlExecutor::new(); 454 let out = radroots_replica_db::farm_tag::delete(&exec, &opts).map_err(|e| err_js(e.err))?; 455 value_to_js(out) 456 } 457 458 #[wasm_bindgen(js_name = replica_db_plot_tag_create)] 459 pub fn replica_db_plot_tag_create(opts_json: &str) -> Result<JsValue, JsValue> { 460 let opts: IPlotTagCreate = parse_json(opts_json).map_err(err_js)?; 461 let exec = WasmSqlExecutor::new(); 462 let out = radroots_replica_db::plot_tag::create(&exec, &opts).map_err(|e| err_js(e.err))?; 463 value_to_js(out) 464 } 465 466 #[wasm_bindgen(js_name = replica_db_plot_tag_find_one)] 467 pub fn replica_db_plot_tag_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 468 let opts: IPlotTagFindOne = parse_json(opts_json).map_err(err_js)?; 469 let exec = WasmSqlExecutor::new(); 470 let out = radroots_replica_db::plot_tag::find_one(&exec, &opts).map_err(|e| err_js(e.err))?; 471 value_to_js(out) 472 } 473 474 #[wasm_bindgen(js_name = replica_db_plot_tag_find_many)] 475 pub fn replica_db_plot_tag_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 476 let opts: IPlotTagFindMany = parse_json(opts_json).map_err(err_js)?; 477 let exec = WasmSqlExecutor::new(); 478 let out = radroots_replica_db::plot_tag::find_many(&exec, &opts).map_err(|e| err_js(e.err))?; 479 value_to_js(out) 480 } 481 482 #[wasm_bindgen(js_name = replica_db_plot_tag_update)] 483 pub fn replica_db_plot_tag_update(opts_json: &str) -> Result<JsValue, JsValue> { 484 let opts: IPlotTagUpdate = parse_json(opts_json).map_err(err_js)?; 485 let exec = WasmSqlExecutor::new(); 486 let out = radroots_replica_db::plot_tag::update(&exec, &opts).map_err(|e| err_js(e.err))?; 487 value_to_js(out) 488 } 489 490 #[wasm_bindgen(js_name = replica_db_plot_tag_delete)] 491 pub fn replica_db_plot_tag_delete(opts_json: &str) -> Result<JsValue, JsValue> { 492 let opts: IPlotTagDelete = parse_json(opts_json).map_err(err_js)?; 493 let exec = WasmSqlExecutor::new(); 494 let out = radroots_replica_db::plot_tag::delete(&exec, &opts).map_err(|e| err_js(e.err))?; 495 value_to_js(out) 496 } 497 498 #[wasm_bindgen(js_name = replica_db_farm_member_create)] 499 pub fn replica_db_farm_member_create(opts_json: &str) -> Result<JsValue, JsValue> { 500 let opts: IFarmMemberCreate = parse_json(opts_json).map_err(err_js)?; 501 let exec = WasmSqlExecutor::new(); 502 let out = radroots_replica_db::farm_member::create(&exec, &opts).map_err(|e| err_js(e.err))?; 503 value_to_js(out) 504 } 505 506 #[wasm_bindgen(js_name = replica_db_farm_member_find_one)] 507 pub fn replica_db_farm_member_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 508 let opts: IFarmMemberFindOne = parse_json(opts_json).map_err(err_js)?; 509 let exec = WasmSqlExecutor::new(); 510 let out = 511 radroots_replica_db::farm_member::find_one(&exec, &opts).map_err(|e| err_js(e.err))?; 512 value_to_js(out) 513 } 514 515 #[wasm_bindgen(js_name = replica_db_farm_member_find_many)] 516 pub fn replica_db_farm_member_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 517 let opts: IFarmMemberFindMany = parse_json(opts_json).map_err(err_js)?; 518 let exec = WasmSqlExecutor::new(); 519 let out = 520 radroots_replica_db::farm_member::find_many(&exec, &opts).map_err(|e| err_js(e.err))?; 521 value_to_js(out) 522 } 523 524 #[wasm_bindgen(js_name = replica_db_farm_member_update)] 525 pub fn replica_db_farm_member_update(opts_json: &str) -> Result<JsValue, JsValue> { 526 let opts: IFarmMemberUpdate = parse_json(opts_json).map_err(err_js)?; 527 let exec = WasmSqlExecutor::new(); 528 let out = radroots_replica_db::farm_member::update(&exec, &opts).map_err(|e| err_js(e.err))?; 529 value_to_js(out) 530 } 531 532 #[wasm_bindgen(js_name = replica_db_farm_member_delete)] 533 pub fn replica_db_farm_member_delete(opts_json: &str) -> Result<JsValue, JsValue> { 534 let opts: IFarmMemberDelete = parse_json(opts_json).map_err(err_js)?; 535 let exec = WasmSqlExecutor::new(); 536 let out = radroots_replica_db::farm_member::delete(&exec, &opts).map_err(|e| err_js(e.err))?; 537 value_to_js(out) 538 } 539 540 #[wasm_bindgen(js_name = replica_db_farm_member_claim_create)] 541 pub fn replica_db_farm_member_claim_create(opts_json: &str) -> Result<JsValue, JsValue> { 542 let opts: IFarmMemberClaimCreate = parse_json(opts_json).map_err(err_js)?; 543 let exec = WasmSqlExecutor::new(); 544 let out = 545 radroots_replica_db::farm_member_claim::create(&exec, &opts).map_err(|e| err_js(e.err))?; 546 value_to_js(out) 547 } 548 549 #[wasm_bindgen(js_name = replica_db_farm_member_claim_find_one)] 550 pub fn replica_db_farm_member_claim_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 551 let opts: IFarmMemberClaimFindOne = parse_json(opts_json).map_err(err_js)?; 552 let exec = WasmSqlExecutor::new(); 553 let out = radroots_replica_db::farm_member_claim::find_one(&exec, &opts) 554 .map_err(|e| err_js(e.err))?; 555 value_to_js(out) 556 } 557 558 #[wasm_bindgen(js_name = replica_db_farm_member_claim_find_many)] 559 pub fn replica_db_farm_member_claim_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 560 let opts: IFarmMemberClaimFindMany = parse_json(opts_json).map_err(err_js)?; 561 let exec = WasmSqlExecutor::new(); 562 let out = radroots_replica_db::farm_member_claim::find_many(&exec, &opts) 563 .map_err(|e| err_js(e.err))?; 564 value_to_js(out) 565 } 566 567 #[wasm_bindgen(js_name = replica_db_farm_member_claim_update)] 568 pub fn replica_db_farm_member_claim_update(opts_json: &str) -> Result<JsValue, JsValue> { 569 let opts: IFarmMemberClaimUpdate = parse_json(opts_json).map_err(err_js)?; 570 let exec = WasmSqlExecutor::new(); 571 let out = 572 radroots_replica_db::farm_member_claim::update(&exec, &opts).map_err(|e| err_js(e.err))?; 573 value_to_js(out) 574 } 575 576 #[wasm_bindgen(js_name = replica_db_farm_member_claim_delete)] 577 pub fn replica_db_farm_member_claim_delete(opts_json: &str) -> Result<JsValue, JsValue> { 578 let opts: IFarmMemberClaimDelete = parse_json(opts_json).map_err(err_js)?; 579 let exec = WasmSqlExecutor::new(); 580 let out = 581 radroots_replica_db::farm_member_claim::delete(&exec, &opts).map_err(|e| err_js(e.err))?; 582 value_to_js(out) 583 } 584 585 #[wasm_bindgen(js_name = replica_db_log_error_create)] 586 pub fn replica_db_log_error_create(opts_json: &str) -> Result<JsValue, JsValue> { 587 let opts: ILogErrorCreate = parse_json(opts_json).map_err(err_js)?; 588 let exec = WasmSqlExecutor::new(); 589 let out = radroots_replica_db::log_error::create(&exec, &opts).map_err(|e| err_js(e.err))?; 590 value_to_js(out) 591 } 592 593 #[wasm_bindgen(js_name = replica_db_log_error_find_one)] 594 pub fn replica_db_log_error_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 595 let opts: ILogErrorFindOne = parse_json(opts_json).map_err(err_js)?; 596 let exec = WasmSqlExecutor::new(); 597 let out = radroots_replica_db::log_error::find_one(&exec, &opts).map_err(|e| err_js(e.err))?; 598 value_to_js(out) 599 } 600 601 #[wasm_bindgen(js_name = replica_db_log_error_find_many)] 602 pub fn replica_db_log_error_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 603 let opts: ILogErrorFindMany = parse_json(opts_json).map_err(err_js)?; 604 let exec = WasmSqlExecutor::new(); 605 let out = radroots_replica_db::log_error::find_many(&exec, &opts).map_err(|e| err_js(e.err))?; 606 value_to_js(out) 607 } 608 609 #[wasm_bindgen(js_name = replica_db_log_error_update)] 610 pub fn replica_db_log_error_update(opts_json: &str) -> Result<JsValue, JsValue> { 611 let opts: ILogErrorUpdate = parse_json(opts_json).map_err(err_js)?; 612 let exec = WasmSqlExecutor::new(); 613 let out = radroots_replica_db::log_error::update(&exec, &opts).map_err(|e| err_js(e.err))?; 614 value_to_js(out) 615 } 616 617 #[wasm_bindgen(js_name = replica_db_log_error_delete)] 618 pub fn replica_db_log_error_delete(opts_json: &str) -> Result<JsValue, JsValue> { 619 let opts: ILogErrorDelete = parse_json(opts_json).map_err(err_js)?; 620 let exec = WasmSqlExecutor::new(); 621 let out = radroots_replica_db::log_error::delete(&exec, &opts).map_err(|e| err_js(e.err))?; 622 value_to_js(out) 623 } 624 625 #[wasm_bindgen(js_name = replica_db_media_image_create)] 626 pub fn replica_db_media_image_create(opts_json: &str) -> Result<JsValue, JsValue> { 627 let opts: IMediaImageCreate = parse_json(opts_json).map_err(err_js)?; 628 let exec = WasmSqlExecutor::new(); 629 let out = radroots_replica_db::media_image::create(&exec, &opts).map_err(|e| err_js(e.err))?; 630 value_to_js(out) 631 } 632 633 #[wasm_bindgen(js_name = replica_db_media_image_find_one)] 634 pub fn replica_db_media_image_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 635 let opts: IMediaImageFindOne = parse_json(opts_json).map_err(err_js)?; 636 let exec = WasmSqlExecutor::new(); 637 let out = 638 radroots_replica_db::media_image::find_one(&exec, &opts).map_err(|e| err_js(e.err))?; 639 value_to_js(out) 640 } 641 642 #[wasm_bindgen(js_name = replica_db_media_image_find_many)] 643 pub fn replica_db_media_image_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 644 let opts: IMediaImageFindMany = parse_json(opts_json).map_err(err_js)?; 645 let exec = WasmSqlExecutor::new(); 646 let out = 647 radroots_replica_db::media_image::find_many(&exec, &opts).map_err(|e| err_js(e.err))?; 648 value_to_js(out) 649 } 650 651 #[wasm_bindgen(js_name = replica_db_media_image_update)] 652 pub fn replica_db_media_image_update(opts_json: &str) -> Result<JsValue, JsValue> { 653 let opts: IMediaImageUpdate = parse_json(opts_json).map_err(err_js)?; 654 let exec = WasmSqlExecutor::new(); 655 let out = radroots_replica_db::media_image::update(&exec, &opts).map_err(|e| err_js(e.err))?; 656 value_to_js(out) 657 } 658 659 #[wasm_bindgen(js_name = replica_db_media_image_delete)] 660 pub fn replica_db_media_image_delete(opts_json: &str) -> Result<JsValue, JsValue> { 661 let opts: IMediaImageDelete = parse_json(opts_json).map_err(err_js)?; 662 let exec = WasmSqlExecutor::new(); 663 let out = radroots_replica_db::media_image::delete(&exec, &opts).map_err(|e| err_js(e.err))?; 664 value_to_js(out) 665 } 666 667 #[wasm_bindgen(js_name = replica_db_nostr_profile_create)] 668 pub fn replica_db_nostr_profile_create(opts_json: &str) -> Result<JsValue, JsValue> { 669 let opts: INostrProfileCreate = parse_json(opts_json).map_err(err_js)?; 670 let exec = WasmSqlExecutor::new(); 671 let out = 672 radroots_replica_db::nostr_profile::create(&exec, &opts).map_err(|e| err_js(e.err))?; 673 value_to_js(out) 674 } 675 676 #[wasm_bindgen(js_name = replica_db_nostr_profile_find_one)] 677 pub fn replica_db_nostr_profile_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 678 let opts: INostrProfileFindOne = parse_json(opts_json).map_err(err_js)?; 679 let exec = WasmSqlExecutor::new(); 680 let out = 681 radroots_replica_db::nostr_profile::find_one(&exec, &opts).map_err(|e| err_js(e.err))?; 682 value_to_js(out) 683 } 684 685 #[wasm_bindgen(js_name = replica_db_nostr_profile_find_many)] 686 pub fn replica_db_nostr_profile_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 687 let opts: INostrProfileFindMany = parse_json(opts_json).map_err(err_js)?; 688 let exec = WasmSqlExecutor::new(); 689 let out = 690 radroots_replica_db::nostr_profile::find_many(&exec, &opts).map_err(|e| err_js(e.err))?; 691 value_to_js(out) 692 } 693 694 #[wasm_bindgen(js_name = replica_db_nostr_profile_update)] 695 pub fn replica_db_nostr_profile_update(opts_json: &str) -> Result<JsValue, JsValue> { 696 let opts: INostrProfileUpdate = parse_json(opts_json).map_err(err_js)?; 697 let exec = WasmSqlExecutor::new(); 698 let out = 699 radroots_replica_db::nostr_profile::update(&exec, &opts).map_err(|e| err_js(e.err))?; 700 value_to_js(out) 701 } 702 703 #[wasm_bindgen(js_name = replica_db_nostr_profile_delete)] 704 pub fn replica_db_nostr_profile_delete(opts_json: &str) -> Result<JsValue, JsValue> { 705 let opts: INostrProfileDelete = parse_json(opts_json).map_err(err_js)?; 706 let exec = WasmSqlExecutor::new(); 707 let out = 708 radroots_replica_db::nostr_profile::delete(&exec, &opts).map_err(|e| err_js(e.err))?; 709 value_to_js(out) 710 } 711 712 #[wasm_bindgen(js_name = replica_db_nostr_event_head_create)] 713 pub fn replica_db_nostr_event_head_create(opts_json: &str) -> Result<JsValue, JsValue> { 714 let opts: INostrEventHeadCreate = parse_json(opts_json).map_err(err_js)?; 715 let exec = WasmSqlExecutor::new(); 716 let out = 717 radroots_replica_db::nostr_event_head::create(&exec, &opts).map_err(|e| err_js(e.err))?; 718 value_to_js(out) 719 } 720 721 #[wasm_bindgen(js_name = replica_db_nostr_event_head_find_one)] 722 pub fn replica_db_nostr_event_head_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 723 let opts: INostrEventHeadFindOne = parse_json(opts_json).map_err(err_js)?; 724 let exec = WasmSqlExecutor::new(); 725 let out = 726 radroots_replica_db::nostr_event_head::find_one(&exec, &opts).map_err(|e| err_js(e.err))?; 727 value_to_js(out) 728 } 729 730 #[wasm_bindgen(js_name = replica_db_nostr_event_head_find_many)] 731 pub fn replica_db_nostr_event_head_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 732 let opts: INostrEventHeadFindMany = parse_json(opts_json).map_err(err_js)?; 733 let exec = WasmSqlExecutor::new(); 734 let out = radroots_replica_db::nostr_event_head::find_many(&exec, &opts) 735 .map_err(|e| err_js(e.err))?; 736 value_to_js(out) 737 } 738 739 #[wasm_bindgen(js_name = replica_db_nostr_event_head_update)] 740 pub fn replica_db_nostr_event_head_update(opts_json: &str) -> Result<JsValue, JsValue> { 741 let opts: INostrEventHeadUpdate = parse_json(opts_json).map_err(err_js)?; 742 let exec = WasmSqlExecutor::new(); 743 let out = 744 radroots_replica_db::nostr_event_head::update(&exec, &opts).map_err(|e| err_js(e.err))?; 745 value_to_js(out) 746 } 747 748 #[wasm_bindgen(js_name = replica_db_nostr_event_head_delete)] 749 pub fn replica_db_nostr_event_head_delete(opts_json: &str) -> Result<JsValue, JsValue> { 750 let opts: INostrEventHeadDelete = parse_json(opts_json).map_err(err_js)?; 751 let exec = WasmSqlExecutor::new(); 752 let out = 753 radroots_replica_db::nostr_event_head::delete(&exec, &opts).map_err(|e| err_js(e.err))?; 754 value_to_js(out) 755 } 756 757 #[wasm_bindgen(js_name = replica_db_nostr_relay_create)] 758 pub fn replica_db_nostr_relay_create(opts_json: &str) -> Result<JsValue, JsValue> { 759 let opts: INostrRelayCreate = parse_json(opts_json).map_err(err_js)?; 760 let exec = WasmSqlExecutor::new(); 761 let out = radroots_replica_db::nostr_relay::create(&exec, &opts).map_err(|e| err_js(e.err))?; 762 value_to_js(out) 763 } 764 765 #[wasm_bindgen(js_name = replica_db_nostr_relay_find_one)] 766 pub fn replica_db_nostr_relay_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 767 let opts: INostrRelayFindOne = parse_json(opts_json).map_err(err_js)?; 768 let exec = WasmSqlExecutor::new(); 769 let out = 770 radroots_replica_db::nostr_relay::find_one(&exec, &opts).map_err(|e| err_js(e.err))?; 771 value_to_js(out) 772 } 773 774 #[wasm_bindgen(js_name = replica_db_nostr_relay_find_many)] 775 pub fn replica_db_nostr_relay_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 776 let opts: INostrRelayFindMany = parse_json(opts_json).map_err(err_js)?; 777 let exec = WasmSqlExecutor::new(); 778 let out = 779 radroots_replica_db::nostr_relay::find_many(&exec, &opts).map_err(|e| err_js(e.err))?; 780 value_to_js(out) 781 } 782 783 #[wasm_bindgen(js_name = replica_db_nostr_relay_update)] 784 pub fn replica_db_nostr_relay_update(opts_json: &str) -> Result<JsValue, JsValue> { 785 let opts: INostrRelayUpdate = parse_json(opts_json).map_err(err_js)?; 786 let exec = WasmSqlExecutor::new(); 787 let out = radroots_replica_db::nostr_relay::update(&exec, &opts).map_err(|e| err_js(e.err))?; 788 value_to_js(out) 789 } 790 791 #[wasm_bindgen(js_name = replica_db_nostr_relay_delete)] 792 pub fn replica_db_nostr_relay_delete(opts_json: &str) -> Result<JsValue, JsValue> { 793 let opts: INostrRelayDelete = parse_json(opts_json).map_err(err_js)?; 794 let exec = WasmSqlExecutor::new(); 795 let out = radroots_replica_db::nostr_relay::delete(&exec, &opts).map_err(|e| err_js(e.err))?; 796 value_to_js(out) 797 } 798 799 #[wasm_bindgen(js_name = replica_db_trade_product_create)] 800 pub fn replica_db_trade_product_create(opts_json: &str) -> Result<JsValue, JsValue> { 801 let opts: ITradeProductCreate = parse_json(opts_json).map_err(err_js)?; 802 let exec = WasmSqlExecutor::new(); 803 let out = 804 radroots_replica_db::trade_product::create(&exec, &opts).map_err(|e| err_js(e.err))?; 805 value_to_js(out) 806 } 807 808 #[wasm_bindgen(js_name = replica_db_trade_product_find_one)] 809 pub fn replica_db_trade_product_find_one(opts_json: &str) -> Result<JsValue, JsValue> { 810 let opts: ITradeProductFindOne = parse_json(opts_json).map_err(err_js)?; 811 let exec = WasmSqlExecutor::new(); 812 let out = 813 radroots_replica_db::trade_product::find_one(&exec, &opts).map_err(|e| err_js(e.err))?; 814 value_to_js(out) 815 } 816 817 #[wasm_bindgen(js_name = replica_db_trade_product_find_many)] 818 pub fn replica_db_trade_product_find_many(opts_json: &str) -> Result<JsValue, JsValue> { 819 let opts: ITradeProductFindMany = parse_json(opts_json).map_err(err_js)?; 820 let exec = WasmSqlExecutor::new(); 821 let out = 822 radroots_replica_db::trade_product::find_many(&exec, &opts).map_err(|e| err_js(e.err))?; 823 value_to_js(out) 824 } 825 826 #[wasm_bindgen(js_name = replica_db_trade_product_update)] 827 pub fn replica_db_trade_product_update(opts_json: &str) -> Result<JsValue, JsValue> { 828 let opts: ITradeProductUpdate = parse_json(opts_json).map_err(err_js)?; 829 let exec = WasmSqlExecutor::new(); 830 let out = 831 radroots_replica_db::trade_product::update(&exec, &opts).map_err(|e| err_js(e.err))?; 832 value_to_js(out) 833 } 834 835 #[wasm_bindgen(js_name = replica_db_trade_product_delete)] 836 pub fn replica_db_trade_product_delete(opts_json: &str) -> Result<JsValue, JsValue> { 837 let opts: ITradeProductDelete = parse_json(opts_json).map_err(err_js)?; 838 let exec = WasmSqlExecutor::new(); 839 let out = 840 radroots_replica_db::trade_product::delete(&exec, &opts).map_err(|e| err_js(e.err))?; 841 value_to_js(out) 842 } 843 844 #[wasm_bindgen(js_name = replica_db_nostr_profile_relay_set)] 845 pub fn replica_db_nostr_profile_relay_set(opts_json: &str) -> Result<JsValue, JsValue> { 846 let opts: INostrProfileRelayRelation = parse_json(opts_json).map_err(err_js)?; 847 let exec = WasmSqlExecutor::new(); 848 let out = 849 radroots_replica_db::nostr_profile_relay::set(&exec, &opts).map_err(|e| err_js(e.err))?; 850 value_to_js(out) 851 } 852 853 #[wasm_bindgen(js_name = replica_db_nostr_profile_relay_unset)] 854 pub fn replica_db_nostr_profile_relay_unset(opts_json: &str) -> Result<JsValue, JsValue> { 855 let opts: INostrProfileRelayRelation = parse_json(opts_json).map_err(err_js)?; 856 let exec = WasmSqlExecutor::new(); 857 let out = 858 radroots_replica_db::nostr_profile_relay::unset(&exec, &opts).map_err(|e| err_js(e.err))?; 859 value_to_js(out) 860 } 861 862 #[wasm_bindgen(js_name = replica_db_trade_product_location_set)] 863 pub fn replica_db_trade_product_location_set(opts_json: &str) -> Result<JsValue, JsValue> { 864 let opts: ITradeProductLocationRelation = parse_json(opts_json).map_err(err_js)?; 865 let exec = WasmSqlExecutor::new(); 866 let out = radroots_replica_db::trade_product_location::set(&exec, &opts) 867 .map_err(|e| err_js(e.err))?; 868 value_to_js(out) 869 } 870 871 #[wasm_bindgen(js_name = replica_db_trade_product_location_unset)] 872 pub fn replica_db_trade_product_location_unset(opts_json: &str) -> Result<JsValue, JsValue> { 873 let opts: ITradeProductLocationRelation = parse_json(opts_json).map_err(err_js)?; 874 let exec = WasmSqlExecutor::new(); 875 let out = radroots_replica_db::trade_product_location::unset(&exec, &opts) 876 .map_err(|e| err_js(e.err))?; 877 value_to_js(out) 878 } 879 880 #[wasm_bindgen(js_name = replica_db_trade_product_media_set)] 881 pub fn replica_db_trade_product_media_set(opts_json: &str) -> Result<JsValue, JsValue> { 882 let opts: ITradeProductMediaRelation = parse_json(opts_json).map_err(err_js)?; 883 let exec = WasmSqlExecutor::new(); 884 let out = 885 radroots_replica_db::trade_product_media::set(&exec, &opts).map_err(|e| err_js(e.err))?; 886 value_to_js(out) 887 } 888 889 #[wasm_bindgen(js_name = replica_db_trade_product_media_unset)] 890 pub fn replica_db_trade_product_media_unset(opts_json: &str) -> Result<JsValue, JsValue> { 891 let opts: ITradeProductMediaRelation = parse_json(opts_json).map_err(err_js)?; 892 let exec = WasmSqlExecutor::new(); 893 let out = 894 radroots_replica_db::trade_product_media::unset(&exec, &opts).map_err(|e| err_js(e.err))?; 895 value_to_js(out) 896 }