Security News
pnpm 10.0.0 Blocks Lifecycle Scripts by Default
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
GRACEY
A declarative CLI building tool that just makes sense. Named after my sweetheart.
There are many CLI tools out there, but they all have restrictions, be some or many.
I want an API that is easy to use, easy to understand and easy to read.
No more guessing what all the commands do. Let's go through it together.
The concept of this package is that 'what you write is what you get'. The sequence of your commands matters and you know how your users will interact with the CLI.
All commands that return this
are chainable, which is a nice feeling.
Our examples will build the @angular/cli
tool with the following commands:
ng generate component --flat folder/componentname
// or
ng g c -f folder/componentname
ng init --flat
class Program
or class Alias
The class to your program. Instanciate this once and start the chain of commands.
There is no constructor, so chain away!
const Program = new Gracey()
In this class, the abstraction is multiples and singles. You can change each into eachother. Action is the last thing that happens before the command node is reset.
command()
option()
action()
commands()
options()
actions()
parse()
options?: {}
// want a command?
const Program = new Gracey()
.command('generate', 'g')
// want a sub command?
const Program = new Gracey()
.command('generate', 'g')
.command('component', 'c')
// declaring 1 space in the process.argv per option
const Program = new Gracey()
.command('generate', 'g')
.command('component', 'c')
.option('-f', '--flat','Flattens the folder', { default: false })
// declaring 1 space in the process.argv per options (allows -fcd)
const Program = new Gracey()
.command('generate', 'g')
.command('component', 'c')
.options('flags', (option) => {
// create each option. It will be added into options array
option('-f', '--flat','Flattens the folder', { default: false })
option('-s', '--sass','Use SASS as default', { default: false })
})
const Program = new Gracey()
.command('generate', 'g')
.command('component', 'c')
.options('flags', (option) => {
option('-f', '--flat','Flattens the folder', { default: false })
option('-s', '--sass','Use SASS as default', { default: false })
})
// access all the things in Program
.actions((action, program) => {
// action handler for troubleshooting and you know what ya doing
action('run component', componentGenerator(program.options))
})
Have typescript intellisense all the stuff you've already put in and available in the program.options output, for example.
FAQs
Creates a CLI using a declarative approach (What you see is what you get)
We found that gracey demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
Product
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
Research
Security News
Socket researchers have discovered multiple malicious npm packages targeting Solana private keys, abusing Gmail to exfiltrate the data and drain Solana wallets.