🛣 Levenshtein distance between images WIP

This commit is contained in:
2021-07-31 12:02:47 -07:00
parent fcb922d52b
commit 51d8f94068
5 changed files with 408 additions and 4 deletions

240
package-lock.json generated
View File

@@ -14,6 +14,8 @@
"@types/pino": "^6.3.8",
"7zip-bin": "^5.1.1",
"fs-extra": "^10.0.0",
"imghash": "^0.0.9",
"leven": "^3.1.0",
"lodash": "^4.17.21",
"moleculer": "^0.14.16",
"moleculer-db": "^0.8.13",
@@ -490,6 +492,31 @@
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
"dev": true
},
"node_modules/@canvas/image": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@canvas/image/-/image-1.0.1.tgz",
"integrity": "sha512-nQ6Qt/marzeQkFikxw32qMep5Rs1U/7DdjqHlCn8ck78IX56CFnXjdfRCXOiM4kx8yvS4SmcPXuJjfpczRjFqA==",
"dependencies": {
"@canvas/image-data": "^1.0.0",
"@cwasm/jpeg-turbo": "^0.1.1",
"@cwasm/lodepng": "^0.1.2",
"@cwasm/nsbmp": "^0.1.0",
"@cwasm/nsgif": "^0.1.0",
"@cwasm/webp": "^0.1.3",
"fast-base64-decode": "^1.0.0",
"fast-base64-encode": "^1.0.0",
"fast-base64-length": "^1.0.0",
"simple-get": "^3.1.0"
},
"engines": {
"node": ">=8.3"
}
},
"node_modules/@canvas/image-data": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@canvas/image-data/-/image-data-1.0.0.tgz",
"integrity": "sha512-BxOqI5LgsIQP1odU5KMwV9yoijleOPzHL18/YvNqF9KFSGF2K/DLlYAbDQsWqd/1nbaFuSkYD/191dpMtNh4vw=="
},
"node_modules/@cnakazawa/watch": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
@@ -506,6 +533,46 @@
"node": ">=0.1.95"
}
},
"node_modules/@cwasm/jpeg-turbo": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@cwasm/jpeg-turbo/-/jpeg-turbo-0.1.3.tgz",
"integrity": "sha512-FkZxwwC6r4zhzlqM0nYGaMj/MDSrZPxLOdPdM6ySlgsMfOpNAZcLQkpNF4jP+DmsuUvRoeUD0YSMBvg3jYfK6w==",
"dependencies": {
"@canvas/image-data": "^1.0.0"
}
},
"node_modules/@cwasm/lodepng": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/@cwasm/lodepng/-/lodepng-0.1.4.tgz",
"integrity": "sha512-UY5iB3ywNTgonNF4RmcxEc/eeNcAZBnX9MlSeNUogyruG7ZNPgpKotwPyiLWbqOjlXULz4wdArPEko0Zm3+cGQ==",
"dependencies": {
"@canvas/image-data": "^1.0.0"
}
},
"node_modules/@cwasm/nsbmp": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/@cwasm/nsbmp/-/nsbmp-0.1.2.tgz",
"integrity": "sha512-ZQGNDOI9ZxokqbNPmvcLKR8gBhfHjeFVuqE2eYysrbGiraQ93KeeIVrtiGKOMLW2JJOq9PbGBU0NX47qkpKWWA==",
"dependencies": {
"@canvas/image-data": "^1.0.0"
}
},
"node_modules/@cwasm/nsgif": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/@cwasm/nsgif/-/nsgif-0.1.2.tgz",
"integrity": "sha512-LOD5HlL0O5jpnIAl+dLSZcB3v0RBNBjtoaymdCEPe2kyKzaP20BF+jy/QUyOZogQsgMVjusZES3tgwwoiiJ2rA==",
"dependencies": {
"@canvas/image-data": "^1.0.0"
}
},
"node_modules/@cwasm/webp": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/@cwasm/webp/-/webp-0.1.5.tgz",
"integrity": "sha512-ceIZQkyxK+s7mmItNcWqqHdOBiJAxYxTnrnPNgUNjldB1M9j+Bp/3eVIVwC8rUFyN/zoFwuT0331pyY3ackaNA==",
"dependencies": {
"@canvas/image-data": "^1.0.0"
}
},
"node_modules/@hapi/bourne": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.0.0.tgz",
@@ -2168,6 +2235,11 @@
"safe-buffer": "^5.1.1"
}
},
"node_modules/blockhash-core": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/blockhash-core/-/blockhash-core-0.1.0.tgz",
"integrity": "sha512-Cv7BgBo0jjVPaeuel4cvxf9LqIGsYNIPz9DAGvvrF9LRlEq9Q3HXu+S8bklPCae0sCxAXic4HGMoImf3FeO3Nw=="
},
"node_modules/bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
@@ -4152,6 +4224,21 @@
"resolved": "https://registry.npmjs.org/fakerator/-/fakerator-0.3.2.tgz",
"integrity": "sha512-Yw2ilaImRDctUsXJaIaHIIwsCzqNHIRPzdqkHNeGJl14kswt48QT3s8Df8i8pyL7f3X0MiMfp36v8OaNoOsG3g=="
},
"node_modules/fast-base64-decode": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz",
"integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q=="
},
"node_modules/fast-base64-encode": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fast-base64-encode/-/fast-base64-encode-1.0.0.tgz",
"integrity": "sha512-z2XCzVK4fde2cuTEHu2QGkLD6BPtJNKJPn0Z7oINvmhq/quUuIIVPYKUdN0gYeZqOyurjJjBH/bUzK5gafyHvw=="
},
"node_modules/fast-base64-length": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fast-base64-length/-/fast-base64-length-1.0.0.tgz",
"integrity": "sha512-MV+/ioblHx6SMjc/1l4EAnRJyAku6+6DxZ6RW0FoFCF1Aol/Ldb6FqwE3Kn3Ju1aam2m1KCIVoCljhgcG+Umzg=="
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -4224,6 +4311,14 @@
"node": ">=4"
}
},
"node_modules/file-type": {
"version": "10.11.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz",
"integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==",
"engines": {
"node": ">=6"
}
},
"node_modules/fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@@ -4818,6 +4913,31 @@
"node": ">= 4"
}
},
"node_modules/image-type": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/image-type/-/image-type-4.1.0.tgz",
"integrity": "sha512-CFJMJ8QK8lJvRlTCEgarL4ro6hfDQKif2HjSvYCdQZESaIPV4v9imrf7BQHK+sQeTeNeMpWciR9hyC/g8ybXEg==",
"dependencies": {
"file-type": "^10.10.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/imghash": {
"version": "0.0.9",
"resolved": "https://registry.npmjs.org/imghash/-/imghash-0.0.9.tgz",
"integrity": "sha512-fvxoWZVlx2dSQQMitTFHVFooD/ODf57jzmZWjRiHQ4qYb6kKcydkV2IvcWa8+efuAwYn3n5/cJFMdpZ6D88yew==",
"dependencies": {
"@canvas/image": "^1.0.0",
"blockhash-core": "^0.1.0",
"image-type": "^4.1.0",
"jpeg-js": "^0.4.1"
},
"engines": {
"node": ">=8.x.x"
}
},
"node_modules/immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
@@ -7042,6 +7162,11 @@
"node": ">=6"
}
},
"node_modules/jpeg-js": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz",
"integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q=="
},
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -7221,7 +7346,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
"dev": true,
"engines": {
"node": ">=6"
}
@@ -12502,6 +12626,28 @@
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
"dev": true
},
"@canvas/image": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@canvas/image/-/image-1.0.1.tgz",
"integrity": "sha512-nQ6Qt/marzeQkFikxw32qMep5Rs1U/7DdjqHlCn8ck78IX56CFnXjdfRCXOiM4kx8yvS4SmcPXuJjfpczRjFqA==",
"requires": {
"@canvas/image-data": "^1.0.0",
"@cwasm/jpeg-turbo": "^0.1.1",
"@cwasm/lodepng": "^0.1.2",
"@cwasm/nsbmp": "^0.1.0",
"@cwasm/nsgif": "^0.1.0",
"@cwasm/webp": "^0.1.3",
"fast-base64-decode": "^1.0.0",
"fast-base64-encode": "^1.0.0",
"fast-base64-length": "^1.0.0",
"simple-get": "^3.1.0"
}
},
"@canvas/image-data": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@canvas/image-data/-/image-data-1.0.0.tgz",
"integrity": "sha512-BxOqI5LgsIQP1odU5KMwV9yoijleOPzHL18/YvNqF9KFSGF2K/DLlYAbDQsWqd/1nbaFuSkYD/191dpMtNh4vw=="
},
"@cnakazawa/watch": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
@@ -12512,6 +12658,46 @@
"minimist": "^1.2.0"
}
},
"@cwasm/jpeg-turbo": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@cwasm/jpeg-turbo/-/jpeg-turbo-0.1.3.tgz",
"integrity": "sha512-FkZxwwC6r4zhzlqM0nYGaMj/MDSrZPxLOdPdM6ySlgsMfOpNAZcLQkpNF4jP+DmsuUvRoeUD0YSMBvg3jYfK6w==",
"requires": {
"@canvas/image-data": "^1.0.0"
}
},
"@cwasm/lodepng": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/@cwasm/lodepng/-/lodepng-0.1.4.tgz",
"integrity": "sha512-UY5iB3ywNTgonNF4RmcxEc/eeNcAZBnX9MlSeNUogyruG7ZNPgpKotwPyiLWbqOjlXULz4wdArPEko0Zm3+cGQ==",
"requires": {
"@canvas/image-data": "^1.0.0"
}
},
"@cwasm/nsbmp": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/@cwasm/nsbmp/-/nsbmp-0.1.2.tgz",
"integrity": "sha512-ZQGNDOI9ZxokqbNPmvcLKR8gBhfHjeFVuqE2eYysrbGiraQ93KeeIVrtiGKOMLW2JJOq9PbGBU0NX47qkpKWWA==",
"requires": {
"@canvas/image-data": "^1.0.0"
}
},
"@cwasm/nsgif": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/@cwasm/nsgif/-/nsgif-0.1.2.tgz",
"integrity": "sha512-LOD5HlL0O5jpnIAl+dLSZcB3v0RBNBjtoaymdCEPe2kyKzaP20BF+jy/QUyOZogQsgMVjusZES3tgwwoiiJ2rA==",
"requires": {
"@canvas/image-data": "^1.0.0"
}
},
"@cwasm/webp": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/@cwasm/webp/-/webp-0.1.5.tgz",
"integrity": "sha512-ceIZQkyxK+s7mmItNcWqqHdOBiJAxYxTnrnPNgUNjldB1M9j+Bp/3eVIVwC8rUFyN/zoFwuT0331pyY3ackaNA==",
"requires": {
"@canvas/image-data": "^1.0.0"
}
},
"@hapi/bourne": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.0.0.tgz",
@@ -13834,6 +14020,11 @@
"safe-buffer": "^5.1.1"
}
},
"blockhash-core": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/blockhash-core/-/blockhash-core-0.1.0.tgz",
"integrity": "sha512-Cv7BgBo0jjVPaeuel4cvxf9LqIGsYNIPz9DAGvvrF9LRlEq9Q3HXu+S8bklPCae0sCxAXic4HGMoImf3FeO3Nw=="
},
"bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
@@ -15453,6 +15644,21 @@
"resolved": "https://registry.npmjs.org/fakerator/-/fakerator-0.3.2.tgz",
"integrity": "sha512-Yw2ilaImRDctUsXJaIaHIIwsCzqNHIRPzdqkHNeGJl14kswt48QT3s8Df8i8pyL7f3X0MiMfp36v8OaNoOsG3g=="
},
"fast-base64-decode": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz",
"integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q=="
},
"fast-base64-encode": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fast-base64-encode/-/fast-base64-encode-1.0.0.tgz",
"integrity": "sha512-z2XCzVK4fde2cuTEHu2QGkLD6BPtJNKJPn0Z7oINvmhq/quUuIIVPYKUdN0gYeZqOyurjJjBH/bUzK5gafyHvw=="
},
"fast-base64-length": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fast-base64-length/-/fast-base64-length-1.0.0.tgz",
"integrity": "sha512-MV+/ioblHx6SMjc/1l4EAnRJyAku6+6DxZ6RW0FoFCF1Aol/Ldb6FqwE3Kn3Ju1aam2m1KCIVoCljhgcG+Umzg=="
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -15513,6 +15719,11 @@
"flat-cache": "^2.0.1"
}
},
"file-type": {
"version": "10.11.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz",
"integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw=="
},
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@@ -15960,6 +16171,25 @@
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
},
"image-type": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/image-type/-/image-type-4.1.0.tgz",
"integrity": "sha512-CFJMJ8QK8lJvRlTCEgarL4ro6hfDQKif2HjSvYCdQZESaIPV4v9imrf7BQHK+sQeTeNeMpWciR9hyC/g8ybXEg==",
"requires": {
"file-type": "^10.10.0"
}
},
"imghash": {
"version": "0.0.9",
"resolved": "https://registry.npmjs.org/imghash/-/imghash-0.0.9.tgz",
"integrity": "sha512-fvxoWZVlx2dSQQMitTFHVFooD/ODf57jzmZWjRiHQ4qYb6kKcydkV2IvcWa8+efuAwYn3n5/cJFMdpZ6D88yew==",
"requires": {
"@canvas/image": "^1.0.0",
"blockhash-core": "^0.1.0",
"image-type": "^4.1.0",
"jpeg-js": "^0.4.1"
}
},
"immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
@@ -17643,6 +17873,11 @@
"resolved": "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz",
"integrity": "sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ=="
},
"jpeg-js": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz",
"integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q=="
},
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -17784,8 +18019,7 @@
"leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
"dev": true
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="
},
"levn": {
"version": "0.3.0",

View File

@@ -39,6 +39,8 @@
"@types/pino": "^6.3.8",
"7zip-bin": "^5.1.1",
"fs-extra": "^10.0.0",
"imghash": "^0.0.9",
"leven": "^3.1.0",
"lodash": "^4.17.21",
"moleculer": "^0.14.16",
"moleculer-db": "^0.8.13",

View File

@@ -6,7 +6,13 @@ import {
ServiceSchema,
Errors,
} from "moleculer";
import { resizeImage } from "../utils/imagetransformation.utils";
import {
resizeImage,
calculateLevenshteinDistance,
} from "../utils/imagetransformation.utils";
import https from "https";
import fs from "fs";
import path from "path";
export default class ProductsService extends Service {
// @ts-ignore
@@ -52,6 +58,44 @@ export default class ProductsService extends Service {
return { resizeOperationStatus: resizeResult };
},
},
calculateLevenshteinDistance: {
rest: "POST /calculateLevenshteinDistance",
params: {},
async handler(
ctx: Context<{
imagePath: string;
imagePath2: string;
options: {
match_id: string,
};
}>
) {
const fileName = ctx.params.options.match_id + "_" + path.basename(
ctx.params.imagePath
);
return new Promise((resolve, reject) => {
https.get(ctx.params.imagePath2, (response) => {
const fileStream = response.pipe(
fs.createWriteStream(
`./userdata/temporary/${fileName}`
)
);
fileStream.on("finish", async () => {
const levenshteinDistance = await calculateLevenshteinDistance(
ctx.params.imagePath,
path.resolve(
`./userdata/temporary/${fileName}`
)
);
resolve(levenshteinDistance);
});
}).end();
});
},
},
},
methods: {},
},

View File

@@ -1,4 +1,8 @@
const sharp = require("sharp");
const imghash = require("imghash");
const leven = require("leven");
import path from "path";
import { isNull, reject } from "lodash";
import { logger } from "./logger.utils";
export const extractMetadataFromImage = async (
@@ -32,3 +36,20 @@ export const resizeImage = async (
return info;
});
};
export const calculateLevenshteinDistance = async (
imagePath1: string,
imagePath2: string
): Promise<Record<string, unknown>> => {
console.log("AGANTUK", imagePath1)
const hash1 = await imghash.hash(imagePath1);
const hash2 = await imghash.hash(imagePath2);
console.log("HASHISH", hash1)
if (!isNull(hash1) && !isNull(hash2)) {
return new Promise((resolve, reject) => {
resolve({ levenshteinDistance: leven(hash1, hash2) });
});
} else {
reject("Can't calculate the Levenshtein distance")
}
};

103
yarn.lock
View File

@@ -280,6 +280,27 @@
"resolved" "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz"
"version" "0.2.3"
"@canvas/image-data@^1.0.0":
"integrity" "sha512-BxOqI5LgsIQP1odU5KMwV9yoijleOPzHL18/YvNqF9KFSGF2K/DLlYAbDQsWqd/1nbaFuSkYD/191dpMtNh4vw=="
"resolved" "https://registry.npmjs.org/@canvas/image-data/-/image-data-1.0.0.tgz"
"version" "1.0.0"
"@canvas/image@^1.0.0":
"integrity" "sha512-nQ6Qt/marzeQkFikxw32qMep5Rs1U/7DdjqHlCn8ck78IX56CFnXjdfRCXOiM4kx8yvS4SmcPXuJjfpczRjFqA=="
"resolved" "https://registry.npmjs.org/@canvas/image/-/image-1.0.1.tgz"
"version" "1.0.1"
dependencies:
"@canvas/image-data" "^1.0.0"
"@cwasm/jpeg-turbo" "^0.1.1"
"@cwasm/lodepng" "^0.1.2"
"@cwasm/nsbmp" "^0.1.0"
"@cwasm/nsgif" "^0.1.0"
"@cwasm/webp" "^0.1.3"
"fast-base64-decode" "^1.0.0"
"fast-base64-encode" "^1.0.0"
"fast-base64-length" "^1.0.0"
"simple-get" "^3.1.0"
"@cnakazawa/watch@^1.0.3":
"integrity" "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ=="
"resolved" "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz"
@@ -288,6 +309,41 @@
"exec-sh" "^0.3.2"
"minimist" "^1.2.0"
"@cwasm/jpeg-turbo@^0.1.1":
"integrity" "sha512-FkZxwwC6r4zhzlqM0nYGaMj/MDSrZPxLOdPdM6ySlgsMfOpNAZcLQkpNF4jP+DmsuUvRoeUD0YSMBvg3jYfK6w=="
"resolved" "https://registry.npmjs.org/@cwasm/jpeg-turbo/-/jpeg-turbo-0.1.3.tgz"
"version" "0.1.3"
dependencies:
"@canvas/image-data" "^1.0.0"
"@cwasm/lodepng@^0.1.2":
"integrity" "sha512-UY5iB3ywNTgonNF4RmcxEc/eeNcAZBnX9MlSeNUogyruG7ZNPgpKotwPyiLWbqOjlXULz4wdArPEko0Zm3+cGQ=="
"resolved" "https://registry.npmjs.org/@cwasm/lodepng/-/lodepng-0.1.4.tgz"
"version" "0.1.4"
dependencies:
"@canvas/image-data" "^1.0.0"
"@cwasm/nsbmp@^0.1.0":
"integrity" "sha512-ZQGNDOI9ZxokqbNPmvcLKR8gBhfHjeFVuqE2eYysrbGiraQ93KeeIVrtiGKOMLW2JJOq9PbGBU0NX47qkpKWWA=="
"resolved" "https://registry.npmjs.org/@cwasm/nsbmp/-/nsbmp-0.1.2.tgz"
"version" "0.1.2"
dependencies:
"@canvas/image-data" "^1.0.0"
"@cwasm/nsgif@^0.1.0":
"integrity" "sha512-LOD5HlL0O5jpnIAl+dLSZcB3v0RBNBjtoaymdCEPe2kyKzaP20BF+jy/QUyOZogQsgMVjusZES3tgwwoiiJ2rA=="
"resolved" "https://registry.npmjs.org/@cwasm/nsgif/-/nsgif-0.1.2.tgz"
"version" "0.1.2"
dependencies:
"@canvas/image-data" "^1.0.0"
"@cwasm/webp@^0.1.3":
"integrity" "sha512-ceIZQkyxK+s7mmItNcWqqHdOBiJAxYxTnrnPNgUNjldB1M9j+Bp/3eVIVwC8rUFyN/zoFwuT0331pyY3ackaNA=="
"resolved" "https://registry.npmjs.org/@cwasm/webp/-/webp-0.1.5.tgz"
"version" "0.1.5"
dependencies:
"@canvas/image-data" "^1.0.0"
"@hapi/bourne@^2.0.0":
"integrity" "sha512-WEezM1FWztfbzqIUbsDzFRVMxSoLy3HugVcux6KDDtTqzPsLE8NDRHfXvev66aH1i2oOKKar3/XDjbvh/OUBdg=="
"resolved" "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.0.0.tgz"
@@ -1141,6 +1197,11 @@
"inherits" "^2.0.4"
"readable-stream" "^3.4.0"
"blockhash-core@^0.1.0":
"integrity" "sha512-Cv7BgBo0jjVPaeuel4cvxf9LqIGsYNIPz9DAGvvrF9LRlEq9Q3HXu+S8bklPCae0sCxAXic4HGMoImf3FeO3Nw=="
"resolved" "https://registry.npmjs.org/blockhash-core/-/blockhash-core-0.1.0.tgz"
"version" "0.1.0"
"bluebird@^3.7.2":
"integrity" "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
"resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz"
@@ -2336,6 +2397,21 @@
"resolved" "https://registry.npmjs.org/fakerator/-/fakerator-0.3.2.tgz"
"version" "0.3.2"
"fast-base64-decode@^1.0.0":
"integrity" "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q=="
"resolved" "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz"
"version" "1.0.0"
"fast-base64-encode@^1.0.0":
"integrity" "sha512-z2XCzVK4fde2cuTEHu2QGkLD6BPtJNKJPn0Z7oINvmhq/quUuIIVPYKUdN0gYeZqOyurjJjBH/bUzK5gafyHvw=="
"resolved" "https://registry.npmjs.org/fast-base64-encode/-/fast-base64-encode-1.0.0.tgz"
"version" "1.0.0"
"fast-base64-length@^1.0.0":
"integrity" "sha512-MV+/ioblHx6SMjc/1l4EAnRJyAku6+6DxZ6RW0FoFCF1Aol/Ldb6FqwE3Kn3Ju1aam2m1KCIVoCljhgcG+Umzg=="
"resolved" "https://registry.npmjs.org/fast-base64-length/-/fast-base64-length-1.0.0.tgz"
"version" "1.0.0"
"fast-deep-equal@^3.1.1":
"integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
"resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
@@ -2387,6 +2463,11 @@
dependencies:
"flat-cache" "^2.0.1"
"file-type@^10.10.0":
"integrity" "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw=="
"resolved" "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz"
"version" "10.11.0"
"fill-range@^4.0.0":
"integrity" "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc="
"resolved" "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz"
@@ -2765,6 +2846,23 @@
"resolved" "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz"
"version" "4.0.6"
"image-type@^4.1.0":
"integrity" "sha512-CFJMJ8QK8lJvRlTCEgarL4ro6hfDQKif2HjSvYCdQZESaIPV4v9imrf7BQHK+sQeTeNeMpWciR9hyC/g8ybXEg=="
"resolved" "https://registry.npmjs.org/image-type/-/image-type-4.1.0.tgz"
"version" "4.1.0"
dependencies:
"file-type" "^10.10.0"
"imghash@^0.0.9":
"integrity" "sha512-fvxoWZVlx2dSQQMitTFHVFooD/ODf57jzmZWjRiHQ4qYb6kKcydkV2IvcWa8+efuAwYn3n5/cJFMdpZ6D88yew=="
"resolved" "https://registry.npmjs.org/imghash/-/imghash-0.0.9.tgz"
"version" "0.0.9"
dependencies:
"@canvas/image" "^1.0.0"
"blockhash-core" "^0.1.0"
"image-type" "^4.1.0"
"jpeg-js" "^0.4.1"
"immediate@~3.0.5":
"integrity" "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
"resolved" "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz"
@@ -3538,6 +3636,11 @@
"resolved" "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz"
"version" "2.2.5"
"jpeg-js@^0.4.1":
"integrity" "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q=="
"resolved" "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz"
"version" "0.4.3"
"js-tokens@^4.0.0":
"integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
"resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"