diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/.trae/skills/html2image/SKILL.md b/.trae/skills/html2image/SKILL.md index ca58045..4395c4b 100644 --- a/.trae/skills/html2image/SKILL.md +++ b/.trae/skills/html2image/SKILL.md @@ -1,5 +1,5 @@ --- -name: 设计商品详情 +name: 商品详情设计 description: "你是一个电商平台的商品详情设计师,负责设计商品的详情页,包括配置清单、商品实拍图、商品卖点、功能描述等。 --- ### 工作职责: diff --git a/AGENTS.md b/AGENTS.md index da90367..503ac55 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -38,7 +38,4 @@ - 使用一拖三亚克力机箱 - 可选无线网卡 - - - - +## 商品详情页设计原则 diff --git a/check-image-info.js b/check-image-info.js new file mode 100644 index 0000000..24f70e9 --- /dev/null +++ b/check-image-info.js @@ -0,0 +1,27 @@ +const sharp = require('sharp'); +const path = require('path'); +const fs = require('fs'); + +async function checkImageInfo() { + const imageDir = path.join(__dirname, '产品', '飞牛 NAS', 'fyd-亚克力机箱 - 单', '详情', 'image'); + + const imageFiles = fs.readdirSync(imageDir).filter(file => file.endsWith('.jpg')); + + console.log('📸 图片信息检查\n'); + + for (const imageFile of imageFiles) { + const imagePath = path.join(imageDir, imageFile); + const metadata = await sharp(imagePath).metadata(); + + console.log(`${imageFile}:`); + console.log(` 宽度: ${metadata.width}px`); + console.log(` 高度: ${metadata.height}px`); + console.log(` 格式: ${metadata.format}`); + console.log(''); + } +} + +checkImageInfo().catch(error => { + console.error('💥 检查过程出错:', error); + process.exit(1); +}); diff --git a/convert-html-to-png.js b/convert-html-to-png.js new file mode 100644 index 0000000..19bffb2 --- /dev/null +++ b/convert-html-to-png.js @@ -0,0 +1,58 @@ +const puppeteer = require('puppeteer'); +const path = require('path'); +const fs = require('fs'); + +async function convertHtmlToPng() { + console.log('🚀 启动 HTML 转 PNG 转换工具...\n'); + + const browser = await puppeteer.launch({ + headless: 'new', + args: ['--no-sandbox', '--disable-setuid-sandbox'] + }); + + const page = await browser.newPage(); + + await page.setViewport({ width: 1000, height: 1000 }); + + const detailDir = path.join(__dirname, '产品', '飞牛 NAS', 'fyd-亚克力机箱 - 单', '详情'); + + const htmlFiles = fs.readdirSync(detailDir) + .filter(file => file.endsWith('.html') && file.includes('亚克力机箱 - 单')); + + console.log(`📁 找到 ${htmlFiles.length} 个 HTML 文件需要转换\n`); + + for (const htmlFile of htmlFiles) { + try { + const htmlPath = path.join(detailDir, htmlFile); + const pngFile = htmlFile.replace('.html', '.png'); + const pngPath = path.join(detailDir, pngFile); + + console.log(`📄 正在转换: ${htmlFile}`); + + const fileUrl = `file:///${htmlPath.replace(/\\/g, '/')}`; + await page.goto(fileUrl, { + waitUntil: 'networkidle0', + timeout: 10000 + }); + + await page.screenshot({ + path: pngPath, + fullPage: false, + type: 'png' + }); + + console.log(`✅ 已生成: ${pngFile}\n`); + } catch (error) { + console.error(`❌ 转换失败 ${htmlFile}: ${error.message}\n`); + } + } + + await browser.close(); + + console.log('✨ 所有转换任务已完成!'); +} + +convertHtmlToPng().catch(error => { + console.error('💥 转换过程出错:', error); + process.exit(1); +}); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..aeb08d3 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1666 @@ +{ + "name": "membank", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "membank", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "puppeteer": "^24.40.0", + "sharp": "^0.34.5" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", + "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@puppeteer/browsers": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.13.0.tgz", + "integrity": "sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.3", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.4", + "tar-fs": "^3.1.1", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", + "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", + "license": "MIT", + "optional": true, + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/b4a": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.0.tgz", + "integrity": "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==", + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, + "node_modules/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.6.0.tgz", + "integrity": "sha512-2YkS7NuiJceSEbyEOdSNLE9tsGd+f4+f7C+Nik/MCk27SYdwIMPT/yRKvg++FZhQXgk0KWJKJyXX9RhVV0RGqA==", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.8.7", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.8.7.tgz", + "integrity": "sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w==", + "license": "Apache-2.0", + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "license": "Apache-2.0", + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.12.0.tgz", + "integrity": "sha512-w28i8lkBgREV3rPXGbgK+BO66q+ZpKqRWrZLiCdmmUlLPrQ45CzkvRhN+7lnv00Gpi2zy5naRxnUFAxCECDm9g==", + "license": "Apache-2.0", + "dependencies": { + "streamx": "^2.25.0", + "teex": "^1.0.1" + }, + "peerDependencies": { + "bare-abort-controller": "*", + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + }, + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.0.tgz", + "integrity": "sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==", + "license": "Apache-2.0", + "dependencies": { + "bare-path": "^3.0.0" + } + }, + "node_modules/basic-ftp": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.0.tgz", + "integrity": "sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chromium-bidi": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-14.0.0.tgz", + "integrity": "sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==", + "license": "Apache-2.0", + "dependencies": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1581282", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1581282.tgz", + "integrity": "sha512-nv7iKtNZQshSW2hKzYNr46nM/Cfh5SEvE2oV0/SEGgc9XupIY5ggf84Cz8eJIkBce7S3bmTAauFD6aysMpnqsQ==", + "license": "BSD-3-Clause" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT" + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/puppeteer": { + "version": "24.40.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.40.0.tgz", + "integrity": "sha512-IxQbDq93XHVVLWHrAkFP7F7iHvb9o0mgfsSIMlhHb+JM+JjM1V4v4MNSQfcRWJopx9dsNOr9adYv0U5fm9BJBQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.13.0", + "chromium-bidi": "14.0.0", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1581282", + "puppeteer-core": "24.40.0", + "typed-query-selector": "^2.12.1" + }, + "bin": { + "puppeteer": "lib/cjs/puppeteer/node/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/puppeteer-core": { + "version": "24.40.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.40.0.tgz", + "integrity": "sha512-MWL3XbUCfVgGR0gRsidzT6oKJT2QydPLhMITU6HoVWiiv4gkb6gJi3pcdAa8q4HwjBTbqISOWVP4aJiiyUJvag==", + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.13.0", + "chromium-bidi": "14.0.0", + "debug": "^4.4.3", + "devtools-protocol": "0.0.1581282", + "typed-query-selector": "^2.12.1", + "webdriver-bidi-protocol": "0.4.1", + "ws": "^8.19.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/streamx": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.25.0.tgz", + "integrity": "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==", + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar-fs": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.2.tgz", + "integrity": "sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } + }, + "node_modules/tar-stream": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.8.tgz", + "integrity": "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==", + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "bare-fs": "^4.5.5", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + } + }, + "node_modules/text-decoder": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/typed-query-selector": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.1.tgz", + "integrity": "sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "license": "MIT", + "optional": true + }, + "node_modules/webdriver-bidi-protocol": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.1.tgz", + "integrity": "sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==", + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..19e797c --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "membank", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git@gitee.com:xiongmaojames/membank.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "puppeteer": "^24.40.0", + "sharp": "^0.34.5" + } +} diff --git a/remove-watermark.js b/remove-watermark.js new file mode 100644 index 0000000..145d160 --- /dev/null +++ b/remove-watermark.js @@ -0,0 +1,51 @@ +const sharp = require('sharp'); +const path = require('path'); +const fs = require('fs'); + +const CROP_BOTTOM_HEIGHT = 300; + +async function removeWatermark() { + console.log('🖼️ 开始裁剪图片水印...\n'); + + const imageDir = path.join(__dirname, '产品', '飞牛 NAS', 'fyd-亚克力机箱 - 单', '详情', 'image'); + + const backupDir = path.join(imageDir, 'backup'); + + const imageFiles = fs.readdirSync(backupDir).filter(file => file.endsWith('.jpg')); + + console.log(`📸 找到 ${imageFiles.length} 张图片需要处理\n`); + console.log(`✂️ 裁剪设置: 从底部裁剪 ${CROP_BOTTOM_HEIGHT}px\n`); + + for (const imageFile of imageFiles) { + try { + const backupPath = path.join(backupDir, imageFile); + const imagePath = path.join(imageDir, imageFile); + + console.log(`📄 正在处理: ${imageFile}`); + + const metadata = await sharp(backupPath).metadata(); + + const newHeight = metadata.height - CROP_BOTTOM_HEIGHT; + + await sharp(backupPath) + .extract({ + left: 0, + top: 0, + width: metadata.width, + height: newHeight + }) + .toFile(imagePath); + + console.log(` ✅ 已裁剪: ${metadata.width}x${metadata.height} -> ${metadata.width}x${newHeight}\n`); + } catch (error) { + console.error(` ❌ 处理失败 ${imageFile}: ${error.message}\n`); + } + } + + console.log('✨ 所有图片处理完成!'); +} + +removeWatermark().catch(error => { + console.error('💥 处理过程出错:', error); + process.exit(1); +}); diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-AMD-A4-2G-16G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-AMD-A4-2G-16G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-AMD-A4-2G-16G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-AMD-A4-2G-16G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-AMD-A4-2G-32G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-AMD-A4-2G-32G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-AMD-A4-2G-32G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-AMD-A4-2G-32G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-AMD-A4-4G-128G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-AMD-A4-4G-128G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-AMD-A4-4G-128G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-AMD-A4-4G-128G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-AMD-A4-4G-64G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-AMD-A4-4G-64G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-AMD-A4-4G-64G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-AMD-A4-4G-64G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-J1900-2G-16G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-J1900-2G-16G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-J1900-2G-16G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-J1900-2G-16G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-J1900-2G-32G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-J1900-2G-32G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-J1900-2G-32G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-J1900-2G-32G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-J1900-4G-128G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-J1900-4G-128G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-J1900-4G-128G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-J1900-4G-128G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-J1900-4G-64G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-J1900-4G-64G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-J1900-4G-64G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-J1900-4G-64G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-J3160-2G-16G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-J3160-2G-16G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-J3160-2G-16G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-J3160-2G-16G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-J3160-2G-32G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-J3160-2G-32G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-J3160-2G-32G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-J3160-2G-32G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-J3160-4G-128G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-J3160-4G-128G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-J3160-4G-128G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-J3160-4G-128G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-J3160-4G-64G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-J3160-4G-64G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-J3160-4G-64G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-J3160-4G-64G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-N2840-2G-16G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-N2840-2G-16G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-N2840-2G-16G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-N2840-2G-16G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-N2840-2G-32G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-N2840-2G-32G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-N2840-2G-32G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-N2840-2G-32G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-N2840-4G-128G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-N2840-4G-128G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-N2840-4G-128G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-N2840-4G-128G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-N2840-4G-64G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-N2840-4G-64G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-N2840-4G-64G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-N2840-4G-64G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-N2930-2G-16G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-N2930-2G-16G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-N2930-2G-16G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-N2930-2G-16G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-N2930-2G-32G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-N2930-2G-32G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-N2930-2G-32G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-N2930-2G-32G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-N2930-4G-128G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-N2930-4G-128G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-N2930-4G-128G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-N2930-4G-128G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-N2930-4G-64G.md b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-N2930-4G-64G.md similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/sku/亚克力-单-N2930-4G-64G.md rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/sku/亚克力-单-N2930-4G-64G.md diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/侧面.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/侧面.jpg new file mode 100644 index 0000000..e1ebef3 Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/侧面.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/俯视图.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/俯视图.jpg new file mode 100644 index 0000000..f296e8b Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/俯视图.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/包装.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/包装.jpg new file mode 100644 index 0000000..0d25645 Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/包装.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/包装1.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/包装1.jpg new file mode 100644 index 0000000..a2b6be9 Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/包装1.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/包装2.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/包装2.jpg new file mode 100644 index 0000000..6aeb3cb Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/包装2.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/包装3.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/包装3.jpg new file mode 100644 index 0000000..ccc9083 Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/包装3.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/包装5.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/包装5.jpg new file mode 100644 index 0000000..e06dfc5 Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/包装5.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/底面.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/底面.jpg new file mode 100644 index 0000000..5082e09 Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/底面.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/接口.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/接口.jpg new file mode 100644 index 0000000..ebbf648 Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/接口.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/正面.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/正面.jpg new file mode 100644 index 0000000..282e2f1 Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/正面.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/竖放.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/竖放.jpg new file mode 100644 index 0000000..18f053a Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/竖放.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/配件清单.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/配件清单.jpg new file mode 100644 index 0000000..efed7da Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/backup/配件清单.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/侧面.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/侧面.jpg new file mode 100644 index 0000000..3cdee81 Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/侧面.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/俯视图.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/俯视图.jpg new file mode 100644 index 0000000..dce1a1b Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/俯视图.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/包装.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/包装.jpg new file mode 100644 index 0000000..ebb7ebe Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/包装.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/包装1.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/包装1.jpg new file mode 100644 index 0000000..a54671c Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/包装1.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/包装2.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/包装2.jpg new file mode 100644 index 0000000..c1b2a50 Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/包装2.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/包装3.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/包装3.jpg new file mode 100644 index 0000000..b0a010e Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/包装3.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/包装5.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/包装5.jpg new file mode 100644 index 0000000..5f8508e Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/包装5.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/底面.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/底面.jpg new file mode 100644 index 0000000..7ae943e Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/底面.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/接口.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/接口.jpg new file mode 100644 index 0000000..e7fdffb Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/接口.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/正面.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/正面.jpg new file mode 100644 index 0000000..d8a7a19 Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/正面.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/竖放.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/竖放.jpg new file mode 100644 index 0000000..632d011 Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/竖放.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/配件清单.jpg b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/配件清单.jpg new file mode 100644 index 0000000..4b8badc Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/image/配件清单.jpg differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_包装展示.html b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_包装展示.html new file mode 100644 index 0000000..f968644 --- /dev/null +++ b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_包装展示.html @@ -0,0 +1,97 @@ + + + + + + 包装展示 - 亚克力机箱-单 + + + +
+
包装展示
+ +
+
+ 包装展示 +
包装展示
+
+
+ 包装细节 +
包装细节
+
+
+ 泡沫保护 +
泡沫保护
+
+
+ 配件包装 +
配件包装
+
+
+ 成品包装 +
成品包装
+
+
+ 配件清单 +
配件清单
+
+
+
+ + diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_包装展示.png b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_包装展示.png new file mode 100644 index 0000000..6befb00 Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_包装展示.png differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_商品实拍图.html b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_商品实拍图.html similarity index 60% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_商品实拍图.html rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_商品实拍图.html index d70ec90..b62fb6d 100644 --- a/产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_商品实拍图.html +++ b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_商品实拍图.html @@ -3,7 +3,7 @@ - 商品实拍图 - 亚克力机箱 + 商品实拍图 - 亚克力机箱-单
商品实拍图
- +
-
📷
-
透明机箱正面
+ 正面视图 +
正面视图
-
📷
-
透明机箱侧面
+ 侧面视图 +
侧面视图
-
📷
-
内部结构展示
+ 俯视图 +
俯视图
-
📷
-
透明效果展示
+ 底面视图 +
底面视图
+
+
+ 接口细节 +
接口细节
+
+
+ 竖放展示 +
竖放展示
- \ No newline at end of file + diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_商品实拍图.png b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_商品实拍图.png new file mode 100644 index 0000000..e18b567 Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_商品实拍图.png differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_配件清单.html b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_配件清单.html new file mode 100644 index 0000000..6ac0331 --- /dev/null +++ b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_配件清单.html @@ -0,0 +1,107 @@ + + + + + + 配件清单 - 亚克力机箱-单 + + + +
+
配件清单
+ +
+
+ 配件清单 +
+ +
+
📋 标准配置清单
+
亚克力机箱 - 单 SATA 口 × 1
+
60W 电源适配器 × 1
+
SATA 数据线 × 1
+
硬盘固定螺丝 × 4
+
机箱脚垫 × 4
+
主板固定铜柱 × 若干
+
使用说明书 × 1
+
+
+
+ + diff --git a/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_配件清单.png b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_配件清单.png new file mode 100644 index 0000000..d8bba02 Binary files /dev/null and b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱 - 单_配件清单.png differ diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_使用场景.html b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_使用场景.html similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_使用场景.html rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_使用场景.html diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_使用场景.png b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_使用场景.png similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_使用场景.png rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_使用场景.png diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_功能描述.html b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_功能描述.html similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_功能描述.html rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_功能描述.html diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_功能描述.png b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_功能描述.png similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_功能描述.png rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_功能描述.png diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_商品卖点.html b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_商品卖点.html similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_商品卖点.html rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_商品卖点.html diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_商品卖点.png b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_商品卖点.png similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_商品卖点.png rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_商品卖点.png diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_商品实拍图.png b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_商品实拍图.png similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_商品实拍图.png rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_商品实拍图.png diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_配置清单-1.html b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_配置清单-1.html similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_配置清单-1.html rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_配置清单-1.html diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_配置清单-1.png b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_配置清单-1.png similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_配置清单-1.png rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_配置清单-1.png diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_配置清单-2.html b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_配置清单-2.html similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_配置清单-2.html rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_配置清单-2.html diff --git a/产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_配置清单-2.png b/产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_配置清单-2.png similarity index 100% rename from 产品/飞牛 NAS/fyd-亚克力机箱-单/详情/亚克力机箱-单_配置清单-2.png rename to 产品/飞牛 NAS/fyd-亚克力机箱 - 单/详情/亚克力机箱-单_配置清单-2.png