UNPKG

scratch-storage

Version:

Load and store project and asset files for Scratch 3.0

61 lines (48 loc) 1.39 kB
const fs = require('fs'); const path = require('path'); const md5 = require('js-md5'); const projects = [ '117504922' ]; const assets = [ '66895930177178ea01d9e610917f8acf.png', '6e8bd9ae68fdb02b7e1e3df656a75635.svg', '7e24c99c1b853e52f8e7f9004416fa34.png', '83c36d806dc92327b9e7049a565c6bff.wav', 'f88bf1935daea28f8ca098462a31dbb0.svg', 'fe5e3566965f9de793beeffce377d054.jpg' ]; const loadSomething = filename => { const fullPath = path.join(__dirname, 'assets', filename); const content = fs.readFileSync(fullPath); return { content, hash: md5(content) }; }; const loadProject = id => { const filename = `${id}.json`; const result = loadSomething(filename); // throw if not a valid JSON string JSON.parse(result.content.toString()); return result; }; const loadAsset = filename => { const result = loadSomething(filename); const expectedHash = filename.split('.', 1)[0]; if (expectedHash !== result.hash) { throw new Error(`Asset has wrong hash: ${filename}`); } return result; }; const knownAssets = Object.assign({}, projects.reduce((bag, id) => { bag[id] = loadProject(id); return bag; }, {}), assets.reduce((bag, filename) => { bag[filename] = loadAsset(filename); return bag; }, {}) ); module.exports = knownAssets;