diff --git a/ImageScript.js b/ImageScript.js index 628a770..1f7f697 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1,8 +1,8 @@ -const png = require('./png/node.js'); -const mem = require('./utils/mem.js'); +const png = require('./src/png/node.js'); +const mem = require('./src/utils/mem.js'); const {version} = require('./package.json'); -const codecs = require('./codecs/node/index.js'); -const { default: v2 } = require('./v2/framebuffer.js'); +const codecs = require('./src/codecs/node/index.js'); +const { default: v2 } = require('./src/v2/framebuffer.js'); // old const svglib = require('./wasm/node/svg.js'); diff --git a/node_modules/.yarn-integrity b/node_modules/.yarn-integrity new file mode 100644 index 0000000..1db5abb --- /dev/null +++ b/node_modules/.yarn-integrity @@ -0,0 +1,10 @@ +{ + "systemParams": "darwin-x64-93", + "modulesFolders": [], + "flags": [], + "linkedModules": [], + "topLevelPatterns": [], + "lockfileEntries": {}, + "files": [], + "artifacts": {} +} \ No newline at end of file diff --git a/package.json b/package.json index 843989a..a8c0475 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "zero-dependency javascript image manipulation", "main": "ImageScript.js", "scripts": { - "test": "node ./tests/run.js", + "test": "node ./src/tests/run.js", "coverage": "nyc --reporter=html npm test" }, "repository": { diff --git a/bench/_.mjs b/src/bench/_.mjs similarity index 100% rename from bench/_.mjs rename to src/bench/_.mjs diff --git a/bench/all.mjs b/src/bench/all.mjs similarity index 100% rename from bench/all.mjs rename to src/bench/all.mjs diff --git a/bench/blur.mjs b/src/bench/blur.mjs similarity index 97% rename from bench/blur.mjs rename to src/bench/blur.mjs index 5211946..9f4ba59 100644 --- a/bench/blur.mjs +++ b/src/bench/blur.mjs @@ -2,7 +2,7 @@ import { sync, async, format } from './_.mjs'; import jimp from 'jimp'; import sharp from 'sharp'; -import v2 from '../v2/framebuffer.mjs'; +import v2 from '../src/v2/framebuffer.mjs'; import * as imagers from '@evan/wasm/target/image/node.mjs'; import * as v2_wasm from '@evan/wasm/target/imagescript/node.mjs'; diff --git a/bench/package.json b/src/bench/package.json similarity index 100% rename from bench/package.json rename to src/bench/package.json diff --git a/bench/readme.md b/src/bench/readme.md similarity index 100% rename from bench/readme.md rename to src/bench/readme.md diff --git a/bench/resize.mjs b/src/bench/resize.mjs similarity index 97% rename from bench/resize.mjs rename to src/bench/resize.mjs index 2028ce7..00c071e 100644 --- a/bench/resize.mjs +++ b/src/bench/resize.mjs @@ -2,7 +2,7 @@ import { sync, async, format } from './_.mjs'; import jimp from 'jimp'; import sharp from 'sharp'; -import v2 from '../v2/framebuffer.mjs'; +import v2 from '../src/v2/framebuffer.mjs'; import * as imagers from '@evan/wasm/target/image/node.mjs'; import * as v2_wasm from '@evan/wasm/target/imagescript/node.mjs'; const rgba = new Uint8Array(4 * 256 * 256).map((_, i) => i % 256); diff --git a/codecs/.npmignore b/src/codecs/.npmignore similarity index 100% rename from codecs/.npmignore rename to src/codecs/.npmignore diff --git a/codecs/LICENSE b/src/codecs/LICENSE similarity index 100% rename from codecs/LICENSE rename to src/codecs/LICENSE diff --git a/codecs/lib.d.ts b/src/codecs/lib.d.ts similarity index 100% rename from codecs/lib.d.ts rename to src/codecs/lib.d.ts diff --git a/codecs/lib.js b/src/codecs/lib.js similarity index 100% rename from codecs/lib.js rename to src/codecs/lib.js diff --git a/codecs/lib.mjs b/src/codecs/lib.mjs similarity index 100% rename from codecs/lib.mjs rename to src/codecs/lib.mjs diff --git a/codecs/node/bin/arm64-darwin.node b/src/codecs/node/bin/arm64-darwin.node similarity index 100% rename from codecs/node/bin/arm64-darwin.node rename to src/codecs/node/bin/arm64-darwin.node diff --git a/codecs/node/bin/arm64-linux.node b/src/codecs/node/bin/arm64-linux.node similarity index 100% rename from codecs/node/bin/arm64-linux.node rename to src/codecs/node/bin/arm64-linux.node diff --git a/codecs/node/bin/x64-darwin.node b/src/codecs/node/bin/x64-darwin.node similarity index 100% rename from codecs/node/bin/x64-darwin.node rename to src/codecs/node/bin/x64-darwin.node diff --git a/codecs/node/bin/x64-linux.node b/src/codecs/node/bin/x64-linux.node similarity index 100% rename from codecs/node/bin/x64-linux.node rename to src/codecs/node/bin/x64-linux.node diff --git a/codecs/node/bin/x64-win32.node b/src/codecs/node/bin/x64-win32.node similarity index 100% rename from codecs/node/bin/x64-win32.node rename to src/codecs/node/bin/x64-win32.node diff --git a/codecs/node/index.js b/src/codecs/node/index.js similarity index 100% rename from codecs/node/index.js rename to src/codecs/node/index.js diff --git a/codecs/node/index.mjs b/src/codecs/node/index.mjs similarity index 100% rename from codecs/node/index.mjs rename to src/codecs/node/index.mjs diff --git a/codecs/package.json b/src/codecs/package.json similarity index 100% rename from codecs/package.json rename to src/codecs/package.json diff --git a/codecs/readme.md b/src/codecs/readme.md similarity index 100% rename from codecs/readme.md rename to src/codecs/readme.md diff --git a/codecs/tests/gif.js b/src/codecs/tests/gif.js similarity index 100% rename from codecs/tests/gif.js rename to src/codecs/tests/gif.js diff --git a/codecs/tests/jpeg.js b/src/codecs/tests/jpeg.js similarity index 100% rename from codecs/tests/jpeg.js rename to src/codecs/tests/jpeg.js diff --git a/codecs/tests/png.js b/src/codecs/tests/png.js similarity index 100% rename from codecs/tests/png.js rename to src/codecs/tests/png.js diff --git a/codecs/tests/results/gif/1024.nis.gif b/src/codecs/tests/results/gif/1024.nis.gif similarity index 100% rename from codecs/tests/results/gif/1024.nis.gif rename to src/codecs/tests/results/gif/1024.nis.gif diff --git a/codecs/tests/results/gif/1024.skyra.gif b/src/codecs/tests/results/gif/1024.skyra.gif similarity index 100% rename from codecs/tests/results/gif/1024.skyra.gif rename to src/codecs/tests/results/gif/1024.skyra.gif diff --git a/codecs/tests/results/gif/256.nis.gif b/src/codecs/tests/results/gif/256.nis.gif similarity index 100% rename from codecs/tests/results/gif/256.nis.gif rename to src/codecs/tests/results/gif/256.nis.gif diff --git a/codecs/tests/results/gif/256.skyra.gif b/src/codecs/tests/results/gif/256.skyra.gif similarity index 100% rename from codecs/tests/results/gif/256.skyra.gif rename to src/codecs/tests/results/gif/256.skyra.gif diff --git a/codecs/tests/results/jpeg/256.jpegjs.jpeg b/src/codecs/tests/results/jpeg/256.jpegjs.jpeg similarity index 100% rename from codecs/tests/results/jpeg/256.jpegjs.jpeg rename to src/codecs/tests/results/jpeg/256.jpegjs.jpeg diff --git a/codecs/tests/results/jpeg/256.nis.jpeg b/src/codecs/tests/results/jpeg/256.nis.jpeg similarity index 100% rename from codecs/tests/results/jpeg/256.nis.jpeg rename to src/codecs/tests/results/jpeg/256.nis.jpeg diff --git a/codecs/tests/results/jpeg/256.sharp.jpeg b/src/codecs/tests/results/jpeg/256.sharp.jpeg similarity index 100% rename from codecs/tests/results/jpeg/256.sharp.jpeg rename to src/codecs/tests/results/jpeg/256.sharp.jpeg diff --git a/codecs/tests/results/jpeg/512.jpegjs.jpeg b/src/codecs/tests/results/jpeg/512.jpegjs.jpeg similarity index 100% rename from codecs/tests/results/jpeg/512.jpegjs.jpeg rename to src/codecs/tests/results/jpeg/512.jpegjs.jpeg diff --git a/codecs/tests/results/jpeg/512.nis.jpeg b/src/codecs/tests/results/jpeg/512.nis.jpeg similarity index 100% rename from codecs/tests/results/jpeg/512.nis.jpeg rename to src/codecs/tests/results/jpeg/512.nis.jpeg diff --git a/codecs/tests/results/jpeg/512.sharp.jpeg b/src/codecs/tests/results/jpeg/512.sharp.jpeg similarity index 100% rename from codecs/tests/results/jpeg/512.sharp.jpeg rename to src/codecs/tests/results/jpeg/512.sharp.jpeg diff --git a/codecs/tests/results/jpeg/64.jpegjs.jpeg b/src/codecs/tests/results/jpeg/64.jpegjs.jpeg similarity index 100% rename from codecs/tests/results/jpeg/64.jpegjs.jpeg rename to src/codecs/tests/results/jpeg/64.jpegjs.jpeg diff --git a/codecs/tests/results/jpeg/64.nis.jpeg b/src/codecs/tests/results/jpeg/64.nis.jpeg similarity index 100% rename from codecs/tests/results/jpeg/64.nis.jpeg rename to src/codecs/tests/results/jpeg/64.nis.jpeg diff --git a/codecs/tests/results/jpeg/64.sharp.jpeg b/src/codecs/tests/results/jpeg/64.sharp.jpeg similarity index 100% rename from codecs/tests/results/jpeg/64.sharp.jpeg rename to src/codecs/tests/results/jpeg/64.sharp.jpeg diff --git a/codecs/tests/results/png/256.jis.png b/src/codecs/tests/results/png/256.jis.png similarity index 100% rename from codecs/tests/results/png/256.jis.png rename to src/codecs/tests/results/png/256.jis.png diff --git a/codecs/tests/results/png/256.nis.png b/src/codecs/tests/results/png/256.nis.png similarity index 100% rename from codecs/tests/results/png/256.nis.png rename to src/codecs/tests/results/png/256.nis.png diff --git a/codecs/tests/results/png/256.sharp.png b/src/codecs/tests/results/png/256.sharp.png similarity index 100% rename from codecs/tests/results/png/256.sharp.png rename to src/codecs/tests/results/png/256.sharp.png diff --git a/codecs/tests/results/png/256.upng.png b/src/codecs/tests/results/png/256.upng.png similarity index 100% rename from codecs/tests/results/png/256.upng.png rename to src/codecs/tests/results/png/256.upng.png diff --git a/codecs/tests/results/png/512.jis.png b/src/codecs/tests/results/png/512.jis.png similarity index 100% rename from codecs/tests/results/png/512.jis.png rename to src/codecs/tests/results/png/512.jis.png diff --git a/codecs/tests/results/png/512.nis.png b/src/codecs/tests/results/png/512.nis.png similarity index 100% rename from codecs/tests/results/png/512.nis.png rename to src/codecs/tests/results/png/512.nis.png diff --git a/codecs/tests/results/png/512.sharp.png b/src/codecs/tests/results/png/512.sharp.png similarity index 100% rename from codecs/tests/results/png/512.sharp.png rename to src/codecs/tests/results/png/512.sharp.png diff --git a/codecs/tests/results/png/512.upng.png b/src/codecs/tests/results/png/512.upng.png similarity index 100% rename from codecs/tests/results/png/512.upng.png rename to src/codecs/tests/results/png/512.upng.png diff --git a/codecs/tests/results/png/64.jis.png b/src/codecs/tests/results/png/64.jis.png similarity index 100% rename from codecs/tests/results/png/64.jis.png rename to src/codecs/tests/results/png/64.jis.png diff --git a/codecs/tests/results/png/64.nis.png b/src/codecs/tests/results/png/64.nis.png similarity index 100% rename from codecs/tests/results/png/64.nis.png rename to src/codecs/tests/results/png/64.nis.png diff --git a/codecs/tests/results/png/64.sharp.png b/src/codecs/tests/results/png/64.sharp.png similarity index 100% rename from codecs/tests/results/png/64.sharp.png rename to src/codecs/tests/results/png/64.sharp.png diff --git a/codecs/tests/results/png/64.upng.png b/src/codecs/tests/results/png/64.upng.png similarity index 100% rename from codecs/tests/results/png/64.upng.png rename to src/codecs/tests/results/png/64.upng.png diff --git a/codecs/tests/webp.js b/src/codecs/tests/webp.js similarity index 100% rename from codecs/tests/webp.js rename to src/codecs/tests/webp.js diff --git a/codecs/wasm/bin/codecs.wasm b/src/codecs/wasm/bin/codecs.wasm similarity index 100% rename from codecs/wasm/bin/codecs.wasm rename to src/codecs/wasm/bin/codecs.wasm diff --git a/codecs/wasm/bin/simd.wasm b/src/codecs/wasm/bin/simd.wasm similarity index 100% rename from codecs/wasm/bin/simd.wasm rename to src/codecs/wasm/bin/simd.wasm diff --git a/codecs/wasm/bundle/browser.js b/src/codecs/wasm/bundle/browser.js similarity index 100% rename from codecs/wasm/bundle/browser.js rename to src/codecs/wasm/bundle/browser.js diff --git a/codecs/wasm/index.js b/src/codecs/wasm/index.js similarity index 100% rename from codecs/wasm/index.js rename to src/codecs/wasm/index.js diff --git a/codecs/wasm/index.mjs b/src/codecs/wasm/index.mjs similarity index 100% rename from codecs/wasm/index.mjs rename to src/codecs/wasm/index.mjs diff --git a/png/README.md b/src/png/README.md similarity index 100% rename from png/README.md rename to src/png/README.md diff --git a/png/node.js b/src/png/node.js similarity index 100% rename from png/node.js rename to src/png/node.js diff --git a/png/src/crc.mjs b/src/png/src/crc.mjs similarity index 100% rename from png/src/crc.mjs rename to src/png/src/crc.mjs diff --git a/png/src/mem.mjs b/src/png/src/mem.mjs similarity index 100% rename from png/src/mem.mjs rename to src/png/src/mem.mjs diff --git a/png/src/png.mjs b/src/png/src/png.mjs similarity index 100% rename from png/src/png.mjs rename to src/png/src/png.mjs diff --git a/png/src/zlib.mjs b/src/png/src/zlib.mjs similarity index 100% rename from png/src/zlib.mjs rename to src/png/src/zlib.mjs diff --git a/tests/averageColor.js b/src/tests/averageColor.js similarity index 61% rename from tests/averageColor.js rename to src/tests/averageColor.js index 3994e2e..7cddba3 100644 --- a/tests/averageColor.js +++ b/src/tests/averageColor.js @@ -1,7 +1,7 @@ const fs = require('fs').promises; -const {Image} = require('../ImageScript'); +const {Image} = require('../../../ImageScript'); (async () => { - const binary = await fs.readFile('./tests/targets/readme.png'); + const binary = await fs.readFile('./src/tests/targets/readme.png'); const image = await Image.decode(binary); const avgColor = image.averageColor(); if (avgColor !== 0x333c3dff) process.exit(1); diff --git a/tests/circle.js b/src/tests/circle.js similarity index 69% rename from tests/circle.js rename to src/tests/circle.js index 496a1d5..7f55d3a 100644 --- a/tests/circle.js +++ b/src/tests/circle.js @@ -1,5 +1,5 @@ const fs = require('fs').promises; -const {Image} = require('../ImageScript'); +const {Image} = require('../../ImageScript'); const panic = message => { console.error(message); @@ -14,9 +14,9 @@ const panic = message => { const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/circle.png', encoded); + await fs.writeFile('./src/tests/targets/circle.png', encoded); - const target = await fs.readFile('./tests/targets/circle.png'); + const target = await fs.readFile('./src/tests/targets/circle.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) panic('drawCircle 128 failed'); } @@ -27,9 +27,9 @@ const panic = message => { const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/circle2.png', encoded); + await fs.writeFile('./src/tests/targets/circle2.png', encoded); - const target = await fs.readFile('./tests/targets/circle2.png'); + const target = await fs.readFile('./src/tests/targets/circle2.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) panic('drawCircle 320 failed'); } @@ -41,9 +41,9 @@ const panic = message => { const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/circle3.png', encoded); + await fs.writeFile('./src/tests/targets/circle3.png', encoded); - const target = await fs.readFile('./tests/targets/circle3.png'); + const target = await fs.readFile('./src/tests/targets/circle3.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) panic('cropCircle failed'); } @@ -55,9 +55,9 @@ const panic = message => { const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/circle4.png', encoded); + await fs.writeFile('./src/tests/targets/circle4.png', encoded); - const target = await fs.readFile('./tests/targets/circle4.png'); + const target = await fs.readFile('./src/tests/targets/circle4.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) panic('cropCircle max feathering failed'); } })(); diff --git a/tests/crop.js b/src/tests/crop.js similarity index 69% rename from tests/crop.js rename to src/tests/crop.js index 121ba24..38d814e 100644 --- a/tests/crop.js +++ b/src/tests/crop.js @@ -1,5 +1,5 @@ const fs = require('fs').promises; -const {Image} = require('../ImageScript'); +const {Image} = require('../../ImageScript'); (async () => { const image = new Image(512, 512); @@ -9,8 +9,8 @@ const {Image} = require('../ImageScript'); const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/crop.png', encoded); + await fs.writeFile('./src/tests/targets/crop.png', encoded); - const target = await fs.readFile('./tests/targets/crop.png'); + const target = await fs.readFile('./src/tests/targets/crop.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); })(); diff --git a/tests/decode.js b/src/tests/decode.js similarity index 77% rename from tests/decode.js rename to src/tests/decode.js index a20070f..ec35e4a 100644 --- a/tests/decode.js +++ b/src/tests/decode.js @@ -1,5 +1,5 @@ const fs = require('fs').promises; -const {Image} = require('../ImageScript'); +const {Image} = require('../../ImageScript'); const ImageTest = require('./image'); const panic = message => { @@ -9,7 +9,7 @@ const panic = message => { (async () => { { - const binary = await fs.readFile('./tests/targets/image.png'); + const binary = await fs.readFile('./src/tests/targets/image.png'); const image = await Image.decode(binary); const target = await ImageTest; @@ -17,7 +17,7 @@ const panic = message => { } { - const binary = await fs.readFile('./tests/targets/external.png'); + const binary = await fs.readFile('./src/tests/targets/external.png'); const image = await Image.decode(binary); if ([image.width, image.height].some(v => v !== 638)) diff --git a/tests/fill.js b/src/tests/fill.js similarity index 69% rename from tests/fill.js rename to src/tests/fill.js index b6c235c..82d55b4 100644 --- a/tests/fill.js +++ b/src/tests/fill.js @@ -1,5 +1,5 @@ const fs = require('fs').promises; -const {Image} = require('../ImageScript'); +const {Image} = require('../../ImageScript'); const panic = message => { console.error(message); @@ -14,9 +14,9 @@ const panic = message => { const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/fill-static.png', encoded); + await fs.writeFile('./src/tests/targets/fill-static.png', encoded); - const target = await fs.readFile('./tests/targets/fill-static.png'); + const target = await fs.readFile('./src/tests/targets/fill-static.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) panic('fill static doesn\'t equal'); } @@ -27,9 +27,9 @@ const panic = message => { const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/fill-func.png', encoded); + await fs.writeFile('./src/tests/targets/fill-func.png', encoded); - const target = await fs.readFile('./tests/targets/fill-func.png'); + const target = await fs.readFile('./src/tests/targets/fill-func.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) panic('fill func doesn\'t equal'); } })(); diff --git a/tests/fisheye.js b/src/tests/fisheye.js similarity index 54% rename from tests/fisheye.js rename to src/tests/fisheye.js index 73cd529..842f94b 100644 --- a/tests/fisheye.js +++ b/src/tests/fisheye.js @@ -1,8 +1,8 @@ const fs = require('fs').promises; -const {Image} = require('../ImageScript'); +const {Image} = require('../../ImageScript'); (async () => { - const input = await fs.readFile('./tests/targets/external.png'); + const input = await fs.readFile('./src/tests/targets/external.png'); const image = await Image.decode(input); image.fisheye(); @@ -10,9 +10,9 @@ const {Image} = require('../ImageScript'); const output = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/fisheye.png', output); + await fs.writeFile('./src/tests/targets/fisheye.png', output); - const target = await fs.readFile('./tests/targets/fisheye.png'); + const target = await fs.readFile('./src/tests/targets/fisheye.png'); if (!Buffer.from(target).equals(Buffer.from(output))) process.exit(1); diff --git a/tests/font.js b/src/tests/font.js similarity index 63% rename from tests/font.js rename to src/tests/font.js index f14909d..fa348c3 100644 --- a/tests/font.js +++ b/src/tests/font.js @@ -5,7 +5,7 @@ */ const fs = require('fs').promises; -const {Image} = require('../ImageScript'); +const {Image} = require('../../ImageScript'); const panic = message => { console.error(message); @@ -14,24 +14,24 @@ const panic = message => { (async () => { { - const font = await Image.renderText(await fs.readFile('./tests/fonts/carbon phyber.ttf'), 128, 'ThE qUiCk'); + const font = await Image.renderText(await fs.readFile('./src/tests/fonts/carbon phyber.ttf'), 128, 'ThE qUiCk'); const encoded = await font.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/font-1.png', encoded); + await fs.writeFile('./src/tests/targets/font-1.png', encoded); - const desired = await fs.readFile('./tests/targets/font-1.png'); + const desired = await fs.readFile('./src/tests/targets/font-1.png'); if (!desired.equals(Buffer.from(encoded))) panic('font 1 doesn\'t match'); } { - const font = await Image.renderText(await fs.readFile('./tests/fonts/ethnocentric rg.ttf'), 128, 'BrOwN fOx'); + const font = await Image.renderText(await fs.readFile('./src/tests/fonts/ethnocentric rg.ttf'), 128, 'BrOwN fOx'); const encoded = await font.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/font-2.png', encoded); + await fs.writeFile('./src/tests/targets/font-2.png', encoded); - const desired = await fs.readFile('./tests/targets/font-2.png'); + const desired = await fs.readFile('./src/tests/targets/font-2.png'); if (!desired.equals(Buffer.from(encoded))) panic('font 2 doesn\'t match'); } })(); diff --git a/tests/fonts/carbon phyber.ttf b/src/tests/fonts/carbon phyber.ttf similarity index 100% rename from tests/fonts/carbon phyber.ttf rename to src/tests/fonts/carbon phyber.ttf diff --git a/tests/fonts/ethnocentric rg.ttf b/src/tests/fonts/ethnocentric rg.ttf similarity index 100% rename from tests/fonts/ethnocentric rg.ttf rename to src/tests/fonts/ethnocentric rg.ttf diff --git a/tests/gif.js b/src/tests/gif.js similarity index 80% rename from tests/gif.js rename to src/tests/gif.js index 1be7c56..607815b 100644 --- a/tests/gif.js +++ b/src/tests/gif.js @@ -1,5 +1,5 @@ const fs = require('fs').promises; -const {Frame, GIF} = require('../ImageScript'); +const {Frame, GIF} = require('../../ImageScript'); const panic = message => { console.error(message); @@ -20,15 +20,15 @@ const panic = message => { const encoded = await gif.encode(1); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/gif.gif', encoded); + await fs.writeFile('./src/tests/targets/gif.gif', encoded); - // const desired = await fs.readFile('./tests/targets/gif.gif'); + // const desired = await fs.readFile('./src/tests/targets/gif.gif'); // if (!desired.equals(encoded)) // panic('encoding failed'); } { - const binary = await fs.readFile('./tests/targets/gif.gif'); + const binary = await fs.readFile('./src/tests/targets/gif.gif'); const decoded = await GIF.decode(binary); if (decoded.width !== gif.width) panic('decode: incorrect width'); diff --git a/tests/image.js b/src/tests/image.js similarity index 68% rename from tests/image.js rename to src/tests/image.js index 84d0a44..91dc03a 100644 --- a/tests/image.js +++ b/src/tests/image.js @@ -1,5 +1,5 @@ const fs = require('fs').promises; -const {Image} = require('../ImageScript'); +const {Image} = require('../../ImageScript'); module.exports = (async () => { const image = new Image(128, 128); @@ -8,9 +8,9 @@ module.exports = (async () => { const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/image.png', encoded); + await fs.writeFile('./src/tests/targets/image.png', encoded); - const desired = await fs.readFile('./tests/targets/image.png'); + const desired = await fs.readFile('./src/tests/targets/image.png'); if (process.argv[1].slice(-8) === 'image.js') process.exit(desired.equals(encoded) ? 0 : 1); return image; diff --git a/tests/invert.js b/src/tests/invert.js similarity index 66% rename from tests/invert.js rename to src/tests/invert.js index 4772d99..f047953 100644 --- a/tests/invert.js +++ b/src/tests/invert.js @@ -1,5 +1,5 @@ const fs = require('fs').promises; -const {Image} = require('../ImageScript'); +const {Image} = require('../../ImageScript'); (async () => { { @@ -10,9 +10,9 @@ const {Image} = require('../ImageScript'); const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/invert.png', encoded); + await fs.writeFile('./src/tests/targets/invert.png', encoded); - const target = await fs.readFile('./tests/targets/invert.png'); + const target = await fs.readFile('./src/tests/targets/invert.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); } @@ -24,9 +24,9 @@ const {Image} = require('../ImageScript'); const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/invert-value.png', encoded); + await fs.writeFile('./src/tests/targets/invert-value.png', encoded); - const target = await fs.readFile('./tests/targets/invert-value.png'); + const target = await fs.readFile('./src/tests/targets/invert-value.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); } @@ -38,9 +38,9 @@ const {Image} = require('../ImageScript'); const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/invert-saturation.png', encoded); + await fs.writeFile('./src/tests/targets/invert-saturation.png', encoded); - const target = await fs.readFile('./tests/targets/invert-saturation.png'); + const target = await fs.readFile('./src/tests/targets/invert-saturation.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); } @@ -52,9 +52,9 @@ const {Image} = require('../ImageScript'); const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/invert-hue.png', encoded); + await fs.writeFile('./src/tests/targets/invert-hue.png', encoded); - const target = await fs.readFile('./tests/targets/invert-hue.png'); + const target = await fs.readFile('./src/tests/targets/invert-hue.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); } @@ -66,9 +66,9 @@ const {Image} = require('../ImageScript'); const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/invert-hueshift.png', encoded); + await fs.writeFile('./src/tests/targets/invert-hueshift.png', encoded); - const target = await fs.readFile('./tests/targets/invert-hueshift.png'); + const target = await fs.readFile('./src/tests/targets/invert-hueshift.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); } })(); diff --git a/tests/jpeg.js b/src/tests/jpeg.js similarity index 77% rename from tests/jpeg.js rename to src/tests/jpeg.js index 882823e..d493d51 100644 --- a/tests/jpeg.js +++ b/src/tests/jpeg.js @@ -1,5 +1,5 @@ const fs = require('fs').promises; -const {Image} = require('../ImageScript'); +const {Image} = require('../../ImageScript'); const panic = message => { console.error(message); @@ -7,7 +7,7 @@ const panic = message => { }; (async () => { - const binary = await fs.readFile('./tests/targets/external.jpg'); + const binary = await fs.readFile('./src/tests/targets/external.jpg'); const image = await Image.decode(binary); if ([image.width, image.height].some(v => v !== 638)) diff --git a/tests/misc.js b/src/tests/misc.js similarity index 98% rename from tests/misc.js rename to src/tests/misc.js index e5835af..8997938 100644 --- a/tests/misc.js +++ b/src/tests/misc.js @@ -1,4 +1,4 @@ -const {Image, Frame, GIF} = require('../ImageScript'); +const {Image, Frame, GIF} = require('../../ImageScript'); const panic = msg => { console.error(msg); process.exit(1); diff --git a/tests/readme.js b/src/tests/readme.js similarity index 91% rename from tests/readme.js rename to src/tests/readme.js index 1dcbd65..49df57f 100644 --- a/tests/readme.js +++ b/src/tests/readme.js @@ -1,18 +1,18 @@ -const {Image} = require('..'); +const {Image} = require('../../'); const fs = require('fs').promises; (async () => { const [backgroundSVG, avatarBinary, badges, font] = await Promise.all([ - fs.readFile('./tests/svgs/background.svg').then(b => b.toString()), - fs.readFile('./tests/targets/external.png'), + fs.readFile('./src/tests/svgs/background.svg').then(b => b.toString()), + fs.readFile('./src/tests/targets/external.png'), Promise.all( [ 'crown', 'potato', 'mask', 'microbe', 'petri_dish', 'thermometer', 'cigarette' ].map( - x => fs.readFile(`./tests/svgs/${x}.svg`) + x => fs.readFile(`./src/tests/svgs/${x}.svg`) .then(b => b.toString())) ), - fs.readFile('./tests/fonts/carbon phyber.ttf') + fs.readFile('./src/tests/fonts/carbon phyber.ttf') ]); const image = new Image(1000, 700); @@ -104,8 +104,8 @@ const fs = require('fs').promises; const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/readme.png', encoded); + await fs.writeFile('./src/tests/targets/readme.png', encoded); - if (!(await fs.readFile('./tests/targets/readme.png')).equals(Buffer.from(encoded))) + if (!(await fs.readFile('./src/tests/targets/readme.png')).equals(Buffer.from(encoded))) process.exit(1); })(); diff --git a/tests/resize.js b/src/tests/resize.js similarity index 57% rename from tests/resize.js rename to src/tests/resize.js index fa0aff4..90180eb 100644 --- a/tests/resize.js +++ b/src/tests/resize.js @@ -1,15 +1,15 @@ const fs = require('fs').promises; -const {Image} = require('../ImageScript'); +const {Image} = require('../../ImageScript'); (async () => { - const binary = await fs.readFile('./tests/targets/image.png'); + const binary = await fs.readFile('./src/tests/targets/image.png'); const image = await Image.decode(binary); image.resize(image.width / 4, Image.RESIZE_AUTO); const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/resize.png', encoded); + await fs.writeFile('./src/tests/targets/resize.png', encoded); - const target = await fs.readFile('./tests/targets/resize.png'); + const target = await fs.readFile('./src/tests/targets/resize.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); })(); diff --git a/tests/rotate.js b/src/tests/rotate.js similarity index 59% rename from tests/rotate.js rename to src/tests/rotate.js index c0a8089..9767016 100644 --- a/tests/rotate.js +++ b/src/tests/rotate.js @@ -1,5 +1,5 @@ const fs = require('fs').promises; -const {Image} = require('../ImageScript'); +const {Image} = require('../../ImageScript'); const panic = msg => { console.error(msg); process.exit(1); @@ -7,46 +7,46 @@ const panic = msg => { (async () => { { - const binary = await fs.readFile('./tests/targets/image.png'); + const binary = await fs.readFile('./src/tests/targets/image.png'); const image = await Image.decode(binary); image.rotate(45); const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/rotate-45.png', encoded); + await fs.writeFile('./src/tests/targets/rotate-45.png', encoded); - await fs.writeFile('./tests/targets/rotate-45.png', encoded); - const target = await fs.readFile('./tests/targets/rotate-45.png'); + await fs.writeFile('./src/tests/targets/rotate-45.png', encoded); + const target = await fs.readFile('./src/tests/targets/rotate-45.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) panic('rotate 45 failed'); } { - const binary = await fs.readFile('./tests/targets/image.png'); + const binary = await fs.readFile('./src/tests/targets/image.png'); const image = await Image.decode(binary); image.rotate(45, false); const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/rotate-45-noresize.png', encoded); + await fs.writeFile('./src/tests/targets/rotate-45-noresize.png', encoded); - const target = await fs.readFile('./tests/targets/rotate-45-noresize.png'); + const target = await fs.readFile('./src/tests/targets/rotate-45-noresize.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) panic('rotate 45 noresize failed'); } { - const binary = await fs.readFile('./tests/targets/image.png'); + const binary = await fs.readFile('./src/tests/targets/image.png'); const image = await Image.decode(binary); image.rotate(180); const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/rotate-180.png', encoded); + await fs.writeFile('./src/tests/targets/rotate-180.png', encoded); - await fs.writeFile('./tests/targets/rotate-180.png', encoded); - const target = await fs.readFile('./tests/targets/rotate-180.png'); + await fs.writeFile('./src/tests/targets/rotate-180.png', encoded); + const target = await fs.readFile('./src/tests/targets/rotate-180.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) panic('rotate 180 failed'); } diff --git a/tests/run.js b/src/tests/run.js similarity index 92% rename from tests/run.js rename to src/tests/run.js index 20fb3fa..a694016 100644 --- a/tests/run.js +++ b/src/tests/run.js @@ -2,12 +2,12 @@ const fs = require('fs'); const child_process = require('child_process'); (async () => { - for (const file of fs.readdirSync('./tests/')) { + for (const file of fs.readdirSync('./src/tests/')) { if (file === 'run.js' || file.slice(-3) !== '.js') continue; console.log(`running test ${file}`); const start = Date.now(); - const proc = child_process.exec(`node --unhandled-rejections=strict ./tests/${file}`); + const proc = child_process.exec(`node --unhandled-rejections=strict ./src/tests/${file}`); proc.stderr.pipe(process.stderr); proc.stdout.pipe(process.stdout); await new Promise(resolve => { diff --git a/tests/svg.js b/src/tests/svg.js similarity index 56% rename from tests/svg.js rename to src/tests/svg.js index 74096d3..94bf9de 100644 --- a/tests/svg.js +++ b/src/tests/svg.js @@ -1,14 +1,14 @@ -const {Image} = require('../ImageScript'); +const {Image} = require('../../ImageScript'); const fs = require('fs').promises; (async () => { - const svg = await fs.readFile('./tests/svgs/potato.svg'); + const svg = await fs.readFile('./src/tests/svgs/potato.svg'); const image = await Image.renderSVG(svg.toString(), 256 / 36, Image.SVG_MODE_SCALE); const encoded = await image.encode(1, {creationTime: 0, software: ''}); if (process.env.OVERWRITE_TEST) - await fs.writeFile('./tests/targets/potato.png', encoded); + await fs.writeFile('./src/tests/targets/potato.png', encoded); - const target = await fs.readFile('./tests/targets/potato.png'); + const target = await fs.readFile('./src/tests/targets/potato.png'); if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); })(); diff --git a/tests/svgs/background.svg b/src/tests/svgs/background.svg similarity index 100% rename from tests/svgs/background.svg rename to src/tests/svgs/background.svg diff --git a/tests/svgs/cigarette.svg b/src/tests/svgs/cigarette.svg similarity index 100% rename from tests/svgs/cigarette.svg rename to src/tests/svgs/cigarette.svg diff --git a/tests/svgs/crown.svg b/src/tests/svgs/crown.svg similarity index 100% rename from tests/svgs/crown.svg rename to src/tests/svgs/crown.svg diff --git a/tests/svgs/mask.svg b/src/tests/svgs/mask.svg similarity index 100% rename from tests/svgs/mask.svg rename to src/tests/svgs/mask.svg diff --git a/tests/svgs/microbe.svg b/src/tests/svgs/microbe.svg similarity index 100% rename from tests/svgs/microbe.svg rename to src/tests/svgs/microbe.svg diff --git a/tests/svgs/petri_dish.svg b/src/tests/svgs/petri_dish.svg similarity index 100% rename from tests/svgs/petri_dish.svg rename to src/tests/svgs/petri_dish.svg diff --git a/tests/svgs/potato.svg b/src/tests/svgs/potato.svg similarity index 100% rename from tests/svgs/potato.svg rename to src/tests/svgs/potato.svg diff --git a/tests/svgs/thermometer.svg b/src/tests/svgs/thermometer.svg similarity index 100% rename from tests/svgs/thermometer.svg rename to src/tests/svgs/thermometer.svg diff --git a/tests/targets/circle.png b/src/tests/targets/circle.png similarity index 100% rename from tests/targets/circle.png rename to src/tests/targets/circle.png diff --git a/tests/targets/circle2.png b/src/tests/targets/circle2.png similarity index 100% rename from tests/targets/circle2.png rename to src/tests/targets/circle2.png diff --git a/tests/targets/circle3.png b/src/tests/targets/circle3.png similarity index 100% rename from tests/targets/circle3.png rename to src/tests/targets/circle3.png diff --git a/tests/targets/circle4.png b/src/tests/targets/circle4.png similarity index 100% rename from tests/targets/circle4.png rename to src/tests/targets/circle4.png diff --git a/tests/targets/crop.png b/src/tests/targets/crop.png similarity index 100% rename from tests/targets/crop.png rename to src/tests/targets/crop.png diff --git a/tests/targets/external.jpg b/src/tests/targets/external.jpg similarity index 100% rename from tests/targets/external.jpg rename to src/tests/targets/external.jpg diff --git a/tests/targets/external.png b/src/tests/targets/external.png similarity index 100% rename from tests/targets/external.png rename to src/tests/targets/external.png diff --git a/tests/targets/fill-func.png b/src/tests/targets/fill-func.png similarity index 100% rename from tests/targets/fill-func.png rename to src/tests/targets/fill-func.png diff --git a/tests/targets/fill-static.png b/src/tests/targets/fill-static.png similarity index 100% rename from tests/targets/fill-static.png rename to src/tests/targets/fill-static.png diff --git a/tests/targets/fisheye.png b/src/tests/targets/fisheye.png similarity index 100% rename from tests/targets/fisheye.png rename to src/tests/targets/fisheye.png diff --git a/tests/targets/font-1.png b/src/tests/targets/font-1.png similarity index 100% rename from tests/targets/font-1.png rename to src/tests/targets/font-1.png diff --git a/tests/targets/font-2.png b/src/tests/targets/font-2.png similarity index 100% rename from tests/targets/font-2.png rename to src/tests/targets/font-2.png diff --git a/tests/targets/gif.gif b/src/tests/targets/gif.gif similarity index 100% rename from tests/targets/gif.gif rename to src/tests/targets/gif.gif diff --git a/tests/targets/image.png b/src/tests/targets/image.png similarity index 100% rename from tests/targets/image.png rename to src/tests/targets/image.png diff --git a/tests/targets/invert-hue.png b/src/tests/targets/invert-hue.png similarity index 100% rename from tests/targets/invert-hue.png rename to src/tests/targets/invert-hue.png diff --git a/tests/targets/invert-hueshift.png b/src/tests/targets/invert-hueshift.png similarity index 100% rename from tests/targets/invert-hueshift.png rename to src/tests/targets/invert-hueshift.png diff --git a/tests/targets/invert-saturation.png b/src/tests/targets/invert-saturation.png similarity index 100% rename from tests/targets/invert-saturation.png rename to src/tests/targets/invert-saturation.png diff --git a/tests/targets/invert-value.png b/src/tests/targets/invert-value.png similarity index 100% rename from tests/targets/invert-value.png rename to src/tests/targets/invert-value.png diff --git a/tests/targets/invert.png b/src/tests/targets/invert.png similarity index 100% rename from tests/targets/invert.png rename to src/tests/targets/invert.png diff --git a/tests/targets/issues.png b/src/tests/targets/issues.png similarity index 100% rename from tests/targets/issues.png rename to src/tests/targets/issues.png diff --git a/tests/targets/potato.png b/src/tests/targets/potato.png similarity index 100% rename from tests/targets/potato.png rename to src/tests/targets/potato.png diff --git a/tests/targets/readme.png b/src/tests/targets/readme.png similarity index 100% rename from tests/targets/readme.png rename to src/tests/targets/readme.png diff --git a/tests/targets/resize.png b/src/tests/targets/resize.png similarity index 100% rename from tests/targets/resize.png rename to src/tests/targets/resize.png diff --git a/tests/targets/rotate-180.png b/src/tests/targets/rotate-180.png similarity index 100% rename from tests/targets/rotate-180.png rename to src/tests/targets/rotate-180.png diff --git a/tests/targets/rotate-45-noresize.png b/src/tests/targets/rotate-45-noresize.png similarity index 100% rename from tests/targets/rotate-45-noresize.png rename to src/tests/targets/rotate-45-noresize.png diff --git a/tests/targets/rotate-45.png b/src/tests/targets/rotate-45.png similarity index 100% rename from tests/targets/rotate-45.png rename to src/tests/targets/rotate-45.png diff --git a/tests/targets/twemoji.png b/src/tests/targets/twemoji.png similarity index 100% rename from tests/targets/twemoji.png rename to src/tests/targets/twemoji.png diff --git a/src/types/ImageScript.d.ts b/src/types/ImageScript.d.ts new file mode 100644 index 0000000..d88dcec --- /dev/null +++ b/src/types/ImageScript.d.ts @@ -0,0 +1,662 @@ +/** + * Represents an image; provides utility functions + */ +export class Image { + /** + * Converts RGBA components to an RGBA value + * @param {number} r red (0..255) + * @param {number} g green (0..255) + * @param {number} b blue (0..255) + * @param {number} a alpha (0..255) + * @returns {number} RGBA value + */ + static rgbaToColor(r: number, g: number, b: number, a: number): number; + /** + * Converts RGB components to an RGBA value (assuming alpha = 255) + * @param {number} r red (0..255) + * @param {number} g green (0..255) + * @param {number} b blue (0..255) + * @returns {number} RGBA value + */ + static rgbToColor(r: number, g: number, b: number): number; + /** + * Converts HSLA colors to RGBA colors + * @param {number} h hue (0..1) + * @param {number} s saturation (0..1) + * @param {number} l lightness (0..1) + * @param {number} a opacity (0..1) + * @returns {number} color + */ + static hslaToColor(h: number, s: number, l: number, a: number): number; + /** + * Converts HSL colors to RGBA colors (assuming an opacity of 255) + * @param {number} h hue (0..1) + * @param {number} s saturation (0..1) + * @param {number} l lightness (0..1) + * @returns {number} color + */ + static hslToColor(h: number, s: number, l: number): number; + /** + * Converts an RGBA value to an array of HSLA values + * @param r {number} (0..255) + * @param g {number} (0..255) + * @param b {number} (0..255) + * @param a {number} (0..255) + * @returns {number[]} The HSLA values ([H, S, L, A]) + */ + static rgbaToHSLA(r: number, g: number, b: number, a: number): number[]; + /** + * Converts a color value to an array of RGBA values + * @param {number} color The color value to convert + * @returns {number[]} The RGBA values ([R, G, B, A]) + */ + static colorToRGBA(color: number): number[]; + /** + * Converts a color value to an array of RGB values (ignoring the colors alpha) + * @param {number} color The color value to convert + * @returns {number[]} The RGB values ([R, G, B]) + */ + static colorToRGB(color: number): number[]; + /** + * @private + */ + private static get __out_of_bounds__(); + /** + * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing. + * @returns {string} + */ + static get RESIZE_NEAREST_NEIGHBOR(): string; + /** + * Used for automatically preserving an images aspect ratio when resizing. + * @returns {number} + */ + static get RESIZE_AUTO(): number; + /** + * Creates a multi-point gradient generator + * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`) + * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1). + */ + static gradient(colors: { + [x: number]: number; + }): ((arg0: number) => number); + /** + * @private + */ + private static __gradient__; + /** + * Decodes an image (PNG, JPEG or TIFF) + * @param {Buffer|Uint8Array} data The binary data to decode + * @return {Promise} The decoded image + */ + static decode(data: Buffer | Uint8Array): Promise; + /** + * Scale the SVG by the given amount. For use with {@link Image.renderSVG} + * @return {number} + */ + static get SVG_MODE_SCALE(): number; + /** + * Scale the SVG to fit the given width. For use with {@link Image.renderSVG} + * @return {number} + */ + static get SVG_MODE_WIDTH(): number; + /** + * Scale the SVG to fit the given height. For use with {@link Image.renderSVG} + * @return {number} + */ + static get SVG_MODE_HEIGHT(): number; + /** + * Creates a new image from the given SVG + * @param {string} svg The SVG content + * @param {number} size The size to use + * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT}) + * @return {Promise} The rendered SVG graphic + */ + static renderSVG(svg: string, size?: number, mode?: number): Promise; + /** + * Creates a new image containing the rendered text. + * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use + * @param {number} scale Font size to use + * @param {string} text Text to render + * @param {number} [color=0xffffffff] Text color to use + * @param {TextLayout} [layout] The text layout to use + * @return {Promise} The rendered text + */ + static renderText(font: Uint8Array, scale: number, text: string, color?: number, layout?: TextLayout): Promise; + /** + * Creates a new image with the given dimensions + * @param {number} width + * @param {number} height + * @returns {Image} + */ + constructor(width: number, height: number); + /** @private */ + private __width__; + /** @private */ + private __height__; + /** @private */ + private __buffer__; + /** @private */ + private __view__; + /** @private */ + private __u32__; + /** + * The images RGBA pixel data + * @type {Uint8ClampedArray} + */ + bitmap: Uint8ClampedArray; + /** + * @private + * @returns {string} + */ + private toString; + /** + * The images width + * @returns {number} + */ + get width(): number; + /** + * The images height + * @returns {number} + */ + get height(): number; + /** + * Yields an [x, y, color] array for every pixel in the image + * @yields {number[]} The coordinates and color of the pixel ([x, y, color]) + */ + iterateWithColors(): {}; + /** + * Gets the pixel color at the specified position + * @param {number} x + * @param {number} y + * @returns {number} The color value + */ + getPixelAt(x: number, y: number): number; + /** + * Gets the pixel color at the specified position + * @param {number} x + * @param {number} y + * @returns {Uint8ClampedArray} The RGBA value + */ + getRGBAAt(x: number, y: number): Uint8ClampedArray; + /** + * Sets the pixel color for the specified position + * @param {number} x + * @param {number} y + * @param {number} pixelColor + */ + setPixelAt(x: number, y: number, pixelColor: number): Image; + /** + * @private + * @param {number} x + * @param {number} y + * @param {number} pixelColor + */ + private __set_pixel__; + /** + * @private + * @param {number} x + * @param {number} y + */ + private __check_boundaries__; + /** + * @callback colorFunction + * @param {number} x + * @param {number} y + * @returns {number} pixel color + */ + /** + * Fills the image data with the supplied color + * @param {number|colorFunction} color + * @returns {Image} + */ + fill(color: number | ((x: number, y: number) => number)): Image; + /** + * Clones the current image + * @returns {Image} + */ + clone(): Image; + /** + * Resizes the image by the given factor + * @param {number} factor The factor to resize the image with + * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use + * @returns {Image} + */ + scale(factor: number, mode?: string): Image; + /** @private */ + private __scale__; + /** + * Resizes the image to the given dimensions. + * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio. + * @param {number} width The new width + * @param {number} height The new height + * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use + * @returns {Image} The resized image + */ + resize(width: number, height: number, mode?: string): Image; + /** + * Resizes the image so it is contained in the given bounding box. + * Can return an image with one axis smaller than the given bounding box. + * @param {number} width The width of the bounding box + * @param {number} height The height of the bounding box + * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use + * @returns {Image} The resized image + */ + contain(width: number, height: number, mode?: string): Image; + /** + * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box. + * Always returns the exact dimensions of the bounding box. + * @param {number} width The width of the bounding box + * @param {number} height The height of the bounding box + * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use + * @returns {Image} The resized image + */ + fit(width: number, height: number, mode?: string): Image; + /** + * Resizes the image so it covers the given bounding box, cropping the overflowing edges. + * Always returns the exact dimensions of the bounding box. + * @param {number} width The width of the bounding box + * @param {number} height The height of the bounding box + * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use + * @returns {Image} The resized image + */ + cover(width: number, height: number, mode?: string): Image; + /** @private */ + private __resize__; + /** + * @private + * @param {number} width The new width + * @param {number} height The new height + */ + private __resize_nearest_neighbor__; + /** + * Crops an image to the specified dimensions + * @param {number} x The x offset + * @param {number} y The y offset + * @param {number} width The new images width + * @param {number} height The new images height + * @returns {Image} + */ + crop(x: number, y: number, width: number, height: number): Image; + /** + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + * @returns {Image} + * @private + */ + private __crop__; + /** + * Draws a box at the specified coordinates + * @param {number} x The x offset + * @param {number} y The y offset + * @param {number} width The box width + * @param {number} height The box height + * @param {number|colorFunction} color The color to fill the box in with + * @returns {Image} + */ + drawBox(x: number, y: number, width: number, height: number, color: number | ((x: number, y: number) => number)): Image; + /** + * @private + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + * @param {number} color + */ + private __fast_box__; + /** + * Draws a circle at the specified coordinates with the specified radius + * @param {number} x The center x position + * @param {number} y The center y position + * @param {number} radius The circles radius + * @param {number|colorFunction} color + * @returns {Image} + */ + drawCircle(x: number, y: number, radius: number, color: number | ((x: number, y: number) => number)): Image; + /** + * Crops the image into a circle + * @param {boolean} [max=false] Whether to use the larger dimension for the size + * @param {number} [feathering=0] How much feathering to apply to the edges + * @returns {Image} + */ + cropCircle(max?: boolean, feathering?: number): Image; + /** + * Sets the images opacity + * @param {number} opacity The opacity to apply (0..1) + * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true) + * @returns {Image} + */ + opacity(opacity: number, absolute?: boolean): Image; + /** + * Sets the red channels saturation + * @param {number} saturation The saturation to apply (0..1) + * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true) + * @returns {Image} + */ + red(saturation: number, absolute?: boolean): Image; + /** + * Sets the green channels saturation + * @param {number} saturation The saturation to apply (0..1) + * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true) + * @returns {Image} + */ + green(saturation: number, absolute?: boolean): Image; + /** + * Sets the blue channels saturation + * @param {number} saturation The saturation to apply (0..1) + * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true) + * @returns {Image} + */ + blue(saturation: number, absolute?: boolean): Image; + /** + * @private + * @param {number} value + * @param {boolean} absolute + * @param {number} offset + */ + private __set_channel_value__; + /** + * Sets the brightness of the image + * @param {number} value The lightness to apply (0..1) + * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true) + * @returns {Image} + */ + lightness(value: number, absolute?: boolean): Image; + /** + * Sets the saturation of the image + * @param {number} value The saturation to apply (0..1) + * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true) + * @returns {Image} + */ + saturation(value: number, absolute?: boolean): Image; + /** + * Composites (overlays) the source onto this image at the specified coordinates + * @param {Image} source The image to place + * @param {number} [x=0] The x position to place the image at + * @param {number} [y=0] The y position to place the image at + * @returns {Image} + */ + composite(source: Image, x?: number, y?: number): Image; + /** + * Inverts the images colors + * @returns {Image} + */ + invert(): Image; + /** + * Inverts the images value (lightness) + * @returns {Image} + */ + invertValue(): Image; + /** + * Inverts the images saturation + * @returns {Image} + */ + invertSaturation(): Image; + /** + * Inverts the images hue + * @returns {Image} + */ + invertHue(): Image; + /** + * Shifts the images hue + * @param {number} degrees How many degrees to shift the hue by + */ + hueShift(degrees: number): Image; + /** + * Gets the average color of the image + * @returns {number} + */ + averageColor(): number; + /** + * Gets the images dominant color + * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold + * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold + * @param {number} [bwThreshold=0xf] The black/white threshold (0-64) + * @return {number} The images dominant color + */ + dominantColor(ignoreBlack?: boolean, ignoreWhite?: boolean, bwThreshold?: number): number; + /** + * Rotates the image the given amount of degrees + * @param {number} angle The angle to rotate the image for (in degrees) + * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels + */ + rotate(angle: number, resize?: boolean): Image | Frame; + /** + * @private + * @param {Image|Frame} image + * @returns {Image|Frame} + */ + private __apply__; + /** + * Rounds the images corners + * @param {number} [radius=min(width,height)/4] The radius of the corners + * @return {Image} + */ + roundCorners(radius?: number): Image; + fisheye(radius?: number): Image | Frame; + /** + * @typedef {object} PNGMetadata + * @property {string} [title] The images title + * @property {string} [author] The images author + * @property {string} [description] The images description + * @property {string} [copyright] The images copyright info + * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp + * @property {string} [software="github.com/matmen/ImageScript vX.X.X"] The software used to create this image + * @property {string} [disclaimer] A disclaimer for the image + * @property {string} [warning] A warning for the image + * @property {string} [source] The images source + * @property {string} [comment] A comment for the image + */ + /** + * Encodes the image into a PNG + * @param {number} compression The compression level to use (0-9) + * @param {PNGMetadata} [meta={}] Image metadata + * @return {Promise} The encoded data + */ + encode(compression?: number, { title, author, description, copyright, creationTime, software, disclaimer, warning, source, comment }?: { + /** + * The images title + */ + title?: string; + /** + * The images author + */ + author?: string; + /** + * The images description + */ + description?: string; + /** + * The images copyright info + */ + copyright?: string; + /** + * The images creation timestamp + */ + creationTime?: string | number | Date; + /** + * The software used to create this image + */ + software?: string; + /** + * A disclaimer for the image + */ + disclaimer?: string; + /** + * A warning for the image + */ + warning?: string; + /** + * The images source + */ + source?: string; + /** + * A comment for the image + */ + comment?: string; + }): Promise; + /** + * Encodes the image into a JPEG + * @param {number} [quality=90] The JPEG quality to use (1-100) + * @return {Promise} + */ + encodeJPEG(quality?: number): Promise; + /** + * Encodes the image into a WEBP + * @param {null|number} [quality=null] The WEBP quality to use (0-100) (null is lossless) + * @return {Promise} + */ + encodeWEBP(quality?: null | number): Promise; +} +/** + * Represents a GIF image as an array of frames + * @extends Array + */ +export class GIF extends Array { + /** + * Decodes a GIF image + * @param {Buffer|Uint8Array} data The binary data to decode + * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame + * @return {Promise} The decoded GIF + */ + static decode(data: Buffer | Uint8Array, onlyExtractFirstFrame?: boolean): Promise; + /** + * Creates a new GIF image. + * @param {Frame[]} frames The frames to create the GIF from + * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited) + * @property {number} loopCount How often the GIF will loop for + */ + constructor(frames: Frame[], loopCount?: number); + loopCount: number; + /** + * The GIFs width + * @returns {number} + */ + get width(): number; + /** + * The GIFs height + * @returns {number} + */ + get height(): number; + /** + * The GIFs duration (in ms) + * @return {number} + */ + get duration(): number; + /** + * Encodes the image into a GIF + * @param {number} [quality=95] GIF quality 0-100 + * @return {Promise} The encoded data + */ + encode(quality?: number): Promise; + resize(width: any, height: any, mode?: string): void; +} +/** + * Represents a frame in a GIF + * @extends Image + */ +export class Frame extends Image { + /** + * GIF frame disposal mode KEEP. For use with {@link Frame} + * @returns {string} + */ + static get DISPOSAL_KEEP(): string; + /** + * GIF frame disposal mode PREVIOUS. For use with {@link Frame} + * @returns {string} + */ + static get DISPOSAL_PREVIOUS(): string; + /** + * GIF frame disposal mode BACKGROUND. For use with {@link Frame} + * @returns {string} + */ + static get DISPOSAL_BACKGROUND(): string; + static __convert_disposal_mode__(mode: any): any; + /** + * Converts an Image instance to a Frame, cloning it in the process + * @param {Image} image The image to create the frame from + * @param {number} [duration = 100] The frames duration (in ms) + * @param {number} [xOffset=0] The frames offset on the x-axis + * @param {number} [yOffset=0] The frames offset on the y-axis + * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND}) + * @return {Frame} + */ + static from(image: Image, duration?: number, xOffset?: number, yOffset?: number, disposalMode?: string | number): Frame; + /** + * Creates a new, blank frame + * @param {number} width + * @param {number} height + * @param {number} [duration = 100] The frames duration (in ms) + * @param {number} [xOffset=0] The frames offset on the x-axis + * @param {number} [yOffset=0] The frames offset on the y-axis + * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND}) + * @return {Frame} + */ + constructor(width: number, height: number, duration?: number, xOffset?: number, yOffset?: number, disposalMode?: string | number); + duration: number; + xOffset: number; + yOffset: number; + disposalMode: string | number; +} +export class TextLayout { + /** + * Layout options for {@link Image.renderText} + * @param {object} [options] + * @param {number} [options.maxWidth=Infinity] The texts max width + * @param {number} [options.maxHeight=Infinity] The texts max height + * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char) + * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right) + * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom) + * @param {boolean} [options.wrapHardBreaks=true] Whether to force wrap at new line characters + */ + constructor(options?: { + maxWidth?: number; + maxHeight?: number; + wrapStyle?: string; + verticalAlign?: string; + horizontalAlign?: string; + wrapHardBreaks?: boolean; + }); + maxWidth: number; + maxHeight: number; + wrapStyle: string; + verticalAlign: string; + horizontalAlign: string; + wrapHardBreaks: true; +} +export class ImageType { + /** + * Gets an images type (png, jpeg, tiff, gif) + * @param {Buffer|Uint8Array} data The image binary to get the type of + * @returns {string|null} The image type (png, jpeg, tiff, gif, null) + */ + static getType(data: Buffer | Uint8Array): string | null; + /** + * @param {DataView} view + * @returns {boolean} + */ + static isPNG(view: DataView): boolean; + /** + * @param {DataView} view + * @returns {boolean} + */ + static isJPEG(view: DataView): boolean; + /** + * @param {DataView} view + * @returns {boolean} + */ + static isTIFF(view: DataView): boolean; + /** + * @param {DataView} view + * @returns {boolean} + */ + static isGIF(view: DataView): boolean; +} +/** + * Decodes the given image binary + * @param {Uint8Array|Buffer} data The image data + * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame + * @returns {Promise} The decoded image + */ +export function decode(data: Uint8Array | Buffer, onlyExtractFirstFrame?: boolean): Promise; diff --git a/src/types/codecs/lib.d.ts b/src/types/codecs/lib.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/codecs/lib.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/codecs/node/index.d.ts b/src/types/codecs/node/index.d.ts new file mode 100644 index 0000000..1cce635 --- /dev/null +++ b/src/types/codecs/node/index.d.ts @@ -0,0 +1,2 @@ +declare const _exports: any; +export = _exports; diff --git a/src/types/codecs/tests/gif.d.ts b/src/types/codecs/tests/gif.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/types/codecs/tests/jpeg.d.ts b/src/types/codecs/tests/jpeg.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/types/codecs/tests/png.d.ts b/src/types/codecs/tests/png.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/types/codecs/tests/webp.d.ts b/src/types/codecs/tests/webp.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/types/codecs/wasm/bundle/browser.d.ts b/src/types/codecs/wasm/bundle/browser.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/types/codecs/wasm/index.d.ts b/src/types/codecs/wasm/index.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/types/png/node.d.ts b/src/types/png/node.d.ts new file mode 100644 index 0000000..69adcdc --- /dev/null +++ b/src/types/png/node.d.ts @@ -0,0 +1,95 @@ +declare function crc32(buffer: any): number; +declare function view(buffer: any, shared?: boolean): Uint8Array; +declare function from_parts(buffers: any, shared?: boolean): Uint8Array; +declare function zlibSync(data: any, opts: any): Uint8Array; +declare function unzlibSync(data: any, out: any): any; +declare function compress(buf: any, level: any): Uint8Array; +declare function decompress(buf: any, limit: any): any; +declare function encode(data: any, { text, width, height, channels, depth, level }: { + text: any; + width: any; + height: any; + channels: any; + depth?: number; + level?: number; +}): Uint8Array; +declare function decode(array: any): { + width: number; + height: number; + pixels: Uint8Array; +}; +declare function filter_1(slice: any, pixels: any, p_offset: any, bytespp: any, row_length: any): void; +declare function filter_2(slice: any, pixels: any, p_offset: any, bytespp: any, row_length: any): void; +declare function filter_3(slice: any, pixels: any, p_offset: any, bytespp: any, row_length: any): void; +declare function filter_4(slice: any, pixels: any, p_offset: any, bytespp: any, row_length: any): void; +declare var __defProp: (o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType) => T; +declare function __markAsModule(target: any): any; +declare function __export(target: any, all: any): void; +declare var table: Uint32Array; +declare var u8: Uint8ArrayConstructor; +declare var u16: Uint16ArrayConstructor; +declare var u32: Uint32ArrayConstructor; +declare var clim: Uint8Array; +declare var fleb: Uint8Array; +declare var fdeb: Uint8Array; +declare function freb(eb: any, start: any): Uint16Array[]; +declare var _a: Uint16Array[]; +declare var fl: Uint16Array; +declare var revfl: Uint16Array; +declare var _b: Uint16Array[]; +declare var fd: Uint16Array; +declare var revfd: Uint16Array; +declare var rev: Uint16Array; +declare var i: number; +declare var x: any; +declare function hMap(cd: any, mb: any, r: any): Uint16Array; +declare var flt: Uint8Array; +declare var fdt: Uint8Array; +declare var flm: Uint16Array; +declare var flrm: Uint16Array; +declare var fdm: Uint16Array; +declare var fdrm: Uint16Array; +declare function max(a: any): any; +declare function bits(d: any, p: any, m: any): number; +declare function bits16(d: any, p: any): number; +declare function shft(p: any): number; +declare function slc(v: any, s: any, e: any): Uint8Array; +declare function inflt(dat: any, buf: any, st: any): any; +declare function wbits(d: any, p: any, v: any): void; +declare function wbits16(d: any, p: any, v: any): void; +declare function hTree(d: any, mb: any): any[]; +declare function ln(n: any, l: any, d: any): any; +declare function lc(c: any): any[]; +declare function clen(cf: any, cl: any): number; +declare function wfblk(out: any, pos: any, dat: any): number; +declare function wblk(dat: any, out: any, final: any, syms: any, lf: any, df: any, eb: any, li: any, bs: any, bl: any, p: any): any; +declare var deo: Uint32Array; +declare var et: Uint8Array; +declare function dflt(dat: any, lvl: any, plvl: any, pre: any, post: any, lst: any): Uint8Array; +declare function adler(): { + p: (d: any) => void; + d: () => number; +}; +declare function dopt(dat: any, opt: any, pre: any, post: any, st: any): Uint8Array; +declare function wbytes(d: any, b: any, v: any): void; +declare function zlh(c: any, o: any): void; +declare function zlv(d: any): void; +declare var __IHDR__: Uint8Array; +declare var __IDAT__: Uint8Array; +declare var __IEND__: Uint8Array; +declare var __IEND_CRC__: number; +declare var HEAD: Uint8Array; +declare namespace color_types { + const GREYSCALE: number; + const TRUECOLOR: number; + const INDEXED_COLOR: number; + const GREYSCALE_ALPHA: number; + const TRUECOLOR_ALPHA: number; +} +declare var channels_to_color_type: { + 1: number; + 2: number; + 3: number; + 4: number; +}; +declare var utf8encoder: TextEncoder; diff --git a/src/types/tests/averageColor.d.ts b/src/types/tests/averageColor.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/tests/averageColor.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/tests/circle.d.ts b/src/types/tests/circle.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/tests/circle.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/tests/crop.d.ts b/src/types/tests/crop.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/tests/crop.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/tests/decode.d.ts b/src/types/tests/decode.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/tests/decode.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/tests/fill.d.ts b/src/types/tests/fill.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/tests/fill.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/tests/fisheye.d.ts b/src/types/tests/fisheye.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/tests/fisheye.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/tests/font.d.ts b/src/types/tests/font.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/tests/font.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/tests/gif.d.ts b/src/types/tests/gif.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/tests/gif.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/tests/image.d.ts b/src/types/tests/image.d.ts new file mode 100644 index 0000000..7b43e79 --- /dev/null +++ b/src/types/tests/image.d.ts @@ -0,0 +1,6 @@ +declare const _exports: { + then(onfulfilled?: (value: Image) => TResult1 | PromiseLike, onrejected?: (reason: any) => TResult2 | PromiseLike): Promise; + catch(onrejected?: (reason: any) => TResult | PromiseLike): Promise; +}; +export = _exports; +import { Image } from "../../ImageScript"; diff --git a/src/types/tests/invert.d.ts b/src/types/tests/invert.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/tests/invert.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/tests/jpeg.d.ts b/src/types/tests/jpeg.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/tests/jpeg.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/tests/misc.d.ts b/src/types/tests/misc.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/tests/misc.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/tests/readme.d.ts b/src/types/tests/readme.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/tests/readme.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/tests/resize.d.ts b/src/types/tests/resize.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/tests/resize.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/tests/rotate.d.ts b/src/types/tests/rotate.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/tests/rotate.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/tests/run.d.ts b/src/types/tests/run.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/tests/run.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/tests/svg.d.ts b/src/types/tests/svg.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/tests/svg.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/utils/mem.d.ts b/src/types/utils/mem.d.ts new file mode 100644 index 0000000..fcb98e8 --- /dev/null +++ b/src/types/utils/mem.d.ts @@ -0,0 +1,2 @@ +export function view(buffer: any, shared?: boolean): Uint8Array; +export function from_parts(buffers: any, shared?: boolean): Uint8Array; diff --git a/src/types/v2/codecs/magic.d.ts b/src/types/v2/codecs/magic.d.ts new file mode 100644 index 0000000..9a719d0 --- /dev/null +++ b/src/types/v2/codecs/magic.d.ts @@ -0,0 +1,4 @@ +export function buffer(init: any): { + type: string; + format: string; +}; diff --git a/src/types/v2/framebuffer.d.ts b/src/types/v2/framebuffer.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/types/v2/framebuffer.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/types/v2/index.d.ts b/src/types/v2/index.d.ts new file mode 100644 index 0000000..d39996d --- /dev/null +++ b/src/types/v2/index.d.ts @@ -0,0 +1,30 @@ +export function load(buffer: any): Promise; +export class Image extends framebuffer { + static decode(format: any, buffer: any, options?: {}): Promise; + constructor(width: any, height: any, buffer: any); +} +export class Frame { + static from(framebuffer: any): Frame; + constructor(width: any, height: any, buffer: any); + timestamp: number; + dispose: string; + image: Image; + get width(): number; + get height(): number; + clone(): Frame; +} +import { Color } from "./framebuffer.js"; +export class Animation { + static decode(format: any, buffer: any, options?: {}): Promise; + constructor(width: any, height: any); + width: number; + height: number; + frames: any[]; + repeat: number; + clear(): void; + add(frame: any): void; + resize(type: any, width: any, height: any): void; + encode(format: any, options?: {}): Promise; +} +import { default as framebuffer } from "./framebuffer.js"; +export { Color }; diff --git a/src/types/wasm/node/jpeg.d.ts b/src/types/wasm/node/jpeg.d.ts new file mode 100644 index 0000000..dec8f3c --- /dev/null +++ b/src/types/wasm/node/jpeg.d.ts @@ -0,0 +1,57 @@ +export declare function init(): Promise<{ + load: (buffer: any) => { + width: any; + height: any; + format: any; + buffer: Uint8Array; + }; + decode: (buffer: any, width: any, height: any) => { + width: any; + height: any; + format: any; + buffer: Uint8Array; + }; +}>; +export declare function init(): Promise<{ + load: (buffer: any) => { + width: any; + height: any; + format: any; + buffer: Uint8Array; + }; + decode: (buffer: any, width: any, height: any) => { + width: any; + height: any; + format: any; + buffer: Uint8Array; + }; +}>; +declare function _new(): { + load: (buffer: any) => { + width: any; + height: any; + format: any; + buffer: Uint8Array; + }; + decode: (buffer: any, width: any, height: any) => { + width: any; + height: any; + format: any; + buffer: Uint8Array; + }; +}; +export declare function _new(): { + load: (buffer: any) => { + width: any; + height: any; + format: any; + buffer: Uint8Array; + }; + decode: (buffer: any, width: any, height: any) => { + width: any; + height: any; + format: any; + buffer: Uint8Array; + }; +}; +export { _new as new }; diff --git a/src/types/wasm/node/svg.d.ts b/src/types/wasm/node/svg.d.ts new file mode 100644 index 0000000..55f1140 --- /dev/null +++ b/src/types/wasm/node/svg.d.ts @@ -0,0 +1,49 @@ +export declare function init(): Promise<{ + load: (buffer: any, fit: any) => { + width: any; + height: any; + buffer: Uint8Array; + }; + rasterize: (buffer: any, fit: any, scale: any) => { + width: any; + height: any; + buffer: Uint8Array; + }; +}>; +export declare function init(): Promise<{ + load: (buffer: any, fit: any) => { + width: any; + height: any; + buffer: Uint8Array; + }; + rasterize: (buffer: any, fit: any, scale: any) => { + width: any; + height: any; + buffer: Uint8Array; + }; +}>; +declare function _new(): { + load: (buffer: any, fit: any) => { + width: any; + height: any; + buffer: Uint8Array; + }; + rasterize: (buffer: any, fit: any, scale: any) => { + width: any; + height: any; + buffer: Uint8Array; + }; +}; +export declare function _new(): { + load: (buffer: any, fit: any) => { + width: any; + height: any; + buffer: Uint8Array; + }; + rasterize: (buffer: any, fit: any, scale: any) => { + width: any; + height: any; + buffer: Uint8Array; + }; +}; +export { _new as new }; diff --git a/src/types/wasm/node/tiff.d.ts b/src/types/wasm/node/tiff.d.ts new file mode 100644 index 0000000..30b38ec --- /dev/null +++ b/src/types/wasm/node/tiff.d.ts @@ -0,0 +1,49 @@ +export declare function init(): Promise<{ + decode: (buffer: any) => { + width: any; + height: any; + buffer: Uint8Array; + }; + load: (buffer: any) => { + width: any; + height: any; + buffer: Uint8Array; + }; +}>; +export declare function init(): Promise<{ + decode: (buffer: any) => { + width: any; + height: any; + buffer: Uint8Array; + }; + load: (buffer: any) => { + width: any; + height: any; + buffer: Uint8Array; + }; +}>; +declare function _new(): { + decode: (buffer: any) => { + width: any; + height: any; + buffer: Uint8Array; + }; + load: (buffer: any) => { + width: any; + height: any; + buffer: Uint8Array; + }; +}; +export declare function _new(): { + decode: (buffer: any) => { + width: any; + height: any; + buffer: Uint8Array; + }; + load: (buffer: any) => { + width: any; + height: any; + buffer: Uint8Array; + }; +}; +export { _new as new }; diff --git a/utils/mem.js b/src/utils/mem.js similarity index 100% rename from utils/mem.js rename to src/utils/mem.js diff --git a/v2/codecs/magic.js b/src/v2/codecs/magic.js similarity index 100% rename from v2/codecs/magic.js rename to src/v2/codecs/magic.js diff --git a/v2/framebuffer.d.ts b/src/v2/framebuffer.d.ts similarity index 100% rename from v2/framebuffer.d.ts rename to src/v2/framebuffer.d.ts diff --git a/v2/framebuffer.js b/src/v2/framebuffer.js similarity index 100% rename from v2/framebuffer.js rename to src/v2/framebuffer.js diff --git a/v2/framebuffer.mjs b/src/v2/framebuffer.mjs similarity index 100% rename from v2/framebuffer.mjs rename to src/v2/framebuffer.mjs diff --git a/v2/framebuffer.rs b/src/v2/framebuffer.rs similarity index 100% rename from v2/framebuffer.rs rename to src/v2/framebuffer.rs diff --git a/v2/index.d.ts b/src/v2/index.d.ts similarity index 100% rename from v2/index.d.ts rename to src/v2/index.d.ts diff --git a/v2/index.js b/src/v2/index.js similarity index 100% rename from v2/index.js rename to src/v2/index.js diff --git a/v2/ops/blur.mjs b/src/v2/ops/blur.mjs similarity index 100% rename from v2/ops/blur.mjs rename to src/v2/ops/blur.mjs diff --git a/v2/ops/color.mjs b/src/v2/ops/color.mjs similarity index 100% rename from v2/ops/color.mjs rename to src/v2/ops/color.mjs diff --git a/v2/ops/crop.mjs b/src/v2/ops/crop.mjs similarity index 100% rename from v2/ops/crop.mjs rename to src/v2/ops/crop.mjs diff --git a/v2/ops/fill.mjs b/src/v2/ops/fill.mjs similarity index 100% rename from v2/ops/fill.mjs rename to src/v2/ops/fill.mjs diff --git a/v2/ops/flip.mjs b/src/v2/ops/flip.mjs similarity index 100% rename from v2/ops/flip.mjs rename to src/v2/ops/flip.mjs diff --git a/v2/ops/index.mjs b/src/v2/ops/index.mjs similarity index 100% rename from v2/ops/index.mjs rename to src/v2/ops/index.mjs diff --git a/v2/ops/iterator.mjs b/src/v2/ops/iterator.mjs similarity index 100% rename from v2/ops/iterator.mjs rename to src/v2/ops/iterator.mjs diff --git a/v2/ops/overlay.mjs b/src/v2/ops/overlay.mjs similarity index 100% rename from v2/ops/overlay.mjs rename to src/v2/ops/overlay.mjs diff --git a/v2/ops/resize.mjs b/src/v2/ops/resize.mjs similarity index 100% rename from v2/ops/resize.mjs rename to src/v2/ops/resize.mjs diff --git a/v2/ops/rotate.mjs b/src/v2/ops/rotate.mjs similarity index 100% rename from v2/ops/rotate.mjs rename to src/v2/ops/rotate.mjs diff --git a/v2/util/mem.mjs b/src/v2/util/mem.mjs similarity index 100% rename from v2/util/mem.mjs rename to src/v2/util/mem.mjs diff --git a/types/codecs/lib.d.ts b/types/codecs/lib.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/codecs/lib.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/codecs/node/index.d.ts b/types/codecs/node/index.d.ts new file mode 100644 index 0000000..1cce635 --- /dev/null +++ b/types/codecs/node/index.d.ts @@ -0,0 +1,2 @@ +declare const _exports: any; +export = _exports; diff --git a/types/codecs/tests/gif.d.ts b/types/codecs/tests/gif.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/types/codecs/tests/jpeg.d.ts b/types/codecs/tests/jpeg.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/types/codecs/tests/png.d.ts b/types/codecs/tests/png.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/types/codecs/tests/webp.d.ts b/types/codecs/tests/webp.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/types/codecs/wasm/bundle/browser.d.ts b/types/codecs/wasm/bundle/browser.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/types/codecs/wasm/index.d.ts b/types/codecs/wasm/index.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/types/png/node.d.ts b/types/png/node.d.ts new file mode 100644 index 0000000..69adcdc --- /dev/null +++ b/types/png/node.d.ts @@ -0,0 +1,95 @@ +declare function crc32(buffer: any): number; +declare function view(buffer: any, shared?: boolean): Uint8Array; +declare function from_parts(buffers: any, shared?: boolean): Uint8Array; +declare function zlibSync(data: any, opts: any): Uint8Array; +declare function unzlibSync(data: any, out: any): any; +declare function compress(buf: any, level: any): Uint8Array; +declare function decompress(buf: any, limit: any): any; +declare function encode(data: any, { text, width, height, channels, depth, level }: { + text: any; + width: any; + height: any; + channels: any; + depth?: number; + level?: number; +}): Uint8Array; +declare function decode(array: any): { + width: number; + height: number; + pixels: Uint8Array; +}; +declare function filter_1(slice: any, pixels: any, p_offset: any, bytespp: any, row_length: any): void; +declare function filter_2(slice: any, pixels: any, p_offset: any, bytespp: any, row_length: any): void; +declare function filter_3(slice: any, pixels: any, p_offset: any, bytespp: any, row_length: any): void; +declare function filter_4(slice: any, pixels: any, p_offset: any, bytespp: any, row_length: any): void; +declare var __defProp: (o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType) => T; +declare function __markAsModule(target: any): any; +declare function __export(target: any, all: any): void; +declare var table: Uint32Array; +declare var u8: Uint8ArrayConstructor; +declare var u16: Uint16ArrayConstructor; +declare var u32: Uint32ArrayConstructor; +declare var clim: Uint8Array; +declare var fleb: Uint8Array; +declare var fdeb: Uint8Array; +declare function freb(eb: any, start: any): Uint16Array[]; +declare var _a: Uint16Array[]; +declare var fl: Uint16Array; +declare var revfl: Uint16Array; +declare var _b: Uint16Array[]; +declare var fd: Uint16Array; +declare var revfd: Uint16Array; +declare var rev: Uint16Array; +declare var i: number; +declare var x: any; +declare function hMap(cd: any, mb: any, r: any): Uint16Array; +declare var flt: Uint8Array; +declare var fdt: Uint8Array; +declare var flm: Uint16Array; +declare var flrm: Uint16Array; +declare var fdm: Uint16Array; +declare var fdrm: Uint16Array; +declare function max(a: any): any; +declare function bits(d: any, p: any, m: any): number; +declare function bits16(d: any, p: any): number; +declare function shft(p: any): number; +declare function slc(v: any, s: any, e: any): Uint8Array; +declare function inflt(dat: any, buf: any, st: any): any; +declare function wbits(d: any, p: any, v: any): void; +declare function wbits16(d: any, p: any, v: any): void; +declare function hTree(d: any, mb: any): any[]; +declare function ln(n: any, l: any, d: any): any; +declare function lc(c: any): any[]; +declare function clen(cf: any, cl: any): number; +declare function wfblk(out: any, pos: any, dat: any): number; +declare function wblk(dat: any, out: any, final: any, syms: any, lf: any, df: any, eb: any, li: any, bs: any, bl: any, p: any): any; +declare var deo: Uint32Array; +declare var et: Uint8Array; +declare function dflt(dat: any, lvl: any, plvl: any, pre: any, post: any, lst: any): Uint8Array; +declare function adler(): { + p: (d: any) => void; + d: () => number; +}; +declare function dopt(dat: any, opt: any, pre: any, post: any, st: any): Uint8Array; +declare function wbytes(d: any, b: any, v: any): void; +declare function zlh(c: any, o: any): void; +declare function zlv(d: any): void; +declare var __IHDR__: Uint8Array; +declare var __IDAT__: Uint8Array; +declare var __IEND__: Uint8Array; +declare var __IEND_CRC__: number; +declare var HEAD: Uint8Array; +declare namespace color_types { + const GREYSCALE: number; + const TRUECOLOR: number; + const INDEXED_COLOR: number; + const GREYSCALE_ALPHA: number; + const TRUECOLOR_ALPHA: number; +} +declare var channels_to_color_type: { + 1: number; + 2: number; + 3: number; + 4: number; +}; +declare var utf8encoder: TextEncoder; diff --git a/types/tests/averageColor.d.ts b/types/tests/averageColor.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/tests/averageColor.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/tests/circle.d.ts b/types/tests/circle.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/tests/circle.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/tests/crop.d.ts b/types/tests/crop.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/tests/crop.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/tests/decode.d.ts b/types/tests/decode.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/tests/decode.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/tests/fill.d.ts b/types/tests/fill.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/tests/fill.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/tests/fisheye.d.ts b/types/tests/fisheye.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/tests/fisheye.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/tests/font.d.ts b/types/tests/font.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/tests/font.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/tests/gif.d.ts b/types/tests/gif.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/tests/gif.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/tests/image.d.ts b/types/tests/image.d.ts new file mode 100644 index 0000000..535e96a --- /dev/null +++ b/types/tests/image.d.ts @@ -0,0 +1,5 @@ +declare const _exports: { + then(onfulfilled?: (value: any) => TResult1 | PromiseLike, onrejected?: (reason: any) => TResult2 | PromiseLike): Promise; + catch(onrejected?: (reason: any) => TResult | PromiseLike): Promise; +}; +export = _exports; diff --git a/types/tests/invert.d.ts b/types/tests/invert.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/tests/invert.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/tests/jpeg.d.ts b/types/tests/jpeg.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/tests/jpeg.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/tests/misc.d.ts b/types/tests/misc.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/tests/misc.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/tests/readme.d.ts b/types/tests/readme.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/tests/readme.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/tests/resize.d.ts b/types/tests/resize.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/tests/resize.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/tests/rotate.d.ts b/types/tests/rotate.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/tests/rotate.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/tests/run.d.ts b/types/tests/run.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/tests/run.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/tests/svg.d.ts b/types/tests/svg.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/tests/svg.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/utils/mem.d.ts b/types/utils/mem.d.ts new file mode 100644 index 0000000..fcb98e8 --- /dev/null +++ b/types/utils/mem.d.ts @@ -0,0 +1,2 @@ +export function view(buffer: any, shared?: boolean): Uint8Array; +export function from_parts(buffers: any, shared?: boolean): Uint8Array; diff --git a/types/v2/codecs/magic.d.ts b/types/v2/codecs/magic.d.ts new file mode 100644 index 0000000..9a719d0 --- /dev/null +++ b/types/v2/codecs/magic.d.ts @@ -0,0 +1,4 @@ +export function buffer(init: any): { + type: string; + format: string; +}; diff --git a/types/v2/framebuffer.d.ts b/types/v2/framebuffer.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/types/v2/framebuffer.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/types/v2/index.d.ts b/types/v2/index.d.ts new file mode 100644 index 0000000..d39996d --- /dev/null +++ b/types/v2/index.d.ts @@ -0,0 +1,30 @@ +export function load(buffer: any): Promise; +export class Image extends framebuffer { + static decode(format: any, buffer: any, options?: {}): Promise; + constructor(width: any, height: any, buffer: any); +} +export class Frame { + static from(framebuffer: any): Frame; + constructor(width: any, height: any, buffer: any); + timestamp: number; + dispose: string; + image: Image; + get width(): number; + get height(): number; + clone(): Frame; +} +import { Color } from "./framebuffer.js"; +export class Animation { + static decode(format: any, buffer: any, options?: {}): Promise; + constructor(width: any, height: any); + width: number; + height: number; + frames: any[]; + repeat: number; + clear(): void; + add(frame: any): void; + resize(type: any, width: any, height: any): void; + encode(format: any, options?: {}): Promise; +} +import { default as framebuffer } from "./framebuffer.js"; +export { Color }; diff --git a/yarn-error.log b/yarn-error.log new file mode 100644 index 0000000..bf6e80b --- /dev/null +++ b/yarn-error.log @@ -0,0 +1,76 @@ +Arguments: + /usr/local/bin/node /usr/local/Cellar/yarn/1.22.17/libexec/bin/yarn.js init + +PATH: + /usr/local/opt/openjdk/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Racket\ v8.3/bin/racket:/Applications/Racket\ v8.3/bin/:/Library/Apple/usr/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/usr/local/opt/openjdk/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/Applications/Racket v8.3/bin/:/Applications/Racket v8.3/bin/ + +Yarn version: + 1.22.17 + +Node version: + 16.13.0 + +Platform: + darwin x64 + +Trace: + Error: canceled + at Interface. (/usr/local/Cellar/yarn/1.22.17/libexec/lib/cli.js:137143:13) + at Interface.emit (node:events:390:28) + at Interface._ttyWrite (node:readline:1081:16) + at ReadStream.onkeypress (node:readline:288:10) + at ReadStream.emit (node:events:390:28) + at emitKeys (node:internal/readline/utils:358:14) + at emitKeys.next () + at ReadStream.onData (node:internal/readline/emitKeypressEvents:61:36) + at ReadStream.emit (node:events:390:28) + at addChunk (node:internal/streams/readable:315:12) + +npm manifest: + { + "name": "imagescript", + "version": "1.2.9", + "description": "zero-dependency javascript image manipulation", + "main": "ImageScript.js", + "scripts": { + "test": "node ./src/tests/run.js", + "coverage": "nyc --reporter=html npm test" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/matmen/ImageScript.git" + }, + "keywords": [ + "image", + "image processing", + "image manipulation", + "png", + "jpeg", + "jpg", + "scale", + "resize", + "crop", + "webp", + "svg", + "bitmap", + "gif", + "picture", + "thumbnail" + ], + "author": "matmen ", + "license": "GPL-3.0-or-later", + "bugs": { + "url": "https://github.com/matmen/ImageScript/issues" + }, + "homepage": "https://github.com/matmen/ImageScript#readme", + "engines": { + "node": ">=14.0.0" + } + } + +yarn manifest: + No manifest + +Lockfile: + # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + # yarn lockfile v1 diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..fb57ccd --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + +