import { readFileSync } from 'node:fs'; import path from 'node:path'; import { listFixtures, loadFixture } from '@rareindex/connectors/testing'; import { localMeta } from '../_lib/local-meta.js'; const root = '/Users/simon-pierreboucher/Desktop/Projets/apps-web/rareindex/connectors'; const MODULES: Record = { mycomicshop: 'scrapfly/mycomicshop', 'entertainment-earth': 'scrapfly/entertainment-earth', 'miniature-market': 'api/miniature-market', videogametrader: 'api/videogametrader', 'mattel-creations': 'api/mattel-creations', comiclink: 'scrapfly/comiclink', gcd: 'api/gcd' }; for (const id of process.argv.slice(2)) { const meta = localMeta(JSON.parse(readFileSync(path.join(root, MODULES[id]!, 'meta.json'), 'utf8'))); const mod = await import(path.join(root, MODULES[id]!, 'index.ts')); const c = mod.default(meta); for (const name of listFixtures(id)) { const out = await c.normalize(loadFixture(id, name).raw); console.log(`\n=== ${id}/${name}: ${out.length} records`); for (const r of out.slice(0, Number(process.env.N ?? 3))) { const { attributes, grade, condition, ...rest } = r as any; const { metadata, identifiers, ...a } = attributes ?? {}; const compact = Object.fromEntries(Object.entries({ ...rest, ...Object.fromEntries(Object.entries(a).filter(([, v]) => v !== null)), identifiers, grade, condition, metadata }).filter(([k]) => !['connectorId', 'sourceId', 'parserVersion', 'observedAt', 'imageUrls', 'description'].includes(k))); console.log(JSON.stringify(compact)); } } }