From 8a7742149a4000deb5591941fc90214c05281f28 Mon Sep 17 00:00:00 2001 From: Sahil Narain Date: Mon, 30 Jun 2025 08:26:50 +0000 Subject: [PATCH 01/14] Fixed pattern --- app/services/placeholder.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/services/placeholder.js b/app/services/placeholder.js index a104ccd..f85405c 100644 --- a/app/services/placeholder.js +++ b/app/services/placeholder.js @@ -14,7 +14,12 @@ const createPlaceholder = async (params) => { let placeholderParams = {}; placeholderParams.param1 = params.param1; - let result = await placeholderModel.createPlaceholder(placeholderParams); + let placeholderId = await placeholderModel.createPlaceholder(placeholderParams); + + placeholderParams = {}; + placeholderParams.placeholderId = placeholderId; + + let result = await placeholderModel.getPlaceholder(placeholderParams); let response = status.getStatus('success'); response.data = {}; From 7d3bb69f318a438cf5e74f2a00713098132b2dd5 Mon Sep 17 00:00:00 2001 From: Souvikns Date: Fri, 4 Jul 2025 10:33:03 +0530 Subject: [PATCH 02/14] feat: add package step with tsc and symlink resolved --- .eslintrc.json | 3 +- package-lock.json | 1801 ++++++++++++++++- package.json | 19 +- scripts/package.sh | 4 + {app => src/app}/configs/config.js | 0 .../app}/configs/environments/common.js | 0 .../app}/configs/environments/development.js | 0 .../app}/configs/environments/production.js | 0 .../app}/configs/environments/staging.js | 0 {app => src/app}/configs/environments/test.js | 0 {app => src/app}/configs/logger.js | 0 {app => src/app}/configs/status.js | 0 {app => src/app}/controllers/healthchecks.js | 0 {app => src/app}/controllers/placeholder.js | 0 {app => src/app}/middlewares/auths.js | 0 {app => src/app}/models/healthchecks.js | 0 {app => src/app}/models/placeholder.js | 0 {app => src/app}/routes/healthchecks.js | 0 {app => src/app}/routes/placeholder.js | 0 {app => src/app}/services/healthchecks.js | 24 +- {app => src/app}/services/placeholder.js | 0 {app => src/app}/services/utils.js | 0 {app => src/app}/services/wrapper.js | 0 server.js => src/server.ts | 35 +- tsconfig.json | 23 + 25 files changed, 1856 insertions(+), 53 deletions(-) create mode 100644 scripts/package.sh rename {app => src/app}/configs/config.js (100%) rename {app => src/app}/configs/environments/common.js (100%) rename {app => src/app}/configs/environments/development.js (100%) rename {app => src/app}/configs/environments/production.js (100%) rename {app => src/app}/configs/environments/staging.js (100%) rename {app => src/app}/configs/environments/test.js (100%) rename {app => src/app}/configs/logger.js (100%) rename {app => src/app}/configs/status.js (100%) rename {app => src/app}/controllers/healthchecks.js (100%) rename {app => src/app}/controllers/placeholder.js (100%) rename {app => src/app}/middlewares/auths.js (100%) rename {app => src/app}/models/healthchecks.js (100%) rename {app => src/app}/models/placeholder.js (100%) rename {app => src/app}/routes/healthchecks.js (100%) rename {app => src/app}/routes/placeholder.js (100%) rename {app => src/app}/services/healthchecks.js (55%) rename {app => src/app}/services/placeholder.js (100%) rename {app => src/app}/services/utils.js (100%) rename {app => src/app}/services/wrapper.js (100%) rename server.js => src/server.ts (71%) create mode 100644 tsconfig.json diff --git a/.eslintrc.json b/.eslintrc.json index 86d2612..ad4d5da 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -6,7 +6,8 @@ }, "extends": "eslint:recommended", "parserOptions": { - "ecmaVersion": "latest" + "ecmaVersion": "latest", + "sourceType": "module" }, "rules": { "eqeqeq": ["error"], diff --git a/package-lock.json b/package-lock.json index 7c959bb..f76358a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,14 +14,26 @@ "eslint": "^8.13.0", "express": "^4.19.2", "knex": "^2.5.1", + "module-alias": "^2.2.3", "morgan": "^1.10.0", - "mysql": "^2.18.1" + "mysql": "^2.18.1", + "typescript": "^5.8.3" }, "devDependencies": { "@stoplight/spectral-cli": "^6.14.1", + "@types/body-parser": "^1.19.6", + "@types/compression": "^1.8.1", + "@types/express": "^5.0.3", "esbuild": "^0.25.5", "husky": "^7.0.4", - "prettier": "^2.8.8" + "prettier": "^2.8.8", + "ts-loader": "^9.5.2", + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.2.0", + "tslint": "^5.20.1", + "webpack": "^5.99.9", + "webpack-cli": "^6.0.1", + "webpack-node-externals": "^3.0.0" } }, "node_modules/@asyncapi/specs": { @@ -34,6 +46,54 @@ "@types/json-schema": "^7.0.11" } }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", @@ -550,6 +610,78 @@ "deprecated": "Use @eslint/object-schema instead", "license": "BSD-3-Clause" }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz", + "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@jsep-plugin/assignment": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.3.0.tgz", @@ -1300,6 +1432,66 @@ "node": "^12.20 || >=14.13" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-kCFuWS0ebDbmxs0AXYn6e2r2nrGAb5KwQhknjSPSPgJcGd8+HVSILlUyFhGqML2gk39HcG7D1ydW9/qpYkN00Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/es-aggregate-error": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/es-aggregate-error/-/es-aggregate-error-1.0.6.tgz", @@ -1310,6 +1502,28 @@ "@types/node": "*" } }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", @@ -1317,6 +1531,38 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/express": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.3.tgz", + "integrity": "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", + "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -1331,6 +1577,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "22.9.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", @@ -1341,6 +1594,20 @@ "undici-types": "~6.19.8" } }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/sarif": { "version": "2.1.7", "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", @@ -1348,6 +1615,29 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, "node_modules/@types/urijs": { "version": "1.19.25", "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.25.tgz", @@ -1361,6 +1651,228 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "license": "ISC" }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", + "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", + "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", + "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -1388,9 +1900,9 @@ } }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -1408,10 +1920,23 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -1490,6 +2015,13 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1680,6 +2212,56 @@ "node": ">=8" } }, + "node_modules/browserslist": { + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/builtins": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", @@ -1724,6 +2306,27 @@ "node": ">=6" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001726", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz", + "integrity": "sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1740,6 +2343,16 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -1752,6 +2365,21 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1914,6 +2542,13 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "license": "MIT" }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -2076,6 +2711,16 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -2094,6 +2739,13 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, + "node_modules/electron-to-chromium": { + "version": "1.5.179", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.179.tgz", + "integrity": "sha512-UWKi/EbBopgfFsc5k61wFpV7WrnnSlSzW/e2XcBmS6qKYTivZlLtoll5/rdqRTxGglGHkmkW0j0pFNJG10EUIQ==", + "dev": true, + "license": "ISC" + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -2110,6 +2762,33 @@ "node": ">= 0.8" } }, + "node_modules/enhanced-resolve": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", + "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/es-abstract": { "version": "1.23.5", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", @@ -2215,6 +2894,13 @@ "node": ">= 0.4" } }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, "node_modules/es-object-atoms": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", @@ -2303,9 +2989,9 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", "engines": { "node": ">=6" @@ -2438,6 +3124,20 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", @@ -2506,6 +3206,16 @@ "node": ">=6" } }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/express": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", @@ -2649,6 +3359,16 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -2732,6 +3452,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", @@ -2960,6 +3690,13 @@ "node": ">=10.13.0" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, "node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -3190,6 +3927,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -3420,6 +4177,19 @@ "node": ">=8" } }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-reference": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", @@ -3536,6 +4306,54 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -3564,6 +4382,13 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "license": "MIT" }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -3576,6 +4401,19 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "license": "MIT" }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/jsonc-parser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", @@ -3634,6 +4472,16 @@ "json-buffer": "3.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/knex": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/knex/-/knex-2.5.1.tgz", @@ -3734,6 +4582,16 @@ "node": ">= 0.8.0" } }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -3778,6 +4636,13 @@ "sourcemap-codec": "^1.4.8" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, "node_modules/markdown-escape": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/markdown-escape/-/markdown-escape-2.0.0.tgz", @@ -3803,6 +4668,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -3890,6 +4762,35 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/module-alias": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==", + "license": "MIT" + }, "node_modules/morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -3969,6 +4870,13 @@ "node": ">= 0.6" } }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, "node_modules/nimma": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/nimma/-/nimma-0.2.3.tgz", @@ -4010,6 +4918,13 @@ } } }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, "node_modules/node-sarif-builder": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-2.0.3.tgz", @@ -4142,6 +5057,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -4208,6 +5133,13 @@ "integrity": "sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg==", "license": "MIT" }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -4221,14 +5153,83 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pony-cause": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-1.1.1.tgz", - "integrity": "sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "license": "0BSD", - "engines": { - "node": ">=12.0.0" + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pony-cause": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-1.1.1.tgz", + "integrity": "sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==", + "dev": true, + "license": "0BSD", + "engines": { + "node": ">=12.0.0" } }, "node_modules/possible-typed-array-names": { @@ -4336,6 +5337,16 @@ ], "license": "MIT" }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -4452,6 +5463,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -4604,6 +5638,76 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/schema-utils": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/send": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", @@ -4658,6 +5762,16 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/serve-static": { "version": "1.16.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", @@ -4712,6 +5826,19 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4774,6 +5901,17 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -4782,6 +5920,13 @@ "dev": true, "license": "MIT" }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/sqlstring": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", @@ -4899,6 +6044,16 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -4935,6 +6090,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tapable": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/tarn": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", @@ -4944,6 +6109,78 @@ "node": ">=8.0.0" } }, + "node_modules/terser": { + "version": "5.43.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", + "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.14.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4988,6 +6225,96 @@ "dev": true, "license": "MIT" }, + "node_modules/ts-loader": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", + "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -4995,6 +6322,183 @@ "dev": true, "license": "0BSD" }, + "node_modules/tslint": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", + "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + }, + "bin": { + "tslint": "bin/tslint" + }, + "engines": { + "node": ">=4.8.0" + }, + "peerDependencies": { + "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" + } + }, + "node_modules/tslint/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslint/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/tslint/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslint/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/tslint/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tslint/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tslint/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/tslint/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslint/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/tslint/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/tslint/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslint/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "peerDependencies": { + "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -5109,6 +6613,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -5151,6 +6668,37 @@ "node": ">= 0.8" } }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -5192,6 +6740,13 @@ "node": ">= 0.4.0" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, "node_modules/validate-npm-package-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", @@ -5211,6 +6766,20 @@ "node": ">= 0.8" } }, + "node_modules/watchpack": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -5218,6 +6787,183 @@ "dev": true, "license": "BSD-2-Clause" }, + "node_modules/webpack": { + "version": "5.99.9", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", + "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", + "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "^0.6.1", + "@webpack-cli/configtest": "^3.0.1", + "@webpack-cli/info": "^3.0.1", + "@webpack-cli/serve": "^3.0.1", + "colorette": "^2.0.14", + "commander": "^12.1.0", + "cross-spawn": "^7.0.3", + "envinfo": "^7.14.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^6.0.1" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.82.0" + }, + "peerDependenciesMeta": { + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/webpack-cli/node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/webpack-node-externals": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", + "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-sources": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -5281,6 +7027,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -5368,6 +7121,16 @@ "node": ">=12" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index b6eeb33..840c46f 100644 --- a/package.json +++ b/package.json @@ -13,25 +13,36 @@ "eslint": "^8.13.0", "express": "^4.19.2", "knex": "^2.5.1", + "module-alias": "^2.2.3", "morgan": "^1.10.0", - "mysql": "^2.18.1" + "mysql": "^2.18.1", + "typescript": "^5.8.3" }, "devDependencies": { "@stoplight/spectral-cli": "^6.14.1", + "@types/body-parser": "^1.19.6", + "@types/compression": "^1.8.1", + "@types/express": "^5.0.3", "esbuild": "^0.25.5", "husky": "^7.0.4", - "prettier": "^2.8.8" + "prettier": "^2.8.8", + "ts-loader": "^9.5.2", + "ts-node": "^10.9.2", + "tslint": "^5.20.1" }, "scripts": { "test": "./scripts/tests.sh", "test-server": "NODE_ENV=test;node server.js", - "start": "node server.js", + "start": "ts-node -r tsconfig-paths/register app/server.ts", + "build": "tsc", "git-check": "./scripts/npm/git-check.sh", "beautify": "./scripts/beautify.sh", "dist": "./scripts/dist.sh", "prepare": "husky install", - "lint-docs": "./node_modules/@stoplight/spectral-cli/dist/index.js lint docs/api/spec.yaml --ruleset spectral.yaml" + "lint-docs": "./node_modules/@stoplight/spectral-cli/dist/index.js lint docs/api/spec.yaml --ruleset spectral.yaml", + "webpack": "webpack --config webpack.config.js" }, + "": {}, "repository": { "type": "git", "url": "git+https://github.com/sahilnarain/node-api-boilerplate" diff --git a/scripts/package.sh b/scripts/package.sh new file mode 100644 index 0000000..fb209ba --- /dev/null +++ b/scripts/package.sh @@ -0,0 +1,4 @@ +npm run build + +cp -r node_modules dist/node_modules +ln -s ../app dist/node_modules/app diff --git a/app/configs/config.js b/src/app/configs/config.js similarity index 100% rename from app/configs/config.js rename to src/app/configs/config.js diff --git a/app/configs/environments/common.js b/src/app/configs/environments/common.js similarity index 100% rename from app/configs/environments/common.js rename to src/app/configs/environments/common.js diff --git a/app/configs/environments/development.js b/src/app/configs/environments/development.js similarity index 100% rename from app/configs/environments/development.js rename to src/app/configs/environments/development.js diff --git a/app/configs/environments/production.js b/src/app/configs/environments/production.js similarity index 100% rename from app/configs/environments/production.js rename to src/app/configs/environments/production.js diff --git a/app/configs/environments/staging.js b/src/app/configs/environments/staging.js similarity index 100% rename from app/configs/environments/staging.js rename to src/app/configs/environments/staging.js diff --git a/app/configs/environments/test.js b/src/app/configs/environments/test.js similarity index 100% rename from app/configs/environments/test.js rename to src/app/configs/environments/test.js diff --git a/app/configs/logger.js b/src/app/configs/logger.js similarity index 100% rename from app/configs/logger.js rename to src/app/configs/logger.js diff --git a/app/configs/status.js b/src/app/configs/status.js similarity index 100% rename from app/configs/status.js rename to src/app/configs/status.js diff --git a/app/controllers/healthchecks.js b/src/app/controllers/healthchecks.js similarity index 100% rename from app/controllers/healthchecks.js rename to src/app/controllers/healthchecks.js diff --git a/app/controllers/placeholder.js b/src/app/controllers/placeholder.js similarity index 100% rename from app/controllers/placeholder.js rename to src/app/controllers/placeholder.js diff --git a/app/middlewares/auths.js b/src/app/middlewares/auths.js similarity index 100% rename from app/middlewares/auths.js rename to src/app/middlewares/auths.js diff --git a/app/models/healthchecks.js b/src/app/models/healthchecks.js similarity index 100% rename from app/models/healthchecks.js rename to src/app/models/healthchecks.js diff --git a/app/models/placeholder.js b/src/app/models/placeholder.js similarity index 100% rename from app/models/placeholder.js rename to src/app/models/placeholder.js diff --git a/app/routes/healthchecks.js b/src/app/routes/healthchecks.js similarity index 100% rename from app/routes/healthchecks.js rename to src/app/routes/healthchecks.js diff --git a/app/routes/placeholder.js b/src/app/routes/placeholder.js similarity index 100% rename from app/routes/placeholder.js rename to src/app/routes/placeholder.js diff --git a/app/services/healthchecks.js b/src/app/services/healthchecks.js similarity index 55% rename from app/services/healthchecks.js rename to src/app/services/healthchecks.js index 3f12fe5..8f6b754 100644 --- a/app/services/healthchecks.js +++ b/src/app/services/healthchecks.js @@ -1,11 +1,11 @@ 'use strict'; -const config = require('app/configs/config'); -const status = require('app/configs/status'); +import { HEALTHCHECKS } from 'app/configs/config'; +import { getStatus } from 'app/configs/status'; -const wrapperService = require('app/services/wrapper'); +import { wrap } from 'app/services/wrapper'; -const healthchecksModel = require('app/models/healthchecks'); +import { check } from 'app/models/healthchecks'; const init = async () => { if (`${process.env.NODE_ENV}` === 'test') { @@ -13,12 +13,12 @@ const init = async () => { } let selfOptions = { - url: config.HEALTHCHECKS.DEPLOY_BASE_URL + '/healthchecks', + url: HEALTHCHECKS.DEPLOY_BASE_URL + '/healthchecks', method: 'GET' }; let healthcheckOptions = { - url: config.HEALTHCHECKS.DEPLOY_BASE_URL + '/healthchecks', + url: HEALTHCHECKS.DEPLOY_BASE_URL + '/healthchecks', method: 'GET' }; @@ -37,17 +37,17 @@ const init = async () => { }; const healthchecks = async () => { - let result = await healthchecksModel.check(); + let result = await check(); if (!result) { throw new Error('generic_fail'); } - let response = status.getStatus('success'); + let response = getStatus('success'); return response; }; -module.exports = { - init: wrapperService.wrap(init), - healthchecks: wrapperService.wrap(healthchecks) -}; +export default { + init: wrap(init), + healthchecks: wrap(healthchecks) +}; \ No newline at end of file diff --git a/app/services/placeholder.js b/src/app/services/placeholder.js similarity index 100% rename from app/services/placeholder.js rename to src/app/services/placeholder.js diff --git a/app/services/utils.js b/src/app/services/utils.js similarity index 100% rename from app/services/utils.js rename to src/app/services/utils.js diff --git a/app/services/wrapper.js b/src/app/services/wrapper.js similarity index 100% rename from app/services/wrapper.js rename to src/app/services/wrapper.js diff --git a/server.js b/src/server.ts similarity index 71% rename from server.js rename to src/server.ts index ff795bd..d23eaa4 100644 --- a/server.js +++ b/src/server.ts @@ -1,31 +1,32 @@ 'use strict'; // Include core libraries -const express = require('express'); -const bodyParser = require('body-parser'); -const fs = require('fs'); -const compression = require('compression'); +import 'module-alias/register'; +import express from 'express'; +import bodyParser from 'body-parser'; +import fs from 'fs'; +import compression from 'compression'; -!fs.existsSync(`${__dirname}/node_modules/app`) ? fs.symlinkSync(`${__dirname}/app`, `${__dirname}/node_modules/app`) : null; -const healthchecks = require('app/services/healthchecks'); +// !fs.existsSync(`${__dirname}/node_modules/app`) ? fs.symlinkSync(`${__dirname}/app`, `${__dirname}/node_modules/app`) : null; +import healthchecks from 'app/services/healthchecks'; const app = express(); // Include config files -const config = require('app/configs/config'); -const status = require('app/configs/status'); -const loggerConfig = require('app/configs/logger'); +import config from 'app/configs/config'; +import status from 'app/configs/status'; +import loggerConfig from 'app/configs/logger'; const isDeveloping = process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test'; app.disable('x-powered-by'); // Include middleware -const authsMiddleware = require('app/middlewares/auths'); +import authsMiddleware from 'app/middlewares/auths'; // Include routers -const healthchecksRouter = require('app/routes/healthchecks'); -const placeholderRouter = require('app/routes/placeholder'); +import healthchecksRouter from 'app/routes/healthchecks'; +import placeholderRouter from 'app/routes/placeholder'; // Use JSON body parser app.use(compression()); @@ -54,11 +55,11 @@ const dbSelfCheck = async () => { console.log('MySQL connection error', e); } }; -dbSelfCheck(); +// dbSelfCheck(); // Set allowed headers // eslint-disable-next-line no-unused-vars -app.use((req, res, next) => { +app.use((req: any, res: any, next: any) => { res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type,Authorization,User-Agent,X-Auth,X-Version'); @@ -72,7 +73,7 @@ app.use((req, res, next) => { // Healthcheck routes healthchecks.init(); app.use('/healthchecks', healthchecksRouter); -app.get('/ping', (req, res) => { +app.get('/ping', (req: any, res: any) => { res.send('pong'); }); @@ -92,14 +93,14 @@ app.use('/placeholder', placeholderRouter); // Catch 404s // eslint-disable-next-line no-unused-vars -app.use((req, res, next) => { +app.use((req: any, res: any, next: any) => { res.statusCode = 404; res.json(status.getStatus('url_missing')); }); // Global error handler // eslint-disable-next-line no-unused-vars -app.use((err, req, res, next) => { +app.use((err: any, req: any, res: any, next: any) => { if (err) { console.log(new Date().toISOString(), err); } diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..d0fa8ed --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "outDir": "./dist", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "checkJs": false, + "rootDir": "src", + "moduleResolution": "node", + "resolveJsonModule": true, + "baseUrl": ".", + "paths": { + "app/*": ["src/app/*"] + }, + "preserveSymlinks": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} From 04204cc828a46eaee2a19e1d4f6a80c2770479a5 Mon Sep 17 00:00:00 2001 From: Souvikns Date: Fri, 4 Jul 2025 10:34:35 +0530 Subject: [PATCH 03/14] chore: resolve conflict for healthchecks service file. --- src/app/services/healthchecks.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/services/healthchecks.js b/src/app/services/healthchecks.js index 8f6b754..e1b7316 100644 --- a/src/app/services/healthchecks.js +++ b/src/app/services/healthchecks.js @@ -50,4 +50,4 @@ const healthchecks = async () => { export default { init: wrap(init), healthchecks: wrap(healthchecks) -}; \ No newline at end of file +}; From 77738ebda65bcf764aa559043782e53d879c6d64 Mon Sep 17 00:00:00 2001 From: Souvikns Date: Fri, 4 Jul 2025 10:38:08 +0530 Subject: [PATCH 04/14] chore: resolve conflict for healthchecks service file. From 5892c475ede463befeee0823725e5eadd78b841b Mon Sep 17 00:00:00 2001 From: Souvikns Date: Fri, 4 Jul 2025 10:46:12 +0530 Subject: [PATCH 05/14] chore: stash merge conflict fix From a119ac2cc0704b0bc1b61d0d1d796ef0955edf12 Mon Sep 17 00:00:00 2001 From: Souvikns Date: Fri, 4 Jul 2025 13:03:57 +0530 Subject: [PATCH 06/14] feat: migrate config from js to ts --- package-lock.json | 517 +++--------------- package.json | 1 + scripts/package.sh | 1 + src/app/configs/config.js | 11 - src/app/configs/config.ts | 11 + .../environments/{common.js => common.ts} | 4 +- src/app/configs/environments/development.js | 34 -- src/app/configs/environments/development.ts | 35 ++ src/app/configs/environments/production.js | 34 -- src/app/configs/environments/production.ts | 36 ++ src/app/configs/environments/staging.js | 34 -- src/app/configs/environments/staging.ts | 35 ++ src/app/configs/environments/test.js | 34 -- src/app/configs/environments/test.ts | 36 ++ src/app/configs/{logger.js => logger.ts} | 25 +- src/app/configs/{status.js => status.ts} | 12 +- src/app/configs/types.ts | 37 ++ src/server.ts | 3 +- tsconfig.json | 1 + 19 files changed, 306 insertions(+), 595 deletions(-) delete mode 100644 src/app/configs/config.js create mode 100644 src/app/configs/config.ts rename src/app/configs/environments/{common.js => common.ts} (61%) delete mode 100644 src/app/configs/environments/development.js create mode 100644 src/app/configs/environments/development.ts delete mode 100644 src/app/configs/environments/production.js create mode 100644 src/app/configs/environments/production.ts delete mode 100644 src/app/configs/environments/staging.js create mode 100644 src/app/configs/environments/staging.ts delete mode 100644 src/app/configs/environments/test.js create mode 100644 src/app/configs/environments/test.ts rename src/app/configs/{logger.js => logger.ts} (77%) rename src/app/configs/{status.js => status.ts} (80%) create mode 100644 src/app/configs/types.ts diff --git a/package-lock.json b/package-lock.json index f76358a..94e0285 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,16 +24,13 @@ "@types/body-parser": "^1.19.6", "@types/compression": "^1.8.1", "@types/express": "^5.0.3", + "@types/morgan": "^1.9.10", "esbuild": "^0.25.5", "husky": "^7.0.4", "prettier": "^2.8.8", "ts-loader": "^9.5.2", "ts-node": "^10.9.2", - "tsconfig-paths": "^4.2.0", - "tslint": "^5.20.1", - "webpack": "^5.99.9", - "webpack-cli": "^6.0.1", - "webpack-node-externals": "^3.0.0" + "tslint": "^5.20.1" } }, "node_modules/@asyncapi/specs": { @@ -84,16 +81,6 @@ "node": ">=12" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", - "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.17.0" - } - }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", @@ -616,6 +603,7 @@ "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" @@ -627,6 +615,7 @@ "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -648,6 +637,7 @@ "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -659,6 +649,7 @@ "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1508,6 +1499,7 @@ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -1519,6 +1511,7 @@ "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -1584,6 +1577,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/morgan": { + "version": "1.9.10", + "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.10.tgz", + "integrity": "sha512-sS4A1zheMvsADRVfT0lYbJ4S9lmsey8Zo2F7cnbYjWHP67Q0AwMYuuzLlkIM2N8gAbb9cubhIVFwcIN2XyYCkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "22.9.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", @@ -1657,6 +1660,7 @@ "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" @@ -1667,21 +1671,24 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", @@ -1689,6 +1696,7 @@ "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", @@ -1700,7 +1708,8 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", @@ -1708,6 +1717,7 @@ "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -1721,6 +1731,7 @@ "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -1731,6 +1742,7 @@ "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -1740,7 +1752,8 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", @@ -1748,6 +1761,7 @@ "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -1765,6 +1779,7 @@ "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", @@ -1779,6 +1794,7 @@ "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -1792,6 +1808,7 @@ "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", @@ -1807,71 +1824,27 @@ "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, - "node_modules/@webpack-cli/configtest": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", - "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", - "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", - "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true, - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/abort-controller": { "version": "3.0.0", @@ -2232,6 +2205,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001726", "electron-to-chromium": "^1.5.173", @@ -2250,7 +2224,8 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/builtin-modules": { "version": "1.1.1", @@ -2325,7 +2300,8 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "CC-BY-4.0" + "license": "CC-BY-4.0", + "peer": true }, "node_modules/chalk": { "version": "4.1.2", @@ -2349,6 +2325,7 @@ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6.0" } @@ -2365,21 +2342,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2744,7 +2706,8 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.179.tgz", "integrity": "sha512-UWKi/EbBopgfFsc5k61wFpV7WrnnSlSzW/e2XcBmS6qKYTivZlLtoll5/rdqRTxGglGHkmkW0j0pFNJG10EUIQ==", "dev": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -2776,19 +2739,6 @@ "node": ">=10.13.0" } }, - "node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", - "dev": true, - "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/es-abstract": { "version": "1.23.5", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", @@ -2899,7 +2849,8 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/es-object-atoms": { "version": "1.0.0", @@ -3212,6 +3163,7 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.8.x" } @@ -3359,16 +3311,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -3452,16 +3394,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, "node_modules/flat-cache": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", @@ -3695,7 +3627,8 @@ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true, - "license": "BSD-2-Clause" + "license": "BSD-2-Clause", + "peer": true }, "node_modules/globals": { "version": "13.24.0", @@ -3927,26 +3860,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -4177,19 +4090,6 @@ "node": ">=8" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-reference": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", @@ -4306,22 +4206,13 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -4337,6 +4228,7 @@ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4387,7 +4279,8 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -4401,19 +4294,6 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "license": "MIT" }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/jsonc-parser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", @@ -4472,16 +4352,6 @@ "json-buffer": "3.0.1" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/knex": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/knex/-/knex-2.5.1.tgz", @@ -4588,6 +4458,7 @@ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6.11.5" } @@ -4673,7 +4544,8 @@ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/merge2": { "version": "1.4.1", @@ -4875,7 +4747,8 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/nimma": { "version": "0.2.3", @@ -4923,7 +4796,8 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/node-sarif-builder": { "version": "2.0.3", @@ -5057,16 +4931,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -5153,75 +5017,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/pony-cause": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-1.1.1.tgz", @@ -5343,6 +5138,7 @@ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -5463,29 +5259,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -5644,6 +5417,7 @@ "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -5664,6 +5438,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -5681,6 +5456,7 @@ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -5693,7 +5469,8 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/semver": { "version": "7.7.2", @@ -5768,6 +5545,7 @@ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "dependencies": { "randombytes": "^2.1.0" } @@ -5826,19 +5604,6 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -5907,6 +5672,7 @@ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -6044,16 +5810,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -6115,6 +5871,7 @@ "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.14.0", @@ -6134,6 +5891,7 @@ "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", @@ -6169,6 +5927,7 @@ "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -6179,7 +5938,8 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/text-table": { "version": "0.2.0", @@ -6300,21 +6060,6 @@ } } }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -6688,6 +6433,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -6772,6 +6518,7 @@ "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -6793,6 +6540,7 @@ "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", @@ -6835,100 +6583,13 @@ } } }, - "node_modules/webpack-cli": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", - "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@discoveryjs/json-ext": "^0.6.1", - "@webpack-cli/configtest": "^3.0.1", - "@webpack-cli/info": "^3.0.1", - "@webpack-cli/serve": "^3.0.1", - "colorette": "^2.0.14", - "commander": "^12.1.0", - "cross-spawn": "^7.0.3", - "envinfo": "^7.14.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^6.0.1" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.82.0" - }, - "peerDependenciesMeta": { - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/webpack-cli/node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-merge": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/webpack-node-externals": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", - "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/webpack-sources": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10.13.0" } @@ -6938,7 +6599,8 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", @@ -6946,6 +6608,7 @@ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -6960,6 +6623,7 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "engines": { "node": ">=4.0" } @@ -7027,13 +6691,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true, - "license": "MIT" - }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", diff --git a/package.json b/package.json index 840c46f..da57aa9 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@types/body-parser": "^1.19.6", "@types/compression": "^1.8.1", "@types/express": "^5.0.3", + "@types/morgan": "^1.9.10", "esbuild": "^0.25.5", "husky": "^7.0.4", "prettier": "^2.8.8", diff --git a/scripts/package.sh b/scripts/package.sh index fb209ba..5f0d394 100644 --- a/scripts/package.sh +++ b/scripts/package.sh @@ -1,3 +1,4 @@ +rm -rf dist npm run build cp -r node_modules dist/node_modules diff --git a/src/app/configs/config.js b/src/app/configs/config.js deleted file mode 100644 index 2ee8bce..0000000 --- a/src/app/configs/config.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -const common = require('app/configs/environments/common'); -const environment = require(`app/configs/environments/${process.env.NODE_ENV}`); - -const config = { - ...common, - ...environment -}; - -module.exports = config; diff --git a/src/app/configs/config.ts b/src/app/configs/config.ts new file mode 100644 index 0000000..74856ef --- /dev/null +++ b/src/app/configs/config.ts @@ -0,0 +1,11 @@ +import common from 'app/configs/environments/common'; +import type { EnviornmentConfig, Config } from 'app/configs/types'; +const environment: EnviornmentConfig = require(`app/configs/environments/${process.env.NODE_ENV}`); + +export const config: Config = { + ...common, + ...environment +}; + +module.exports = config; +export default config; \ No newline at end of file diff --git a/src/app/configs/environments/common.js b/src/app/configs/environments/common.ts similarity index 61% rename from src/app/configs/environments/common.js rename to src/app/configs/environments/common.ts index fe71c82..cb3a538 100644 --- a/src/app/configs/environments/common.js +++ b/src/app/configs/environments/common.ts @@ -1,10 +1,12 @@ 'use strict'; +import type { CommonConfig } from 'app/configs/types'; const IPV6 = true; const config = { SERVER_IP: IPV6 ? '::' : '0.0.0.0', SERVER_PORT: process.env.PORT || 3000 -}; +} as CommonConfig; module.exports = config; +export default config; \ No newline at end of file diff --git a/src/app/configs/environments/development.js b/src/app/configs/environments/development.js deleted file mode 100644 index 9b83469..0000000 --- a/src/app/configs/environments/development.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -const Knex = require('knex'); -const os = require('os'); - -const mysqlConnectionString = { - host: '', - user: '', - password: '', - database: '', - port: 3306 -}; - -const KNEX_CONFIG = { - client: 'mysql', - connection: mysqlConnectionString -}; - -const knex = Knex(KNEX_CONFIG); - -const MORGAN_LOG_PATH = `${os.homedir()}/.logs`; - -const HEALTHCHECKS = { - DEPLOY_BASE_URL: 'http://localhost:3000', - URL: 'https://hc-ping.com/uuid' -}; - -const config = { - knex: knex, - MORGAN_LOG_PATH: MORGAN_LOG_PATH, - HEALTHCHECKS: HEALTHCHECKS -}; - -module.exports = config; diff --git a/src/app/configs/environments/development.ts b/src/app/configs/environments/development.ts new file mode 100644 index 0000000..4b3a657 --- /dev/null +++ b/src/app/configs/environments/development.ts @@ -0,0 +1,35 @@ +import { EnviornmentConfig, HealthChecksConfig, KnexConfig, MysqlConnectionString } from 'app/configs/types'; + +import Knex from 'knex'; +import os from 'os'; + +const mysqlConnectionString: MysqlConnectionString = { + host: '', + user: '', + password: '', + database: '', + port: 3306 +}; + +const KNEX_CONFIG: KnexConfig = { + client: 'mysql', + connection: mysqlConnectionString +}; + +const knex = Knex(KNEX_CONFIG); + +const MORGAN_LOG_PATH: string = `${os.homedir()}/.logs`; + +const HEALTHCHECKS: HealthChecksConfig = { + DEPLOY_BASE_URL: 'http://localhost:3000', + URL: 'https://hc-ping.com/uuid' +}; + +const config: EnviornmentConfig = { + knex: knex, + MORGAN_LOG_PATH: MORGAN_LOG_PATH, + HEALTHCHECKS: HEALTHCHECKS +}; + +module.exports = config; +export default config; \ No newline at end of file diff --git a/src/app/configs/environments/production.js b/src/app/configs/environments/production.js deleted file mode 100644 index 9b83469..0000000 --- a/src/app/configs/environments/production.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -const Knex = require('knex'); -const os = require('os'); - -const mysqlConnectionString = { - host: '', - user: '', - password: '', - database: '', - port: 3306 -}; - -const KNEX_CONFIG = { - client: 'mysql', - connection: mysqlConnectionString -}; - -const knex = Knex(KNEX_CONFIG); - -const MORGAN_LOG_PATH = `${os.homedir()}/.logs`; - -const HEALTHCHECKS = { - DEPLOY_BASE_URL: 'http://localhost:3000', - URL: 'https://hc-ping.com/uuid' -}; - -const config = { - knex: knex, - MORGAN_LOG_PATH: MORGAN_LOG_PATH, - HEALTHCHECKS: HEALTHCHECKS -}; - -module.exports = config; diff --git a/src/app/configs/environments/production.ts b/src/app/configs/environments/production.ts new file mode 100644 index 0000000..2b74346 --- /dev/null +++ b/src/app/configs/environments/production.ts @@ -0,0 +1,36 @@ + +import { EnviornmentConfig, HealthChecksConfig, KnexConfig, MysqlConnectionString } from 'app/configs/types'; + +import Knex from 'knex'; +import os from 'os'; + +const mysqlConnectionString: MysqlConnectionString = { + host: '', + user: '', + password: '', + database: '', + port: 3306 +}; + +const KNEX_CONFIG: KnexConfig = { + client: 'mysql', + connection: mysqlConnectionString +}; + +const knex = Knex(KNEX_CONFIG); + +const MORGAN_LOG_PATH: string = `${os.homedir()}/.logs`; + +const HEALTHCHECKS: HealthChecksConfig = { + DEPLOY_BASE_URL: 'http://localhost:3000', + URL: 'https://hc-ping.com/uuid' +}; + +const config: EnviornmentConfig = { + knex: knex, + MORGAN_LOG_PATH: MORGAN_LOG_PATH, + HEALTHCHECKS: HEALTHCHECKS +}; + +module.exports = config; +export default config; \ No newline at end of file diff --git a/src/app/configs/environments/staging.js b/src/app/configs/environments/staging.js deleted file mode 100644 index 9b83469..0000000 --- a/src/app/configs/environments/staging.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -const Knex = require('knex'); -const os = require('os'); - -const mysqlConnectionString = { - host: '', - user: '', - password: '', - database: '', - port: 3306 -}; - -const KNEX_CONFIG = { - client: 'mysql', - connection: mysqlConnectionString -}; - -const knex = Knex(KNEX_CONFIG); - -const MORGAN_LOG_PATH = `${os.homedir()}/.logs`; - -const HEALTHCHECKS = { - DEPLOY_BASE_URL: 'http://localhost:3000', - URL: 'https://hc-ping.com/uuid' -}; - -const config = { - knex: knex, - MORGAN_LOG_PATH: MORGAN_LOG_PATH, - HEALTHCHECKS: HEALTHCHECKS -}; - -module.exports = config; diff --git a/src/app/configs/environments/staging.ts b/src/app/configs/environments/staging.ts new file mode 100644 index 0000000..4b3a657 --- /dev/null +++ b/src/app/configs/environments/staging.ts @@ -0,0 +1,35 @@ +import { EnviornmentConfig, HealthChecksConfig, KnexConfig, MysqlConnectionString } from 'app/configs/types'; + +import Knex from 'knex'; +import os from 'os'; + +const mysqlConnectionString: MysqlConnectionString = { + host: '', + user: '', + password: '', + database: '', + port: 3306 +}; + +const KNEX_CONFIG: KnexConfig = { + client: 'mysql', + connection: mysqlConnectionString +}; + +const knex = Knex(KNEX_CONFIG); + +const MORGAN_LOG_PATH: string = `${os.homedir()}/.logs`; + +const HEALTHCHECKS: HealthChecksConfig = { + DEPLOY_BASE_URL: 'http://localhost:3000', + URL: 'https://hc-ping.com/uuid' +}; + +const config: EnviornmentConfig = { + knex: knex, + MORGAN_LOG_PATH: MORGAN_LOG_PATH, + HEALTHCHECKS: HEALTHCHECKS +}; + +module.exports = config; +export default config; \ No newline at end of file diff --git a/src/app/configs/environments/test.js b/src/app/configs/environments/test.js deleted file mode 100644 index 9b83469..0000000 --- a/src/app/configs/environments/test.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -const Knex = require('knex'); -const os = require('os'); - -const mysqlConnectionString = { - host: '', - user: '', - password: '', - database: '', - port: 3306 -}; - -const KNEX_CONFIG = { - client: 'mysql', - connection: mysqlConnectionString -}; - -const knex = Knex(KNEX_CONFIG); - -const MORGAN_LOG_PATH = `${os.homedir()}/.logs`; - -const HEALTHCHECKS = { - DEPLOY_BASE_URL: 'http://localhost:3000', - URL: 'https://hc-ping.com/uuid' -}; - -const config = { - knex: knex, - MORGAN_LOG_PATH: MORGAN_LOG_PATH, - HEALTHCHECKS: HEALTHCHECKS -}; - -module.exports = config; diff --git a/src/app/configs/environments/test.ts b/src/app/configs/environments/test.ts new file mode 100644 index 0000000..e578c8f --- /dev/null +++ b/src/app/configs/environments/test.ts @@ -0,0 +1,36 @@ +import { EnviornmentConfig, HealthChecksConfig, KnexConfig, MysqlConnectionString } from 'app/configs/types'; + +import Knex from 'knex'; +import os from 'os'; + + +const mysqlConnectionString: MysqlConnectionString = { + host: '', + user: '', + password: '', + database: '', + port: 3306 +}; + +const KNEX_CONFIG: KnexConfig = { + client: 'mysql', + connection: mysqlConnectionString +}; + +const knex = Knex(KNEX_CONFIG); + +const MORGAN_LOG_PATH: string = `${os.homedir()}/.logs`; + +const HEALTHCHECKS: HealthChecksConfig = { + DEPLOY_BASE_URL: 'http://localhost:3000', + URL: 'https://hc-ping.com/uuid' +}; + +const config: EnviornmentConfig = { + knex: knex, + MORGAN_LOG_PATH: MORGAN_LOG_PATH, + HEALTHCHECKS: HEALTHCHECKS +}; + +module.exports = config; +export default config; \ No newline at end of file diff --git a/src/app/configs/logger.js b/src/app/configs/logger.ts similarity index 77% rename from src/app/configs/logger.js rename to src/app/configs/logger.ts index 7f8e730..61f459c 100644 --- a/src/app/configs/logger.js +++ b/src/app/configs/logger.ts @@ -1,22 +1,20 @@ -'use strict'; +import fs from 'fs'; +import logger from 'morgan'; +import config from 'app/configs/config' -const fs = require('fs'); -const logger = require('morgan'); - -const config = require('app/configs/config'); // Create log file if it doesn't exist fs.existsSync(`${config.MORGAN_LOG_PATH}`) ? null : fs.mkdirSync(`${config.MORGAN_LOG_PATH}`, { - recursive: true - }); + recursive: true + }); let _logFile = `${config.MORGAN_LOG_PATH}/morgan.log`; fs.existsSync(_logFile) ? null : fs.writeFileSync(_logFile, new Date().toISOString()); // Configure logging // eslint-disable-next-line no-unused-vars -logger.token('req-body', (req, res) => { +logger.token('req-body', (req: any, res: any) => { return JSON.stringify({ params: req.query, body: req.body @@ -29,12 +27,12 @@ logger.token('req-headers', (req, res) => { }); // eslint-disable-next-line no-unused-vars -logger.token('tracking', (req, res) => { +logger.token('tracking', (req: any, res) => { return req.headers['x-device-id'] ? req.headers['x-device-id'] : 'DEFAULT'; }); // eslint-disable-next-line no-unused-vars -logger.token('uri', (req, res) => { +logger.token('uri', (req: any, res) => { return req.originalUrl.split('?')[0]; }); @@ -49,7 +47,12 @@ const _customLogFormat = logger(customLogFormat, { const _devLogStream = logger('dev'); +export default { + customLogFormat: _customLogFormat, + devLogStream: _devLogStream +} + module.exports = { customLogFormat: _customLogFormat, devLogStream: _devLogStream -}; +} diff --git a/src/app/configs/status.js b/src/app/configs/status.ts similarity index 80% rename from src/app/configs/status.js rename to src/app/configs/status.ts index 8309501..5e43b23 100644 --- a/src/app/configs/status.js +++ b/src/app/configs/status.ts @@ -1,7 +1,7 @@ -'use strict'; +import type { Status } from 'app/configs/types'; -const getStatus = (code) => { - let status = null; +export const getStatus = (code: string): Status => { + let status = null as Status | null; switch (code) { case 'success': @@ -43,4 +43,8 @@ const getStatus = (code) => { module.exports = { getStatus: getStatus -}; +} + +export default { + getStatus +} \ No newline at end of file diff --git a/src/app/configs/types.ts b/src/app/configs/types.ts new file mode 100644 index 0000000..2db474a --- /dev/null +++ b/src/app/configs/types.ts @@ -0,0 +1,37 @@ +import { Knex } from 'knex'; + +export interface Config extends CommonConfig, EnviornmentConfig { } + +export interface CommonConfig { + SERVER_IP: string + SERVER_PORT: number +} + +export interface EnviornmentConfig { + knex: Knex, + MORGAN_LOG_PATH: string + HEALTHCHECKS: HealthChecksConfig +} + +export type KnexConfig = { client: 'mysql', connection: MysqlConnectionString } + +export type MysqlConnectionString = { + host: string + user: string + password: string + database: string + port: number +} + +export type HealthChecksConfig = { + DEPLOY_BASE_URL: string + URL: string +} + +export type getStatusFn = (code: string) => Status + +export type Status = { + code: string + error: boolean + message: string +} \ No newline at end of file diff --git a/src/server.ts b/src/server.ts index d23eaa4..69fda57 100644 --- a/src/server.ts +++ b/src/server.ts @@ -7,7 +7,6 @@ import bodyParser from 'body-parser'; import fs from 'fs'; import compression from 'compression'; -// !fs.existsSync(`${__dirname}/node_modules/app`) ? fs.symlinkSync(`${__dirname}/app`, `${__dirname}/node_modules/app`) : null; import healthchecks from 'app/services/healthchecks'; const app = express(); @@ -55,7 +54,7 @@ const dbSelfCheck = async () => { console.log('MySQL connection error', e); } }; -// dbSelfCheck(); +dbSelfCheck(); // Set allowed headers // eslint-disable-next-line no-unused-vars diff --git a/tsconfig.json b/tsconfig.json index d0fa8ed..a2d4bc8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,6 +9,7 @@ "forceConsistentCasingInFileNames": true, "allowJs": true, "checkJs": false, + "declaration": true, "rootDir": "src", "moduleResolution": "node", "resolveJsonModule": true, From 6186e3392ac1d7d29543d53c7043b7f98ce0c6d0 Mon Sep 17 00:00:00 2001 From: Souvikns Date: Fri, 4 Jul 2025 18:27:35 +0530 Subject: [PATCH 07/14] feat: migrate all js files to ts files. --- src/app/configs/config.ts | 4 +- src/app/configs/environments/common.ts | 1 - src/app/configs/environments/development.ts | 4 +- src/app/configs/environments/production.ts | 4 +- src/app/configs/environments/staging.ts | 4 +- src/app/configs/environments/test.ts | 4 +- src/app/configs/logger.ts | 5 - src/app/configs/status.ts | 4 - src/app/configs/types.ts | 1 + src/app/controllers/healthchecks.js | 16 --- src/app/controllers/healthchecks.ts | 17 ++++ .../{placeholder.js => placeholder.ts} | 57 +++++++---- src/app/middlewares/auths.js | 7 -- src/app/middlewares/auths.ts | 7 ++ src/app/models/healthchecks.js | 18 ---- src/app/models/healthchecks.ts | 18 ++++ .../models/{placeholder.js => placeholder.ts} | 51 +++++++--- src/app/routes/healthchecks.js | 10 -- src/app/routes/healthchecks.ts | 8 ++ .../routes/{placeholder.js => placeholder.ts} | 9 +- src/app/services/healthchecks.js | 53 ---------- src/app/services/healthchecks.ts | 53 ++++++++++ src/app/services/placeholder.js | 89 ----------------- src/app/services/placeholder.ts | 98 +++++++++++++++++++ src/app/services/{utils.js => utils.ts} | 30 +++--- src/app/services/wrapper.js | 28 ------ src/app/services/wrapper.ts | 31 ++++++ src/server.ts | 10 +- src/types.ts | 18 ++++ tsconfig.json | 3 +- 30 files changed, 361 insertions(+), 301 deletions(-) delete mode 100644 src/app/controllers/healthchecks.js create mode 100644 src/app/controllers/healthchecks.ts rename src/app/controllers/{placeholder.js => placeholder.ts} (50%) delete mode 100644 src/app/middlewares/auths.js create mode 100644 src/app/middlewares/auths.ts delete mode 100644 src/app/models/healthchecks.js create mode 100644 src/app/models/healthchecks.ts rename src/app/models/{placeholder.js => placeholder.ts} (50%) delete mode 100644 src/app/routes/healthchecks.js create mode 100644 src/app/routes/healthchecks.ts rename src/app/routes/{placeholder.js => placeholder.ts} (56%) delete mode 100644 src/app/services/healthchecks.js create mode 100644 src/app/services/healthchecks.ts delete mode 100644 src/app/services/placeholder.js create mode 100644 src/app/services/placeholder.ts rename src/app/services/{utils.js => utils.ts} (62%) delete mode 100644 src/app/services/wrapper.js create mode 100644 src/app/services/wrapper.ts create mode 100644 src/types.ts diff --git a/src/app/configs/config.ts b/src/app/configs/config.ts index 74856ef..93175f0 100644 --- a/src/app/configs/config.ts +++ b/src/app/configs/config.ts @@ -7,5 +7,5 @@ export const config: Config = { ...environment }; -module.exports = config; -export default config; \ No newline at end of file +export default config; +module.exports = config \ No newline at end of file diff --git a/src/app/configs/environments/common.ts b/src/app/configs/environments/common.ts index cb3a538..5f9edf8 100644 --- a/src/app/configs/environments/common.ts +++ b/src/app/configs/environments/common.ts @@ -8,5 +8,4 @@ const config = { SERVER_PORT: process.env.PORT || 3000 } as CommonConfig; -module.exports = config; export default config; \ No newline at end of file diff --git a/src/app/configs/environments/development.ts b/src/app/configs/environments/development.ts index 4b3a657..3ffbacf 100644 --- a/src/app/configs/environments/development.ts +++ b/src/app/configs/environments/development.ts @@ -31,5 +31,5 @@ const config: EnviornmentConfig = { HEALTHCHECKS: HEALTHCHECKS }; -module.exports = config; -export default config; \ No newline at end of file +export default config; +module.exports = config; \ No newline at end of file diff --git a/src/app/configs/environments/production.ts b/src/app/configs/environments/production.ts index 2b74346..a28e0da 100644 --- a/src/app/configs/environments/production.ts +++ b/src/app/configs/environments/production.ts @@ -32,5 +32,5 @@ const config: EnviornmentConfig = { HEALTHCHECKS: HEALTHCHECKS }; -module.exports = config; -export default config; \ No newline at end of file +export default config; +module.exports = config; \ No newline at end of file diff --git a/src/app/configs/environments/staging.ts b/src/app/configs/environments/staging.ts index 4b3a657..3ffbacf 100644 --- a/src/app/configs/environments/staging.ts +++ b/src/app/configs/environments/staging.ts @@ -31,5 +31,5 @@ const config: EnviornmentConfig = { HEALTHCHECKS: HEALTHCHECKS }; -module.exports = config; -export default config; \ No newline at end of file +export default config; +module.exports = config; \ No newline at end of file diff --git a/src/app/configs/environments/test.ts b/src/app/configs/environments/test.ts index e578c8f..ee0ad66 100644 --- a/src/app/configs/environments/test.ts +++ b/src/app/configs/environments/test.ts @@ -32,5 +32,5 @@ const config: EnviornmentConfig = { HEALTHCHECKS: HEALTHCHECKS }; -module.exports = config; -export default config; \ No newline at end of file +export default config; +module.exports = config; \ No newline at end of file diff --git a/src/app/configs/logger.ts b/src/app/configs/logger.ts index 61f459c..5a11994 100644 --- a/src/app/configs/logger.ts +++ b/src/app/configs/logger.ts @@ -51,8 +51,3 @@ export default { customLogFormat: _customLogFormat, devLogStream: _devLogStream } - -module.exports = { - customLogFormat: _customLogFormat, - devLogStream: _devLogStream -} diff --git a/src/app/configs/status.ts b/src/app/configs/status.ts index 5e43b23..61a7ec3 100644 --- a/src/app/configs/status.ts +++ b/src/app/configs/status.ts @@ -41,10 +41,6 @@ export const getStatus = (code: string): Status => { return status; }; -module.exports = { - getStatus: getStatus -} - export default { getStatus } \ No newline at end of file diff --git a/src/app/configs/types.ts b/src/app/configs/types.ts index 2db474a..e76a80b 100644 --- a/src/app/configs/types.ts +++ b/src/app/configs/types.ts @@ -5,6 +5,7 @@ export interface Config extends CommonConfig, EnviornmentConfig { } export interface CommonConfig { SERVER_IP: string SERVER_PORT: number + IPV6?: boolean } export interface EnviornmentConfig { diff --git a/src/app/controllers/healthchecks.js b/src/app/controllers/healthchecks.js deleted file mode 100644 index d936453..0000000 --- a/src/app/controllers/healthchecks.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -const healthchecksService = require('app/services/healthchecks'); -const wrapperService = require('app/services/wrapper'); - -// eslint-disable-next-line no-unused-vars -const healthchecks = async (req, res, next) => { - let healthchecksParams = {}; - - let result = await healthchecksService.healthchecks(healthchecksParams); - return res.json(result); -}; - -module.exports = { - healthchecks: wrapperService.wrap(healthchecks) -}; diff --git a/src/app/controllers/healthchecks.ts b/src/app/controllers/healthchecks.ts new file mode 100644 index 0000000..00e1dae --- /dev/null +++ b/src/app/controllers/healthchecks.ts @@ -0,0 +1,17 @@ +import healthchecksService from "app/services/healthchecks"; +import wrapperService from "app/services/wrapper"; +import { Status } from "app/configs/types"; +import { Controller } from 'types'; + + +const healthchecks: Controller = async (req, res) => { + + let result = await healthchecksService.healthchecks(); + return res.json(result); +}; + + +export default { + healthchecks: wrapperService.wrap(healthchecks) +} + diff --git a/src/app/controllers/placeholder.js b/src/app/controllers/placeholder.ts similarity index 50% rename from src/app/controllers/placeholder.js rename to src/app/controllers/placeholder.ts index 124abb1..f59138d 100644 --- a/src/app/controllers/placeholder.js +++ b/src/app/controllers/placeholder.ts @@ -1,38 +1,52 @@ -'use strict'; - -const placeholderService = require('app/services/placeholder'); -const wrapperService = require('app/services/wrapper'); - -// eslint-disable-next-line no-unused-vars -const createPlaceholder = async (req, res, next) => { - if (!req.body.param1) { +import placeholderService from "app/services/placeholder"; +import wrapperService from "app/services/wrapper"; +import { Controller } from 'types'; + +export type CreatePlaceholderBody = { + param1: string +} + +export type GetPlaceholersBody = { + param1?: string +} + +export type GetPlaceholderBody = { + placeholder_id: number +} + +export type UpdatePlaceholderBody = { + param1?: string + placeholder_id?: number +} + +const createPlaceholder: Controller = async (req, res) => { + const param = req.body as CreatePlaceholderBody; + if (!param.param1) { throw new Error('input_missing'); } - let placeholderParams = {}; - placeholderParams.param1 = req.body.param1; - - let result = await placeholderService.createPlaceholder(placeholderParams); + let result = await placeholderService.createPlaceholder(param); return res.json(result); }; // eslint-disable-next-line no-unused-vars -const getPlaceholders = async (req, res, next) => { - let placeholderParams = {}; +const getPlaceholders:Controller = async (req, res) => { + const param = req.body as GetPlaceholersBody - let result = await placeholderService.getPlaceholders(placeholderParams); + let result = await placeholderService.getPlaceholders(param); return res.json(result); }; // eslint-disable-next-line no-unused-vars -const getPlaceholder = async (req, res, next) => { +const getPlaceholder: Controller= async (req, res) => { + req.body as GetPlaceholderBody; if (!req.params.placeholder_id) { throw new Error('input_missing'); } - let placeholderParams = {}; + let placeholderParams: any = {}; placeholderParams.placeholderId = parseInt(req.params.placeholder_id); let result = await placeholderService.getPlaceholder(placeholderParams); @@ -41,12 +55,13 @@ const getPlaceholder = async (req, res, next) => { }; // eslint-disable-next-line no-unused-vars -const updatePlaceholder = async (req, res, next) => { +const updatePlaceholder: Controller = async (req, res) => { + req.body as UpdatePlaceholderBody; if (!req.params.placeholder_id) { throw new Error('input_missing'); } - let placeholderParams = {}; + let placeholderParams: any = {}; placeholderParams.placeholderId = parseInt(req.params.placeholder_id); req.body.param1 ? (placeholderParams.param1 = req.body.param1) : null; @@ -55,9 +70,9 @@ const updatePlaceholder = async (req, res, next) => { return res.json(result); }; -module.exports = { +export default { createPlaceholder: wrapperService.wrap(createPlaceholder), getPlaceholders: wrapperService.wrap(getPlaceholders), getPlaceholder: wrapperService.wrap(getPlaceholder), updatePlaceholder: wrapperService.wrap(updatePlaceholder) -}; +} \ No newline at end of file diff --git a/src/app/middlewares/auths.js b/src/app/middlewares/auths.js deleted file mode 100644 index 30b29d6..0000000 --- a/src/app/middlewares/auths.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -const middleware = (req, res, next) => { - return next(); -}; - -module.exports = middleware; diff --git a/src/app/middlewares/auths.ts b/src/app/middlewares/auths.ts new file mode 100644 index 0000000..e76514d --- /dev/null +++ b/src/app/middlewares/auths.ts @@ -0,0 +1,7 @@ +import { Middleware } from 'types'; + +const middleware: Middleware = (req, res, next) => { + return next(); +}; + +export default middleware diff --git a/src/app/models/healthchecks.js b/src/app/models/healthchecks.js deleted file mode 100644 index f439731..0000000 --- a/src/app/models/healthchecks.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -const config = require('app/configs/config'); - -const utilsService = require('app/services/utils'); -const wrapperService = require('app/services/wrapper'); - -const check = async () => { - const checkQuery = config.knex.select(config.knex.raw('now()')); - - let result = await checkQuery; - - return utilsService.sanitizeSqlResult(result[0]); -}; - -module.exports = { - check: wrapperService.wrap(check) -}; diff --git a/src/app/models/healthchecks.ts b/src/app/models/healthchecks.ts new file mode 100644 index 0000000..a74b7a6 --- /dev/null +++ b/src/app/models/healthchecks.ts @@ -0,0 +1,18 @@ +import config from "app/configs/config"; +import utilsService from "app/services/utils"; +import wrapperService from "app/services/wrapper"; + +export type CheckFn = () => Promise + + +const check: CheckFn = async () => { + const checkQuery = config.knex.select(config.knex.raw('now()')); + + let result = await checkQuery; + + return utilsService.sanitizeSqlResult(result[0]); +}; + +export default { + check: wrapperService.wrap(check) +} \ No newline at end of file diff --git a/src/app/models/placeholder.js b/src/app/models/placeholder.ts similarity index 50% rename from src/app/models/placeholder.js rename to src/app/models/placeholder.ts index b3557b8..d2451dc 100644 --- a/src/app/models/placeholder.js +++ b/src/app/models/placeholder.ts @@ -1,11 +1,31 @@ -'use strict'; +import config from "app/configs/config"; +import utilsService from "app/services/utils"; +import wrapperService from "app/services/wrapper"; +import type { JSONValue } from 'types'; -const utilsService = require('app/services/utils'); -const wrapperService = require('app/services/wrapper'); +export type CreatePlaceHolderParam = { + param1: string +} -const config = require('app/configs/config'); +export type GetPlaceholdersParams = { + placeholderId?: number +} -const createPlaceholder = async (params) => { +export type GetPlaceholderParams = Partial> & { + placeholderId: number +} + +export type UpdatePlaceholderParams = GetPlaceholderParams & { + param1: string +} + +export type CreatePlaceHolderFn = (params: CreatePlaceHolderParam) => Promise +export type GetPlaceholdersFn = (params: GetPlaceholdersParams) => Promise +export type GetPlaceholderFn = (params: GetPlaceholderParams) => Promise +export type UpdatePlaceholderFn = (params: UpdatePlaceholderParams) => Promise + + +const createPlaceholder: CreatePlaceHolderFn = async (params) => { if (!params.param1) { throw new Error('input_missing'); } @@ -18,10 +38,10 @@ const createPlaceholder = async (params) => { let result = await createPlaceholderQuery; - return result[0].insertId; + return result[0]; }; -const getPlaceholders = async (params) => { +const getPlaceholders: GetPlaceholdersFn = async (params) => { let getPlaceholdersQuery = config.knex.select('id').from('placeholders').orderBy('id', 'desc'); params.placeholderId ? getPlaceholdersQuery.where('id', params.placeholderId) : null; @@ -31,30 +51,29 @@ const getPlaceholders = async (params) => { return utilsService.sanitizeSqlResult(result); }; -const getPlaceholder = async (params) => { +const getPlaceholder: GetPlaceholderFn = async (params) => { if (!params.placeholderId) { throw new Error('input_missing'); } - let placeholderParams = {}; - placeholderParams.placeholderId = params.placeholderId; - - let result = await getPlaceholders(placeholderParams); + let result = await getPlaceholders(params); if (!result) { return null; } + // @ts-ignore return result[0]; }; -const updatePlaceholder = async (params) => { +const updatePlaceholder: UpdatePlaceholderFn = async (params) => { if (!params.placeholderId) { throw new Error('input_missing'); } - let _update = { + let _update: any = { updated_at: new Date().toISOString() }; + params.param1 ? (_update.param1 = params.param1) : null; let updatePlaceholderQuery = config.knex('placeholders').update(_update).where('id', params.placeholderId); @@ -64,9 +83,9 @@ const updatePlaceholder = async (params) => { return true; }; -module.exports = { +export default { createPlaceholder: wrapperService.wrap(createPlaceholder), getPlaceholders: wrapperService.wrap(getPlaceholders), getPlaceholder: wrapperService.wrap(getPlaceholder), updatePlaceholder: wrapperService.wrap(updatePlaceholder) -}; +} diff --git a/src/app/routes/healthchecks.js b/src/app/routes/healthchecks.js deleted file mode 100644 index 34fa025..0000000 --- a/src/app/routes/healthchecks.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -const express = require('express'); -const router = express.Router(); - -const controller = require('app/controllers/healthchecks'); - -router.get('/', controller.healthchecks); - -module.exports = router; diff --git a/src/app/routes/healthchecks.ts b/src/app/routes/healthchecks.ts new file mode 100644 index 0000000..13dc5ae --- /dev/null +++ b/src/app/routes/healthchecks.ts @@ -0,0 +1,8 @@ +import { Router } from 'express'; +import controller from 'app/controllers/healthchecks'; + +const router = Router(); + +router.get('/', controller.healthchecks); + +export default router; \ No newline at end of file diff --git a/src/app/routes/placeholder.js b/src/app/routes/placeholder.ts similarity index 56% rename from src/app/routes/placeholder.js rename to src/app/routes/placeholder.ts index 6a905e2..8206002 100644 --- a/src/app/routes/placeholder.js +++ b/src/app/routes/placeholder.ts @@ -1,13 +1,12 @@ -'use strict'; +import { Router } from 'express'; +import controller from 'app/controllers/placeholder' -const express = require('express'); -const router = express.Router(); +const router = Router() -const controller = require('app/controllers/placeholder'); router.post('/', controller.createPlaceholder); router.get('/', controller.getPlaceholders); router.get('/:placeholder_id', controller.getPlaceholder); router.get('/:placeholder_id', controller.updatePlaceholder); -module.exports = router; +export default router \ No newline at end of file diff --git a/src/app/services/healthchecks.js b/src/app/services/healthchecks.js deleted file mode 100644 index e1b7316..0000000 --- a/src/app/services/healthchecks.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -import { HEALTHCHECKS } from 'app/configs/config'; -import { getStatus } from 'app/configs/status'; - -import { wrap } from 'app/services/wrapper'; - -import { check } from 'app/models/healthchecks'; - -const init = async () => { - if (`${process.env.NODE_ENV}` === 'test') { - return; - } - - let selfOptions = { - url: HEALTHCHECKS.DEPLOY_BASE_URL + '/healthchecks', - method: 'GET' - }; - - let healthcheckOptions = { - url: HEALTHCHECKS.DEPLOY_BASE_URL + '/healthchecks', - method: 'GET' - }; - - setInterval(async () => { - let response; - try { - response = await (await fetch(selfOptions.url, selfOptions)).json(); - } catch (e) { - return; - } - - if (response && response.code && response.code === 'success') { - await (await fetch(healthcheckOptions.url, healthcheckOptions)).json(); - } - }, 30000); -}; - -const healthchecks = async () => { - let result = await check(); - - if (!result) { - throw new Error('generic_fail'); - } - - let response = getStatus('success'); - return response; -}; - -export default { - init: wrap(init), - healthchecks: wrap(healthchecks) -}; diff --git a/src/app/services/healthchecks.ts b/src/app/services/healthchecks.ts new file mode 100644 index 0000000..a96c375 --- /dev/null +++ b/src/app/services/healthchecks.ts @@ -0,0 +1,53 @@ +import config from "app/configs/config"; +import status from "app/configs/status"; +import wrapperService from 'app/services/wrapper'; +import healthchecksModel from 'app/models/healthchecks'; +import type { Status } from 'app/configs/types'; + +export type InitFn = () => Promise +export type HealthchecksFn = () => Promise + +const init: InitFn = async () => { + if (`${process.env.NODE_ENV}` === 'test') { + return; + } + + let selfOptions = { + url: config.HEALTHCHECKS.DEPLOY_BASE_URL + '/healthchecks', + method: 'GET' + }; + + let healthcheckOptions = { + url: config.HEALTHCHECKS.DEPLOY_BASE_URL + '/healthchecks', + method: 'GET' + }; + + setInterval(async () => { + let response; + try { + response = await (await fetch(selfOptions.url, selfOptions)).json(); + } catch (e) { + return; + } + + if (response && response.code && response.code === 'success') { + await (await fetch(healthcheckOptions.url, healthcheckOptions)).json(); + } + }, 30000); +}; + +const healthchecks: HealthchecksFn = async () => { + let result = await healthchecksModel.check(); + + if (!result) { + throw new Error('generic_fail'); + } + + let response = status.getStatus('success'); + return response; +}; + +export default { + init: wrapperService.wrap(init), + healthchecks: wrapperService.wrap(healthchecks) +} \ No newline at end of file diff --git a/src/app/services/placeholder.js b/src/app/services/placeholder.js deleted file mode 100644 index f85405c..0000000 --- a/src/app/services/placeholder.js +++ /dev/null @@ -1,89 +0,0 @@ -'use strict'; - -const status = require('app/configs/status'); - -const wrapperService = require('app/services/wrapper'); - -const placeholderModel = require('app/models/placeholder'); - -const createPlaceholder = async (params) => { - if (!params.param1) { - throw new Error('input_missing'); - } - - let placeholderParams = {}; - placeholderParams.param1 = params.param1; - - let placeholderId = await placeholderModel.createPlaceholder(placeholderParams); - - placeholderParams = {}; - placeholderParams.placeholderId = placeholderId; - - let result = await placeholderModel.getPlaceholder(placeholderParams); - - let response = status.getStatus('success'); - response.data = {}; - response.data.placeholder = result; - - return response; -}; - -const getPlaceholders = async (params) => { - let placeholderParams = {}; - params.param1 ? (placeholderParams.param1 = params.param1) : null; - - let result = await placeholderModel.getPlaceholders(placeholderParams); - - let response = status.getStatus('success'); - response.data = {}; - response.data.placeholders = result; - - return response; -}; - -const getPlaceholder = async (params) => { - if (!params.placeholderId) { - throw new Error('input_missing'); - } - - let placeholderParams = {}; - placeholderParams.placeholderId = params.placeholderId; - - let result = await placeholderModel.getPlaceholder(placeholderParams); - - let response = status.getStatus('success'); - response.data = {}; - response.data.placeholder = result; - - return response; -}; - -const updatePlaceholder = async (params) => { - if (!params.placeholderId || !params.param1) { - throw new Error('input_missing'); - } - - let placeholderParams = {}; - placeholderParams.placeholderId = params.placeholderId; - placeholderParams.param1 = params.param1; - - await placeholderModel.updatePlaceholder(placeholderParams); - - placeholderParams = {}; - placeholderParams.param1 = params.param1; - - let result = await placeholderModel.getPlaceholder(placeholderParams); - - let response = status.getStatus('success'); - response.data = {}; - response.data.placeholder = result; - - return response; -}; - -module.exports = { - createPlaceholder: wrapperService.wrap(createPlaceholder), - getPlaceholders: wrapperService.wrap(getPlaceholders), - getPlaceholder: wrapperService.wrap(getPlaceholder), - updatePlaceholder: wrapperService.wrap(updatePlaceholder) -}; diff --git a/src/app/services/placeholder.ts b/src/app/services/placeholder.ts new file mode 100644 index 0000000..b04722c --- /dev/null +++ b/src/app/services/placeholder.ts @@ -0,0 +1,98 @@ +import status from 'app/configs/status'; +import wrapperService from 'app/services/wrapper'; +import placeholderModel from 'app/models/placeholder'; +import { APIResponse } from 'types'; + +export type CreatePlaceholderParams = { + param1: string, + placeholderId?: string +} + +export type GetPlaceholdersParams = { + param1?: string +} + +export type GetPlaceholderParams = Partial> + +export type UpdatePlaceholderParams = CreatePlaceholderParams + +export type CreatePlaceholderFn = (params: CreatePlaceholderParams) => Promise +export type GetPlaceholdersFn = (params: GetPlaceholdersParams) => Promise +export type GetPlaceholderFn = (params: GetPlaceholderParams) => Promise +export type UpdatePlaceholderFn = (params: UpdatePlaceholderParams) => Promise + +const createPlaceholder: CreatePlaceholderFn = async (params) => { + if (!params.param1) { + throw new Error('input_missing'); + } + + let placeholderId = await placeholderModel.createPlaceholder(params); + + let result = await placeholderModel.getPlaceholder({placeholderId}); + + let response = status.getStatus('success') as APIResponse; + response.data = {}; + response.data.placeholder = result; + + return response; +}; + +const getPlaceholders: GetPlaceholdersFn = async (params) => { + let placeholderParams: any = {}; + params.param1 ? (placeholderParams.param1 = params.param1) : null; + + let result = await placeholderModel.getPlaceholders(placeholderParams); + + let response = status.getStatus('success') as APIResponse; + response.data = {}; + response.data.placeholders = result; + + return response; +}; + +const getPlaceholder: GetPlaceholderFn = async (params) => { + if (!params.placeholderId) { + throw new Error('input_missing'); + } + + let placeholderParams: any = {}; + placeholderParams.placeholderId = params.placeholderId; + + let result = await placeholderModel.getPlaceholder(placeholderParams); + + let response = status.getStatus('success') as APIResponse; + response.data = {}; + response.data.placeholder = result; + + return response; +}; + +const updatePlaceholder: UpdatePlaceholderFn = async (params) => { + if (!params.placeholderId || !params.param1) { + throw new Error('input_missing'); + } + + let placeholderParams: any = {}; + placeholderParams.placeholderId = params.placeholderId; + placeholderParams.param1 = params.param1; + + await placeholderModel.updatePlaceholder(placeholderParams); + + placeholderParams = {}; + placeholderParams.param1 = params.param1; + + let result = await placeholderModel.getPlaceholder(placeholderParams); + + let response = status.getStatus('success') as APIResponse; + response.data = {}; + response.data.placeholder = result; + + return response; +}; + +export default { + createPlaceholder: wrapperService.wrap(createPlaceholder), + getPlaceholders: wrapperService.wrap(getPlaceholders), + getPlaceholder: wrapperService.wrap(getPlaceholder), + updatePlaceholder: wrapperService.wrap(updatePlaceholder) +} \ No newline at end of file diff --git a/src/app/services/utils.js b/src/app/services/utils.ts similarity index 62% rename from src/app/services/utils.js rename to src/app/services/utils.ts index 6f53a43..2e8bc7d 100644 --- a/src/app/services/utils.js +++ b/src/app/services/utils.ts @@ -1,18 +1,26 @@ 'use strict'; -const https = require('https'); +import https from 'https' +import config from "app/configs/config"; -const config = require('app/configs/config'); +export type JSONValue = + | string + | number + | boolean + | null + | { [x: string]: JSONValue } + | JSONValue[] // Need to move this globally -const sanitizeSqlResult = (result) => { + +const sanitizeSqlResult = (result: T): JSONValue => { return JSON.parse(JSON.stringify(result)); }; -const addDays = (date, numberOfDays) => { +const addDays = (date: Date, numberOfDays: number) => { return new Date(date.setDate(date.getDate() + numberOfDays)); }; -const createHierarchy = (input) => { +const createHierarchy = (input: [any]) => { for (let i = input.length - 1; i >= 0; i--) { if (input[i].parent_id) { let _index = input.indexOf(input.filter((inp) => inp.id === input[i].parent_id)[0]); @@ -29,11 +37,11 @@ const createHierarchy = (input) => { return input; }; -const sortByDesc = (key) => { - return (array1, array2) => (array1[key] < array2[key] ? 1 : array2[key] < array1[key] ? -1 : 0); +const sortByDesc = (key: keyof T) => { + return (array1: T, array2: T) => (array1[key] < array2[key] ? 1 : array2[key] < array1[key] ? -1 : 0); }; -const prepareFetchOptions = (options) => { +const prepareFetchOptions = (options: any) => { if (options.method.toUpperCase() === 'GET') { delete options.body; options.qs && Object.keys(options.qs).length ? (options.url += '?' + new URLSearchParams(options.qs)) : null; @@ -43,15 +51,15 @@ const prepareFetchOptions = (options) => { options.headers ? (options.headers['Content-Type'] = 'application/json') : null; options.body ? (options.body = JSON.stringify(options.body)) : null; - config.IPV6 ? (options.agent = new https.Agent({family: 6})) : null; + config.IPV6 ? (options.agent = new https.Agent({ family: 6 })) : null; return options; }; -module.exports = { +export default { sanitizeSqlResult: sanitizeSqlResult, addDays: addDays, createHierarchy: createHierarchy, sortByDesc: sortByDesc, prepareFetchOptions: prepareFetchOptions -}; +} \ No newline at end of file diff --git a/src/app/services/wrapper.js b/src/app/services/wrapper.js deleted file mode 100644 index b823c0b..0000000 --- a/src/app/services/wrapper.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -const status = require('app/configs/status'); - -function wrap(inputFunction) { - return async function () { - try { - return await inputFunction.apply(this, arguments); - } catch (e) { - let cb; - if (arguments.length !== 1) { - cb = arguments[arguments.length - 1]; - } - - // console.log(e.message); - if (e.hasOwnProperty('message')) { - console.log(new Date().toISOString(), status.getStatus(e.message)); - return cb ? cb(status.getStatus(e.message)) : status.getStatus(e.message); - } else { - return cb ? cb(status.getStatus('generic_fail')) : status.getStatus('generic_fail'); - } - } - }; -} - -module.exports = { - wrap: wrap -}; diff --git a/src/app/services/wrapper.ts b/src/app/services/wrapper.ts new file mode 100644 index 0000000..2756b5f --- /dev/null +++ b/src/app/services/wrapper.ts @@ -0,0 +1,31 @@ +import status from 'app/configs/status'; + +type wrappedFunction any> = T & { + lastArgs?: Parameters; +}; + +function wrap any>(fn: T): wrappedFunction { + return async function (...args: Parameters) { + try { + return await fn(...args) + } catch (e: any) { + let cb + if (args.length !== 1) { + cb = args[args.length - 1]; + } + if (`${process.env.NODE_ENV}` !== 'production') { + console.log(e) + } + if (e.hasOwnProperty('message')) { + console.log(new Date().toISOString(), status.getStatus(e.message)); + return cb ? cb(status.getStatus(e.message)) : status.getStatus(e.message); + } else { + return cb ? cb(status.getStatus('generic_fail')) : status.getStatus('generic_fail'); + } + } + } as wrappedFunction +} + +export default { + wrap: wrap +} \ No newline at end of file diff --git a/src/server.ts b/src/server.ts index 69fda57..3e7c37e 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,27 +1,25 @@ -'use strict'; // Include core libraries -import 'module-alias/register'; import express from 'express'; import bodyParser from 'body-parser'; -import fs from 'fs'; import compression from 'compression'; +import authsMiddleware from 'app/middlewares/auths'; import healthchecks from 'app/services/healthchecks'; -const app = express(); // Include config files import config from 'app/configs/config'; import status from 'app/configs/status'; import loggerConfig from 'app/configs/logger'; +const app = express(); + const isDeveloping = process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test'; app.disable('x-powered-by'); // Include middleware -import authsMiddleware from 'app/middlewares/auths'; // Include routers import healthchecksRouter from 'app/routes/healthchecks'; @@ -54,7 +52,7 @@ const dbSelfCheck = async () => { console.log('MySQL connection error', e); } }; -dbSelfCheck(); +// dbSelfCheck(); // Set allowed headers // eslint-disable-next-line no-unused-vars diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..c15fe73 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,18 @@ +import type { Request, Response, NextFunction } from 'express'; +import { Status } from 'app/configs/types'; + +export type JSONValue = + | string + | number + | boolean + | null + | { [x: string]: JSONValue } + | JSONValue[] + +export type Controller = (req: Request, res: Response) => any + +export interface APIResponse extends Status { + data: any +} + +export type Middleware = (req: Request, res: Response, next: NextFunction) => any \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index a2d4bc8..831b97d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,8 @@ "resolveJsonModule": true, "baseUrl": ".", "paths": { - "app/*": ["src/app/*"] + "app/*": ["src/app/*"], + "types": ["src/types.ts"] }, "preserveSymlinks": true }, From 2460860b189cedcf06aba3d7245290ae964b436e Mon Sep 17 00:00:00 2001 From: Souvikns Date: Fri, 4 Jul 2025 18:45:45 +0530 Subject: [PATCH 08/14] chore: minor refacotring with types --- src/app/models/healthchecks.ts | 5 ++--- src/app/models/placeholder.ts | 23 +++++++++-------------- src/app/services/healthchecks.ts | 7 ++----- src/app/services/placeholder.ts | 29 ++++++++++++++--------------- src/app/services/utils.ts | 12 +----------- src/types.ts | 3 ++- 6 files changed, 30 insertions(+), 49 deletions(-) diff --git a/src/app/models/healthchecks.ts b/src/app/models/healthchecks.ts index a74b7a6..31c831b 100644 --- a/src/app/models/healthchecks.ts +++ b/src/app/models/healthchecks.ts @@ -1,11 +1,10 @@ import config from "app/configs/config"; import utilsService from "app/services/utils"; import wrapperService from "app/services/wrapper"; +import { JSONValue } from 'types'; -export type CheckFn = () => Promise - -const check: CheckFn = async () => { +const check = async (): Promise => { const checkQuery = config.knex.select(config.knex.raw('now()')); let result = await checkQuery; diff --git a/src/app/models/placeholder.ts b/src/app/models/placeholder.ts index d2451dc..ae93988 100644 --- a/src/app/models/placeholder.ts +++ b/src/app/models/placeholder.ts @@ -3,29 +3,24 @@ import utilsService from "app/services/utils"; import wrapperService from "app/services/wrapper"; import type { JSONValue } from 'types'; -export type CreatePlaceHolderParam = { +export type CreatePlaceholderInput = { param1: string } -export type GetPlaceholdersParams = { +export type GetPlaceholdersInput = { placeholderId?: number } -export type GetPlaceholderParams = Partial> & { +export type GetPlaceholerInput = { placeholderId: number } -export type UpdatePlaceholderParams = GetPlaceholderParams & { +export type UpdatePlaceholderInput = { param1: string + placeholderId: number } -export type CreatePlaceHolderFn = (params: CreatePlaceHolderParam) => Promise -export type GetPlaceholdersFn = (params: GetPlaceholdersParams) => Promise -export type GetPlaceholderFn = (params: GetPlaceholderParams) => Promise -export type UpdatePlaceholderFn = (params: UpdatePlaceholderParams) => Promise - - -const createPlaceholder: CreatePlaceHolderFn = async (params) => { +const createPlaceholder = async (params: CreatePlaceholderInput): Promise => { if (!params.param1) { throw new Error('input_missing'); } @@ -41,7 +36,7 @@ const createPlaceholder: CreatePlaceHolderFn = async (params) => { return result[0]; }; -const getPlaceholders: GetPlaceholdersFn = async (params) => { +const getPlaceholders = async (params: GetPlaceholdersInput): Promise => { let getPlaceholdersQuery = config.knex.select('id').from('placeholders').orderBy('id', 'desc'); params.placeholderId ? getPlaceholdersQuery.where('id', params.placeholderId) : null; @@ -51,7 +46,7 @@ const getPlaceholders: GetPlaceholdersFn = async (params) => { return utilsService.sanitizeSqlResult(result); }; -const getPlaceholder: GetPlaceholderFn = async (params) => { +const getPlaceholder = async (params: GetPlaceholdersInput): Promise => { if (!params.placeholderId) { throw new Error('input_missing'); } @@ -65,7 +60,7 @@ const getPlaceholder: GetPlaceholderFn = async (params) => { return result[0]; }; -const updatePlaceholder: UpdatePlaceholderFn = async (params) => { +const updatePlaceholder = async (params: UpdatePlaceholderInput): Promise => { if (!params.placeholderId) { throw new Error('input_missing'); } diff --git a/src/app/services/healthchecks.ts b/src/app/services/healthchecks.ts index a96c375..922d354 100644 --- a/src/app/services/healthchecks.ts +++ b/src/app/services/healthchecks.ts @@ -4,10 +4,7 @@ import wrapperService from 'app/services/wrapper'; import healthchecksModel from 'app/models/healthchecks'; import type { Status } from 'app/configs/types'; -export type InitFn = () => Promise -export type HealthchecksFn = () => Promise - -const init: InitFn = async () => { +const init = async () => { if (`${process.env.NODE_ENV}` === 'test') { return; } @@ -36,7 +33,7 @@ const init: InitFn = async () => { }, 30000); }; -const healthchecks: HealthchecksFn = async () => { +const healthchecks = async (): Promise => { let result = await healthchecksModel.check(); if (!result) { diff --git a/src/app/services/placeholder.ts b/src/app/services/placeholder.ts index b04722c..11664df 100644 --- a/src/app/services/placeholder.ts +++ b/src/app/services/placeholder.ts @@ -3,25 +3,24 @@ import wrapperService from 'app/services/wrapper'; import placeholderModel from 'app/models/placeholder'; import { APIResponse } from 'types'; -export type CreatePlaceholderParams = { - param1: string, - placeholderId?: string +export type CreatePlaceholderInput = { + param1: string } -export type GetPlaceholdersParams = { +export type GetPlaceholdersInput = { param1?: string } -export type GetPlaceholderParams = Partial> - -export type UpdatePlaceholderParams = CreatePlaceholderParams +export type GetPlaceholderInput = { + placeholderId: number +} -export type CreatePlaceholderFn = (params: CreatePlaceholderParams) => Promise -export type GetPlaceholdersFn = (params: GetPlaceholdersParams) => Promise -export type GetPlaceholderFn = (params: GetPlaceholderParams) => Promise -export type UpdatePlaceholderFn = (params: UpdatePlaceholderParams) => Promise +export type UpdatePlaceholderInput = { + placeholderId: number + param1: string +} -const createPlaceholder: CreatePlaceholderFn = async (params) => { +const createPlaceholder = async (params: CreatePlaceholderInput): Promise => { if (!params.param1) { throw new Error('input_missing'); } @@ -37,7 +36,7 @@ const createPlaceholder: CreatePlaceholderFn = async (params) => { return response; }; -const getPlaceholders: GetPlaceholdersFn = async (params) => { +const getPlaceholders = async (params: GetPlaceholdersInput): Promise => { let placeholderParams: any = {}; params.param1 ? (placeholderParams.param1 = params.param1) : null; @@ -50,7 +49,7 @@ const getPlaceholders: GetPlaceholdersFn = async (params) => { return response; }; -const getPlaceholder: GetPlaceholderFn = async (params) => { +const getPlaceholder = async (params: GetPlaceholderInput): Promise => { if (!params.placeholderId) { throw new Error('input_missing'); } @@ -67,7 +66,7 @@ const getPlaceholder: GetPlaceholderFn = async (params) => { return response; }; -const updatePlaceholder: UpdatePlaceholderFn = async (params) => { +const updatePlaceholder = async (params: UpdatePlaceholderInput): Promise => { if (!params.placeholderId || !params.param1) { throw new Error('input_missing'); } diff --git a/src/app/services/utils.ts b/src/app/services/utils.ts index 2e8bc7d..3772ea2 100644 --- a/src/app/services/utils.ts +++ b/src/app/services/utils.ts @@ -1,16 +1,6 @@ -'use strict'; - import https from 'https' import config from "app/configs/config"; - -export type JSONValue = - | string - | number - | boolean - | null - | { [x: string]: JSONValue } - | JSONValue[] // Need to move this globally - +import { JSONValue } from 'types'; const sanitizeSqlResult = (result: T): JSONValue => { return JSON.parse(JSON.stringify(result)); diff --git a/src/types.ts b/src/types.ts index c15fe73..8dd806f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -15,4 +15,5 @@ export interface APIResponse extends Status { data: any } -export type Middleware = (req: Request, res: Response, next: NextFunction) => any \ No newline at end of file +export type Middleware = (req: Request, res: Response, next: NextFunction) => any + From 962b4329a38bbf796ba36c871a85c5382aa80074 Mon Sep 17 00:00:00 2001 From: Souvikns Date: Fri, 4 Jul 2025 19:50:11 +0530 Subject: [PATCH 09/14] chore: moved all the types --- src/app/configs/config.ts | 2 +- src/app/configs/environments/common.ts | 2 +- src/app/configs/environments/development.ts | 2 +- src/app/configs/environments/production.ts | 2 +- src/app/configs/environments/staging.ts | 2 +- src/app/configs/environments/test.ts | 2 +- src/app/configs/status.ts | 2 +- src/app/configs/types.ts | 38 --------------------- src/app/controllers/healthchecks.ts | 3 +- src/app/services/healthchecks.ts | 2 +- src/types.ts | 38 ++++++++++++++++++++- 11 files changed, 46 insertions(+), 49 deletions(-) delete mode 100644 src/app/configs/types.ts diff --git a/src/app/configs/config.ts b/src/app/configs/config.ts index 93175f0..c6215a8 100644 --- a/src/app/configs/config.ts +++ b/src/app/configs/config.ts @@ -1,5 +1,5 @@ import common from 'app/configs/environments/common'; -import type { EnviornmentConfig, Config } from 'app/configs/types'; +import type { EnviornmentConfig, Config } from 'types'; const environment: EnviornmentConfig = require(`app/configs/environments/${process.env.NODE_ENV}`); export const config: Config = { diff --git a/src/app/configs/environments/common.ts b/src/app/configs/environments/common.ts index 5f9edf8..a857b40 100644 --- a/src/app/configs/environments/common.ts +++ b/src/app/configs/environments/common.ts @@ -1,5 +1,5 @@ 'use strict'; -import type { CommonConfig } from 'app/configs/types'; +import type { CommonConfig } from 'types'; const IPV6 = true; diff --git a/src/app/configs/environments/development.ts b/src/app/configs/environments/development.ts index 3ffbacf..4994d9a 100644 --- a/src/app/configs/environments/development.ts +++ b/src/app/configs/environments/development.ts @@ -1,4 +1,4 @@ -import { EnviornmentConfig, HealthChecksConfig, KnexConfig, MysqlConnectionString } from 'app/configs/types'; +import { EnviornmentConfig, HealthChecksConfig, KnexConfig, MysqlConnectionString } from 'types'; import Knex from 'knex'; import os from 'os'; diff --git a/src/app/configs/environments/production.ts b/src/app/configs/environments/production.ts index a28e0da..6a3942c 100644 --- a/src/app/configs/environments/production.ts +++ b/src/app/configs/environments/production.ts @@ -1,5 +1,5 @@ -import { EnviornmentConfig, HealthChecksConfig, KnexConfig, MysqlConnectionString } from 'app/configs/types'; +import { EnviornmentConfig, HealthChecksConfig, KnexConfig, MysqlConnectionString } from 'types'; import Knex from 'knex'; import os from 'os'; diff --git a/src/app/configs/environments/staging.ts b/src/app/configs/environments/staging.ts index 3ffbacf..4994d9a 100644 --- a/src/app/configs/environments/staging.ts +++ b/src/app/configs/environments/staging.ts @@ -1,4 +1,4 @@ -import { EnviornmentConfig, HealthChecksConfig, KnexConfig, MysqlConnectionString } from 'app/configs/types'; +import { EnviornmentConfig, HealthChecksConfig, KnexConfig, MysqlConnectionString } from 'types'; import Knex from 'knex'; import os from 'os'; diff --git a/src/app/configs/environments/test.ts b/src/app/configs/environments/test.ts index ee0ad66..48c366d 100644 --- a/src/app/configs/environments/test.ts +++ b/src/app/configs/environments/test.ts @@ -1,4 +1,4 @@ -import { EnviornmentConfig, HealthChecksConfig, KnexConfig, MysqlConnectionString } from 'app/configs/types'; +import { EnviornmentConfig, HealthChecksConfig, KnexConfig, MysqlConnectionString } from 'types'; import Knex from 'knex'; import os from 'os'; diff --git a/src/app/configs/status.ts b/src/app/configs/status.ts index 61a7ec3..7626b0c 100644 --- a/src/app/configs/status.ts +++ b/src/app/configs/status.ts @@ -1,4 +1,4 @@ -import type { Status } from 'app/configs/types'; +import type { Status } from 'types'; export const getStatus = (code: string): Status => { let status = null as Status | null; diff --git a/src/app/configs/types.ts b/src/app/configs/types.ts deleted file mode 100644 index e76a80b..0000000 --- a/src/app/configs/types.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { Knex } from 'knex'; - -export interface Config extends CommonConfig, EnviornmentConfig { } - -export interface CommonConfig { - SERVER_IP: string - SERVER_PORT: number - IPV6?: boolean -} - -export interface EnviornmentConfig { - knex: Knex, - MORGAN_LOG_PATH: string - HEALTHCHECKS: HealthChecksConfig -} - -export type KnexConfig = { client: 'mysql', connection: MysqlConnectionString } - -export type MysqlConnectionString = { - host: string - user: string - password: string - database: string - port: number -} - -export type HealthChecksConfig = { - DEPLOY_BASE_URL: string - URL: string -} - -export type getStatusFn = (code: string) => Status - -export type Status = { - code: string - error: boolean - message: string -} \ No newline at end of file diff --git a/src/app/controllers/healthchecks.ts b/src/app/controllers/healthchecks.ts index 00e1dae..1219807 100644 --- a/src/app/controllers/healthchecks.ts +++ b/src/app/controllers/healthchecks.ts @@ -1,7 +1,6 @@ import healthchecksService from "app/services/healthchecks"; import wrapperService from "app/services/wrapper"; -import { Status } from "app/configs/types"; -import { Controller } from 'types'; +import { Controller, Status } from 'types'; const healthchecks: Controller = async (req, res) => { diff --git a/src/app/services/healthchecks.ts b/src/app/services/healthchecks.ts index 922d354..a71c6c6 100644 --- a/src/app/services/healthchecks.ts +++ b/src/app/services/healthchecks.ts @@ -2,7 +2,7 @@ import config from "app/configs/config"; import status from "app/configs/status"; import wrapperService from 'app/services/wrapper'; import healthchecksModel from 'app/models/healthchecks'; -import type { Status } from 'app/configs/types'; +import type { Status } from 'types'; const init = async () => { if (`${process.env.NODE_ENV}` === 'test') { diff --git a/src/types.ts b/src/types.ts index 8dd806f..625e99d 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,5 +1,5 @@ +import { Knex } from 'knex'; import type { Request, Response, NextFunction } from 'express'; -import { Status } from 'app/configs/types'; export type JSONValue = | string @@ -17,3 +17,39 @@ export interface APIResponse extends Status { export type Middleware = (req: Request, res: Response, next: NextFunction) => any +export interface Config extends CommonConfig, EnviornmentConfig { } + +export interface CommonConfig { + SERVER_IP: string + SERVER_PORT: number + IPV6?: boolean +} + +export interface EnviornmentConfig { + knex: Knex, + MORGAN_LOG_PATH: string + HEALTHCHECKS: HealthChecksConfig +} + +export type KnexConfig = { client: 'mysql', connection: MysqlConnectionString } + +export type MysqlConnectionString = { + host: string + user: string + password: string + database: string + port: number +} + +export type HealthChecksConfig = { + DEPLOY_BASE_URL: string + URL: string +} + +export type getStatusFn = (code: string) => Status + +export type Status = { + code: string + error: boolean + message: string +} \ No newline at end of file From 1acf5656abb9c3cc2092383f9df9a4cd94e2f57b Mon Sep 17 00:00:00 2001 From: Souvikns Date: Mon, 7 Jul 2025 12:32:06 +0530 Subject: [PATCH 10/14] chore: move types to central file --- scripts/build.js | 4 +- src/app/configs/config.ts | 3 +- src/app/controllers/placeholder.ts | 30 ++---- src/app/models/placeholder.ts | 31 ++----- src/app/services/placeholder.ts | 29 ++---- src/types.ts | 144 +++++++++++++++++++++++------ 6 files changed, 137 insertions(+), 104 deletions(-) diff --git a/scripts/build.js b/scripts/build.js index ef06294..4d39440 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -3,11 +3,11 @@ const esbuild = require('esbuild'); const fs = require('fs'); -!fs.existsSync(`${__dirname}/../node_modules/app`) ? fs.symlinkSync(`${__dirname}/../app`, `${__dirname}/../node_modules/app`) : null; +!fs.existsSync(`${__dirname}/../node_modules/app`) ? fs.symlinkSync(`${__dirname}/../dist/app`, `${__dirname}/../node_modules/app`) : null; const build = async () => { await esbuild.build({ - entryPoints: ['./server.js'], + entryPoints: ['./dist/server.js'], bundle: true, platform: 'node', outfile: '.server.js', diff --git a/src/app/configs/config.ts b/src/app/configs/config.ts index c6215a8..d2584b2 100644 --- a/src/app/configs/config.ts +++ b/src/app/configs/config.ts @@ -7,5 +7,4 @@ export const config: Config = { ...environment }; -export default config; -module.exports = config \ No newline at end of file +export default config; \ No newline at end of file diff --git a/src/app/controllers/placeholder.ts b/src/app/controllers/placeholder.ts index f59138d..cbf0aa5 100644 --- a/src/app/controllers/placeholder.ts +++ b/src/app/controllers/placeholder.ts @@ -1,26 +1,10 @@ import placeholderService from "app/services/placeholder"; import wrapperService from "app/services/wrapper"; -import { Controller } from 'types'; +import { Controller, CreatePlaceholderControllerBody, GetPlaceholersControllerBody, GetPlaceholderControllerBody, UpdatePlaceholderControllerBody } from 'types'; -export type CreatePlaceholderBody = { - param1: string -} - -export type GetPlaceholersBody = { - param1?: string -} - -export type GetPlaceholderBody = { - placeholder_id: number -} - -export type UpdatePlaceholderBody = { - param1?: string - placeholder_id?: number -} const createPlaceholder: Controller = async (req, res) => { - const param = req.body as CreatePlaceholderBody; + const param = req.body as CreatePlaceholderControllerBody; if (!param.param1) { throw new Error('input_missing'); } @@ -31,8 +15,8 @@ const createPlaceholder: Controller = async (req, res) => { }; // eslint-disable-next-line no-unused-vars -const getPlaceholders:Controller = async (req, res) => { - const param = req.body as GetPlaceholersBody +const getPlaceholders: Controller = async (req, res) => { + const param = req.body as GetPlaceholersControllerBody let result = await placeholderService.getPlaceholders(param); @@ -40,8 +24,8 @@ const getPlaceholders:Controller = async (req, res) => { }; // eslint-disable-next-line no-unused-vars -const getPlaceholder: Controller= async (req, res) => { - req.body as GetPlaceholderBody; +const getPlaceholder: Controller = async (req, res) => { + req.body as GetPlaceholderControllerBody; if (!req.params.placeholder_id) { throw new Error('input_missing'); } @@ -56,7 +40,7 @@ const getPlaceholder: Controller= async (req, res) => { // eslint-disable-next-line no-unused-vars const updatePlaceholder: Controller = async (req, res) => { - req.body as UpdatePlaceholderBody; + req.body as UpdatePlaceholderControllerBody; if (!req.params.placeholder_id) { throw new Error('input_missing'); } diff --git a/src/app/models/placeholder.ts b/src/app/models/placeholder.ts index ae93988..1e195f7 100644 --- a/src/app/models/placeholder.ts +++ b/src/app/models/placeholder.ts @@ -1,26 +1,10 @@ import config from "app/configs/config"; import utilsService from "app/services/utils"; import wrapperService from "app/services/wrapper"; -import type { JSONValue } from 'types'; +import type { CreatePlaceholderModelInput, GetPlaceholdersModelInput, GetPlaceholerModelInput, UpdatePlaceholderModelInput, Placeholder } from 'types'; -export type CreatePlaceholderInput = { - param1: string -} - -export type GetPlaceholdersInput = { - placeholderId?: number -} - -export type GetPlaceholerInput = { - placeholderId: number -} - -export type UpdatePlaceholderInput = { - param1: string - placeholderId: number -} -const createPlaceholder = async (params: CreatePlaceholderInput): Promise => { +const createPlaceholder = async (params: CreatePlaceholderModelInput): Promise => { if (!params.param1) { throw new Error('input_missing'); } @@ -36,17 +20,17 @@ const createPlaceholder = async (params: CreatePlaceholderInput): Promise => { - let getPlaceholdersQuery = config.knex.select('id').from('placeholders').orderBy('id', 'desc'); +const getPlaceholders = async (params: GetPlaceholdersModelInput): Promise => { + let getPlaceholdersQuery = config.knex.select('id').select('param1').select('active').select('created_at').select('updated_at').select('deleted_at').from('placeholders').orderBy('id', 'desc'); params.placeholderId ? getPlaceholdersQuery.where('id', params.placeholderId) : null; - let result = await getPlaceholdersQuery; + let result: Placeholder[] = await getPlaceholdersQuery; return utilsService.sanitizeSqlResult(result); }; -const getPlaceholder = async (params: GetPlaceholdersInput): Promise => { +const getPlaceholder = async (params: GetPlaceholerModelInput): Promise => { if (!params.placeholderId) { throw new Error('input_missing'); } @@ -56,11 +40,10 @@ const getPlaceholder = async (params: GetPlaceholdersInput): Promise return null; } - // @ts-ignore return result[0]; }; -const updatePlaceholder = async (params: UpdatePlaceholderInput): Promise => { +const updatePlaceholder = async (params: UpdatePlaceholderModelInput): Promise => { if (!params.placeholderId) { throw new Error('input_missing'); } diff --git a/src/app/services/placeholder.ts b/src/app/services/placeholder.ts index 11664df..2bc127d 100644 --- a/src/app/services/placeholder.ts +++ b/src/app/services/placeholder.ts @@ -1,33 +1,16 @@ import status from 'app/configs/status'; import wrapperService from 'app/services/wrapper'; import placeholderModel from 'app/models/placeholder'; -import { APIResponse } from 'types'; +import { APIResponse, CreatePlaceholderServiceInput, GetPlaceholdersServiceInput, GetPlaceholderServiceInput, UpdatePlaceholderServiceInput } from 'types'; -export type CreatePlaceholderInput = { - param1: string -} - -export type GetPlaceholdersInput = { - param1?: string -} - -export type GetPlaceholderInput = { - placeholderId: number -} - -export type UpdatePlaceholderInput = { - placeholderId: number - param1: string -} - -const createPlaceholder = async (params: CreatePlaceholderInput): Promise => { +const createPlaceholder = async (params: CreatePlaceholderServiceInput): Promise => { if (!params.param1) { throw new Error('input_missing'); } let placeholderId = await placeholderModel.createPlaceholder(params); - let result = await placeholderModel.getPlaceholder({placeholderId}); + let result = await placeholderModel.getPlaceholder({ placeholderId }); let response = status.getStatus('success') as APIResponse; response.data = {}; @@ -36,7 +19,7 @@ const createPlaceholder = async (params: CreatePlaceholderInput): Promise => { +const getPlaceholders = async (params: GetPlaceholdersServiceInput): Promise => { let placeholderParams: any = {}; params.param1 ? (placeholderParams.param1 = params.param1) : null; @@ -49,7 +32,7 @@ const getPlaceholders = async (params: GetPlaceholdersInput): Promise => { +const getPlaceholder = async (params: GetPlaceholderServiceInput): Promise => { if (!params.placeholderId) { throw new Error('input_missing'); } @@ -66,7 +49,7 @@ const getPlaceholder = async (params: GetPlaceholderInput): Promise return response; }; -const updatePlaceholder = async (params: UpdatePlaceholderInput): Promise => { +const updatePlaceholder = async (params: UpdatePlaceholderServiceInput): Promise => { if (!params.placeholderId || !params.param1) { throw new Error('input_missing'); } diff --git a/src/types.ts b/src/types.ts index 625e99d..439062a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,55 +1,139 @@ import { Knex } from 'knex'; import type { Request, Response, NextFunction } from 'express'; -export type JSONValue = - | string - | number - | boolean - | null - | { [x: string]: JSONValue } - | JSONValue[] +export type JSONValue = + | string + | number + | boolean + | null + | { [x: string]: JSONValue } + | JSONValue[] + | T -export type Controller = (req: Request, res: Response) => any +export type Controller = (req: Request, res: Response) => any; export interface APIResponse extends Status { - data: any + data: any; } -export type Middleware = (req: Request, res: Response, next: NextFunction) => any +export type Middleware = (req: Request, res: Response, next: NextFunction) => any; -export interface Config extends CommonConfig, EnviornmentConfig { } export interface CommonConfig { - SERVER_IP: string - SERVER_PORT: number - IPV6?: boolean + SERVER_IP: string; + SERVER_PORT: number; + IPV6?: boolean; } export interface EnviornmentConfig { - knex: Knex, - MORGAN_LOG_PATH: string - HEALTHCHECKS: HealthChecksConfig + knex: Knex; + MORGAN_LOG_PATH: string; + HEALTHCHECKS: HealthChecksConfig; } -export type KnexConfig = { client: 'mysql', connection: MysqlConnectionString } +export type KnexConfig = { client: 'mysql', connection: MysqlConnectionString }; export type MysqlConnectionString = { - host: string - user: string - password: string - database: string - port: number + host: string; + user: string; + password: string; + database: string; + port: number; } export type HealthChecksConfig = { - DEPLOY_BASE_URL: string - URL: string + DEPLOY_BASE_URL: string; + URL: string; } -export type getStatusFn = (code: string) => Status +export interface Config extends CommonConfig, EnviornmentConfig { }; + +export type getStatusFn = (code: string) => Status; export type Status = { - code: string - error: boolean - message: string -} \ No newline at end of file + code: string; + error: boolean; + message: string; +} + + +/** + * Entity Types + */ + +export type Placeholder = { + id: number; + param1: string; + active: boolean; + created_at: Date; + updated_at: Date; + deleted_at: Date; +} + +/** + * Model Types + */ + +export type CreatePlaceholderModelInput = { + param1: string; +} + +export type GetPlaceholdersModelInput = { + placeholderId?: number; +} + +export type GetPlaceholerModelInput = { + placeholderId: number; +} + +export type UpdatePlaceholderModelInput = { + param1: string; + placeholderId: number; +} + + +/** + * Service Types + */ + + +export type CreatePlaceholderServiceInput = { + param1: string; +} + +export type GetPlaceholdersServiceInput = { + param1?: string; +} + +export type GetPlaceholderServiceInput = { + placeholderId: number; +} + +export type UpdatePlaceholderServiceInput = { + placeholderId: number; + param1: string; +} + + +/** + * Controller + */ + + +export type CreatePlaceholderControllerBody = { + param1: string; +} + +export type GetPlaceholersControllerBody = { + param1?: string; +} + +export type GetPlaceholderControllerBody = { + placeholder_id: number; +} + +export type UpdatePlaceholderControllerBody = { + param1?: string; + placeholder_id?: number; +} + From 6c3fe980dfc8abe3c70516fbd2c1bdbb4c1ce15a Mon Sep 17 00:00:00 2001 From: Souvikns Date: Tue, 8 Jul 2025 15:40:09 +0530 Subject: [PATCH 11/14] feat: update typings --- src/app/controllers/healthchecks.ts | 4 +- src/app/controllers/placeholder.ts | 18 +++---- src/app/models/placeholder.ts | 10 ++-- src/app/services/placeholder.ts | 25 +++++---- src/types.ts | 84 +++++++++++++++++++++++------ 5 files changed, 98 insertions(+), 43 deletions(-) diff --git a/src/app/controllers/healthchecks.ts b/src/app/controllers/healthchecks.ts index 1219807..19ae8f6 100644 --- a/src/app/controllers/healthchecks.ts +++ b/src/app/controllers/healthchecks.ts @@ -1,9 +1,9 @@ import healthchecksService from "app/services/healthchecks"; import wrapperService from "app/services/wrapper"; -import { Controller, Status } from 'types'; +import { Controller } from 'types'; -const healthchecks: Controller = async (req, res) => { +const healthchecks: Controller = async (req, res) => { let result = await healthchecksService.healthchecks(); return res.json(result); diff --git a/src/app/controllers/placeholder.ts b/src/app/controllers/placeholder.ts index cbf0aa5..49773fc 100644 --- a/src/app/controllers/placeholder.ts +++ b/src/app/controllers/placeholder.ts @@ -1,10 +1,10 @@ import placeholderService from "app/services/placeholder"; import wrapperService from "app/services/wrapper"; -import { Controller, CreatePlaceholderControllerBody, GetPlaceholersControllerBody, GetPlaceholderControllerBody, UpdatePlaceholderControllerBody } from 'types'; +import { Controller, CreatePlaceholderRequest, GetPlaceholdersRequest, GetplaceholderRequest, UpdatePlaceholderRequest, CreatePlaceholderResponse, GetPlaceholersResponse, GetplaceholderResponse, UpdatePlaceholderResponse, APIResponse } from 'types'; -const createPlaceholder: Controller = async (req, res) => { - const param = req.body as CreatePlaceholderControllerBody; +const createPlaceholder: Controller = async (req: CreatePlaceholderRequest, res) => { + const param = req.body; if (!param.param1) { throw new Error('input_missing'); } @@ -15,17 +15,16 @@ const createPlaceholder: Controller = async (req, res) => { }; // eslint-disable-next-line no-unused-vars -const getPlaceholders: Controller = async (req, res) => { - const param = req.body as GetPlaceholersControllerBody +const getPlaceholders: Controller = async (req: GetPlaceholdersRequest, res) => { + const param = req.body - let result = await placeholderService.getPlaceholders(param); + let result = await placeholderService.getPlaceholders({ placeholderId: param.placeholder_id }); return res.json(result); }; // eslint-disable-next-line no-unused-vars -const getPlaceholder: Controller = async (req, res) => { - req.body as GetPlaceholderControllerBody; +const getPlaceholder: Controller = async (req: GetplaceholderRequest, res) => { if (!req.params.placeholder_id) { throw new Error('input_missing'); } @@ -39,8 +38,7 @@ const getPlaceholder: Controller = async (req, res) => { }; // eslint-disable-next-line no-unused-vars -const updatePlaceholder: Controller = async (req, res) => { - req.body as UpdatePlaceholderControllerBody; +const updatePlaceholder: Controller = async (req: UpdatePlaceholderRequest, res) => { if (!req.params.placeholder_id) { throw new Error('input_missing'); } diff --git a/src/app/models/placeholder.ts b/src/app/models/placeholder.ts index 1e195f7..e7f1a6b 100644 --- a/src/app/models/placeholder.ts +++ b/src/app/models/placeholder.ts @@ -1,10 +1,10 @@ import config from "app/configs/config"; import utilsService from "app/services/utils"; import wrapperService from "app/services/wrapper"; -import type { CreatePlaceholderModelInput, GetPlaceholdersModelInput, GetPlaceholerModelInput, UpdatePlaceholderModelInput, Placeholder } from 'types'; +import type {CreatePlaceholderOperation, GetPlaceholdersOperation, GetPlaceholderOperation, UpdatePlaceholderOperation, Placeholder} from 'types'; -const createPlaceholder = async (params: CreatePlaceholderModelInput): Promise => { +const createPlaceholder = async (params: CreatePlaceholderOperation): Promise => { if (!params.param1) { throw new Error('input_missing'); } @@ -20,7 +20,7 @@ const createPlaceholder = async (params: CreatePlaceholderModelInput): Promise => { +const getPlaceholders = async (params: GetPlaceholdersOperation): Promise => { let getPlaceholdersQuery = config.knex.select('id').select('param1').select('active').select('created_at').select('updated_at').select('deleted_at').from('placeholders').orderBy('id', 'desc'); params.placeholderId ? getPlaceholdersQuery.where('id', params.placeholderId) : null; @@ -30,7 +30,7 @@ const getPlaceholders = async (params: GetPlaceholdersModelInput): Promise => { +const getPlaceholder = async (params: GetPlaceholderOperation): Promise => { if (!params.placeholderId) { throw new Error('input_missing'); } @@ -43,7 +43,7 @@ const getPlaceholder = async (params: GetPlaceholerModelInput): Promise => { +const updatePlaceholder = async (params: UpdatePlaceholderOperation): Promise => { if (!params.placeholderId) { throw new Error('input_missing'); } diff --git a/src/app/services/placeholder.ts b/src/app/services/placeholder.ts index 2bc127d..45af2db 100644 --- a/src/app/services/placeholder.ts +++ b/src/app/services/placeholder.ts @@ -1,9 +1,9 @@ import status from 'app/configs/status'; import wrapperService from 'app/services/wrapper'; import placeholderModel from 'app/models/placeholder'; -import { APIResponse, CreatePlaceholderServiceInput, GetPlaceholdersServiceInput, GetPlaceholderServiceInput, UpdatePlaceholderServiceInput } from 'types'; +import {CreatePlaceholderOperation, GetPlaceholdersOperation, GetPlaceholderOperation, UpdatePlaceholderOperation, APIResponse, CreatePlaceholderResponse } from 'types'; -const createPlaceholder = async (params: CreatePlaceholderServiceInput): Promise => { +const createPlaceholder = async (params: CreatePlaceholderOperation): Promise> => { if (!params.param1) { throw new Error('input_missing'); } @@ -11,17 +11,20 @@ const createPlaceholder = async (params: CreatePlaceholderServiceInput): Promise let placeholderId = await placeholderModel.createPlaceholder(params); let result = await placeholderModel.getPlaceholder({ placeholderId }); + if (!result) { + throw new Error + } - let response = status.getStatus('success') as APIResponse; - response.data = {}; - response.data.placeholder = result; - + let response = status.getStatus('success') as APIResponse; + response.data = { + placeholder: result + } return response; }; -const getPlaceholders = async (params: GetPlaceholdersServiceInput): Promise => { - let placeholderParams: any = {}; - params.param1 ? (placeholderParams.param1 = params.param1) : null; +const getPlaceholders = async (params: GetPlaceholdersOperation): Promise => { + let placeholderParams: GetPlaceholdersOperation = {}; + params.placeholderId ? (placeholderParams.placeholderId = params.placeholderId) : null; let result = await placeholderModel.getPlaceholders(placeholderParams); @@ -32,7 +35,7 @@ const getPlaceholders = async (params: GetPlaceholdersServiceInput): Promise => { +const getPlaceholder = async (params: GetPlaceholderOperation): Promise => { if (!params.placeholderId) { throw new Error('input_missing'); } @@ -49,7 +52,7 @@ const getPlaceholder = async (params: GetPlaceholderServiceInput): Promise => { +const updatePlaceholder = async (params: UpdatePlaceholderOperation): Promise => { if (!params.placeholderId || !params.param1) { throw new Error('input_missing'); } diff --git a/src/types.ts b/src/types.ts index 439062a..e84b35a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,5 +1,5 @@ import { Knex } from 'knex'; -import type { Request, Response, NextFunction } from 'express'; +import { type Request, type Response, type NextFunction, request } from 'express'; export type JSONValue = | string @@ -10,11 +10,8 @@ export type JSONValue = | JSONValue[] | T -export type Controller = (req: Request, res: Response) => any; +export type Controller = (req: Request, res: Response>) => any; -export interface APIResponse extends Status { - data: any; -} export type Middleware = (req: Request, res: Response, next: NextFunction) => any; @@ -56,6 +53,9 @@ export type Status = { message: string; } +export interface APIResponse extends Status { + data?: T; +} /** * Entity Types @@ -102,7 +102,7 @@ export type CreatePlaceholderServiceInput = { } export type GetPlaceholdersServiceInput = { - param1?: string; + placeholderId?: string; } export type GetPlaceholderServiceInput = { @@ -114,26 +114,80 @@ export type UpdatePlaceholderServiceInput = { param1: string; } +/** + * Operation + */ + +export type CreatePlaceholderOperation = { + param1: string; +} + +export type GetPlaceholdersOperation = { + placeholderId?: number; +} + +export type GetPlaceholderOperation = { + placeholderId: number; +} + +export type UpdatePlaceholderOperation = { + placeholderId: number; + param1: string +} + /** * Controller */ -export type CreatePlaceholderControllerBody = { - param1: string; +export interface CreatePlaceholderRequest extends Request { + body: { + param1: string + } +} + +export interface CreatePlaceholderResponse { + placeholder: Placeholder +} + + +export interface GetPlaceholdersRequest extends Request { + body: { + placeholder_id?: number + } } -export type GetPlaceholersControllerBody = { - param1?: string; +export interface GetPlaceholersResponse { + placeholder: Placeholder[] } -export type GetPlaceholderControllerBody = { - placeholder_id: number; +export interface GetplaceholderRequest extends Request { + body: { + placeholder_id: number + } } -export type UpdatePlaceholderControllerBody = { - param1?: string; - placeholder_id?: number; +export interface GetplaceholderResponse { + placeholder: Placeholder } +export interface UpdatePlaceholderRequest extends Request { + body: { + param1?: string + placeholder_id?: number + } +} + +export interface UpdatePlaceholderResponse { + placeholder: Placeholder +} + +export type TempController = (req: Req, res: Response) => any + + +type Something = { + [x in p]: Object; +}; + +type p = 'user' From b73b5537a9a73315e3cbb90f3229a2ea4a51d4c5 Mon Sep 17 00:00:00 2001 From: Souvikns Date: Wed, 9 Jul 2025 13:01:53 +0530 Subject: [PATCH 12/14] fix: update type structure for controller --- src/app/controllers/placeholder.ts | 28 +++++++++++++++++++--------- src/types.ts | 8 ++++---- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/app/controllers/placeholder.ts b/src/app/controllers/placeholder.ts index 49773fc..df3edf2 100644 --- a/src/app/controllers/placeholder.ts +++ b/src/app/controllers/placeholder.ts @@ -1,36 +1,46 @@ import placeholderService from "app/services/placeholder"; import wrapperService from "app/services/wrapper"; -import { Controller, CreatePlaceholderRequest, GetPlaceholdersRequest, GetplaceholderRequest, UpdatePlaceholderRequest, CreatePlaceholderResponse, GetPlaceholersResponse, GetplaceholderResponse, UpdatePlaceholderResponse, APIResponse } from 'types'; +import { Controller, CreatePlaceholderRequest, GetPlaceholdersRequest, GetPlaceholderRequest, UpdatePlaceholderRequest, CreatePlaceholderResponse, GetPlaceholersResponse, GetPlaceholderResponse, UpdatePlaceholderResponse, APIResponse } from 'types'; const createPlaceholder: Controller = async (req: CreatePlaceholderRequest, res) => { - const param = req.body; - if (!param.param1) { + const params = req.body; + if (!params.param1) { throw new Error('input_missing'); } - let result = await placeholderService.createPlaceholder(param); + let placeholderParams = { + param1: params.param1 + } + + let result = await placeholderService.createPlaceholder(placeholderParams); return res.json(result); }; // eslint-disable-next-line no-unused-vars const getPlaceholders: Controller = async (req: GetPlaceholdersRequest, res) => { - const param = req.body + const params = req.body + + let placeholderParams = { + placeholderId: params.placeholder_id + } - let result = await placeholderService.getPlaceholders({ placeholderId: param.placeholder_id }); + + let result = await placeholderService.getPlaceholders(placeholderParams); return res.json(result); }; // eslint-disable-next-line no-unused-vars -const getPlaceholder: Controller = async (req: GetplaceholderRequest, res) => { +const getPlaceholder: Controller = async (req: GetPlaceholderRequest, res) => { if (!req.params.placeholder_id) { throw new Error('input_missing'); } - let placeholderParams: any = {}; - placeholderParams.placeholderId = parseInt(req.params.placeholder_id); + let placeholderParams = { + placeholderId: req.params.placeholder_id + }; let result = await placeholderService.getPlaceholder(placeholderParams); diff --git a/src/types.ts b/src/types.ts index e84b35a..223c12e 100644 --- a/src/types.ts +++ b/src/types.ts @@ -10,7 +10,7 @@ export type JSONValue = | JSONValue[] | T -export type Controller = (req: Request, res: Response>) => any; +export type Controller = (req: Request, res: Response>) => any; export type Middleware = (req: Request, res: Response, next: NextFunction) => any; @@ -162,13 +162,13 @@ export interface GetPlaceholersResponse { placeholder: Placeholder[] } -export interface GetplaceholderRequest extends Request { - body: { +export interface GetPlaceholderRequest extends Request { + params: { placeholder_id: number } } -export interface GetplaceholderResponse { +export interface GetPlaceholderResponse { placeholder: Placeholder } From ae9beea1c50697c111275fda80aae27fbee8c338 Mon Sep 17 00:00:00 2001 From: Souvikns Date: Wed, 9 Jul 2025 15:26:50 +0530 Subject: [PATCH 13/14] chore: clean out types.ts --- src/types.ts | 41 ----------------------------------------- 1 file changed, 41 deletions(-) diff --git a/src/types.ts b/src/types.ts index 223c12e..3595d77 100644 --- a/src/types.ts +++ b/src/types.ts @@ -70,49 +70,8 @@ export type Placeholder = { deleted_at: Date; } -/** - * Model Types - */ - -export type CreatePlaceholderModelInput = { - param1: string; -} - -export type GetPlaceholdersModelInput = { - placeholderId?: number; -} - -export type GetPlaceholerModelInput = { - placeholderId: number; -} - -export type UpdatePlaceholderModelInput = { - param1: string; - placeholderId: number; -} -/** - * Service Types - */ - - -export type CreatePlaceholderServiceInput = { - param1: string; -} - -export type GetPlaceholdersServiceInput = { - placeholderId?: string; -} - -export type GetPlaceholderServiceInput = { - placeholderId: number; -} - -export type UpdatePlaceholderServiceInput = { - placeholderId: number; - param1: string; -} /** * Operation From 37b7c11e36811196049b078a92274d77e5617c46 Mon Sep 17 00:00:00 2001 From: Souvikns Date: Wed, 9 Jul 2025 15:28:34 +0530 Subject: [PATCH 14/14] chore: cleaned type.ts --- src/types.ts | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/src/types.ts b/src/types.ts index 3595d77..cf801d3 100644 --- a/src/types.ts +++ b/src/types.ts @@ -91,7 +91,7 @@ export type GetPlaceholderOperation = { export type UpdatePlaceholderOperation = { placeholderId: number; - param1: string + param1: string; } @@ -102,51 +102,44 @@ export type UpdatePlaceholderOperation = { export interface CreatePlaceholderRequest extends Request { body: { - param1: string + param1: string; } } export interface CreatePlaceholderResponse { - placeholder: Placeholder + placeholder: Placeholder; } export interface GetPlaceholdersRequest extends Request { body: { - placeholder_id?: number + placeholder_id?: number; } } export interface GetPlaceholersResponse { - placeholder: Placeholder[] + placeholder: Placeholder[]; } export interface GetPlaceholderRequest extends Request { params: { - placeholder_id: number + placeholder_id: number; } } export interface GetPlaceholderResponse { - placeholder: Placeholder + placeholder: Placeholder; } export interface UpdatePlaceholderRequest extends Request { body: { - param1?: string - placeholder_id?: number + param1?: string; + placeholder_id?: number; } } export interface UpdatePlaceholderResponse { - placeholder: Placeholder + placeholder: Placeholder; } -export type TempController = (req: Req, res: Response) => any - - -type Something = { - [x in p]: Object; -}; -type p = 'user'