Skip to content

Conversation

@ptbrowne
Copy link
Member

Original goal was to separate the dynamic generation out of the API so
that it could be used as a library function.

Then I noticed that there was two different methods to generate and
two different APIs, while the difference seemed small.

I refactored both files to better separate http param handling from
generation, made the generate function more generic (accepting the
mapshaper commands), improved the capacity the ability to style SVGs,
now it is possible to ask for municipalities and countries on the SVG
generation.

Now I wonder why is the api/generate for ? Is it still used, is there
a mean to test it ? @shuaiey would you know ?

@vercel
Copy link

vercel bot commented Feb 17, 2023

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated
swiss-maps ✅ Ready (Inspect) Visit Preview 💬 Add your feedback Feb 17, 2023 at 4:15PM (UTC)

@ptbrowne ptbrowne requested a review from wereHamster March 24, 2023 12:52
draft.format = query.format;
}
const { query } = req;
const options = parseOptions(req, res)!;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The parseOptions function ends the response (and if it does it returns undefined). So if options is undefined the handler should exit, otherwise it'll try to write into an already closed response.

);
const { query } = req;
const options = parseOptions(req, res)!;
const { format, shapes, year } = options;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't use the non-null assertion operator when there is a reasonable way to avoid. Here check for undefined return value and exit handler.

download: t.union([t.undefined, t.string]),
});

export const parseOptions = (req: NextApiRequest, res: NextApiResponse) => {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
export const parseOptions = (req: NextApiRequest, res: NextApiResponse) => {
export const parseOptions = (req: NextApiRequest, res: NextApiResponse): undefined | Options => {

import produce from "immer";
import * as t from "io-ts";
import { NextApiRequest, NextApiResponse } from "next";
import { defaultOptions, Shape } from "src/shared";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
import { defaultOptions, Shape } from "src/shared";
import { defaultOptions, Options, Shape } from "src/shared";

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants