From fa16b4c6da5f14d9a1d13f57760c1e1ef5934b90 Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Sun, 25 Jun 2017 14:07:49 -0700 Subject: [PATCH] Upgrade JSZip --- js/skinParser.js | 46 +++++++++++++++++++++++++------------------ package.json | 4 ++-- yarn.lock | 51 ++++++++++++++++++++++++++++++++++++------------ 3 files changed, 67 insertions(+), 34 deletions(-) diff --git a/js/skinParser.js b/js/skinParser.js index 439abf99..04fe8950 100644 --- a/js/skinParser.js +++ b/js/skinParser.js @@ -2,7 +2,15 @@ import SKIN_SPRITES from "./skinSprites"; import JSZip from "../node_modules/jszip/dist/jszip"; // Hack import { parseViscolors, parseIni } from "./utils"; -const bmpUriFromFile = file => `data:image/bmp;base64,${btoa(file.asBinary())}`; +const bmpUriFromBase64 = data64 => `data:image/bmp;base64,${data64}`; +const imgFromUri = uri => + new Promise(resolve => { + const img = new Image(); + img.onload = () => { + resolve(img); + }; + img.src = uri; + }); // "Promisify" processBuffer const getBufferFromFile = file => @@ -10,7 +18,7 @@ const getBufferFromFile = file => file.processBuffer(resolve); }); -const getZipFromBuffer = buffer => new JSZip(buffer); +const getZipFromBuffer = buffer => JSZip.loadAsync(buffer); const getSpriteSheetFilesFromZip = zip => { const spriteObjs = SKIN_SPRITES.map(spriteObj => ({ @@ -22,11 +30,11 @@ const getSpriteSheetFilesFromZip = zip => { // Extract the CSS rules for a given file, and add them to the object const extractCss = spriteObj => - new Promise(resolve => { - const uri = bmpUriFromFile(spriteObj.file); - const img = new Image(); - - img.onload = () => { + spriteObj.file + .async("base64") + .then(bmpUriFromBase64) + .then(imgFromUri) + .then(img => { const canvas = document.createElement("canvas"); const images = {}; spriteObj.sprites.forEach(sprite => { @@ -40,22 +48,22 @@ const extractCss = spriteObj => images[sprite.name] = image; } }); - resolve({ ...spriteObj, images }); - }; - img.src = uri; - }); + return { ...spriteObj, images }; + }); // Extract the color data from a VISCOLOR.TXT file and add it to the object -const extractColors = spriteObj => ({ - ...spriteObj, - colors: parseViscolors(spriteObj.file.asText()) -}); +const extractColors = spriteObj => + spriteObj.file.async("text").then(content => ({ + ...spriteObj, + colors: parseViscolors(content) + })); // Extract the color data from a VISCOLOR.TXT file and add it to the object -const extractPlaylistStyle = spriteObj => ({ - ...spriteObj, - playlistStyle: parseIni(spriteObj.file.asText()) -}); +const extractPlaylistStyle = spriteObj => + spriteObj.file.async("text").then(content => ({ + ...spriteObj, + playlistStyle: parseIni(content) + })); const getSkinDataFromFiles = spriteObjs => Promise.all( diff --git a/package.json b/package.json index 96ec3eba..dedc1889 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "babel-plugin-transform-react-jsx": "^6.8.0", "cardinal-spline-js": "^2.3.6", "classnames": "^2.2.5", - "jszip": "^2.6.0", + "jszip": "^3.1.3", "rc-slider": "^6.3.1", "react": "^15.3.1", "react-dom": "^15.4.2", @@ -77,4 +77,4 @@ "\\.css$": "/js/__mocks__/styleMock.js" } } -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index f14147fc..1e28c032 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1251,6 +1251,10 @@ core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" +core-js@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.3.0.tgz#fab83fbb0b2d8dc85fa636c4b9d34c75420c6d65" + core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -1653,6 +1657,10 @@ es6-map@^0.1.3: es6-symbol "~3.1.1" event-emitter "~0.3.5" +es6-promise@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.0.2.tgz#010d5858423a5f118979665f46486a95c6ee2bb6" + es6-set@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" @@ -2400,6 +2408,10 @@ ignore@^3.2.0: version "3.2.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.6.tgz#26e8da0644be0bb4cb39516f6c79f0e0f4ffe48c" +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3044,11 +3056,15 @@ jsx-ast-utils@^1.3.4: dependencies: object-assign "^4.1.0" -jszip@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-2.6.1.tgz#b88f3a7b2e67a2a048152982c7a3756d9c4828f0" +jszip@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.1.3.tgz#8a920403b2b1651c0fc126be90192d9080957c37" dependencies: + core-js "~2.3.0" + es6-promise "~3.0.2" + lie "~3.1.0" pako "~1.0.2" + readable-stream "~2.0.6" kind-of@^3.0.2: version "3.1.0" @@ -3077,6 +3093,12 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lie@~3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" + dependencies: + immediate "~3.0.5" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -3201,7 +3223,7 @@ memory-fs@^0.4.0, memory-fs@~0.4.1: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.6.0, meow@^3.7.0: +meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" dependencies: @@ -3939,15 +3961,7 @@ prettier@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.4.4.tgz#a8d1447b14c9bf67e6d420dcadd10fb9a4fad65a" -pretty-bytes-cli@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pretty-bytes-cli/-/pretty-bytes-cli-2.0.0.tgz#e705662cffdc9c75291835333bc2f89ad3c033cf" - dependencies: - get-stdin "^5.0.1" - meow "^3.6.0" - pretty-bytes "^4.0.0" - -pretty-bytes@^4.0.0, pretty-bytes@^4.0.2: +pretty-bytes@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" @@ -4164,6 +4178,17 @@ read-pkg@^1.0.0: string_decoder "~0.10.x" util-deprecate "~1.0.1" +readable-stream@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + readdirp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"