Skip to content

๐Ÿ—บ A simple CLI tool to manage and organize Next.js API routes.

License

Notifications You must be signed in to change notification settings

lifespikes/apext

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Nov 23, 2022
14c8c9c ยท Nov 23, 2022

History

89 Commits
Oct 13, 2022
Aug 21, 2022
Nov 5, 2022
Nov 5, 2022
Nov 23, 2022
Nov 5, 2022
Oct 21, 2022
Aug 22, 2022
Nov 5, 2022
Aug 21, 2022
Aug 2, 2022
Jul 31, 2022
Oct 22, 2022
Oct 22, 2022
Oct 21, 2022
Nov 23, 2022
Jul 31, 2022
Aug 22, 2022
Nov 5, 2022

Repository files navigation

apextgithub

output

APEXT

pronounced /eษชpekst/

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

Inspired by the Laravel Artisan route:list Command

Install

On Mac via homebrew

brew install lifespikes/apext/apext

Via NPM

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:

apext list --path auth

Extra:

Display your route accepted http methods by adding the // @methods comment. Check the ๐ŸŽฏ create command below.

// 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:

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):

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

  module.exports = {
    jsContent: (name) => `
      export default async function ${name} (req, res) {
        return res.status(200).json('Hello from Apext Config')
      }
    `
  }