├── .gitignore ├── README.md ├── index.d.ts ├── index.js ├── kernel.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # @gpujs/expo-gl - A GPU.js extender for use with React Native's Expo library 2 | 3 | This package allows you to use [GPU.js](gpu.rocks) with Expo to get a native GPGPU. 4 | 5 | ## Installation 6 | 1. Setup Expo - https://docs.expo.io/versions/latest/introduction/installation/ 7 | 2. Add the following to use `@gpujs/expo-gl`: 8 | ```js 9 | import { GLView } from 'expo-gl'; 10 | import { GPU } from '@gpujs/expo-gl'; 11 | GLView.createContextAsync() 12 | .then(context => { 13 | const gpu = new GPU({ context }); 14 | const kernel = gpu.createKernel(kernelFunctionHere, kernelOptionsHere); 15 | kernel(); 16 | }); 17 | ``` 18 | 3. Visit https://github.com/gpujs/gpu.js for documentation on `kernelFunctionHere`, `kernelOptionsHere`, as well as the api. 19 | 4. Run your expo from Android or iOS and have native GPGPU support! 20 | 5. Have fun! 21 | 22 | 23 | ## Example 24 | ```js 25 | import { GLView } from 'expo-gl'; 26 | import { GPU } from '@gpujs/expo-gl'; 27 | GLView.createContextAsync() 28 | .then(context => { 29 | const gpu = new GPU({ context }); 30 | const kernel = gpu.createKernel(function() { 31 | return 1; 32 | }, { output: [1], debug: true }); 33 | console.log(kernel()); 34 | gpu.destroy(); 35 | }); 36 | ``` 37 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | import { WebGL2Kernel } from 'gpu.js'; 2 | export * from 'gpu.js'; 3 | 4 | export class ExpoGLKernel extends WebGL2Kernel { 5 | 6 | } -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const { GPU: GPUBase } = require('gpu.js'); 2 | const { ExpoGLKernel } = require('./kernel'); 3 | 4 | class GPU extends GPUBase { 5 | static get isWebGL2Supported() { 6 | return true; 7 | } 8 | static get isWebGLSupported() { 9 | return false; 10 | } 11 | chooseKernel() { 12 | if (!ExpoGLKernel.isSupported) { 13 | throw new Error('ExpoGLKernel kernel is not supported'); 14 | } 15 | return this.Kernel = ExpoGLKernel; 16 | } 17 | } 18 | 19 | module.exports = { 20 | GPU 21 | }; 22 | -------------------------------------------------------------------------------- /kernel.js: -------------------------------------------------------------------------------- 1 | const { WebGL2Kernel } = require('gpu.js/src/backend/web-gl2/kernel'); 2 | const { GLView } = require('expo-gl'); 3 | 4 | let isSupported = null; 5 | let testContext = null; 6 | let testCanvas = {}; // not yet supported 7 | let testExtensions = null; 8 | let features = null; 9 | 10 | GLView.createContextAsync() 11 | .then(context => testContext = context); 12 | 13 | class ExpoGLKernel extends WebGL2Kernel { 14 | static get isSupported() { 15 | if (isSupported !== null) { 16 | return isSupported; 17 | } 18 | this.setupFeatureChecks(); 19 | isSupported = this.isContextMatch(testContext); 20 | return isSupported; 21 | } 22 | 23 | static get testContext() { 24 | return testContext; 25 | } 26 | 27 | static get testCanvas() { 28 | return testCanvas; 29 | } 30 | 31 | static setupFeatureChecks() { 32 | if (!testContext || !testContext.getExtension) return; 33 | testExtensions = { 34 | EXT_color_buffer_float: testContext.getExtension('EXT_color_buffer_float'), 35 | OES_texture_float_linear: testContext.getExtension('OES_texture_float_linear'), 36 | }; 37 | features = this.getFeatures(); 38 | } 39 | 40 | static getFeatures() { 41 | const gl = this.testContext; 42 | return Object.freeze({ 43 | isFloatRead: this.getIsFloatRead(), 44 | isIntegerDivisionAccurate: this.getIsIntegerDivisionAccurate(), 45 | kernelMap: true, 46 | isTextureFloat: true, 47 | channelCount: this.getChannelCount(), 48 | maxTextureSize: this.getMaxTextureSize(), 49 | lowIntPrecision: gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_INT), 50 | lowFloatPrecision: gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT), 51 | mediumIntPrecision: gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_INT), 52 | mediumFloatPrecision: gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT), 53 | highIntPrecision: gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_INT), 54 | highFloatPrecision: gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT), 55 | }); 56 | } 57 | 58 | static getChannelCount() { 59 | return testContext.getParameter(testContext.MAX_DRAW_BUFFERS); 60 | } 61 | 62 | static getMaxTextureSize() { 63 | return testContext.getParameter(testContext.MAX_TEXTURE_SIZE); 64 | } 65 | 66 | static get features() { 67 | return features; 68 | } 69 | 70 | constructor(source, settings) { 71 | super(source, settings); 72 | this.warnVarUsage = false; 73 | } 74 | 75 | initContext() { 76 | throw new Error('No context defined and ExpoGL instantiates them asynchronously'); 77 | } 78 | initCanvas() { 79 | return testCanvas; 80 | } 81 | } 82 | 83 | module.exports = { 84 | ExpoGLKernel 85 | }; 86 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gpujs/expo-gl", 3 | "version": "0.0.10", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "abbrev": { 8 | "version": "1.1.1", 9 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 10 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 11 | }, 12 | "acorn": { 13 | "version": "7.1.1", 14 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", 15 | "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==" 16 | }, 17 | "ajv": { 18 | "version": "6.12.0", 19 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", 20 | "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", 21 | "requires": { 22 | "fast-deep-equal": "^3.1.1", 23 | "fast-json-stable-stringify": "^2.0.0", 24 | "json-schema-traverse": "^0.4.1", 25 | "uri-js": "^4.2.2" 26 | } 27 | }, 28 | "ansi-regex": { 29 | "version": "2.1.1", 30 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 31 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 32 | }, 33 | "aproba": { 34 | "version": "1.2.0", 35 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", 36 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" 37 | }, 38 | "are-we-there-yet": { 39 | "version": "1.1.5", 40 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", 41 | "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", 42 | "requires": { 43 | "delegates": "^1.0.0", 44 | "readable-stream": "^2.0.6" 45 | }, 46 | "dependencies": { 47 | "isarray": { 48 | "version": "1.0.0", 49 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 50 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 51 | }, 52 | "readable-stream": { 53 | "version": "2.3.7", 54 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 55 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 56 | "requires": { 57 | "core-util-is": "~1.0.0", 58 | "inherits": "~2.0.3", 59 | "isarray": "~1.0.0", 60 | "process-nextick-args": "~2.0.0", 61 | "safe-buffer": "~5.1.1", 62 | "string_decoder": "~1.1.1", 63 | "util-deprecate": "~1.0.1" 64 | } 65 | }, 66 | "string_decoder": { 67 | "version": "1.1.1", 68 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 69 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 70 | "requires": { 71 | "safe-buffer": "~5.1.0" 72 | } 73 | } 74 | } 75 | }, 76 | "asn1": { 77 | "version": "0.2.4", 78 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 79 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 80 | "requires": { 81 | "safer-buffer": "~2.1.0" 82 | } 83 | }, 84 | "assert-plus": { 85 | "version": "1.0.0", 86 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 87 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 88 | }, 89 | "asynckit": { 90 | "version": "0.4.0", 91 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 92 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 93 | }, 94 | "aws-sign2": { 95 | "version": "0.7.0", 96 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 97 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 98 | }, 99 | "aws4": { 100 | "version": "1.9.1", 101 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", 102 | "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" 103 | }, 104 | "balanced-match": { 105 | "version": "1.0.0", 106 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 107 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 108 | }, 109 | "bcrypt-pbkdf": { 110 | "version": "1.0.2", 111 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 112 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 113 | "requires": { 114 | "tweetnacl": "^0.14.3" 115 | } 116 | }, 117 | "bindings": { 118 | "version": "1.5.0", 119 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", 120 | "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", 121 | "requires": { 122 | "file-uri-to-path": "1.0.0" 123 | } 124 | }, 125 | "bit-twiddle": { 126 | "version": "1.0.2", 127 | "resolved": "https://registry.npmjs.org/bit-twiddle/-/bit-twiddle-1.0.2.tgz", 128 | "integrity": "sha1-DGwfq+KyPRcXPZpht7cJPrnhdp4=" 129 | }, 130 | "bl": { 131 | "version": "3.0.0", 132 | "resolved": "https://registry.npmjs.org/bl/-/bl-3.0.0.tgz", 133 | "integrity": "sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==", 134 | "requires": { 135 | "readable-stream": "^3.0.1" 136 | }, 137 | "dependencies": { 138 | "readable-stream": { 139 | "version": "3.6.0", 140 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 141 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 142 | "requires": { 143 | "inherits": "^2.0.3", 144 | "string_decoder": "^1.1.1", 145 | "util-deprecate": "^1.0.1" 146 | } 147 | }, 148 | "safe-buffer": { 149 | "version": "5.2.0", 150 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 151 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 152 | }, 153 | "string_decoder": { 154 | "version": "1.3.0", 155 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 156 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 157 | "requires": { 158 | "safe-buffer": "~5.2.0" 159 | } 160 | } 161 | } 162 | }, 163 | "brace-expansion": { 164 | "version": "1.1.11", 165 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 166 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 167 | "requires": { 168 | "balanced-match": "^1.0.0", 169 | "concat-map": "0.0.1" 170 | } 171 | }, 172 | "caseless": { 173 | "version": "0.12.0", 174 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 175 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 176 | }, 177 | "chownr": { 178 | "version": "1.1.4", 179 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 180 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" 181 | }, 182 | "code-point-at": { 183 | "version": "1.1.0", 184 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 185 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 186 | }, 187 | "combined-stream": { 188 | "version": "1.0.8", 189 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 190 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 191 | "requires": { 192 | "delayed-stream": "~1.0.0" 193 | } 194 | }, 195 | "concat-map": { 196 | "version": "0.0.1", 197 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 198 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 199 | }, 200 | "console-control-strings": { 201 | "version": "1.1.0", 202 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 203 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" 204 | }, 205 | "core-util-is": { 206 | "version": "1.0.2", 207 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 208 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 209 | }, 210 | "dashdash": { 211 | "version": "1.14.1", 212 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 213 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 214 | "requires": { 215 | "assert-plus": "^1.0.0" 216 | } 217 | }, 218 | "decompress-response": { 219 | "version": "4.2.1", 220 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", 221 | "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", 222 | "requires": { 223 | "mimic-response": "^2.0.0" 224 | } 225 | }, 226 | "deep-extend": { 227 | "version": "0.6.0", 228 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 229 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" 230 | }, 231 | "delayed-stream": { 232 | "version": "1.0.0", 233 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 234 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 235 | }, 236 | "delegates": { 237 | "version": "1.0.0", 238 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 239 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" 240 | }, 241 | "detect-libc": { 242 | "version": "1.0.3", 243 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 244 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" 245 | }, 246 | "ecc-jsbn": { 247 | "version": "0.1.2", 248 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 249 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 250 | "requires": { 251 | "jsbn": "~0.1.0", 252 | "safer-buffer": "^2.1.0" 253 | } 254 | }, 255 | "end-of-stream": { 256 | "version": "1.4.4", 257 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 258 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 259 | "requires": { 260 | "once": "^1.4.0" 261 | } 262 | }, 263 | "expand-template": { 264 | "version": "2.0.3", 265 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", 266 | "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" 267 | }, 268 | "expo-gl": { 269 | "version": "8.0.0", 270 | "resolved": "https://registry.npmjs.org/expo-gl/-/expo-gl-8.0.0.tgz", 271 | "integrity": "sha512-JdyRPbzEhh6YrJaxz3uFtvJiKESmnkDHBfxXStW9n5DOunUe9qLDkg7GJwBEmSs5FxR6V3ycQmDfFQ+OPOgQ1A==", 272 | "requires": { 273 | "expo-gl-cpp": "~8.0.0", 274 | "prop-types": "^15.7.2" 275 | } 276 | }, 277 | "expo-gl-cpp": { 278 | "version": "8.0.0", 279 | "resolved": "https://registry.npmjs.org/expo-gl-cpp/-/expo-gl-cpp-8.0.0.tgz", 280 | "integrity": "sha512-ltBx609nFYx4vd4Wm0/w9QPZEMD7yq1VU7gbsMcKqOAJzR/x/uXjteh8TtysGhUsheMZz2t2eAMrUaWzAQNcgQ==" 281 | }, 282 | "extend": { 283 | "version": "3.0.2", 284 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 285 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 286 | }, 287 | "extsprintf": { 288 | "version": "1.3.0", 289 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 290 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 291 | }, 292 | "fast-deep-equal": { 293 | "version": "3.1.1", 294 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", 295 | "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" 296 | }, 297 | "fast-json-stable-stringify": { 298 | "version": "2.1.0", 299 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 300 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 301 | }, 302 | "file-uri-to-path": { 303 | "version": "1.0.0", 304 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 305 | "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" 306 | }, 307 | "forever-agent": { 308 | "version": "0.6.1", 309 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 310 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 311 | }, 312 | "form-data": { 313 | "version": "2.3.3", 314 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 315 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 316 | "requires": { 317 | "asynckit": "^0.4.0", 318 | "combined-stream": "^1.0.6", 319 | "mime-types": "^2.1.12" 320 | } 321 | }, 322 | "fs-constants": { 323 | "version": "1.0.0", 324 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 325 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" 326 | }, 327 | "fs-minipass": { 328 | "version": "1.2.7", 329 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", 330 | "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", 331 | "requires": { 332 | "minipass": "^2.6.0" 333 | } 334 | }, 335 | "fs.realpath": { 336 | "version": "1.0.0", 337 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 338 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 339 | }, 340 | "gauge": { 341 | "version": "2.7.4", 342 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", 343 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", 344 | "requires": { 345 | "aproba": "^1.0.3", 346 | "console-control-strings": "^1.0.0", 347 | "has-unicode": "^2.0.0", 348 | "object-assign": "^4.1.0", 349 | "signal-exit": "^3.0.0", 350 | "string-width": "^1.0.1", 351 | "strip-ansi": "^3.0.1", 352 | "wide-align": "^1.1.0" 353 | } 354 | }, 355 | "getpass": { 356 | "version": "0.1.7", 357 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 358 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 359 | "requires": { 360 | "assert-plus": "^1.0.0" 361 | } 362 | }, 363 | "github-from-package": { 364 | "version": "0.0.0", 365 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", 366 | "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" 367 | }, 368 | "gl": { 369 | "version": "4.4.1", 370 | "resolved": "https://registry.npmjs.org/gl/-/gl-4.4.1.tgz", 371 | "integrity": "sha512-2ZG8/qUAQ6WRgPzflsiLbx1KBgrKra0T0GJeG6xyxzNYvUOoeFFPIJJZ/e9X089yag+4NcrzD0ql7PfbJCuuqQ==", 372 | "requires": { 373 | "bindings": "^1.5.0", 374 | "bit-twiddle": "^1.0.2", 375 | "glsl-tokenizer": "^2.0.2", 376 | "nan": "^2.14.0", 377 | "node-gyp": "^4.0.0", 378 | "prebuild-install": "^5.1.0" 379 | } 380 | }, 381 | "gl-wiretap": { 382 | "version": "0.6.2", 383 | "resolved": "https://registry.npmjs.org/gl-wiretap/-/gl-wiretap-0.6.2.tgz", 384 | "integrity": "sha512-fxy1XGiPkfzK+T3XKDbY7yaqMBmozCGvAFyTwaZA3imeZH83w7Hr3r3bYlMRWIyzMI/lDUvUMM/92LE2OwqFyQ==" 385 | }, 386 | "glob": { 387 | "version": "7.1.6", 388 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 389 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 390 | "requires": { 391 | "fs.realpath": "^1.0.0", 392 | "inflight": "^1.0.4", 393 | "inherits": "2", 394 | "minimatch": "^3.0.4", 395 | "once": "^1.3.0", 396 | "path-is-absolute": "^1.0.0" 397 | } 398 | }, 399 | "glsl-tokenizer": { 400 | "version": "2.1.5", 401 | "resolved": "https://registry.npmjs.org/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz", 402 | "integrity": "sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==", 403 | "requires": { 404 | "through2": "^0.6.3" 405 | } 406 | }, 407 | "gpu-mock.js": { 408 | "version": "1.1.1", 409 | "resolved": "https://registry.npmjs.org/gpu-mock.js/-/gpu-mock.js-1.1.1.tgz", 410 | "integrity": "sha512-BmoRk9nbMaxkrwzTJp4M0iuwIbzNEXt6tlBZ5+ZYzaGH9VWu5Nhn1Q1CBusCam3d8u3FfVEFf3Ueo8DocUCbUw==" 411 | }, 412 | "gpu.js": { 413 | "version": "2.6.9", 414 | "resolved": "https://registry.npmjs.org/gpu.js/-/gpu.js-2.6.9.tgz", 415 | "integrity": "sha512-+9db5qJ253Y5rvcMVdx4lwUEUyhuqDo8M9pCzlyio9/MlgMC4UDBAJUTnPJdSp/N0LhEKeM5FUQLaJXiYLkECQ==", 416 | "requires": { 417 | "acorn": "^7.1.0", 418 | "gl": "^4.4.1", 419 | "gl-wiretap": "^0.6.2", 420 | "gpu-mock.js": "^1.1.1" 421 | } 422 | }, 423 | "graceful-fs": { 424 | "version": "4.2.3", 425 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", 426 | "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" 427 | }, 428 | "har-schema": { 429 | "version": "2.0.0", 430 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 431 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 432 | }, 433 | "har-validator": { 434 | "version": "5.1.3", 435 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 436 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 437 | "requires": { 438 | "ajv": "^6.5.5", 439 | "har-schema": "^2.0.0" 440 | } 441 | }, 442 | "has-unicode": { 443 | "version": "2.0.1", 444 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 445 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" 446 | }, 447 | "http-signature": { 448 | "version": "1.2.0", 449 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 450 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 451 | "requires": { 452 | "assert-plus": "^1.0.0", 453 | "jsprim": "^1.2.2", 454 | "sshpk": "^1.7.0" 455 | } 456 | }, 457 | "inflight": { 458 | "version": "1.0.6", 459 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 460 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 461 | "requires": { 462 | "once": "^1.3.0", 463 | "wrappy": "1" 464 | } 465 | }, 466 | "inherits": { 467 | "version": "2.0.4", 468 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 469 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 470 | }, 471 | "ini": { 472 | "version": "1.3.5", 473 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 474 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" 475 | }, 476 | "is-fullwidth-code-point": { 477 | "version": "1.0.0", 478 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 479 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 480 | "requires": { 481 | "number-is-nan": "^1.0.0" 482 | } 483 | }, 484 | "is-typedarray": { 485 | "version": "1.0.0", 486 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 487 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 488 | }, 489 | "isarray": { 490 | "version": "0.0.1", 491 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 492 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 493 | }, 494 | "isexe": { 495 | "version": "2.0.0", 496 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 497 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 498 | }, 499 | "isstream": { 500 | "version": "0.1.2", 501 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 502 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 503 | }, 504 | "js-tokens": { 505 | "version": "4.0.0", 506 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 507 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 508 | }, 509 | "jsbn": { 510 | "version": "0.1.1", 511 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 512 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 513 | }, 514 | "json-schema": { 515 | "version": "0.2.3", 516 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 517 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 518 | }, 519 | "json-schema-traverse": { 520 | "version": "0.4.1", 521 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 522 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 523 | }, 524 | "json-stringify-safe": { 525 | "version": "5.0.1", 526 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 527 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 528 | }, 529 | "jsprim": { 530 | "version": "1.4.1", 531 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 532 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 533 | "requires": { 534 | "assert-plus": "1.0.0", 535 | "extsprintf": "1.3.0", 536 | "json-schema": "0.2.3", 537 | "verror": "1.10.0" 538 | } 539 | }, 540 | "loose-envify": { 541 | "version": "1.4.0", 542 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 543 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 544 | "requires": { 545 | "js-tokens": "^3.0.0 || ^4.0.0" 546 | } 547 | }, 548 | "mime-db": { 549 | "version": "1.43.0", 550 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", 551 | "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" 552 | }, 553 | "mime-types": { 554 | "version": "2.1.26", 555 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", 556 | "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", 557 | "requires": { 558 | "mime-db": "1.43.0" 559 | } 560 | }, 561 | "mimic-response": { 562 | "version": "2.1.0", 563 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", 564 | "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" 565 | }, 566 | "minimatch": { 567 | "version": "3.0.4", 568 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 569 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 570 | "requires": { 571 | "brace-expansion": "^1.1.7" 572 | } 573 | }, 574 | "minimist": { 575 | "version": "0.0.8", 576 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 577 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 578 | }, 579 | "minipass": { 580 | "version": "2.9.0", 581 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", 582 | "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", 583 | "requires": { 584 | "safe-buffer": "^5.1.2", 585 | "yallist": "^3.0.0" 586 | } 587 | }, 588 | "minizlib": { 589 | "version": "1.3.3", 590 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", 591 | "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", 592 | "requires": { 593 | "minipass": "^2.9.0" 594 | } 595 | }, 596 | "mkdirp": { 597 | "version": "0.5.1", 598 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 599 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 600 | "requires": { 601 | "minimist": "0.0.8" 602 | } 603 | }, 604 | "nan": { 605 | "version": "2.14.0", 606 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", 607 | "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" 608 | }, 609 | "napi-build-utils": { 610 | "version": "1.0.1", 611 | "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz", 612 | "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==" 613 | }, 614 | "node-abi": { 615 | "version": "2.15.0", 616 | "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.15.0.tgz", 617 | "integrity": "sha512-FeLpTS0F39U7hHZU1srAK4Vx+5AHNVOTP+hxBNQknR/54laTHSFIJkDWDqiquY1LeLUgTfPN7sLPhMubx0PLAg==", 618 | "requires": { 619 | "semver": "^5.4.1" 620 | }, 621 | "dependencies": { 622 | "semver": { 623 | "version": "5.7.1", 624 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 625 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 626 | } 627 | } 628 | }, 629 | "node-gyp": { 630 | "version": "4.0.0", 631 | "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-4.0.0.tgz", 632 | "integrity": "sha512-2XiryJ8sICNo6ej8d0idXDEMKfVfFK7kekGCtJAuelGsYHQxhj13KTf95swTCN2dZ/4lTfZ84Fu31jqJEEgjWA==", 633 | "requires": { 634 | "glob": "^7.0.3", 635 | "graceful-fs": "^4.1.2", 636 | "mkdirp": "^0.5.0", 637 | "nopt": "2 || 3", 638 | "npmlog": "0 || 1 || 2 || 3 || 4", 639 | "osenv": "0", 640 | "request": "^2.87.0", 641 | "rimraf": "2", 642 | "semver": "~5.3.0", 643 | "tar": "^4.4.8", 644 | "which": "1" 645 | } 646 | }, 647 | "noop-logger": { 648 | "version": "0.1.1", 649 | "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", 650 | "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" 651 | }, 652 | "nopt": { 653 | "version": "3.0.6", 654 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", 655 | "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", 656 | "requires": { 657 | "abbrev": "1" 658 | } 659 | }, 660 | "npmlog": { 661 | "version": "4.1.2", 662 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", 663 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 664 | "requires": { 665 | "are-we-there-yet": "~1.1.2", 666 | "console-control-strings": "~1.1.0", 667 | "gauge": "~2.7.3", 668 | "set-blocking": "~2.0.0" 669 | } 670 | }, 671 | "number-is-nan": { 672 | "version": "1.0.1", 673 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 674 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 675 | }, 676 | "oauth-sign": { 677 | "version": "0.9.0", 678 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 679 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 680 | }, 681 | "object-assign": { 682 | "version": "4.1.1", 683 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 684 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 685 | }, 686 | "once": { 687 | "version": "1.4.0", 688 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 689 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 690 | "requires": { 691 | "wrappy": "1" 692 | } 693 | }, 694 | "os-homedir": { 695 | "version": "1.0.2", 696 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 697 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" 698 | }, 699 | "os-tmpdir": { 700 | "version": "1.0.2", 701 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 702 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 703 | }, 704 | "osenv": { 705 | "version": "0.1.5", 706 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", 707 | "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", 708 | "requires": { 709 | "os-homedir": "^1.0.0", 710 | "os-tmpdir": "^1.0.0" 711 | } 712 | }, 713 | "path-is-absolute": { 714 | "version": "1.0.1", 715 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 716 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 717 | }, 718 | "performance-now": { 719 | "version": "2.1.0", 720 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 721 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 722 | }, 723 | "prebuild-install": { 724 | "version": "5.3.3", 725 | "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz", 726 | "integrity": "sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g==", 727 | "requires": { 728 | "detect-libc": "^1.0.3", 729 | "expand-template": "^2.0.3", 730 | "github-from-package": "0.0.0", 731 | "minimist": "^1.2.0", 732 | "mkdirp": "^0.5.1", 733 | "napi-build-utils": "^1.0.1", 734 | "node-abi": "^2.7.0", 735 | "noop-logger": "^0.1.1", 736 | "npmlog": "^4.0.1", 737 | "pump": "^3.0.0", 738 | "rc": "^1.2.7", 739 | "simple-get": "^3.0.3", 740 | "tar-fs": "^2.0.0", 741 | "tunnel-agent": "^0.6.0", 742 | "which-pm-runs": "^1.0.0" 743 | }, 744 | "dependencies": { 745 | "minimist": { 746 | "version": "1.2.0", 747 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 748 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 749 | } 750 | } 751 | }, 752 | "process-nextick-args": { 753 | "version": "2.0.1", 754 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 755 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 756 | }, 757 | "prop-types": { 758 | "version": "15.7.2", 759 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", 760 | "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", 761 | "requires": { 762 | "loose-envify": "^1.4.0", 763 | "object-assign": "^4.1.1", 764 | "react-is": "^16.8.1" 765 | } 766 | }, 767 | "psl": { 768 | "version": "1.7.0", 769 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", 770 | "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" 771 | }, 772 | "pump": { 773 | "version": "3.0.0", 774 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 775 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 776 | "requires": { 777 | "end-of-stream": "^1.1.0", 778 | "once": "^1.3.1" 779 | } 780 | }, 781 | "punycode": { 782 | "version": "2.1.1", 783 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 784 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 785 | }, 786 | "qs": { 787 | "version": "6.5.2", 788 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 789 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 790 | }, 791 | "rc": { 792 | "version": "1.2.8", 793 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 794 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 795 | "requires": { 796 | "deep-extend": "^0.6.0", 797 | "ini": "~1.3.0", 798 | "minimist": "^1.2.0", 799 | "strip-json-comments": "~2.0.1" 800 | }, 801 | "dependencies": { 802 | "minimist": { 803 | "version": "1.2.0", 804 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 805 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 806 | } 807 | } 808 | }, 809 | "react-is": { 810 | "version": "16.13.0", 811 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.0.tgz", 812 | "integrity": "sha512-GFMtL0vHkiBv9HluwNZTggSn/sCyEt9n02aM0dSAjGGyqyNlAyftYm4phPxdvCigG15JreC5biwxCgTAJZ7yAA==" 813 | }, 814 | "readable-stream": { 815 | "version": "1.0.34", 816 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 817 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 818 | "requires": { 819 | "core-util-is": "~1.0.0", 820 | "inherits": "~2.0.1", 821 | "isarray": "0.0.1", 822 | "string_decoder": "~0.10.x" 823 | } 824 | }, 825 | "request": { 826 | "version": "2.88.2", 827 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 828 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 829 | "requires": { 830 | "aws-sign2": "~0.7.0", 831 | "aws4": "^1.8.0", 832 | "caseless": "~0.12.0", 833 | "combined-stream": "~1.0.6", 834 | "extend": "~3.0.2", 835 | "forever-agent": "~0.6.1", 836 | "form-data": "~2.3.2", 837 | "har-validator": "~5.1.3", 838 | "http-signature": "~1.2.0", 839 | "is-typedarray": "~1.0.0", 840 | "isstream": "~0.1.2", 841 | "json-stringify-safe": "~5.0.1", 842 | "mime-types": "~2.1.19", 843 | "oauth-sign": "~0.9.0", 844 | "performance-now": "^2.1.0", 845 | "qs": "~6.5.2", 846 | "safe-buffer": "^5.1.2", 847 | "tough-cookie": "~2.5.0", 848 | "tunnel-agent": "^0.6.0", 849 | "uuid": "^3.3.2" 850 | } 851 | }, 852 | "rimraf": { 853 | "version": "2.7.1", 854 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 855 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 856 | "requires": { 857 | "glob": "^7.1.3" 858 | } 859 | }, 860 | "safe-buffer": { 861 | "version": "5.1.2", 862 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 863 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 864 | }, 865 | "safer-buffer": { 866 | "version": "2.1.2", 867 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 868 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 869 | }, 870 | "semver": { 871 | "version": "5.3.0", 872 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", 873 | "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" 874 | }, 875 | "set-blocking": { 876 | "version": "2.0.0", 877 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 878 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 879 | }, 880 | "signal-exit": { 881 | "version": "3.0.2", 882 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 883 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 884 | }, 885 | "simple-concat": { 886 | "version": "1.0.0", 887 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", 888 | "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" 889 | }, 890 | "simple-get": { 891 | "version": "3.1.0", 892 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", 893 | "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", 894 | "requires": { 895 | "decompress-response": "^4.2.0", 896 | "once": "^1.3.1", 897 | "simple-concat": "^1.0.0" 898 | } 899 | }, 900 | "sshpk": { 901 | "version": "1.16.1", 902 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 903 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 904 | "requires": { 905 | "asn1": "~0.2.3", 906 | "assert-plus": "^1.0.0", 907 | "bcrypt-pbkdf": "^1.0.0", 908 | "dashdash": "^1.12.0", 909 | "ecc-jsbn": "~0.1.1", 910 | "getpass": "^0.1.1", 911 | "jsbn": "~0.1.0", 912 | "safer-buffer": "^2.0.2", 913 | "tweetnacl": "~0.14.0" 914 | } 915 | }, 916 | "string-width": { 917 | "version": "1.0.2", 918 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 919 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 920 | "requires": { 921 | "code-point-at": "^1.0.0", 922 | "is-fullwidth-code-point": "^1.0.0", 923 | "strip-ansi": "^3.0.0" 924 | } 925 | }, 926 | "string_decoder": { 927 | "version": "0.10.31", 928 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 929 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 930 | }, 931 | "strip-ansi": { 932 | "version": "3.0.1", 933 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 934 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 935 | "requires": { 936 | "ansi-regex": "^2.0.0" 937 | } 938 | }, 939 | "strip-json-comments": { 940 | "version": "2.0.1", 941 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 942 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 943 | }, 944 | "tar": { 945 | "version": "4.4.13", 946 | "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", 947 | "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", 948 | "requires": { 949 | "chownr": "^1.1.1", 950 | "fs-minipass": "^1.2.5", 951 | "minipass": "^2.8.6", 952 | "minizlib": "^1.2.1", 953 | "mkdirp": "^0.5.0", 954 | "safe-buffer": "^5.1.2", 955 | "yallist": "^3.0.3" 956 | } 957 | }, 958 | "tar-fs": { 959 | "version": "2.0.0", 960 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", 961 | "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", 962 | "requires": { 963 | "chownr": "^1.1.1", 964 | "mkdirp": "^0.5.1", 965 | "pump": "^3.0.0", 966 | "tar-stream": "^2.0.0" 967 | } 968 | }, 969 | "tar-stream": { 970 | "version": "2.1.0", 971 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz", 972 | "integrity": "sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==", 973 | "requires": { 974 | "bl": "^3.0.0", 975 | "end-of-stream": "^1.4.1", 976 | "fs-constants": "^1.0.0", 977 | "inherits": "^2.0.3", 978 | "readable-stream": "^3.1.1" 979 | }, 980 | "dependencies": { 981 | "readable-stream": { 982 | "version": "3.6.0", 983 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 984 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 985 | "requires": { 986 | "inherits": "^2.0.3", 987 | "string_decoder": "^1.1.1", 988 | "util-deprecate": "^1.0.1" 989 | } 990 | }, 991 | "safe-buffer": { 992 | "version": "5.2.0", 993 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 994 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 995 | }, 996 | "string_decoder": { 997 | "version": "1.3.0", 998 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 999 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1000 | "requires": { 1001 | "safe-buffer": "~5.2.0" 1002 | } 1003 | } 1004 | } 1005 | }, 1006 | "through2": { 1007 | "version": "0.6.5", 1008 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 1009 | "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", 1010 | "requires": { 1011 | "readable-stream": ">=1.0.33-1 <1.1.0-0", 1012 | "xtend": ">=4.0.0 <4.1.0-0" 1013 | } 1014 | }, 1015 | "tough-cookie": { 1016 | "version": "2.5.0", 1017 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 1018 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 1019 | "requires": { 1020 | "psl": "^1.1.28", 1021 | "punycode": "^2.1.1" 1022 | } 1023 | }, 1024 | "tunnel-agent": { 1025 | "version": "0.6.0", 1026 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1027 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1028 | "requires": { 1029 | "safe-buffer": "^5.0.1" 1030 | } 1031 | }, 1032 | "tweetnacl": { 1033 | "version": "0.14.5", 1034 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1035 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 1036 | }, 1037 | "uri-js": { 1038 | "version": "4.2.2", 1039 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 1040 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 1041 | "requires": { 1042 | "punycode": "^2.1.0" 1043 | } 1044 | }, 1045 | "util-deprecate": { 1046 | "version": "1.0.2", 1047 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1048 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1049 | }, 1050 | "uuid": { 1051 | "version": "3.4.0", 1052 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 1053 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 1054 | }, 1055 | "verror": { 1056 | "version": "1.10.0", 1057 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1058 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1059 | "requires": { 1060 | "assert-plus": "^1.0.0", 1061 | "core-util-is": "1.0.2", 1062 | "extsprintf": "^1.2.0" 1063 | } 1064 | }, 1065 | "which": { 1066 | "version": "1.3.1", 1067 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1068 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1069 | "requires": { 1070 | "isexe": "^2.0.0" 1071 | } 1072 | }, 1073 | "which-pm-runs": { 1074 | "version": "1.0.0", 1075 | "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", 1076 | "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" 1077 | }, 1078 | "wide-align": { 1079 | "version": "1.1.3", 1080 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 1081 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 1082 | "requires": { 1083 | "string-width": "^1.0.2 || 2" 1084 | } 1085 | }, 1086 | "wrappy": { 1087 | "version": "1.0.2", 1088 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1089 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1090 | }, 1091 | "xtend": { 1092 | "version": "4.0.2", 1093 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1094 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 1095 | }, 1096 | "yallist": { 1097 | "version": "3.1.1", 1098 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 1099 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" 1100 | } 1101 | } 1102 | } 1103 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gpujs/expo-gl", 3 | "private": false, 4 | "files": [ 5 | "index.js", 6 | "kernel.js", 7 | "index.d.ts" 8 | ], 9 | "version": "0.0.12", 10 | "description": "A GPU.js extender for use with React Native's Expo library", 11 | "main": "./index.js", 12 | "scripts": { 13 | "test": "echo \"Error: no test specified\" && exit 1" 14 | }, 15 | "author": "", 16 | "license": "MIT", 17 | "dependencies": { 18 | "expo-gl": "^8.0.0", 19 | "gpu.js": "^2.6.9" 20 | }, 21 | "repository": { 22 | "type": "git", 23 | "url": "git+https://github.com/gpujs/expo-gl.git" 24 | }, 25 | "typings": "./index.d.ts" 26 | } 27 | --------------------------------------------------------------------------------