npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

nxtk

v0.4.1

Published

A project template for TypeScript npm packages

Downloads

10

Readme

Installation

To install the latest version:

npm install --save nxtk
yarn add nxtk

⚠️ Requires TypeScript 3.2+ and "strictNullChecks": true to work properly!

Importing

import { nxtk } from 'nxtk';

nxtk.fetch

This utility reduces the boilerplate required to implement pages with data fetching. It uses type inference to detect the return type of getStaticProps, getServerSideProps, or both. Then it merges the types so you can trivially add strong typing to your component props.

Defining fetch functions

// pages/yourpage.tsx

import React from 'react';
import { nxtk } from 'nxtk';

const Fetcher = nxtk.fetch({
  async server(ctx) {
    // ctx = GetServerSidePropsContext
    const props = { serverSideProp: 'Hello' };
    return { props };
  },
  async static(ctx) {
    // ctx = GetStaticPropsContext
    const props = { staticProp: 'World' };
    return { props };
  },
});

The ctx inputs are automatically typed for you.

After creating your "fetcher", export its getServerSideProps and getStaticProps properties so Next.js can access them.

export const getServerSideProps = Fetcher.getServerSideProps;
export const getStaticProps = Fetcher.getStaticProps;

Inferring prop types!

The best part: nxtk automatically infers the return types of your fetcher functions and merges them together. So you can properly type your page components:

type InferredProps = typeof Fetcher['props']; // { serverSideProp: string; staticProp: string };

export default function Home(props: InferredProps) {
  props;
  return (
    <div>
      <p>{`${props.serverSideProp} ${props.staticProp}`} </p>
    </div>
  );
}

As you can see, the return type of getServerSideProps ({ serverSideProp: string}) and getStaticProps ({ staticProp: string }) are inferred and merged into { serverSideProp: string; staticProp: string }. You can access this typing with typeof Fetcher['props'].

This may not look like much with a simple example, but imagine you are doing a serious of complex database queries using a type-safe ORM like TypeORM or Prisma. No matter how compicated your fetching logic gets, nxtk can infer it. No need to keep your component props in sync with your fetching logic!

Full example

A full sample page is available at https://github.com/vriad/nxtk/blob/master/src/example.tsx.

nxtk.api

This is a helper function for defining API routes.

// /api/hello.ts
import { nxtk } from 'nxtk';

export default nxtk.api((req, res) => {
  if (req.method !== 'POST') return res.status(200).json({ name: 'unsupported' });
  res.status(200).json({ message: 'yay post!' });
});

nxtk.???

If you have any other suggestions of how nxtk could make using Next.js and TypeScript more painless, create an issue! I hope to expand the scope of nxtk wherever pain points exist.

Created by @vriad MIT License