From f275b8c9f67c00be5219555ca09243a73f7c6960 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Fri, 27 Feb 2026 19:26:19 +0100 Subject: [PATCH] refactor: drop legacy image-processor and directus from pipeline --- .gitea/workflows/pipeline.yml | 4 +- apps/image-service/Dockerfile | 40 - apps/image-service/package.json | 23 - apps/image-service/src/index.ts | 109 --- apps/image-service/tsconfig.json | 11 - apps/sample-website/next.config.ts | 7 +- apps/sample-website/package.json | 1 - .../sample-website/src/app/api/image/route.ts | 60 -- .../models/tiny_face_detector_model-shard1 | 1 - ..._face_detector_model-weights_manifest.json | 30 - packages/image-processor/package.json | 34 - packages/image-processor/src/index.ts | 1 - packages/image-processor/src/processor.ts | 217 ----- packages/image-processor/tsconfig.json | 19 - packages/image-processor/tsup.config.ts | 17 - pnpm-lock.yaml | 758 +----------------- 16 files changed, 33 insertions(+), 1299 deletions(-) delete mode 100644 apps/image-service/Dockerfile delete mode 100644 apps/image-service/package.json delete mode 100644 apps/image-service/src/index.ts delete mode 100644 apps/image-service/tsconfig.json delete mode 100644 apps/sample-website/src/app/api/image/route.ts delete mode 100644 packages/image-processor/models/tiny_face_detector_model-shard1 delete mode 100644 packages/image-processor/models/tiny_face_detector_model-weights_manifest.json delete mode 100644 packages/image-processor/package.json delete mode 100644 packages/image-processor/src/index.ts delete mode 100644 packages/image-processor/src/processor.ts delete mode 100644 packages/image-processor/tsconfig.json delete mode 100644 packages/image-processor/tsup.config.ts diff --git a/.gitea/workflows/pipeline.yml b/.gitea/workflows/pipeline.yml index 346d229..33547f9 100644 --- a/.gitea/workflows/pipeline.yml +++ b/.gitea/workflows/pipeline.yml @@ -191,9 +191,7 @@ jobs: - image: gatekeeper file: packages/infra/docker/Dockerfile.gatekeeper name: Gatekeeper (Product) - - image: directus - file: packages/infra/docker/Dockerfile.directus - name: Directus (Base) + - image: image-processor file: apps/image-service/Dockerfile name: Image Processor diff --git a/apps/image-service/Dockerfile b/apps/image-service/Dockerfile deleted file mode 100644 index 5b33276..0000000 --- a/apps/image-service/Dockerfile +++ /dev/null @@ -1,40 +0,0 @@ -FROM node:20.18-bookworm-slim AS base -ENV PNPM_HOME="/pnpm" -ENV PATH="$PNPM_HOME:$PATH" -RUN apt-get update && apt-get install -y \ - build-essential \ - python3 \ - libcairo2-dev \ - libpango1.0-dev \ - libjpeg-dev \ - libgif-dev \ - librsvg2-dev \ - libexpat1 \ - && rm -rf /var/lib/apt/lists/* -RUN npm install -g pnpm@10.30.1 - -FROM base AS build -WORKDIR /app -COPY . . -# We only need standard pnpm install now, no C++ tools needed for basic Sharp -RUN pnpm install --frozen-lockfile -RUN pnpm --filter @mintel/image-processor build -RUN pnpm --filter image-service build - -FROM base -WORKDIR /app -# Instead of copying node_modules which contains native C++ bindings for canvas and tfjs-node, -# we copy the package.json files and install natively in the final stage so the bindings are correct. -COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./ -COPY apps/image-service/package.json ./apps/image-service/package.json -COPY packages/image-processor/package.json ./packages/image-processor/package.json - -RUN pnpm install --frozen-lockfile --filter image-service... - -COPY --from=build /app/apps/image-service/dist ./apps/image-service/dist -COPY --from=build /app/packages/image-processor/dist ./packages/image-processor/dist -COPY --from=build /app/packages/image-processor/models ./packages/image-processor/models - -EXPOSE 8080 -WORKDIR /app/apps/image-service -CMD ["npm", "run", "start"] diff --git a/apps/image-service/package.json b/apps/image-service/package.json deleted file mode 100644 index dae6455..0000000 --- a/apps/image-service/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "image-service", - "version": "1.9.0", - "private": true, - "type": "module", - "scripts": { - "dev": "tsx watch src/index.ts", - "build": "tsc", - "start": "node dist/index.js", - "lint": "eslint src" - }, - "dependencies": { - "@mintel/image-processor": "workspace:*", - "fastify": "^4.26.2" - }, - "devDependencies": { - "@mintel/eslint-config": "workspace:*", - "@mintel/tsconfig": "workspace:*", - "@types/node": "^20.0.0", - "tsx": "^4.7.1", - "typescript": "^5.0.0" - } -} diff --git a/apps/image-service/src/index.ts b/apps/image-service/src/index.ts deleted file mode 100644 index 921ed2a..0000000 --- a/apps/image-service/src/index.ts +++ /dev/null @@ -1,109 +0,0 @@ -import Fastify from "fastify"; -import { - processImageWithSmartCrop, - parseImgproxyOptions, - mapUrl, -} from "@mintel/image-processor"; - -const fastify = Fastify({ - logger: true, -}); - -fastify.get("/unsafe/:options/:urlSafeB64", async (request, reply) => { - const { options, urlSafeB64 } = request.params as { - options: string; - urlSafeB64: string; - }; - - // urlSafeB64 might be "plain/http://..." or a Base64 string - let url = ""; - if (urlSafeB64.startsWith("plain/")) { - url = urlSafeB64.substring(6); - } else { - try { - url = Buffer.from(urlSafeB64, "base64").toString("utf-8"); - } catch (e) { - return reply.status(400).send({ error: "Invalid Base64 URL" }); - } - } - - const parsedOptions = parseImgproxyOptions(options); - const mappedUrl = mapUrl(url, process.env.IMGPROXY_URL_MAPPING); - - return handleProcessing(mappedUrl, parsedOptions, reply); -}); - -// Helper to avoid duplication -async function handleProcessing(url: string, options: any, reply: any) { - const width = options.width || 800; - const height = options.height || 600; - const quality = options.quality || 80; - const format = options.format || "webp"; - - try { - const response = await fetch(url); - if (!response.ok) { - return reply.status(response.status).send({ - error: `Failed to fetch source image: ${response.statusText}`, - }); - } - - const arrayBuffer = await response.arrayBuffer(); - const buffer = Buffer.from(arrayBuffer); - - const processedBuffer = await processImageWithSmartCrop(buffer, { - width, - height, - format, - quality, - }); - - reply.header("Content-Type", `image/${format}`); - reply.header("Cache-Control", "public, max-age=31536000, immutable"); - return reply.send(processedBuffer); - } catch (err) { - fastify.log.error(err); - return reply - .status(500) - .send({ error: "Internal Server Error processing image" }); - } -} - -fastify.get("/process", async (request, reply) => { - const query = request.query as { - url?: string; - w?: string; - h?: string; - q?: string; - format?: string; - }; - - const { url } = query; - const width = parseInt(query.w || "800", 10); - const height = parseInt(query.h || "600", 10); - const quality = parseInt(query.q || "80", 10); - const format = (query.format || "webp") as any; - - if (!url) { - return reply.status(400).send({ error: 'Parameter "url" is required' }); - } - - const mappedUrl = mapUrl(url, process.env.IMGPROXY_URL_MAPPING); - return handleProcessing(mappedUrl, { width, height, quality, format }, reply); -}); - -fastify.get("/health", async () => { - return { status: "ok" }; -}); - -const start = async () => { - try { - await fastify.listen({ port: 8080, host: "0.0.0.0" }); - console.log(`Server listening on 8080`); - } catch (err) { - fastify.log.error(err); - process.exit(1); - } -}; - -start(); diff --git a/apps/image-service/tsconfig.json b/apps/image-service/tsconfig.json deleted file mode 100644 index 6ac2154..0000000 --- a/apps/image-service/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "@mintel/tsconfig/base.json", - "compilerOptions": { - "outDir": "dist", - "rootDir": "src", - "module": "NodeNext", - "moduleResolution": "NodeNext", - "noEmit": false - }, - "include": ["src/**/*"] -} diff --git a/apps/sample-website/next.config.ts b/apps/sample-website/next.config.ts index 3c25a51..6544940 100644 --- a/apps/sample-website/next.config.ts +++ b/apps/sample-website/next.config.ts @@ -2,12 +2,7 @@ import mintelNextConfig from "@mintel/next-config"; /** @type {import('next').NextConfig} */ const nextConfig = { - serverExternalPackages: [ - "@mintel/image-processor", - "@tensorflow/tfjs-node", - "sharp", - "canvas", - ], + transpilePackages: ["@mintel/ui"], }; export default mintelNextConfig(nextConfig); diff --git a/apps/sample-website/package.json b/apps/sample-website/package.json index e97bf9d..0872bf0 100644 --- a/apps/sample-website/package.json +++ b/apps/sample-website/package.json @@ -15,7 +15,6 @@ "pagespeed:test": "mintel pagespeed" }, "dependencies": { - "@mintel/image-processor": "workspace:*", "@mintel/next-observability": "workspace:*", "@mintel/next-utils": "workspace:*", "@mintel/observability": "workspace:*", diff --git a/apps/sample-website/src/app/api/image/route.ts b/apps/sample-website/src/app/api/image/route.ts deleted file mode 100644 index bc23b77..0000000 --- a/apps/sample-website/src/app/api/image/route.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { NextRequest, NextResponse } from "next/server"; - -export const dynamic = "force-dynamic"; -export const runtime = "nodejs"; - -export async function GET(request: NextRequest) { - const { searchParams } = new URL(request.url); - const url = searchParams.get("url"); - const width = parseInt(searchParams.get("w") || "800"); - const height = parseInt(searchParams.get("h") || "600"); - const q = parseInt(searchParams.get("q") || "80"); - - if (!url) { - return NextResponse.json( - { error: "Missing url parameter" }, - { status: 400 }, - ); - } - - try { - // 1. Fetch image from original URL - const response = await fetch(url); - if (!response.ok) { - return NextResponse.json( - { error: "Failed to fetch original image" }, - { status: response.status }, - ); - } - - const arrayBuffer = await response.arrayBuffer(); - const buffer = Buffer.from(arrayBuffer); - - // Dynamically import to prevent Next.js from trying to bundle tfjs-node/sharp locally at build time - const { processImageWithSmartCrop } = - await import("@mintel/image-processor"); - - // 2. Process image with Face-API and Sharp - const processedBuffer = await processImageWithSmartCrop(buffer, { - width, - height, - format: "webp", - quality: q, - }); - - // 3. Return the processed image - return new NextResponse(new Uint8Array(processedBuffer), { - status: 200, - headers: { - "Content-Type": "image/webp", - "Cache-Control": "public, max-age=31536000, immutable", - }, - }); - } catch (error) { - console.error("Image Processing Error:", error); - return NextResponse.json( - { error: "Failed to process image" }, - { status: 500 }, - ); - } -} diff --git a/packages/image-processor/models/tiny_face_detector_model-shard1 b/packages/image-processor/models/tiny_face_detector_model-shard1 deleted file mode 100644 index 1becba2..0000000 --- a/packages/image-processor/models/tiny_face_detector_model-shard1 +++ /dev/null @@ -1 +0,0 @@ -404: Not Found \ No newline at end of file diff --git a/packages/image-processor/models/tiny_face_detector_model-weights_manifest.json b/packages/image-processor/models/tiny_face_detector_model-weights_manifest.json deleted file mode 100644 index d11c9a3..0000000 --- a/packages/image-processor/models/tiny_face_detector_model-weights_manifest.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - { - "weights": - [ - {"name":"conv0/filters","shape":[3,3,3,16],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.009007044399485869,"min":-1.2069439495311063}}, - {"name":"conv0/bias","shape":[16],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005263455241334205,"min":-0.9211046672334858}}, - {"name":"conv1/depthwise_filter","shape":[3,3,16,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.004001977630690033,"min":-0.5042491814669441}}, - {"name":"conv1/pointwise_filter","shape":[1,1,16,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.013836609615999109,"min":-1.411334180831909}}, - {"name":"conv1/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0015159862590771096,"min":-0.30926119685173037}}, - {"name":"conv2/depthwise_filter","shape":[3,3,32,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.002666276225856706,"min":-0.317286870876948}}, - {"name":"conv2/pointwise_filter","shape":[1,1,32,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.015265831292844286,"min":-1.6792414422128714}}, - {"name":"conv2/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0020280554598453,"min":-0.37113414915168985}}, - {"name":"conv3/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006100742489683862,"min":-0.8907084034938438}}, - {"name":"conv3/pointwise_filter","shape":[1,1,64,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.016276211832083907,"min":-2.0508026908425725}}, - {"name":"conv3/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.003394414279975143,"min":-0.7637432129944072}}, - {"name":"conv4/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006716050119961009,"min":-0.8059260143953211}}, - {"name":"conv4/pointwise_filter","shape":[1,1,128,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.021875603993733724,"min":-2.8875797271728514}}, - {"name":"conv4/bias","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0041141652009066415,"min":-0.8187188749804216}}, - {"name":"conv5/depthwise_filter","shape":[3,3,256,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.008423839597141042,"min":-0.9013508368940915}}, - {"name":"conv5/pointwise_filter","shape":[1,1,256,512],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.030007277283014035,"min":-3.8709387695088107}}, - {"name":"conv5/bias","shape":[512],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.008402082966823203,"min":-1.4871686851277068}}, - {"name":"conv8/filters","shape":[1,1,512,25],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.028336129469030042,"min":-4.675461362389957}}, - {"name":"conv8/bias","shape":[25],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.002268134028303857,"min":-0.41053225912299807}} - ], - "paths": - [ - "tiny_face_detector_model.bin" - ] - } -] \ No newline at end of file diff --git a/packages/image-processor/package.json b/packages/image-processor/package.json deleted file mode 100644 index 27b1676..0000000 --- a/packages/image-processor/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "@mintel/image-processor", - "version": "1.9.0", - "private": true, - "type": "module", - "main": "./dist/index.js", - "module": "./dist/index.js", - "types": "./dist/index.d.ts", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "scripts": { - "build": "tsup", - "dev": "tsup --watch", - "lint": "eslint src" - }, - "dependencies": { - "@tensorflow/tfjs": "^4.22.0", - "@tensorflow/tfjs-backend-wasm": "^4.22.0", - "@vladmandic/face-api": "^1.7.15", - "canvas": "^3.2.1", - "sharp": "^0.33.2" - }, - "devDependencies": { - "@mintel/eslint-config": "workspace:*", - "@mintel/tsconfig": "workspace:*", - "@types/node": "^20.0.0", - "tsup": "^8.3.5", - "typescript": "^5.0.0" - } -} diff --git a/packages/image-processor/src/index.ts b/packages/image-processor/src/index.ts deleted file mode 100644 index 7e596fb..0000000 --- a/packages/image-processor/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './processor.js'; diff --git a/packages/image-processor/src/processor.ts b/packages/image-processor/src/processor.ts deleted file mode 100644 index 6a1f230..0000000 --- a/packages/image-processor/src/processor.ts +++ /dev/null @@ -1,217 +0,0 @@ -import sharp from "sharp"; -import { Canvas, Image, ImageData } from "canvas"; -// Use the ESM no-bundle build to avoid the default Node entrypoint -// which hardcodes require('@tensorflow/tfjs-node') and crashes in Docker. -// This build uses pure @tensorflow/tfjs (JS-only, no native C++ bindings). -import * as faceapi from "@vladmandic/face-api/dist/face-api.esm-nobundle.js"; -import * as tf from "@tensorflow/tfjs"; -import path from "path"; -import { fileURLToPath } from "url"; - -// Polyfill required by face-api for Node.js -faceapi.env.monkeyPatch({ Canvas, Image, ImageData } as any); - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const MODEL_URL = path.join(__dirname, "../models"); - -// State flag to ensure we only load weights once -let modelsLoaded = false; - -async function loadModelsOnce() { - if (modelsLoaded) return; - // Initialize pure JS CPU backend (no native bindings needed) - await tf.setBackend("cpu"); - await tf.ready(); - - // Load the microscopic TinyFaceDetector (~190KB) - await faceapi.nets.tinyFaceDetector.loadFromDisk(MODEL_URL); - modelsLoaded = true; -} - -export interface ProcessImageOptions { - width: number; - height: number; - format?: "webp" | "jpeg" | "png" | "avif"; - quality?: number; -} - -/** - * Maps a URL based on the IMGPROXY_URL_MAPPING environment variable. - * Format: "match1:replace1,match2:replace2" - */ -export function mapUrl(url: string, mappingString?: string): string { - if (!mappingString) return url; - - const mappings = mappingString.split(",").map((m) => { - if (m.includes("|")) { - return m.split("|"); - } - - // Legacy support for simple "host:target" or cases where one side might have a protocol - // We try to find the split point that isn't part of a protocol "://" - const colonIndices = []; - for (let i = 0; i < m.length; i++) { - if (m[i] === ":") { - // Check if this colon is part of "://" - if (!(m[i + 1] === "/" && m[i + 2] === "/")) { - colonIndices.push(i); - } - } - } - - if (colonIndices.length === 0) return [m]; - - // In legacy mode with colons, we take the LAST non-protocol colon as the separator - // This handles "http://host:port" or "host:http://target" better - const lastColon = colonIndices[colonIndices.length - 1]; - return [m.substring(0, lastColon), m.substring(lastColon + 1)]; - }); - - let mappedUrl = url; - - for (const [match, replace] of mappings) { - if (match && replace && url.includes(match)) { - mappedUrl = url.replace(match, replace); - } - } - - return mappedUrl; -} - -/** - * Parses legacy imgproxy options string. - * Example: rs:fill:300:400/q:80 - */ -export function parseImgproxyOptions( - optionsStr: string, -): Partial { - const parts = optionsStr.split("/"); - const options: Partial = {}; - - for (const part of parts) { - if (part.startsWith("rs:")) { - const [, , w, h] = part.split(":"); - if (w) options.width = parseInt(w, 10); - if (h) options.height = parseInt(h, 10); - } else if (part.startsWith("q:")) { - const q = part.split(":")[1]; - if (q) options.quality = parseInt(q, 10); - } else if (part.startsWith("ext:")) { - const ext = part.split(":")[1] as any; - if (["webp", "jpeg", "png", "avif"].includes(ext)) { - options.format = ext; - } - } - } - - return options; -} - -export async function processImageWithSmartCrop( - inputBuffer: Buffer, - options: ProcessImageOptions, -): Promise { - const sharpImage = sharp(inputBuffer); - const metadata = await sharpImage.metadata(); - - if (!metadata.width || !metadata.height) { - throw new Error("Could not read image metadata"); - } - - // Load ML models (noop if already loaded) - await loadModelsOnce(); - - // Convert sharp image to a Node-compatible canvas Image for face-api - const jpegBuffer = await sharpImage.jpeg().toBuffer(); - const img = new Image(); - img.src = jpegBuffer; - const canvas = new Canvas(img.width, img.height); - const ctx = canvas.getContext("2d"); - ctx.drawImage(img, 0, 0, img.width, img.height); - - // Detect faces locally using the tiny model - // Requires explicit any cast since the types expect HTML elements in browser contexts - const detections = await faceapi.detectAllFaces( - canvas as any, - new faceapi.TinyFaceDetectorOptions(), - ); - - let cropPosition: "center" | "attention" | number = "attention"; // Fallback to sharp's attention if no faces - - if (detections.length > 0) { - // We have faces! Calculate the bounding box that contains all of them - let minX = metadata.width; - let minY = metadata.height; - let maxX = 0; - let maxY = 0; - - for (const det of detections) { - const box = det.box; - if (box.x < minX) minX = Math.max(0, box.x); - if (box.y < minY) minY = Math.max(0, box.y); - if (box.x + box.width > maxX) - maxX = Math.min(metadata.width, box.x + box.width); - if (box.y + box.height > maxY) - maxY = Math.min(metadata.height, box.y + box.height); - } - - const centerX = Math.floor(minX + (maxX - minX) / 2); - const centerY = Math.floor(minY + (maxY - minY) / 2); - - const targetRatio = options.width / options.height; - const currentRatio = metadata.width / metadata.height; - - let cropWidth = metadata.width; - let cropHeight = metadata.height; - - // Determine the maximal crop window that maintains aspect ratio - if (currentRatio > targetRatio) { - cropWidth = Math.floor(metadata.height * targetRatio); - } else { - cropHeight = Math.floor(metadata.width / targetRatio); - } - - // Center the crop window over the center of the faces - let cropX = Math.floor(centerX - cropWidth / 2); - let cropY = Math.floor(centerY - cropHeight / 2); - - // Keep crop window inside image bounds - if (cropX < 0) cropX = 0; - if (cropY < 0) cropY = 0; - if (cropX + cropWidth > metadata.width) cropX = metadata.width - cropWidth; - if (cropY + cropHeight > metadata.height) - cropY = metadata.height - cropHeight; - - // Pre-crop the image to isolate the faces before resizing - sharpImage.extract({ - left: cropX, - top: cropY, - width: cropWidth, - height: cropHeight, - }); - - // As we manually calculated the exact focal box, we can now just center it - cropPosition = "center"; - } - - let finalImage = sharpImage.resize(options.width, options.height, { - fit: "cover", - position: cropPosition, - }); - - const format = options.format || "webp"; - const quality = options.quality || 80; - - if (format === "webp") { - finalImage = finalImage.webp({ quality }); - } else if (format === "jpeg") { - finalImage = finalImage.jpeg({ quality }); - } else if (format === "png") { - finalImage = finalImage.png({ quality }); - } else if (format === "avif") { - finalImage = finalImage.avif({ quality }); - } - - return finalImage.toBuffer(); -} diff --git a/packages/image-processor/tsconfig.json b/packages/image-processor/tsconfig.json deleted file mode 100644 index 7475152..0000000 --- a/packages/image-processor/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "extends": "@mintel/tsconfig/base.json", - "compilerOptions": { - "outDir": "dist", - "rootDir": "src", - "allowJs": true, - "esModuleInterop": true, - "module": "NodeNext", - "moduleResolution": "NodeNext" - }, - "include": [ - "src/**/*" - ], - "exclude": [ - "node_modules", - "dist", - "**/*.test.ts" - ] -} \ No newline at end of file diff --git a/packages/image-processor/tsup.config.ts b/packages/image-processor/tsup.config.ts deleted file mode 100644 index df7f6c2..0000000 --- a/packages/image-processor/tsup.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { defineConfig } from "tsup"; - -export default defineConfig({ - entry: ["src/index.ts"], - format: ["esm"], - dts: true, - clean: true, - // Bundle face-api and tensorflow inline (they're pure JS). - // Keep sharp and canvas external (they have native C++ bindings). - noExternal: ["@vladmandic/face-api", "@tensorflow/tfjs"], - external: [ - "sharp", - "canvas", - "@tensorflow/tfjs-backend-wasm", - "@tensorflow/tfjs-backend-wasm/dist/index.js", - ], -}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e9836c2..ecf553e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -101,36 +101,8 @@ importers: specifier: ^4.0.18 version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.33)(@vitest/ui@4.0.18)(happy-dom@20.5.3)(jiti@2.6.1)(jsdom@27.4.0(canvas@3.2.1))(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - apps/image-service: - dependencies: - '@mintel/image-processor': - specifier: workspace:* - version: link:../../packages/image-processor - fastify: - specifier: ^4.26.2 - version: 4.29.1 - devDependencies: - '@mintel/eslint-config': - specifier: workspace:* - version: link:../../packages/eslint-config - '@mintel/tsconfig': - specifier: workspace:* - version: link:../../packages/tsconfig - '@types/node': - specifier: ^20.0.0 - version: 20.19.33 - tsx: - specifier: ^4.7.1 - version: 4.21.0 - typescript: - specifier: ^5.0.0 - version: 5.9.3 - apps/sample-website: dependencies: - '@mintel/image-processor': - specifier: workspace:* - version: link:../../packages/image-processor '@mintel/next-observability': specifier: workspace:* version: link:../../packages/next-observability @@ -409,40 +381,6 @@ importers: specifier: ^20.4.0 version: 20.4.1 - packages/image-processor: - dependencies: - '@tensorflow/tfjs': - specifier: ^4.22.0 - version: 4.22.0(seedrandom@3.0.5) - '@tensorflow/tfjs-backend-wasm': - specifier: ^4.22.0 - version: 4.22.0(@tensorflow/tfjs-core@4.22.0) - '@vladmandic/face-api': - specifier: ^1.7.15 - version: 1.7.15 - canvas: - specifier: ^3.2.1 - version: 3.2.1 - sharp: - specifier: ^0.33.2 - version: 0.33.5 - devDependencies: - '@mintel/eslint-config': - specifier: workspace:* - version: link:../eslint-config - '@mintel/tsconfig': - specifier: workspace:* - version: link:../tsconfig - '@types/node': - specifier: ^20.0.0 - version: 20.19.33 - tsup: - specifier: ^8.3.5 - version: 8.5.1(@swc/core@1.15.11(@swc/helpers@0.5.18))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) - typescript: - specifier: ^5.0.0 - version: 5.9.3 - packages/infra: devDependencies: '@mintel/next-utils': @@ -1688,18 +1626,6 @@ packages: '@noble/hashes': optional: true - '@fastify/ajv-compiler@3.6.0': - resolution: {integrity: sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==} - - '@fastify/error@3.4.1': - resolution: {integrity: sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==} - - '@fastify/fast-json-stringify-compiler@4.3.0': - resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} - - '@fastify/merge-json-schemas@0.1.1': - resolution: {integrity: sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==} - '@formatjs/ecma402-abstract@3.1.1': resolution: {integrity: sha512-jhZbTwda+2tcNrs4kKvxrPLPjx8QsBCLCUgrrJ/S+G9YrGHWLhAyFMMBHJBnBoOwuLHd7L14FgYudviKaxkO2Q==} @@ -1738,65 +1664,33 @@ packages: resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} engines: {node: '>=18'} - '@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-arm64@0.34.5': resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} 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-darwin-x64@0.34.5': resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} 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-arm64@1.2.4': resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} 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-darwin-x64@1.2.4': resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} 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-arm64@1.2.4': resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} 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-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] @@ -1812,64 +1706,32 @@ packages: cpu: [riscv64] os: [linux] - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} - cpu: [s390x] - os: [linux] - '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} 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-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} 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-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} 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-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} 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-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} 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-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -1888,59 +1750,30 @@ packages: cpu: [riscv64] 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-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} 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-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} 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-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} 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-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} 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-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -1952,24 +1785,12 @@ packages: cpu: [arm64] os: [win32] - '@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-ia32@0.34.5': resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} 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] - '@img/sharp-win32-x64@0.34.5': resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2955,47 +2776,6 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' - '@tensorflow/tfjs-backend-cpu@4.22.0': - resolution: {integrity: sha512-1u0FmuLGuRAi8D2c3cocHTASGXOmHc/4OvoVDENJayjYkS119fcTcQf4iHrtLthWyDIPy3JiPhRrZQC9EwnhLw==} - engines: {yarn: '>= 1.3.2'} - peerDependencies: - '@tensorflow/tfjs-core': 4.22.0 - - '@tensorflow/tfjs-backend-wasm@4.22.0': - resolution: {integrity: sha512-/IYhReRIp4jg/wYW0OwbbJZG8ON87mbz0PgkiP3CdcACRSvUN0h8rvC0O3YcDtkTQtFWF/tcXq/KlVDyV49wmA==} - peerDependencies: - '@tensorflow/tfjs-core': 4.22.0 - - '@tensorflow/tfjs-backend-webgl@4.22.0': - resolution: {integrity: sha512-H535XtZWnWgNwSzv538czjVlbJebDl5QTMOth4RXr2p/kJ1qSIXE0vZvEtO+5EC9b00SvhplECny2yDewQb/Yg==} - engines: {yarn: '>= 1.3.2'} - peerDependencies: - '@tensorflow/tfjs-core': 4.22.0 - - '@tensorflow/tfjs-converter@4.22.0': - resolution: {integrity: sha512-PT43MGlnzIo+YfbsjM79Lxk9lOq6uUwZuCc8rrp0hfpLjF6Jv8jS84u2jFb+WpUeuF4K33ZDNx8CjiYrGQ2trQ==} - peerDependencies: - '@tensorflow/tfjs-core': 4.22.0 - - '@tensorflow/tfjs-core@4.22.0': - resolution: {integrity: sha512-LEkOyzbknKFoWUwfkr59vSB68DMJ4cjwwHgicXN0DUi3a0Vh1Er3JQqCI1Hl86GGZQvY8ezVrtDIvqR1ZFW55A==} - engines: {yarn: '>= 1.3.2'} - - '@tensorflow/tfjs-data@4.22.0': - resolution: {integrity: sha512-dYmF3LihQIGvtgJrt382hSRH4S0QuAp2w1hXJI2+kOaEqo5HnUPG0k5KA6va+S1yUhx7UBToUKCBHeLHFQRV4w==} - peerDependencies: - '@tensorflow/tfjs-core': 4.22.0 - seedrandom: ^3.0.5 - - '@tensorflow/tfjs-layers@4.22.0': - resolution: {integrity: sha512-lybPj4ZNj9iIAPUj7a8ZW1hg8KQGfqWLlCZDi9eM/oNKCCAgchiyzx8OrYoWmRrB+AM6VNEeIT+2gZKg5ReihA==} - peerDependencies: - '@tensorflow/tfjs-core': 4.22.0 - - '@tensorflow/tfjs@4.22.0': - resolution: {integrity: sha512-0TrIrXs6/b7FLhLVNmfh8Sah6JgjBPH4mZ8JGb7NU6WW+cx00qK5BcAZxw7NCzxj6N8MRAIfHq+oNbPUNG5VAg==} - hasBin: true - '@testing-library/dom@10.4.1': resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} engines: {node: '>=18'} @@ -3059,9 +2839,6 @@ packages: '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/emscripten@0.0.34': - resolution: {integrity: sha512-QSb9ojDincskc+uKMI0KXp8e1NALFINCrMlp8VGKGcTSxeEyRTTKyjWw75NYrCZHUsVEEEpr1tYHpbtaC++/sQ==} - '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} @@ -3089,9 +2866,6 @@ packages: '@types/jsonfile@6.1.4': resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} - '@types/long@4.0.2': - resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} - '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} @@ -3113,12 +2887,6 @@ packages: '@types/node@22.19.10': resolution: {integrity: sha512-tF5VOugLS/EuDlTBijk0MqABfP8UxgYazTLo3uIn3b4yJgg26QRbVYJYsDtHrjdDUIRfP70+VfhTTc+CE1yskw==} - '@types/offscreencanvas@2019.3.0': - resolution: {integrity: sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==} - - '@types/offscreencanvas@2019.7.3': - resolution: {integrity: sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==} - '@types/pg-pool@2.0.7': resolution: {integrity: sha512-U4CwmGVQcbEuqpyju8/ptOKg6gEC+Tqsvj2xS9o1g71bUh8twxnC6ZL5rZKCsGN0iyH0CwgUyc9VR5owNQF9Ng==} @@ -3139,9 +2907,6 @@ packages: '@types/sax@1.2.7': resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} - '@types/seedrandom@2.4.34': - resolution: {integrity: sha512-ytDiArvrn/3Xk6/vtylys5tlY6eo7Ane0hvcx++TKo6RxQXuVfW0AF/oeWqAj9dN29SyhtawuXstgmPlwNcv/A==} - '@types/tedious@4.0.14': resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} @@ -3410,10 +3175,6 @@ packages: resolution: {integrity: sha512-Xfe6rpCTxSxfbswi/W/Pz7zp1WWSNn4A0eW4mLkQUewCrXXtMj31lCg+iQyTkh/CkusZSq9eDflu7tjEDXUY6g==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - '@vladmandic/face-api@1.7.15': - resolution: {integrity: sha512-WDMmK3CfNLo8jylWqMoQgf4nIst3M0fzx1dnac96wv/dvMTN4DxC/Pq1DGtduDk1lktCamQ3MIDXFnvrdHTXDw==} - engines: {node: '>=14.0.0'} - '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -3459,9 +3220,6 @@ packages: '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} - '@webgpu/types@0.1.38': - resolution: {integrity: sha512-7LrhVKz2PRh+DD7+S+PVaFd5HxaWQvoMqBbsV9fNJO1pjUs1P8bM2vQVNfk+3URTqbuTI7gkXi0rfsN0IadoBA==} - '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -3475,9 +3233,6 @@ packages: abs-svg-path@0.1.1: resolution: {integrity: sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==} - abstract-logging@2.0.1: - resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} - acorn-import-attributes@1.9.5: resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} peerDependencies: @@ -3523,14 +3278,6 @@ packages: ajv: optional: true - ajv-formats@3.0.1: - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - ajv-keywords@5.1.0: resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: @@ -3673,9 +3420,6 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - avvio@8.4.0: - resolution: {integrity: sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==} - axe-core@4.11.1: resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==} engines: {node: '>=4'} @@ -3891,9 +3635,6 @@ packages: client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -3920,10 +3661,6 @@ packages: 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'} - colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -3990,13 +3727,6 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - - core-js@3.29.1: - resolution: {integrity: sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==} - cosmiconfig-typescript-loader@6.2.0: resolution: {integrity: sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==} engines: {node: '>=v18'} @@ -4523,15 +4253,9 @@ packages: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} - fast-content-type-parse@1.1.0: - resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==} - fast-copy@4.0.2: resolution: {integrity: sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==} - fast-decode-uri-component@1.0.1: - resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} - fast-deep-equal@2.0.1: resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} @@ -4549,27 +4273,15 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-json-stringify@5.16.1: - resolution: {integrity: sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==} - fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-querystring@1.1.2: - resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} - fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fast-uri@2.4.0: - resolution: {integrity: sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==} - fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fastify@4.29.1: - resolution: {integrity: sha512-m2kMNHIG92tSNWv+Z3UeTR9AWLLuo7KctC7mlFPtMEVrfjIhmQhkQnT9v15qA/BfVq3vvj134Y0jl9SBje3jXQ==} - fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -4606,10 +4318,6 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - find-my-way@8.2.2: - resolution: {integrity: sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==} - engines: {node: '>=14'} - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -4682,10 +4390,6 @@ packages: forwarded-parse@2.1.2: resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==} - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - fraction.js@5.3.4: resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} @@ -5043,10 +4747,6 @@ packages: resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - is-any-array@2.0.1: resolution: {integrity: sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==} @@ -5286,9 +4986,6 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-schema-ref-resolver@1.0.1: - resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==} - json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -5341,9 +5038,6 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - light-my-request@5.14.0: - resolution: {integrity: sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==} - lightningcss-android-arm64@1.30.2: resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} engines: {node: '>= 12.0.0'} @@ -5494,9 +5188,6 @@ packages: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} - long@4.0.0: - resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} - loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -5747,15 +5438,6 @@ packages: engines: {node: '>=10.5.0'} deprecated: Use your platform's native DOMException instead - node-fetch@2.6.13: - resolution: {integrity: sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -6019,9 +5701,6 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - pino-abstract-transport@2.0.0: - resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} - pino-abstract-transport@3.0.0: resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==} @@ -6036,10 +5715,6 @@ packages: resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==} hasBin: true - pino@9.14.0: - resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==} - hasBin: true - pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} @@ -6172,9 +5847,6 @@ packages: resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} engines: {node: '>=6'} - process-warning@3.0.0: - resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} - process-warning@5.0.0: resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} @@ -6192,10 +5864,6 @@ packages: proper-lockfile@4.1.2: resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - proxy-chain@2.7.1: resolution: {integrity: sha512-LtXu0miohJYrHWJxv8wA6EoGreRcX1hxKb7qlE1pMFH+BXE7bqMvpyhzR/JvR6M5SzYKzyHFpvfmYJrZeMtwAg==} engines: {node: '>=14'} @@ -6294,9 +5962,6 @@ packages: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} @@ -6359,10 +6024,6 @@ packages: restructure@3.0.2: resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} - ret@0.4.3: - resolution: {integrity: sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==} - engines: {node: '>=10'} - retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -6415,9 +6076,6 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} - safe-regex2@3.1.0: - resolution: {integrity: sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==} - safe-stable-stringify@2.5.0: resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} @@ -6448,15 +6106,9 @@ packages: resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} engines: {node: '>= 10.13.0'} - secure-json-parse@2.7.0: - resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} - secure-json-parse@4.1.0: resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} - seedrandom@3.0.5: - resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==} - selderee@0.11.0: resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} @@ -6472,9 +6124,6 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - set-cookie-parser@2.7.2: - resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} - set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -6487,10 +6136,6 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - sharp@0.34.5: resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -6802,9 +6447,6 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - thread-stream@3.1.0: - resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} - thread-stream@4.0.0: resolution: {integrity: sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==} engines: {node: '>=20'} @@ -6878,10 +6520,6 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - toad-cache@3.7.0: - resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} - engines: {node: '>=12'} - token-types@6.1.2: resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} engines: {node: '>=14.16'} @@ -7401,18 +7039,10 @@ packages: yargonaut@1.1.4: resolution: {integrity: sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==} - yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -8438,22 +8068,6 @@ snapshots: '@exodus/bytes@1.12.0': {} - '@fastify/ajv-compiler@3.6.0': - dependencies: - ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) - fast-uri: 2.4.0 - - '@fastify/error@3.4.1': {} - - '@fastify/fast-json-stringify-compiler@4.3.0': - dependencies: - fast-json-stringify: 5.16.1 - - '@fastify/merge-json-schemas@0.1.1': - dependencies: - fast-deep-equal: 3.1.3 - '@formatjs/ecma402-abstract@3.1.1': dependencies: '@formatjs/fast-memoize': 3.1.0 @@ -8499,47 +8113,25 @@ snapshots: '@img/colour@1.0.0': optional: true - '@img/sharp-darwin-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 - optional: true - '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.2.4 optional: true - '@img/sharp-darwin-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 - optional: true - '@img/sharp-darwin-x64@0.34.5': optionalDependencies: '@img/sharp-libvips-darwin-x64': 1.2.4 optional: true - '@img/sharp-libvips-darwin-arm64@1.0.4': - optional: true - '@img/sharp-libvips-darwin-arm64@1.2.4': optional: true - '@img/sharp-libvips-darwin-x64@1.0.4': - optional: true - '@img/sharp-libvips-darwin-x64@1.2.4': optional: true - '@img/sharp-libvips-linux-arm64@1.0.4': - optional: true - '@img/sharp-libvips-linux-arm64@1.2.4': optional: true - '@img/sharp-libvips-linux-arm@1.0.5': - optional: true - '@img/sharp-libvips-linux-arm@1.2.4': optional: true @@ -8549,45 +8141,23 @@ snapshots: '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true - '@img/sharp-libvips-linux-s390x@1.0.4': - optional: true - '@img/sharp-libvips-linux-s390x@1.2.4': optional: true - '@img/sharp-libvips-linux-x64@1.0.4': - optional: true - '@img/sharp-libvips-linux-x64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.4': optional: true - '@img/sharp-linux-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 - optional: true - '@img/sharp-linux-arm64@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-arm64': 1.2.4 optional: true - '@img/sharp-linux-arm@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 - optional: true - '@img/sharp-linux-arm@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-arm': 1.2.4 @@ -8603,51 +8173,26 @@ snapshots: '@img/sharp-libvips-linux-riscv64': 1.2.4 optional: true - '@img/sharp-linux-s390x@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 - optional: true - '@img/sharp-linux-s390x@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-s390x': 1.2.4 optional: true - '@img/sharp-linux-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 - optional: true - '@img/sharp-linux-x64@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-x64': 1.2.4 optional: true - '@img/sharp-linuxmusl-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - optional: true - '@img/sharp-linuxmusl-arm64@0.34.5': optionalDependencies: '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 optional: true - '@img/sharp-linuxmusl-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - optional: true - '@img/sharp-linuxmusl-x64@0.34.5': optionalDependencies: '@img/sharp-libvips-linuxmusl-x64': 1.2.4 optional: true - '@img/sharp-wasm32@0.33.5': - dependencies: - '@emnapi/runtime': 1.8.1 - optional: true - '@img/sharp-wasm32@0.34.5': dependencies: '@emnapi/runtime': 1.8.1 @@ -8656,15 +8201,9 @@ snapshots: '@img/sharp-win32-arm64@0.34.5': optional: true - '@img/sharp-win32-ia32@0.33.5': - optional: true - '@img/sharp-win32-ia32@0.34.5': optional: true - '@img/sharp-win32-x64@0.33.5': - optional: true - '@img/sharp-win32-x64@0.34.5': optional: true @@ -9752,73 +9291,6 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 3.4.19(tsx@4.21.0)(yaml@2.8.2) - '@tensorflow/tfjs-backend-cpu@4.22.0(@tensorflow/tfjs-core@4.22.0)': - dependencies: - '@tensorflow/tfjs-core': 4.22.0 - '@types/seedrandom': 2.4.34 - seedrandom: 3.0.5 - - '@tensorflow/tfjs-backend-wasm@4.22.0(@tensorflow/tfjs-core@4.22.0)': - dependencies: - '@tensorflow/tfjs-backend-cpu': 4.22.0(@tensorflow/tfjs-core@4.22.0) - '@tensorflow/tfjs-core': 4.22.0 - '@types/emscripten': 0.0.34 - - '@tensorflow/tfjs-backend-webgl@4.22.0(@tensorflow/tfjs-core@4.22.0)': - dependencies: - '@tensorflow/tfjs-backend-cpu': 4.22.0(@tensorflow/tfjs-core@4.22.0) - '@tensorflow/tfjs-core': 4.22.0 - '@types/offscreencanvas': 2019.3.0 - '@types/seedrandom': 2.4.34 - seedrandom: 3.0.5 - - '@tensorflow/tfjs-converter@4.22.0(@tensorflow/tfjs-core@4.22.0)': - dependencies: - '@tensorflow/tfjs-core': 4.22.0 - - '@tensorflow/tfjs-core@4.22.0': - dependencies: - '@types/long': 4.0.2 - '@types/offscreencanvas': 2019.7.3 - '@types/seedrandom': 2.4.34 - '@webgpu/types': 0.1.38 - long: 4.0.0 - node-fetch: 2.6.13 - seedrandom: 3.0.5 - transitivePeerDependencies: - - encoding - - '@tensorflow/tfjs-data@4.22.0(@tensorflow/tfjs-core@4.22.0)(seedrandom@3.0.5)': - dependencies: - '@tensorflow/tfjs-core': 4.22.0 - '@types/node-fetch': 2.6.13 - node-fetch: 2.6.13 - seedrandom: 3.0.5 - string_decoder: 1.3.0 - transitivePeerDependencies: - - encoding - - '@tensorflow/tfjs-layers@4.22.0(@tensorflow/tfjs-core@4.22.0)': - dependencies: - '@tensorflow/tfjs-core': 4.22.0 - - '@tensorflow/tfjs@4.22.0(seedrandom@3.0.5)': - dependencies: - '@tensorflow/tfjs-backend-cpu': 4.22.0(@tensorflow/tfjs-core@4.22.0) - '@tensorflow/tfjs-backend-webgl': 4.22.0(@tensorflow/tfjs-core@4.22.0) - '@tensorflow/tfjs-converter': 4.22.0(@tensorflow/tfjs-core@4.22.0) - '@tensorflow/tfjs-core': 4.22.0 - '@tensorflow/tfjs-data': 4.22.0(@tensorflow/tfjs-core@4.22.0)(seedrandom@3.0.5) - '@tensorflow/tfjs-layers': 4.22.0(@tensorflow/tfjs-core@4.22.0) - argparse: 1.0.10 - chalk: 4.1.2 - core-js: 3.29.1 - regenerator-runtime: 0.13.11 - yargs: 16.2.0 - transitivePeerDependencies: - - encoding - - seedrandom - '@testing-library/dom@10.4.1': dependencies: '@babel/code-frame': 7.29.0 @@ -9905,8 +9377,6 @@ snapshots: '@types/deep-eql@4.0.2': {} - '@types/emscripten@0.0.34': {} - '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 @@ -9940,8 +9410,6 @@ snapshots: dependencies: '@types/node': 20.19.33 - '@types/long@4.0.2': {} - '@types/ms@2.1.0': optional: true @@ -9968,10 +9436,6 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/offscreencanvas@2019.3.0': {} - - '@types/offscreencanvas@2019.7.3': {} - '@types/pg-pool@2.0.7': dependencies: '@types/pg': 8.15.6 @@ -9999,8 +9463,6 @@ snapshots: dependencies: '@types/node': 20.19.33 - '@types/seedrandom@2.4.34': {} - '@types/tedious@4.0.14': dependencies: '@types/node': 20.19.33 @@ -10318,8 +9780,6 @@ snapshots: '@vladfrangu/async_event_emitter@2.4.7': {} - '@vladmandic/face-api@1.7.15': {} - '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -10396,8 +9856,6 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - '@webgpu/types@0.1.38': {} - '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} @@ -10408,8 +9866,6 @@ snapshots: abs-svg-path@0.1.1: {} - abstract-logging@2.0.1: {} - acorn-import-attributes@1.9.5(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -10442,10 +9898,6 @@ snapshots: optionalDependencies: ajv: 8.17.1 - ajv-formats@3.0.1(ajv@8.17.1): - optionalDependencies: - ajv: 8.17.1 - ajv-keywords@5.1.0(ajv@8.17.1): dependencies: ajv: 8.17.1 @@ -10606,11 +10058,6 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - avvio@8.4.0: - dependencies: - '@fastify/error': 3.4.1 - fastq: 1.20.1 - axe-core@4.11.1: {} axios@1.13.5: @@ -10743,6 +10190,7 @@ snapshots: dependencies: node-addon-api: 7.1.1 prebuild-install: 7.1.3 + optional: true chai@5.3.3: dependencies: @@ -10810,7 +10258,8 @@ snapshots: dependencies: readdirp: 4.1.2 - chownr@1.1.4: {} + chownr@1.1.4: + optional: true chrome-trace-event@1.0.4: {} @@ -10839,12 +10288,6 @@ snapshots: client-only@0.0.1: {} - cliui@7.0.4: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -10868,11 +10311,6 @@ snapshots: color-name: 1.1.4 simple-swizzle: 0.2.4 - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - colorette@2.0.20: {} combined-stream@1.0.8: @@ -10920,10 +10358,6 @@ snapshots: convert-source-map@2.0.0: {} - cookie@0.7.2: {} - - core-js@3.29.1: {} - cosmiconfig-typescript-loader@6.2.0(@types/node@20.19.33)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3): dependencies: '@types/node': 20.19.33 @@ -11065,10 +10499,12 @@ snapshots: decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 + optional: true deep-eql@5.0.2: {} - deep-extend@0.6.0: {} + deep-extend@0.6.0: + optional: true deep-is@0.1.4: {} @@ -11629,7 +11065,8 @@ snapshots: events@3.3.0: {} - expand-template@2.0.3: {} + expand-template@2.0.3: + optional: true expect-type@1.3.0: {} @@ -11641,12 +11078,8 @@ snapshots: iconv-lite: 0.4.24 tmp: 0.0.33 - fast-content-type-parse@1.1.0: {} - fast-copy@4.0.2: {} - fast-decode-uri-component@1.0.1: {} - fast-deep-equal@2.0.1: {} fast-deep-equal@3.1.3: {} @@ -11669,47 +11102,12 @@ snapshots: fast-json-stable-stringify@2.1.0: {} - fast-json-stringify@5.16.1: - dependencies: - '@fastify/merge-json-schemas': 0.1.1 - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) - fast-deep-equal: 3.1.3 - fast-uri: 2.4.0 - json-schema-ref-resolver: 1.0.1 - rfdc: 1.4.1 - fast-levenshtein@2.0.6: {} - fast-querystring@1.1.2: - dependencies: - fast-decode-uri-component: 1.0.1 - fast-safe-stringify@2.1.1: {} - fast-uri@2.4.0: {} - fast-uri@3.1.0: {} - fastify@4.29.1: - dependencies: - '@fastify/ajv-compiler': 3.6.0 - '@fastify/error': 3.4.1 - '@fastify/fast-json-stringify-compiler': 4.3.0 - abstract-logging: 2.0.1 - avvio: 8.4.0 - fast-content-type-parse: 1.1.0 - fast-json-stringify: 5.16.1 - find-my-way: 8.2.2 - light-my-request: 5.14.0 - pino: 9.14.0 - process-warning: 3.0.0 - proxy-addr: 2.0.7 - rfdc: 1.4.1 - secure-json-parse: 2.7.0 - semver: 7.7.4 - toad-cache: 3.7.0 - fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -11745,12 +11143,6 @@ snapshots: dependencies: to-regex-range: 5.0.1 - find-my-way@8.2.2: - dependencies: - fast-deep-equal: 3.1.3 - fast-querystring: 1.1.2 - safe-regex2: 3.1.0 - find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -11829,8 +11221,6 @@ snapshots: forwarded-parse@2.1.2: {} - forwarded@0.2.0: {} - fraction.js@5.3.4: {} framer-motion@11.18.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4): @@ -11844,7 +11234,8 @@ snapshots: from@0.1.7: {} - fs-constants@1.0.0: {} + fs-constants@1.0.0: + optional: true fs-extra@11.3.3: dependencies: @@ -11935,7 +11326,8 @@ snapshots: meow: 12.1.1 split2: 4.2.0 - github-from-package@0.0.0: {} + github-from-package@0.0.0: + optional: true glob-parent@5.1.2: dependencies: @@ -12209,7 +11601,8 @@ snapshots: inherits@2.0.4: {} - ini@1.3.8: {} + ini@1.3.8: + optional: true ini@4.1.1: {} @@ -12266,8 +11659,6 @@ snapshots: ip-address@10.1.0: {} - ipaddr.js@1.9.1: {} - is-any-array@2.0.1: {} is-array-buffer@3.0.5: @@ -12535,10 +11926,6 @@ snapshots: json-parse-even-better-errors@2.3.1: {} - json-schema-ref-resolver@1.0.1: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} @@ -12591,12 +11978,6 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - light-my-request@5.14.0: - dependencies: - cookie: 0.7.2 - process-warning: 3.0.0 - set-cookie-parser: 2.7.2 - lightningcss-android-arm64@1.30.2: optional: true @@ -12728,8 +12109,6 @@ snapshots: strip-ansi: 7.1.2 wrap-ansi: 9.0.2 - long@4.0.0: {} - loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -12802,7 +12181,8 @@ snapshots: mimic-function@5.0.1: {} - mimic-response@3.1.0: {} + mimic-response@3.1.0: + optional: true mimic-response@4.0.0: {} @@ -12820,7 +12200,8 @@ snapshots: minipass@7.1.2: {} - mkdirp-classic@0.5.3: {} + mkdirp-classic@0.5.3: + optional: true ml-array-max@1.2.4: dependencies: @@ -12881,7 +12262,8 @@ snapshots: nanoid@3.3.11: {} - napi-build-utils@2.0.0: {} + napi-build-utils@2.0.0: + optional: true napi-postinstall@0.3.4: {} @@ -12939,15 +12321,12 @@ snapshots: node-abi@3.87.0: dependencies: semver: 7.7.4 + optional: true node-addon-api@7.1.1: {} node-domexception@1.0.0: {} - node-fetch@2.6.13: - dependencies: - whatwg-url: 5.0.0 - node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 @@ -13208,10 +12587,6 @@ snapshots: pify@4.0.1: {} - pino-abstract-transport@2.0.0: - dependencies: - split2: 4.2.0 - pino-abstract-transport@3.0.0: dependencies: split2: 4.2.0 @@ -13248,20 +12623,6 @@ snapshots: sonic-boom: 4.2.0 thread-stream: 4.0.0 - pino@9.14.0: - dependencies: - '@pinojs/redact': 0.4.0 - atomic-sleep: 1.0.0 - on-exit-leak-free: 2.1.2 - pino-abstract-transport: 2.0.0 - pino-std-serializers: 7.1.0 - process-warning: 5.0.0 - quick-format-unescaped: 4.0.4 - real-require: 0.2.0 - safe-stable-stringify: 2.5.0 - sonic-boom: 4.2.0 - thread-stream: 3.1.0 - pirates@4.0.7: {} pkg-dir@4.2.0: @@ -13369,6 +12730,7 @@ snapshots: simple-get: 4.0.1 tar-fs: 2.1.4 tunnel-agent: 0.6.0 + optional: true prelude-ls@1.2.1: {} @@ -13386,8 +12748,6 @@ snapshots: prismjs@1.29.0: {} - process-warning@3.0.0: {} - process-warning@5.0.0: {} process@0.11.10: @@ -13407,11 +12767,6 @@ snapshots: retry: 0.12.0 signal-exit: 3.0.7 - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - proxy-chain@2.7.1: dependencies: socks: 2.8.7 @@ -13453,6 +12808,7 @@ snapshots: ini: 1.3.8 minimist: 1.2.8 strip-json-comments: 2.0.1 + optional: true react-dom@19.2.4(react@19.2.4): dependencies: @@ -13521,8 +12877,6 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 - regenerator-runtime@0.13.11: {} - regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -13587,8 +12941,6 @@ snapshots: restructure@3.0.2: {} - ret@0.4.3: {} - retry@0.12.0: {} reusify@1.1.0: {} @@ -13663,10 +13015,6 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 - safe-regex2@3.1.0: - dependencies: - ret: 0.4.3 - safe-stable-stringify@2.5.0: {} safer-buffer@2.1.2: {} @@ -13697,12 +13045,8 @@ snapshots: ajv-formats: 2.1.1(ajv@8.17.1) ajv-keywords: 5.1.0(ajv@8.17.1) - secure-json-parse@2.7.0: {} - secure-json-parse@4.1.0: {} - seedrandom@3.0.5: {} - selderee@0.11.0: dependencies: parseley: 0.12.1 @@ -13715,8 +13059,6 @@ snapshots: dependencies: randombytes: 2.1.0 - set-cookie-parser@2.7.2: {} - set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -13739,32 +13081,6 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 - sharp@0.33.5: - dependencies: - color: 4.2.3 - detect-libc: 2.1.2 - semver: 7.7.4 - 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 - sharp@0.34.5: dependencies: '@img/colour': 1.0.0 @@ -13837,13 +13153,15 @@ snapshots: signal-exit@4.1.0: {} - simple-concat@1.0.1: {} + simple-concat@1.0.1: + optional: true simple-get@4.0.1: dependencies: decompress-response: 6.0.0 once: 1.4.0 simple-concat: 1.0.1 + optional: true simple-swizzle@0.2.4: dependencies: @@ -14030,7 +13348,8 @@ snapshots: dependencies: min-indent: 1.0.1 - strip-json-comments@2.0.1: {} + strip-json-comments@2.0.1: + optional: true strip-json-comments@3.1.1: {} @@ -14115,6 +13434,7 @@ snapshots: mkdirp-classic: 0.5.3 pump: 3.0.3 tar-stream: 2.2.0 + optional: true tar-stream@2.2.0: dependencies: @@ -14123,6 +13443,7 @@ snapshots: fs-constants: 1.0.0 inherits: 2.0.4 readable-stream: 3.6.2 + optional: true term-size@2.2.1: {} @@ -14165,10 +13486,6 @@ snapshots: dependencies: any-promise: 1.3.0 - thread-stream@3.1.0: - dependencies: - real-require: 0.2.0 - thread-stream@4.0.0: dependencies: real-require: 0.2.0 @@ -14222,8 +13539,6 @@ snapshots: dependencies: is-number: 7.0.0 - toad-cache@3.7.0: {} - token-types@6.1.2: dependencies: '@borewit/text-codec': 0.2.1 @@ -14307,6 +13622,7 @@ snapshots: tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 + optional: true type-check@0.4.0: dependencies: @@ -14933,20 +14249,8 @@ snapshots: figlet: 1.10.0 parent-require: 1.0.0 - yargs-parser@20.2.9: {} - yargs-parser@21.1.1: {} - yargs@16.2.0: - dependencies: - cliui: 7.0.4 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - yargs@17.7.2: dependencies: cliui: 8.0.1