// @ts-check import { readFileSync, writeFileSync } from 'fs'; const spriteSheets = [ { key: "__SPRITE_SHEET__", path: "./sprites/birb.png" }, { key: "__FEATHER_SPRITE_SHEET__", path: "./sprites/feather.png" }, { key: "__DECORATIONS_SPRITE_SHEET__", path: "./sprites/decorations.png" } ]; const STYLESHEET_PATH = "./stylesheet.css"; const STYLESHEET_KEY = "___STYLESHEET___"; const now = new Date(); const versionDate = `${now.getFullYear()}.${now.getMonth() + 1}.${now.getDate()}`; let buildNumber = 1; // Get build number from manifest.json try { const manifest = JSON.parse(readFileSync('manifest.json', 'utf8')); if (manifest.version) { if (manifest.version.startsWith(versionDate)) { // Same day, increment build number const parts = manifest.version.split('.'); if (parts.length === 4) { buildNumber = parseInt(parts[3], 10) + 1; } } } } catch (e) { console.error("Could not read version from manifest.json"); throw e; } const version = `${versionDate}.${buildNumber}`; // Update manifest.json with new version try { const manifest = JSON.parse(readFileSync('manifest.json', 'utf8')); manifest.version = version; writeFileSync('manifest.json', JSON.stringify(manifest, null, 4), 'utf8'); } catch (e) { console.error("Could not update version in manifest.json"); throw e; } const userScriptHeader = `// ==UserScript== // @name Pocket Bird // @namespace https://idreesinc.com // @version ${version} // @description birb // @author Idrees // @downloadURL https://github.com/IdreesInc/Pocket-Bird/raw/refs/heads/main/dist/birb.user.js // @updateURL https://github.com/IdreesInc/Pocket-Bird/raw/refs/heads/main/dist/birb.user.js // @match *://*/* // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // ==/UserScript== `; let birbJs = readFileSync('birb.js', 'utf8'); // Compile and insert sprite sheets for (const spriteSheet of spriteSheets) { const dataUri = readFileSync(spriteSheet.path, 'base64'); birbJs = birbJs.replaceAll(spriteSheet.key, `data:image/png;base64,${dataUri}`); } // Insert stylesheet const stylesheetContent = readFileSync(STYLESHEET_PATH, 'utf8'); birbJs = birbJs.replace(STYLESHEET_KEY, stylesheetContent); // Build standard javascript file writeFileSync('./dist/birb.js', birbJs); // Build user script const userScript = userScriptHeader + birbJs; writeFileSync('./dist/birb.user.js', userScript);