Commit 50f97279 authored by nanahira's avatar nanahira

get rid of express.Response

parent 68a40801
{ {
"collection": "@nestjs/schematics", "collection": "@nestjs/schematics",
"sourceRoot": "src" "sourceRoot": "src",
"compilerOptions": {
"plugins": ["@nestjs/swagger"]
}
} }
...@@ -872,6 +872,11 @@ ...@@ -872,6 +872,11 @@
"uuid": "8.3.1" "uuid": "8.3.1"
} }
}, },
"@nestjs/mapped-types": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-0.4.0.tgz",
"integrity": "sha512-TVtd/aTb7EqPhVczdeuvzF9dY0fyE3ivvCstc2eO+AkNqrfzSG1kXYYiUUznKjd0qDa8g2TmPSmHUQ21AXsV1Q=="
},
"@nestjs/platform-express": { "@nestjs/platform-express": {
"version": "7.5.5", "version": "7.5.5",
"resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-7.5.5.tgz", "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-7.5.5.tgz",
...@@ -922,6 +927,31 @@ ...@@ -922,6 +927,31 @@
} }
} }
}, },
"@nestjs/serve-static": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@nestjs/serve-static/-/serve-static-2.1.4.tgz",
"integrity": "sha512-w2PpLKzQOB8rJ+vMOy28xm8jwE8VjJfA9U+KOm0H0OY62g2oOWJ+OQPSDogP7XxAzZwq+Bt8wNU2oS8+z6v6Zg==",
"requires": {
"path-to-regexp": "0.1.7"
},
"dependencies": {
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
}
}
},
"@nestjs/swagger": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-4.8.0.tgz",
"integrity": "sha512-YU+ahCOoOTZwSHrODHBiQDCqi7GWEjmSFg3Tot/lwVuQ321/3fIOz/lf+ehVQ5DFr7nVMhB7BRWFJLtE/+NhqQ==",
"requires": {
"@nestjs/mapped-types": "0.4.0",
"lodash": "4.17.21",
"path-to-regexp": "3.2.0"
}
},
"@nestjs/testing": { "@nestjs/testing": {
"version": "7.5.5", "version": "7.5.5",
"resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-7.5.5.tgz", "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-7.5.5.tgz",
...@@ -1005,9 +1035,9 @@ ...@@ -1005,9 +1035,9 @@
} }
}, },
"@sqltools/formatter": { "@sqltools/formatter": {
"version": "1.2.2", "version": "1.2.3",
"resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.2.tgz", "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.3.tgz",
"integrity": "sha512-/5O7Fq6Vnv8L6ucmPjaWbVG1XkP4FO+w5glqfkIsq3Xw4oyNAdJddbnYodNDAfjVUvo/rrSCTom4kAND7T1o5Q==" "integrity": "sha512-O3uyB/JbkAEMZaP3YqyHH7TMnex7tWyCbCI4EfJdOCoN6HIhqdJBWTM6aCCiWQ/5f5wxjgU735QAIpJbjDvmzg=="
}, },
"@types/anymatch": { "@types/anymatch": {
"version": "1.3.1", "version": "1.3.1",
...@@ -1067,9 +1097,9 @@ ...@@ -1067,9 +1097,9 @@
} }
}, },
"@types/connect": { "@types/connect": {
"version": "3.4.33", "version": "3.4.34",
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz",
"integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/node": "*" "@types/node": "*"
...@@ -1108,21 +1138,21 @@ ...@@ -1108,21 +1138,21 @@
"dev": true "dev": true
}, },
"@types/express": { "@types/express": {
"version": "4.17.9", "version": "4.17.12",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.9.tgz", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.12.tgz",
"integrity": "sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw==", "integrity": "sha512-pTYas6FrP15B1Oa0bkN5tQMNqOcVXa9j4FTFtO8DWI9kppKib+6NJtfTOOLcwxuuYvcX2+dVG6et1SxW/Kc17Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/body-parser": "*", "@types/body-parser": "*",
"@types/express-serve-static-core": "*", "@types/express-serve-static-core": "^4.17.18",
"@types/qs": "*", "@types/qs": "*",
"@types/serve-static": "*" "@types/serve-static": "*"
} }
}, },
"@types/express-serve-static-core": { "@types/express-serve-static-core": {
"version": "4.17.14", "version": "4.17.20",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.14.tgz", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.20.tgz",
"integrity": "sha512-uFTLwu94TfUFMToXNgRZikwPuZdOtDgs3syBtAIr/OXorL1kJqUJT9qCLnRZ5KBOWfZQikQ2xKgR2tnDj1OgDA==", "integrity": "sha512-8qqFN4W53IEWa9bdmuVrUcVkFemQWnt5DKPQ/oa8xKDYgtjCr2OO6NX5TIK49NLFr3mPYU2cLh92DQquC3oWWQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/node": "*", "@types/node": "*",
...@@ -1130,14 +1160,6 @@ ...@@ -1130,14 +1160,6 @@
"@types/range-parser": "*" "@types/range-parser": "*"
} }
}, },
"@types/formidable": {
"version": "1.0.32",
"resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-1.0.32.tgz",
"integrity": "sha512-jOAB5+GFW+C+2xdvUcpd/CnYg2rD5xCyagJLBJU+9PB4a/DKmsAqS9yZI3j/Q9zwvM7ztPHaAIH1ijzp4cezdQ==",
"requires": {
"@types/node": "*"
}
},
"@types/graceful-fs": { "@types/graceful-fs": {
"version": "4.1.4", "version": "4.1.4",
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz",
...@@ -1193,12 +1215,27 @@ ...@@ -1193,12 +1215,27 @@
"integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
"dev": true "dev": true
}, },
"@types/lodash": {
"version": "4.14.170",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.170.tgz",
"integrity": "sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q==",
"dev": true
},
"@types/mime": { "@types/mime": {
"version": "2.0.3", "version": "1.3.2",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
"integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==", "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==",
"dev": true "dev": true
}, },
"@types/multer": {
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.5.tgz",
"integrity": "sha512-9b/0a8JyrR0r2nQhL73JR86obWL7cogfX12augvlrvcpciCo/hkvEsgu80Z4S2g2DHGVXHr8pUIi1VhqFJ8Ufw==",
"dev": true,
"requires": {
"@types/express": "*"
}
},
"@types/node": { "@types/node": {
"version": "14.14.10", "version": "14.14.10",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz",
...@@ -1231,9 +1268,9 @@ ...@@ -1231,9 +1268,9 @@
"dev": true "dev": true
}, },
"@types/qs": { "@types/qs": {
"version": "6.9.5", "version": "6.9.6",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz",
"integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==", "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==",
"dev": true "dev": true
}, },
"@types/range-parser": { "@types/range-parser": {
...@@ -1243,12 +1280,12 @@ ...@@ -1243,12 +1280,12 @@
"dev": true "dev": true
}, },
"@types/serve-static": { "@types/serve-static": {
"version": "1.13.8", "version": "1.13.9",
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.8.tgz", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz",
"integrity": "sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA==", "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/mime": "*", "@types/mime": "^1",
"@types/node": "*" "@types/node": "*"
} }
}, },
...@@ -1311,6 +1348,11 @@ ...@@ -1311,6 +1348,11 @@
"resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.10.24.tgz", "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.10.24.tgz",
"integrity": "sha512-T3NQD8hXNW2sRsSbLNjF/aBo18MyJlbw0lSpQHB/eZZtScPdexN4HSa8cByYwTw9Wy7KuOFr81mlDQcQQaZ79w==" "integrity": "sha512-T3NQD8hXNW2sRsSbLNjF/aBo18MyJlbw0lSpQHB/eZZtScPdexN4HSa8cByYwTw9Wy7KuOFr81mlDQcQQaZ79w=="
}, },
"@types/validator": {
"version": "13.1.3",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.1.3.tgz",
"integrity": "sha512-DaOWN1zf7j+8nHhqXhIgNmS+ltAC53NXqGxYuBhWqWgqolRhddKzfZU814lkHQSTG0IUfQxU7Cg0gb8fFWo2mA=="
},
"@types/webpack": { "@types/webpack": {
"version": "4.41.25", "version": "4.41.25",
"resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.25.tgz", "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.25.tgz",
...@@ -1359,6 +1401,11 @@ ...@@ -1359,6 +1401,11 @@
"integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==",
"dev": true "dev": true
}, },
"@types/zen-observable": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.2.tgz",
"integrity": "sha512-HrCIVMLjE1MOozVoD86622S7aunluLb2PJdPfb3nYiEtohm8mIB/vyv0Fd37AdeMFrTUQXEunw78YloMA3Qilg=="
},
"@typescript-eslint/eslint-plugin": { "@typescript-eslint/eslint-plugin": {
"version": "4.8.2", "version": "4.8.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.8.2.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.8.2.tgz",
...@@ -1859,6 +1906,7 @@ ...@@ -1859,6 +1906,7 @@
"version": "1.0.10", "version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": { "requires": {
"sprintf-js": "~1.0.2" "sprintf-js": "~1.0.2"
} }
...@@ -2121,6 +2169,11 @@ ...@@ -2121,6 +2169,11 @@
"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
"dev": true "dev": true
}, },
"bignumber.js": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
"integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
},
"binary-extensions": { "binary-extensions": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
...@@ -2209,12 +2262,12 @@ ...@@ -2209,12 +2262,12 @@
} }
}, },
"buffer": { "buffer": {
"version": "5.7.1", "version": "6.0.3",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
"requires": { "requires": {
"base64-js": "^1.3.1", "base64-js": "^1.3.1",
"ieee754": "^1.1.13" "ieee754": "^1.2.1"
} }
}, },
"buffer-from": { "buffer-from": {
...@@ -2276,7 +2329,8 @@ ...@@ -2276,7 +2329,8 @@
"camelcase": { "camelcase": {
"version": "5.3.1", "version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
}, },
"caniuse-lite": { "caniuse-lite": {
"version": "1.0.30001161", "version": "1.0.30001161",
...@@ -2369,6 +2423,11 @@ ...@@ -2369,6 +2423,11 @@
"integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==",
"dev": true "dev": true
}, },
"class-transformer": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.4.0.tgz",
"integrity": "sha512-ETWD/H2TbWbKEi7m9N4Km5+cw1hNcqJSxlSYhsLsNjQzWWiZIYA1zafxpK9PwVfaZ6AqR5rrjPVUBGESm5tQUA=="
},
"class-utils": { "class-utils": {
"version": "0.3.6", "version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
...@@ -2392,6 +2451,16 @@ ...@@ -2392,6 +2451,16 @@
} }
} }
}, },
"class-validator": {
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.1.tgz",
"integrity": "sha512-zWIeYFhUitvAHBwNhDdCRK09hWx+P0HUwFE8US8/CxFpMVzkUK8RJl7yOIE+BVu2lxyPNgeOaFv78tLE47jBIg==",
"requires": {
"@types/validator": "^13.1.3",
"libphonenumber-js": "^1.9.7",
"validator": "^13.5.2"
}
},
"cli-cursor": { "cli-cursor": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
...@@ -2402,16 +2471,62 @@ ...@@ -2402,16 +2471,62 @@
} }
}, },
"cli-highlight": { "cli-highlight": {
"version": "2.1.8", "version": "2.1.11",
"resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.8.tgz", "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz",
"integrity": "sha512-mFuTW5UOV3/S0wZE9/1b0EcAM0XOJIhoAWPhWm5voiJ6ugVBkvYBIEL7sbHo9sEtWdEmwDIWab32qpaRI3cfqQ==", "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==",
"requires": { "requires": {
"chalk": "^4.0.0", "chalk": "^4.0.0",
"highlight.js": "^10.0.0", "highlight.js": "^10.7.1",
"mz": "^2.4.0", "mz": "^2.4.0",
"parse5": "^5.1.1", "parse5": "^5.1.1",
"parse5-htmlparser2-tree-adapter": "^6.0.0", "parse5-htmlparser2-tree-adapter": "^6.0.0",
"yargs": "^15.0.0" "yargs": "^16.0.0"
},
"dependencies": {
"cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"requires": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^7.0.0"
}
},
"wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"requires": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
}
},
"y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
},
"yargs": {
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"requires": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.0",
"y18n": "^5.0.5",
"yargs-parser": "^20.2.2"
}
},
"yargs-parser": {
"version": "20.2.7",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz",
"integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw=="
}
} }
}, },
"cli-spinners": { "cli-spinners": {
...@@ -2474,6 +2589,7 @@ ...@@ -2474,6 +2589,7 @@
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
"integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
"dev": true,
"requires": { "requires": {
"string-width": "^4.2.0", "string-width": "^4.2.0",
"strip-ansi": "^6.0.0", "strip-ansi": "^6.0.0",
...@@ -2705,6 +2821,21 @@ ...@@ -2705,6 +2821,21 @@
"which": "^2.0.1" "which": "^2.0.1"
} }
}, },
"crypto-random-string": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-3.3.1.tgz",
"integrity": "sha512-5j88ECEn6h17UePrLi6pn1JcLtAiANa3KExyr9y9Z5vo2mv56Gh3I4Aja/B9P9uyMwyxNHAHWv+nE72f30T5Dg==",
"requires": {
"type-fest": "^0.8.1"
},
"dependencies": {
"type-fest": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
"integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
}
}
},
"cssom": { "cssom": {
"version": "0.4.4", "version": "0.4.4",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
...@@ -2758,7 +2889,8 @@ ...@@ -2758,7 +2889,8 @@
"decamelize": { "decamelize": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
"dev": true
}, },
"decimal.js": { "decimal.js": {
"version": "10.2.1", "version": "10.2.1",
...@@ -2935,9 +3067,9 @@ ...@@ -2935,9 +3067,9 @@
} }
}, },
"dotenv": { "dotenv": {
"version": "8.2.0", "version": "8.6.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
"integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g=="
}, },
"ecc-jsbn": { "ecc-jsbn": {
"version": "0.1.2", "version": "0.1.2",
...@@ -3251,7 +3383,8 @@ ...@@ -3251,7 +3383,8 @@
"esprima": { "esprima": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true
}, },
"esquery": { "esquery": {
"version": "1.3.1", "version": "1.3.1",
...@@ -3648,6 +3781,7 @@ ...@@ -3648,6 +3781,7 @@
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"requires": { "requires": {
"locate-path": "^5.0.0", "locate-path": "^5.0.0",
"path-exists": "^4.0.0" "path-exists": "^4.0.0"
...@@ -3730,7 +3864,8 @@ ...@@ -3730,7 +3864,8 @@
"formidable": { "formidable": {
"version": "1.2.2", "version": "1.2.2",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz",
"integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==" "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==",
"dev": true
}, },
"forwarded": { "forwarded": {
"version": "0.1.2", "version": "0.1.2",
...@@ -4103,9 +4238,9 @@ ...@@ -4103,9 +4238,9 @@
} }
}, },
"highlight.js": { "highlight.js": {
"version": "10.4.0", "version": "10.7.2",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.4.0.tgz", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.2.tgz",
"integrity": "sha512-EfrUGcQ63oLJbj0J0RI9ebX6TAITbsDBLbsjr881L/X5fMO9+oadKzEF21C7R3ULKG6Gv3uoab2HiqVJa/4+oA==" "integrity": "sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg=="
}, },
"hosted-git-info": { "hosted-git-info": {
"version": "2.8.8", "version": "2.8.8",
...@@ -5026,6 +5161,7 @@ ...@@ -5026,6 +5161,7 @@
"version": "3.14.0", "version": "3.14.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
"integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
"dev": true,
"requires": { "requires": {
"argparse": "^1.0.7", "argparse": "^1.0.7",
"esprima": "^4.0.0" "esprima": "^4.0.0"
...@@ -5183,6 +5319,11 @@ ...@@ -5183,6 +5319,11 @@
"type-check": "~0.4.0" "type-check": "~0.4.0"
} }
}, },
"libphonenumber-js": {
"version": "1.9.19",
"resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.9.19.tgz",
"integrity": "sha512-RjStfSE63LvXQEBw7pgQHPkY35z8feiMjC9wLvL1Hbt8PbhxpRrACwMXmLQgabb+IpVdcEx+olh8ll7UDXXkfA=="
},
"lines-and-columns": { "lines-and-columns": {
"version": "1.1.6", "version": "1.1.6",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
...@@ -5210,15 +5351,15 @@ ...@@ -5210,15 +5351,15 @@
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"requires": { "requires": {
"p-locate": "^4.1.0" "p-locate": "^4.1.0"
} }
}, },
"lodash": { "lodash": {
"version": "4.17.20", "version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
"dev": true
}, },
"lodash.memoize": { "lodash.memoize": {
"version": "4.1.2", "version": "4.1.2",
...@@ -5524,6 +5665,46 @@ ...@@ -5524,6 +5665,46 @@
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
"dev": true "dev": true
}, },
"mysql": {
"version": "2.18.1",
"resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
"integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
"requires": {
"bignumber.js": "9.0.0",
"readable-stream": "2.3.7",
"safe-buffer": "5.1.2",
"sqlstring": "2.3.1"
},
"dependencies": {
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "~5.1.0"
}
}
}
},
"mz": { "mz": {
"version": "2.7.0", "version": "2.7.0",
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
...@@ -6028,6 +6209,7 @@ ...@@ -6028,6 +6209,7 @@
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
"requires": { "requires": {
"p-try": "^2.0.0" "p-try": "^2.0.0"
} }
...@@ -6036,6 +6218,7 @@ ...@@ -6036,6 +6218,7 @@
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"requires": { "requires": {
"p-limit": "^2.2.0" "p-limit": "^2.2.0"
} }
...@@ -6043,7 +6226,8 @@ ...@@ -6043,7 +6226,8 @@
"p-try": { "p-try": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
}, },
"packet-reader": { "packet-reader": {
"version": "1.0.0", "version": "1.0.0",
...@@ -6110,7 +6294,8 @@ ...@@ -6110,7 +6294,8 @@
"path-exists": { "path-exists": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true
}, },
"path-is-absolute": { "path-is-absolute": {
"version": "1.0.1", "version": "1.0.1",
...@@ -6596,7 +6781,8 @@ ...@@ -6596,7 +6781,8 @@
"require-main-filename": { "require-main-filename": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"dev": true
}, },
"resolve": { "resolve": {
"version": "1.19.0", "version": "1.19.0",
...@@ -7411,7 +7597,8 @@ ...@@ -7411,7 +7597,8 @@
"sprintf-js": { "sprintf-js": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
}, },
"sqlite3": { "sqlite3": {
"version": "5.0.0", "version": "5.0.0",
...@@ -7423,6 +7610,11 @@ ...@@ -7423,6 +7610,11 @@
"node-pre-gyp": "^0.11.0" "node-pre-gyp": "^0.11.0"
} }
}, },
"sqlstring": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
"integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
},
"sshpk": { "sshpk": {
"version": "1.16.1", "version": "1.16.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
...@@ -7663,6 +7855,19 @@ ...@@ -7663,6 +7855,19 @@
"supports-color": "^7.0.0" "supports-color": "^7.0.0"
} }
}, },
"swagger-ui-dist": {
"version": "3.49.0",
"resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-3.49.0.tgz",
"integrity": "sha512-R1+eT16XNP1bBLfacISifZAkFJlpwvWsS2vVurF5pbIFZnmCasD/hj+9r/q7urYdQyb0B6v11mDnuYU7rUpfQg=="
},
"swagger-ui-express": {
"version": "4.1.6",
"resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.1.6.tgz",
"integrity": "sha512-Xs2BGGudvDBtL7RXcYtNvHsFtP1DBFPMJFRxHe5ez/VG/rzVOEjazJOOSc/kSCyxreCTKfJrII6MJlL9a6t8vw==",
"requires": {
"swagger-ui-dist": "^3.18.1"
}
},
"symbol-observable": { "symbol-observable": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-2.0.3.tgz", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-2.0.3.tgz",
...@@ -8234,28 +8439,34 @@ ...@@ -8234,28 +8439,34 @@
} }
}, },
"typeorm": { "typeorm": {
"version": "0.2.29", "version": "0.2.32",
"resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.29.tgz", "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.32.tgz",
"integrity": "sha512-ih1vrTe3gEAGKRcWlcsTRxTL7gNjacQE498wVGuJ3ZRujtMqPZlbAWuC7xDzWCRjQnkZYNwZQeG9UgKfxSHB5g==", "integrity": "sha512-LOBZKZ9As3f8KRMPCUT2H0JZbZfWfkcUnO3w/1BFAbL/X9+cADTF6bczDGGaKVENJ3P8SaKheKmBgpt5h1x+EQ==",
"requires": { "requires": {
"@sqltools/formatter": "1.2.2", "@sqltools/formatter": "^1.2.2",
"app-root-path": "^3.0.0", "app-root-path": "^3.0.0",
"buffer": "^5.5.0", "buffer": "^6.0.3",
"chalk": "^4.1.0", "chalk": "^4.1.0",
"cli-highlight": "^2.1.4", "cli-highlight": "^2.1.10",
"debug": "^4.1.1", "debug": "^4.3.1",
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
"glob": "^7.1.6", "glob": "^7.1.6",
"js-yaml": "^3.14.0", "js-yaml": "^4.0.0",
"mkdirp": "^1.0.4", "mkdirp": "^1.0.4",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"sha.js": "^2.4.11", "sha.js": "^2.4.11",
"tslib": "^1.13.0", "tslib": "^2.1.0",
"xml2js": "^0.4.23", "xml2js": "^0.4.23",
"yargonaut": "^1.1.2", "yargonaut": "^1.1.4",
"yargs": "^16.0.3" "yargs": "^16.2.0",
"zen-observable-ts": "^1.0.0"
}, },
"dependencies": { "dependencies": {
"argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
},
"cliui": { "cliui": {
"version": "7.0.4", "version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
...@@ -8274,6 +8485,14 @@ ...@@ -8274,6 +8485,14 @@
"ms": "2.1.2" "ms": "2.1.2"
} }
}, },
"js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"requires": {
"argparse": "^2.0.1"
}
},
"mkdirp": { "mkdirp": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
...@@ -8285,9 +8504,9 @@ ...@@ -8285,9 +8504,9 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}, },
"tslib": { "tslib": {
"version": "1.14.1", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w=="
}, },
"wrap-ansi": { "wrap-ansi": {
"version": "7.0.0", "version": "7.0.0",
...@@ -8300,14 +8519,14 @@ ...@@ -8300,14 +8519,14 @@
} }
}, },
"y18n": { "y18n": {
"version": "5.0.5", "version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==" "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
}, },
"yargs": { "yargs": {
"version": "16.1.1", "version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"requires": { "requires": {
"cliui": "^7.0.2", "cliui": "^7.0.2",
"escalade": "^3.1.1", "escalade": "^3.1.1",
...@@ -8319,9 +8538,9 @@ ...@@ -8319,9 +8538,9 @@
} }
}, },
"yargs-parser": { "yargs-parser": {
"version": "20.2.4", "version": "20.2.7",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz",
"integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw=="
} }
} }
}, },
...@@ -8467,6 +8686,11 @@ ...@@ -8467,6 +8686,11 @@
"spdx-expression-parse": "^3.0.0" "spdx-expression-parse": "^3.0.0"
} }
}, },
"validator": {
"version": "13.6.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.6.0.tgz",
"integrity": "sha512-gVgKbdbHgtxpRyR8K0O6oFZPhhB5tT1jeEHZR0Znr9Svg03U0+r9DXWMrnRAB+HtCStDQKlaIZm42tVsVjqtjg=="
},
"vary": { "vary": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
...@@ -8657,7 +8881,8 @@ ...@@ -8657,7 +8881,8 @@
"which-module": { "which-module": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
"dev": true
}, },
"wide-align": { "wide-align": {
"version": "1.1.3", "version": "1.1.3",
...@@ -8715,6 +8940,7 @@ ...@@ -8715,6 +8940,7 @@
"version": "6.2.0", "version": "6.2.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
"integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"dev": true,
"requires": { "requires": {
"ansi-styles": "^4.0.0", "ansi-styles": "^4.0.0",
"string-width": "^4.1.0", "string-width": "^4.1.0",
...@@ -8787,7 +9013,8 @@ ...@@ -8787,7 +9013,8 @@
"y18n": { "y18n": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
"integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
"dev": true
}, },
"yallist": { "yallist": {
"version": "3.1.1", "version": "3.1.1",
...@@ -8851,6 +9078,7 @@ ...@@ -8851,6 +9078,7 @@
"version": "15.4.1", "version": "15.4.1",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
"integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
"dev": true,
"requires": { "requires": {
"cliui": "^6.0.0", "cliui": "^6.0.0",
"decamelize": "^1.2.0", "decamelize": "^1.2.0",
...@@ -8869,6 +9097,7 @@ ...@@ -8869,6 +9097,7 @@
"version": "18.1.3", "version": "18.1.3",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
"integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
"dev": true,
"requires": { "requires": {
"camelcase": "^5.0.0", "camelcase": "^5.0.0",
"decamelize": "^1.2.0" "decamelize": "^1.2.0"
...@@ -8885,6 +9114,20 @@ ...@@ -8885,6 +9114,20 @@
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true "dev": true
},
"zen-observable": {
"version": "0.8.15",
"resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz",
"integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ=="
},
"zen-observable-ts": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.0.0.tgz",
"integrity": "sha512-KmWcbz+9kKUeAQ8btY8m1SsEFgBcp7h/Uf3V5quhan7ZWdjGsf0JcGLULQiwOZibbFWnHkYq8Nn2AZbJabovQg==",
"requires": {
"@types/zen-observable": "^0.8.2",
"zen-observable": "^0.8.15"
}
} }
} }
} }
...@@ -24,30 +24,39 @@ ...@@ -24,30 +24,39 @@
"@nestjs/common": "^7.5.1", "@nestjs/common": "^7.5.1",
"@nestjs/core": "^7.5.1", "@nestjs/core": "^7.5.1",
"@nestjs/platform-express": "^7.5.1", "@nestjs/platform-express": "^7.5.1",
"@nestjs/serve-static": "^2.1.4",
"@nestjs/swagger": "^4.8.0",
"@nestjs/typeorm": "^7.1.5", "@nestjs/typeorm": "^7.1.5",
"@types/formidable": "^1.0.32",
"@types/node-schedule": "^1.3.1", "@types/node-schedule": "^1.3.1",
"@types/underscore": "^1.10.24", "@types/underscore": "^1.10.24",
"axios": "^0.21.1", "axios": "^0.21.1",
"bad-words-chinese": "^1.0.2", "bad-words-chinese": "^1.0.2",
"body-parser": "^1.19.0", "body-parser": "^1.19.0",
"formidable": "^1.2.2", "class-transformer": "^0.4.0",
"class-validator": "^0.13.1",
"crypto-random-string": "^3.3.1",
"lodash": "^4.17.21",
"moment": "^2.29.1", "moment": "^2.29.1",
"multer": "^1.4.2",
"mysql": "^2.18.1",
"node-schedule": "^1.3.3", "node-schedule": "^1.3.3",
"pg": "^8.5.1", "pg": "^8.5.1",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"rxjs": "^6.6.3", "rxjs": "^6.6.3",
"sqlite3": "^5.0.0", "sqlite3": "^5.0.0",
"typeorm": "^0.2.29", "swagger-ui-express": "^4.1.6",
"typeorm": "^0.2.32",
"underscore": "^1.12.0" "underscore": "^1.12.0"
}, },
"devDependencies": { "devDependencies": {
"@nestjs/cli": "^7.5.1", "@nestjs/cli": "^7.5.1",
"@nestjs/schematics": "^7.1.3", "@nestjs/schematics": "^7.1.3",
"@nestjs/testing": "^7.5.1", "@nestjs/testing": "^7.5.1",
"@types/express": "^4.17.9", "@types/express": "^4.17.12",
"@types/jest": "^26.0.15", "@types/jest": "^26.0.15",
"@types/lodash": "^4.14.170",
"@types/multer": "^1.4.5",
"@types/node": "^14.14.6", "@types/node": "^14.14.6",
"@types/supertest": "^2.0.10", "@types/supertest": "^2.0.10",
"@typescript-eslint/eslint-plugin": "^4.6.1", "@typescript-eslint/eslint-plugin": "^4.6.1",
......
export const CardInfo = {
cn: {
'1010': '',
'1011': '',
'1012': '',
'1013': '',
'1014': '',
'1015': '',
'1016': '',
'1020': '战士',
'1021': '魔法师',
'1022': '天使',
'1023': '恶魔',
'1024': '不死',
'1025': '机械',
'1026': '',
'1027': '',
'1028': '岩石',
'1029': '鸟兽',
'1030': '植物',
'1031': '昆虫',
'1032': '',
'1033': '',
'1034': '',
'1035': '兽战士',
'1036': '恐龙',
'1037': '',
'1038': '海龙',
'1039': '爬虫',
'1040': '念动力',
'1041': '幻神兽',
'1042': '创造神',
'1043': '幻龙',
'1044': '电子界',
'1050': '怪兽',
'1051': '魔法',
'1052': '陷阱',
'1053': '???',
'1054': '通常',
'1055': '效果',
'1056': '融合',
'1057': '仪式',
'1058': '陷阱怪兽',
'1059': '灵魂',
'1060': '同盟',
'1061': '二重',
'1062': '调整',
'1063': '同调',
'1064': '衍生物',
'1065': '???',
'1066': '速攻',
'1067': '永续',
'1068': '装备',
'1069': '场地',
'1070': '反击',
'1071': '反转',
'1072': '卡通',
'1073': '超量',
'1074': '灵摆',
},
en: {
'1010': 'EARTH',
'1011': 'WATER',
'1012': 'FIRE',
'1013': 'WIND',
'1014': 'LIGHT',
'1015': 'DARK',
'1016': 'DIVINE',
'1020': 'Warrior',
'1021': 'Spellcaster',
'1022': 'Fairy',
'1023': 'Fiend',
'1024': 'Zombie',
'1025': 'Machine',
'1026': 'Aqua',
'1027': 'Pyro',
'1028': 'Rock',
'1029': 'Winged Beast',
'1030': 'Plant',
'1031': 'Insect',
'1032': 'Thunder',
'1033': 'Dragon',
'1034': 'Beast',
'1035': 'Beast-Warrior',
'1036': 'Dinosaur',
'1037': 'Fish',
'1038': 'Sea Serpent',
'1039': 'Reptile',
'1040': 'Psychic',
'1041': 'Divine-Beast',
'1042': 'Creator God',
'1043': 'Wyrm',
'1044': 'Cyberse',
'1050': 'Monster',
'1051': 'Spell',
'1052': 'Trap',
'1053': '???',
'1054': 'Normal',
'1055': 'Effect',
'1056': 'Fusion',
'1057': 'Ritual',
'1058': 'Trap Monster',
'1059': 'Spirit',
'1060': 'Union',
'1061': 'Gemini',
'1062': 'Tuner',
'1063': 'Synchro',
'1064': 'Token',
'1065': '???',
'1066': 'Quick-Play',
'1067': 'Continuous',
'1068': 'Equip',
'1069': 'Field',
'1070': 'Counter',
'1071': 'Flip',
'1072': 'Toon',
'1073': 'Xyz',
'1074': 'Pendulum',
},
};
export function getStringValueByMysticalNumber(
lang: string,
offset: number,
num: number,
) {
for (let i = 0; i < 32; i++) {
if (num & (1 << i)) {
const index = offset + i;
const key = index.toString();
return CardInfo[lang][key];
}
}
return '';
}
export class EloUtility {
static getExpScore(
expA: number,
expB: number,
scoreA: number,
scoreB: number,
) {
let rExpA = expA,
rExpB = expB;
if (scoreA === scoreB) {
rExpA += 0.5;
rExpB += 0.5;
} else if (scoreA > scoreB) {
rExpA += 1;
if (expA > expB) rExpB += 0.5;
} else if (scoreA < scoreB) {
rExpB += 1;
if (expA < expB) rExpA += 0.5;
}
return { expA: rExpA, expB: rExpB };
}
static getEloScore(rA: number, rB: number, sA: number, sB: number) {
//17.07.18 增加规则,平局不加分.
if (sA === sB) {
return { ptA: rA, ptB: rB };
}
const k = 24;
const eA = 1 / (1 + Math.pow(10, (rB - rA) / 400));
const eB = 1 / (1 + Math.pow(10, (rA - rB) / 400));
let diffA = k * (sA - eA);
// 如果算出的变动分数小于8或者大于16就按8和16计
if (diffA > 0 && diffA > 16) {
//console.log("diffA 加分大于16 按16分结算", diffA);
diffA = 16;
}
if (diffA > 0 && diffA < 8) {
//console.log("diffA 加分小于8 按8分结算", diffA);
diffA = 8;
}
if (diffA < 0 && diffA > -8) {
//console.log("diffA 扣分小于8 按8分结算算", diffA);
diffA = -8;
}
if (diffA < 0 && diffA < -15) {
//console.log("diffA 扣分大于16 按16分结算", diffA);
diffA = -15;
}
const rrA = rA + diffA;
let diffB = k * (sB - eB);
// 如果算出的变动分数小于8或者大于16就按8和16计
if (diffB > 0 && diffB > 16) {
//console.log("diffB 加分大于16 按16分结算", diffB);
diffB = 16;
}
if (diffB > 0 && diffB < 8) {
//console.log("diffB 加分小于8 按8分结算", diffB);
diffB = 8;
}
if (diffB < 0 && diffB > -8) {
//console.log("diffB 扣分小于8 按8分结算算", diffB);
diffB = -8;
}
if (diffB < 0 && diffB < -15) {
//console.log("diffB 扣分大于16 按16分结算", diffB);
diffB = -15;
}
const rrB = rB + diffB;
//console.log(diffA, diffB);
// // 加分高于16
// if( (rrB - rB) > 16 ) {
// rrB = rB + 16;
// }
// // 扣分低于8
// if( (rB - rrB) < 8 ) {
// rrB = rB - 8;
// }
return { ptA: rrA, ptB: rrB };
}
}
import { import {
BadRequestException,
Body, Body,
Controller, Controller,
ForbiddenException,
Get, Get,
HttpException,
InternalServerErrorException,
NotFoundException, NotFoundException,
Param, Param,
ParseIntPipe,
Post, Post,
Query, Query,
Req, Req,
Res, Res,
UploadedFile,
UploadedFiles, UploadedFiles,
UseInterceptors, UseInterceptors,
} from '@nestjs/common'; } from '@nestjs/common';
...@@ -15,36 +21,37 @@ import express from 'express'; ...@@ -15,36 +21,37 @@ import express from 'express';
import { AppService } from './app.service'; import { AppService } from './app.service';
import { UserInfo } from './entities/mycard/UserInfo'; import { UserInfo } from './entities/mycard/UserInfo';
import { config } from './config'; import { config } from './config';
import { import { AnyFilesInterceptor, FileInterceptor } from '@nestjs/platform-express';
AnyFilesInterceptor, import { HttpResponseService } from './http-response/http-response.service';
FilesInterceptor, import { CodeResponseDto } from './dto/CodeResponse.dto';
} from '@nestjs/platform-express'; import multer from 'multer';
import { IncomingForm } from 'formidable'; import cryptoRandomString from 'crypto-random-string';
import { join } from 'path';
import { ApiBody, ApiConsumes, ApiTags } from '@nestjs/swagger';
import { FileUploadDto } from './dto/FileUploadDto';
@Controller('api') @Controller('api')
@ApiTags('arena')
export class AppController { export class AppController {
constructor(private readonly appService: AppService) {} constructor(
private readonly appService: AppService,
private readonly httpResponseService: HttpResponseService,
) {}
@Post('score') @Post('score')
async postScore( async postScore(@Body() body: any, @Body('accesskey') accessKey) {
@Body() body: any,
@Body('accesskey') accessKey,
@Res() res: express.Response,
) {
if (accessKey !== config.accessKey) { if (accessKey !== config.accessKey) {
return res.status(403).json({ throw new ForbiddenException({
msg: 'accesskey error', msg: 'accesskey error',
}); });
} }
const message = await this.appService.postScore(body); const message = await this.appService.postScore(body);
if (message) { if (message) {
res.status(404).json({ throw new NotFoundException({ msg: message });
msg: message,
});
} else { } else {
res.status(200).json({ return {
msg: 'success', msg: 'success',
}); };
} }
} }
...@@ -54,22 +61,16 @@ export class AppController { ...@@ -54,22 +61,16 @@ export class AppController {
} }
@Get('cardinfo') @Get('cardinfo')
async getCardInfo( async getCardInfo(@Query('lang') language: string, @Query('id') id: string) {
@Query('lang') language: string,
@Query('id') id: string,
@Res() res: express.Response,
) {
const cardId = parseInt(id); const cardId = parseInt(id);
if (!cardId) { if (!cardId) {
res.status(404).end('card id is required!'); throw new BadRequestException('card id is required!');
return;
} }
const result = await this.appService.getCardInfo(cardId, language); const result = await this.appService.getCardInfo(cardId, language);
if (!result) { if (!result) {
res.status(404).end('card info not found!'); throw new NotFoundException('card not found.');
return;
} }
res.json(result); return result;
} }
@Get('report') @Get('report')
...@@ -81,60 +82,58 @@ export class AppController { ...@@ -81,60 +82,58 @@ export class AppController {
} }
@Post('activity') @Post('activity')
async updateActivity(@Body() body: any, @Res() res: express.Response) { async updateActivity(@Body() body: any): Promise<CodeResponseDto> {
const code = await this.appService.updateActivity(body); return this.httpResponseService.handlePostCodeResponse(
res.status(code).json({ code }); this.appService.updateActivity(body),
);
} }
@Get('label') @Get('label')
async getLabel(@Res() res: express.Response) { async getLabel() {
const value = await this.appService.getSiteConfig('label'); const value = await this.appService.getSiteConfig('label');
if (value != null) { if (value != null) {
res.status(200).json({ return {
code: 200, code: 200,
text: value, text: value,
}); };
} else { } else {
res.status(500).json({ throw new InternalServerErrorException(new CodeResponseDto(500));
code: 500,
});
} }
} }
@Post('label') @Post('label')
async updateLabel( async updateLabel(@Body('labelone') value: string) {
@Body('labelone') value: string, return this.httpResponseService.handlePostCodeResponse(
@Res() res: express.Response, this.appService.updateSiteConfig('label', value),
) { );
const code = await this.appService.updateSiteConfig('label', value);
res.status(code).json({ code });
} }
@Post('adSwitchChange') @Post('adSwitchChange')
async updateAdvertisementSetting( async updateAdvertisementSetting(@Body('status') value: string) {
@Body('status') value: string, return this.httpResponseService.handlePostCodeResponse(
@Res() res: express.Response, this.appService.updateSiteConfig('auto_close_ad', value),
) { );
const code = await this.appService.updateSiteConfig('auto_close_ad', value);
res.status(code).json({ code });
} }
@Post('votes') @Post('votes')
async updateVotes(@Body() body: any, @Res() res: express.Response) { async updateVotes(@Body() body: any) {
const code = await this.appService.updateVotes(body); return this.httpResponseService.handlePostCodeResponse(
res.status(code).json({ code }); this.appService.updateVotes(body),
);
} }
@Post('voteStatus') @Post('voteStatus')
async updateVoteStatus(@Body() body: any, @Res() res: express.Response) { async updateVoteStatus(@Body() body: any) {
const code = await this.appService.updateVoteStatus(body); return this.httpResponseService.handlePostCodeResponse(
res.status(code).json({ code }); this.appService.updateVoteStatus(body),
);
} }
@Post('submitVote') @Post('submitVote')
async submitVote(@Body() body: any, @Res() res: express.Response) { async submitVote(@Body() body: any) {
const code = await this.appService.submitVote(body); return this.httpResponseService.handlePostCodeResponse(
res.status(code).json({ code }); this.appService.submitVote(body),
);
} }
@Get('votes') @Get('votes')
...@@ -161,65 +160,64 @@ export class AppController { ...@@ -161,65 +160,64 @@ export class AppController {
return await this.appService.getDeckInfo(query); return await this.appService.getDeckInfo(query);
} }
@Post('upload') @Post('upload')
uploadFile(@Req() req: express.Request, @Res() res: express.Response) { @ApiConsumes('multipart/form-data')
const form = new IncomingForm(); @ApiBody({
form.encoding = 'utf-8'; description: '要上传的文件',
form.uploadDir = 'upload/'; type: FileUploadDto,
form.keepExtensions = true; })
form.maxFieldsSize = 2 * 1024 * 1024; @UseInterceptors(
form.parse(req, function (err, fields, files) { FileInterceptor('file', {
if (err) { storage: multer.diskStorage({
console.log(err); destination: (req, file, cb) => {
return res.status(500).send('upload image fail!'); cb(null, join(__dirname, '..', 'upload'));
} },
filename: (req, file, cb) => {
const response = { const customFileName = cryptoRandomString({
code: 200, length: 20,
}; type: 'alphanumeric',
if (err) { }),
response.code = 500; fileExtension = file.originalname.split('.')[1]; // get file extension from original file name
} else { cb(null, customFileName + '.' + fileExtension);
response.code = 200; },
// eslint-disable-next-line @typescript-eslint/ban-ts-comment }),
// @ts-ignore limits: {
response.path = files.file.path; fileSize: 2 * 1024 * 1024,
} },
preservePath: true,
res.status(response.code).json(response); }),
}); )
} uploadFile(@UploadedFile() file: Express.Multer.File) {
@Get('download/:id') if (!file) {
downloadFile(@Param('id') filename: string, @Res() res: express.Response) { throw new InternalServerErrorException(new CodeResponseDto(500));
if (!filename) {
res.status(400).end('Missing filename.');
} }
const filepath = `upload/${filename}`; return {
res.download(filepath, filename); code: 200,
path: file.path,
};
} }
@Get('deckdata/:id') @Get('deckdata/:id')
async getDeckData( async getDeckData(@Param('id') filename: string) {
@Param('id') filename: string,
@Res() res: express.Response,
) {
if (!filename) { if (!filename) {
res.status(400).end('Missing filename.'); throw new BadRequestException('Missing filename.');
} }
const deck = await this.appService.getDeckData(filename); const deck = await this.appService.getDeckData(filename);
if (!deck) { if (!deck) {
res.status(404).end('File not found.'); throw new NotFoundException('File not found.');
} }
res.json({ deck }); return { deck };
} }
@Post('deckdemo') @Post('deckdemo')
async submitDeckDemo(@Body() body: any, @Res() res: express.Response) { async submitDeckDemo(@Body() body: any) {
const code = await this.appService.submitDeckDemo(body); return this.httpResponseService.handlePostCodeResponse(
res.status(code).json({ code }); this.appService.submitDeckDemo(body),
);
} }
@Post('deckinfo') @Post('deckinfo')
async submitDeckInfo(@Body() body: any, @Res() res: express.Response) { async submitDeckInfo(@Body() body: any) {
const code = await this.appService.submitDeckInfo(body); return this.httpResponseService.handlePostCodeResponse(
res.status(code).json({ code }); this.appService.submitDeckInfo(body),
);
} }
@Get('history') @Get('history')
async getBattleHistory(@Query() query: any) { async getBattleHistory(@Query() query: any) {
...@@ -230,9 +228,10 @@ export class AppController { ...@@ -230,9 +228,10 @@ export class AppController {
return await this.appService.getUser(username); return await this.appService.getUser(username);
} }
@Post('ads') @Post('ads')
async updateAds(@Body() body: any, @Res() res: express.Response) { async updateAds(@Body() body: any) {
const code = await this.appService.updateAds(body); return this.httpResponseService.handlePostCodeResponse(
res.status(code).json({ code }); this.appService.updateAds(body),
);
} }
@Get('ads') @Get('ads')
async getAds(@Query() query: any) { async getAds(@Query() query: any) {
...@@ -243,27 +242,22 @@ export class AppController { ...@@ -243,27 +242,22 @@ export class AppController {
return await this.appService.getRandomAd(type); return await this.appService.getRandomAd(type);
} }
@Post('adsStatus') @Post('adsStatus')
async updateAdsStatus(@Body() body: any, @Res() res: express.Response) { async updateAdsStatus(@Body() body: any) {
const code = await this.appService.updateAdsStatus(body); return this.httpResponseService.handlePostCodeResponse(
res.status(code).json({ code }); this.appService.updateAdsStatus(body),
);
} }
@Post('adClick') @Post('adClick')
async adClick(@Body('id') id: string, @Res() res: express.Response) { async adClick(@Body('id', ParseIntPipe) id: number) {
if (!id) { return this.httpResponseService.handlePostCodeResponse(
res.status(400).json({ code: 400 }); this.appService.increaseAds(id, 'clk'),
return; );
}
const code = await this.appService.increaseAds(parseInt(id), 'clk');
res.status(code).json({ code });
} }
@Post('adImpl') @Post('adImpl')
async adImpl(@Body('id') id: string, @Res() res: express.Response) { async adImpl(@Body('id', ParseIntPipe) id: number) {
if (!id) { return this.httpResponseService.handlePostCodeResponse(
res.status(400).json({ code: 400 }); this.appService.increaseAds(id, 'impl'),
return; );
}
const code = await this.appService.increaseAds(parseInt(id), 'impl');
res.status(code).json({ code });
} }
@Get('firstwin') @Get('firstwin')
async getFirstWinActivity(@Query('username') username: string) { async getFirstWinActivity(@Query('username') username: string) {
......
...@@ -46,6 +46,11 @@ import { DeckSeason } from './entities/mycard/DeckSeason'; ...@@ -46,6 +46,11 @@ import { DeckSeason } from './entities/mycard/DeckSeason';
import { DeckWeek } from './entities/mycard/DeckWeek'; import { DeckWeek } from './entities/mycard/DeckWeek';
import { UserInfo } from './entities/mycard/UserInfo'; import { UserInfo } from './entities/mycard/UserInfo';
import { AppLogger } from './app.logger'; import { AppLogger } from './app.logger';
import { HttpResponseService } from './http-response/http-response.service';
import { EloService } from './elo/elo.service';
import { CardInfoService } from './card-info/card-info.service';
import { ServeStaticModule } from '@nestjs/serve-static';
import { join } from 'path';
const ygoproEntities = [YGOProDatabaseDatas, YGOProDatabaseTexts]; const ygoproEntities = [YGOProDatabaseDatas, YGOProDatabaseTexts];
const mycardEntities = [ const mycardEntities = [
...@@ -93,6 +98,10 @@ const mycardEntities = [ ...@@ -93,6 +98,10 @@ const mycardEntities = [
@Module({ @Module({
imports: [ imports: [
ServeStaticModule.forRoot({
rootPath: join(__dirname, '..', 'upload'),
serveRoot: '/api/download',
}),
TypeOrmModule.forRoot({ TypeOrmModule.forRoot({
synchronize: false, synchronize: false,
type: 'sqlite', type: 'sqlite',
...@@ -120,6 +129,12 @@ const mycardEntities = [ ...@@ -120,6 +129,12 @@ const mycardEntities = [
}), }),
], ],
controllers: [AppController], controllers: [AppController],
providers: [AppService, AppLogger], providers: [
AppService,
AppLogger,
HttpResponseService,
EloService,
CardInfoService,
],
}) })
export class AppModule {} export class AppModule {}
...@@ -15,7 +15,6 @@ import Filter from 'bad-words-chinese'; ...@@ -15,7 +15,6 @@ import Filter from 'bad-words-chinese';
import { ChineseDirtyWords } from './dirtyWordsChinese'; import { ChineseDirtyWords } from './dirtyWordsChinese';
import { YGOProDatabaseDatas } from './entities/ygodb/YGOProDatabaseDatas'; import { YGOProDatabaseDatas } from './entities/ygodb/YGOProDatabaseDatas';
import { YGOProDatabaseTexts } from './entities/ygodb/YGOProDatabaseTexts'; import { YGOProDatabaseTexts } from './entities/ygodb/YGOProDatabaseTexts';
import { getStringValueByMysticalNumber } from './CardInfo';
import moment from 'moment'; import moment from 'moment';
import { BattleHistory } from './entities/mycard/BattleHistory'; import { BattleHistory } from './entities/mycard/BattleHistory';
import _ from 'underscore'; import _ from 'underscore';
...@@ -24,7 +23,6 @@ import { AppLogger } from './app.logger'; ...@@ -24,7 +23,6 @@ import { AppLogger } from './app.logger';
import axios from 'axios'; import axios from 'axios';
import { config } from './config'; import { config } from './config';
import qs from 'qs'; import qs from 'qs';
import { EloUtility } from './EloUtility';
import { Votes } from './entities/mycard/Votes'; import { Votes } from './entities/mycard/Votes';
import { VoteResult } from './entities/mycard/VoteResult'; import { VoteResult } from './entities/mycard/VoteResult';
import { promises as fs } from 'fs'; import { promises as fs } from 'fs';
...@@ -32,10 +30,11 @@ import { scheduleJob } from 'node-schedule'; ...@@ -32,10 +30,11 @@ import { scheduleJob } from 'node-schedule';
import { DeckInfo } from './entities/mycard/DeckInfo'; import { DeckInfo } from './entities/mycard/DeckInfo';
import { DeckInfoHistory } from './entities/mycard/DeckInfoHistory'; import { DeckInfoHistory } from './entities/mycard/DeckInfoHistory';
import { DeckDemo } from './entities/mycard/DeckDemo'; import { DeckDemo } from './entities/mycard/DeckDemo';
import { Deck } from './entities/mycard/Deck';
import { Ads } from './entities/mycard/Ads'; import { Ads } from './entities/mycard/Ads';
import { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity'; import { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity';
import { DeckInfoOrHistory } from './entities/mycard/DeckInfoOrHistory'; import { DeckInfoOrHistory } from './entities/mycard/DeckInfoOrHistory';
import { EloService } from './elo/elo.service';
import { CardInfoService } from './card-info/card-info.service';
const attrOffset = 1010; const attrOffset = 1010;
const raceOffset = 1020; const raceOffset = 1020;
...@@ -99,7 +98,7 @@ interface VoteOption { ...@@ -99,7 +98,7 @@ interface VoteOption {
percentage: number; percentage: number;
} }
interface DeckInfoCard { export interface DeckInfoCard {
id: number; id: number;
num: number; num: number;
name?: string; name?: string;
...@@ -117,6 +116,8 @@ export class AppService { ...@@ -117,6 +116,8 @@ export class AppService {
@InjectConnection('mycard') @InjectConnection('mycard')
private mcdb: Connection, private mcdb: Connection,
private log: AppLogger, private log: AppLogger,
private eloService: EloService,
private cardInfoService: CardInfoService,
) { ) {
this.log.setContext('ygopro-arena-revive'); this.log.setContext('ygopro-arena-revive');
this.chineseDirtyFilter = new Filter({ this.chineseDirtyFilter = new Filter({
...@@ -259,17 +260,17 @@ export class AppService { ...@@ -259,17 +260,17 @@ export class AppService {
result.category = cardDatas.category; result.category = cardDatas.category;
result.type = getStringValueByMysticalNumber( result.type = this.cardInfoService.getStringValueByMysticalNumber(
lang, lang,
typeOffset, typeOffset,
cardDatas.type, cardDatas.type,
); );
result.race = getStringValueByMysticalNumber( result.race = this.cardInfoService.getStringValueByMysticalNumber(
lang, lang,
raceOffset, raceOffset,
cardDatas.race, cardDatas.race,
); );
result.attribute = getStringValueByMysticalNumber( result.attribute = this.cardInfoService.getStringValueByMysticalNumber(
lang, lang,
attrOffset, attrOffset,
cardDatas.attribute, cardDatas.attribute,
...@@ -630,8 +631,8 @@ export class AppService { ...@@ -630,8 +631,8 @@ export class AppService {
} }
} }
const ptResult = EloUtility.getEloScore(userA.pt, userB.pt, sa, sb); const ptResult = this.eloService.getEloScore(userA.pt, userB.pt, sa, sb);
const expResult = EloUtility.getExpScore( const expResult = this.eloService.getExpScore(
userA.exp, userA.exp,
userB.exp, userB.exp,
userscoreA, userscoreA,
...@@ -849,7 +850,7 @@ export class AppService { ...@@ -849,7 +850,7 @@ export class AppService {
} }
}); });
} else { } else {
const expResult = EloUtility.getExpScore( const expResult = this.eloService.getExpScore(
userA.exp, userA.exp,
userB.exp, userB.exp,
userscoreA, userscoreA,
...@@ -1239,7 +1240,11 @@ export class AppService { ...@@ -1239,7 +1240,11 @@ export class AppService {
return; return;
} }
item.name = card.texts.name; item.name = card.texts.name;
item.type = getStringValueByMysticalNumber(lang, typeOffset, card.type); item.type = this.cardInfoService.getStringValueByMysticalNumber(
lang,
typeOffset,
card.type,
);
} }
private async fillCardInfoBatch(arr: DeckInfoCard[]) { private async fillCardInfoBatch(arr: DeckInfoCard[]) {
......
import { ApiProperty } from '@nestjs/swagger';
export class CodeResponseDto {
@ApiProperty({ description: '状态码' })
code: number;
@ApiProperty({ description: '是否成功' })
success: boolean;
constructor(code: number) {
this.success = code < 400;
this.code = code;
}
}
import { ApiProperty } from '@nestjs/swagger';
export class FileUploadDto {
@ApiProperty({ type: 'string', format: 'binary' })
file: any;
}
import { Column, Entity, PrimaryColumn } from 'typeorm'; import { Column, Entity, PrimaryColumn } from 'typeorm';
import { ApiProperty } from '@nestjs/swagger';
@Entity('user_info', { schema: 'public' }) @Entity('user_info', { schema: 'public' })
export class UserInfo { export class UserInfo {
@ApiProperty({ description: '用户名' })
@PrimaryColumn('character varying', { name: 'username', length: 100 }) @PrimaryColumn('character varying', { name: 'username', length: 100 })
username: string; username: string;
@ApiProperty({ description: 'EXP 数值' })
@Column('double precision', { @Column('double precision', {
name: 'exp', name: 'exp',
precision: 53, precision: 53,
...@@ -12,6 +15,7 @@ export class UserInfo { ...@@ -12,6 +15,7 @@ export class UserInfo {
}) })
exp: number; exp: number;
@ApiProperty({ description: 'DP 数值' })
@Column('double precision', { @Column('double precision', {
name: 'pt', name: 'pt',
precision: 53, precision: 53,
...@@ -19,30 +23,39 @@ export class UserInfo { ...@@ -19,30 +23,39 @@ export class UserInfo {
}) })
pt: number; pt: number;
@ApiProperty({ description: '娱乐匹配胜利数' })
@Column('integer', { name: 'entertain_win', default: 0 }) @Column('integer', { name: 'entertain_win', default: 0 })
entertain_win: number; entertain_win: number;
@ApiProperty({ description: '娱乐匹配失败数' })
@Column('integer', { name: 'entertain_lose', default: 0 }) @Column('integer', { name: 'entertain_lose', default: 0 })
entertain_lose: number; entertain_lose: number;
@ApiProperty({ description: '娱乐匹配平局数' })
@Column('integer', { name: 'entertain_draw', default: 0 }) @Column('integer', { name: 'entertain_draw', default: 0 })
entertain_draw: number; entertain_draw: number;
@ApiProperty({ description: '娱乐匹配总数' })
@Column('integer', { name: 'entertain_all', default: 0 }) @Column('integer', { name: 'entertain_all', default: 0 })
entertain_all: number; entertain_all: number;
@ApiProperty({ description: '竞技匹配胜利数' })
@Column('integer', { name: 'athletic_win', default: 0 }) @Column('integer', { name: 'athletic_win', default: 0 })
athletic_win: number; athletic_win: number;
@ApiProperty({ description: '竞技匹配失败数' })
@Column('integer', { name: 'athletic_lose', default: 0 }) @Column('integer', { name: 'athletic_lose', default: 0 })
athletic_lose: number; athletic_lose: number;
@ApiProperty({ description: '竞技匹配平局数' })
@Column('integer', { name: 'athletic_draw', default: 0 }) @Column('integer', { name: 'athletic_draw', default: 0 })
athletic_draw: number; athletic_draw: number;
@ApiProperty({ description: '竞技匹配总数' })
@Column('integer', { name: 'athletic_all', default: 0 }) @Column('integer', { name: 'athletic_all', default: 0 })
athletic_all: number; athletic_all: number;
@ApiProperty({ description: '玩家 ID' })
@Column('integer', { name: 'id', nullable: true }) @Column('integer', { name: 'id', nullable: true })
id: number; id: number;
} }
import { NestFactory } from '@nestjs/core'; import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module'; import { AppModule } from './app.module';
import bodyParser from 'body-parser'; import bodyParser from 'body-parser';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
async function bootstrap() { async function bootstrap() {
const app = await NestFactory.create(AppModule); const app = await NestFactory.create(AppModule);
app.enableCors(); app.enableCors();
const documentConfig = new DocumentBuilder()
.setTitle('ygopro-arena-api')
.setDescription('YGOPro 决斗数据库后台')
.setVersion('1.0')
.addTag('arena')
.build();
const document = SwaggerModule.createDocument(app, documentConfig);
SwaggerModule.setup('docs', app, document);
app.use(bodyParser.json({ limit: '50mb' })); app.use(bodyParser.json({ limit: '50mb' }));
app.use( app.use(
bodyParser.urlencoded({ bodyParser.urlencoded({
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment