# apext

> A simple CLI tool to manage and organize Next.js API routes.

Latest version **0.3.7** (published 2022-10-24) · MIT license · 0 weekly downloads

## Install

```sh
npm install apext
pnpm add apext
yarn add apext
bun add apext
```

Provides the command `apext`.

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.3.7 |
| Published | 2022-10-24 |
| First published | 2022-08-17 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 67.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 12 |
| Author | Josue Munoz |
| Maintainers | soloamilkar |
| Keywords | apext, nextjs, javascript, typescript |

## Links

- npm: https://www.npmjs.com/package/apext
- Repository: https://github.com/lifespikes/apext
- Homepage: https://github.com/lifespikes/apext#readme
- Issues: https://github.com/lifespikes/apext/issues
- npm.io page: https://npm.io/package/apext

## Dependencies (2)

- [commander](https://npm.io/package/commander.md) 9.4.0
- [@colors/colors](https://npm.io/package/@colors/colors.md) 1.5.0

## Alternatives

- [@openai/codex-sdk](https://npm.io/package/@openai/codex-sdk.md) — 731.4K weekly downloads
- [babel-plugin-transform-react-jsx](https://npm.io/package/babel-plugin-transform-react-jsx.md) — 565.0K weekly downloads
- [babel-helper-remove-or-void](https://npm.io/package/babel-helper-remove-or-void.md) — 508.5K weekly downloads
- [@pnpm/store-controller-types](https://npm.io/package/@pnpm/store-controller-types.md) — 186.9K weekly downloads
- [react-native-signature-canvas](https://npm.io/package/react-native-signature-canvas.md) — 155.6K weekly downloads

## Recent versions

- 0.3.7 (latest) — 2022-10-24
- 0.3.6 — 2022-10-23
- 0.3.4 — 2022-10-22
- 0.3.3 — 2022-10-22
- 0.3.2 — 2022-10-22
- 0.3.0 — 2022-10-22
- 0.2.5 — 2022-08-21
- 0.2.4 — 2022-08-20
- 0.2.3 — 2022-08-20
- 0.2.2 — 2022-08-20
- 0.2.1 — 2022-08-20
- 0.2.0 — 2022-08-17
- 0.0.1 — 2022-08-17

## README

![apextgithub](https://user-images.githubusercontent.com/71573508/182018691-edc8aa18-04a4-4976-bdae-890ada85cc1f.png)


![output](https://user-images.githubusercontent.com/71573508/185773820-7dcdbdb7-535d-4315-bb5c-71f1045f3b88.gif)


# APEXT

<sup>pronounced */eɪpekst/*<sup>

A simple CLI tool to manage and organize Next.js API routes.

<sup>Inspired by the [Laravel Artisan `route:list` Command](https://stillat.com/blog/2016/12/07/laravel-artisan-route-command-the-routelist-command)<sup>

# Install

#### On Mac via homebrew

```bash
brew install lifespikes/apext/apext
```

#### Via NPM

```bash
npm i -g apext
```

# API (Commands)

### 1. 🎯 `list`

**Place yourself on your Next.js root directory and run `apext list`**

#### Flags:

`--path` - **optional** (will output a specific path routes, `/api` is default)


#### Example:

```bash
apext list --path auth
```

#### Extra:

Display your route accepted http methods by adding the `// @methods` comment. Check the `🎯 create` command below.

```js
// my-route.ts

// @methods [GET, POST, PUT, DELETE]

// ...rest of the file
```


### 2. 🎯 `create`

Will create an API endpoint following a REST structure.

#### Argument:

`<name>` - **required** (the name of your API endpoint)

#### Flags:

`--path` - **optional** (`/api` folder is default)

`--ts` - **optional** (`.js` file is generated by default)


#### Example:

```bash
apext create login --path auth --ts
```

#### Notes:

1. When stating a `--path` you can create nested directories like `path/nested-path`.
2. If a folder does not exists, APEXT will create the folder for you.

#### Output file example (Typescript):

```ts
import type { NextApiRequest, NextApiResponse } from 'next'

// APEXT methods comment 👇
// @methods [GET, POST, PUT, DELETE]

export default async function name(
  req: NextApiRequest,
  res: NextApiResponse
) {
  switch (req.method) {
    case 'GET':
    case 'POST':
    case 'PUT':    
    case 'DELETE':
    default:
      res.setHeader('Allow', [
        'GET',
        'POST',
        'PUT',
        'DELETE',
    ])
      return res.status(405).end(`Method ${req.method} Not Allowed`)
  }
}
```

# Config File

You can add an `apext.config.js` to your Next.js project root directory.

### Options:
  
| option     | type     | description                                                                                                                                                                                          |
|------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| tsContent  | function | A function `(name: string) => string`. Takes one argument `name` and returns a string. It allows you to set up the content of the API route when just being created with the `create` command.       |
| jsContent  | function | A function  `(name: string) => string` . Takes one argument  `name`  and returns a string. It allows you to set up the content of the API route when just being created with the  `create`  command. |
| typescript | boolean  | If you are programming in Typescript you can set up this option and all API routes will be Typescript files without specifying the `--ts` flag.                                                      |                                                   |   |   |                                                   |   |   |
  
### Example of tsContent/jsContent
  
```js
  module.exports = {
    jsContent: (name) => `
      export default async function ${name} (req, res) {
        return res.status(200).json('Hello from Apext Config')
      }
    `
  }
  
```

---
_Source: https://npm.io/package/apext · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
