1+
2+
3+
4+ < div id =root >
5+
6+
7+ < script src ='https://ajaxorg.github.io/ace-builds/src-noconflict/ace.js '> </ script >
8+
9+
10+ < script src ='https://libs.ext-code.com/js/dom/component/component.js '> </ script >
11+
12+ < script src ='https://libs.ext-code.com/js/dom/init-hdr/init-hdr.js '> </ script >
13+
14+ < style >
15+
16+ html {height : 700px }
17+ body {height : calc (100% - 40px );margin : 20px }
18+ # root {display : flex;flex-direction : column;gap : 20px ;height : 100% }
19+
20+
21+ </ style >
22+
23+
24+
25+ < div id =server-root >
26+
27+ < div class =filename >
28+ server.js
29+ </ div >
30+
31+ < snippet-terminal-console id =server type =nodejs component v2.0 src ='ex/server.js '>
32+ </ snippet-terminal-console >
33+
34+ </ div >
35+
36+
37+ < div id =file >
38+
39+ < div class =filename >
40+ index.html
41+ </ div >
42+
43+ < editor id =test component v2.0 src ='ex/test.js '>
44+ </ editor >
45+
46+ < div id =btns >
47+ < input value =run type =button >
48+ </ div >
49+
50+ < console component v2.0 h =150 > /console>
51+
52+ </ div >
53+
54+ < iframe > </ iframe >
55+
56+ < log component v2.0 > </ log >
57+
58+
59+ < script >
60+
61+
62+ var srcdoc ;
63+
64+ var server ;
65+ var test ;
66+ var con ;
67+ var log ;
68+
69+
70+ window . start = async function ( ) {
71+
72+ [ srcdoc ] = await ext . text . github ( 'javascript-2020:javascript-2020.github.io:main:blog/25-07-25/http-streaming-download/ex/srcdoc.html' ) ;
73+
74+ server = mod . server ;
75+ test = mod . test ;
76+ con = mod . console ;
77+ log = mod . log ;
78+
79+ server . on = on ;
80+ server . btn . run = run ;
81+
82+ } //start
83+
84+
85+
86+ //:
87+
88+
89+ function run ( ) {
90+
91+ var s = instrument . toString ( ) ;
92+ var i1 = s . indexOf ( '{' ) ;
93+ var i2 = s . lastIndexOf ( '}' ) ;
94+ var pre = s . slice ( i1 + 1 , i2 ) ;
95+ //console.clear();
96+ //console.log(pre);
97+ var js = server . editor . getvalue ( ) ;
98+
99+ js = pre + js ;
100+
101+ server . run . nodejs ( { js} ) ;
102+
103+
104+ } //run
105+
106+
107+ on . init = async function ( { webcontainer :wc } ) {
108+
109+ webcontainer = wc ;
110+ console . log ( 'init' , webcontainer ) ;
111+ //console.log(srcdoc);
112+ var files = { 'setup.html' :{ file :{ contents :srcdoc } } } ;
113+ await webcontainer . mount ( files ) ;
114+
115+ console . log ( 'init complete' ) ;
116+
117+ } //init
118+
119+ on . run = function ( { process} ) {
120+
121+ console . log ( 'on.run' , process ) ;
122+
123+ } //on.run
124+
125+
126+ on [ 'server-ready' ] = function ( { port, url :url2 } ) {
127+ console . log ( 'server-ready' , port , url2 ) ;
128+ url = url2 ;
129+
130+ iframe . src = `${ url } /setup.html` ;
131+
132+ } //server-ready
133+
134+
135+ on . complete = function ( { code} ) {
136+
137+ console . log ( 'complete' , code ) ;
138+
139+ } //complete
140+
141+
142+ //:
143+
144+
145+ function instrument ( ) {
146+
147+ ( ( ) => {
148+
149+ var fs = require ( 'fs' ) ;
150+ var http = require ( 'http' ) ;
151+ //var server = http.createServer(request)
152+ var list = [ ] ;
153+
154+ var createServer = http . createServer ;
155+ var on = server . on ;
156+
157+ server . on = function ( event , listener ) {
158+
159+ if ( event === 'request' ) {
160+ list . push ( args [ 1 ] ) ;
161+ return ;
162+ }
163+ return on . apply ( server , arguments ) ;
164+
165+ } //on
166+
167+
168+ http . createServer = function ( opts , listener ) {
169+ console . log ( 'override' ) ;
170+ if ( arguments . length == 1 ) {
171+ listener = opts ;
172+ opts = undefined ;
173+ }
174+
175+ if ( listener ) {
176+ list . push ( listener ) ;
177+ }
178+
179+ var server = createServer . call ( server , opts , request ) ;
180+ return server ;
181+
182+ } //createServer
183+
184+
185+ function request ( req , res ) {
186+ console . log ( 'sandbox' , req . url ) ;
187+ if ( req . url == '/setup' ) {
188+ var html = fs . readFileSync ( 'setup' , 'utf8' ) ;
189+ res . writeHead ( 200 , { 'content-type' :'text/html' } ) ;
190+ res . end ( html ) ;
191+ return ;
192+ }
193+
194+ var n = list . length ;
195+ for ( var i = 0 ; i < n ; i ++ ) {
196+
197+ var fn = list [ i ] ;
198+ var result = fn ( req , res ) ;
199+ if ( result === false ) {
200+ return ;
201+ }
202+
203+ } //for
204+
205+ } //request
206+
207+ } ) ( ) ;
208+
209+ } //instrument
210+
211+
212+
213+ </ script >
214+
215+ </ div root>
0 commit comments