diff --git a/.gitignore b/.gitignore index 7ac8ea1..bc6239e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ node_modules dist .DS_Store *.log +*.zip diff --git a/manifest.json b/manifest.json index 4dd18d4..268efa0 100644 --- a/manifest.json +++ b/manifest.json @@ -1,6 +1,5 @@ { "manifest_version": 3, - "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4nOxfn7Uh3jqdKvTpngmPIzOsCvbQRamThIRxw6fswMRDflfyx2Bspxc1Aq/lQEm3ataP3GoTRCwz0h3bGJvGBu8B5Uw49AAdR6jwp5ZThAfbkBxRQmtXU8+xduji5OT2KyQKsHOj2oSjg6E05WN1vMNOdS+ehwNNCDkc/MjKBLSOdwwOpkDX0BoeC4uAmFTWFzSl/ObFSl7ViJwZVPVkvPc6F0Fxn3OTZN3uFgnT/alsHVqwojnbfC91N+oxVW/3ha869l23PhvoK68zH8Iobs+vgf8TgQOgL1x5eq9Uakn810xVaNbhJVL2I3072r1qpsAYA5ELCjSBLoi5ypLuwIDAQAB", "name": "OpenScript", "version": "1.0.0", "description": "A lightweight user script manager for modern browsers", @@ -8,6 +7,7 @@ "default_popup": "src/popup.html", "default_icon": { "16": "icons/icon-16.png", + "32": "icons/icon-32.png", "48": "icons/icon-48.png", "128": "icons/icon-128.png" } @@ -25,6 +25,7 @@ ], "icons": { "16": "icons/icon-16.png", + "32": "icons/icon-32.png", "48": "icons/icon-48.png", "128": "icons/icon-128.png" } diff --git a/package.json b/package.json index f33368b..5632e02 100644 --- a/package.json +++ b/package.json @@ -6,12 +6,15 @@ "scripts": { "dev": "vite", "build": "vite build", + "build:icons": "node scripts/generate-icons.js", + "zip": "node scripts/build-zip.js", "test": "node --test" }, "dependencies": { "lucide": "^0.475.0" }, "devDependencies": { + "adm-zip": "^0.5.18", "autoprefixer": "^10.4.20", "postcss": "^8.4.49", "sharp": "^0.33.5", diff --git a/public/icons/logo.png b/public/icons/OpenScript_v1.png similarity index 100% rename from public/icons/logo.png rename to public/icons/OpenScript_v1.png diff --git a/public/icons/OpenScript_v2.png b/public/icons/OpenScript_v2.png new file mode 100644 index 0000000..a2b4064 Binary files /dev/null and b/public/icons/OpenScript_v2.png differ diff --git a/public/icons/README.md b/public/icons/README.md new file mode 100644 index 0000000..03fedfb --- /dev/null +++ b/public/icons/README.md @@ -0,0 +1,5 @@ +# OpenScript Icon Assets + +- `OpenScript_v1.png`: Original monochrome terminal prompt (`> _`) concept. +- `OpenScript_v2.png`: Ocean wave terminal monogram (`>_ O`) master logo introduced for Chrome Web Store release. +- `icon-{16,32,48,128}.png`: Production extension icons generated from v2 master via `npm run build:icons`. diff --git a/public/icons/icon-128.png b/public/icons/icon-128.png index 26999b5..23a731a 100644 Binary files a/public/icons/icon-128.png and b/public/icons/icon-128.png differ diff --git a/public/icons/icon-16.png b/public/icons/icon-16.png index e3a2d80..f3bcadd 100644 Binary files a/public/icons/icon-16.png and b/public/icons/icon-16.png differ diff --git a/public/icons/icon-32.png b/public/icons/icon-32.png new file mode 100644 index 0000000..33c87a5 Binary files /dev/null and b/public/icons/icon-32.png differ diff --git a/public/icons/icon-48.png b/public/icons/icon-48.png index 5e1f541..401898d 100644 Binary files a/public/icons/icon-48.png and b/public/icons/icon-48.png differ diff --git a/scripts/build-zip.js b/scripts/build-zip.js new file mode 100644 index 0000000..1518f91 --- /dev/null +++ b/scripts/build-zip.js @@ -0,0 +1,42 @@ +import { execSync } from 'child_process'; +import fs from 'fs'; +import AdmZip from 'adm-zip'; + +console.log('Building OpenScript extension...'); +fs.rmSync('dist', { recursive: true, force: true }); +execSync('npx vite build', { stdio: 'inherit' }); + +// Remove unneeded master images from dist package +['dist/icons/OpenScript_v1.png', 'dist/icons/OpenScript_v2.png', 'dist/icons/logo.png'].forEach(f => { + if (fs.existsSync(f)) fs.unlinkSync(f); +}); + +// Verify required files +const manifest = JSON.parse(fs.readFileSync('dist/manifest.json', 'utf8')); +const required = [ + 'dist/manifest.json', + `dist/${manifest.action?.default_popup || 'src/popup.html'}`, + `dist/${manifest.background?.service_worker || 'src/background.js'}`, + 'dist/icons/icon-16.png', + 'dist/icons/icon-32.png', + 'dist/icons/icon-48.png', + 'dist/icons/icon-128.png' +]; + +for (const path of required) { + if (!fs.existsSync(path)) throw new Error(`Missing required build file: ${path}`); +} + +// Package into openscript.zip +const zip = new AdmZip(); +zip.addLocalFolder('dist'); +zip.writeZip('openscript.zip'); + +const stat = fs.statSync('openscript.zip'); +console.log(`\nāœ“ Successfully created openscript.zip (${(stat.size / 1024).toFixed(1)} KB)`); +console.log('Manifest ready:', { + name: manifest.name, + version: manifest.version, + manifest_version: manifest.manifest_version, + icons: manifest.icons +}); diff --git a/scripts/generate-icons.js b/scripts/generate-icons.js new file mode 100644 index 0000000..53fc75d --- /dev/null +++ b/scripts/generate-icons.js @@ -0,0 +1,13 @@ +import sharp from 'sharp'; +import fs from 'fs'; + +const src = 'public/icons/OpenScript_v2.png'; +const sizes = [16, 32, 48, 128]; + +for (const s of sizes) { + await sharp(src) + .resize(s, s, { fit: 'contain' }) + .png() + .toFile(`public/icons/icon-${s}.png`); + console.log(`āœ“ Generated icon-${s}.png`); +}