Novices Performing Miracles

    pk

    1.1.0 • Public • Published

    npm npm Build Status GitHub issues GitHub stars GitHub license Twitter

    pk logo

    Introduction

    pk is a small utility CLI for querying JSON files like package.json or manifest.json etc.

    • Get the value of a particular field 💪 pk scripts.start
    • Parse semver versions 🐍 pk -s version
    • Minify json 🐭 pk -m
    • Beautify json 🐘 pk -j
    • Get the keys in an object 🔑 pk -k scripts
    • Get the size of an array or number of keys in an object 🌮 pk -c dependencies
    • Get a part of a json file ✂ pk -j repository
    • Check if a path exists in the json and what type it is 🎁 pk -t keywords
    • The default output is compatible with Unix text processing utils 👓 (wc, sort, grep, uniq, comm, shuf, paste, column, pr, fold, cmp, diff, etc.)
    • Tiny, super quick, 100% Javascript 🦄
    • Autocomplete (see 👇)
    • Correction suggestion (typos in the path) 😅

    By default it operates on package.json where its name comes from but you can specify any input file using the -i FILE.json option.

    Install

    $ npm i -g pk

    Now you can run it from the terminal. Check out the command reference to see what you can do with it:

    $ pk --help

    Install command line completion (optional)

    pk bashcompgenerates the bash auto complete command You need to add this script to your bash initialization:

    • On Linux: $ pk bashcomp >> ~/.bashrc
    • On Mac OS X: $ pk bashcomp >> ~/.bash_profile
    • Windows Subsystem for Linux: $ pk bashcomp >> ~/.bashrc

    Then you need to restart a bash session for this to take effect.

    Examples

    Get the main field

    $ pk main
    index.js

    If there is no main field nothing will be returned.

    Working with objects

    package.json:

    {
        "scripts": {
             "start": "node server.js",
             "build": "webpack .",
        }
    }

    Get the list of all scripts along with their commands:

    $ pk scripts
    start   node server.js
    build   webpack .

    Just the script names (object keys -k):

    $ pk scripts -k
    start
    build

    Just the values:

    $ pk scripts -v
    node server.js
    webpack .

    pk is designed with Unix philosophy in mind and plays nice with other tools. Want to see which script has the word "server" in it? Grep it:

    $ pk scripts | grep server
    start   node server.js

    Nested objects

    package.json:

    {
      ...
      config: {
        port: 8080
      }
    }

    Get a particular config (port in this case):

    $ pk config.port
    8080

    You can also use autocomplete to see what is available. Just press TABTAB after istalling the command line completion script.

    Working with arrays

    package.json:

    {
        keywords: [ "node", "cli", "config", "CI" ]
    }

    Get a particular item:

    $ pk keywords[2]
    config

    Get all items:

    $ pk keywords
    node
    cli
    config
    CI

    Get it in json format:

    $ pk keywords -j
    [
        "node",
        "cli",
        "config",
        "CI"
    ]

    Or even minified:

    $ pk keywords -j
    ["node","cli","config","CI"]

    By default the output is unix compatible so you can pipe it:

    $ pk keywords | sort
    CI
    cli
    config
    node

    Get the type of something:

    $ pk -t keywords
    array

    Or the type of an element:

    $ pk -t keywords[0]
    string

    If a field doesn't exist, undefined will be printed:

    $ pk -t license
    undefined

    Minify a json file

    There's no magic! It just uses native JSON module without padding.

    original.json:

    {
        "name": "Alex"
        "city": "Stockholm"
    }

    Minify it and show the output:

    $ pk -i original.json -m
    {"name":"Alex","city":"Stockholm"}

    Write the output to a file:

    $ pk -i original.json -m > original.min.json

    Prettify a minified or badly formatted JSON

    original.json:

    {"name": "Alex"
        "city": "Stockholm",      "keywords": ["javascript", "golang",
    "vuejs"]
    }

    Show it pretty on screen:

    $ pk -i original.json -j
    {
        "name""Alex"
        "city""Stockholm",
        "keywords": [
            "javascript",
            "golang",
            "vuejs"
        ]
    }

    If the output is too big you may wanna browse it on the terminal:

    $ pk -i original.json -j | less

    Or just write it to a file:

    $ pk -i original.json -j > original-prettified.json

    Even overwrite the original file:

    $ pk -i original.json -j > original.json

    Count the number of devDependencies

    package.json:

    {
        "devDependencies": {
             "mocha": "*",
             "babel": "*",
             "micromustache": "*",
             "webpack": "*",
        }
    }
    $ pk devDependencies -c
    4

    package-lock.json is nutorious!

    $ pk -i package-lock.json dependencies -c
    2739

    If you're referring to an array, it'll return the size of the array:

    $ pk -c keywords
    3

    Get part of a JSON file

    package.json:

    {
        ...
        "repository": {
            "type": "git",
            "url": "git+https://github.com/userpixel/pk.git"
        }
    }

    Get the value of the repository:

    $ pk -j repository
    {
      "type""git",
      "url""git+https://github.com/userpixel/pk.git"
    }

    Working with versions

    package.json:

    {
        "version": "1.2.3"
    }

    Just get the version string:

    $ pk version
    1.2.3

    Parse it as semver:

    $ pk -s version
    major   1
    minor   2
    patch   3

    You can actually omit "version" part if that's where it is:

    $ pk -s
    major   1
    minor   2
    patch   3

    Yep you can get it in JSON format if you want:

    $ pk -s version
    {
      "major": 0,
      "minor": 2,
      "patch": 4
    }

    It understands watever semver can parse. So if the version was "4.3.2-beta.2+build1000"

    $ pk -s
    major 4
    minor 3
    patch 2
    build ["build1000"]
    prerelease ["beta",2]

    Command Substitution

    pk is ideal for CI/CD scripts and that was the original motivation for its creation. For example if you want to compress the current directory and version it you can:

    $ zip -r `pk name`-`pk version`.zip .

    This will zip the current directory to a file that is name NAME-VERSION.zip where NAME and VERSION in the file name come from "name" and "version" fields in the local package.json.

    More

    There's more. See the help for the command reference

    $ pk --help`.

    Update

    # Check the version 
    $ pk --version
     
    # Check if there's a new version 
    $ npm outdated -g pk
     
    # Update it if needed 
    $ npm i -g pk@latest`

    Uninstall

    $ npm un -g pk

    License

    MIT

    Made in Sweden by @alexewerlof

    Install

    npm i pk

    DownloadsWeekly Downloads

    9

    Version

    1.1.0

    License

    MIT

    Unpacked Size

    17.8 kB

    Total Files

    7

    Last publish

    Collaborators

    • userpixel