char/avril
(wip) why'd you have to go and make things so complicaaaaated?
git clone https://git.t4t.associates/char/avril
9712108
main
1use avril_core::{ Error , Extension , ModuleLoader , ModuleSource , Runtime , RuntimeOptions }; 2use std:: rc:: Rc ; 3 4struct Loader ; 5impl ModuleLoader for Loader { 6fn resolve ( & self , specifier : & str , referrer : & str ) ->Result < String , Error > { 7Ok ( if specifier =="private-alias" { 8"ext:core/ops" . into () 9} else { 10format! ( "{referrer}/{specifier}" ) 11}) 12} 13fn module_url ( & self , name : & str ) ->Option < String > { 14Some ( format! ( "test:{name}" )) 15} 16fn load ( & self , name : & str ) ->Result < ModuleSource , Error > { 17assert_eq! ( name, "entry" ); 18Ok ( r#" 19globalThis.resolved = import.meta.resolve('missing'); 20try {import.meta.resolve('private-alias'); throw Error('Exposed extension');} 21catch (error) {if (!(error instanceof TypeError)) throw error;} 22if ('filename' in import.meta || 'dirname' in import.meta) throw Error('Non-file paths'); 23"# . into ()) 24} 25} 26 27# [ test ] 28fn embedding_resolvers_use_the_loader_without_loading_the_target () { 29let mut runtime =Runtime :: new ( RuntimeOptions { 30module_loader : Some ( Rc :: new ( Loader )), 31 ..Default :: default () 32}) 33. unwrap (); 34 runtime. execute_module ( "entry" ). unwrap (); 35assert_eq! ( 36 runtime 37. execute_script ::< String >( "check" , "resolved" ) 38. unwrap (), 39"test:entry/missing" 40); 41} 42 43# [ test ] 44fn extension_metadata_resolves_embedded_specifiers_without_a_guest_loader () { 45let mut runtime =Runtime :: new ( RuntimeOptions { 46extensions : vec! [ Extension { dependencies : & [], name : "ext:metadata" , ops : vec! [], modules : & [( "ext:metadata/main.js" , r#" 47globalThis.resolved = [import.meta.resolve('./sub/../missing.js'),import.meta.resolve('ext:core/ops')]; 48if ('filename' in import.meta || 'dirname' in import.meta) throw Error('Extension paths'); 49"# )], entry_point : Some ( "ext:metadata/main.js" )}], ..Default :: default () 50}). unwrap (); 51assert_eq! ( 52 runtime 53. execute_script ::< Vec < String >>( "check" , "resolved" ) 54. unwrap (), 55[ "ext:metadata/missing.js" , "ext:core/ops" ] 56); 57}