Skip to content

Commit 54aee58

Browse files
committed
refactor: GitHub program deployment typed with Zod instead of Joi
Useless dependencies removed
1 parent 8a0e4d5 commit 54aee58

File tree

4 files changed

+24
-85
lines changed

4 files changed

+24
-85
lines changed

package.json

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,14 @@
1919
"ethers": "^5.7.2",
2020
"framer-motion": "^10.12.12",
2121
"git-clone": "^0.2.0",
22-
"joi": "^17.9.2",
2322
"js-file-download": "^0.4.12",
2423
"next": "^12.3.4",
2524
"next-auth": "4.10.3",
26-
"next-connect": "^1.0.0-next.3",
27-
"next-joi": "^2.2.1",
2825
"react": "^18.2.0",
2926
"react-dom": "^18.2.0",
3027
"react-icons": "^4.8.0",
31-
"typescript": "^5.0.4"
28+
"typescript": "^5.0.4",
29+
"zod": "^3.21.4"
3230
},
3331
"scripts": {
3432
"dev": "next dev",

pages/api/program/create.ts

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1-
import Joi from 'joi';
2-
import type { NextApiRequest, NextApiResponse } from 'next';
3-
import { createRouter } from 'next-connect';
1+
import z from 'zod';
42

5-
import validate from 'lib/middlewares/validation';
63
import deploy from 'lib/services/deploy';
74
import { clone, getProgramName } from 'lib/services/git';
5+
import { NextApiRequest, NextApiResponse } from 'next';
86

9-
const router = createRouter<NextApiRequest, NextApiResponse>();
10-
11-
const postSchema = Joi.object({
7+
const postSchema = z.object({
128
// eslint-disable-next-line no-useless-escape
13-
repository: Joi.string().pattern(/((git|http(s)?)|(git@[\w\.]+))(:(\/\/)?)([\w\.@\:\/\-~]+)(\.git)(\/)?/),
14-
entrypoint: Joi.string(),
15-
});
16-
17-
router.post(validate({ body: postSchema }), async (req, res) => {
18-
const { repository, entrypoint } = req.body;
19-
const path = await clone(repository);
20-
const itemHash = await deploy(path, entrypoint);
21-
return res.status(200).json({ name: getProgramName(repository), item_hash: itemHash, entrypoint });
9+
repository: z.string().regex(/((git|http(s)?)|(git@[\w\.]+))(:(\/\/)?)([\w\.@\:\/\-~]+)(\.git)(\/)?/),
10+
entrypoint: z.string(),
2211
});
2312

24-
export default router.handler();
13+
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
14+
try {
15+
if (req.method !== 'POST') throw new Error('Method not allowed');
16+
const body = postSchema.parse(req.body);
17+
const { repository, entrypoint } = body;
18+
const path = await clone(repository);
19+
const itemHash = await deploy(path, entrypoint);
20+
return res.status(200).json({ name: getProgramName(repository), item_hash: itemHash, entrypoint });
21+
} catch (error) {
22+
return res.status(400).end('Bad request');
23+
}
24+
}

src/lib/middlewares/validation.ts

Lines changed: 0 additions & 7 deletions
This file was deleted.

yarn.lock

Lines changed: 5 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1757,18 +1757,6 @@
17571757
"@ethersproject/properties" "^5.7.0"
17581758
"@ethersproject/strings" "^5.7.0"
17591759

1760-
"@hapi/hoek@^9.0.0":
1761-
version "9.3.0"
1762-
resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb"
1763-
integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==
1764-
1765-
"@hapi/topo@^5.0.0":
1766-
version "5.1.0"
1767-
resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012"
1768-
integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==
1769-
dependencies:
1770-
"@hapi/hoek" "^9.0.0"
1771-
17721760
"@humanwhocodes/config-array@^0.11.8":
17731761
version "0.11.8"
17741762
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9"
@@ -2190,23 +2178,6 @@
21902178
"@noble/hashes" "~1.2.0"
21912179
"@scure/base" "~1.1.0"
21922180

2193-
"@sideway/address@^4.1.3":
2194-
version "4.1.4"
2195-
resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0"
2196-
integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==
2197-
dependencies:
2198-
"@hapi/hoek" "^9.0.0"
2199-
2200-
"@sideway/formula@^3.0.1":
2201-
version "3.0.1"
2202-
resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f"
2203-
integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==
2204-
2205-
"@sideway/pinpoint@^2.0.0":
2206-
version "2.0.0"
2207-
resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df"
2208-
integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==
2209-
22102181
"@solana/buffer-layout@^4.0.0":
22112182
version "4.0.1"
22122183
resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15"
@@ -5389,17 +5360,6 @@ jayson@^3.4.4:
53895360
uuid "^8.3.2"
53905361
ws "^7.4.5"
53915362

5392-
joi@^17.9.2:
5393-
version "17.9.2"
5394-
resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.2.tgz#8b2e4724188369f55451aebd1d0b1d9482470690"
5395-
integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==
5396-
dependencies:
5397-
"@hapi/hoek" "^9.0.0"
5398-
"@hapi/topo" "^5.0.0"
5399-
"@sideway/address" "^4.1.3"
5400-
"@sideway/formula" "^3.0.1"
5401-
"@sideway/pinpoint" "^2.0.0"
5402-
54035363
jose@^4.14.1, jose@^4.3.7:
54045364
version "4.14.4"
54055365
resolved "https://registry.yarnpkg.com/jose/-/jose-4.14.4.tgz#59e09204e2670c3164ee24cbfe7115c6f8bff9ca"
@@ -5786,18 +5746,6 @@ next-auth@4.10.3:
57865746
preact-render-to-string "^5.1.19"
57875747
uuid "^8.3.2"
57885748

5789-
next-connect@^1.0.0-next.3:
5790-
version "1.0.0-next.3"
5791-
resolved "https://registry.yarnpkg.com/next-connect/-/next-connect-1.0.0-next.3.tgz#d7df4ee2c54bb1808f273e1ebec308e2ffb553d2"
5792-
integrity sha512-i1kb8rz/3lm6z68Lnh18juHGgbgFVZXXAIiElaASGXxDZ8mJ2EVxdbTXX8NiF9BbGDBeao7u6uKMqw5ZLZg/Kg==
5793-
dependencies:
5794-
regexparam "^2.0.1"
5795-
5796-
next-joi@^2.2.1:
5797-
version "2.2.1"
5798-
resolved "https://registry.yarnpkg.com/next-joi/-/next-joi-2.2.1.tgz#bd690b5eba02d6d5d8bae76a2f402fb11843eca8"
5799-
integrity sha512-m6/rDj9a9sp0CeMGy3np/7T2663QFinfiTY4MuJ9LEicU+6SiDim4wnsqG5CfzI4IQX4tupN6jSCtsv0t2EWnQ==
5800-
58015749
next@^12.3.4:
58025750
version "12.3.4"
58035751
resolved "https://registry.yarnpkg.com/next/-/next-12.3.4.tgz#f2780a6ebbf367e071ce67e24bd8a6e05de2fcb1"
@@ -6373,11 +6321,6 @@ regexp.prototype.flags@^1.4.3:
63736321
define-properties "^1.1.3"
63746322
functions-have-names "^1.2.2"
63756323

6376-
regexparam@^2.0.1:
6377-
version "2.0.1"
6378-
resolved "https://registry.yarnpkg.com/regexparam/-/regexparam-2.0.1.tgz#c912f5dae371e3798100b3c9ce22b7414d0889fa"
6379-
integrity sha512-zRgSaYemnNYxUv+/5SeoHI0eJIgTL/A2pUtXUPLHQxUldagouJ9p+K6IbIZ/JiQuCEv2E2B1O11SjVQy3aMCkw==
6380-
63816324
request-progress@^3.0.0:
63826325
version "3.0.0"
63836326
resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe"
@@ -7254,3 +7197,8 @@ yocto-queue@^0.1.0:
72547197
version "0.1.0"
72557198
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
72567199
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
7200+
7201+
zod@^3.21.4:
7202+
version "3.21.4"
7203+
resolved "https://registry.yarnpkg.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db"
7204+
integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==

0 commit comments

Comments
 (0)