From df5396cff8ad0b06851fc955f731f656fd0a858c Mon Sep 17 00:00:00 2001 From: Cameron Redmore Date: Sat, 15 Feb 2025 12:38:58 +0000 Subject: [PATCH] Improve opengraph compatibility. --- Dockerfile | 2 + assets/music.jpg | Bin 0 -> 85870 bytes styles.css => assets/styles.css | 0 view.html => assets/view.html | 0 index.js | 99 ++++++++++-- package.json | 10 +- pnpm-lock.yaml | 262 ++++++++++++++++++++++++++++++++ 7 files changed, 361 insertions(+), 12 deletions(-) create mode 100644 assets/music.jpg rename styles.css => assets/styles.css (100%) rename view.html => assets/view.html (100%) diff --git a/Dockerfile b/Dockerfile index 067a869..f5929ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,8 @@ FROM node:alpine WORKDIR /app +RUN apk add ffmpeg + RUN npm i -g pnpm COPY . . diff --git a/assets/music.jpg b/assets/music.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa3965e87b221db19262749d40e44a48af4d2f13 GIT binary patch literal 85870 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 literal 0 HcmV?d00001 diff --git a/styles.css b/assets/styles.css similarity index 100% rename from styles.css rename to assets/styles.css diff --git a/view.html b/assets/view.html similarity index 100% rename from view.html rename to assets/view.html diff --git a/index.js b/index.js index 99753b8..064f7a8 100644 --- a/index.js +++ b/index.js @@ -30,14 +30,63 @@ fastify.register(fastifyStatic, { // Handle CSS file, by sending `styles.css` file from the current directory fastify.get('/styles.css', async (request, reply) => { - const cssContent = await fs.promises.readFile('styles.css', 'utf8') + const cssContent = await fs.promises.readFile('assets/styles.css', 'utf8') reply.header('Content-Type', 'text/css').send(cssContent) }); +fastify.get('/music.jpg', async (request, reply) => { + const musicImage = await fs.promises.readFile('assets/music.jpg') + reply.header('Content-Type', 'image/jpeg').send(musicImage) +}); + +const assetSizeCache = new Map() + +//Find the width and height of a file either an image or video, and cache the result +async function getAssetSize(filePath) { + if (assetSizeCache.has(filePath)) { + return assetSizeCache.get(filePath) + } + + const mimeType = mime.lookup(filePath) || 'application/octet-stream' + + let assetSize = { width: 0, height: 0 } + + //Use ffprobe to get the width and height of a video file + if (mimeType.startsWith('video/')) { + const { exec } = require('child_process') + const { promisify } = require('util') + const execAsync = promisify(exec) + + try { + const { stdout } = await execAsync(`ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 ${filePath}`) + const [width, height] = stdout.trim().split('x').map(Number) + assetSize = { width, height } + } catch (error) { + console.error(error) + } + //Use sharp to get the width and height of an image file + } else if (mimeType.startsWith('image/')) { + const sharp = require('sharp') + try { + const metadata = await sharp(filePath).metadata() + assetSize = { width: metadata.width, height: metadata.height } + } catch (error) { + console.error(error) + } + } + + assetSizeCache.set(filePath, assetSize) + + return assetSize +} + // Serve HTML page with embedded file (public) fastify.get('/s/:date/:filename', async (request, reply) => { let { filename, date } = request.params + //Log the user agent + console.log(request.headers['user-agent']) + // Sanitize filename & date filename = sanitize(filename) date = sanitize(date) @@ -53,21 +102,36 @@ fastify.get('/s/:date/:filename', async (request, reply) => { //Check if the file exists, if not, return 404 await fs.promises.access(filePath) + const {width, height} = await getAssetSize(filePath); + const mimeType = mime.lookup(filename) || 'application/octet-stream' let fileContent = ''; - let ogTags = ''; + let ogTags = ` + \n`; if (mimeType.startsWith('image/')) { - fileContent = `${filename}` - ogTags = `` + fileContent = `${filename} + + + + + ` } else if (mimeType.startsWith('video/')) { - fileContent = `` - ogTags = ` - ` + fileContent = `` + ogTags += ` + + + + + + ` } else if (mimeType.startsWith('audio/')) { fileContent = `` - ogTags = ` - ` + ogTags += ` + + + ` } else if (mimeType.startsWith('text/')) { const fileData = await fs.promises.readFile(filePath, 'utf8'); fileContent = `

${fileData}
` @@ -75,7 +139,7 @@ fastify.get('/s/:date/:filename', async (request, reply) => { fileContent = `Download File` } - const htmlContent = await fs.promises.readFile('view.html', 'utf8'); + const htmlContent = await fs.promises.readFile('assets/view.html', 'utf8'); //Replace placeholders with actual content const html = htmlContent @@ -137,6 +201,21 @@ fastify.put('/upload', { message: 'File uploaded successfully', fileName: host.replace(/\/$/, '') + '/s/' + path.join(dateFolder, fileName) }) + + //If the file is a video, generate a thumbnail + const mimeType = mime.lookup(fileName) || 'application/octet-stream' + if (mimeType.startsWith('video/')) { + const { exec } = require('child_process') + const { promisify } = require('util') + const execAsync = promisify(exec) + + const thumbnailPath = path.join(fullUploadDir, fileName + '.thumb.jpg') + try { + await execAsync(`ffmpeg -i ${filePath} -ss 00:00:01 -vframes 1 ${thumbnailPath}`) + } catch (error) { + console.error(error) + } + } } catch (err) { reply.code(500).send({ error: 'Error uploading file' }) } diff --git a/package.json b/package.json index e4c1bb3..13170f2 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,13 @@ "dotenv": "^16.4.7", "fastify": "^5.2.1", "mime-types": "^2.1.35", - "sanitize-filename": "^1.6.3" + "sanitize-filename": "^1.6.3", + "sharp": "^0.33.5" }, - "type": "module" + "type": "module", + "pnpm": { + "onlyBuiltDependencies": [ + "sharp" + ] + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1c10f8a..6780f9c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,9 +26,15 @@ importers: sanitize-filename: specifier: ^1.6.3 version: 1.6.3 + sharp: + specifier: ^0.33.5 + version: 0.33.5 packages: + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + '@fastify/accept-negotiator@2.0.1': resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==} @@ -65,6 +71,111 @@ packages: '@fastify/static@8.1.0': resolution: {integrity: sha512-lPb8+1ulvbGSUSQ0/adBDyp/Ye/MX+pBwhkLAr8/GU88kNnJlSu7KXdyW6CCOROcr5BgrqJD01lEOosozFAegw==} + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -123,6 +234,13 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -143,6 +261,10 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + dotenv@16.4.7: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} @@ -211,6 +333,9 @@ packages: resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} engines: {node: '>= 10'} + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -333,6 +458,10 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -345,6 +474,9 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + sonic-boom@4.2.0: resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} @@ -386,6 +518,9 @@ packages: truncate-utf8-bytes@1.0.2: resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + utf8-byte-length@1.0.5: resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} @@ -404,6 +539,11 @@ packages: snapshots: + '@emnapi/runtime@1.3.1': + dependencies: + tslib: 2.8.1 + optional: true + '@fastify/accept-negotiator@2.0.1': {} '@fastify/ajv-compiler@4.0.2': @@ -458,6 +598,81 @@ snapshots: fastq: 1.19.0 glob: 11.0.1 + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.3.1 + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -511,6 +726,16 @@ snapshots: color-name@1.1.4: {} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 @@ -527,6 +752,8 @@ snapshots: dequal@2.0.3: {} + detect-libc@2.0.3: {} + dotenv@16.4.7: {} eastasianwidth@0.2.0: {} @@ -614,6 +841,8 @@ snapshots: ipaddr.js@2.2.0: {} + is-arrayish@0.3.2: {} + is-fullwidth-code-point@3.0.0: {} isexe@2.0.0: {} @@ -715,6 +944,32 @@ snapshots: setprototypeof@1.2.0: {} + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.7.1 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -723,6 +978,10 @@ snapshots: signal-exit@4.1.0: {} + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + sonic-boom@4.2.0: dependencies: atomic-sleep: 1.0.0 @@ -763,6 +1022,9 @@ snapshots: dependencies: utf8-byte-length: 1.0.5 + tslib@2.8.1: + optional: true + utf8-byte-length@1.0.5: {} which@2.0.2: