feat: iphone app
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const crypto = require('crypto');
|
||||
const {execFile} = require('child_process');
|
||||
const root = path.resolve(__dirname, '..');
|
||||
const manifest = JSON.parse(fs.readFileSync(root + '/design/asset-manifest.json'));
|
||||
const extraPath = root + '/design/screenshot-manifest.json';
|
||||
if (fs.existsSync(extraPath)) Object.assign(manifest, JSON.parse(fs.readFileSync(extraPath)));
|
||||
const dir = root + '/assets/figma';
|
||||
fs.mkdirSync(dir, {recursive: true});
|
||||
const assets = Object.entries(manifest); let cursor = 0;
|
||||
const registry = fs.existsSync(root + "/design/asset-files.json") ? JSON.parse(fs.readFileSync(root + "/design/asset-files.json")) : {}; const failures = [];
|
||||
function download(url, file) {return new Promise((resolve, reject) => execFile('/usr/bin/curl', ['--fail', '--location', '--retry', '3', '--silent', '--show-error', '--output', file, url], {maxBuffer: 1024 * 1024}, error => error ? reject(error) : resolve()));}
|
||||
async function worker() {while (cursor < assets.length) {const [id, asset] = assets[cursor++]; if (registry[id] && fs.existsSync(dir + '/' + registry[id])) continue; const tmp = dir + '/' + id.replace(':', '-') + '.tmp';try {await download(asset.url, tmp); const bytes = fs.readFileSync(tmp); if (!bytes.length) throw Error('Empty asset'); const filename = crypto.createHash('sha256').update(bytes).digest('hex').slice(0, 20) + '.' + asset.format; fs.renameSync(tmp, dir + '/' + filename); registry[id] = filename;}catch (error) {failures.push({id, error: String(error)});}}}
|
||||
Promise.all(Array.from({length: 4}, worker)).then(() => {fs.mkdirSync(root + '/src/design', {recursive: true});fs.writeFileSync(root + '/src/design/assets.ts', '// Exact Figma exports, bundled for offline use.\nexport const assets: Record<string, number> = {\n' + Object.entries(registry).map(([id, file]) => JSON.stringify(id) + ': require("../../assets/figma/' + file + '"),').join('\n') + '\n};\n');fs.writeFileSync(root + '/design/asset-files.json', JSON.stringify(registry, null, 2));console.log({downloaded: Object.keys(registry).length, unique: new Set(Object.values(registry)).size, failures});if (failures.length) process.exitCode = 1;});
|
||||
Reference in New Issue
Block a user