Skip to content

Commit 62c449c

Browse files
save file
1 parent 9d366fb commit 62c449c

1 file changed

Lines changed: 104 additions & 28 deletions

File tree

utils/misc/nodejs-terminal/v3.0/nodejs-terminal-v3.0.html

Lines changed: 104 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -686,31 +686,6 @@
686686
var blob = to_blob(snap);
687687

688688

689-
async function snapshot(path){
690-
691-
var snap = {};
692-
var entries = await webcontainer.fs.readdir(path,{withFileTypes:true});
693-
694-
for(var item of entries){
695-
696-
var abs = path+item.name;
697-
698-
if(item.isFile()){
699-
snap[abs] = await wc.fs.readFile(abs);
700-
}
701-
702-
if(item.isDirectory()){
703-
var snap2 = await snapshot(abs+'/')
704-
Object.assign(snap,snap2);
705-
}
706-
707-
}//for
708-
709-
return snap;
710-
711-
}//snapshot
712-
713-
714689
function to_blob(snap){
715690

716691
var obj = {};
@@ -782,6 +757,7 @@
782757
term.writeln.red('can only load snapshot relative to workdir');
783758
return;
784759
}
760+
785761
if(!cur.blob){
786762
term.writeln.red('no blob available');
787763
return;
@@ -797,13 +773,12 @@
797773

798774
var snap = to_snapshot(blob);
799775

800-
801776
for(var [file,data] of Object.entries(snap)){
802777

803778
var dir = file.split('/').slice(0,-1).join('/') || '/';
804779

805-
await wc.fs.mkdir(dir,{recursive:true});
806-
await wc.fs.writeFile(file,data);
780+
await webcontainer.fs.mkdir(dir,{recursive:true});
781+
await webcontainer.fs.writeFile(file,data);
807782

808783
}//for
809784

@@ -883,11 +858,41 @@
883858
return;
884859
}
885860

861+
if(!cur.blob){
862+
term.writeln.red('no blob available');
863+
return;
864+
}
865+
886866
var term = tabs.cur.view.terminal.term;
887867

888868
term.writeln('');
889869
term.writeln.green('saving zip ...');
890870

871+
var snap = await snapshot(cwd);
872+
var blob = await to_zip(snap);
873+
874+
var file = {name:'snapshot.zip',icon:snap_icon};
875+
876+
complete.load(file,blob);
877+
878+
term.writeln.green('ok.');
879+
await term.prompt();
880+
881+
882+
async function to_zip(snap){
883+
884+
var zip = new JSZip();
885+
886+
for(const [file,data] of Object.entries(snap)){
887+
888+
zip.file(file,data);
889+
890+
}//for
891+
892+
var blob = await zip.generateAsync({type:'blob',compression:'DEFLATE',compressionLevel:6});
893+
return blob;
894+
895+
}//to_zip
891896

892897
}//save-zip
893898

@@ -913,6 +918,34 @@
913918
term.writeln('');
914919
term.writeln.green('loading zip ...');
915920

921+
var blob = cur.blob;
922+
console.log(blob);
923+
var snap = to_snap(blob);
924+
snapshot.restore(snap);
925+
926+
term.writeln.green('ok.');
927+
await term.prompt();
928+
929+
930+
async function to_snap(blob){
931+
932+
var zip = await JSZip.loadAsync(blob);
933+
var snap = {};
934+
var entries = Object.values(zip.files);
935+
936+
for(var entry of entries){
937+
938+
if(entry.dir)continue;
939+
940+
var data = await entry.async('uint8array');
941+
var path = entry.name.startsWith('/') ? entry.name : '/'+entry.name;
942+
snap[path] = data;
943+
944+
}//for
945+
946+
return snap;
947+
948+
}//to_snap
916949

917950
}//load-zip
918951

@@ -1042,6 +1075,49 @@
10421075
}//save
10431076

10441077

1078+
//:
1079+
1080+
1081+
async function snapshot(path){
1082+
console.log('snapshot',path);
1083+
var snap = {};
1084+
var entries = await webcontainer.fs.readdir(path,{withFileTypes:true});
1085+
1086+
for(var item of entries){
1087+
1088+
var abs = path+item.name;
1089+
1090+
if(item.isFile()){
1091+
console.log(abs);
1092+
snap[abs] = await wc.fs.readFile(abs);
1093+
}
1094+
1095+
if(item.isDirectory()){
1096+
var snap2 = await snapshot(abs+'/')
1097+
Object.assign(snap,snap2);
1098+
}
1099+
1100+
}//for
1101+
1102+
return snap;
1103+
1104+
}//snapshot
1105+
1106+
1107+
snapshot.restore = async function(snap){
1108+
1109+
for(var [file,data] of Object.entries(snap)){
1110+
1111+
var dir = file.split('/').slice(0,-1).join('/') || '/';
1112+
1113+
await webcontainer.fs.mkdir(dir,{recursive:true});
1114+
await webcontainer.fs.writeFile(file,data);
1115+
1116+
}//for
1117+
1118+
}//restore
1119+
1120+
10451121
//:
10461122

10471123

0 commit comments

Comments
 (0)