{"_id":"@asd14/posix-utils","_rev":"4-413fa3871a0c2475590ec736d683ab1e","name":"@asd14/posix-utils","dist-tags":{"latest":"1.3.0"},"versions":{"1.0.0":{"name":"@asd14/posix-utils","version":"1.0.0","keywords":["posix","shell","utils","utilities","cross-platform","git","logging","cli"],"license":"MIT","_id":"@asd14/posix-utils@1.0.0","maintainers":[{"name":"andreid","email":"andrei.dumitrescu@pm.me"}],"homepage":"https://github.com/asd-xiv/posix-utils#readme","bugs":{"url":"https://github.com/asd-xiv/posix-utils/issues"},"bin":{"pu":"src/pu"},"dist":{"shasum":"a45ccf8202cd57067ac5504bc7d85e7e7a291d91","tarball":"https://registry.npmjs.org/@asd14/posix-utils/-/posix-utils-1.0.0.tgz","fileCount":5,"integrity":"sha512-XdYuv5yXHu2uTRJTndlGKJ5JhfKcUypElQDAOLvZt6Jtar+PP4NURsVhl7MkE1Vjlytb7QV/uNs2xnVlHeEZTw==","signatures":[{"sig":"MEQCICSEQIDifqXav2aMpP6YghGNraO7V62NfERgxXTXAZW4AiAd4xrsaic7RZ+NwngufWa4Niab9P/vp2Da466Tf+zVMA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9316},"$schema":"https://json.schemastore.org/package.json","engines":{"node":">=20.0.0"},"scripts":{"lint":"shellcheck src/*","format":"shfmt --posix --indent 2 --case-indent --simplify --write src/*","prepare":"git config --local core.hooksPath .githook","----UTIL":"","----CODE-ANALYSIS":""},"_npmUser":{"name":"andreid","email":"andrei.dumitrescu@pm.me"},"repository":{"url":"git+https://github.com/asd-xiv/posix-utils.git","type":"git"},"_npmVersion":"10.9.3","description":"Cross-platform POSIX utilities for development workflows.","directories":{},"sideEffects":false,"_nodeVersion":"22.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@commitlint/cli":"^19.8.1","semantic-release":"^24.2.7","@semantic-release/git":"^10.0.1","@commitlint/config-conventional":"^19.8.1","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/posix-utils_1.0.0_1757696017136_0.7862088466867758","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@asd14/posix-utils","version":"1.1.0","keywords":["posix","shell","utils","utilities","cross-platform","git","logging","cli"],"license":"MIT","_id":"@asd14/posix-utils@1.1.0","maintainers":[{"name":"andreid","email":"andrei.dumitrescu@pm.me"}],"homepage":"https://github.com/asd-xiv/posix-utils#readme","bugs":{"url":"https://github.com/asd-xiv/posix-utils/issues"},"bin":{"pu":"src/pu"},"dist":{"shasum":"6ac8ec5108f03013ca47354cb2b4a5e1c31166ba","tarball":"https://registry.npmjs.org/@asd14/posix-utils/-/posix-utils-1.1.0.tgz","fileCount":12,"integrity":"sha512-DJQooee+l5D/wJSlmwe06c0/OLrkMNMYeQRu/jwnsUvMOTrbJ2A/sPVIiBi/QEAmaA788ufj3aeCnpo2Nlcsuw==","signatures":[{"sig":"MEUCIQCh5aSJUF7/IMLBbWIt2dAmkCKNgx+by5XfZnBhhhz+ygIgKhHOtMUrxUJJJ2s5ACoKJZy4JtBrvTPlSpf9xD+pJ4U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27632},"$schema":"https://json.schemastore.org/package.json","engines":{"node":">=20.0.0"},"gitHead":"7f6c0c3c1c1e3eeb0272729dbb9e6a49f7cf1e10","scripts":{"lint":"find src -type f ! -name '*.1' -exec shellcheck {} +","format":"shfmt --posix --indent 2 --case-indent --simplify --write src/*","prepare":"git config --local core.hooksPath .githook","----UTIL":"","----CODE-ANALYSIS":""},"_npmUser":{"name":"andreid","email":"andrei.dumitrescu@pm.me"},"repository":{"url":"git+https://github.com/asd-xiv/posix-utils.git","type":"git"},"_npmVersion":"10.9.3","description":"Cross-platform POSIX utilities for development workflows.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@commitlint/cli":"^19.8.1","semantic-release":"^24.2.7","@semantic-release/git":"^10.0.1","@commitlint/config-conventional":"^19.8.1","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/posix-utils_1.1.0_1757953125369_0.2216749336766941","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@asd14/posix-utils","version":"1.2.0","keywords":["posix","shell","utils","utilities","cross-platform","git","logging","cli"],"license":"MIT","_id":"@asd14/posix-utils@1.2.0","maintainers":[{"name":"andreid","email":"andrei.dumitrescu@pm.me"}],"homepage":"https://github.com/asd-xiv/posix-utils#readme","bugs":{"url":"https://github.com/asd-xiv/posix-utils/issues"},"bin":{"pu":"src/pu"},"dist":{"shasum":"bca4941fc961c18b860902627a24391577567993","tarball":"https://registry.npmjs.org/@asd14/posix-utils/-/posix-utils-1.2.0.tgz","fileCount":14,"integrity":"sha512-SLmw8pjfMBJKiEptfBa+87WvzTymASj5hwSMxBi1sOfJTG7aBHNjUVuvnLgQk55pseVzYlPuA82PihTQC7ZerA==","signatures":[{"sig":"MEUCIQDgGznkfwLcRNHcSOF7nRgsJ/ZqjxgyuPdRrzTUPDjraAIgbJolRlx5txYIRjh2O/EIUDiigrIwVUEYl9uptVqul+w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37470},"$schema":"https://json.schemastore.org/package.json","engines":{"node":">=20.0.0"},"gitHead":"ccb6b7b2b9b15e700c2b717fedf12ab0a09214b1","scripts":{"lint":"find src -type f ! -name '*.1' -exec shellcheck {} +","format":"find src -type f ! -name '*.1' -exec shfmt --posix --indent 2 --case-indent --simplify --write {} +","prepare":"git config --local core.hooksPath .githook","----UTIL":"","----CODE-ANALYSIS":""},"_npmUser":{"name":"andreid","email":"andrei.dumitrescu@pm.me"},"repository":{"url":"git+https://github.com/asd-xiv/posix-utils.git","type":"git"},"_npmVersion":"10.9.3","description":"Cross-platform POSIX utilities for development workflows.","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@commitlint/cli":"^19.8.1","semantic-release":"^24.2.7","@semantic-release/git":"^10.0.1","@commitlint/config-conventional":"^19.8.1","conventional-changelog-conventionalcommits":"^9.1.0"},"_npmOperationalInternal":{"tmp":"tmp/posix-utils_1.2.0_1758016945663_0.03783028797123689","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"$schema":"https://json.schemastore.org/package.json","name":"@asd14/posix-utils","version":"1.3.0","description":"Cross-platform POSIX utilities for development workflows.","sideEffects":false,"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/asd-xiv/posix-utils.git"},"keywords":["posix","shell","utils","utilities","cross-platform","git","logging","cli"],"bin":{"pu":"src/pu"},"scripts":{"----UTIL":"","prepare":"git config --local core.hooksPath .githook","format":"find src -type f ! -name '*.1' -exec shfmt --posix --indent 2 --case-indent --simplify --write {} +","----CODE-ANALYSIS":"","lint":"find src -type f ! -name '*.1' -exec shellcheck {} +"},"devDependencies":{"@commitlint/cli":"^19.8.1","@commitlint/config-conventional":"^19.8.1","@semantic-release/git":"^10.0.1","conventional-changelog-conventionalcommits":"^9.1.0","semantic-release":"^24.2.7"},"engines":{"node":">=20.0.0"},"license":"MIT","_id":"@asd14/posix-utils@1.3.0","gitHead":"f0b1b782a127cdbd130cbd81a6583ffa349c5e83","bugs":{"url":"https://github.com/asd-xiv/posix-utils/issues"},"homepage":"https://github.com/asd-xiv/posix-utils#readme","_nodeVersion":"20.19.5","_npmVersion":"10.9.3","dist":{"integrity":"sha512-SYnsmYc0kPcMoYw+uJpLLi4Vbh3bwV69Y47ji3jOYGKPMMCSTdaJfCz35cYd8JPD44yCtC3lkJ6+MIxzI6+GAg==","shasum":"6a64a7a2b7b0a119ae7c19efd3579ad209a91268","tarball":"https://registry.npmjs.org/@asd14/posix-utils/-/posix-utils-1.3.0.tgz","fileCount":10,"unpackedSize":30680,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCVJx9Grrhh2Z2209M7RQ1aEq075zH7aeYdccC/jr1ubgIhAIDfwKWr1Ysgoty1rmWYcUZqfuxEt4V7FRcBsRFvY1je"}]},"_npmUser":{"name":"andreid","email":"andrei.dumitrescu@pm.me"},"directories":{},"maintainers":[{"name":"andreid","email":"andrei.dumitrescu@pm.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/posix-utils_1.3.0_1759357915264_0.6739066773895199"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-12T16:53:37.080Z","modified":"2025-10-01T22:31:55.663Z","1.0.0":"2025-09-12T16:53:37.325Z","1.1.0":"2025-09-15T16:18:45.540Z","1.2.0":"2025-09-16T10:02:25.829Z","1.3.0":"2025-10-01T22:31:55.456Z"},"bugs":{"url":"https://github.com/asd-xiv/posix-utils/issues"},"license":"MIT","homepage":"https://github.com/asd-xiv/posix-utils#readme","keywords":["posix","shell","utils","utilities","cross-platform","git","logging","cli"],"repository":{"type":"git","url":"git+https://github.com/asd-xiv/posix-utils.git"},"description":"Cross-platform POSIX utilities for development workflows.","maintainers":[{"name":"andreid","email":"andrei.dumitrescu@pm.me"}],"readme":"[![Release](https://github.com/asd-xiv/posix-utils/actions/workflows/release.yml/badge.svg?branch=main)](https://github.com/asd-xiv/posix-utils/actions/workflows/release.yml)\n[![npm version](https://img.shields.io/npm/v/@asd14/posix-utils.svg)](https://www.npmjs.com/package/@asd14/posix-utils)\n\n# PU, short for Posix Utils\n\n> Cross-platform POSIX utilities for development workflows.\n\n<!-- vim-markdown-toc GFM -->\n\n- [Installation](#installation)\n  - [NPM](#npm)\n  - [Pacman (ArchLinux)](#pacman-archlinux)\n  - [APT (Ubuntu)](#apt-ubuntu)\n- [Usage](#usage)\n  - [`pu git-has-changed` - Git Changed Detection](#pu-git-has-changed---git-changed-detection)\n  - [`pu log` - Fancy Logging](#pu-log---fancy-logging)\n  - [`pu tadaa` - An overly excited version of `pu log success`](#pu-tadaa---an-overly-excited-version-of-pu-log-success)\n  - [`pu install` - Cross-Platform Package Installation](#pu-install---cross-platform-package-installation)\n- [License](#license)\n\n<!-- vim-markdown-toc -->\n\n## Installation\n\n### NPM\n\n```sh\nnpm install --save-dev @asd14/posix-utils\n```\n\n### Pacman (ArchLinux)\n\nTBD\n\n### APT (Ubuntu)\n\nTBD\n\n## Usage\n\n### `pu git-has-changed` - Git Changed Detection\n\nCheck if a file has changed since a given git commit reference. This tool\ncompares the current state of a file against its state at a specific commit,\nmaking it useful for conditional build steps, deployment decisions, and change\ndetection in CI/CD pipelines.\n\nThe tool exits with code 0 if the file has changed, making it perfect for use\nin shell conditionals and npm scripts.\n\n```sh\n# In npm scripts - regenerate lock only if package.json changed\npu git-has-changed package.json --since HEAD~1 \\\n    && npm install\n\n# Check against specific version tag\npu git-has-changed src/config.json --since v1.2.0 \\\n    && npm run rebuild-config\n```\n\n### `pu log` - Fancy Logging\n\nPrint dated, colored, namespaced, multi-level, CI aware and pretty formatted\nlog messages. Supports different log levels with automatic filtering and\ncolored output.\n\nMessages include timestamps and can be enhanced with key-value pairs for\nstructured logging.\n\n```sh\n# Basic logging\npu log info \"Build started\"\npu log success \"Deploy completed\"\npu log error \"Something went wrong\"\n\n# With variables\nLOG_NAMESPACE=\"my-app\"\npu log warning \"Invalid parameter\" \\\n    -v param-name \"username\" \\\n    -v param-value \"null\"\n```\n\n### `pu tadaa` - An overly excited version of `pu log success`\n\nDisplay celebratory \"TADAA!\" messages with decorative borders, stars, and\noptional content. Perfect for announcing successful operations, completed\nbuilds, or project milestones.\n\n```sh\n# Simple celebration\npu tadaa\n\n# With title\npu tadaa \"Build completed\"\n\n# Full celebration with message and note\npu tadaa \"Deploy successful\" \"All services are running\" \\\n    \"Check logs for details, file:///var/log/deploy.log\"\n\n# Colors automatically disabled when piping or redirecting\npu tadaa \"Build finished\" | tee build.log\n\n# Force colors even when piping\npu tadaa --color \"Deploy completed\" | less -R\n```\n\n### `pu install` - Cross-Platform Package Installation\n\nCross-platform package installer that automatically detects the system package\nmanager and installs the specified packages. Supports major Linux\ndistributions, macOS, and npm packages.\n\nPackages are validated for security (only alphanumeric characters, dots,\nunderscores, hyphens, and plus signs allowed). Package manager flags can be\npassed after -- separator.\n\n```sh\n# Auto-detect package manager\npu install git curl jq\n\n# Force specific package manager\npu install --package-manager npm typescript eslint\n\n# Pass flags to package manager\npu install firefox -- --cask\n\n# Install development dependencies\npu install build-essential git nodejs npm\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}