├── .gitignore ├── LICENSE ├── README.md ├── example.png ├── index.js ├── package-lock.json ├── package.json └── shaders ├── default.frag ├── default.vert └── mandel.frag /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | *.png 61 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Charlie Hoey 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # noisemaker 2 | 3 | Generate tileable perlin noise textures from the command line. 4 | 5 | ![noisemaker -t 653.0 -o example.png](./example.png?raw=true "noisemaker -t 653.0 -o example.png") 6 | 7 | It's reaaaal basic but I figured I'd share it. Uses glsl-noise, headless-gl and pngjs to generate 4-channel (RGBA) perlin noise field png's that are tileable in all directions. Adjust the "time" value to advance the generator. It kinda randomizes them over time, and starts to get a little glitchy after 10000.0 or so. 8 | 9 | ## prereqs 10 | 11 | I'm using [headless-gl](https://www.npmjs.com/package/headless-gl) to handle off-screen gl 12 | rendering, which has a few prerequisites to run properly. On linux/debian based systems 13 | like Ubuntu, you can install the necessary libraries with: 14 | 15 | `sudo apt-get install -y build-essential libxi-dev libglu1-mesa-dev libglew-dev` 16 | 17 | See the README on [headless-gl](https://www.npmjs.com/package/headless-gl) for more information about other platforms. 18 | 19 | ## installation 20 | 21 | `npm install -g noisemaker` 22 | 23 | ## usage 24 | 25 | create a random noise png in the current directory 26 | 27 | `noisemaker -t [random float]` 28 | 29 | create a png with a specific seed/time in the current directory 30 | 31 | `noisemaker -t 1.0` 32 | 33 | create a named png that looks just like the image above (example.png): 34 | 35 | `noisemaker -t 653.0 -o example_copy.png` 36 | 37 | create a smooth animation over time: 38 | 39 | `for i in {1..60}; do F=$(bc -l <<< $i*.0167); noisemaker -t $F -o ./frame_$i.png; echo "frame $i done"; done` 40 | 41 | then use ffmpeg or something to make a movie out of them: 42 | 43 | `ffmpeg -i frame_%d.png noise.mp4` 44 | 45 | and so on 46 | 47 | ## how does it work? 48 | 49 | So, perlin noise is basically the "clouds" filter from photoshop. It's a fuzzy, cloudy kind of noise that you can generate mathematically. You do this by setting some parameters, and then looping over a grid of positions to see what the value of that position is in this noise field. 50 | 51 | So, for 2D perlin noise, you can just go over each pixel on your screen and look up what the noise value is, ie: 52 | 53 | `float brightness = snoise2(x, y);` 54 | 55 | This is already pretty awesome, and you can do fun things by scaling how x and y are portioned out, or passing them through sin functions and all the other things you try when you're messing around with shaders. But this tool generates noise that is also *tileable*, meaning you can repeat the image endlessly in all directions, which is super handy for all sorts of shader tricks. 56 | 57 | I will not claim to _completely_ grok the math, but I can tell you what it is doing. Instead of a two-dimensional noise function, we use a four-dimensional one. And instead of giving it our 2D x and y coordinates, we use those 2D coordinates to generate two pairs of x,y coordinates, each transcribing a circle in 3D space perpendicular to the other. You pass these into your 4D noise function like: `snoise(x1,y1,x2,y2);`, and the value of the noise field at that 4 dimensional position is the value of the pixel at that x,y position. 58 | 59 | All this code is in `shaders/default.frag`, and I render it on a headless-gl context, and then pipe it back into a PNG file. I do one of these 4D passes with different offsets for each red, green and blue channels of the png. 60 | 61 | ## TODO: 62 | 63 | 1. random seeds instead of just a single timeline 64 | 2. non-square outputs 65 | 66 | ## thanks 67 | 68 | I got some code and concepts from these places, where people generously shared their ideas: 69 | 70 | * https://gamedev.stackexchange.com/questions/23625/how-do-you-generate-tileable-perlin-noise 71 | * https://www.gamedev.net/blogs/entry/2138456-seamless-noise/ 72 | 73 | ## help 74 | 75 | ```noisemaker 76 | + + + 77 | 78 | options: 79 | --size [512] png output size in pixels, always square 80 | --noise_scale [1.0] scale of noise, bigger number = higher frequency 81 | -t [0.0] timestamp to render in noise field, like a seed you can fade 82 | -o [./noise_...] output path relative to current location for png 83 | ``` 84 | -------------------------------------------------------------------------------- /example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flimshaw/noisemaker/9e0a200976ce8ea9808e07b5837e576389cd8edc/example.png -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | "use strict"; 3 | const argv = require('minimist')(process.argv.slice(2)); 4 | const fs = require('fs'); 5 | const PNG = require('pngjs').PNG; 6 | const glsl = require('glslify'); 7 | const path = require('path'); 8 | const pkg = require('./package.json') 9 | 10 | const OUTPUT_SIZE = argv.size !== undefined ? Math.floor(argv.size) : 512; 11 | const NOISE_SCALE = argv.noise_scale !== undefined ? parseFloat(argv.noise_scale) : 1.0; 12 | const LOOP_RADIUS = argv.loop_radius !== undefined ? parseFloat(argv.loop_radius) : Math.PI; 13 | const TIME = argv.t !== undefined ? parseFloat(argv.t) : 0.0; 14 | const ALPHA = argv.a !== undefined; 15 | const OUTPUT_FILE = `noise_${OUTPUT_SIZE}_${TIME.toFixed(8)}.png` 16 | const OUTPUT_PATH = argv.o !== undefined ? path.resolve(process.cwd(), argv.o) : path.resolve(process.cwd(), OUTPUT_FILE); 17 | 18 | // if no arguments passed, display help 19 | if(Object.keys(argv).length === 1) { 20 | console.log(` 21 | ${pkg.name} v${pkg.version} 22 | + + + 23 | 24 | options: 25 | --size [512] png output size in pixels, always square 26 | --noise_scale [1.0] scale of noise, bigger number = higher frequency 27 | -t [0.0] timestamp to render in noise field, like a seed you can fade 28 | -o [./noise_...] output path relative to current location for png 29 | 30 | by flimshaw 31 | `); 32 | return false; 33 | } 34 | 35 | const VERT_SHADER = glsl(argv.vert !== undefined ? argv.vert : './shaders/default.vert'); 36 | const FRAG_SHADER = glsl(argv.frag !== undefined ? argv.frag : './shaders/default.frag'); 37 | 38 | const gl = require('gl')(OUTPUT_SIZE, OUTPUT_SIZE); 39 | 40 | gl.clearColor(0,0,0,1); 41 | gl.clear(gl.COLOR_BUFFER_BIT); 42 | 43 | // helper function to create and compile a shader 44 | function createShader(str, type) { 45 | var shader = gl.createShader(type); 46 | gl.shaderSource(shader, str); 47 | gl.compileShader(shader); 48 | if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { 49 | throw gl.getShaderInfoLog(shader); 50 | } 51 | return shader; 52 | } 53 | 54 | // helper function to create a program from a pair of vert and frag shaders 55 | function createProgram(vstr, fstr) { 56 | var program = gl.createProgram(); 57 | var vshader = createShader(vstr, gl.VERTEX_SHADER); 58 | var fshader = createShader(fstr, gl.FRAGMENT_SHADER); 59 | gl.attachShader(program, vshader); 60 | gl.attachShader(program, fshader); 61 | gl.linkProgram(program); 62 | if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { 63 | throw gl.getProgramInfoLog(program); 64 | } 65 | return program; 66 | } 67 | 68 | // Create a two triangle plane that fills the viewport 69 | var boxSize = 1.0; 70 | 71 | var arrays = { 72 | position: [-boxSize, -boxSize, 0, boxSize, -boxSize, 0, -boxSize, boxSize, 0, -boxSize, boxSize, 0, boxSize, -boxSize, 0, boxSize, boxSize, 0], 73 | }; 74 | 75 | // create a vertex buffer and fill it with triangle positions 76 | var vertexPosBuffer = gl.createBuffer(); 77 | gl.bindBuffer(gl.ARRAY_BUFFER, vertexPosBuffer); 78 | var vertices = arrays.position; 79 | gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW); 80 | 81 | var program = createProgram(VERT_SHADER,FRAG_SHADER); 82 | gl.useProgram(program); 83 | 84 | program.timeUniform = gl.getUniformLocation(program, 'uTime'); 85 | program.resolutionUniform = gl.getUniformLocation(program, 'uResolution'); 86 | program.seedUniform = gl.getUniformLocation(program, 'uSeed'); 87 | program.vertexPosAttrib = gl.getAttribLocation(program, 'position'); 88 | program.noiseScaleUniform = gl.getUniformLocation(program, 'uNoiseScale'); 89 | 90 | function padToFour(number) { 91 | let n = ''; 92 | if (Math.abs(number)<=9999) { 93 | n = ("000"+Math.abs(number)).slice(-4); 94 | } 95 | if(number < 0) { 96 | n = `-${n}`; 97 | } 98 | return n; 99 | } 100 | 101 | function render() { 102 | 103 | // set uniforms 104 | gl.uniform2f(program.resolutionUniform, OUTPUT_SIZE, OUTPUT_SIZE); 105 | gl.uniform1f(program.timeUniform, TIME*.005); 106 | gl.uniform1f(program.noiseScaleUniform, NOISE_SCALE); 107 | gl.uniform2f(program.seedUniform, TIME, TIME); 108 | 109 | // setup screen tile 110 | gl.enableVertexAttribArray(program.vertexPosAttrib); 111 | gl.vertexAttribPointer(program.vertexPosAttrib, 3, gl.FLOAT, false, 0, 0); 112 | 113 | // draw the loaded program to the screen 114 | gl.drawArrays(gl.TRIANGLES, 0, 6); 115 | 116 | // read the render buffer back 117 | const png = new PNG({ width: OUTPUT_SIZE, height: OUTPUT_SIZE }); 118 | 119 | // stream pixel values from the gl context to a png buffer 120 | gl.readPixels(0, 0, OUTPUT_SIZE, OUTPUT_SIZE, gl.RGBA, gl.UNSIGNED_BYTE, png.data); 121 | 122 | // pack the PNG and pipe it to our output file 123 | png.pack().pipe(fs.createWriteStream(OUTPUT_PATH)); 124 | } 125 | 126 | render(); 127 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "noisemaker", 3 | "version": "0.1.13", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@choojs/findup": { 8 | "version": "0.2.1", 9 | "resolved": "https://registry.npmjs.org/@choojs/findup/-/findup-0.2.1.tgz", 10 | "integrity": "sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==", 11 | "requires": { 12 | "commander": "^2.15.1" 13 | } 14 | }, 15 | "abbrev": { 16 | "version": "1.1.0", 17 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", 18 | "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=" 19 | }, 20 | "acorn": { 21 | "version": "7.2.0", 22 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz", 23 | "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==" 24 | }, 25 | "ansi-regex": { 26 | "version": "2.1.1", 27 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 28 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 29 | }, 30 | "aproba": { 31 | "version": "1.1.2", 32 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz", 33 | "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==" 34 | }, 35 | "are-we-there-yet": { 36 | "version": "1.1.4", 37 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", 38 | "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", 39 | "requires": { 40 | "delegates": "^1.0.0", 41 | "readable-stream": "^2.0.6" 42 | } 43 | }, 44 | "asn1": { 45 | "version": "0.2.3", 46 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 47 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" 48 | }, 49 | "asynckit": { 50 | "version": "0.4.0", 51 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 52 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 53 | }, 54 | "balanced-match": { 55 | "version": "1.0.0", 56 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 57 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 58 | }, 59 | "base64-js": { 60 | "version": "1.3.1", 61 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 62 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" 63 | }, 64 | "bcrypt-pbkdf": { 65 | "version": "1.0.1", 66 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 67 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 68 | "requires": { 69 | "tweetnacl": "^0.14.3" 70 | } 71 | }, 72 | "bit-twiddle": { 73 | "version": "1.0.2", 74 | "resolved": "https://registry.npmjs.org/bit-twiddle/-/bit-twiddle-1.0.2.tgz", 75 | "integrity": "sha1-DGwfq+KyPRcXPZpht7cJPrnhdp4=" 76 | }, 77 | "bl": { 78 | "version": "1.2.1", 79 | "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", 80 | "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", 81 | "requires": { 82 | "readable-stream": "^2.0.5" 83 | } 84 | }, 85 | "brace-expansion": { 86 | "version": "1.1.8", 87 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 88 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 89 | "requires": { 90 | "balanced-match": "^1.0.0", 91 | "concat-map": "0.0.1" 92 | } 93 | }, 94 | "buffer": { 95 | "version": "5.6.0", 96 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", 97 | "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", 98 | "requires": { 99 | "base64-js": "^1.0.2", 100 | "ieee754": "^1.1.4" 101 | } 102 | }, 103 | "buffer-from": { 104 | "version": "1.1.1", 105 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 106 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" 107 | }, 108 | "caseless": { 109 | "version": "0.12.0", 110 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 111 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 112 | }, 113 | "code-point-at": { 114 | "version": "1.1.0", 115 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 116 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 117 | }, 118 | "commander": { 119 | "version": "2.20.3", 120 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 121 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 122 | }, 123 | "concat-map": { 124 | "version": "0.0.1", 125 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 126 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 127 | }, 128 | "concat-stream": { 129 | "version": "1.6.2", 130 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 131 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 132 | "requires": { 133 | "buffer-from": "^1.0.0", 134 | "inherits": "^2.0.3", 135 | "readable-stream": "^2.2.2", 136 | "typedarray": "^0.0.6" 137 | } 138 | }, 139 | "console-control-strings": { 140 | "version": "1.1.0", 141 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 142 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" 143 | }, 144 | "core-util-is": { 145 | "version": "1.0.2", 146 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 147 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 148 | }, 149 | "dashdash": { 150 | "version": "1.14.1", 151 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 152 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 153 | "requires": { 154 | "assert-plus": "^1.0.0" 155 | }, 156 | "dependencies": { 157 | "assert-plus": { 158 | "version": "1.0.0", 159 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 160 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 161 | } 162 | } 163 | }, 164 | "decompress-response": { 165 | "version": "4.2.1", 166 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", 167 | "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", 168 | "requires": { 169 | "mimic-response": "^2.0.0" 170 | } 171 | }, 172 | "deep-extend": { 173 | "version": "0.6.0", 174 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 175 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" 176 | }, 177 | "deep-is": { 178 | "version": "0.1.3", 179 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 180 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" 181 | }, 182 | "delayed-stream": { 183 | "version": "1.0.0", 184 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 185 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 186 | }, 187 | "delegates": { 188 | "version": "1.0.0", 189 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 190 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" 191 | }, 192 | "detect-libc": { 193 | "version": "1.0.3", 194 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 195 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" 196 | }, 197 | "duplexify": { 198 | "version": "3.7.1", 199 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", 200 | "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", 201 | "requires": { 202 | "end-of-stream": "^1.0.0", 203 | "inherits": "^2.0.1", 204 | "readable-stream": "^2.0.0", 205 | "stream-shift": "^1.0.0" 206 | } 207 | }, 208 | "ecc-jsbn": { 209 | "version": "0.1.1", 210 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 211 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 212 | "requires": { 213 | "jsbn": "~0.1.0" 214 | } 215 | }, 216 | "end-of-stream": { 217 | "version": "1.4.0", 218 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", 219 | "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", 220 | "requires": { 221 | "once": "^1.4.0" 222 | } 223 | }, 224 | "env-paths": { 225 | "version": "2.2.0", 226 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", 227 | "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==" 228 | }, 229 | "escodegen": { 230 | "version": "1.14.1", 231 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", 232 | "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", 233 | "requires": { 234 | "esprima": "^4.0.1", 235 | "estraverse": "^4.2.0", 236 | "esutils": "^2.0.2", 237 | "optionator": "^0.8.1", 238 | "source-map": "~0.6.1" 239 | } 240 | }, 241 | "esprima": { 242 | "version": "4.0.1", 243 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 244 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" 245 | }, 246 | "estraverse": { 247 | "version": "4.3.0", 248 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 249 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" 250 | }, 251 | "esutils": { 252 | "version": "2.0.3", 253 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 254 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" 255 | }, 256 | "events": { 257 | "version": "1.1.1", 258 | "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", 259 | "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" 260 | }, 261 | "extsprintf": { 262 | "version": "1.3.0", 263 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 264 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 265 | }, 266 | "falafel": { 267 | "version": "2.2.4", 268 | "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.4.tgz", 269 | "integrity": "sha512-0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ==", 270 | "requires": { 271 | "acorn": "^7.1.1", 272 | "foreach": "^2.0.5", 273 | "isarray": "^2.0.1", 274 | "object-keys": "^1.0.6" 275 | }, 276 | "dependencies": { 277 | "isarray": { 278 | "version": "2.0.5", 279 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", 280 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" 281 | } 282 | } 283 | }, 284 | "fast-deep-equal": { 285 | "version": "3.1.1", 286 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", 287 | "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" 288 | }, 289 | "fast-json-stable-stringify": { 290 | "version": "2.1.0", 291 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 292 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 293 | }, 294 | "fast-levenshtein": { 295 | "version": "2.0.6", 296 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 297 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" 298 | }, 299 | "file-uri-to-path": { 300 | "version": "1.0.0", 301 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 302 | "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" 303 | }, 304 | "foreach": { 305 | "version": "2.0.5", 306 | "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", 307 | "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" 308 | }, 309 | "forever-agent": { 310 | "version": "0.6.1", 311 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 312 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 313 | }, 314 | "from2": { 315 | "version": "2.3.0", 316 | "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", 317 | "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", 318 | "requires": { 319 | "inherits": "^2.0.1", 320 | "readable-stream": "^2.0.0" 321 | } 322 | }, 323 | "fs-constants": { 324 | "version": "1.0.0", 325 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 326 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" 327 | }, 328 | "fs-minipass": { 329 | "version": "1.2.7", 330 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", 331 | "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", 332 | "requires": { 333 | "minipass": "^2.6.0" 334 | } 335 | }, 336 | "fs.realpath": { 337 | "version": "1.0.0", 338 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 339 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 340 | }, 341 | "gauge": { 342 | "version": "2.7.4", 343 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", 344 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", 345 | "requires": { 346 | "aproba": "^1.0.3", 347 | "console-control-strings": "^1.0.0", 348 | "has-unicode": "^2.0.0", 349 | "object-assign": "^4.1.0", 350 | "signal-exit": "^3.0.0", 351 | "string-width": "^1.0.1", 352 | "strip-ansi": "^3.0.1", 353 | "wide-align": "^1.1.0" 354 | } 355 | }, 356 | "getpass": { 357 | "version": "0.1.7", 358 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 359 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 360 | "requires": { 361 | "assert-plus": "^1.0.0" 362 | }, 363 | "dependencies": { 364 | "assert-plus": { 365 | "version": "1.0.0", 366 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 367 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 368 | } 369 | } 370 | }, 371 | "github-from-package": { 372 | "version": "0.0.0", 373 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", 374 | "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" 375 | }, 376 | "gl": { 377 | "version": "4.5.0", 378 | "resolved": "https://registry.npmjs.org/gl/-/gl-4.5.0.tgz", 379 | "integrity": "sha512-wCIb56NeVF/KAxNI4TlKbLz2la70On3uNDv6t5a52OcyOyyCg4sa65SxIfk8MTdc0XBSkHbYWY+2pjTuunLmnw==", 380 | "requires": { 381 | "bindings": "^1.5.0", 382 | "bit-twiddle": "^1.0.2", 383 | "glsl-tokenizer": "^2.0.2", 384 | "nan": "^2.14.0", 385 | "node-gyp": "^6.1.0", 386 | "prebuild-install": "^5.1.0" 387 | }, 388 | "dependencies": { 389 | "ajv": { 390 | "version": "6.12.2", 391 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", 392 | "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", 393 | "requires": { 394 | "fast-deep-equal": "^3.1.1", 395 | "fast-json-stable-stringify": "^2.0.0", 396 | "json-schema-traverse": "^0.4.1", 397 | "uri-js": "^4.2.2" 398 | } 399 | }, 400 | "assert-plus": { 401 | "version": "1.0.0", 402 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 403 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 404 | }, 405 | "aws-sign2": { 406 | "version": "0.7.0", 407 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 408 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 409 | }, 410 | "aws4": { 411 | "version": "1.9.1", 412 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", 413 | "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" 414 | }, 415 | "bindings": { 416 | "version": "1.5.0", 417 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", 418 | "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", 419 | "requires": { 420 | "file-uri-to-path": "1.0.0" 421 | } 422 | }, 423 | "chownr": { 424 | "version": "1.1.4", 425 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 426 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" 427 | }, 428 | "combined-stream": { 429 | "version": "1.0.8", 430 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 431 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 432 | "requires": { 433 | "delayed-stream": "~1.0.0" 434 | } 435 | }, 436 | "extend": { 437 | "version": "3.0.2", 438 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 439 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 440 | }, 441 | "form-data": { 442 | "version": "2.3.3", 443 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 444 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 445 | "requires": { 446 | "asynckit": "^0.4.0", 447 | "combined-stream": "^1.0.6", 448 | "mime-types": "^2.1.12" 449 | } 450 | }, 451 | "glob": { 452 | "version": "7.1.6", 453 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 454 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 455 | "requires": { 456 | "fs.realpath": "^1.0.0", 457 | "inflight": "^1.0.4", 458 | "inherits": "2", 459 | "minimatch": "^3.0.4", 460 | "once": "^1.3.0", 461 | "path-is-absolute": "^1.0.0" 462 | } 463 | }, 464 | "graceful-fs": { 465 | "version": "4.2.4", 466 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 467 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" 468 | }, 469 | "har-schema": { 470 | "version": "2.0.0", 471 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 472 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 473 | }, 474 | "har-validator": { 475 | "version": "5.1.3", 476 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 477 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 478 | "requires": { 479 | "ajv": "^6.5.5", 480 | "har-schema": "^2.0.0" 481 | } 482 | }, 483 | "http-signature": { 484 | "version": "1.2.0", 485 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 486 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 487 | "requires": { 488 | "assert-plus": "^1.0.0", 489 | "jsprim": "^1.2.2", 490 | "sshpk": "^1.7.0" 491 | } 492 | }, 493 | "mime-db": { 494 | "version": "1.44.0", 495 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 496 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" 497 | }, 498 | "mime-types": { 499 | "version": "2.1.27", 500 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 501 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 502 | "requires": { 503 | "mime-db": "1.44.0" 504 | } 505 | }, 506 | "nan": { 507 | "version": "2.14.1", 508 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", 509 | "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" 510 | }, 511 | "node-gyp": { 512 | "version": "6.1.0", 513 | "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-6.1.0.tgz", 514 | "integrity": "sha512-h4A2zDlOujeeaaTx06r4Vy+8MZ1679lU+wbCKDS4ZtvY2A37DESo37oejIw0mtmR3+rvNwts5B6Kpt1KrNYdNw==", 515 | "requires": { 516 | "env-paths": "^2.2.0", 517 | "glob": "^7.1.4", 518 | "graceful-fs": "^4.2.2", 519 | "mkdirp": "^0.5.1", 520 | "nopt": "^4.0.1", 521 | "npmlog": "^4.1.2", 522 | "request": "^2.88.0", 523 | "rimraf": "^2.6.3", 524 | "semver": "^5.7.1", 525 | "tar": "^4.4.12", 526 | "which": "^1.3.1" 527 | } 528 | }, 529 | "nopt": { 530 | "version": "4.0.3", 531 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", 532 | "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", 533 | "requires": { 534 | "abbrev": "1", 535 | "osenv": "^0.1.4" 536 | } 537 | }, 538 | "oauth-sign": { 539 | "version": "0.9.0", 540 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 541 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 542 | }, 543 | "performance-now": { 544 | "version": "2.1.0", 545 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 546 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 547 | }, 548 | "punycode": { 549 | "version": "2.1.1", 550 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 551 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 552 | }, 553 | "qs": { 554 | "version": "6.5.2", 555 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 556 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 557 | }, 558 | "request": { 559 | "version": "2.88.2", 560 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 561 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 562 | "requires": { 563 | "aws-sign2": "~0.7.0", 564 | "aws4": "^1.8.0", 565 | "caseless": "~0.12.0", 566 | "combined-stream": "~1.0.6", 567 | "extend": "~3.0.2", 568 | "forever-agent": "~0.6.1", 569 | "form-data": "~2.3.2", 570 | "har-validator": "~5.1.3", 571 | "http-signature": "~1.2.0", 572 | "is-typedarray": "~1.0.0", 573 | "isstream": "~0.1.2", 574 | "json-stringify-safe": "~5.0.1", 575 | "mime-types": "~2.1.19", 576 | "oauth-sign": "~0.9.0", 577 | "performance-now": "^2.1.0", 578 | "qs": "~6.5.2", 579 | "safe-buffer": "^5.1.2", 580 | "tough-cookie": "~2.5.0", 581 | "tunnel-agent": "^0.6.0", 582 | "uuid": "^3.3.2" 583 | } 584 | }, 585 | "rimraf": { 586 | "version": "2.7.1", 587 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 588 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 589 | "requires": { 590 | "glob": "^7.1.3" 591 | } 592 | }, 593 | "safe-buffer": { 594 | "version": "5.2.0", 595 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 596 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 597 | }, 598 | "semver": { 599 | "version": "5.7.1", 600 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 601 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 602 | }, 603 | "tar": { 604 | "version": "4.4.13", 605 | "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", 606 | "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", 607 | "requires": { 608 | "chownr": "^1.1.1", 609 | "fs-minipass": "^1.2.5", 610 | "minipass": "^2.8.6", 611 | "minizlib": "^1.2.1", 612 | "mkdirp": "^0.5.0", 613 | "safe-buffer": "^5.1.2", 614 | "yallist": "^3.0.3" 615 | } 616 | }, 617 | "tough-cookie": { 618 | "version": "2.5.0", 619 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 620 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 621 | "requires": { 622 | "psl": "^1.1.28", 623 | "punycode": "^2.1.1" 624 | } 625 | }, 626 | "uuid": { 627 | "version": "3.4.0", 628 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 629 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 630 | }, 631 | "which": { 632 | "version": "1.3.1", 633 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 634 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 635 | "requires": { 636 | "isexe": "^2.0.0" 637 | } 638 | } 639 | } 640 | }, 641 | "glsl-inject-defines": { 642 | "version": "1.0.3", 643 | "resolved": "https://registry.npmjs.org/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz", 644 | "integrity": "sha1-3RqswsF/yyvT/DJBHGYz0Ne2D9Q=", 645 | "requires": { 646 | "glsl-token-inject-block": "^1.0.0", 647 | "glsl-token-string": "^1.0.1", 648 | "glsl-tokenizer": "^2.0.2" 649 | } 650 | }, 651 | "glsl-noise": { 652 | "version": "0.0.0", 653 | "resolved": "https://registry.npmjs.org/glsl-noise/-/glsl-noise-0.0.0.tgz", 654 | "integrity": "sha1-NndF86MzgsDu7Ey1S36Zz8HXZws=" 655 | }, 656 | "glsl-resolve": { 657 | "version": "0.0.1", 658 | "resolved": "https://registry.npmjs.org/glsl-resolve/-/glsl-resolve-0.0.1.tgz", 659 | "integrity": "sha1-iUvvc5ENeSyBtRQxgANdCnivdtM=", 660 | "requires": { 661 | "resolve": "^0.6.1", 662 | "xtend": "^2.1.2" 663 | }, 664 | "dependencies": { 665 | "resolve": { 666 | "version": "0.6.3", 667 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", 668 | "integrity": "sha1-3ZV5gufnNt699TtYpN2RdUV13UY=" 669 | }, 670 | "xtend": { 671 | "version": "2.2.0", 672 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", 673 | "integrity": "sha1-7vax8ZjByN6vrYsXZaBNrUoBxak=" 674 | } 675 | } 676 | }, 677 | "glsl-token-assignments": { 678 | "version": "2.0.2", 679 | "resolved": "https://registry.npmjs.org/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz", 680 | "integrity": "sha1-pdgqt4SZwuimuDy2lJXm5mXOAZ8=" 681 | }, 682 | "glsl-token-defines": { 683 | "version": "1.0.0", 684 | "resolved": "https://registry.npmjs.org/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz", 685 | "integrity": "sha1-y4kqqVmTYjFyhHDU90AySJaX+p0=", 686 | "requires": { 687 | "glsl-tokenizer": "^2.0.0" 688 | } 689 | }, 690 | "glsl-token-depth": { 691 | "version": "1.1.2", 692 | "resolved": "https://registry.npmjs.org/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz", 693 | "integrity": "sha1-I8XjDuK9JViEtKKLyFC495HpXYQ=" 694 | }, 695 | "glsl-token-descope": { 696 | "version": "1.0.2", 697 | "resolved": "https://registry.npmjs.org/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz", 698 | "integrity": "sha1-D8kKsyYYa4L1l7LnfcniHvzTIHY=", 699 | "requires": { 700 | "glsl-token-assignments": "^2.0.0", 701 | "glsl-token-depth": "^1.1.0", 702 | "glsl-token-properties": "^1.0.0", 703 | "glsl-token-scope": "^1.1.0" 704 | } 705 | }, 706 | "glsl-token-inject-block": { 707 | "version": "1.1.0", 708 | "resolved": "https://registry.npmjs.org/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz", 709 | "integrity": "sha1-4QFfWYDBCRgkraomJfHf3ovQADQ=" 710 | }, 711 | "glsl-token-properties": { 712 | "version": "1.0.1", 713 | "resolved": "https://registry.npmjs.org/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz", 714 | "integrity": "sha1-SD3D2Dnw1LXGFx0VkfJJvlPCip4=" 715 | }, 716 | "glsl-token-scope": { 717 | "version": "1.1.2", 718 | "resolved": "https://registry.npmjs.org/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz", 719 | "integrity": "sha1-oXKOeN8kRE+cuT/RjvD3VQOmQ7E=" 720 | }, 721 | "glsl-token-string": { 722 | "version": "1.0.1", 723 | "resolved": "https://registry.npmjs.org/glsl-token-string/-/glsl-token-string-1.0.1.tgz", 724 | "integrity": "sha1-WUQdL4V958NEnJRWZgIezjWOSOw=" 725 | }, 726 | "glsl-token-whitespace-trim": { 727 | "version": "1.0.0", 728 | "resolved": "https://registry.npmjs.org/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz", 729 | "integrity": "sha1-RtHf6Yx1vX1QTAXX0RsbPpzJOxA=" 730 | }, 731 | "glsl-tokenizer": { 732 | "version": "2.1.2", 733 | "resolved": "https://registry.npmjs.org/glsl-tokenizer/-/glsl-tokenizer-2.1.2.tgz", 734 | "integrity": "sha1-cgMHUi4DxXrzXABVGVDEpw7y37k=", 735 | "requires": { 736 | "through2": "^0.6.3" 737 | }, 738 | "dependencies": { 739 | "isarray": { 740 | "version": "0.0.1", 741 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 742 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 743 | }, 744 | "readable-stream": { 745 | "version": "1.0.34", 746 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 747 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 748 | "requires": { 749 | "core-util-is": "~1.0.0", 750 | "inherits": "~2.0.1", 751 | "isarray": "0.0.1", 752 | "string_decoder": "~0.10.x" 753 | } 754 | }, 755 | "string_decoder": { 756 | "version": "0.10.31", 757 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 758 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 759 | }, 760 | "through2": { 761 | "version": "0.6.5", 762 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 763 | "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", 764 | "requires": { 765 | "readable-stream": ">=1.0.33-1 <1.1.0-0", 766 | "xtend": ">=4.0.0 <4.1.0-0" 767 | } 768 | } 769 | } 770 | }, 771 | "glslify": { 772 | "version": "7.0.0", 773 | "resolved": "https://registry.npmjs.org/glslify/-/glslify-7.0.0.tgz", 774 | "integrity": "sha512-yw8jDQIe9FlSH5NiZEqSAsCPj9HI7nhXgXLAgSv2Nm9eBPsFJmyN9+rNwbiozJapcj9xtc/71rMYlN9cxp1B8Q==", 775 | "requires": { 776 | "bl": "^1.0.0", 777 | "concat-stream": "^1.5.2", 778 | "duplexify": "^3.4.5", 779 | "falafel": "^2.1.0", 780 | "from2": "^2.3.0", 781 | "glsl-resolve": "0.0.1", 782 | "glsl-token-whitespace-trim": "^1.0.0", 783 | "glslify-bundle": "^5.0.0", 784 | "glslify-deps": "^1.2.5", 785 | "minimist": "^1.2.0", 786 | "resolve": "^1.1.5", 787 | "stack-trace": "0.0.9", 788 | "static-eval": "^2.0.0", 789 | "through2": "^2.0.1", 790 | "xtend": "^4.0.0" 791 | } 792 | }, 793 | "glslify-bundle": { 794 | "version": "5.1.1", 795 | "resolved": "https://registry.npmjs.org/glslify-bundle/-/glslify-bundle-5.1.1.tgz", 796 | "integrity": "sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A==", 797 | "requires": { 798 | "glsl-inject-defines": "^1.0.1", 799 | "glsl-token-defines": "^1.0.0", 800 | "glsl-token-depth": "^1.1.1", 801 | "glsl-token-descope": "^1.0.2", 802 | "glsl-token-scope": "^1.1.1", 803 | "glsl-token-string": "^1.0.1", 804 | "glsl-token-whitespace-trim": "^1.0.0", 805 | "glsl-tokenizer": "^2.0.2", 806 | "murmurhash-js": "^1.0.0", 807 | "shallow-copy": "0.0.1" 808 | } 809 | }, 810 | "glslify-deps": { 811 | "version": "1.3.1", 812 | "resolved": "https://registry.npmjs.org/glslify-deps/-/glslify-deps-1.3.1.tgz", 813 | "integrity": "sha512-Ogm179MCazwIRyEqs3g3EOY4Y3XIAa0yl8J5RE9rJC6QH1w8weVOp2RZu0mvnYy/2xIas1w166YR2eZdDkWQxg==", 814 | "requires": { 815 | "@choojs/findup": "^0.2.0", 816 | "events": "^1.0.2", 817 | "glsl-resolve": "0.0.1", 818 | "glsl-tokenizer": "^2.0.0", 819 | "graceful-fs": "^4.1.2", 820 | "inherits": "^2.0.1", 821 | "map-limit": "0.0.1", 822 | "resolve": "^1.0.0" 823 | } 824 | }, 825 | "graceful-fs": { 826 | "version": "4.1.11", 827 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 828 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" 829 | }, 830 | "has-unicode": { 831 | "version": "2.0.1", 832 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 833 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" 834 | }, 835 | "ieee754": { 836 | "version": "1.1.13", 837 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 838 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" 839 | }, 840 | "inflight": { 841 | "version": "1.0.6", 842 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 843 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 844 | "requires": { 845 | "once": "^1.3.0", 846 | "wrappy": "1" 847 | } 848 | }, 849 | "inherits": { 850 | "version": "2.0.3", 851 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 852 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 853 | }, 854 | "ini": { 855 | "version": "1.3.4", 856 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", 857 | "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=" 858 | }, 859 | "is-fullwidth-code-point": { 860 | "version": "1.0.0", 861 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 862 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 863 | "requires": { 864 | "number-is-nan": "^1.0.0" 865 | } 866 | }, 867 | "is-typedarray": { 868 | "version": "1.0.0", 869 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 870 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 871 | }, 872 | "isarray": { 873 | "version": "1.0.0", 874 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 875 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 876 | }, 877 | "isexe": { 878 | "version": "2.0.0", 879 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 880 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 881 | }, 882 | "isstream": { 883 | "version": "0.1.2", 884 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 885 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 886 | }, 887 | "jsbn": { 888 | "version": "0.1.1", 889 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 890 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 891 | }, 892 | "json-schema": { 893 | "version": "0.2.3", 894 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 895 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 896 | }, 897 | "json-schema-traverse": { 898 | "version": "0.4.1", 899 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 900 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 901 | }, 902 | "json-stringify-safe": { 903 | "version": "5.0.1", 904 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 905 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 906 | }, 907 | "jsprim": { 908 | "version": "1.4.1", 909 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 910 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 911 | "requires": { 912 | "assert-plus": "1.0.0", 913 | "extsprintf": "1.3.0", 914 | "json-schema": "0.2.3", 915 | "verror": "1.10.0" 916 | }, 917 | "dependencies": { 918 | "assert-plus": { 919 | "version": "1.0.0", 920 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 921 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 922 | } 923 | } 924 | }, 925 | "levn": { 926 | "version": "0.3.0", 927 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 928 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 929 | "requires": { 930 | "prelude-ls": "~1.1.2", 931 | "type-check": "~0.3.2" 932 | } 933 | }, 934 | "map-limit": { 935 | "version": "0.0.1", 936 | "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", 937 | "integrity": "sha1-63lhAxwPDo0AG/LVb6toXViCLzg=", 938 | "requires": { 939 | "once": "~1.3.0" 940 | }, 941 | "dependencies": { 942 | "once": { 943 | "version": "1.3.3", 944 | "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 945 | "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", 946 | "requires": { 947 | "wrappy": "1" 948 | } 949 | } 950 | } 951 | }, 952 | "mimic-response": { 953 | "version": "2.1.0", 954 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", 955 | "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" 956 | }, 957 | "minimatch": { 958 | "version": "3.0.4", 959 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 960 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 961 | "requires": { 962 | "brace-expansion": "^1.1.7" 963 | } 964 | }, 965 | "minimist": { 966 | "version": "1.2.5", 967 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 968 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 969 | }, 970 | "minipass": { 971 | "version": "2.9.0", 972 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", 973 | "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", 974 | "requires": { 975 | "safe-buffer": "^5.1.2", 976 | "yallist": "^3.0.0" 977 | }, 978 | "dependencies": { 979 | "safe-buffer": { 980 | "version": "5.2.0", 981 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 982 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 983 | } 984 | } 985 | }, 986 | "minizlib": { 987 | "version": "1.3.3", 988 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", 989 | "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", 990 | "requires": { 991 | "minipass": "^2.9.0" 992 | } 993 | }, 994 | "mkdirp": { 995 | "version": "0.5.5", 996 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 997 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 998 | "requires": { 999 | "minimist": "^1.2.5" 1000 | } 1001 | }, 1002 | "mkdirp-classic": { 1003 | "version": "0.5.3", 1004 | "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", 1005 | "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" 1006 | }, 1007 | "murmurhash-js": { 1008 | "version": "1.0.0", 1009 | "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", 1010 | "integrity": "sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E=" 1011 | }, 1012 | "napi-build-utils": { 1013 | "version": "1.0.2", 1014 | "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", 1015 | "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" 1016 | }, 1017 | "noop-logger": { 1018 | "version": "0.1.1", 1019 | "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", 1020 | "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" 1021 | }, 1022 | "npmlog": { 1023 | "version": "4.1.2", 1024 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", 1025 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 1026 | "requires": { 1027 | "are-we-there-yet": "~1.1.2", 1028 | "console-control-strings": "~1.1.0", 1029 | "gauge": "~2.7.3", 1030 | "set-blocking": "~2.0.0" 1031 | } 1032 | }, 1033 | "number-is-nan": { 1034 | "version": "1.0.1", 1035 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 1036 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 1037 | }, 1038 | "object-assign": { 1039 | "version": "4.1.1", 1040 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1041 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1042 | }, 1043 | "object-keys": { 1044 | "version": "1.1.1", 1045 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1046 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" 1047 | }, 1048 | "once": { 1049 | "version": "1.4.0", 1050 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1051 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1052 | "requires": { 1053 | "wrappy": "1" 1054 | } 1055 | }, 1056 | "optionator": { 1057 | "version": "0.8.3", 1058 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 1059 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 1060 | "requires": { 1061 | "deep-is": "~0.1.3", 1062 | "fast-levenshtein": "~2.0.6", 1063 | "levn": "~0.3.0", 1064 | "prelude-ls": "~1.1.2", 1065 | "type-check": "~0.3.2", 1066 | "word-wrap": "~1.2.3" 1067 | } 1068 | }, 1069 | "os-homedir": { 1070 | "version": "1.0.2", 1071 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 1072 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" 1073 | }, 1074 | "os-tmpdir": { 1075 | "version": "1.0.2", 1076 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1077 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 1078 | }, 1079 | "osenv": { 1080 | "version": "0.1.4", 1081 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", 1082 | "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", 1083 | "requires": { 1084 | "os-homedir": "^1.0.0", 1085 | "os-tmpdir": "^1.0.0" 1086 | } 1087 | }, 1088 | "path-is-absolute": { 1089 | "version": "1.0.1", 1090 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1091 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1092 | }, 1093 | "path-parse": { 1094 | "version": "1.0.6", 1095 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1096 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" 1097 | }, 1098 | "pngjs": { 1099 | "version": "3.3.0", 1100 | "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.3.0.tgz", 1101 | "integrity": "sha1-H1cwwYnJSTO4G+2iqy+OKFUmOo8=" 1102 | }, 1103 | "prebuild-install": { 1104 | "version": "5.3.3", 1105 | "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz", 1106 | "integrity": "sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g==", 1107 | "requires": { 1108 | "detect-libc": "^1.0.3", 1109 | "expand-template": "^2.0.3", 1110 | "github-from-package": "0.0.0", 1111 | "minimist": "^1.2.0", 1112 | "mkdirp": "^0.5.1", 1113 | "napi-build-utils": "^1.0.1", 1114 | "node-abi": "^2.7.0", 1115 | "noop-logger": "^0.1.1", 1116 | "npmlog": "^4.0.1", 1117 | "pump": "^3.0.0", 1118 | "rc": "^1.2.7", 1119 | "simple-get": "^3.0.3", 1120 | "tar-fs": "^2.0.0", 1121 | "tunnel-agent": "^0.6.0", 1122 | "which-pm-runs": "^1.0.0" 1123 | }, 1124 | "dependencies": { 1125 | "bl": { 1126 | "version": "4.0.2", 1127 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", 1128 | "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", 1129 | "requires": { 1130 | "buffer": "^5.5.0", 1131 | "inherits": "^2.0.4", 1132 | "readable-stream": "^3.4.0" 1133 | }, 1134 | "dependencies": { 1135 | "inherits": { 1136 | "version": "2.0.4", 1137 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1138 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1139 | } 1140 | } 1141 | }, 1142 | "chownr": { 1143 | "version": "1.1.4", 1144 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 1145 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" 1146 | }, 1147 | "expand-template": { 1148 | "version": "2.0.3", 1149 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", 1150 | "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" 1151 | }, 1152 | "node-abi": { 1153 | "version": "2.16.0", 1154 | "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.16.0.tgz", 1155 | "integrity": "sha512-+sa0XNlWDA6T+bDLmkCUYn6W5k5W6BPRL6mqzSCs6H/xUgtl4D5x2fORKDzopKiU6wsyn/+wXlRXwXeSp+mtoA==", 1156 | "requires": { 1157 | "semver": "^5.4.1" 1158 | } 1159 | }, 1160 | "pump": { 1161 | "version": "3.0.0", 1162 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1163 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1164 | "requires": { 1165 | "end-of-stream": "^1.1.0", 1166 | "once": "^1.3.1" 1167 | } 1168 | }, 1169 | "readable-stream": { 1170 | "version": "3.6.0", 1171 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1172 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1173 | "requires": { 1174 | "inherits": "^2.0.3", 1175 | "string_decoder": "^1.1.1", 1176 | "util-deprecate": "^1.0.1" 1177 | } 1178 | }, 1179 | "safe-buffer": { 1180 | "version": "5.2.0", 1181 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 1182 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 1183 | }, 1184 | "semver": { 1185 | "version": "5.7.1", 1186 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1187 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 1188 | }, 1189 | "simple-get": { 1190 | "version": "3.1.0", 1191 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", 1192 | "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", 1193 | "requires": { 1194 | "decompress-response": "^4.2.0", 1195 | "once": "^1.3.1", 1196 | "simple-concat": "^1.0.0" 1197 | } 1198 | }, 1199 | "string_decoder": { 1200 | "version": "1.3.0", 1201 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1202 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1203 | "requires": { 1204 | "safe-buffer": "~5.2.0" 1205 | } 1206 | }, 1207 | "tar-fs": { 1208 | "version": "2.0.1", 1209 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", 1210 | "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", 1211 | "requires": { 1212 | "chownr": "^1.1.1", 1213 | "mkdirp-classic": "^0.5.2", 1214 | "pump": "^3.0.0", 1215 | "tar-stream": "^2.0.0" 1216 | } 1217 | }, 1218 | "tar-stream": { 1219 | "version": "2.1.2", 1220 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", 1221 | "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", 1222 | "requires": { 1223 | "bl": "^4.0.1", 1224 | "end-of-stream": "^1.4.1", 1225 | "fs-constants": "^1.0.0", 1226 | "inherits": "^2.0.3", 1227 | "readable-stream": "^3.1.1" 1228 | }, 1229 | "dependencies": { 1230 | "end-of-stream": { 1231 | "version": "1.4.4", 1232 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1233 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1234 | "requires": { 1235 | "once": "^1.4.0" 1236 | } 1237 | } 1238 | } 1239 | } 1240 | } 1241 | }, 1242 | "prelude-ls": { 1243 | "version": "1.1.2", 1244 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1245 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" 1246 | }, 1247 | "process-nextick-args": { 1248 | "version": "1.0.7", 1249 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 1250 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" 1251 | }, 1252 | "psl": { 1253 | "version": "1.8.0", 1254 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", 1255 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" 1256 | }, 1257 | "rc": { 1258 | "version": "1.2.8", 1259 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 1260 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 1261 | "requires": { 1262 | "deep-extend": "^0.6.0", 1263 | "ini": "~1.3.0", 1264 | "minimist": "^1.2.0", 1265 | "strip-json-comments": "~2.0.1" 1266 | } 1267 | }, 1268 | "readable-stream": { 1269 | "version": "2.3.3", 1270 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 1271 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 1272 | "requires": { 1273 | "core-util-is": "~1.0.0", 1274 | "inherits": "~2.0.3", 1275 | "isarray": "~1.0.0", 1276 | "process-nextick-args": "~1.0.6", 1277 | "safe-buffer": "~5.1.1", 1278 | "string_decoder": "~1.0.3", 1279 | "util-deprecate": "~1.0.1" 1280 | } 1281 | }, 1282 | "resolve": { 1283 | "version": "1.17.0", 1284 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", 1285 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", 1286 | "requires": { 1287 | "path-parse": "^1.0.6" 1288 | } 1289 | }, 1290 | "safe-buffer": { 1291 | "version": "5.1.1", 1292 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 1293 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 1294 | }, 1295 | "safer-buffer": { 1296 | "version": "2.1.2", 1297 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1298 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1299 | }, 1300 | "set-blocking": { 1301 | "version": "2.0.0", 1302 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1303 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 1304 | }, 1305 | "shallow-copy": { 1306 | "version": "0.0.1", 1307 | "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", 1308 | "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=" 1309 | }, 1310 | "signal-exit": { 1311 | "version": "3.0.2", 1312 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1313 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 1314 | }, 1315 | "simple-concat": { 1316 | "version": "1.0.0", 1317 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", 1318 | "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" 1319 | }, 1320 | "source-map": { 1321 | "version": "0.6.1", 1322 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1323 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1324 | "optional": true 1325 | }, 1326 | "sshpk": { 1327 | "version": "1.16.1", 1328 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 1329 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 1330 | "requires": { 1331 | "asn1": "~0.2.3", 1332 | "assert-plus": "^1.0.0", 1333 | "bcrypt-pbkdf": "^1.0.0", 1334 | "dashdash": "^1.12.0", 1335 | "ecc-jsbn": "~0.1.1", 1336 | "getpass": "^0.1.1", 1337 | "jsbn": "~0.1.0", 1338 | "safer-buffer": "^2.0.2", 1339 | "tweetnacl": "~0.14.0" 1340 | }, 1341 | "dependencies": { 1342 | "assert-plus": { 1343 | "version": "1.0.0", 1344 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1345 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 1346 | } 1347 | } 1348 | }, 1349 | "stack-trace": { 1350 | "version": "0.0.9", 1351 | "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", 1352 | "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=" 1353 | }, 1354 | "static-eval": { 1355 | "version": "2.0.5", 1356 | "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.5.tgz", 1357 | "integrity": "sha512-nNbV6LbGtMBgv7e9LFkt5JV8RVlRsyJrphfAt9tOtBBW/SfnzZDf2KnS72an8e434A+9e/BmJuTxeGPvrAK7KA==", 1358 | "requires": { 1359 | "escodegen": "^1.11.1" 1360 | } 1361 | }, 1362 | "stream-shift": { 1363 | "version": "1.0.1", 1364 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", 1365 | "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" 1366 | }, 1367 | "string-width": { 1368 | "version": "1.0.2", 1369 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1370 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1371 | "requires": { 1372 | "code-point-at": "^1.0.0", 1373 | "is-fullwidth-code-point": "^1.0.0", 1374 | "strip-ansi": "^3.0.0" 1375 | } 1376 | }, 1377 | "string_decoder": { 1378 | "version": "1.0.3", 1379 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 1380 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 1381 | "requires": { 1382 | "safe-buffer": "~5.1.0" 1383 | } 1384 | }, 1385 | "strip-ansi": { 1386 | "version": "3.0.1", 1387 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1388 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1389 | "requires": { 1390 | "ansi-regex": "^2.0.0" 1391 | } 1392 | }, 1393 | "strip-json-comments": { 1394 | "version": "2.0.1", 1395 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1396 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 1397 | }, 1398 | "through2": { 1399 | "version": "2.0.5", 1400 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 1401 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 1402 | "requires": { 1403 | "readable-stream": "~2.3.6", 1404 | "xtend": "~4.0.1" 1405 | }, 1406 | "dependencies": { 1407 | "process-nextick-args": { 1408 | "version": "2.0.1", 1409 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1410 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 1411 | }, 1412 | "readable-stream": { 1413 | "version": "2.3.7", 1414 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 1415 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 1416 | "requires": { 1417 | "core-util-is": "~1.0.0", 1418 | "inherits": "~2.0.3", 1419 | "isarray": "~1.0.0", 1420 | "process-nextick-args": "~2.0.0", 1421 | "safe-buffer": "~5.1.1", 1422 | "string_decoder": "~1.1.1", 1423 | "util-deprecate": "~1.0.1" 1424 | } 1425 | }, 1426 | "string_decoder": { 1427 | "version": "1.1.1", 1428 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1429 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1430 | "requires": { 1431 | "safe-buffer": "~5.1.0" 1432 | } 1433 | } 1434 | } 1435 | }, 1436 | "tunnel-agent": { 1437 | "version": "0.6.0", 1438 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1439 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1440 | "requires": { 1441 | "safe-buffer": "^5.0.1" 1442 | } 1443 | }, 1444 | "tweetnacl": { 1445 | "version": "0.14.5", 1446 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1447 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 1448 | }, 1449 | "type-check": { 1450 | "version": "0.3.2", 1451 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 1452 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 1453 | "requires": { 1454 | "prelude-ls": "~1.1.2" 1455 | } 1456 | }, 1457 | "typedarray": { 1458 | "version": "0.0.6", 1459 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1460 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 1461 | }, 1462 | "uri-js": { 1463 | "version": "4.2.2", 1464 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 1465 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 1466 | "requires": { 1467 | "punycode": "^2.1.0" 1468 | }, 1469 | "dependencies": { 1470 | "punycode": { 1471 | "version": "2.1.1", 1472 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1473 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 1474 | } 1475 | } 1476 | }, 1477 | "util-deprecate": { 1478 | "version": "1.0.2", 1479 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1480 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1481 | }, 1482 | "verror": { 1483 | "version": "1.10.0", 1484 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1485 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1486 | "requires": { 1487 | "assert-plus": "^1.0.0", 1488 | "core-util-is": "1.0.2", 1489 | "extsprintf": "^1.2.0" 1490 | }, 1491 | "dependencies": { 1492 | "assert-plus": { 1493 | "version": "1.0.0", 1494 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1495 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 1496 | } 1497 | } 1498 | }, 1499 | "which-pm-runs": { 1500 | "version": "1.0.0", 1501 | "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", 1502 | "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" 1503 | }, 1504 | "wide-align": { 1505 | "version": "1.1.2", 1506 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", 1507 | "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", 1508 | "requires": { 1509 | "string-width": "^1.0.2" 1510 | } 1511 | }, 1512 | "word-wrap": { 1513 | "version": "1.2.3", 1514 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1515 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" 1516 | }, 1517 | "wrappy": { 1518 | "version": "1.0.2", 1519 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1520 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1521 | }, 1522 | "xtend": { 1523 | "version": "4.0.1", 1524 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 1525 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 1526 | }, 1527 | "yallist": { 1528 | "version": "3.1.1", 1529 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 1530 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" 1531 | } 1532 | } 1533 | } 1534 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "noisemaker", 3 | "version": "0.1.13", 4 | "description": "Flimshaw's Tileable Perlin Noise Generator", 5 | "scripts": { 6 | "start": "node index.js" 7 | }, 8 | "repository": "flimshaw/noisemaker", 9 | "author": { 10 | "name": "Charlie Hoey", 11 | "email": "me@charliehoey.com" 12 | }, 13 | "bin": { 14 | "noisemaker": "./index.js" 15 | }, 16 | "license": "MIT", 17 | "semistandard": { 18 | "ignore": [ 19 | "**/vendor/**" 20 | ] 21 | }, 22 | "dependencies": { 23 | "gl": "^4.5.0", 24 | "glsl-noise": "0.0.0", 25 | "glslify": "^7.0.0", 26 | "minimist": "^1.2.5", 27 | "pngjs": "^3.3.0" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /shaders/default.frag: -------------------------------------------------------------------------------- 1 | precision highp float; 2 | #pragma glslify: cnoise4 = require(glsl-noise/classic/4d) 3 | uniform vec2 uResolution; 4 | uniform float uTime; 5 | uniform vec2 uSeed; 6 | uniform float uNoiseScale; 7 | 8 | #define NOISE_SCALE 1. 9 | #define OCTAVES 16 10 | #define PI 3.1415 11 | 12 | float rand(float n){return fract(sin(n) * 43758.5453123);} 13 | 14 | float getNoise(vec2 uv, float scale, vec2 seed) { 15 | float x1 = -(uNoiseScale * scale) + seed.x; 16 | float y1 = -(uNoiseScale * scale) + seed.y; 17 | float x2 = (uNoiseScale * scale) + seed.x; 18 | float y2 = (uNoiseScale * scale) + seed.y; 19 | 20 | float dx = (x2-x1); 21 | float dy = (y2-y1); 22 | 23 | float dxPi = dx/(2.0*PI); 24 | float dyPi = dy/(2.0*PI); 25 | 26 | float s = uv.x; 27 | float t = uv.y; 28 | 29 | float nx = x1 + cos(s*2.0*PI)*dxPi; 30 | float ny = y1 + cos(t*2.0*PI)*dyPi; 31 | float nz = x1 + sin(s*2.0*PI)*dxPi; 32 | float nw = y1 + sin(t*2.0*PI)*dyPi; 33 | 34 | float r = cnoise4(vec4(nx, ny, nz, nw)); 35 | return r + .25; 36 | } 37 | 38 | float OctavePerlin(vec2 uv, int octaves, float persistence, vec2 seed) { 39 | float total = 0.0; 40 | float frequency = .5; 41 | float amplitude = 1.0; 42 | float maxValue = 0.0; // Used for normalizing result to 0.0 - 1.0 43 | for(int i=0;i= 4.0) break; 30 | } 31 | 32 | } 33 | --------------------------------------------------------------------------------