Material Theme commands are located inside the `extensions/commands` directory. They are split by folders so you can find a single specific `index.ts` file inside a `command` folder. This is a patter choice: so you can add related command helpers inside that folder.
#### index.ts
The main file must return a `function`. The `function` can be `async` or `sync`.
We want to make this clear, so the `async` declaration must be present even if you want to use `then()` for chaining inside the `function`.
##### Example of `async` exported `function`
```js
export default async (): Promise<boolean> => {
...
```
##### Example of `sync` exported `function`
```js
export default (): boolean => {
...
```
#### Using external "mini" modules
We encourage you to split up your command in other small modules so they can be **tested** more easily and outside of the context.
#### Register the command
You must register the new command to execute it when it's called by the user.
Firstly add the command to our commands `extensions/commands/index.ts`
```js
export {default as awesomeCommand} from './awesome-command';
```
Commands are registered within the `extensions/material.theme.config.ts` file.
Just add a new registration after the others that will run your command:
When you are ready to test your new command you must add its declaration within the `package.json`. The command **must be prefixed with**`materialTheme.` prefix.
As the others your command will look like this:
Level: `contribute.commands -> Array`
```json
{
"command": "materialTheme.awesomeCommand",
"title": "Awesome Title For Command",
"category": "🎨 Material Theme"
}
```
#### Build and run
Now you can re-build the theme and just run the debug, you will see your command in the command list of VSCode just searching for its title.
#### Test your command
A test suite is currently in developing. Update soon.
We also welcome financial contributions in full transparency on our [open collective](https://opencollective.com/vsc-material-theme).
Anyone can file an expense. If the expense makes sense for the development of the community, it will be "merged" in the ledger of our open collective by the core contributors and the person who filed the expense will be reimbursed.
## Credits
### Contributors
Thank you to all the people who have already contributed to vsc-material-theme!
Thank you to all our sponsors! (please ask your company to also support this open source project by [becoming a sponsor](https://opencollective.com/vsc-material-theme#sponsor))