0.25.0 β€’ Published 5 months ago

nextjs-assistant v0.25.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

Next.js Assistant

Build for Production. Designed for Developers.

Visual Studio Marketplace Installs Visual Studio Marketplace Downloads Visual Studio Marketplace Rating

Project just started. Will take some time to get it to a good place. Please be patient.

Links

Introduction

Welcome to the Next.js Assistant, your ultimate resource for Next.js development. This project offers a curated collection of snippets, templates, and resources designed to streamline your Next.js application development process.

Contributing

This is a contribution first project. Therefore I made it as easy as possible to contribute.

We welcome contributions from everyone. Adding snippets to this project is straightforwardβ€”just edit the MAIN.md file. Simply add amazing snippets to the relevant section and submit a pull request.

Getting Started

To begin, simply install the extension from the Visual Studio Code Marketplace. You can access it here. Once installed, you can immediately start utilizing the provided snippets to enhance your development workflow.

Table of Contents

SnippetsDescription
Directives
use-cacheπŸ”₯ use cache πŸ”₯
use-clientπŸ”₯ use client πŸ”₯
use-serverπŸ”₯ use server πŸ”₯
Components
Image
import-imageπŸ”₯ Image Import πŸ”₯
imageπŸ”₯ Image πŸ”₯
Link
import-linkπŸ”₯ Link Import πŸ”₯
linkπŸ”₯ Link πŸ”₯
link-with-target-blankπŸ”₯ Link with Target Blank πŸ”₯
Script
import-scriptπŸ”₯ Script Import πŸ”₯
scriptπŸ”₯ Script πŸ”₯
File Conventions
error.tsx
export-errorπŸ”₯ Error πŸ”₯
layout.tsx
export-layoutπŸ”₯ Layout πŸ”₯
export-root-layoutπŸ”₯ Root Layout πŸ”₯
page.tsx
export-pageπŸ”₯ Page πŸ”₯
export-page-with-paramsπŸ”₯ Page with Params πŸ”₯
export-page-with-searchParamsπŸ”₯ Page with Search Params πŸ”₯
export-page-with-client-paramsπŸ”₯ Page with Client Params πŸ”₯
export-page-with-client-searchParamsπŸ”₯ Page with Client Search Params πŸ”₯
route.ts
export-async-getπŸ”₯ GET Request πŸ”₯
export-async-postπŸ”₯ POST Request πŸ”₯
export-async-putπŸ”₯ PUT Request πŸ”₯
export-async-patchπŸ”₯ PATCH Request πŸ”₯
export-async-deleteπŸ”₯ DELETE Request πŸ”₯
export-async-get-with-cookiesπŸ”₯ GET Request with Cookies πŸ”₯
export-async-post-with-cookiesπŸ”₯ POST Request with Cookies πŸ”₯
export-async-put-with-cookiesπŸ”₯ PUT Request with Cookies πŸ”₯
export-async-patch-with-cookiesπŸ”₯ PATCH Request with Cookies πŸ”₯
export-async-delete-with-cookiesπŸ”₯ DELETE Request with Cookies πŸ”₯
export-async-get-with-headersπŸ”₯ GET Request with Headers πŸ”₯
export-async-post-with-headersπŸ”₯ POST Request with Headers πŸ”₯
export-async-put-with-headersπŸ”₯ PUT Request with Headers πŸ”₯
export-async-patch-with-headersπŸ”₯ PATCH Request with Headers πŸ”₯
export-async-delete-with-headersπŸ”₯ DELETE Request with Headers πŸ”₯
Configuration
next-config-tsπŸ”₯ Next Config πŸ”₯
Drizzle
drizzle-configπŸ”₯ Drizzle Config πŸ”₯
drizzle-schemaπŸ”₯ Drizzle Schema πŸ”₯

Roadmap

Roadmap Extras

  • Drizzle
  • Prettier
  • React Hook Form
  • Shadcn
  • Tanstack Query
  • Zod

Directives

use cache

// use-cache - πŸ”₯ use cache πŸ”₯ //

"use cache"

use client

// use-client - πŸ”₯ use client πŸ”₯ //

"use client"

use server

// use-server - πŸ”₯ use server πŸ”₯ //

"use server"

Components

Image

  • Image Import

// import-image - πŸ”₯ Image Import πŸ”₯ //

import Image from "next/image"
  • Image Component

// image - πŸ”₯ Image πŸ”₯ //

<Image src="/nrjdalal.png" width={500} height={500} alt="Author Photo" />

Link

  • Link Import

// import-link - πŸ”₯ Link Import πŸ”₯ //

import Link from "next/link"
  • Link Component

// link - πŸ”₯ Link πŸ”₯ //

<Link href="/">Home</Link>
  • Link Component with Target Blank

// link-with-target-blank - πŸ”₯ Link with Target Blank πŸ”₯ //

<Link href="/" target="_blank">
  Home
</Link>

Script

  • Script Import

// import-script - πŸ”₯ Script Import πŸ”₯ //

import Script from "next/script"
  • Script Component

// script - πŸ”₯ Script πŸ”₯ //

<Script src="https://example.com/script.js" />

File Conventions

error.tsx

// export-error - πŸ”₯ Error πŸ”₯ //

"use client"

import { useEffect } from "react"

export default function Error({
  error,
  reset,
}: {
  error: Error & { digest?: string }
  reset: () => void
}) {
  useEffect(() => {
    // Log the error to an error reporting service
    console.error(error)
  }, [error])

  return (
    <div
      style={{
        minHeight: "100dvh",
        display: "flex",
        flexDirection: "column",
        alignItems: "center",
        justifyContent: "center",
      }}
    >
      <h2>Something went wrong!</h2>
      <button
        onClick={
          // Attempt to recover by trying to re-render the segment
          () => reset()
        }
      >
        Try again
      </button>
    </div>
  )
}

layout.tsx

  • Layout

// export-layout - πŸ”₯ Layout πŸ”₯ //

export default function Layout({ children }: { children: React.ReactNode }) {
  return <>{children}</>
}
  • Root Layout

// export-root-layout - πŸ”₯ Root Layout πŸ”₯ //

export default function RootLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <html lang="en">
      <body>{children}</body>
    </html>
  )
}

page.tsx

  • Page

// export-page - πŸ”₯ Page πŸ”₯ //

export default function Page() {
  return <>x.com/nrjdalal_com</>
}
  • Page with Params

// export-page-with-params - πŸ”₯ Page with Params πŸ”₯ //

export default async function Page({
  params,
}: {
  params: Promise<{ slug: string }>
}) {
  const slug = (await params).slug

  return <>{slug}</>
}
  • Page with Search Params

// export-page-with-searchParams - πŸ”₯ Page with Search Params πŸ”₯ //

export default async function Page({
  searchParams,
}: {
  searchParams: Promise<{ [key: string]: string | string[] | undefined }>
}) {
  const { query } = await searchParams

  return <>{query}</>
}
  • Page with Client Params

// export-page-with-client-params - πŸ”₯ Page with Client Params πŸ”₯ //

"use client"

import { use } from "react"

export default function Page({
  params,
}: {
  params: Promise<{ slug: string }>
}) {
  const { slug } = use(params)

  return <>{slug}</>
}
  • Page with Client Search Params

// export-page-with-client-searchParams - πŸ”₯ Page with Client Search Params πŸ”₯ //

"use client"

import { use } from "react"

export default function Page({
  searchParams,
}: {
  searchParams: Promise<{ [key: string]: string | string[] | undefined }>
}) {
  const { query } = use(searchParams)

  return <>{query}</>
}

route.ts

  • GET

// export-async-get - πŸ”₯ GET Request πŸ”₯ //

export async function GET(request: Request) {
  try {
    const query = Object.fromEntries(new URL(request.url).searchParams)

    // ${0:console.log(query)}

    return Response.json({ message: "OK" }, { status: 200 })
  } catch (error: unknown) {
    console.log(error)
    if (error instanceof Error) {
      return Response.json({ message: error.message }, { status: 404 })
    } else {
      return Response.json({ message: "404" }, { status: 404 })
    }
  }
}
  • POST

// export-async-post - πŸ”₯ POST Request πŸ”₯ //

export async function POST(request: Request) {
  try {
    const body = await request.json()

    // ${0:console.log(body)}

    return Response.json({ message: "OK" }, { status: 200 })
  } catch (error: unknown) {
    console.log(error)
    if (error instanceof Error) {
      return Response.json({ message: error.message }, { status: 404 })
    } else {
      return Response.json({ message: "404" }, { status: 404 })
    }
  }
}
  • PUT

// export-async-put - πŸ”₯ PUT Request πŸ”₯ //

export async function PUT(request: Request) {
  try {
    const body = await request.json()

    // ${0:console.log(body)}

    return Response.json({ message: "OK" }, { status: 200 })
  } catch (error: unknown) {
    console.log(error)
    if (error instanceof Error) {
      return Response.json({ message: error.message }, { status: 404 })
    } else {
      return Response.json({ message: "404" }, { status: 404 })
    }
  }
}
  • PATCH

// export-async-patch - πŸ”₯ PATCH Request πŸ”₯ //

export async function PATCH(request: Request) {
  try {
    const body = await request.json()

    // ${0:console.log(body)}

    return Response.json({ message: "OK" }, { status: 200 })
  } catch (error: unknown) {
    console.log(error)
    if (error instanceof Error) {
      return Response.json({ message: error.message }, { status: 404 })
    } else {
      return Response.json({ message: "404" }, { status: 404 })
    }
  }
}
  • DELETE

// export-async-delete - πŸ”₯ DELETE Request πŸ”₯ //

export async function DELETE(request: Request) {
  try {
    const query = Object.fromEntries(new URL(request.url).searchParams)

    // ${0:console.log(query)}

    return Response.json({ message: "OK" }, { status: 200 })
  } catch (error: unknown) {
    console.log(error)
    if (error instanceof Error) {
      return Response.json({ message: error.message }, { status: 404 })
    } else {
      return Response.json({ message: "404" }, { status: 404 })
    }
  }
}
  • GET Request with Cookies

// export-async-get-with-cookies - πŸ”₯ GET Request with Cookies πŸ”₯ //

import { cookies } from "next/headers"

export async function GET(request: Request) {
  try {
    const query = Object.fromEntries(new URL(request.url).searchParams)

    // ${0:console.log(await cookies(), query)}

    return Response.json({ message: "OK" }, { status: 200 })
  } catch (error: unknown) {
    console.log(error)
    if (error instanceof Error) {
      return Response.json({ message: error.message }, { status: 404 })
    } else {
      return Response.json({ message: "404" }, { status: 404 })
    }
  }
}
  • POST Request with Cookies

// export-async-post-with-cookies - πŸ”₯ POST Request with Cookies πŸ”₯ //

import { cookies } from "next/headers"

export async function POST(request: Request) {
  try {
    const body = await request.json()

    // ${0:console.log(await cookies(), body)}

    return Response.json({ message: "OK" }, { status: 200 })
  } catch (error: unknown) {
    console.log(error)
    if (error instanceof Error) {
      return Response.json({ message: error.message }, { status: 404 })
    } else {
      return Response.json({ message: "404" }, { status: 404 })
    }
  }
}
  • PUT Request with Cookies

// export-async-put-with-cookies - πŸ”₯ PUT Request with Cookies πŸ”₯ //

import { cookies } from "next/headers"

export async function PUT(request: Request) {
  try {
    const body = await request.json()

    // ${0:console.log(await cookies(), body)}

    return Response.json({ message: "OK" }, { status: 200 })
  } catch (error: unknown) {
    console.log(error)
    if (error instanceof Error) {
      return Response.json({ message: error.message }, { status: 404 })
    } else {
      return Response.json({ message: "404" }, { status: 404 })
    }
  }
}
  • PATCH Request with Cookies

// export-async-patch-with-cookies - πŸ”₯ PATCH Request with Cookies πŸ”₯ //

import { cookies } from "next/headers"

export async function PATCH(request: Request) {
  try {
    const body = await request.json()

    // ${0:console.log(await cookies(), body)}

    return Response.json({ message: "OK" }, { status: 200 })
  } catch (error: unknown) {
    console.log(error)
    if (error instanceof Error) {
      return Response.json({ message: error.message }, { status: 404 })
    } else {
      return Response.json({ message: "404" }, { status: 404 })
    }
  }
}
  • DELETE Request with Cookies

// export-async-delete-with-cookies - πŸ”₯ DELETE Request with Cookies πŸ”₯ //

import { cookies } from "next/headers"

export async function DELETE(request: Request) {
  try {
    const query = Object.fromEntries(new URL(request.url).searchParams)

    // ${0:console.log(await cookies(), query)}

    return Response.json({ message: "OK" }, { status: 200 })
  } catch (error: unknown) {
    console.log(error)
    if (error instanceof Error) {
      return Response.json({ message: error.message }, { status: 404 })
    } else {
      return Response.json({ message: "404" }, { status: 404 })
    }
  }
}
  • GET Request with Headers

// export-async-get-with-headers - πŸ”₯ GET Request with Headers πŸ”₯ //

import { headers } from "next/headers"

export async function GET(request: Request) {
  try {
    const query = Object.fromEntries(new URL(request.url).searchParams)

    // ${0:console.log(await headers(), query)}

    return Response.json({ message: "OK" }, { status: 200 })
  } catch (error: unknown) {
    console.log(error)
    if (error instanceof Error) {
      return Response.json({ message: error.message }, { status: 404 })
    } else {
      return Response.json({ message: "404" }, { status: 404 })
    }
  }
}
  • POST Request with Headers

// export-async-post-with-headers - πŸ”₯ POST Request with Headers πŸ”₯ //

import { headers } from "next/headers"

export async function POST(request: Request) {
  try {
    const body = await request.json()

    // ${0:console.log(await headers(), body)}

    return Response.json({ message: "OK" }, { status: 200 })
  } catch (error: unknown) {
    console.log(error)
    if (error instanceof Error) {
      return Response.json({ message: error.message }, { status: 404 })
    } else {
      return Response.json({ message: "404" }, { status: 404 })
    }
  }
}
  • PUT Request with Headers

// export-async-put-with-headers - πŸ”₯ PUT Request with Headers πŸ”₯ //

import { headers } from "next/headers"

export async function PUT(request: Request) {
  try {
    const body = await request.json()

    // ${0:console.log(await headers(), body)}

    return Response.json({ message: "OK" }, { status: 200 })
  } catch (error: unknown) {
    console.log(error)
    if (error instanceof Error) {
      return Response.json({ message: error.message }, { status: 404 })
    } else {
      return Response.json({ message: "404" }, { status: 404 })
    }
  }
}
  • PATCH Request with Headers

// export-async-patch-with-headers - πŸ”₯ PATCH Request with Headers πŸ”₯ //

import { headers } from "next/headers"

export async function PATCH(request: Request) {
  try {
    const body = await request.json()

    // ${0:console.log(await headers(), body)}

    return Response.json({ message: "OK" }, { status: 200 })
  } catch (error: unknown) {
    console.log(error)
    if (error instanceof Error) {
      return Response.json({ message: error.message }, { status: 404 })
    } else {
      return Response.json({ message: "404" }, { status: 404 })
    }
  }
}
  • DELETE Request with Headers

// export-async-delete-with-headers - πŸ”₯ DELETE Request with Headers πŸ”₯ //

import { headers } from "next/headers"

export async function DELETE(request: Request) {
  try {
    const query = Object.fromEntries(new URL(request.url).searchParams)

    // ${0:console.log(await headers(), query)}

    return Response.json({ message: "OK" }, { status: 200 })
  } catch (error: unknown) {
    console.log(error)
    if (error instanceof Error) {
      return Response.json({ message: error.message }, { status: 404 })
    } else {
      return Response.json({ message: "404" }, { status: 404 })
    }
  }
}

Configuration

// next-config-ts - πŸ”₯ Next Config πŸ”₯ //

import type { NextConfig } from "next"

const nextConfig: NextConfig = {
  /* config options here */
}

export default nextConfig

Drizzle

  • Drizzle Config

// drizzle-config - πŸ”₯ Drizzle Config πŸ”₯ //

import { defineConfig } from "drizzle-kit"

export default defineConfig({
  dialect: "postgresql",
  dbCredentials: {
    url: process.env.POSTGRES_URL!,
  },
  schema: "./src/db",
  out: "./src/db/drizzle",
})
  • Drizzle Schema

// drizzle-schema - πŸ”₯ Drizzle Schema πŸ”₯ //

import { drizzle, type PostgresJsDatabase } from "drizzle-orm/postgres-js"
import postgres from "postgres"

declare global {
  // eslint-disable-next-line
  var db: PostgresJsDatabase
}

let db: PostgresJsDatabase

if (process.env.NODE_ENV === "production") {
  db = drizzle({
    client: postgres(process.env.POSTGRES_URL!, {
      connect_timeout: 10000,
      idle_timeout: 30000,
      ssl: {
        rejectUnauthorized: true,
      },
    }),
  })
} else {
  if (!global.db) {
    global.db = drizzle({
      client: postgres(process.env.POSTGRES_URL!, {
        connect_timeout: 10000,
        idle_timeout: 30000,
      }),
    })
  }
  db = global.db
}

export { db }
0.25.0

5 months ago

0.24.0

5 months ago

0.23.1

5 months ago

0.23.0

5 months ago

0.22.2

5 months ago

0.22.1

5 months ago

0.22.0

5 months ago

0.21.2

5 months ago

0.21.1

5 months ago

0.21.0

5 months ago

0.20.0

5 months ago

0.19.0

5 months ago

0.18.0

5 months ago

0.17.0

5 months ago

0.16.0

5 months ago

0.15.0

5 months ago

0.14.1

5 months ago

0.14.0

5 months ago

0.13.0

5 months ago

0.12.3

5 months ago

0.12.0

5 months ago

0.11.2

5 months ago

0.11.1

5 months ago

0.11.0

5 months ago

0.10.1

5 months ago