From e523953ea693922216b2e9a3bc363cdb15540729 Mon Sep 17 00:00:00 2001 From: weiseng18 Date: Sun, 1 Aug 2021 16:06:07 +0800 Subject: [PATCH 01/12] chore: install typescript --- package-lock.json | 1 + package.json | 1 + 2 files changed, 2 insertions(+) diff --git a/package-lock.json b/package-lock.json index 2dd9ca2..260c245 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "test-listen": "^1.1.0", + "typescript": "^3.9.3", "vercel-node-server": "^2.2.1" }, "devDependencies": { diff --git a/package.json b/package.json index d93b6e8..76922b7 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "test-listen": "^1.1.0", + "typescript": "^3.9.3", "vercel-node-server": "^2.2.1" }, "devDependencies": { From 847a10e323bd9bfdbc0cc3db9448571a88d3bf51 Mon Sep 17 00:00:00 2001 From: weiseng18 Date: Sun, 1 Aug 2021 16:12:40 +0800 Subject: [PATCH 02/12] chore: init tsconfig.json --- tsconfig.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 tsconfig.json diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..a9317d8 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,12 @@ +{ + "include": ["./app/**/*"], + "exclude": ["node_modules"], + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "outDir": "./build", + "esModuleInterop": true, + "allowJs": true, + "noImplicitAny": true + } +} From 207536e4ea877b7c3f7389d994ff6d8f2de11359 Mon Sep 17 00:00:00 2001 From: weiseng18 Date: Sun, 1 Aug 2021 16:15:10 +0800 Subject: [PATCH 03/12] chore: install @vercel/node --- package-lock.json | 1 + package.json | 1 + 2 files changed, 2 insertions(+) diff --git a/package-lock.json b/package-lock.json index 260c245..621eeb1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,7 @@ "devDependencies": { "@commitlint/cli": "^13.1.0", "@commitlint/config-conventional": "^13.1.0", + "@vercel/node": "^1.11.1", "chai": "^4.3.4", "chai-http": "^4.3.0", "husky": "^7.0.1", diff --git a/package.json b/package.json index 76922b7..6bab8c2 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "devDependencies": { "@commitlint/cli": "^13.1.0", "@commitlint/config-conventional": "^13.1.0", + "@vercel/node": "^1.11.1", "chai": "^4.3.4", "chai-http": "^4.3.0", "husky": "^7.0.1", From d8682b5445fc760bca2f889c6eca04bd0cb2629e Mon Sep 17 00:00:00 2001 From: weiseng18 Date: Sun, 1 Aug 2021 16:21:48 +0800 Subject: [PATCH 04/12] chore: install @types/react --- package-lock.json | 47 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 48 insertions(+) diff --git a/package-lock.json b/package-lock.json index 621eeb1..a7397ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,7 @@ "devDependencies": { "@commitlint/cli": "^13.1.0", "@commitlint/config-conventional": "^13.1.0", + "@types/react": "^17.0.15", "@vercel/node": "^1.11.1", "chai": "^4.3.4", "chai-http": "^4.3.0", @@ -2428,6 +2429,29 @@ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, + "node_modules/@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", + "devOptional": true + }, + "node_modules/@types/react": { + "version": "17.0.15", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.15.tgz", + "integrity": "sha512-uTKHDK9STXFHLaKv6IMnwp52fm0hwU+N89w/p9grdUqcFA6WuqDyPhaWopbNyE1k/VhgzmHl8pu1L4wITtmlLw==", + "devOptional": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "devOptional": true + }, "node_modules/@types/superagent": { "version": "3.8.7", "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-3.8.7.tgz", @@ -9828,6 +9852,29 @@ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, + "@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", + "devOptional": true + }, + "@types/react": { + "version": "17.0.15", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.15.tgz", + "integrity": "sha512-uTKHDK9STXFHLaKv6IMnwp52fm0hwU+N89w/p9grdUqcFA6WuqDyPhaWopbNyE1k/VhgzmHl8pu1L4wITtmlLw==", + "devOptional": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "devOptional": true + }, "@types/superagent": { "version": "3.8.7", "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-3.8.7.tgz", diff --git a/package.json b/package.json index 6bab8c2..9d63842 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "devDependencies": { "@commitlint/cli": "^13.1.0", "@commitlint/config-conventional": "^13.1.0", + "@types/react": "^17.0.15", "@vercel/node": "^1.11.1", "chai": "^4.3.4", "chai-http": "^4.3.0", From 4d4d88fa5938aede4e6929583206a1718bd76194 Mon Sep 17 00:00:00 2001 From: weiseng18 Date: Sun, 1 Aug 2021 16:22:36 +0800 Subject: [PATCH 05/12] chore: updated tsconfig.json and next-env.d.ts on first run --- next-env.d.ts | 3 +++ tsconfig.json | 11 ++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 next-env.d.ts diff --git a/next-env.d.ts b/next-env.d.ts new file mode 100644 index 0000000..c6643fd --- /dev/null +++ b/next-env.d.ts @@ -0,0 +1,3 @@ +/// +/// +/// diff --git a/tsconfig.json b/tsconfig.json index a9317d8..bc9ab3f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,6 +7,15 @@ "outDir": "./build", "esModuleInterop": true, "allowJs": true, - "noImplicitAny": true + "noImplicitAny": true, + "lib": ["dom", "dom.iterable", "esnext"], + "skipLibCheck": true, + "strict": false, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve" } } From b848fd0a6b502eca0fcb323c51acb2d98ac95da1 Mon Sep 17 00:00:00 2001 From: weiseng18 Date: Sun, 1 Aug 2021 16:25:27 +0800 Subject: [PATCH 06/12] chore: add baseUrl to tsconfig.json --- tsconfig.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tsconfig.json b/tsconfig.json index bc9ab3f..3440dcb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,6 +5,7 @@ "target": "es6", "module": "commonjs", "outDir": "./build", + "baseUrl": "./", "esModuleInterop": true, "allowJs": true, "noImplicitAny": true, From c43b27585f7c26548f75255c897b11a66d24df5d Mon Sep 17 00:00:00 2001 From: weiseng18 Date: Sun, 1 Aug 2021 16:32:25 +0800 Subject: [PATCH 07/12] chore: install @types/test-listen --- package-lock.json | 19 +++++++++++++++++++ package.json | 1 + 2 files changed, 20 insertions(+) diff --git a/package-lock.json b/package-lock.json index a7397ac..ea02869 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "@commitlint/cli": "^13.1.0", "@commitlint/config-conventional": "^13.1.0", "@types/react": "^17.0.15", + "@types/test-listen": "^1.1.0", "@vercel/node": "^1.11.1", "chai": "^4.3.4", "chai-http": "^4.3.0", @@ -2462,6 +2463,15 @@ "@types/node": "*" } }, + "node_modules/@types/test-listen": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/test-listen/-/test-listen-1.1.0.tgz", + "integrity": "sha512-y6ZfbSzYHniCeY6ZAzsQjSAdJInNVoEz4Uhsb81W+RCoNYA59yoG/+XbqPqCPj2KCU3Wa6RFWSozutkGIHIsNQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/tinycolor2": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.2.tgz", @@ -9885,6 +9895,15 @@ "@types/node": "*" } }, + "@types/test-listen": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/test-listen/-/test-listen-1.1.0.tgz", + "integrity": "sha512-y6ZfbSzYHniCeY6ZAzsQjSAdJInNVoEz4Uhsb81W+RCoNYA59yoG/+XbqPqCPj2KCU3Wa6RFWSozutkGIHIsNQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/tinycolor2": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.2.tgz", diff --git a/package.json b/package.json index 9d63842..a566343 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "@commitlint/cli": "^13.1.0", "@commitlint/config-conventional": "^13.1.0", "@types/react": "^17.0.15", + "@types/test-listen": "^1.1.0", "@vercel/node": "^1.11.1", "chai": "^4.3.4", "chai-http": "^4.3.0", From 64dc3075113ce21fd4571d8423845b8b7daa9af8 Mon Sep 17 00:00:00 2001 From: weiseng18 Date: Sun, 1 Aug 2021 16:34:55 +0800 Subject: [PATCH 08/12] chore: install @types/mocha --- package-lock.json | 13 +++++++++++++ package.json | 1 + 2 files changed, 14 insertions(+) diff --git a/package-lock.json b/package-lock.json index ea02869..ed85b8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,7 @@ "devDependencies": { "@commitlint/cli": "^13.1.0", "@commitlint/config-conventional": "^13.1.0", + "@types/mocha": "^9.0.0", "@types/react": "^17.0.15", "@types/test-listen": "^1.1.0", "@vercel/node": "^1.11.1", @@ -2414,6 +2415,12 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, + "node_modules/@types/mocha": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", + "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", + "dev": true + }, "node_modules/@types/node": { "version": "16.4.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.2.tgz", @@ -9846,6 +9853,12 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, + "@types/mocha": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", + "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", + "dev": true + }, "@types/node": { "version": "16.4.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.2.tgz", diff --git a/package.json b/package.json index a566343..bb39212 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "devDependencies": { "@commitlint/cli": "^13.1.0", "@commitlint/config-conventional": "^13.1.0", + "@types/mocha": "^9.0.0", "@types/react": "^17.0.15", "@types/test-listen": "^1.1.0", "@vercel/node": "^1.11.1", From 694ef3c1300f9aa27ca0d5bb8e02d16c8269a445 Mon Sep 17 00:00:00 2001 From: weiseng18 Date: Sun, 1 Aug 2021 16:53:51 +0800 Subject: [PATCH 09/12] chore: install ts-node --- package-lock.json | 3 ++- package.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index ed85b8c..04b0abd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,8 @@ "chai": "^4.3.4", "chai-http": "^4.3.0", "husky": "^7.0.1", - "mocha": "^9.0.3" + "mocha": "^9.0.3", + "ts-node": "^8.9.1" } }, "node_modules/@babel/code-frame": { diff --git a/package.json b/package.json index bb39212..50e6be5 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "chai": "^4.3.4", "chai-http": "^4.3.0", "husky": "^7.0.1", - "mocha": "^9.0.3" + "mocha": "^9.0.3", + "ts-node": "^8.9.1" } } From 26a4151598013f1e914ac6f6a7df0123e5b64887 Mon Sep 17 00:00:00 2001 From: weiseng18 Date: Sun, 1 Aug 2021 16:55:10 +0800 Subject: [PATCH 10/12] refactor: update test to be .ts --- app/tests/{index.js => index.ts} | 23 +++++++++++++---------- package.json | 2 +- 2 files changed, 14 insertions(+), 11 deletions(-) rename app/tests/{index.js => index.ts} (77%) diff --git a/app/tests/index.js b/app/tests/index.ts similarity index 77% rename from app/tests/index.js rename to app/tests/index.ts index 7d832db..b42f2d8 100644 --- a/app/tests/index.js +++ b/app/tests/index.ts @@ -1,17 +1,20 @@ // standard testing modules -const chai = require("chai") -const chaiHttp = require("chai-http") +import chai from "chai" +import chaiHttp from "chai-http" // modules that help testing serverless functions -const { createServer } = require("vercel-node-server") -const listen = require("test-listen") +import { createServer } from "vercel-node-server" +import listen from "test-listen" + +// types +import { Server } from "http" // import methods to be tested -const Test = require("../controllers/test") -const Matrix = require("../controllers/matrix") +import Test from "../controllers/test" +import Matrix from "../controllers/matrix" // beforeEach management -let route, method, server, url +let route: string, method, server: Server, url: string let testIndex = 0 const toTest = [ @@ -52,7 +55,7 @@ describe("API tests", () => { .request(url) .get(route) .then((res) => { - chai.expect(res.statusCode).to.equal(200) + chai.expect(res.status).to.equal(200) chai.expect(res.text).to.equal("API call successful") }) }) @@ -70,7 +73,7 @@ describe("API tests", () => { matrix: "[[1,2],[3,4]]", }) .then((res) => { - chai.expect(res.statusCode).to.equal(200) + chai.expect(res.status).to.equal(200) chai.expect(res.body).to.equal(-2) }) }) @@ -82,7 +85,7 @@ describe("API tests", () => { matrix: "[[1,2,3],[4,5,6],[7,8,9]]", }) .then((res) => { - chai.expect(res.statusCode).to.equal(500) + chai.expect(res.status).to.equal(500) chai.expect(res.body.message).to.equal("Unsupported") }) }) diff --git a/package.json b/package.json index 50e6be5..c0ade40 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "build": "next build", "start": "next start", "version": "auto-changelog -p -l 0 && git add CHANGELOG.md", - "test": "mocha app/tests/index.js" + "test": "mocha -r ts-node/register app/tests/index.ts" }, "repository": { "type": "git", From 0fb687185331e908c457da59e5bbbbca03a6d0b5 Mon Sep 17 00:00:00 2001 From: weiseng18 Date: Sun, 1 Aug 2021 17:11:28 +0800 Subject: [PATCH 11/12] refactor: change controller/test to .ts --- app/controllers/test.js | 5 ----- app/controllers/test.ts | 9 +++++++++ 2 files changed, 9 insertions(+), 5 deletions(-) delete mode 100644 app/controllers/test.js create mode 100644 app/controllers/test.ts diff --git a/app/controllers/test.js b/app/controllers/test.js deleted file mode 100644 index aa65941..0000000 --- a/app/controllers/test.js +++ /dev/null @@ -1,5 +0,0 @@ -const test = (req, res) => { - res.send("API call successful") -} - -module.exports = { test } diff --git a/app/controllers/test.ts b/app/controllers/test.ts new file mode 100644 index 0000000..7048dcb --- /dev/null +++ b/app/controllers/test.ts @@ -0,0 +1,9 @@ +import { VercelRequest, VercelResponse } from "@vercel/node" + +const test = (req: VercelRequest, res: VercelResponse) => { + res.send("API call successful") +} + +export default { + test, +} From b2fa15d1e0756448ec8cd7b32214c95fdd911094 Mon Sep 17 00:00:00 2001 From: weiseng18 Date: Sun, 1 Aug 2021 19:40:33 +0800 Subject: [PATCH 12/12] refactor: change controller/matrix to .ts --- app/controllers/{matrix.js => matrix.ts} | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) rename app/controllers/{matrix.js => matrix.ts} (54%) diff --git a/app/controllers/matrix.js b/app/controllers/matrix.ts similarity index 54% rename from app/controllers/matrix.js rename to app/controllers/matrix.ts index 225b061..3d0944b 100644 --- a/app/controllers/matrix.js +++ b/app/controllers/matrix.ts @@ -1,5 +1,11 @@ -const calcDeterminant = (req, res) => { - const matrix = JSON.parse(req.query.matrix) +import { VercelRequest, VercelResponse } from "@vercel/node" + +const calcDeterminant = (req: VercelRequest, res: VercelResponse) => { + let matrix + // string array + if (Array.isArray(req.query.matrix)) + matrix = JSON.parse(req.query.matrix.join()) + else matrix = JSON.parse(req.query.matrix) const rows = matrix.length const cols = matrix[0].length @@ -18,4 +24,6 @@ const calcDeterminant = (req, res) => { } } -module.exports = { calcDeterminant } +export default { + calcDeterminant, +}