39 lines
1.5 KiB
JavaScript
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');
|
|
})();
|