UNPKG

tango-ui-cw

Version:

A lightweight ui library with ClayW

83 lines (71 loc) 2.56 kB
#!/usr/bin/env node /** * tango-ui-cw postinstall peer-dependency checker * Per NPM-Summary.md §10.3, warns if required peers are missing. * * Gracefully skips if the dist/ build output doesn't exist yet * (e.g. during `npm install` in the library's own repo before first build). */ import fs from "fs"; import path from "path"; import { fileURLToPath } from "url"; import { createRequire } from "module"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); // If dist/index.js doesn't exist, we're in a pre-build state — skip silently. const distEntry = path.resolve(__dirname, "..", "index.js"); if (!fs.existsSync(distEntry)) { process.exit(0); } const require = createRequire(import.meta.url); const REQUIRED_PEERS = [ { name: "react", range: ">=18", hint: "React 18+ is required." }, { name: "react-dom", range: ">=18", hint: "ReactDOM 18+ is required." }, { name: "next", range: ">=14", hint: "Next.js 14+ is required for SSR/SSG components." }, { name: "tailwind-merge", range: "^3.6.0", hint: "tailwind-merge ^3.6.0 is required for class merging." }, { name: "tailwindcss", range: "^4", hint: "Tailwind CSS v4 is required for utility classes." }, ]; function getVersion(name) { try { const resolved = require.resolve(`${name}/package.json`, { paths: [process.cwd()] }); const pkg = require(resolved); return pkg.version; } catch { return null; } } function satisfies(version, range) { if (!version) return false; const major = parseInt(version.split(".")[0], 10); if (range.startsWith(">=")) { const min = parseInt(range.replace(">=", ""), 10); return major >= min; } if (range.startsWith("^")) { const min = parseInt(range.replace("^", "").split(".")[0], 10); return major >= min; } return true; } let hasMissing = false; for (const peer of REQUIRED_PEERS) { const version = getVersion(peer.name); if (!version) { console.warn( `[tango-ui-cw] ⚠️ Peer dependency "${peer.name}" (${peer.range}) is not installed. ${peer.hint}` ); hasMissing = true; } else if (!satisfies(version, peer.range)) { console.warn( `[tango-ui-cw] ⚠️ Peer dependency "${peer.name}@${version}" does not satisfy "${peer.range}". ${peer.hint}` ); hasMissing = true; } } if (hasMissing) { console.warn( `[tango-ui-cw] Some peer dependencies are missing or incompatible. The library may not work correctly.` ); } else { console.log(`[tango-ui-cw] ✅ All peer dependencies are satisfied.`); }