(
&self,
name: String,
source: &str,
imports: Option<Object>,
)
| 251 | |
| 252 | #[wasm_bindgen(js_name = injectModule)] |
| 253 | pub fn inject_module( |
| 254 | &self, |
| 255 | name: String, |
| 256 | source: &str, |
| 257 | imports: Option<Object>, |
| 258 | ) -> Result<(), JsValue> { |
| 259 | self.with_vm(|vm, _| { |
| 260 | let code = vm |
| 261 | .compile(source, Mode::Exec, name.clone()) |
| 262 | .map_err(convert::syntax_err)?; |
| 263 | let attrs = vm.ctx.new_dict(); |
| 264 | attrs |
| 265 | .set_item("__name__", vm.new_pyobj(name.as_str()), vm) |
| 266 | .into_js(vm)?; |
| 267 | |
| 268 | if let Some(imports) = imports { |
| 269 | for entry in convert::object_entries(&imports) { |
| 270 | let (key, value) = entry?; |
| 271 | let key: String = Object::from(key).to_string().into(); |
| 272 | attrs |
| 273 | .set_item(key.as_str(), convert::js_to_py(vm, value), vm) |
| 274 | .into_js(vm)?; |
| 275 | } |
| 276 | } |
| 277 | |
| 278 | vm.run_code_obj( |
| 279 | code, |
| 280 | Scope::new( |
| 281 | Some(ArgMapping::from_dict_exact(attrs.clone())), |
| 282 | attrs.clone(), |
| 283 | ), |
| 284 | ) |
| 285 | .into_js(vm)?; |
| 286 | |
| 287 | let module = vm.new_module(&name, attrs, None); |
| 288 | |
| 289 | let sys_modules = vm.sys_module.get_attr("modules", vm).into_js(vm)?; |
| 290 | sys_modules.set_item(&name, module.into(), vm).into_js(vm)?; |
| 291 | |
| 292 | Ok(()) |
| 293 | })? |
| 294 | } |
| 295 | |
| 296 | #[wasm_bindgen(js_name = injectJSModule)] |
| 297 | pub fn inject_js_module(&self, name: String, module: Object) -> Result<(), JsValue> { |
nothing calls this directly
no test coverage detected