Data-JPack
view release on metacpan or search on metacpan
lib/Data/JPack.pm view on Meta::CPAN
my @items=split /\s*,\s*/, $js;
my %pairs= map {s/^\s+//; s/\s+$//;$_ }
map {split ":", $_} @items;
for(keys %pairs){
if(/compression/){
$pairs{$_}=~/"(.*)"/;
$compression=$1;
}
}
my $decoded;
my $output="";
for($compression){
if(/deflate/){
$decoded=decode_base64($data);
rawinflate(\$decoded, \$output) or die $RawInflateError;
}
else {
$output=decode_base64($data);
}
}
$output;
}
sub jpack_decode {
share/js/02-chunkloader.js view on Meta::CPAN
*/
_decodeChunk(e){
switch(e.options.jpack_type){
case "app":
case "data":
case "boot":
//console.log("SENDING DATA");
//console.log(e.dataFunc());
return this.pool.queueFunction("decode",{options:e.options,string:e.dataFunc()},[])
.then((res)=>{
//res.result is the decoded chunk data to now send to channel manager
return Promise.resolve(res.result);
})
break;
default:
break;
}
}
/**
* Queues a request to download a chunk script. As chunks are large and the
* order is important, a limited number of chunks are downloaded at one time
*
* Returns a promise when the chunkscript has been downloaded, prased and
* decoded. The promise resolves to an arraybuffer of the decoded data
*
* PATHS ARE RELATIVE TO BUILD ROOT ie this.buildRoot
* This is to match the build output paths of the jpack files
*/
queueChunkScript(path){
//Add this to the queue
let promise;
let entry={path:path, dataFunc:undefined};
entry.promise=new Promise((resolve,reject)=>{
entry.resolver=resolve;
entry.rejecter=reject;
});
this.urlQueue.push(entry);
this.urlMap[path]=entry;
this._executeNext();
//This promise is resolved when the script is ready to be decoded
//ie when the dataFunc field has been assigned
return entry.promise
.then((e)=>{
//Queue the decoding into the worker pool
//console.log("ABOUT TO _decodeChunk");
return this._decodeChunk(e);
});
}
_executeNext(){
( run in 0.243 second using v1.01-cache-2.11-cpan-a9ef4e587e4 )