Skip to content

Commit 890008c

Browse files
save file
1 parent fb61a28 commit 890008c

File tree

1 file changed

+140
-54
lines changed

1 file changed

+140
-54
lines changed

utils/misc/global-state-diff/v2.0/global-state-diff-v2.0.html

Lines changed: 140 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@
123123
#output, #output2
124124
{font-family:monospace;font-size:16px}
125125
#item, #item2
126-
{margin:20px 0;border:1px solid lightgray;padding:10px;overflow:auto}
126+
{margin:20px 0;border:1px solid lightgray;padding:10px;overflow:auto;display:flex;flex-direction:column;gap:10px}
127127
#src
128128
{}
129129
#values
@@ -293,7 +293,7 @@ <h3>
293293
var beforeKeys = new Set(Object.keys(win));
294294

295295

296-
var script = document.createElement('script');
296+
var script = doc.createElement('script');
297297
script.src = src;
298298
doc.head.appendChild(script);
299299

@@ -341,94 +341,180 @@ <h3>
341341

342342
clone();
343343

344-
var s = win[key].toString();
345-
var s1 = s.slice(0,80);
346-
if(s.length>s1.length){
347-
s1 += ` ... ( ${s.length} )`;
348-
}
344+
var s1 = toString(win[key]);
345+
var str = `window.${key} [ ${typeof win[key]} ] : ${s1}`+'\n';
349346

350-
var str = `window.${key} [ ${typeof win[key]} ] : ${s1}`+'\n';
351347
nvalues.textContent = str;
352348
console.log(`window.${key} =`,win[key]);
353-
354349
});
355350

356-
//$('#values').textContent = str;
357-
358-
359-
360351
console.log('New globals :', added);
361-
362-
363352
}//onload
364353

365354
}//onload
366355

367-
}//process
356+
}//script
368357

369358

370359

371360

372-
process.importx = async function(src){
361+
process.import = async function(src){
373362

374-
var mod = await import(src);
375-
//console.log(inspect(mod));
376-
377-
var str = '';
378-
for(var key in mod){
363+
var nitem = item2.cloneNode(true);
364+
var $ = nitem.querySelector.bind(nitem);
365+
$('#url').textContent = src;
366+
var values = $('#values');
367+
var nvalues;
368+
var clone = ()=>(nvalues=values.cloneNode(true),nitem.append(nvalues));
369+
output2.append(nitem);
370+
371+
372+
var {win,doc} = await niframe();
373+
374+
var output = str=>(clone(),nvalues.textContent=str);
375+
var js = fnstr(fn);
376+
console.log(js);
377+
win.eval(js);
378+
win.fn(src,output,datatype,tostring);
379379

380380

381-
var s1 = '[ null ]';
381+
async function fn(src,output,datatype,tostring){
382+
383+
var mod = await import(src);
384+
//console.log(inspect(mod));
385+
386+
var str = '';
387+
for(var key in mod){
382388

383-
if(!mod[key]){
384-
str += key+` [ ${typeof mod[key]} ] : ${s1}`+'\n';
385-
}else{
386-
if(datatype(mod[key])=='object'){
387-
s1 = tostring(mod[key]);
389+
var s1 = '[ null ]';
390+
var type = datatype(mod[key]);
391+
392+
if(!mod[key]){
388393
str += key+` [ ${typeof mod[key]} ] : ${s1}`+'\n';
389-
for(var prop in mod[key]){
390-
391-
var s2 = tostring(mod[key][prop]);
392-
str += ' '+prop+` [ ${typeof mod[key][prop]} ] : ${s2}`+'\n';
393-
394-
}//for
395394
}else{
396-
s1 = tostring(mod[key]);
397-
str += key+` [ ${typeof mod[key]} ] : ${s1}`+'\n';
395+
if(datatype(mod[key])=='object'){
396+
s1 = tostring(mod[key]);
397+
str += key+` [ ${typeof mod[key]} ] : ${s1}`+'\n';
398+
for(var prop in mod[key]){
399+
400+
var s2 = tostring(mod[key][prop]);
401+
str += ' '+prop+` [ ${typeof mod[key][prop]} ] : ${s2}`+'\n';
402+
403+
}//for
404+
}else{
405+
s1 = tostring(mod[key]);
406+
str += key+` [ ${typeof mod[key]} ] : ${s1}`+'\n';
407+
}
398408
}
399-
}
409+
410+
}//for
400411

401-
}//for
402-
412+
output(str);
413+
414+
}//fn
403415

404-
var nitem = item2.cloneNode(true);
416+
}//import
417+
418+
419+
//:
420+
421+
422+
function niframe(){
423+
424+
var resolve,promise=new Promise(res=>resolve=res);
405425

406-
var $ = nitem.querySelector.bind(nitem);
407-
$('#url').textContent = src;
408-
$('#values').textContent = str;
426+
var iframe = document.createElement('iframe');
427+
iframe.style.cssText = 'display:none';
428+
iframe.onload = onload;
429+
document.body.append(iframe);
409430

410-
output2.append(nitem);
431+
return promise;
411432

412433

413-
function tostring(v){
434+
function onload(){
414435

415-
var s = v.toString();
416-
var s1 = s.slice(0,80);
417-
if(s.length>s1.length){
418-
s1 += ` ... ( ${s.length} )`;
419-
}
420-
return s1;
436+
var win = iframe.contentWindow;
437+
var doc = iframe.contentDocument;
438+
resolve({win,doc,iframe});
421439

422-
}//tostring
440+
}//onload
441+
442+
}//niframe
443+
444+
445+
function datatype(v,short=true){
446+
447+
var str = Object.prototype.toString.call(v);
448+
449+
if(short){
450+
str = str.slice(8,-1);
451+
str = str.toLowerCase();
452+
}
453+
454+
return str;
423455

424-
}//process
456+
}//datatype
425457

426458

459+
function tostring(v){
460+
461+
var s = v.toString();
462+
var s1 = s.slice(0,80);
463+
if(s.length>s1.length){
464+
s1 += ` ... ( ${s.length} )`;
465+
}
466+
return s1;
467+
468+
}//tostring
469+
470+
471+
function fnstr(fn,full=true){
472+
473+
var str = fn.toString();
474+
if(full){
475+
return str;
476+
}
477+
var i1 = str.indexOf('{');
478+
var i2 = str.lastIndexOf('}');
479+
var fnstr = str.slice(i1+1,i2);
480+
return fnstr;
481+
482+
}//fnstr
483+
484+
485+
async function get(url){
486+
487+
var err;
488+
try{
489+
490+
var res = await fetch(url);
491+
492+
}//try
493+
catch(err2){
494+
495+
err = err2;
496+
497+
}//catch
498+
if(err){
499+
var error = err.toString();
500+
return {error};
501+
}
502+
503+
var txt = await res.text();
504+
if(!res.ok){
505+
var error = `[ ( ${res.status} ) ${res.statusText} ] ${txt}`;
506+
return {error};
507+
}
508+
509+
return {txt};
510+
511+
}//get
512+
427513

428514

429515

430516

431-
(async()=>{
517+
!(async()=>{
432518

433519
var {init,parse} = await import('https://unpkg.com/es-module-lexer?module');
434520

0 commit comments

Comments
 (0)