|
674 | 674 | term.writeln(''); |
675 | 675 | term.writeln.green('saving snapshot ...'); |
676 | 676 |
|
| 677 | + var snap = snapshot(cwd); |
| 678 | + var blob = to_blob(snap); |
| 679 | + |
| 680 | + |
| 681 | + async function snapshot(path){ |
| 682 | + |
| 683 | + var snap = {}; |
| 684 | + var entries = await webcontainer.fs.readdir(path,{withFileTypes:true}); |
| 685 | + |
| 686 | + for(var item of entries){ |
| 687 | + |
| 688 | + var abs = path+item.name; |
| 689 | + |
| 690 | + if(item.isFile()){ |
| 691 | + snap[abs] = await wc.fs.readFile(abs); |
| 692 | + } |
| 693 | + |
| 694 | + if(item.isDirectory()){ |
| 695 | + var snap2 = await snapshot(abs+'/') |
| 696 | + Object.assign(snap,snap2); |
| 697 | + } |
| 698 | + |
| 699 | + }//for |
| 700 | + |
| 701 | + return snap; |
| 702 | + |
| 703 | + }//snapshot |
| 704 | + |
| 705 | + |
| 706 | + function to_blob(snap){ |
| 707 | + |
| 708 | + var obj = {}; |
| 709 | + |
| 710 | + for(var [file,data] of Object.entries(snap)){ |
| 711 | + |
| 712 | + obj[file] = Array.from(data); |
| 713 | + |
| 714 | + }//for |
| 715 | + |
| 716 | + var json = JSON.stringify(obj); |
| 717 | + var blob = new Blob([json],{type:'application/json'}); |
| 718 | + return blob; |
| 719 | + |
| 720 | + }//to_blob |
| 721 | + |
| 722 | + |
| 723 | + |
| 724 | + |
| 725 | + |
| 726 | +/* |
| 727 | +
|
| 728 | +
|
677 | 729 | var err; |
678 | 730 | try{ |
679 | 731 | |
|
693 | 745 | } |
694 | 746 | console.log(str); |
695 | 747 | var blob = new Blob([str]); |
| 748 | + |
| 749 | + |
| 750 | + |
| 751 | +*/ |
| 752 | + |
| 753 | + |
696 | 754 | var file = {name:'snapshot.json',icon:snap_icon}; |
697 | 755 |
|
698 | 756 | complete.load(file,blob); |
|
728 | 786 |
|
729 | 787 | var blob = cur.blob; |
730 | 788 | console.log(blob); |
| 789 | + |
| 790 | + var snap = to_snapshot(blob); |
| 791 | + |
| 792 | + |
| 793 | + for(var [file,data] of Object.entries(snap)){ |
| 794 | + |
| 795 | + var dir = file.split('/').slice(0,-1).join('/') || '/'; |
| 796 | + |
| 797 | + await wc.fs.mkdir(dir,{recursive:true}); |
| 798 | + await wc.fs.writeFile(file,data); |
| 799 | + |
| 800 | + }//for |
| 801 | + |
| 802 | + |
| 803 | + async function to_snapshot(blob) { |
| 804 | + |
| 805 | + var text = await blob.text(); |
| 806 | + var obj = JSON.parse(text); |
| 807 | + var snap = {}; |
| 808 | + |
| 809 | + for(var [file,arr] of Object.entries(obj)){ |
| 810 | + |
| 811 | + snap[file] = new Uint8Array(arr); |
| 812 | + |
| 813 | + }//for |
| 814 | + |
| 815 | + return snap; |
| 816 | + |
| 817 | + }//to_snapshot |
| 818 | + |
| 819 | + |
| 820 | + |
| 821 | + |
| 822 | + |
| 823 | +/* |
| 824 | +
|
731 | 825 | var txt = await blob.text(); |
732 | 826 | console.log(txt); |
733 | 827 | var data = JSON.parse(txt); |
|
752 | 846 | return; |
753 | 847 | } |
754 | 848 | |
| 849 | +*/ |
| 850 | + |
| 851 | + |
| 852 | + |
| 853 | + |
| 854 | + |
| 855 | + |
755 | 856 | term.writeln.green('ok.'); |
756 | 857 | await term.prompt(); |
757 | 858 |
|
|
0 commit comments