diff --git a/README.md b/README.md index b3e4ce5..9556fcc 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ + # ico ![badge](https://github.com/fiahfy/ico/workflows/Node.js%20Package/badge.svg) @@ -19,7 +20,7 @@ import fs from 'fs' import Ico from '@fiahfy/ico' const buf = fs.readFileSync('icon.ico') -const ico = new Ico(buf) +const ico = Ico.from(buf) console.log(ico.fileHeader) // IcoFileHeader { reserved: 0, type: 1, count: 7 } console.log(ico.infoHeaders[0]) // IcoInfoHeader { width: 16, height: 16, ... } ``` @@ -34,16 +35,138 @@ const ico = new Ico() let buf buf = fs.readFileSync('128x128.png') -await ico.appendImage(buf) +image = IcoImage.fromPNG(buf) +ico.append(image) buf = fs.readFileSync('256x256.png') -await ico.appendImage(buf) +image = IcoImage.fromPNG(buf) +ico.append(image) /* Some other PNG files */ fs.writeFileSync('icon.ico', ico.data) ``` +## API + +### Class: Ico + +#### static from(buffer) + +Create ICO from the icon buffer. + +##### buffer + +Type: `Buffer` + +The ICO icon buffer. + +#### append(image) + +Adds ICO image at the end. + +##### image + +Type: `IcoImage` + +The ICO Image to append. + +#### insert(image, index) + +Inserts ICO image at the specified position. + +##### image + +Type: `IcoImage` + +The ICO Image to insert. + +##### index + +Type: `number` + +The position at which to insert the ICO Image. + +#### remove(index) + +Removes ICO image at the specified position. + +##### index + +Type: `number` + +The position of the ICO Image to remove. + +#### fileHeader + +Type: `IcoFileHeader` + +Return the file header on the ICO. + +#### infoHeaders + +Type: `IcoInfoHeader[]` + +Return the ICO info header on the ICO. + +#### images + +Type: `IcoImage[]` + +Return the ICO images on the ICO. + +#### data + +Type: `Buffer` + +Return the ICO buffer. + +### Class: IcoImage + +#### static from(buffer) + +Create ICO image from the buffer. + +##### buffer + +Type: `Buffer` + +The ICO image buffer. + +#### static fromPNG(buffer) + +Create ICO Image from the PNG image buffer. + +##### buffer + +Type: `Buffer` + +The PNG image buffer. + +### Class: IcoInfoHeader + +#### static from(buffer) + +Create ICO info header from the buffer. + +##### buffer + +Type: `Buffer` + +The ICO info header buffer. + +### Class: IcoFileHeader + +#### static from(buffer) + +Create ICO file header from the buffer. + +##### buffer + +Type: `Buffer` + +The ICO file header buffer. + ## Specifications ### Supported Size diff --git a/package.json b/package.json index dcd52b6..4faecaa 100644 --- a/package.json +++ b/package.json @@ -11,13 +11,14 @@ "url": "https://github.com/fiahfy/ico/issues" }, "dependencies": { - "jimp": "^0.8.5" + "pngjs": "^3.4.0" }, "devDependencies": { - "@types/jest": "^24.0.22", + "@types/jest": "^24.0.23", "@types/node": "^12.12.7", - "@typescript-eslint/eslint-plugin": "^2.6.1", - "@typescript-eslint/parser": "^2.6.1", + "@types/pngjs": "^3.4.0", + "@typescript-eslint/eslint-plugin": "^2.7.0", + "@typescript-eslint/parser": "^2.7.0", "eslint": "^6.6.0", "eslint-config-prettier": "^6.5.0", "eslint-plugin-prettier": "^3.1.1", @@ -26,9 +27,6 @@ "ts-jest": "^24.1.0", "typescript": "^3.7.2" }, - "engines": { - "node": ">=8" - }, "files": [ "dist" ], diff --git a/src/bitmap-info-header.ts b/src/bitmap-info-header.ts index f4655aa..96d2de6 100644 --- a/src/bitmap-info-header.ts +++ b/src/bitmap-info-header.ts @@ -1,5 +1,5 @@ export class BitmapInfoHeader { - readonly size: number + readonly size: 40 readonly width: number readonly height: number readonly planes: number @@ -12,7 +12,7 @@ export class BitmapInfoHeader { readonly clrImportant: number constructor( - size = 40, + size: 40 = 40, width = 0, height = 0, planes = 0, @@ -42,7 +42,7 @@ export class BitmapInfoHeader { * @param buffer The bitmap info header. */ static from(buffer: Buffer): BitmapInfoHeader { - const size = buffer.readUInt32LE(0) + const size = buffer.readUInt32LE(0) as 40 const width = buffer.readInt32LE(4) const height = buffer.readInt32LE(8) const planes = buffer.readUInt16LE(12) diff --git a/src/ico-image.ts b/src/ico-image.ts index 8a4199a..eda20a3 100644 --- a/src/ico-image.ts +++ b/src/ico-image.ts @@ -1,5 +1,6 @@ -import { Bitmap } from 'jimp' +import { PNG } from 'pngjs' import { BitmapInfoHeader } from './bitmap-info-header' +import { Ico } from './ico' export class IcoImage { readonly header: BitmapInfoHeader @@ -41,41 +42,42 @@ export class IcoImage { return new IcoImage(header, xor, and) } - static create(bitmap: Bitmap): IcoImage { - const width = bitmap.width - const height = bitmap.height * 2 // image + mask - const planes = 1 - const bitCount = (bitmap as any).bpp * 8 // byte per pixel * 8 + /** + * Create ICO Image from the PNG image buffer. + * @param buffer The PNG image buffer. + */ + static fromPNG(buffer: Buffer): IcoImage { + const png = IcoImage.readPNG(buffer) + if (!png) { + throw new TypeError('Image must be PNG format') + } - const xorSize = bitmap.height * bitmap.width * (bitmap as any).bpp - const andSize = - ((bitmap.width + (bitmap.width % 32 ? 32 - (bitmap.width % 32) : 0)) * - bitmap.height) / - 8 - const sizeImage = xorSize + andSize + const width = png.width + let height = png.height + if (width !== height) { + throw new TypeError('Image must be squre') + } + const supported = Ico.supportedIconSizes.includes(width) + if (!supported) { + throw new TypeError('No supported size') + } - const header = new BitmapInfoHeader( - 40, - width, - height, - planes, - bitCount, - 0, - sizeImage - ) + height *= 2 // image + mask + const planes = 1 + const bitCount = (png as any).bpp * 8 // byte per pixel * 8 const xors = [] let andBits: number[] = [] // Convert Top/Left to Bottom/Left - for (let y = bitmap.height - 1; y >= 0; y--) { - for (let x = 0; x < bitmap.width; x++) { + for (let y = height - 1; y >= 0; y--) { + for (let x = 0; x < width; x++) { // RGBA to BGRA - const pos = (y * bitmap.width + x) * (bitmap as any).bpp - const red = bitmap.data.slice(pos, pos + 1) - const green = bitmap.data.slice(pos + 1, pos + 2) - const blue = bitmap.data.slice(pos + 2, pos + 3) - const alpha = bitmap.data.slice(pos + 3, pos + 4) + const pos = (y * width + x) * (png as any).bpp + const red = png.data.slice(pos, pos + 1) + const green = png.data.slice(pos + 1, pos + 2) + const blue = png.data.slice(pos + 2, pos + 3) + const alpha = png.data.slice(pos + 3, pos + 4) xors.push(blue) xors.push(green) xors.push(red) @@ -95,8 +97,18 @@ export class IcoImage { ands.push(buffer) } - const xor = Buffer.concat(xors, xorSize) - const and = Buffer.concat(ands, andSize) + const xor = Buffer.concat(xors) + const and = Buffer.concat(ands) + + const header = new BitmapInfoHeader( + 40, + width, + height, + planes, + bitCount, + 0, + xor.length + and.length + ) return new IcoImage(header, xor, and) } @@ -105,4 +117,12 @@ export class IcoImage { const buffers = [this.header.data, this.xor, this.and] return Buffer.concat(buffers) } + + private static readPNG(buffer: Buffer): PNG | undefined { + try { + return PNG.sync.read(buffer) + } catch (e) { + return undefined + } + } } diff --git a/src/ico.ts b/src/ico.ts index 3cc48de..67161da 100644 --- a/src/ico.ts +++ b/src/ico.ts @@ -1,8 +1,6 @@ -import Jimp from 'jimp' import { IcoFileHeader } from './ico-file-header' import { IcoInfoHeader } from './ico-info-header' import { IcoImage } from './ico-image' -import { file } from '@babel/types' export class Ico { static readonly supportedIconSizes = [16, 24, 32, 48, 64, 128, 256] @@ -54,36 +52,51 @@ export class Ico { return this._infoHeaders } - set infoHeaders(infoHeaders: ReadonlyArray) { - this._infoHeaders = infoHeaders + get images(): ReadonlyArray { + return this._images + } - const count = this._infoHeaders.length + set images(images: ReadonlyArray) { + this._images = images this._fileHeader = new IcoFileHeader( this._fileHeader.reserved, this._fileHeader.type, - count + this._images.length ) - } - get images(): ReadonlyArray { - return this._images - } - - set images(images: ReadonlyArray) { - this._images = images + const infoHeaders = this._images.map((image) => { + return new IcoInfoHeader( + image.header.width < 256 ? image.header.width : 0, + image.header.height < 256 ? image.header.height : 0, + 0, + 0, + image.header.planes, + image.header.bitCount, + image.data.length + ) + }) let imageOffset = this._fileHeader.data.length + - this._infoHeaders.reduce( + infoHeaders.reduce( (carry, infoHeader) => carry + infoHeader.data.length, 0 ) - const infoHeaders = this._infoHeaders.map((infoHeader) => { - infoHeader.imageOffset = imageOffset - imageOffset += infoHeader.bytesInRes - return infoHeader + this._infoHeaders = infoHeaders.map((infoHeader) => { + const header = new IcoInfoHeader( + infoHeader.width, + infoHeader.height, + infoHeader.colorCount, + infoHeader.reserved, + infoHeader.planes, + infoHeader.bitCount, + infoHeader.bytesInRes, + imageOffset + ) + imageOffset += header.bytesInRes + return header }) } @@ -96,48 +109,35 @@ export class Ico { return Buffer.concat(buffers) } - async appendImage(buffer: Buffer): Promise { - await this.insertImage(buffer, this.fileHeader.count) + /** + * Adds ICO image at the end. + * @param image The ICO Image to append. + */ + append(image: IcoImage): void { + this.images = [...this.images, image] } - async insertImage(buffer: Buffer, index: number): Promise { - const image = await Jimp.read(buffer) - if (image.getMIME() !== Jimp.MIME_PNG) { - throw new TypeError('Image must be png format') - } - if (image.getWidth() !== image.getHeight()) { - throw new TypeError('Image must be squre') - } - const size = image.getWidth() - if (!Ico.supportedSizes.includes(size)) { - throw new TypeError('No supported Size') - } - - const icoImage = IcoImage.create(image.bitmap) - - const width = size < 256 ? size : 0 - const height = size < 256 ? size : 0 - const planes = icoImage.header.planes - const bitCount = icoImage.header.bitCount - const bytesInRes = icoImage.data.length - const infoHeader = new IcoInfoHeader( - width, - height, - 0, - 0, - planes, - bitCount, - bytesInRes - ) - this.infoHeaders[index] = infoHeader - this.images[index] = icoImage - - this.resetHeader() + /** + * Inserts ICO image at the specified position. + * @param image The ICO Image to insert. + * @param index The position at which to insert the ICO Image. + */ + insert(image: IcoImage, index: number): void { + this.images = [ + ...this.images.slice(0, index), + image, + ...this.images.slice(index + 1) + ] } - removeImage(index: number): void { - this.infoHeaders.splice(index, 1) - this.images.splice(index, 1) - this.resetHeader() + /** + * Removes ICO image at the specified position. + * @param index The position of the ICO Image to remove. + */ + remove(index: number): void { + this.images = [ + ...this.images.slice(0, index), + ...this.images.slice(index + 1) + ] } } diff --git a/test/16x16.png b/test/16x16.png new file mode 100644 index 0000000..708c179 Binary files /dev/null and b/test/16x16.png differ diff --git a/test/bitmap-info-header.test.ts b/test/bitmap-info-header.test.ts new file mode 100644 index 0000000..8212103 --- /dev/null +++ b/test/bitmap-info-header.test.ts @@ -0,0 +1,50 @@ +import { BitmapInfoHeader } from '../src' + +describe('BitmapInfoHeader', () => { + describe('constructor', () => { + test('should work', () => { + const header = new BitmapInfoHeader() + expect(header.size).toBe(40) + expect(header.width).toBe(0) + expect(header.height).toBe(0) + expect(header.planes).toBe(0) + expect(header.bitCount).toBe(0) + expect(header.compression).toBe(0) + expect(header.sizeImage).toBe(0) + expect(header.xPelsPerMeter).toBe(0) + expect(header.yPelsPerMeter).toBe(0) + expect(header.clrUsed).toBe(0) + expect(header.clrImportant).toBe(0) + }) + }) + + describe('from', () => { + test('should work', () => { + const buffer = Buffer.alloc(40) + buffer.writeUInt32LE(40, 0) + buffer.writeInt32LE(32, 4) + buffer.writeInt32LE(32, 8) + buffer.writeUInt16LE(4, 12) + buffer.writeUInt16LE(32, 14) + buffer.writeUInt32LE(1, 16) + buffer.writeUInt32LE(512, 20) + buffer.writeInt32LE(1, 24) + buffer.writeInt32LE(1, 28) + buffer.writeUInt32LE(1, 32) + buffer.writeUInt32LE(1, 36) + + const header = BitmapInfoHeader.from(buffer) + expect(header.size).toBe(40) + expect(header.width).toBe(32) + expect(header.height).toBe(32) + expect(header.planes).toBe(4) + expect(header.bitCount).toBe(32) + expect(header.compression).toBe(1) + expect(header.sizeImage).toBe(512) + expect(header.xPelsPerMeter).toBe(1) + expect(header.yPelsPerMeter).toBe(1) + expect(header.clrUsed).toBe(1) + expect(header.clrImportant).toBe(1) + }) + }) +}) diff --git a/test/ico-file-header.test.ts b/test/ico-file-header.test.ts new file mode 100644 index 0000000..27d8916 --- /dev/null +++ b/test/ico-file-header.test.ts @@ -0,0 +1,26 @@ +import { IcoFileHeader } from '../src' + +describe('IcoFileHeader', () => { + describe('constructor', () => { + test('should work', () => { + const header = new IcoFileHeader() + expect(header.reserved).toBe(0) + expect(header.type).toBe(1) + expect(header.count).toBe(0) + }) + }) + + describe('from', () => { + test('should work', () => { + const buffer = Buffer.alloc(6) + buffer.writeUInt16LE(1, 0) + buffer.writeUInt16LE(2, 2) + buffer.writeUInt16LE(3, 4) + + const header = IcoFileHeader.from(buffer) + expect(header.reserved).toBe(1) + expect(header.type).toBe(2) + expect(header.count).toBe(3) + }) + }) +}) diff --git a/test/ico-image.test.ts b/test/ico-image.test.ts new file mode 100644 index 0000000..8952793 --- /dev/null +++ b/test/ico-image.test.ts @@ -0,0 +1,32 @@ +import fs from 'fs' +import { IcoImage } from '../src' + +describe('IcoImage', () => { + describe('constructor', () => { + test('should work', () => { + const image = new IcoImage() + expect(image.header.data.length).toBe(40) + expect(image.xor.length).toBe(0) + expect(image.and.length).toBe(0) + }) + }) + + describe('fromPNG', () => { + test('should work', () => { + const buffer = fs.readFileSync('./test/256x256.png') + expect(() => IcoImage.fromPNG(buffer)).not.toThrowError() + }) + test('should throw error if buffer is not PNG format', () => { + const buffer = fs.readFileSync('./test/256x256.jpg') + expect(() => IcoImage.fromPNG(buffer)).toThrowError(TypeError) + }) + test('should throw error if buffer is not square', () => { + const buffer = fs.readFileSync('./test/256x128.png') + expect(() => IcoImage.fromPNG(buffer)).toThrowError(TypeError) + }) + test('should throw error if buffer is not supported size', () => { + const buffer = fs.readFileSync('./test/100x100.png') + expect(() => IcoImage.fromPNG(buffer)).toThrowError(TypeError) + }) + }) +}) diff --git a/test/ico-info-header.test.ts b/test/ico-info-header.test.ts new file mode 100644 index 0000000..7bc5d5d --- /dev/null +++ b/test/ico-info-header.test.ts @@ -0,0 +1,41 @@ +import { IcoInfoHeader } from '../src' + +describe('IcoInfoHeader', () => { + describe('constructor', () => { + test('should work', () => { + const header = new IcoInfoHeader() + expect(header.width).toBe(0) + expect(header.height).toBe(0) + expect(header.colorCount).toBe(0) + expect(header.reserved).toBe(0) + expect(header.planes).toBe(0) + expect(header.bitCount).toBe(0) + expect(header.bytesInRes).toBe(0) + expect(header.imageOffset).toBe(0) + }) + }) + + describe('from', () => { + test('should work', () => { + const buffer = Buffer.alloc(16) + buffer.writeUInt8(32, 0) + buffer.writeUInt8(32, 1) + buffer.writeUInt8(4, 2) + buffer.writeUInt8(1, 3) + buffer.writeUInt16LE(4, 4) + buffer.writeUInt16LE(32, 6) + buffer.writeUInt32LE(128, 8) + buffer.writeUInt32LE(256, 12) + + const header = IcoInfoHeader.from(buffer) + expect(header.width).toBe(32) + expect(header.height).toBe(32) + expect(header.colorCount).toBe(4) + expect(header.reserved).toBe(1) + expect(header.planes).toBe(4) + expect(header.bitCount).toBe(32) + expect(header.bytesInRes).toBe(128) + expect(header.imageOffset).toBe(256) + }) + }) +}) diff --git a/test/ico.test.ts b/test/ico.test.ts new file mode 100644 index 0000000..fd819b7 --- /dev/null +++ b/test/ico.test.ts @@ -0,0 +1,151 @@ +import fs from 'fs' +import { Ico, IcoImage, IcoFileHeader } from '../src' + +describe('Ico', () => { + describe('constructor', () => { + test('should work', () => { + const ico = new Ico() + expect(ico.fileHeader).toEqual(new IcoFileHeader()) + expect(ico.infoHeaders).toEqual([]) + expect(ico.images).toEqual([]) + }) + }) + + describe('from', () => { + test('should work', () => { + const buffer = fs.readFileSync('./test/icon.ico') + const ico = Ico.from(buffer) + expect(ico.images.length).toBe(7) + }) + }) + + describe('set images', () => { + test('should work', () => { + const ico = new Ico() + const buffer = fs.readFileSync('./test/16x16.png') + const firstBytes = ico.data.length + let image: IcoImage, prevBytes: number + + prevBytes = ico.data.length + image = IcoImage.fromPNG(buffer) + ico.images = [...ico.images, image] + expect(ico.images.length).toBe(1) + expect(ico.infoHeaders.length).toBe(1) + expect(ico.infoHeaders[0].bytesInRes).toBe(image.data.length) + expect(ico.data.length).toBe( + prevBytes + ico.infoHeaders[0].data.length + image.data.length + ) + expect(ico.infoHeaders[0].imageOffset).toBe( + ico.fileHeader.data.length + + ico.infoHeaders.reduce( + (carry, infoHeader) => carry + infoHeader.data.length, + 0 + ) + ) + + prevBytes = ico.data.length + image = IcoImage.fromPNG(buffer) + ico.images = [...ico.images, image] + expect(ico.images.length).toBe(2) + expect(ico.infoHeaders.length).toBe(2) + expect(ico.infoHeaders[1].bytesInRes).toBe(image.data.length) + expect(ico.data.length).toBe( + prevBytes + ico.infoHeaders[1].data.length + image.data.length + ) + expect(ico.infoHeaders[0].imageOffset).toBe( + ico.fileHeader.data.length + + ico.infoHeaders.reduce( + (carry, infoHeader) => carry + infoHeader.data.length, + 0 + ) + ) + expect(ico.infoHeaders[1].imageOffset).toBe( + ico.infoHeaders[0].imageOffset + ico.infoHeaders[0].bytesInRes + ) + + prevBytes = ico.data.length + image = IcoImage.fromPNG(buffer) + ico.images = [...ico.images, image] + expect(ico.images.length).toBe(3) + expect(ico.infoHeaders.length).toBe(3) + expect(ico.infoHeaders[2].bytesInRes).toBe(image.data.length) + expect(ico.data.length).toBe( + prevBytes + ico.infoHeaders[2].data.length + image.data.length + ) + expect(ico.infoHeaders[0].imageOffset).toBe( + ico.fileHeader.data.length + + ico.infoHeaders.reduce( + (carry, infoHeader) => carry + infoHeader.data.length, + 0 + ) + ) + expect(ico.infoHeaders[1].imageOffset).toBe( + ico.infoHeaders[0].imageOffset + ico.infoHeaders[0].bytesInRes + ) + expect(ico.infoHeaders[2].imageOffset).toBe( + ico.infoHeaders[0].imageOffset + + ico.infoHeaders[0].bytesInRes + + ico.infoHeaders[1].bytesInRes + ) + + prevBytes = ico.data.length + ico.images = [] + expect(ico.images.length).toBe(0) + expect(ico.infoHeaders.length).toBe(0) + expect(ico.data.length).toBe(firstBytes) + }) + }) + + describe('append', () => { + test('should work', () => { + const ico = new Ico() + const buffer = fs.readFileSync('./test/16x16.png') + let image: IcoImage + + image = IcoImage.fromPNG(buffer) + ico.append(image) + expect(ico.images.length).toBe(1) + + image = IcoImage.fromPNG(buffer) + ico.append(image) + expect(ico.images.length).toBe(2) + }) + }) + + describe('insert', () => { + test('should work', () => { + const ico = new Ico() + const buffer = fs.readFileSync('./test/16x16.png') + let image: IcoImage + + image = IcoImage.fromPNG(buffer) + ico.insert(image, 0) + expect(ico.images.length).toBe(1) + + image = IcoImage.fromPNG(buffer) + ico.insert(image, 0) + expect(ico.images.length).toBe(1) + + image = IcoImage.fromPNG(buffer) + ico.insert(image, 1) + expect(ico.images.length).toBe(2) + }) + }) + + describe('remove', () => { + test('should work', () => { + const ico = new Ico() + const buffer = fs.readFileSync('./test/16x16.png') + + ico.images = [ + IcoImage.fromPNG(buffer), + IcoImage.fromPNG(buffer), + IcoImage.fromPNG(buffer) + ] + expect(ico.images.length).toBe(3) + + ico.remove(0) + expect(ico.images.length).toBe(2) + }) + }) +}) diff --git a/test/sample.ico b/test/icon.ico similarity index 100% rename from test/sample.ico rename to test/icon.ico diff --git a/test/index.test.ts b/test/index.test.ts deleted file mode 100644 index 6d2eb1f..0000000 --- a/test/index.test.ts +++ /dev/null @@ -1,68 +0,0 @@ -import fs from 'fs' -import Ico from '../src' - -describe('ico', () => { - describe('constructor', () => { - test('should work', async () => { - const ico = new Ico() - expect(ico.fileHeader.count).toBe(0) - expect(ico.infoHeaders.length).toBe(0) - expect(ico.images.length).toBe(0) - }) - - test('should work with buffer', async () => { - const buf = fs.readFileSync('./test/sample.ico') - const ico = new Ico(buf) - expect(ico.fileHeader.count).toBe(7) - expect(ico.infoHeaders.length).toBe(7) - expect(ico.images.length).toBe(7) - }) - }) - - describe('data property', () => { - test('should work', () => { - const ico = new Ico() - expect(ico.data.length).toBeGreaterThan(0) - ico.data = fs.readFileSync('./test/sample.ico') - expect(ico.fileHeader.count).toBe(7) - expect(ico.infoHeaders.length).toBe(7) - expect(ico.images.length).toBe(7) - }) - }) - - describe('appendImage', () => { - test('should work', async () => { - const buf = fs.readFileSync('./test/256x256.png') - const ico = new Ico() - expect(ico.fileHeader.count).toBe(0) - expect(ico.infoHeaders.length).toBe(0) - expect(ico.images.length).toBe(0) - await ico.appendImage(buf) - expect(ico.fileHeader.count).toBe(1) - expect(ico.infoHeaders.length).toBe(1) - expect(ico.images.length).toBe(1) - await ico.appendImage(buf) - expect(ico.fileHeader.count).toBe(2) - expect(ico.infoHeaders.length).toBe(2) - expect(ico.images.length).toBe(2) - }) - - test('should throw error if buffer is not PNG format', () => { - const buf = fs.readFileSync('./test/256x256.jpg') - const ico = new Ico() - expect(ico.appendImage(buf)).rejects.toThrowError(TypeError) - }) - - test('should throw error if buffer is not square', () => { - const buf = fs.readFileSync('./test/256x128.png') - const ico = new Ico() - expect(ico.appendImage(buf)).rejects.toThrowError(TypeError) - }) - - test('should throw error if buffer is not supported size', () => { - const buf = fs.readFileSync('./test/100x100.png') - const ico = new Ico() - expect(ico.appendImage(buf)).rejects.toThrowError(TypeError) - }) - }) -}) diff --git a/yarn.lock b/yarn.lock index 5a851c4..8c3327e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -305,258 +305,6 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" -"@jimp/bmp@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.8.5.tgz#94437fa0f4dda5cf0233005640f39f75647c53ba" - integrity sha512-o/23j1RODQGGjvb2xg+9ZQCHc9uXa5XIoJuXHN8kh8AJBGD7JZYiHMwNHaxJRJvadimCKUeA5udZUJAoaPwrYg== - dependencies: - "@jimp/utils" "^0.8.5" - bmp-js "^0.1.0" - core-js "^2.5.7" - -"@jimp/core@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.8.5.tgz#925549488916f1b9d71a4f248b023f9e8f969d7f" - integrity sha512-Jto1IdL5HYg7uE15rpQjK6dfZJ6d6gRjUsVCPW50nIfXgWizaTibFEov90W9Bj+irwKrX2ntG3e3pZUyOC0COg== - dependencies: - "@jimp/utils" "^0.8.5" - any-base "^1.1.0" - buffer "^5.2.0" - core-js "^2.5.7" - exif-parser "^0.1.12" - file-type "^9.0.0" - load-bmfont "^1.3.1" - mkdirp "0.5.1" - phin "^2.9.1" - pixelmatch "^4.0.2" - tinycolor2 "^1.4.1" - -"@jimp/custom@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.8.5.tgz#68131a5d7e8776d3aafc5aa7ba207405fde5c361" - integrity sha512-hS4qHOcOIL+N93IprsIhFgr8F4XnC2oYd+lRaOKEOg3ptS2vQnceSTtcXsC0//mhq8AV6lNjpbfs1iseEZuTqg== - dependencies: - "@jimp/core" "^0.8.5" - core-js "^2.5.7" - -"@jimp/gif@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.8.5.tgz#18626bcb2d38b2ee7feb48b9c36acea094190dd1" - integrity sha512-Mj8jmv4AS76OY+Hx/Xoyihj02SUZ2ELk+O5x89pODz1+NeGtSWHHjZjnSam9HYAjycvVI/lGJdk/7w0nWIV/yQ== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - omggif "^1.0.9" - -"@jimp/jpeg@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.8.5.tgz#07b3524dadb2d69d0b7cd862d9525a6f42cdcc28" - integrity sha512-7kjTY0BiCpwRywk+oPfpLto7cLI+9G0mf4N1bv1Hn+VLQwcXFy2fHyl4qjqLbbY6u4cyZgqN+R8Pg6GRRzv0kw== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - jpeg-js "^0.3.4" - -"@jimp/plugin-blit@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.8.5.tgz#5a865ca39e2bd46d7f7250a86e44c67115b84bcf" - integrity sha512-r8Z1CwazaJwZCRbucQgrfprlGyH91tX7GubUsbWr+zy5/dRJAAgaPj/hcoHDwbh3zyiXp5BECKKzKW0x4reL4w== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - -"@jimp/plugin-blur@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.8.5.tgz#6a4675cdf50ed0add497af280b904858017b59b9" - integrity sha512-UH5ywpV4YooUh9HXEsrNKDtojLCvIAAV0gywqn8EQeFyzwBJyXAvRNARJp7zr5OPLr9uGXkRLDCO9YyzdlXZng== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - -"@jimp/plugin-color@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.8.5.tgz#fd4a656fbf6bd9db9e86a6cd2e141d0bf2250a8b" - integrity sha512-7XHqcTQ8Y1zto1b9P1y8m1dzSjnOpBsD9OZG0beTpeJ5bgPX+hF5ZLmvcM6c5ljkINw5EUF1it07BYbkCxiGQA== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - tinycolor2 "^1.4.1" - -"@jimp/plugin-contain@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.8.5.tgz#e2fd426684790972596c9035b4ddb8594d5be627" - integrity sha512-ZkiPFx9L0yITiKtYTYLWyBsSIdxo/NARhNPRZXyVF9HmTWSLDUw1c2c1uvETKxDZTAVK+souYT14DwFWWdhsYA== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - -"@jimp/plugin-cover@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.8.5.tgz#25672884c5bf0bd6bbffbf288482f5f2cf53f50d" - integrity sha512-OdT4YAopLOhbhTUQV3R1v5ZZqIaUt3n3vJi/OfTbsak1t9UkPBVdmYPyhoont8zJdtdkF5dW16Ro1FTshytcww== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - -"@jimp/plugin-crop@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.8.5.tgz#68e2a72796148d32b18fd74d5f0d2dc049b5af84" - integrity sha512-E1Hb+gfu2k74Gkqh96apAyVljsP5MjCH4TY6lECAAEcYKGH/XRhz6lY2dSEjCYE7KtiqjTZzWwYkgAvkwojj9Q== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - -"@jimp/plugin-displace@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.8.5.tgz#af75a58939653c0b489ed57ea056fbde2cca5557" - integrity sha512-fVgVYTS1HZzAXkg8Lg06PuirSUG5oXYaYYGL+3ZU4tmZn1pyZ+mZyfejpwtymETEYZnmymHoCT4xto19E/IRvA== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - -"@jimp/plugin-dither@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.8.5.tgz#66ce78be90071ddef5ac2451da97b2c28d836960" - integrity sha512-KSj2y8E3yK7tldjT/8ejqAWw5HFBjtWW6QkcxfW7FdV4c/nsXZXDkMbhqMZ7FkDuSYoAPeWUFeddrH4yipC5iA== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - -"@jimp/plugin-flip@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.8.5.tgz#ef9bd0b7126bc6d696bd60f8591071461eef993c" - integrity sha512-2QbGDkurPNAXZUeHLo/UA3tjh+AbAXWZKSdtoa1ArlASovRz8rqtA45YIRIkKrMH82TA3PZk8bgP2jaLKLrzww== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - -"@jimp/plugin-gaussian@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.8.5.tgz#2de042c20def796276e46e3a0a4d576ceeeb6ddb" - integrity sha512-2zReC5GJcVAXtf3UgzFcHSYN277i02K9Yrhc1xJf3mti00s43uD++B5Ho7/mIo+HrntVvWhxqar7PARdq0lVIg== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - -"@jimp/plugin-invert@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.8.5.tgz#91044275df2101beecabd6d12416539724840f6a" - integrity sha512-GyMXPGheHdS14xfDceuZ9hrGm6gE9UG3PfTEjQbJmHMWippLC6yf8kombSudJlUf8q72YYSSXsSFKGgkHa67vA== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - -"@jimp/plugin-mask@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.8.5.tgz#c7ce4961902c333f7a3adaa89e5d95204dc94193" - integrity sha512-inD/++XO+MkmwXl9JGYQ8X2deyOZuq9i+dmugH/557p16B9Q6tvUQt5X1Yg5w7hhkLZ00BKOAJI9XoyCC1NFvQ== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - -"@jimp/plugin-normalize@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.8.5.tgz#4fe62178ae45ba987f638dde2da8230277318b19" - integrity sha512-8YRWJWBT4NoSAbPhnjQJXGeaeWVrJAlGDv39A54oNH8Ry47fHcE0EN6zogQNpBuM34M6hRnZl4rOv1FIisaWdg== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - -"@jimp/plugin-print@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.8.5.tgz#702228f962bdfd53b38c17e49053e4124e8051c0" - integrity sha512-BviNpCiA/fEieOqsrWr1FkqyFuiG2izdyyg7zUqyeUTHPwqrTLvXO9cfP/ThG4hZpu5wMQ5QClWSqhZu1fAwxA== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - load-bmfont "^1.4.0" - -"@jimp/plugin-resize@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.8.5.tgz#4949909d89a9e540725b7431abcbafd520ce32f4" - integrity sha512-gIdmISuNmZQ1QwprnRC5VXVWQfKIiWineVQGebpMAG/aoFOLDXrVl939Irg7Fb/uOlSFTzpAbt1zpJ8YG/Mi2w== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - -"@jimp/plugin-rotate@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.8.5.tgz#279dbe2c5e51ec2b2861010cbcc38ce574b12f9c" - integrity sha512-8T9wnL3gb+Z0ogMZmtyI6h3y7TuqW2a5SpFbzFUVF+lTZoAabXjEfX3CAozizCLaT+Duc5H2FJVemAHiyr+Dbw== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - -"@jimp/plugin-scale@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.8.5.tgz#6c166575c085da31788acda7da460af3a60351b3" - integrity sha512-G+CDH9s7BsxJ4b+mKZ5SsiXwTAynBJ+7/9SwZFnICZJJvLd79Tws6VPXfSaKJZuWnGIX++L8jTGmFORCfLNkdg== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - -"@jimp/plugins@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.8.5.tgz#1d8d6521e67c527885833ffd5fab7d707ebce3c4" - integrity sha512-52na0wqfQ3uItIA+C9cJ1EXffhSmABgK7ETClDseUh9oGtynHzxZ97smnFf1ydLjXLrF89Gt+YBxWLyiBGgiZQ== - dependencies: - "@jimp/plugin-blit" "^0.8.5" - "@jimp/plugin-blur" "^0.8.5" - "@jimp/plugin-color" "^0.8.5" - "@jimp/plugin-contain" "^0.8.5" - "@jimp/plugin-cover" "^0.8.5" - "@jimp/plugin-crop" "^0.8.5" - "@jimp/plugin-displace" "^0.8.5" - "@jimp/plugin-dither" "^0.8.5" - "@jimp/plugin-flip" "^0.8.5" - "@jimp/plugin-gaussian" "^0.8.5" - "@jimp/plugin-invert" "^0.8.5" - "@jimp/plugin-mask" "^0.8.5" - "@jimp/plugin-normalize" "^0.8.5" - "@jimp/plugin-print" "^0.8.5" - "@jimp/plugin-resize" "^0.8.5" - "@jimp/plugin-rotate" "^0.8.5" - "@jimp/plugin-scale" "^0.8.5" - core-js "^2.5.7" - timm "^1.6.1" - -"@jimp/png@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.8.5.tgz#121debfb55c5ba2a44e9ffeeb901bbb97fd24f53" - integrity sha512-zT89ucu8I2rsD3FIMIPLgr1OyKn4neD+5umwD3MY8AOB8+6tX5bFtnmTm3FzGJaJuibkK0wFl87eiaxnb+Megw== - dependencies: - "@jimp/utils" "^0.8.5" - core-js "^2.5.7" - pngjs "^3.3.3" - -"@jimp/tiff@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.8.5.tgz#b1eddfd8b7fd3171cbde8fbe133c36a9889b04c2" - integrity sha512-Z7uzDcbHuwDg+hy2+UJQ2s5O6sqYXmv6H1fmSf/2dxBrlGMzl8yTc2/BxLrGREeoidDDMcKmXYGAOp4uCsdJjw== - dependencies: - core-js "^2.5.7" - utif "^2.0.1" - -"@jimp/types@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.8.5.tgz#49058260cfe4227da39f4915c5e5c83b0dbcbf46" - integrity sha512-XUvpyebZGd1vyFiJyxUT4H9A3mKD7MV2MxjXnay3fNTrcow0UJJspmFw/w+G3TP/1dgrVC4K++gntjR6QWTzvg== - dependencies: - "@jimp/bmp" "^0.8.5" - "@jimp/gif" "^0.8.5" - "@jimp/jpeg" "^0.8.5" - "@jimp/png" "^0.8.5" - "@jimp/tiff" "^0.8.5" - core-js "^2.5.7" - timm "^1.6.1" - -"@jimp/utils@^0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.8.5.tgz#5aede22f51b56141d245bef1195013a1de9158bd" - integrity sha512-D3+H4BiopDkhUKvKkZTPPJ53voqOkfMuk3r7YZNcLtXGLkchjjukC4056lNo7B0DzjBgowTYsQM3JjKnYNIYeg== - dependencies: - core-js "^2.5.7" - "@types/babel__core@^7.1.0": version "7.1.2" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.2.tgz#608c74f55928033fce18b99b213c16be4b3d114f" @@ -615,28 +363,30 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" -"@types/jest-diff@*": - version "20.0.1" - resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" - integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== - -"@types/jest@^24.0.22": - version "24.0.22" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.22.tgz#08a50be08e78aba850a1185626e71d31e2336145" - integrity sha512-t2OvhNZnrNjlzi2i0/cxbLVM59WN15I2r1Qtb7wDv28PnV9IzrPtagFRey/S9ezdLD0zyh1XGMQIEQND2YEfrw== +"@types/jest@^24.0.23": + version "24.0.23" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.23.tgz#046f8e2ade026fe831623e361a36b6fb9a4463e4" + integrity sha512-L7MBvwfNpe7yVPTXLn32df/EK+AMBFAFvZrRuArGs7npEWnlziUXK+5GMIUTI4NIuwok3XibsjXCs5HxviYXjg== dependencies: - "@types/jest-diff" "*" + jest-diff "^24.3.0" "@types/json-schema@^7.0.3": version "7.0.3" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== -"@types/node@^12.12.7": +"@types/node@*", "@types/node@^12.12.7": version "12.12.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.7.tgz#01e4ea724d9e3bd50d90c11fd5980ba317d8fa11" integrity sha512-E6Zn0rffhgd130zbCbAr/JdXfXkoOUFAKNs/rF8qnafSJ8KYaA/j3oz7dcwal+lYjLA7xvdd5J4wdYpCTlP8+w== +"@types/pngjs@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@types/pngjs/-/pngjs-3.4.0.tgz#8d2c330df29db9135211bfb9a988fb121ec30dc3" + integrity sha512-4mPTo6YsNeAzhJ3X8okGv8467YDFKqMNXEuJH/xJBGdnzS2HUWIY3P/iGtYe6xlnZj85rqJhs4l9rQNpn58VNA== + dependencies: + "@types/node" "*" + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -654,40 +404,40 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^2.6.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.6.1.tgz#e34972a24f8aba0861f9ccf7130acd74fd11e079" - integrity sha512-Z0rddsGqioKbvqfohg7BwkFC3PuNLsB+GE9QkFza7tiDzuHoy0y823Y+oGNDzxNZrYyLjqkZtCTl4vCqOmEN4g== +"@typescript-eslint/eslint-plugin@^2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.7.0.tgz#dff176bdb73dfd7e2e43062452189bd1b9db6021" + integrity sha512-H5G7yi0b0FgmqaEUpzyBlVh0d9lq4cWG2ap0RKa6BkF3rpBb6IrAoubt1NWh9R2kRs/f0k6XwRDiDz3X/FqXhQ== dependencies: - "@typescript-eslint/experimental-utils" "2.6.1" + "@typescript-eslint/experimental-utils" "2.7.0" eslint-utils "^1.4.2" functional-red-black-tree "^1.0.1" regexpp "^2.0.1" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@2.6.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.6.1.tgz#eddaca17a399ebf93a8628923233b4f93793acfd" - integrity sha512-EVrrUhl5yBt7fC7c62lWmriq4MIc49zpN3JmrKqfiFXPXCM5ErfEcZYfKOhZXkW6MBjFcJ5kGZqu1b+lyyExUw== +"@typescript-eslint/experimental-utils@2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.7.0.tgz#58d790a3884df3041b5a5e08f9e5e6b7c41864b5" + integrity sha512-9/L/OJh2a5G2ltgBWJpHRfGnt61AgDeH6rsdg59BH0naQseSwR7abwHq3D5/op0KYD/zFT4LS5gGvWcMmegTEg== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.6.1" + "@typescript-eslint/typescript-estree" "2.7.0" eslint-scope "^5.0.0" -"@typescript-eslint/parser@^2.6.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.6.1.tgz#3c00116baa0d696bc334ca18ac5286b34793993c" - integrity sha512-PDPkUkZ4c7yA+FWqigjwf3ngPUgoLaGjMlFh6TRtbjhqxFBnkElDfckSjm98q9cMr4xRzZ15VrS/xKm6QHYf0w== +"@typescript-eslint/parser@^2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.7.0.tgz#b5e6a4944e2b68dba1e7fbfd5242e09ff552fd12" + integrity sha512-ctC0g0ZvYclxMh/xI+tyqP0EC2fAo6KicN9Wm2EIao+8OppLfxji7KAGJosQHSGBj3TcqUrA96AjgXuKa5ob2g== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.6.1" - "@typescript-eslint/typescript-estree" "2.6.1" + "@typescript-eslint/experimental-utils" "2.7.0" + "@typescript-eslint/typescript-estree" "2.7.0" eslint-visitor-keys "^1.1.0" -"@typescript-eslint/typescript-estree@2.6.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.6.1.tgz#fb363dd4ca23384745c5ea4b7f4c867432b00d31" - integrity sha512-+sTnssW6bcbDZKE8Ce7VV6LdzkQz2Bxk7jzk1J8H1rovoTxnm6iXvYIyncvNsaB/kBCOM63j/LNJfm27bNdUoA== +"@typescript-eslint/typescript-estree@2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.7.0.tgz#34fd98c77a07b40d04d5b4203eddd3abeab909f4" + integrity sha512-vVCE/DY72N4RiJ/2f10PTyYekX2OLaltuSIBqeHYI44GQ940VCYioInIb8jKMrK9u855OEJdFC+HmWAZTnC+Ag== dependencies: debug "^4.1.1" glob "^7.1.4" @@ -783,11 +533,6 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -any-base@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe" - integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg== - anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -931,11 +676,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@^1.0.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" - integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== - base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -956,11 +696,6 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -bmp-js@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" - integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM= - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1011,24 +746,11 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" -buffer-equal@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" - integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs= - buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -buffer@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" - integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -1195,11 +917,6 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js@^2.5.7: - version "2.6.9" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" - integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== - core-util-is@1.0.2, 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" @@ -1285,7 +1002,7 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -define-properties@^1.1.2, define-properties@^1.1.3: +define-properties@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -1346,11 +1063,6 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-walk@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" - integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= - domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -1390,7 +1102,7 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.13.0, es-abstract@^1.5.1: +es-abstract@^1.5.1: version "1.13.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== @@ -1566,11 +1278,6 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -exif-parser@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" - integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI= - exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -1695,11 +1402,6 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" -file-type@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-9.0.0.tgz#a68d5ad07f486414dfb2c8866f73161946714a18" - integrity sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw== - fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -1731,13 +1433,6 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -1868,14 +1563,6 @@ glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -global@~4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" - integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= - dependencies: - min-document "^2.19.0" - process "~0.5.1" - globals@^11.1.0, globals@^11.7.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -1996,11 +1683,6 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - ignore-walk@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" @@ -2102,7 +1784,7 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.3, is-callable@^1.1.4: +is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== @@ -2185,11 +1867,6 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-function@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" - integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU= - is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" @@ -2378,7 +2055,7 @@ jest-config@^24.9.0: pretty-format "^24.9.0" realpath-native "^1.1.0" -jest-diff@^24.9.0: +jest-diff@^24.3.0, jest-diff@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== @@ -2694,22 +2371,6 @@ jest@^24.9.0: import-local "^2.0.0" jest-cli "^24.9.0" -jimp@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.8.5.tgz#59427688ccc8d7a89c2165fd10d0e4164f041a9d" - integrity sha512-BW7t/+TCgKpqZw/wHFwqF/A/Tyk43RmzRHyMBdqfOepqunUrajt0RTqowdWyFo4CS2FmD8pFiYfefWjpXFWrCA== - dependencies: - "@jimp/custom" "^0.8.5" - "@jimp/plugins" "^0.8.5" - "@jimp/types" "^0.8.5" - core-js "^2.5.7" - regenerator-runtime "^0.13.3" - -jpeg-js@^0.3.4: - version "0.3.5" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.5.tgz#6fbd6cd0e49627c5a0341796c9e50c70a2aa3673" - integrity sha512-hvaExqwmQDS8O9qnZAVDXGWU43Tbu1V0wMZmjROjT11jloSgGICZpscG+P6Nyi1BVAvyu2ARRx8qmEW30sxgdQ== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -2861,20 +2522,6 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -load-bmfont@^1.3.1, load-bmfont@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b" - integrity sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g== - dependencies: - buffer-equal "0.0.1" - mime "^1.3.4" - parse-bmfont-ascii "^1.0.3" - parse-bmfont-binary "^1.0.5" - parse-bmfont-xml "^1.1.4" - phin "^2.9.1" - xhr "^2.0.1" - xtend "^4.0.0" - load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -2995,23 +2642,11 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.40.0" -mime@^1.3.4: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= - dependencies: - dom-walk "^0.1.0" - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -3057,7 +2692,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1, mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -3273,11 +2908,6 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -omggif@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19" - integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw== - once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -3366,11 +2996,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@^1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -3378,32 +3003,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-bmfont-ascii@^1.0.3: - version "1.0.6" - resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285" - integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU= - -parse-bmfont-binary@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006" - integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY= - -parse-bmfont-xml@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389" - integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ== - dependencies: - xml-parse-from-string "^1.0.0" - xml2js "^0.4.5" - -parse-headers@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.2.tgz#9545e8a4c1ae5eaea7d24992bca890281ed26e34" - integrity sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg== - dependencies: - for-each "^0.3.3" - string.prototype.trim "^1.1.2" - parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -3454,11 +3053,6 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -phin@^2.9.1: - version "2.9.3" - resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" - integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== - pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" @@ -3476,13 +3070,6 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" -pixelmatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854" - integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ= - dependencies: - pngjs "^3.0.0" - pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -3495,7 +3082,7 @@ pn@^1.1.0: resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== -pngjs@^3.0.0, pngjs@^3.3.3: +pngjs@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== @@ -3537,11 +3124,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@~0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" - integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= - progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -3635,11 +3217,6 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" -regenerator-runtime@^0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" - integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== - regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -3837,7 +3414,7 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sax@>=0.6.0, sax@^1.2.4: +sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -4091,15 +3668,6 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^5.2.0" -string.prototype.trim@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz#75a729b10cfc1be439543dae442129459ce61e3d" - integrity sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.13.0" - function-bind "^1.1.1" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -4215,16 +3783,6 @@ through@^2.3.6: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -timm@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/timm/-/timm-1.6.1.tgz#5f8aafc932248c76caf2c6af60542a32d3c30701" - integrity sha512-hqDTYi/bWuDxL2i6T3v6nrvkAQ/1Bc060GSkVEQZp02zTSTB4CHSKsOkliequCftQaNRcjRqUZmpGWs5FfhrNg== - -tinycolor2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" - integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -4395,13 +3953,6 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -utif@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/utif/-/utif-2.0.1.tgz#9e1582d9bbd20011a6588548ed3266298e711759" - integrity sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg== - dependencies: - pako "^1.0.5" - util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -4557,44 +4108,11 @@ ws@^5.2.0: dependencies: async-limiter "~1.0.0" -xhr@^2.0.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd" - integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ== - dependencies: - global "~4.3.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xml-parse-from-string@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" - integrity sha1-qQKekp09vN7RafPG4oI42VpdWig= - -xml2js@^0.4.5: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== - dependencies: - sax ">=0.6.0" - xmlbuilder "~9.0.1" - -xmlbuilder@~9.0.1: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= - -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"