Files
drawlogo/_probe4.js
T

39 lines
1.5 KiB
JavaScript

/* 用 jsDelivr API 找 24 坐标系图标库的 sprite 文件 */
const https = require('https');
function fetch(url) {
return new Promise((resolve, reject) => {
const req = https.get(url, { timeout: 15000 }, (res) => {
if (res.statusCode !== 200) { res.resume(); return reject(new Error(res.statusCode + ' ' + url)); }
const chunks = [];
res.on('data', c => chunks.push(c));
res.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
});
req.on('error', reject);
req.on('timeout', () => req.destroy(new Error('timeout')));
});
}
async function tree(pkg) {
try {
const j = JSON.parse(await fetch(`https://data.jsdelivr.com/v1/packages/npm/${pkg}`));
const files = j.files || [];
const svgs = [];
(function walk(list, prefix) {
for (const f of list) {
if (f.type === 'directory') walk(f.files || [], prefix + f.name + '/');
else if (/\.svg$/.test(f.name)) svgs.push(prefix + f.name);
}
})(files, '');
const sprite = svgs.filter(s => /sprite|symbols/i.test(s));
console.log(`\n[${pkg}] 总svg文件 ${svgs.length} 个; sprite/symbols 候选:`);
console.log(' ', sprite.slice(0, 8).join('\n ') || '(无)');
console.log(' 路径示例:', svgs.slice(0, 3).join(', '));
} catch (e) {
console.log(`[${pkg}] FAIL ${e.message}`);
}
}
(async () => {
await tree('remixicon@4.5.0');
await tree('@phosphor-icons/core@2.1.7');
await tree('@material-design-icons/svg@0.14.13');
})();