// Copyright 2017-2025 @pezkuwi/react-components authors & contributors // SPDX-License-Identifier: Apache-2.0 const fs = require('node:fs'); const path = require('node:path'); const HEADER = `// Copyright 2017-2025 @pezkuwi/react-components authors & contributors // SPDX-License-Identifier: Apache-2.0 // Automatically generated, do not edit /* eslint-disable simple-import-sort/imports */`; const PATH = 'packages/react-components/src/IdentityIcon/RoboHash'; /** * @param {number} index * @returns {string} */ function getCounter (index) { return `000${index}`.slice(-3); } /** * @param {string} dir * @returns {string[]} */ function getFiles (dir) { const genpath = path.join(dir, 'generated'); if (!fs.existsSync(genpath)) { fs.mkdirSync(genpath, { recursive: true }); } const all = fs .readdirSync(dir) .filter((entry) => { if (entry.endsWith('.ts')) { fs.rmSync(path.join(dir, entry), { force: true }); return false; } return !entry.startsWith('.') && entry !== 'generated'; }) .map((entry) => { if (entry.includes('#')) { const newName = entry.replace(/#/g, '-'); fs.renameSync(path.join(dir, entry), path.join(dir, newName)); return newName; } return entry; }) .sort((a, b) => (a.includes('-') && b.includes('-')) ? a.split('-')[1].localeCompare(b.split('-')[1]) : 0 ); for (const f of all) { if (f.endsWith('.png')) { fs.writeFileSync(path.join(dir, `generated/${f}`).replace('.png', '.ts'), `${HEADER}\n\nexport default 'data:image/png;base64,${fs.readFileSync(path.join(dir, f)).toString('base64')}';\n`); } } return all; } function extractBg () { const root = path.join(__dirname, '..', PATH, 'backgrounds'); /** @type {string[]} */ const files = []; getFiles(root).forEach((sub) => { getFiles(path.join(root, sub)).forEach((entry) => files.push(`./${sub}/generated/${entry}`)); }); fs.writeFileSync(path.join(root, 'index.ts'), `${HEADER}\n\n${files.map((file, index) => `import b${getCounter(index)} from '${file.replace('.png', '')}';`).join('\n')}\n\nexport default [${files.map((_, index) => `b${getCounter(index)}`).join(', ')}];\n`); } function extractSets () { const root = path.join(__dirname, '..', PATH, 'sets'); const sets = getFiles(root).map((sub) => getFiles(path.join(root, sub)).map((dir) => getFiles(path.join(root, sub, dir)).map((entry) => `./${sub}/${dir}/generated/${entry}`) ) ); /** @type {string[]} */ const imports = []; let list = '['; sets.forEach((areas, sindex) => { list = `${list}${sindex ? ',' : ''}\n [`; areas.forEach((files, aindex) => { const indexes = files.map((file, findex) => { const index = `s${getCounter(sindex)}${getCounter(aindex)}${getCounter(findex)}`; imports.push(`import ${index} from '${file.replace('.png', '')}';`); return index; }); list = `${list}${aindex ? ',' : ''}\n [${indexes.join(', ')}]`; }); list = `${list}\n ]`; }); list = `${list}\n];`; fs.writeFileSync(path.join(root, 'index.ts'), `${HEADER}\n\n${imports.join('\n')}\n\nexport default ${list}\n`); } extractBg(); extractSets();