From 4cc5accff1a19bef6a16bda6d5336196bd1d7318 Mon Sep 17 00:00:00 2001 From: Philipp Kunz Date: Sun, 3 Dec 2023 23:09:48 +0100 Subject: [PATCH] fix(core): update --- package.json | 1 + pnpm-lock.yaml | 589 +++++++++++++++++++++++- test/test.ts | 11 +- ts/00_commitinfo_data.ts | 2 +- ts/{smartjimp.plugins.ts => plugins.ts} | 5 - ts/plugins.typed.ts | 7 + ts/smartjimp.classes.smartjimp.ts | 103 ++++- ts/smartjimp.paths.ts | 2 +- 8 files changed, 681 insertions(+), 39 deletions(-) rename ts/{smartjimp.plugins.ts => plugins.ts} (86%) create mode 100644 ts/plugins.typed.ts diff --git a/package.json b/package.json index bd06627..fa639e5 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "@push.rocks/smarthash": "^3.0.4", "@push.rocks/smartpath": "^5.0.5", "@push.rocks/smartrequest": "^2.0.15", + "jimp": "^0.22.10", "sharp": "^0.33.0" }, "files": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4f6e819..1ddfcb7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ dependencies: '@push.rocks/smartrequest': specifier: ^2.0.15 version: 2.0.21 + jimp: + specifier: ^0.22.10 + version: 0.22.10 sharp: specifier: ^0.33.0 version: 0.33.0 @@ -631,6 +634,352 @@ packages: wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 + /@jimp/bmp@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-1UXRl1Nw1KptZ1r0ANqtXOst9vGH51dq7keVKQzyyTO2lz4dOaezS9StuSTNh+RmiHg/SVPaFRpPfB0S/ln4Kg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + bmp-js: 0.1.0 + dev: false + + /@jimp/core@0.22.10: + resolution: {integrity: sha512-ZKyrehVy6wu1PnBXIUpn/fXmyMRQiVSbvHDubgXz4bfTOao3GiOurKHjByutQIgozuAN6ZHWiSge1dKA+dex3w==} + dependencies: + '@jimp/utils': 0.22.10 + any-base: 1.1.0 + buffer: 5.7.1 + exif-parser: 0.1.12 + file-type: 16.5.4 + isomorphic-fetch: 3.0.0 + pixelmatch: 4.0.2 + tinycolor2: 1.6.0 + transitivePeerDependencies: + - encoding + dev: false + + /@jimp/custom@0.22.10: + resolution: {integrity: sha512-sPZkUYe1hu0iIgNisjizxPJqq2vaaKvkCkPoXq2U6UV3ZA1si/WVdrg25da3IcGIEV+83AoHgM8TvqlLgrCJsg==} + dependencies: + '@jimp/core': 0.22.10 + transitivePeerDependencies: + - encoding + dev: false + + /@jimp/gif@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-yEX2dSpamvkSx1PPDWGnKeWDrBz0vrCKjVG/cn4Zr68MRRT75tbZIeOrBa+RiUpY3ho5ix7d36LkYvt3qfUIhQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + gifwrap: 0.10.1 + omggif: 1.0.10 + dev: false + + /@jimp/jpeg@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-6bu98pAcVN4DY2oiDLC4TOgieX/lZrLd1tombWZOFCN5PBmqaHQxm7IUmT+Wj4faEvh8QSHgVLSA+2JQQRJWVA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + jpeg-js: 0.4.4 + dev: false + + /@jimp/plugin-blit@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-6EI8Sl+mxYHEIy6Yteh6eknD+EZguKpNdr3sCKxNezmLR0+vK99vHcllo6uGSjXXiwtwS67Xqxn8SsoatL+UJQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-blur@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-4XRTWuPVdMXJeclJMisXPGizeHtTryVaVV5HnuQXpKqIZtzXReCCpNGH8q/i0kBQOQMXhGWS3mpqOEwtpPePKw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-circle@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-mhcwTO1ywRxiCgtLGge6tDDIDPlX6qkI3CY+BjgGG/XhVHccCddXgOGLdlf+5OuKIEF2Nqs0V01LQEQIJFTmEw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-color@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-e4t3L7Kedd96E0x1XjsTM6NcgulKUU66HdFTao7Tc9FYJRFSlttARZ/C6LEryGDm/i69R6bJEpo7BkNz0YL55Q==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + tinycolor2: 1.6.0 + dev: false + + /@jimp/plugin-contain@0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-blit@0.22.10)(@jimp/plugin-resize@0.22.10)(@jimp/plugin-scale@0.22.10): + resolution: {integrity: sha512-eP8KrzctuEoqibQAxi9WhbnoRosydhiwg+IYya3dKuKDBTrD9UHt+ERlPQ/lTNWHzV/l4S1ntV3r9s9saJgsXA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-scale': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/plugin-blit': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-resize': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-scale': 0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-resize@0.22.10) + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-cover@0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-crop@0.22.10)(@jimp/plugin-resize@0.22.10)(@jimp/plugin-scale@0.22.10): + resolution: {integrity: sha512-kJCwL5T1igfa0InCfkE7bBeqg26m46aoRt10ug+rvm11P6RrvRMGrgINFyIKB+mnB7CiyBN/MOula1CvLhSInQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-crop': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-scale': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/plugin-crop': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-resize': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-scale': 0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-resize@0.22.10) + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-crop@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-BOZ+YGaZlhU7c5ye65RxikicXH0Ki0It6/XHISvipR5WZrfjLjL2Ke20G+AGnwBQc76gKenVcMXVUCnEjtZV+Q==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-displace@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-llNiWWMTKISDXt5+cXI0GaFmZWAjlT+4fFLYf4eXquuL/9wZoQsEBhv2GdGd48mkiS8jZq1Nnb2Q4ehEPTvrzw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-dither@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-05WLmeV5M+P/0FS+bWf13hMew2X0oa8w9AtmevL2UyA/5GqiyvP2Xm5WfGQ8oFiiMvpnL6RFomJQOZtWca0C2w==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-fisheye@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-InjiXvc7Gkzrx8VWtU97kDqV7ENnhHGPULymJWeZaF2aicud9Fpk4iCtd/DcZIrk7Cbe60A8RwNXN00HXIbSCg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-flip@0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-rotate@0.22.10): + resolution: {integrity: sha512-42GkGtTHWnhnwTMPVK/kXObZbkYIpQWfuIfy5EMEMk6zRj05zpv4vsjkKWfuemweZINwfvD7wDJF7FVFNNcZZg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-rotate': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/plugin-rotate': 0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-blit@0.22.10)(@jimp/plugin-crop@0.22.10)(@jimp/plugin-resize@0.22.10) + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-gaussian@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-ykrG/6lTp9Q5YA8jS5XzwMHtRxb9HOFMgtmnrUZ8kU+BK8REecfy9Ic5BUEOjCYvS1a/xLsnrZQU07iiYxBxFg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-invert@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-d8j9BlUJYs/c994t4azUWSWmQq4LLPG4ecm8m6SSNqap+S/HlVQGqjYhJEBbY9EXkOTYB9vBL9bqwSM1Rr6paA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-mask@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-yRBs1230XZkz24uFTdTcSlZ0HXZpIWzM3iFQN56MzZ7USgdVZjPPDCQ8I9RpqfZ36nDflQkUO0wV7ucsi4ogow==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-normalize@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-Wk9GX6eJMchX/ZAazVa70Fagu+OXMvHiPY+HrcEwcclL+p1wo8xAHEsf9iKno7Ja4EU9lLhbBRY5hYJyiKMEkg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-print@0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-blit@0.22.10): + resolution: {integrity: sha512-1U3VloIR+beE1kWPdGEJMiE2h1Do29iv3w8sBbvPyRP4qXxRFcDpmCGtctsrKmb1krlBFlj8ubyAY90xL+5n9w==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/plugin-blit': 0.22.10(@jimp/custom@0.22.10) + '@jimp/utils': 0.22.10 + load-bmfont: 1.4.1 + dev: false + + /@jimp/plugin-resize@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-ixomxVcnAONXDgaq0opvAx4UAOiEhOA/tipuhFFOvPKFd4yf1BAnEviB5maB0SBHHkJXPUSzDp/73xVTMGSe7g==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-rotate@0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-blit@0.22.10)(@jimp/plugin-crop@0.22.10)(@jimp/plugin-resize@0.22.10): + resolution: {integrity: sha512-eeFX8dnRyf3LAdsdXWKWuN18hLRg8zy1cP0cP9rHzQVWRK7ck/QsLxK1vHq7MADGwQalNaNTJ9SQxH6c8mz6jw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit': '>=0.3.5' + '@jimp/plugin-crop': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/plugin-blit': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-crop': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-resize': 0.22.10(@jimp/custom@0.22.10) + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-scale@0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-resize@0.22.10): + resolution: {integrity: sha512-TG/H0oUN69C9ArBCZg4PmuoixFVKIiru8282KzSB/Tp1I0xwX0XLTv3dJ5pobPlIgPcB+TmD4xAIdkCT4rtWxg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/plugin-resize': 0.22.10(@jimp/custom@0.22.10) + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-shadow@0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-blur@0.22.10)(@jimp/plugin-resize@0.22.10): + resolution: {integrity: sha512-TN9xm6fI7XfxbMUQqFPZjv59Xdpf0tSiAQdINB4g6pJMWiVANR/74OtDONoy3KKpenu5Y38s+FkrtID/KcQAhw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blur': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/plugin-blur': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-resize': 0.22.10(@jimp/custom@0.22.10) + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugin-threshold@0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-color@0.22.10)(@jimp/plugin-resize@0.22.10): + resolution: {integrity: sha512-DA2lSnU0TgIRbAgmXaxroYw3Ad6J2DOFEoJp0NleSm2h3GWbZEE5yW9U2B6hD3iqn4AenG4E2b2WzHXZyzSutw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-color': '>=0.8.0' + '@jimp/plugin-resize': '>=0.8.0' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/plugin-color': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-resize': 0.22.10(@jimp/custom@0.22.10) + '@jimp/utils': 0.22.10 + dev: false + + /@jimp/plugins@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-KDMZyM6pmvS8freB+UBLko1TO/k4D7URS/nphCozuH+P7i3UMe7NdckXKJ8u+WD6sqN0YFYvBehpkpnUiw/91w==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/plugin-blit': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-blur': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-circle': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-color': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-contain': 0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-blit@0.22.10)(@jimp/plugin-resize@0.22.10)(@jimp/plugin-scale@0.22.10) + '@jimp/plugin-cover': 0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-crop@0.22.10)(@jimp/plugin-resize@0.22.10)(@jimp/plugin-scale@0.22.10) + '@jimp/plugin-crop': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-displace': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-dither': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-fisheye': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-flip': 0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-rotate@0.22.10) + '@jimp/plugin-gaussian': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-invert': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-mask': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-normalize': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-print': 0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-blit@0.22.10) + '@jimp/plugin-resize': 0.22.10(@jimp/custom@0.22.10) + '@jimp/plugin-rotate': 0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-blit@0.22.10)(@jimp/plugin-crop@0.22.10)(@jimp/plugin-resize@0.22.10) + '@jimp/plugin-scale': 0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-resize@0.22.10) + '@jimp/plugin-shadow': 0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-blur@0.22.10)(@jimp/plugin-resize@0.22.10) + '@jimp/plugin-threshold': 0.22.10(@jimp/custom@0.22.10)(@jimp/plugin-color@0.22.10)(@jimp/plugin-resize@0.22.10) + timm: 1.7.1 + dev: false + + /@jimp/png@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-RYinU7tZToeeR2g2qAMn42AU+8OUHjXPKZZ9RkmoL4bguA1xyZWaSdr22/FBkmnHhOERRlr02KPDN1OTOYHLDQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/utils': 0.22.10 + pngjs: 6.0.0 + dev: false + + /@jimp/tiff@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-OaivlSYzpNTHyH/h7pEtl3A7F7TbsgytZs52GLX/xITW92ffgDgT6PkldIrMrET6ERh/hdijNQiew7IoEEr2og==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/custom': 0.22.10 + utif2: 4.1.0 + dev: false + + /@jimp/types@0.22.10(@jimp/custom@0.22.10): + resolution: {integrity: sha512-u/r+XYzbCx4zZukDmxx8S0er3Yq3iDPI6+31WKX0N18i2qPPJYcn8qwIFurfupRumGvJ8SlGLCgt/T+Y8zzUIw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@jimp/bmp': 0.22.10(@jimp/custom@0.22.10) + '@jimp/custom': 0.22.10 + '@jimp/gif': 0.22.10(@jimp/custom@0.22.10) + '@jimp/jpeg': 0.22.10(@jimp/custom@0.22.10) + '@jimp/png': 0.22.10(@jimp/custom@0.22.10) + '@jimp/tiff': 0.22.10(@jimp/custom@0.22.10) + timm: 1.7.1 + dev: false + + /@jimp/utils@0.22.10: + resolution: {integrity: sha512-ztlOK9Mm2iLG2AMoabzM4i3WZ/FtshcgsJCbZCRUs/DKoeS2tySRJTnQZ1b7Roq0M4Ce+FUAxnCAcBV0q7PH9w==} + dependencies: + regenerator-runtime: 0.13.11 + dev: false + /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} @@ -1541,6 +1890,10 @@ packages: defer-to-connect: 2.0.1 dev: true + /@tokenizer/token@0.3.0: + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + dev: false + /@tsclass/tsclass@3.0.48: resolution: {integrity: sha512-hC65UvDlp9qvsl6OcIZXz0JNiWZ0gyzsTzbXpg215sGxopgbkOLCr6E0s4qCTnweYm95gt2AdY95uP7M7kExaQ==} dependencies: @@ -1796,6 +2149,10 @@ packages: resolution: {integrity: sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==} dev: true + /@types/node@16.9.1: + resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} + dev: false + /@types/node@20.10.2: resolution: {integrity: sha512-37MXfxkb0vuIlRKHNxwCkb60PNBpR94u4efQuN4JgIAm66zfCDXGSAFCef9XUWFovX2R1ok6Z7MHhtdVXXkkIw==} dependencies: @@ -2109,6 +2466,10 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + /any-base@1.1.0: + resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} + dev: false + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -2230,6 +2591,10 @@ packages: readable-stream: 3.6.2 dev: false + /bmp-js@0.1.0: + resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} + dev: false + /body-parser@1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -2300,6 +2665,11 @@ packages: /buffer-crc32@0.2.13: resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=} + /buffer-equal@0.0.1: + resolution: {integrity: sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=} + engines: {node: '>=0.4.0'} + dev: false + /buffer-json@2.0.0: resolution: {integrity: sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==} @@ -2308,7 +2678,6 @@ packages: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true /buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} @@ -2801,6 +3170,10 @@ packages: dns-packet: 5.6.1 dev: true + /dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + dev: false + /domexception@1.0.1: resolution: {integrity: sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==} dependencies: @@ -3017,6 +3390,10 @@ packages: engines: {node: '>= 0.6'} dev: true + /exif-parser@0.1.12: + resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} + dev: false + /express-force-ssl@0.3.2: resolution: {integrity: sha1-AbK0mK5v0uQRUrIrV6Phc3c69n4=} engines: {node: '>=0.2.2'} @@ -3133,6 +3510,15 @@ packages: is-unicode-supported: 2.0.0 dev: true + /file-type@16.5.4: + resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} + engines: {node: '>=10'} + dependencies: + readable-web-to-node-stream: 3.0.2 + strtok3: 6.3.0 + token-types: 4.2.1 + dev: false + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -3309,6 +3695,13 @@ packages: get-intrinsic: 1.2.2 dev: true + /gifwrap@0.10.1: + resolution: {integrity: sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==} + dependencies: + image-q: 4.0.0 + omggif: 1.0.10 + dev: false + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -3349,6 +3742,13 @@ packages: path-is-absolute: 1.0.1 dev: true + /global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + dependencies: + min-document: 2.19.0 + process: 0.11.10 + dev: false + /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} @@ -3546,6 +3946,12 @@ packages: engines: {node: '>= 4'} dev: true + /image-q@4.0.0: + resolution: {integrity: sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==} + dependencies: + '@types/node': 16.9.1 + dev: false + /indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} @@ -3675,6 +4081,10 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + /is-function@1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + dev: false + /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -3809,6 +4219,15 @@ packages: /isexe@2.0.0: resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} + /isomorphic-fetch@3.0.0: + resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} + dependencies: + node-fetch: 2.6.7 + whatwg-fetch: 3.6.19 + transitivePeerDependencies: + - encoding + dev: false + /isopen@1.3.0: resolution: {integrity: sha512-AN6Q9J0UlqHFl1fN/2xJCHCBLCBCFDjZhpGBO1gh3wzgRPsFSFBUL36I2Lbfd9qkuoj58axmE7j83iejTQsk8Q==} dev: true @@ -3843,6 +4262,21 @@ packages: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + /jimp@0.22.10: + resolution: {integrity: sha512-lCaHIJAgTOsplyJzC1w/laxSxrbSsEBw4byKwXgUdMmh+ayPsnidTblenQm+IvhIs44Gcuvlb6pd2LQ0wcKaKg==} + dependencies: + '@jimp/custom': 0.22.10 + '@jimp/plugins': 0.22.10(@jimp/custom@0.22.10) + '@jimp/types': 0.22.10(@jimp/custom@0.22.10) + regenerator-runtime: 0.13.11 + transitivePeerDependencies: + - encoding + dev: false + + /jpeg-js@0.4.4: + resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} + dev: false + /js-base64@3.7.5: resolution: {integrity: sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==} @@ -4010,6 +4444,19 @@ packages: lit-html: 3.1.0 dev: true + /load-bmfont@1.4.1: + resolution: {integrity: sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==} + dependencies: + buffer-equal: 0.0.1 + mime: 1.6.0 + parse-bmfont-ascii: 1.0.6 + parse-bmfont-binary: 1.0.6 + parse-bmfont-xml: 1.1.4 + phin: 2.9.3 + xhr: 2.6.0 + xtend: 4.0.2 + dev: false + /locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -4215,7 +4662,6 @@ packages: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} hasBin: true - dev: true /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -4232,6 +4678,12 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true + /min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + dependencies: + dom-walk: 0.1.2 + dev: false + /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -4402,7 +4854,6 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 - dev: true /normalize-newline@4.1.0: resolution: {integrity: sha512-ff4jKqMI8Xl50/4Mms/9jPobzAV/UK+kXG2XJ/7AqOmxIx8mqfqTIHYxuAnEgJ2AQeBbLnlbmZ5+38Y9A0w/YA==} @@ -4467,6 +4918,10 @@ packages: resolution: {integrity: sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg==} dev: true + /omggif@1.0.10: + resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} + dev: false + /on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -4544,6 +4999,10 @@ packages: resolution: {integrity: sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=} dev: true + /pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + dev: false + /pako@2.1.0: resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} dev: true @@ -4554,6 +5013,25 @@ packages: no-case: 2.3.2 dev: true + /parse-bmfont-ascii@1.0.6: + resolution: {integrity: sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==} + dev: false + + /parse-bmfont-binary@1.0.6: + resolution: {integrity: sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==} + dev: false + + /parse-bmfont-xml@1.1.4: + resolution: {integrity: sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==} + dependencies: + xml-parse-from-string: 1.0.1 + xml2js: 0.4.23 + dev: false + + /parse-headers@2.0.5: + resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} + dev: false + /parse-ms@2.1.0: resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} engines: {node: '>=6'} @@ -4645,10 +5123,19 @@ packages: uuid: 8.3.2 dev: true + /peek-readable@4.1.0: + resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} + engines: {node: '>=8'} + dev: false + /pend@1.2.0: resolution: {integrity: sha1-elfrVQpng/kRUzH89GY9XI4AelA=} dev: true + /phin@2.9.3: + resolution: {integrity: sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==} + dev: false + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -4659,6 +5146,13 @@ packages: engines: {node: '>=4.0.0'} dev: true + /pixelmatch@4.0.2: + resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} + hasBin: true + dependencies: + pngjs: 3.4.0 + dev: false + /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} @@ -4666,6 +5160,16 @@ packages: find-up: 4.1.0 dev: true + /pngjs@3.4.0: + resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} + engines: {node: '>=4.0.0'} + dev: false + + /pngjs@6.0.0: + resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} + engines: {node: '>=12.13.0'} + dev: false + /pretty-ms@7.0.1: resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} engines: {node: '>=10'} @@ -4682,6 +5186,11 @@ packages: /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + /process@0.11.10: + resolution: {integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI=} + engines: {node: '>= 0.6.0'} + dev: false + /progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -4832,6 +5341,13 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 + /readable-web-to-node-stream@3.0.2: + resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} + engines: {node: '>=8'} + dependencies: + readable-stream: 3.6.2 + dev: false + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -4847,6 +5363,10 @@ packages: typeson-registry: 1.0.0-alpha.39 dev: true + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: false + /regexp.prototype.flags@1.5.1: resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} @@ -5352,6 +5872,14 @@ packages: /strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + /strtok3@6.3.0: + resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} + engines: {node: '>=10'} + dependencies: + '@tokenizer/token': 0.3.0 + peek-readable: 4.1.0 + dev: false + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -5425,6 +5953,10 @@ packages: resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=} dev: true + /timm@1.7.1: + resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} + dev: false + /tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} dev: true @@ -5435,6 +5967,10 @@ packages: esm: 3.2.25 dev: true + /tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + dev: false + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -5447,9 +5983,16 @@ packages: engines: {node: '>=0.6'} dev: true + /token-types@4.2.1: + resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} + engines: {node: '>=10'} + dependencies: + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + dev: false + /tr46@0.0.3: resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=} - dev: true /tr46@2.1.0: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} @@ -5649,6 +6192,12 @@ packages: punycode: 1.4.1 qs: 6.11.2 + /utif2@4.1.0: + resolution: {integrity: sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==} + dependencies: + pako: 1.0.11 + dev: false + /util-deprecate@1.0.2: resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} @@ -5700,7 +6249,6 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=} - dev: true /webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} @@ -5711,12 +6259,15 @@ packages: engines: {node: '>=10.4'} dev: true + /whatwg-fetch@3.6.19: + resolution: {integrity: sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==} + dev: false + /whatwg-url@5.0.0: resolution: {integrity: sha1-lmRU6HZUYuN2RNNib2dCzotwll0=} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true /whatwg-url@8.7.0: resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} @@ -5869,6 +6420,15 @@ packages: optional: true dev: true + /xhr@2.6.0: + resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + dependencies: + global: 4.4.0 + is-function: 1.0.2 + parse-headers: 2.0.5 + xtend: 4.0.2 + dev: false + /xml-js@1.6.11: resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} hasBin: true @@ -5876,6 +6436,18 @@ packages: sax: 1.3.0 dev: true + /xml-parse-from-string@1.0.1: + resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} + dev: false + + /xml2js@0.4.23: + resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} + engines: {node: '>=4.0.0'} + dependencies: + sax: 1.3.0 + xmlbuilder: 11.0.1 + dev: false + /xml2js@0.5.0: resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} engines: {node: '>=4.0.0'} @@ -5896,6 +6468,11 @@ packages: engines: {node: '>=0.4.0'} dev: true + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: false + /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true diff --git a/test/test.ts b/test/test.ts index 4404d3c..147f295 100644 --- a/test/test.ts +++ b/test/test.ts @@ -5,7 +5,7 @@ import * as smartfile from '@push.rocks/smartfile'; let testSmartJimp: smartjimp.SmartJimp; tap.test('first test', async () => { - testSmartJimp = new smartjimp.SmartJimp(); + testSmartJimp = new smartjimp.SmartJimp({ mode: 'sharp'}); expect(testSmartJimp).toBeInstanceOf(smartjimp.SmartJimp); }); @@ -15,4 +15,13 @@ tap.test('should be able to create a master', async () => { (await smartfile.SmartFile.fromBuffer('.nogit/result.avif', convertedAsset)).write(); }); +tap.test('should be able to use jimp', async () => { + const testSmartJimp = new smartjimp.SmartJimp({ mode: 'jimp'}); + const smartfileInstance = await smartfile.SmartFile.fromUrl('https://images.unsplash.com/photo-1673276628202-737bf3020ac2?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=3774&q=80') + const convertedAsset = await testSmartJimp.computeAssetVariation(smartfileInstance.contents, { + format: 'png', + }); + (await smartfile.SmartFile.fromBuffer('.nogit/result2.png', convertedAsset)).write(); +}) + tap.start(); diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index f064785..cbe53c3 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@push.rocks/smartjimp', - version: '1.0.14', + version: '1.0.15', description: 'a tool fr working with images in TypeScript' } diff --git a/ts/smartjimp.plugins.ts b/ts/plugins.ts similarity index 86% rename from ts/smartjimp.plugins.ts rename to ts/plugins.ts index 4518cee..97070ea 100644 --- a/ts/smartjimp.plugins.ts +++ b/ts/plugins.ts @@ -11,8 +11,3 @@ import * as smartpath from '@push.rocks/smartpath'; import * as smartrequest from '@push.rocks/smartrequest'; export { levelcache, smartpath, smarthash, smartfile, smartrequest }; - -// third party scope -import sharp from 'sharp'; - -export { sharp }; diff --git a/ts/plugins.typed.ts b/ts/plugins.typed.ts new file mode 100644 index 0000000..2b41b45 --- /dev/null +++ b/ts/plugins.typed.ts @@ -0,0 +1,7 @@ +import type * as sharpType from 'sharp'; + +export { type sharpType }; + +import type * as jimpType from 'jimp'; + +export { type jimpType }; \ No newline at end of file diff --git a/ts/smartjimp.classes.smartjimp.ts b/ts/smartjimp.classes.smartjimp.ts index 074dd01..26f08f5 100644 --- a/ts/smartjimp.classes.smartjimp.ts +++ b/ts/smartjimp.classes.smartjimp.ts @@ -1,4 +1,5 @@ -import * as plugins from './smartjimp.plugins.js'; +import * as plugins from './plugins.js'; +import * as pluginsTyped from './plugins.typed.js'; export interface IAssetVariation { format?: 'avif' | 'webp' | 'png'; @@ -6,13 +7,22 @@ export interface IAssetVariation { height?: number; } +export interface ISmartJimpOptions { + mode: 'sharp' | 'jimp'; +} + export class SmartJimp { public levelCache = new plugins.levelcache.LevelCache({ cacheId: 'mastercache', maxMemoryStorageInMB: 100, - maxDiskStorageInMB: 5000, + maxDiskStorageInMB: 5000, }); + public options: ISmartJimpOptions; + constructor(optionsArg: ISmartJimpOptions) { + this.options = optionsArg; + } + /** * get a key that is unique for a wanted asset variation */ @@ -23,51 +33,94 @@ export class SmartJimp { ) { return `${sourceTypeArg}_${sourceIdArg}_${ assetVariationArg - ? `${assetVariationArg.width || 'auto' }x${assetVariationArg.height || 'auto'}` + ? `${assetVariationArg.width || 'auto'}x${assetVariationArg.height || 'auto'}` : 'original' }`; } - public async computeAssetVariation(assetBufferArg: Buffer, assetVariationArg?: IAssetVariation) { - if (!assetVariationArg) { - return assetBufferArg; + sharpMod: typeof pluginsTyped.sharpType.default; + public async getSharpMod(): Promise< + typeof pluginsTyped.sharpType.default + > { + if (!this.sharpMod) { + this.sharpMod = (await import('sharp')).default; } - let sharpImage = plugins.sharp(assetBufferArg); - sharpImage = sharpImage.resize(assetVariationArg.width, assetVariationArg.height); - const resultResize = sharpImage.resize(assetVariationArg.width, assetVariationArg.height); - switch (assetVariationArg.format) { - case 'avif': - sharpImage = resultResize.avif(); - case 'webp': - sharpImage = resultResize.webp(); - case 'png': - sharpImage = resultResize.png(); + return this.sharpMod; + } + + jimpMod: typeof pluginsTyped.jimpType; + public async getJimpMod(): Promise { + if (!this.jimpMod) { + this.jimpMod = await import('jimp'); + } + return this.jimpMod.default; + } + + public async computeAssetVariation(assetBufferArg: Buffer, assetVariationArg: IAssetVariation) { + if (this.options.mode === 'sharp') { + const sharp = await this.getSharpMod(); + if (!assetVariationArg) { + return assetBufferArg; + } + let sharpImage = sharp(assetBufferArg); + sharpImage = sharpImage.resize(assetVariationArg.width, assetVariationArg.height); + const resultResize = sharpImage.resize(assetVariationArg.width, assetVariationArg.height); + switch (assetVariationArg.format) { + case 'avif': + sharpImage = resultResize.avif(); + case 'webp': + sharpImage = resultResize.webp(); + case 'png': + sharpImage = resultResize.png(); + } + return sharpImage.toBuffer(); + } else if (this.options.mode === 'jimp') { + const jimp = await this.getJimpMod(); + let jimpImage = await jimp.read(assetBufferArg); + if (assetVariationArg.width || assetVariationArg.height) { + jimpImage = jimpImage.resize(assetVariationArg.width, assetVariationArg.height); + } + switch (assetVariationArg.format) { + case 'png': + return await jimpImage.getBufferAsync(jimp.MIME_PNG); + default: + return await jimpImage.getBufferAsync(jimp.MIME_JPEG); + } } - return sharpImage.toBuffer(); } public async getFromSmartfile( smartfileArg: plugins.smartfile.SmartFile, wantedDimensionsArg?: IAssetVariation ) { - const cacheKey = this.getCacheKey('smartfile', await smartfileArg.getHash(), wantedDimensionsArg); + const cacheKey = this.getCacheKey( + 'smartfile', + await smartfileArg.getHash(), + wantedDimensionsArg + ); const existingCacheEntry = await this.levelCache.retrieveCacheEntryByKey(cacheKey); if (existingCacheEntry) { return existingCacheEntry.contents; } else { - const computedAssetBuffer = await this.computeAssetVariation(smartfileArg.contentBuffer, wantedDimensionsArg); - this.levelCache.storeCacheEntryByKey(cacheKey, new plugins.levelcache.CacheEntry({ - contents: computedAssetBuffer, - ttl: 600000 - })); + const computedAssetBuffer = await this.computeAssetVariation( + smartfileArg.contentBuffer, + wantedDimensionsArg + ); + this.levelCache.storeCacheEntryByKey( + cacheKey, + new plugins.levelcache.CacheEntry({ + contents: computedAssetBuffer, + ttl: 600000, + }) + ); return computedAssetBuffer; } } public async createAvifImageFromBuffer(bufferArg: Buffer) { - const sharpImage = plugins.sharp(bufferArg); + const sharp = await this.getSharpMod(); + const sharpImage = sharp(bufferArg); const result = await sharpImage.avif().toBuffer(); return result; } - } diff --git a/ts/smartjimp.paths.ts b/ts/smartjimp.paths.ts index 70da468..4265bdb 100644 --- a/ts/smartjimp.paths.ts +++ b/ts/smartjimp.paths.ts @@ -1,4 +1,4 @@ -import * as plugins from './smartjimp.plugins.js'; +import * as plugins from './plugins.js'; export const packageDir = plugins.path.join(plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), '../'); export const nogitDir = plugins.path.join(packageDir, '.nogit/')