import { readFileSync, writeFileSync } from 'fs' import { join } from 'path' import * as esbuild from 'esbuild' import { groupBy, mapValues } from 'lodash' import { parseTriple } from './cli/src/parse-triple' const RAW_LIST = readFileSync(join(__dirname, 'triples', 'target-list'), 'utf8') const SUPPORTED_PLATFORM = new Set([ 'darwin', 'ios', 'android', 'win32', 'linux', 'freebsd', ]) const tripleLists = RAW_LIST.trim() .split('\n') .filter((line) => !line.startsWith('wasm') && line.trim().length) .map(parseTriple) .reduce((acc, cur) => { acc[cur.raw] = cur return acc }, {}) const platformArchTriples = mapValues( groupBy( Object.values(tripleLists).filter((k: { platform?: string }) => SUPPORTED_PLATFORM.has(k.platform), ), 'platform', ), (v) => groupBy(v, 'arch'), ) const fileContent = ` module.exports.platformArchTriples = ${JSON.stringify(platformArchTriples)} ` writeFileSync( join(__dirname, 'triples', 'index.js'), esbuild.transformSync(fileContent, { minify: true, }).code, )