server-side-props

handler to improve data handling in Next.js getServerSideProps

Usage no npm install needed!

<script type="module">
  import serverSideProps from 'https://cdn.skypack.dev/server-side-props';
</script>

README

server-side-props

import { handle, json } from 'serverside';
import { Form, usePendingFormSubmit } from 'serverside/form';
import { streamToBuffer } from 'serverside/utils';

type PageProps = { name: string; image?: string };
type FormData = { name: string; file: File & { buffer: string } };
type UrlQuery = { id: string };

export const getServerSideProps = handle<PageProps, UrlQuery, FormData>({
  async upload(file, stream) {
    file.buffer = (await streamToBuffer(stream)).toString('base64');
  },

  async get({ params, query }) {
    return json({ name: 'smeijer', town: 'leeuwarden' });
  },

  async post({ req: { body } }) {
    return json({
      name: body.name,
      image: body.file?.buffer || '',
    });
  },
});

export default function Home({ name, town, age, image }) {
  const pending = usePendingFormSubmit();

  return (
    <Form method="post">
      <input name="name" defaultValue={name} />
      <input name="age" defaultValue={age} />
      <input type="file" name="file" />
      <button type="submit" disabled={!!pending}>
        {pending ? 'submitting' : 'submit'}
      </button>
    </Form>
  );
}