From 9d5ad83ff826f2919fa39ee9c8c8cfd2d5d3c97a Mon Sep 17 00:00:00 2001 From: Surma Date: Mon, 30 Jul 2018 15:49:38 +0100 Subject: [PATCH] Transpile libimagequant --- codecs/imagequant/README.md | 38 + codecs/imagequant/example.html | 49 ++ codecs/imagequant/imagequant.c | 67 ++ codecs/imagequant/imagequant.d.ts | 1 + codecs/imagequant/imagequant.js | 17 + codecs/imagequant/imagequant.wasm | Bin 0 -> 58762 bytes codecs/imagequant/package-lock.json | 1147 +++++++++++++++++++++++++++ codecs/imagequant/package.json | 14 + 8 files changed, 1333 insertions(+) create mode 100644 codecs/imagequant/README.md create mode 100644 codecs/imagequant/example.html create mode 100644 codecs/imagequant/imagequant.c create mode 100644 codecs/imagequant/imagequant.d.ts create mode 100644 codecs/imagequant/imagequant.js create mode 100644 codecs/imagequant/imagequant.wasm create mode 100644 codecs/imagequant/package-lock.json create mode 100644 codecs/imagequant/package.json diff --git a/codecs/imagequant/README.md b/codecs/imagequant/README.md new file mode 100644 index 00000000..1ef857ad --- /dev/null +++ b/codecs/imagequant/README.md @@ -0,0 +1,38 @@ +# ImageQuant + +- Source: +- Version: v2.12.1 + +## Dependencies + +- Docker + +## Example + +See `example.html` + +## API + +### `int version()` + +Returns the version of libimagequant as a number. va.b.c is encoded as 0x0a0b0c + +### `uint8_t* create_buffer(int width, int height)` + +Allocates an RGBA buffer for an image with the given dimension. + +### `void destroy_buffer(uint8_t* p)` + +Frees a buffer created with `create_buffer`. + +### `void quantize(uint8_t* image_buffer, int image_width, int image_height, int numColors, float dithering)` + +Quantizes the given images, using at most `numColors`, a value between 2 and 256. `dithering` is a value between 0 and 1 controlling the amount of dithering. + +### `void free_result()` + +Frees the result created by `encode()`. + +### `int get_result_pointer()` + +Returns the pointer to the start of the buffer holding the encoded data. It has the same size as the input image buffer. diff --git a/codecs/imagequant/example.html b/codecs/imagequant/example.html new file mode 100644 index 00000000..2a0f8ded --- /dev/null +++ b/codecs/imagequant/example.html @@ -0,0 +1,49 @@ + + + diff --git a/codecs/imagequant/imagequant.c b/codecs/imagequant/imagequant.c new file mode 100644 index 00000000..9572b720 --- /dev/null +++ b/codecs/imagequant/imagequant.c @@ -0,0 +1,67 @@ +#include "emscripten.h" +#include +#include + +#include "libimagequant.h" + +EMSCRIPTEN_KEEPALIVE +int version() { + return (((LIQ_VERSION/10000) % 100) << 16) | + (((LIQ_VERSION/100 ) % 100) << 8) | + (((LIQ_VERSION/1 ) % 100) << 0); +} + +EMSCRIPTEN_KEEPALIVE +uint8_t* create_buffer(int width, int height) { + return malloc(width * height * 4 * sizeof(uint8_t)); +} + +EMSCRIPTEN_KEEPALIVE +void destroy_buffer(uint8_t* p) { + free(p); +} + +liq_attr *attr; +liq_image *image; +liq_result *res; +int result[2]; +EMSCRIPTEN_KEEPALIVE +void quantize(uint8_t* image_buffer, int image_width, int image_height, int num_colors, float dithering) { + int size = image_width * image_height; + attr = liq_attr_create(); + image = liq_image_create_rgba(attr, image_buffer, image_width, image_height, 0); + liq_set_max_colors(attr, 16); + liq_image_quantize(image, attr, &res); + liq_set_dithering_level(res, dithering); + uint8_t* image8bit = (uint8_t*) malloc(size); + result[0] = (int) malloc(size * 4); + liq_write_remapped_image(res, image, image8bit, size); + const liq_palette *pal = liq_get_palette(res); + // Turn palletted image back into an RGBA image + for(int i = 0; i < size; i++) { + ((uint8_t*)result[0])[i * 4 + 0] = pal->entries[image8bit[i]].r; + ((uint8_t*)result[0])[i * 4 + 1] = pal->entries[image8bit[i]].g; + ((uint8_t*)result[0])[i * 4 + 2] = pal->entries[image8bit[i]].b; + ((uint8_t*)result[0])[i * 4 + 3] = pal->entries[image8bit[i]].a; + } + free(image8bit); + liq_result_destroy(res); + liq_image_destroy(image); + liq_attr_destroy(attr); +} + +EMSCRIPTEN_KEEPALIVE +void free_result() { + free(result[0]); +} + +EMSCRIPTEN_KEEPALIVE +int get_result_pointer() { + return result[0]; +} + +EMSCRIPTEN_KEEPALIVE +int get_result_palette_pointer() { + return result[1]; +} + diff --git a/codecs/imagequant/imagequant.d.ts b/codecs/imagequant/imagequant.d.ts new file mode 100644 index 00000000..9f2e9ca1 --- /dev/null +++ b/codecs/imagequant/imagequant.d.ts @@ -0,0 +1 @@ +export default function(opts: EmscriptenWasm.ModuleOpts): EmscriptenWasm.Module; diff --git a/codecs/imagequant/imagequant.js b/codecs/imagequant/imagequant.js new file mode 100644 index 00000000..3264a28b --- /dev/null +++ b/codecs/imagequant/imagequant.js @@ -0,0 +1,17 @@ +var imagequant = function(imagequant) { + imagequant = imagequant || {}; + +var Module=typeof imagequant!=="undefined"?imagequant:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){process["exit"](1)}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}var functionPointers=new Array(0);var GLOBAL_BASE=1024;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"arrayToC":(function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}if(!Module["reallocBuffer"])Module["reallocBuffer"]=(function(size){var ret;try{if(ArrayBuffer.transfer){ret=ArrayBuffer.transfer(buffer,size)}else{var oldHEAP8=HEAP8;ret=new ArrayBuffer(size);var temp=new Int8Array(ret);temp.set(oldHEAP8)}}catch(e){return false}var success=_emscripten_replace_memory(ret);if(!success)return false;return ret});function enlargeMemory(){var PAGE_MULTIPLE=Module["usingWasm"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=Module["reallocBuffer"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_max=Math.max;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}function integrateWasmJS(){var wasmTextFile="imagequant.wast";var wasmBinaryFile="imagequant.wasm";var asmjsCodeFile="imagequant.temp.asm.js";if(typeof Module["locateFile"]==="function"){if(!isDataURI(wasmTextFile)){wasmTextFile=Module["locateFile"](wasmTextFile)}if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=Module["locateFile"](wasmBinaryFile)}if(!isDataURI(asmjsCodeFile)){asmjsCodeFile=Module["locateFile"](asmjsCodeFile)}}var wasmPageSize=64*1024;var info={"global":null,"env":null,"asm2wasm":{"f64-rem":(function(x,y){return x%y}),"debugger":(function(){debugger})},"parent":Module};var exports=null;function mergeMemory(newBuffer){var oldBuffer=Module["buffer"];if(newBuffer.byteLength>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___syscall146.printChar=(function(stream,curr){var buffer=___syscall146.buffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?Module["print"]:Module["printErr"])(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}})}for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;Module["wasmTableSize"]=22;Module["wasmMaxTableSize"]=22;Module.asmGlobalArg={};Module.asmLibraryArg={"abort":abort,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"___assert_fail":___assert_fail,"___setErrNo":___setErrNo,"___syscall140":___syscall140,"___syscall146":___syscall146,"___syscall6":___syscall6,"_abort":_abort,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_llvm_stackrestore":_llvm_stackrestore,"_llvm_stacksave":_llvm_stacksave,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"STACKTOP":STACKTOP};var asm=Module["asm"](Module.asmGlobalArg,Module.asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=(function(){return Module["asm"]["___errno_location"].apply(null,arguments)});var _create_buffer=Module["_create_buffer"]=(function(){return Module["asm"]["_create_buffer"].apply(null,arguments)});var _destroy_buffer=Module["_destroy_buffer"]=(function(){return Module["asm"]["_destroy_buffer"].apply(null,arguments)});var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=(function(){return Module["asm"]["_emscripten_replace_memory"].apply(null,arguments)});var _free_result=Module["_free_result"]=(function(){return Module["asm"]["_free_result"].apply(null,arguments)});var _get_result_palette_pointer=Module["_get_result_palette_pointer"]=(function(){return Module["asm"]["_get_result_palette_pointer"].apply(null,arguments)});var _get_result_pointer=Module["_get_result_pointer"]=(function(){return Module["asm"]["_get_result_pointer"].apply(null,arguments)});var _quantize=Module["_quantize"]=(function(){return Module["asm"]["_quantize"].apply(null,arguments)});var _version=Module["_version"]=(function(){return Module["asm"]["_version"].apply(null,arguments)});var stackAlloc=Module["stackAlloc"]=(function(){return Module["asm"]["stackAlloc"].apply(null,arguments)});var stackRestore=Module["stackRestore"]=(function(){return Module["asm"]["stackRestore"].apply(null,arguments)});var stackSave=Module["stackSave"]=(function(){return Module["asm"]["stackSave"].apply(null,arguments)});var dynCall_vi=Module["dynCall_vi"]=(function(){return Module["asm"]["dynCall_vi"].apply(null,arguments)});Module["asm"]=asm;Module["cwrap"]=cwrap;Module["then"]=(function(func){if(Module["calledRun"]){func(Module)}else{var old=Module["onRuntimeInitialized"];Module["onRuntimeInitialized"]=(function(){if(old)old();func(Module)})}return Module});function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=exit;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + + + return imagequant; +}; +if (typeof exports === 'object' && typeof module === 'object') + module.exports = imagequant; +else if (typeof define === 'function' && define['amd']) + define([], function() { return imagequant; }); +else if (typeof exports === 'object') + exports["imagequant"] = imagequant; diff --git a/codecs/imagequant/imagequant.wasm b/codecs/imagequant/imagequant.wasm new file mode 100644 index 0000000000000000000000000000000000000000..1ecaa84a7bdd348fcd9dcc4286bb1e0aefdb46e8 GIT binary patch literal 58762 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 ZTR#7}3!lGu=?iasvAKHf`r3`9{{Tej4MP9` literal 0 HcmV?d00001 diff --git a/codecs/imagequant/package-lock.json b/codecs/imagequant/package-lock.json new file mode 100644 index 00000000..da66a524 --- /dev/null +++ b/codecs/imagequant/package-lock.json @@ -0,0 +1,1147 @@ +{ + "name": "mozjpeg_enc", + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=", + "dev": true + }, + "bl": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", + "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + } + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", + "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", + "dev": true, + "requires": { + "base64-js": "0.0.8", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "caw": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", + "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "dev": true, + "requires": { + "get-proxy": "^2.0.0", + "isurl": "^1.0.0-alpha5", + "tunnel-agent": "^0.6.0", + "url-to-options": "^1.0.1" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "config-chain": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", + "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decompress": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", + "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "dev": true, + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "dev": true, + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", + "dev": true + }, + "download": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", + "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", + "dev": true, + "requires": { + "caw": "^2.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.0.0", + "ext-name": "^5.0.0", + "file-type": "5.2.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^7.0.0", + "make-dir": "^1.0.0", + "p-event": "^1.0.0", + "pify": "^3.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "dev": true + }, + "filenamify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.0.0.tgz", + "integrity": "sha1-vRYiYsC26Uv7zc8Zo7uzdk94VpU=", + "dev": true, + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "get-proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", + "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "dev": true, + "requires": { + "npm-conf": "^1.1.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dev": true, + "requires": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", + "dev": true + }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + }, + "make-dir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", + "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mimic-response": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", + "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "napa": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/napa/-/napa-3.0.0.tgz", + "integrity": "sha1-7DqP3gcZC2ny/kNMOVo+aUaEG1Y=", + "dev": true, + "requires": { + "download": "^6.2.2", + "extend": "^3.0.1", + "load-json-file": "^2.0.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "npm-cache-filename": "^1.0.2", + "npmlog": "^4.1.0", + "rimraf": "^2.6.1", + "tar-pack": "^3.4.0", + "write-json-file": "^2.2.0" + } + }, + "npm-cache-filename": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz", + "integrity": "sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE=", + "dev": true + }, + "npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, + "requires": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "dev": true + }, + "p-event": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", + "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", + "dev": true, + "requires": { + "p-timeout": "^1.1.1" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "readable-stream": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "seek-bzip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "dev": true, + "requires": { + "commander": "~2.8.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "dev": true, + "requires": { + "sort-keys": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "requires": { + "is-natural-number": "^4.0.1" + } + }, + "strip-outer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.0.tgz", + "integrity": "sha1-qsC6YNLpDF1PJ1/Yhp/ZotMQ/7g=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + } + }, + "tar-pack": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.1.tgz", + "integrity": "sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg==", + "dev": true, + "requires": { + "debug": "^2.2.0", + "fstream": "^1.0.10", + "fstream-ignore": "^1.0.5", + "once": "^1.3.3", + "readable-stream": "^2.1.4", + "rimraf": "^2.5.1", + "tar": "^2.2.1", + "uid-number": "^0.0.6" + } + }, + "tar-stream": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.5.tgz", + "integrity": "sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg==", + "dev": true, + "requires": { + "bl": "^1.0.0", + "end-of-stream": "^1.0.0", + "readable-stream": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "dev": true + }, + "unbzip2-stream": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz", + "integrity": "sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==", + "dev": true, + "requires": { + "buffer": "^3.0.1", + "through": "^2.3.6" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "write-json-file": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz", + "integrity": "sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=", + "dev": true, + "requires": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "pify": "^3.0.0", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.0.0" + }, + "dependencies": { + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + } + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.0.1" + } + } + } +} diff --git a/codecs/imagequant/package.json b/codecs/imagequant/package.json new file mode 100644 index 00000000..e39a0ea8 --- /dev/null +++ b/codecs/imagequant/package.json @@ -0,0 +1,14 @@ +{ + "name": "imagequant", + "scripts": { + "install": "napa", + "build": "npm run build:wasm", + "build:wasm": "docker run --rm -v $(pwd):/src trzeci/emscripten emcc -O3 -s WASM=1 -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"cwrap\"]' -s ALLOW_MEMORY_GROWTH=1 -s MODULARIZE=1 -s 'EXPORT_NAME=\"imagequant\"' -I node_modules/libimagequant -o ./imagequant.js imagequant.c node_modules/libimagequant/{libimagequant,pam,mediancut,blur,mempool,kmeans,nearest}.c" + }, + "napa": { + "libimagequant": "ImageOptim/libimagequant#2.12.1" + }, + "devDependencies": { + "napa": "^3.0.0" + } +}