1
- import { SharedObjectRef } from "@oligami/shared-object" ;
1
+ import { SharedObject , SharedObjectRef } from "@oligami/shared-object" ;
2
2
import type { Ctx } from "./ctx" ;
3
3
4
4
let ctx : Ctx ;
@@ -8,6 +8,8 @@ let waiter: {
8
8
is_cmd_run_end : ( ) => boolean ;
9
9
} ;
10
10
let terminal : ( string ) => void ;
11
+ let shared_downloader : SharedObject ;
12
+ let exec_ref : ( ...string ) => void ;
11
13
12
14
export const compile_and_run_setup = ( _ctx : Ctx ) => {
13
15
ctx = _ctx ;
@@ -16,7 +18,20 @@ export const compile_and_run_setup = (_ctx: Ctx) => {
16
18
is_all_done : ( ) => boolean ;
17
19
is_cmd_run_end : ( ) => boolean ;
18
20
} > ( ) ;
19
- }
21
+
22
+ shared_downloader = new SharedObject ( ( url : string , name : string ) => {
23
+ ( async ( ) => {
24
+ const a = document . createElement ( 'a' ) ;
25
+ a . href = url ;
26
+ a . download = name ; // ダウンロード時のファイル名を指定
27
+ document . body . appendChild ( a ) ; // DOM に追加
28
+ a . click ( ) ; // クリックしてダウンロードを開始
29
+ document . body . removeChild ( a ) ; // すぐに削除
30
+ } ) ( ) ;
31
+ } , ctx . download_by_url_id ) ;
32
+
33
+ exec_ref = new SharedObjectRef ( ctx . cmd_parser_id ) . proxy < ( ...string ) => void > ( ) ;
34
+ } ;
20
35
21
36
let can_setup = false ;
22
37
@@ -37,16 +52,32 @@ export const compile_and_run = async () => {
37
52
}
38
53
39
54
if ( can_setup ) {
40
- const exec = [ "rustc" , "/main.rs" , "--sysroot" , "/sysroot" , "--target" , "wasm32-wasip1" , "--out-dir" , "/tmp" , "-Ccodegen-units=1" ] ;
55
+ const exec = [
56
+ "rustc" ,
57
+ "/main.rs" ,
58
+ "--sysroot" ,
59
+ "/sysroot" ,
60
+ "--target" ,
61
+ "wasm32-wasip1" ,
62
+ "--out-dir" ,
63
+ "/tmp" ,
64
+ "-Ccodegen-units=1" ,
65
+ ] ;
41
66
await terminal ( `${ exec . join ( " " ) } \r\n` ) ;
42
67
await cmd_parser ( ...exec ) ;
43
- while ( ! await waiter . is_cmd_run_end ( ) ) {
68
+ while ( ! ( await waiter . is_cmd_run_end ( ) ) ) {
44
69
await new Promise ( ( resolve ) => setTimeout ( resolve , 100 ) ) ;
45
70
}
46
71
await terminal ( "/tmp/main.wasm\r\n" ) ;
47
72
await cmd_parser ( "/tmp/main.wasm" ) ;
48
- while ( ! await waiter . is_cmd_run_end ( ) ) {
73
+ while ( ! ( await waiter . is_cmd_run_end ( ) ) ) {
49
74
await new Promise ( ( resolve ) => setTimeout ( resolve , 100 ) ) ;
50
75
}
51
76
}
77
+ } ;
78
+
79
+ export const download = async ( file : string ) => {
80
+ console . log ( "download" ) ;
81
+ await terminal ( `download ${ file } \r\n` ) ;
82
+ exec_ref ( "download" , file ) ;
52
83
}
0 commit comments