https://github.com/koding/node-kd
https://github.com/koding/node-kd
Last synced: 10 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/koding/node-kd
- Owner: koding
- License: mit
- Created: 2017-03-09T11:47:01.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2017-05-30T17:00:58.000Z (over 8 years ago)
- Last Synced: 2025-02-20T22:49:47.797Z (10 months ago)
- Language: JavaScript
- Size: 30.3 KB
- Stars: 0
- Watchers: 14
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: Readme.md
- License: LICENSE
Awesome Lists containing this project
README
node-kd
=======
A thin node.js wrapper around `kd` cli tool.
### What?
It's designed to be an extension layer on top of `kd` so that one could extend the functionality of each commands.
```bash
npm install --global kd
# it exposes a `kdx` binary.
kdx auth login
# => same as running kd auth login
```
## Extending `kd`
1) To match `kdx your command` create a file under `src/commands/your/command.js`
```js
// commands/example/init.js
// this command will run when we type `kdx example init`
export default {
run(args, { run }) {
console.log('running init command')
return askTeamAndBaseUrl().then(({baseurl, team}) => {
return run(
['auth', 'login', '--baseurl', baseurl, '--team', team]
)
})
.then(() => {
return run(
['template', 'create']
)
})
}
}
```
a command is a simple object containing the following keys:
- `before(initialArgs: Array, { run: Function }) => args: Promise>`
Accepts initial args, and it's expected to return an array to be passed to the `run` function as `args`. If return value is a promise, the resolved value will be passed to `run` function.
- **tl;dr:** Return a promise if you need to do async stuff.
- `run(args: >, { run: Function }) => Promise`
A function accepts the result of `before` function. If `before` function doesn't exist, it will be passed the original args.
- `after(result: any) => Promise`
A function accepts the result of `run` function.
**IMPORTANT**: You **HAVE TO** return either an array or a Promise which will return an array from `before` function. This result will either be passed to `run` function of the command if defined, or to the main `kd` command you are wrapping.
2) Try your command:
```bash
cd /your/node-kd/path
npm run run-cli -- example init
# => running init command
```
or with `npm link`
```bash
cd /your/node-kd/path
npm link
kdx example init
# => running init command
```
3) Add functionality to an existing command:
```js
// file => src/commands/template/create.js
// cmd => kdx template create
export default {
before(args) {
console.log(' before template create ')
return args
}
after(result) {
console.log(' after template create ')
return args
}
}
```
run in terminal:
```bash
kdx template create
# => before template create
# => ...
# => ...
# => ... (running kd template create)
# => ...
# => ...
# => after template create
```
Since we didn't create a `run` function in `src/commands/template/create.js` it didn't override the main functionality of `kd template create`; it just ran `before(args)` before and `after(result)` after it.