- Bun installed
Welcome to Wave Shell, where every line of code is a powerful wave propelling you forward in your development journey. Just like the rhythmic and fluid nature of ocean waves, our CLI tool is designed to make your coding experience smooth, efficient, and energizing.
Wave Shell is heavily inspired by Gluegun! Please go there to take a look.
Wave Shell is more than just a name; it's a representation of the dynamic and seamless development experience we strive to provide. Imagine coding as effortlessly as riding the perfect wave—surfing through your projects with grace and power. Our CLI tool aims to bring that natural flow to your development process, ensuring you stay productive and energized in your daily work.
-
File system commands: Every command at src/commands/ will be a new registered command for you!
-
Parsed command lines arguments:: All arguments parsed beautifully (booleans, strings, numbers)
-
File Template: Create files passing dynamic variables to our .surf files!. Powered by Surfstar
Docs (WIP): https://docs.wave-shell.dev
bunx wave-shell-cli create
src/commands/hello.ts
import { WaveCommand } from "wave-shell";
export default {
description: 'Hello world command',
run: async ({ args, print }) => {
const { world } = args.namedArgs; //world parsed as a boolean
if (!world) {
return print.error("We expected --world to say the phrase 😓")
}
print.success("Hello World!")
}
} as WaveCommand
wave hello --world
Usage with Surfstar
src/templates/hello-world.surf
Hello {{ person.name }}! I see that you are {{ years }} years old. Nice!
src/commands/hello-world.ts
import { WaveCommand } from "wave-shell";
import { join } from 'path';
function getFilePath() {
const templateFolder = join(import.meta.dir, '../templates');
return join(templateFolder, 'hello-world.surf');
}
export default {
run: async ({ compileTemplate }) => {
const filePath = getFilePath();
const result = await compileTemplate(filePath, {
person: { name: 'John' },
years: 32
});
Bun.write('hello.txt', result)
}
} as WaveCommand