Features for allowing you to print to the console. You can access these tools on the Gluegun toolbox, via `const { print } = require('gluegun')`, or directly via `const { print } = require('gluegun/print')`. ## info Prints an informational message. Use this as your goto. ```js toolbox.print.info('Hello. I am a chatty plugin.') ``` ## success Print a "something good just happened" message. ```js toolbox.print.success('We did it!') ``` ## warning Prints a warning message. Use this when you feel a disturbance in the force. ```js toolbox.print.warning("Your system does not have Yarn installed. It's awesome.") ``` ## error Prints an error message. Use this when something goes Pants-On-Head wrong. What does that mean? Well, if your next line of code isn't `process.exit(0)`, then it was probably a warning. ```js toolbox.print.error('Out of disk space. lol.') ``` ## debug Only used for debugging your plugins. You can pass this function a string or an object. ```js toolbox.print.debug(someObject, 'download status') ``` The `message` parameter is object you would like to see. The `title` is an optional title message which is handy if you've got a lot of debug messages and you're losing track of which one is which. ## colors An object for working with printing colors on the command line. It is from the `colors` NPM package, however we define a theme to make things a bit consistent. Some available functions include: | function | use when you want... | | ------------------ | ---------------------------------------- | | `colors.success()` | the user to smile | | `colors.error()` | to say something has failed | | `colors.warning()` | to point out that something might be off | | `colors.info()` | to say something informational | | `colors.muted()` | you need to say something secondary | Each take a `string` parameter and return a `string`. One gotcha here is that the length of the string is longer than you think because of the embedded color codes that disappear when you print them. 🔥 ## spin Creates a spinner for long running tasks on the command line. It's [ora](https://github.com/sindresorhus/ora)! Here's an example of how to work with it: ```js // a spinner starts with the text you provide const spinner = toolbox.print.spin('Time for fun!') await toolbox.system.run('sleep 5') ``` 🚨 Important 🚨 - Make sure you don't print anything else while a spinner is going. You need to stop it first. There's a few ways to stop it. ```js // stop it & clear the text spinner.stop() // stop it, leave a checkmark, and optional new text spinner.succeed('woot!') // stop it, leave an X, and optional new text spinner.fail('womp womp.') // stop it, leave a custom label, and optional new text spinner.stopAndPersist({ symbol: '🚨', text: 'osnap!' }) ``` Once stopped, you can start it again later. ```js spinner.start() ``` You can change the color of the spinner by setting: ```js spinner.color = 'cyan' ``` The text can also be set with the normal printing colors. ```js spinner.text = toolbox.print.colors.green('i like trees') ``` ## printHelp Prints a default help screen, consisting of the brand name, version, and `printCommands` output (next). ```js const { printHelp } = toolbox.print printHelp(toolbox) ``` ## printCommands Prints out a table of available commands in a given toolbox. ```js const { printCommands } = toolbox.print printCommands(toolbox) ``` You can pass in a "command path" to refine what commands you'd like to see: ```js const { printCommands } = toolbox.print printCommands(toolbox, ['generate', 'model']) ``` ## table Prints out a table of data, including a header. You can choose from three different formats: `default`, `markdown`, and `lean`. ```js const { table } = toolbox.print table( [ ['First Name', 'Last Name', 'Age'], ['Jamon', 'Holmgren', 35], ['Gant', 'Laborde', 36], ['Steve', 'Kellock', 43], ['Gary', 'Busey', 73], ], { format: 'markdown' }, ) ``` Output: ``` | First Name | Last Name | Age | | ---------- | --------- | --- | | Jamon | Holmgren | 35 | | Gant | Laborde | 36 | | Steve | Kellock | 43 | | Gary | Busey | 73 | ```