├── .dockerignore ├── .github └── workflows │ └── main.yml ├── deployment.yml ├── deploymentservice.yml ├── dockerfile ├── index.js ├── package-lock.json ├── package.json ├── service.yml └── test └── test.js /.dockerignore: -------------------------------------------------------------------------------- 1 | .idea 2 | node_modules 3 | npm-debug.log 4 | Jenkinsfile -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Publish Docker image 2 | 3 | on: 4 | push: 5 | branches: ['master'] 6 | 7 | jobs: 8 | push_to_registry: 9 | name: Push Docker image to Docker Hub 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Check out the repo 13 | uses: actions/checkout@v3 14 | 15 | - name: Log in to Docker Hub 16 | uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 17 | with: 18 | username: ${{ secrets.DOCKER_USERNAME }} 19 | password: ${{ secrets.DOCKER_PASSWORD }} 20 | 21 | - name: Extract metadata (tags, labels) for Docker 22 | id: meta 23 | uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 24 | with: 25 | images: thetips4you/testjodejsapp 26 | 27 | - name: Build and push Docker image 28 | uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc 29 | with: 30 | context: . 31 | push: true 32 | tags: ${{ steps.meta.outputs.tags }} 33 | labels: ${{ steps.meta.outputs.labels }} 34 | -------------------------------------------------------------------------------- /deployment.yml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: nodeapp-deployment 5 | labels: 6 | app: nodeapp 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: nodeapp 12 | template: 13 | metadata: 14 | labels: 15 | app: nodeapp 16 | spec: 17 | containers: 18 | - name: nodeserver 19 | image: thetips4you/nodeapp:latest 20 | ports: 21 | - containerPort: 3000 22 | -------------------------------------------------------------------------------- /deploymentservice.yml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: nodeapp-deployment 5 | labels: 6 | app: nodeapp 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: nodeapp 12 | template: 13 | metadata: 14 | labels: 15 | app: nodeapp 16 | spec: 17 | containers: 18 | - name: nodeserver 19 | image: thetips4you/nodeapp:latest 20 | ports: 21 | - containerPort: 3000 22 | 23 | 24 | --- 25 | 26 | apiVersion: v1 27 | kind: Service 28 | metadata: 29 | name: nodeapp-service 30 | spec: 31 | selector: 32 | app: nodeapp 33 | type: LoadBalancer 34 | ports: 35 | - protocol: TCP 36 | port: 5000 37 | targetPort: 3000 38 | nodePort: 31110 39 | -------------------------------------------------------------------------------- /dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:latest 2 | 3 | WORKDIR /usr/src/app 4 | 5 | COPY package.json ./ 6 | 7 | RUN npm install 8 | 9 | COPY . . 10 | 11 | EXPOSE 4000 12 | CMD [ "node", "index.js" ] 13 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var app = express(); 3 | 4 | app.get('/', function (req, res) { 5 | res.send('{ "response": "Hello From Thetips4you" }'); 6 | }); 7 | 8 | app.get('/will', function (req, res) { 9 | res.send('{ "response": "Hello World" }'); 10 | }); 11 | app.get('/ready', function (req, res) { 12 | res.send('{ "response": " Great!, It works!" }'); 13 | }); 14 | app.listen(process.env.PORT || 3000); 15 | module.exports = app; 16 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-app", 3 | "version": "0.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@ungap/promise-all-settled": { 8 | "version": "1.1.2", 9 | "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", 10 | "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", 11 | "dev": true 12 | }, 13 | "accepts": { 14 | "version": "1.3.7", 15 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 16 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 17 | "requires": { 18 | "mime-types": "~2.1.24", 19 | "negotiator": "0.6.2" 20 | } 21 | }, 22 | "ansi-colors": { 23 | "version": "4.1.1", 24 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 25 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 26 | "dev": true 27 | }, 28 | "ansi-regex": { 29 | "version": "3.0.0", 30 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 31 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 32 | "dev": true 33 | }, 34 | "ansi-styles": { 35 | "version": "4.3.0", 36 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 37 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 38 | "dev": true, 39 | "requires": { 40 | "color-convert": "^2.0.1" 41 | } 42 | }, 43 | "anymatch": { 44 | "version": "3.1.2", 45 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 46 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 47 | "dev": true, 48 | "requires": { 49 | "normalize-path": "^3.0.0", 50 | "picomatch": "^2.0.4" 51 | } 52 | }, 53 | "argparse": { 54 | "version": "2.0.1", 55 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 56 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 57 | "dev": true 58 | }, 59 | "array-flatten": { 60 | "version": "1.1.1", 61 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 62 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 63 | }, 64 | "asynckit": { 65 | "version": "0.4.0", 66 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 67 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 68 | "dev": true 69 | }, 70 | "balanced-match": { 71 | "version": "1.0.2", 72 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 73 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 74 | "dev": true 75 | }, 76 | "binary-extensions": { 77 | "version": "2.2.0", 78 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 79 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 80 | "dev": true 81 | }, 82 | "body-parser": { 83 | "version": "1.19.0", 84 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 85 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 86 | "requires": { 87 | "bytes": "3.1.0", 88 | "content-type": "~1.0.4", 89 | "debug": "2.6.9", 90 | "depd": "~1.1.2", 91 | "http-errors": "1.7.2", 92 | "iconv-lite": "0.4.24", 93 | "on-finished": "~2.3.0", 94 | "qs": "6.7.0", 95 | "raw-body": "2.4.0", 96 | "type-is": "~1.6.17" 97 | } 98 | }, 99 | "brace-expansion": { 100 | "version": "1.1.11", 101 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 102 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 103 | "dev": true, 104 | "requires": { 105 | "balanced-match": "^1.0.0", 106 | "concat-map": "0.0.1" 107 | } 108 | }, 109 | "braces": { 110 | "version": "3.0.2", 111 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 112 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 113 | "dev": true, 114 | "requires": { 115 | "fill-range": "^7.0.1" 116 | } 117 | }, 118 | "browser-stdout": { 119 | "version": "1.3.1", 120 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 121 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 122 | "dev": true 123 | }, 124 | "bytes": { 125 | "version": "3.1.0", 126 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 127 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 128 | }, 129 | "call-bind": { 130 | "version": "1.0.2", 131 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 132 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 133 | "dev": true, 134 | "requires": { 135 | "function-bind": "^1.1.1", 136 | "get-intrinsic": "^1.0.2" 137 | } 138 | }, 139 | "camelcase": { 140 | "version": "6.2.0", 141 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", 142 | "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", 143 | "dev": true 144 | }, 145 | "chalk": { 146 | "version": "4.1.2", 147 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 148 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 149 | "dev": true, 150 | "requires": { 151 | "ansi-styles": "^4.1.0", 152 | "supports-color": "^7.1.0" 153 | }, 154 | "dependencies": { 155 | "supports-color": { 156 | "version": "7.2.0", 157 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 158 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 159 | "dev": true, 160 | "requires": { 161 | "has-flag": "^4.0.0" 162 | } 163 | } 164 | } 165 | }, 166 | "chokidar": { 167 | "version": "3.5.2", 168 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", 169 | "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", 170 | "dev": true, 171 | "requires": { 172 | "anymatch": "~3.1.2", 173 | "braces": "~3.0.2", 174 | "fsevents": "~2.3.2", 175 | "glob-parent": "~5.1.2", 176 | "is-binary-path": "~2.1.0", 177 | "is-glob": "~4.0.1", 178 | "normalize-path": "~3.0.0", 179 | "readdirp": "~3.6.0" 180 | } 181 | }, 182 | "cliui": { 183 | "version": "7.0.4", 184 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 185 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 186 | "dev": true, 187 | "requires": { 188 | "string-width": "^4.2.0", 189 | "strip-ansi": "^6.0.0", 190 | "wrap-ansi": "^7.0.0" 191 | }, 192 | "dependencies": { 193 | "ansi-regex": { 194 | "version": "5.0.0", 195 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 196 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 197 | "dev": true 198 | }, 199 | "is-fullwidth-code-point": { 200 | "version": "3.0.0", 201 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 202 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 203 | "dev": true 204 | }, 205 | "string-width": { 206 | "version": "4.2.2", 207 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", 208 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", 209 | "dev": true, 210 | "requires": { 211 | "emoji-regex": "^8.0.0", 212 | "is-fullwidth-code-point": "^3.0.0", 213 | "strip-ansi": "^6.0.0" 214 | } 215 | }, 216 | "strip-ansi": { 217 | "version": "6.0.0", 218 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 219 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 220 | "dev": true, 221 | "requires": { 222 | "ansi-regex": "^5.0.0" 223 | } 224 | } 225 | } 226 | }, 227 | "color-convert": { 228 | "version": "2.0.1", 229 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 230 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 231 | "dev": true, 232 | "requires": { 233 | "color-name": "~1.1.4" 234 | } 235 | }, 236 | "color-name": { 237 | "version": "1.1.4", 238 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 239 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 240 | "dev": true 241 | }, 242 | "combined-stream": { 243 | "version": "1.0.8", 244 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 245 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 246 | "dev": true, 247 | "requires": { 248 | "delayed-stream": "~1.0.0" 249 | } 250 | }, 251 | "component-emitter": { 252 | "version": "1.3.0", 253 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", 254 | "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", 255 | "dev": true 256 | }, 257 | "concat-map": { 258 | "version": "0.0.1", 259 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 260 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 261 | "dev": true 262 | }, 263 | "content-disposition": { 264 | "version": "0.5.3", 265 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 266 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 267 | "requires": { 268 | "safe-buffer": "5.1.2" 269 | } 270 | }, 271 | "content-type": { 272 | "version": "1.0.4", 273 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 274 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 275 | }, 276 | "cookie": { 277 | "version": "0.4.0", 278 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 279 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 280 | }, 281 | "cookie-signature": { 282 | "version": "1.0.6", 283 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 284 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 285 | }, 286 | "cookiejar": { 287 | "version": "2.1.2", 288 | "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", 289 | "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", 290 | "dev": true 291 | }, 292 | "debug": { 293 | "version": "2.6.9", 294 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 295 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 296 | "requires": { 297 | "ms": "2.0.0" 298 | } 299 | }, 300 | "decamelize": { 301 | "version": "4.0.0", 302 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 303 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 304 | "dev": true 305 | }, 306 | "delayed-stream": { 307 | "version": "1.0.0", 308 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 309 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 310 | "dev": true 311 | }, 312 | "depd": { 313 | "version": "1.1.2", 314 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 315 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 316 | }, 317 | "destroy": { 318 | "version": "1.0.4", 319 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 320 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 321 | }, 322 | "diff": { 323 | "version": "5.0.0", 324 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 325 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 326 | "dev": true 327 | }, 328 | "ee-first": { 329 | "version": "1.1.1", 330 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 331 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 332 | }, 333 | "emoji-regex": { 334 | "version": "8.0.0", 335 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 336 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 337 | "dev": true 338 | }, 339 | "encodeurl": { 340 | "version": "1.0.2", 341 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 342 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 343 | }, 344 | "escalade": { 345 | "version": "3.1.1", 346 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 347 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 348 | "dev": true 349 | }, 350 | "escape-html": { 351 | "version": "1.0.3", 352 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 353 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 354 | }, 355 | "escape-string-regexp": { 356 | "version": "4.0.0", 357 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 358 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 359 | "dev": true 360 | }, 361 | "etag": { 362 | "version": "1.8.1", 363 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 364 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 365 | }, 366 | "express": { 367 | "version": "4.17.1", 368 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 369 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 370 | "requires": { 371 | "accepts": "~1.3.7", 372 | "array-flatten": "1.1.1", 373 | "body-parser": "1.19.0", 374 | "content-disposition": "0.5.3", 375 | "content-type": "~1.0.4", 376 | "cookie": "0.4.0", 377 | "cookie-signature": "1.0.6", 378 | "debug": "2.6.9", 379 | "depd": "~1.1.2", 380 | "encodeurl": "~1.0.2", 381 | "escape-html": "~1.0.3", 382 | "etag": "~1.8.1", 383 | "finalhandler": "~1.1.2", 384 | "fresh": "0.5.2", 385 | "merge-descriptors": "1.0.1", 386 | "methods": "~1.1.2", 387 | "on-finished": "~2.3.0", 388 | "parseurl": "~1.3.3", 389 | "path-to-regexp": "0.1.7", 390 | "proxy-addr": "~2.0.5", 391 | "qs": "6.7.0", 392 | "range-parser": "~1.2.1", 393 | "safe-buffer": "5.1.2", 394 | "send": "0.17.1", 395 | "serve-static": "1.14.1", 396 | "setprototypeof": "1.1.1", 397 | "statuses": "~1.5.0", 398 | "type-is": "~1.6.18", 399 | "utils-merge": "1.0.1", 400 | "vary": "~1.1.2" 401 | } 402 | }, 403 | "fast-safe-stringify": { 404 | "version": "2.0.8", 405 | "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", 406 | "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==", 407 | "dev": true 408 | }, 409 | "fill-range": { 410 | "version": "7.0.1", 411 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 412 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 413 | "dev": true, 414 | "requires": { 415 | "to-regex-range": "^5.0.1" 416 | } 417 | }, 418 | "finalhandler": { 419 | "version": "1.1.2", 420 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 421 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 422 | "requires": { 423 | "debug": "2.6.9", 424 | "encodeurl": "~1.0.2", 425 | "escape-html": "~1.0.3", 426 | "on-finished": "~2.3.0", 427 | "parseurl": "~1.3.3", 428 | "statuses": "~1.5.0", 429 | "unpipe": "~1.0.0" 430 | } 431 | }, 432 | "find-up": { 433 | "version": "5.0.0", 434 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 435 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 436 | "dev": true, 437 | "requires": { 438 | "locate-path": "^6.0.0", 439 | "path-exists": "^4.0.0" 440 | } 441 | }, 442 | "flat": { 443 | "version": "5.0.2", 444 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 445 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 446 | "dev": true 447 | }, 448 | "form-data": { 449 | "version": "3.0.1", 450 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", 451 | "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", 452 | "dev": true, 453 | "requires": { 454 | "asynckit": "^0.4.0", 455 | "combined-stream": "^1.0.8", 456 | "mime-types": "^2.1.12" 457 | } 458 | }, 459 | "formidable": { 460 | "version": "1.2.2", 461 | "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", 462 | "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==", 463 | "dev": true 464 | }, 465 | "forwarded": { 466 | "version": "0.2.0", 467 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 468 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 469 | }, 470 | "fresh": { 471 | "version": "0.5.2", 472 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 473 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 474 | }, 475 | "fs.realpath": { 476 | "version": "1.0.0", 477 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 478 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 479 | "dev": true 480 | }, 481 | "fsevents": { 482 | "version": "2.3.2", 483 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 484 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 485 | "dev": true, 486 | "optional": true 487 | }, 488 | "function-bind": { 489 | "version": "1.1.1", 490 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 491 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 492 | "dev": true 493 | }, 494 | "get-caller-file": { 495 | "version": "2.0.5", 496 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 497 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 498 | "dev": true 499 | }, 500 | "get-intrinsic": { 501 | "version": "1.1.1", 502 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 503 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 504 | "dev": true, 505 | "requires": { 506 | "function-bind": "^1.1.1", 507 | "has": "^1.0.3", 508 | "has-symbols": "^1.0.1" 509 | } 510 | }, 511 | "glob": { 512 | "version": "7.1.7", 513 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 514 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 515 | "dev": true, 516 | "requires": { 517 | "fs.realpath": "^1.0.0", 518 | "inflight": "^1.0.4", 519 | "inherits": "2", 520 | "minimatch": "^3.0.4", 521 | "once": "^1.3.0", 522 | "path-is-absolute": "^1.0.0" 523 | } 524 | }, 525 | "glob-parent": { 526 | "version": "5.1.2", 527 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 528 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 529 | "dev": true, 530 | "requires": { 531 | "is-glob": "^4.0.1" 532 | } 533 | }, 534 | "growl": { 535 | "version": "1.10.5", 536 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 537 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 538 | "dev": true 539 | }, 540 | "has": { 541 | "version": "1.0.3", 542 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 543 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 544 | "dev": true, 545 | "requires": { 546 | "function-bind": "^1.1.1" 547 | } 548 | }, 549 | "has-flag": { 550 | "version": "4.0.0", 551 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 552 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 553 | "dev": true 554 | }, 555 | "has-symbols": { 556 | "version": "1.0.2", 557 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 558 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", 559 | "dev": true 560 | }, 561 | "he": { 562 | "version": "1.2.0", 563 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 564 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 565 | "dev": true 566 | }, 567 | "http-errors": { 568 | "version": "1.7.2", 569 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 570 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 571 | "requires": { 572 | "depd": "~1.1.2", 573 | "inherits": "2.0.3", 574 | "setprototypeof": "1.1.1", 575 | "statuses": ">= 1.5.0 < 2", 576 | "toidentifier": "1.0.0" 577 | } 578 | }, 579 | "iconv-lite": { 580 | "version": "0.4.24", 581 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 582 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 583 | "requires": { 584 | "safer-buffer": ">= 2.1.2 < 3" 585 | } 586 | }, 587 | "inflight": { 588 | "version": "1.0.6", 589 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 590 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 591 | "dev": true, 592 | "requires": { 593 | "once": "^1.3.0", 594 | "wrappy": "1" 595 | } 596 | }, 597 | "inherits": { 598 | "version": "2.0.3", 599 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 600 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 601 | }, 602 | "ipaddr.js": { 603 | "version": "1.9.1", 604 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 605 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 606 | }, 607 | "is-binary-path": { 608 | "version": "2.1.0", 609 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 610 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 611 | "dev": true, 612 | "requires": { 613 | "binary-extensions": "^2.0.0" 614 | } 615 | }, 616 | "is-extglob": { 617 | "version": "2.1.1", 618 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 619 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 620 | "dev": true 621 | }, 622 | "is-fullwidth-code-point": { 623 | "version": "2.0.0", 624 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 625 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 626 | "dev": true 627 | }, 628 | "is-glob": { 629 | "version": "4.0.1", 630 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 631 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 632 | "dev": true, 633 | "requires": { 634 | "is-extglob": "^2.1.1" 635 | } 636 | }, 637 | "is-number": { 638 | "version": "7.0.0", 639 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 640 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 641 | "dev": true 642 | }, 643 | "is-plain-obj": { 644 | "version": "2.1.0", 645 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 646 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 647 | "dev": true 648 | }, 649 | "is-unicode-supported": { 650 | "version": "0.1.0", 651 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 652 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 653 | "dev": true 654 | }, 655 | "isexe": { 656 | "version": "2.0.0", 657 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 658 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 659 | "dev": true 660 | }, 661 | "js-yaml": { 662 | "version": "4.1.0", 663 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 664 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 665 | "dev": true, 666 | "requires": { 667 | "argparse": "^2.0.1" 668 | } 669 | }, 670 | "locate-path": { 671 | "version": "6.0.0", 672 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 673 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 674 | "dev": true, 675 | "requires": { 676 | "p-locate": "^5.0.0" 677 | } 678 | }, 679 | "log-symbols": { 680 | "version": "4.1.0", 681 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 682 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 683 | "dev": true, 684 | "requires": { 685 | "chalk": "^4.1.0", 686 | "is-unicode-supported": "^0.1.0" 687 | } 688 | }, 689 | "lru-cache": { 690 | "version": "6.0.0", 691 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 692 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 693 | "dev": true, 694 | "requires": { 695 | "yallist": "^4.0.0" 696 | } 697 | }, 698 | "media-typer": { 699 | "version": "0.3.0", 700 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 701 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 702 | }, 703 | "merge-descriptors": { 704 | "version": "1.0.1", 705 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 706 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 707 | }, 708 | "methods": { 709 | "version": "1.1.2", 710 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 711 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 712 | }, 713 | "mime": { 714 | "version": "1.6.0", 715 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 716 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 717 | }, 718 | "mime-db": { 719 | "version": "1.49.0", 720 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", 721 | "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" 722 | }, 723 | "mime-types": { 724 | "version": "2.1.32", 725 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", 726 | "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", 727 | "requires": { 728 | "mime-db": "1.49.0" 729 | } 730 | }, 731 | "minimatch": { 732 | "version": "3.0.4", 733 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 734 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 735 | "dev": true, 736 | "requires": { 737 | "brace-expansion": "^1.1.7" 738 | } 739 | }, 740 | "mocha": { 741 | "version": "9.1.1", 742 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.1.tgz", 743 | "integrity": "sha512-0wE74YMgOkCgBUj8VyIDwmLUjTsS13WV1Pg7l0SHea2qzZzlq7MDnfbPsHKcELBRk3+izEVkRofjmClpycudCA==", 744 | "dev": true, 745 | "requires": { 746 | "@ungap/promise-all-settled": "1.1.2", 747 | "ansi-colors": "4.1.1", 748 | "browser-stdout": "1.3.1", 749 | "chokidar": "3.5.2", 750 | "debug": "4.3.1", 751 | "diff": "5.0.0", 752 | "escape-string-regexp": "4.0.0", 753 | "find-up": "5.0.0", 754 | "glob": "7.1.7", 755 | "growl": "1.10.5", 756 | "he": "1.2.0", 757 | "js-yaml": "4.1.0", 758 | "log-symbols": "4.1.0", 759 | "minimatch": "3.0.4", 760 | "ms": "2.1.3", 761 | "nanoid": "3.1.23", 762 | "serialize-javascript": "6.0.0", 763 | "strip-json-comments": "3.1.1", 764 | "supports-color": "8.1.1", 765 | "which": "2.0.2", 766 | "wide-align": "1.1.3", 767 | "workerpool": "6.1.5", 768 | "yargs": "16.2.0", 769 | "yargs-parser": "20.2.4", 770 | "yargs-unparser": "2.0.0" 771 | }, 772 | "dependencies": { 773 | "debug": { 774 | "version": "4.3.1", 775 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 776 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 777 | "dev": true, 778 | "requires": { 779 | "ms": "2.1.2" 780 | }, 781 | "dependencies": { 782 | "ms": { 783 | "version": "2.1.2", 784 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 785 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 786 | "dev": true 787 | } 788 | } 789 | }, 790 | "ms": { 791 | "version": "2.1.3", 792 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 793 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 794 | "dev": true 795 | } 796 | } 797 | }, 798 | "ms": { 799 | "version": "2.0.0", 800 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 801 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 802 | }, 803 | "nanoid": { 804 | "version": "3.1.23", 805 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", 806 | "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", 807 | "dev": true 808 | }, 809 | "negotiator": { 810 | "version": "0.6.2", 811 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 812 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 813 | }, 814 | "normalize-path": { 815 | "version": "3.0.0", 816 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 817 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 818 | "dev": true 819 | }, 820 | "object-inspect": { 821 | "version": "1.11.0", 822 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", 823 | "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", 824 | "dev": true 825 | }, 826 | "on-finished": { 827 | "version": "2.3.0", 828 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 829 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 830 | "requires": { 831 | "ee-first": "1.1.1" 832 | } 833 | }, 834 | "once": { 835 | "version": "1.4.0", 836 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 837 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 838 | "dev": true, 839 | "requires": { 840 | "wrappy": "1" 841 | } 842 | }, 843 | "p-limit": { 844 | "version": "3.1.0", 845 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 846 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 847 | "dev": true, 848 | "requires": { 849 | "yocto-queue": "^0.1.0" 850 | } 851 | }, 852 | "p-locate": { 853 | "version": "5.0.0", 854 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 855 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 856 | "dev": true, 857 | "requires": { 858 | "p-limit": "^3.0.2" 859 | } 860 | }, 861 | "parseurl": { 862 | "version": "1.3.3", 863 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 864 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 865 | }, 866 | "path-exists": { 867 | "version": "4.0.0", 868 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 869 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 870 | "dev": true 871 | }, 872 | "path-is-absolute": { 873 | "version": "1.0.1", 874 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 875 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 876 | "dev": true 877 | }, 878 | "path-to-regexp": { 879 | "version": "0.1.7", 880 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 881 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 882 | }, 883 | "picomatch": { 884 | "version": "2.3.0", 885 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 886 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 887 | "dev": true 888 | }, 889 | "proxy-addr": { 890 | "version": "2.0.7", 891 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 892 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 893 | "requires": { 894 | "forwarded": "0.2.0", 895 | "ipaddr.js": "1.9.1" 896 | } 897 | }, 898 | "qs": { 899 | "version": "6.7.0", 900 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 901 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 902 | }, 903 | "randombytes": { 904 | "version": "2.1.0", 905 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 906 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 907 | "dev": true, 908 | "requires": { 909 | "safe-buffer": "^5.1.0" 910 | } 911 | }, 912 | "range-parser": { 913 | "version": "1.2.1", 914 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 915 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 916 | }, 917 | "raw-body": { 918 | "version": "2.4.0", 919 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 920 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 921 | "requires": { 922 | "bytes": "3.1.0", 923 | "http-errors": "1.7.2", 924 | "iconv-lite": "0.4.24", 925 | "unpipe": "1.0.0" 926 | } 927 | }, 928 | "readable-stream": { 929 | "version": "3.6.0", 930 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 931 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 932 | "dev": true, 933 | "requires": { 934 | "inherits": "^2.0.3", 935 | "string_decoder": "^1.1.1", 936 | "util-deprecate": "^1.0.1" 937 | } 938 | }, 939 | "readdirp": { 940 | "version": "3.6.0", 941 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 942 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 943 | "dev": true, 944 | "requires": { 945 | "picomatch": "^2.2.1" 946 | } 947 | }, 948 | "require-directory": { 949 | "version": "2.1.1", 950 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 951 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 952 | "dev": true 953 | }, 954 | "safe-buffer": { 955 | "version": "5.1.2", 956 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 957 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 958 | }, 959 | "safer-buffer": { 960 | "version": "2.1.2", 961 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 962 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 963 | }, 964 | "semver": { 965 | "version": "7.3.5", 966 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 967 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 968 | "dev": true, 969 | "requires": { 970 | "lru-cache": "^6.0.0" 971 | } 972 | }, 973 | "send": { 974 | "version": "0.17.1", 975 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 976 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 977 | "requires": { 978 | "debug": "2.6.9", 979 | "depd": "~1.1.2", 980 | "destroy": "~1.0.4", 981 | "encodeurl": "~1.0.2", 982 | "escape-html": "~1.0.3", 983 | "etag": "~1.8.1", 984 | "fresh": "0.5.2", 985 | "http-errors": "~1.7.2", 986 | "mime": "1.6.0", 987 | "ms": "2.1.1", 988 | "on-finished": "~2.3.0", 989 | "range-parser": "~1.2.1", 990 | "statuses": "~1.5.0" 991 | }, 992 | "dependencies": { 993 | "ms": { 994 | "version": "2.1.1", 995 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 996 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 997 | } 998 | } 999 | }, 1000 | "serialize-javascript": { 1001 | "version": "6.0.0", 1002 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 1003 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 1004 | "dev": true, 1005 | "requires": { 1006 | "randombytes": "^2.1.0" 1007 | } 1008 | }, 1009 | "serve-static": { 1010 | "version": "1.14.1", 1011 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 1012 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 1013 | "requires": { 1014 | "encodeurl": "~1.0.2", 1015 | "escape-html": "~1.0.3", 1016 | "parseurl": "~1.3.3", 1017 | "send": "0.17.1" 1018 | } 1019 | }, 1020 | "setprototypeof": { 1021 | "version": "1.1.1", 1022 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 1023 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 1024 | }, 1025 | "side-channel": { 1026 | "version": "1.0.4", 1027 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1028 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1029 | "dev": true, 1030 | "requires": { 1031 | "call-bind": "^1.0.0", 1032 | "get-intrinsic": "^1.0.2", 1033 | "object-inspect": "^1.9.0" 1034 | } 1035 | }, 1036 | "statuses": { 1037 | "version": "1.5.0", 1038 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 1039 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 1040 | }, 1041 | "string-width": { 1042 | "version": "2.1.1", 1043 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1044 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1045 | "dev": true, 1046 | "requires": { 1047 | "is-fullwidth-code-point": "^2.0.0", 1048 | "strip-ansi": "^4.0.0" 1049 | } 1050 | }, 1051 | "string_decoder": { 1052 | "version": "1.3.0", 1053 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1054 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1055 | "dev": true, 1056 | "requires": { 1057 | "safe-buffer": "~5.2.0" 1058 | }, 1059 | "dependencies": { 1060 | "safe-buffer": { 1061 | "version": "5.2.1", 1062 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1063 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1064 | "dev": true 1065 | } 1066 | } 1067 | }, 1068 | "strip-ansi": { 1069 | "version": "4.0.0", 1070 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1071 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1072 | "dev": true, 1073 | "requires": { 1074 | "ansi-regex": "^3.0.0" 1075 | } 1076 | }, 1077 | "strip-json-comments": { 1078 | "version": "3.1.1", 1079 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1080 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1081 | "dev": true 1082 | }, 1083 | "superagent": { 1084 | "version": "6.1.0", 1085 | "resolved": "https://registry.npmjs.org/superagent/-/superagent-6.1.0.tgz", 1086 | "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==", 1087 | "dev": true, 1088 | "requires": { 1089 | "component-emitter": "^1.3.0", 1090 | "cookiejar": "^2.1.2", 1091 | "debug": "^4.1.1", 1092 | "fast-safe-stringify": "^2.0.7", 1093 | "form-data": "^3.0.0", 1094 | "formidable": "^1.2.2", 1095 | "methods": "^1.1.2", 1096 | "mime": "^2.4.6", 1097 | "qs": "^6.9.4", 1098 | "readable-stream": "^3.6.0", 1099 | "semver": "^7.3.2" 1100 | }, 1101 | "dependencies": { 1102 | "debug": { 1103 | "version": "4.3.2", 1104 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 1105 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 1106 | "dev": true, 1107 | "requires": { 1108 | "ms": "2.1.2" 1109 | } 1110 | }, 1111 | "mime": { 1112 | "version": "2.5.2", 1113 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", 1114 | "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", 1115 | "dev": true 1116 | }, 1117 | "ms": { 1118 | "version": "2.1.2", 1119 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1120 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1121 | "dev": true 1122 | }, 1123 | "qs": { 1124 | "version": "6.10.1", 1125 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", 1126 | "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", 1127 | "dev": true, 1128 | "requires": { 1129 | "side-channel": "^1.0.4" 1130 | } 1131 | } 1132 | } 1133 | }, 1134 | "supertest": { 1135 | "version": "6.1.6", 1136 | "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.1.6.tgz", 1137 | "integrity": "sha512-0hACYGNJ8OHRg8CRITeZOdbjur7NLuNs0mBjVhdpxi7hP6t3QIbOzLON5RTUmZcy2I9riuII3+Pr2C7yztrIIg==", 1138 | "dev": true, 1139 | "requires": { 1140 | "methods": "^1.1.2", 1141 | "superagent": "^6.1.0" 1142 | } 1143 | }, 1144 | "supports-color": { 1145 | "version": "8.1.1", 1146 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1147 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1148 | "dev": true, 1149 | "requires": { 1150 | "has-flag": "^4.0.0" 1151 | } 1152 | }, 1153 | "to-regex-range": { 1154 | "version": "5.0.1", 1155 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1156 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1157 | "dev": true, 1158 | "requires": { 1159 | "is-number": "^7.0.0" 1160 | } 1161 | }, 1162 | "toidentifier": { 1163 | "version": "1.0.0", 1164 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 1165 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 1166 | }, 1167 | "type-is": { 1168 | "version": "1.6.18", 1169 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1170 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1171 | "requires": { 1172 | "media-typer": "0.3.0", 1173 | "mime-types": "~2.1.24" 1174 | } 1175 | }, 1176 | "unpipe": { 1177 | "version": "1.0.0", 1178 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1179 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 1180 | }, 1181 | "util-deprecate": { 1182 | "version": "1.0.2", 1183 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1184 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1185 | "dev": true 1186 | }, 1187 | "utils-merge": { 1188 | "version": "1.0.1", 1189 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1190 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 1191 | }, 1192 | "vary": { 1193 | "version": "1.1.2", 1194 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1195 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 1196 | }, 1197 | "which": { 1198 | "version": "2.0.2", 1199 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1200 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1201 | "dev": true, 1202 | "requires": { 1203 | "isexe": "^2.0.0" 1204 | } 1205 | }, 1206 | "wide-align": { 1207 | "version": "1.1.3", 1208 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 1209 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 1210 | "dev": true, 1211 | "requires": { 1212 | "string-width": "^1.0.2 || 2" 1213 | } 1214 | }, 1215 | "workerpool": { 1216 | "version": "6.1.5", 1217 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", 1218 | "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", 1219 | "dev": true 1220 | }, 1221 | "wrap-ansi": { 1222 | "version": "7.0.0", 1223 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1224 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1225 | "dev": true, 1226 | "requires": { 1227 | "ansi-styles": "^4.0.0", 1228 | "string-width": "^4.1.0", 1229 | "strip-ansi": "^6.0.0" 1230 | }, 1231 | "dependencies": { 1232 | "ansi-regex": { 1233 | "version": "5.0.0", 1234 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 1235 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 1236 | "dev": true 1237 | }, 1238 | "is-fullwidth-code-point": { 1239 | "version": "3.0.0", 1240 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1241 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1242 | "dev": true 1243 | }, 1244 | "string-width": { 1245 | "version": "4.2.2", 1246 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", 1247 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", 1248 | "dev": true, 1249 | "requires": { 1250 | "emoji-regex": "^8.0.0", 1251 | "is-fullwidth-code-point": "^3.0.0", 1252 | "strip-ansi": "^6.0.0" 1253 | } 1254 | }, 1255 | "strip-ansi": { 1256 | "version": "6.0.0", 1257 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1258 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1259 | "dev": true, 1260 | "requires": { 1261 | "ansi-regex": "^5.0.0" 1262 | } 1263 | } 1264 | } 1265 | }, 1266 | "wrappy": { 1267 | "version": "1.0.2", 1268 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1269 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1270 | "dev": true 1271 | }, 1272 | "y18n": { 1273 | "version": "5.0.8", 1274 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1275 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1276 | "dev": true 1277 | }, 1278 | "yallist": { 1279 | "version": "4.0.0", 1280 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1281 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1282 | "dev": true 1283 | }, 1284 | "yargs": { 1285 | "version": "16.2.0", 1286 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 1287 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 1288 | "dev": true, 1289 | "requires": { 1290 | "cliui": "^7.0.2", 1291 | "escalade": "^3.1.1", 1292 | "get-caller-file": "^2.0.5", 1293 | "require-directory": "^2.1.1", 1294 | "string-width": "^4.2.0", 1295 | "y18n": "^5.0.5", 1296 | "yargs-parser": "^20.2.2" 1297 | }, 1298 | "dependencies": { 1299 | "ansi-regex": { 1300 | "version": "5.0.0", 1301 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 1302 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 1303 | "dev": true 1304 | }, 1305 | "is-fullwidth-code-point": { 1306 | "version": "3.0.0", 1307 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1308 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1309 | "dev": true 1310 | }, 1311 | "string-width": { 1312 | "version": "4.2.2", 1313 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", 1314 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", 1315 | "dev": true, 1316 | "requires": { 1317 | "emoji-regex": "^8.0.0", 1318 | "is-fullwidth-code-point": "^3.0.0", 1319 | "strip-ansi": "^6.0.0" 1320 | } 1321 | }, 1322 | "strip-ansi": { 1323 | "version": "6.0.0", 1324 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1325 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1326 | "dev": true, 1327 | "requires": { 1328 | "ansi-regex": "^5.0.0" 1329 | } 1330 | } 1331 | } 1332 | }, 1333 | "yargs-parser": { 1334 | "version": "20.2.4", 1335 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 1336 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 1337 | "dev": true 1338 | }, 1339 | "yargs-unparser": { 1340 | "version": "2.0.0", 1341 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 1342 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 1343 | "dev": true, 1344 | "requires": { 1345 | "camelcase": "^6.0.0", 1346 | "decamelize": "^4.0.0", 1347 | "flat": "^5.0.2", 1348 | "is-plain-obj": "^2.1.0" 1349 | } 1350 | }, 1351 | "yocto-queue": { 1352 | "version": "0.1.0", 1353 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 1354 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 1355 | "dev": true 1356 | } 1357 | } 1358 | } 1359 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-app", 3 | "description": "Nodeapp for CICD test", 4 | "version": "0.0.1", 5 | "private": true, 6 | "dependencies": { 7 | "express": "4.17.1" 8 | }, 9 | "devDependencies": { 10 | "mocha": "9.1.1", 11 | "supertest": "6.1.6" 12 | }, 13 | "scripts": { 14 | "start": "node index.js", 15 | "test": "./node_modules/.bin/mocha ./test/test.js" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /service.yml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: nodeapp-service 5 | spec: 6 | selector: 7 | app: nodeapp 8 | type: LoadBalancer 9 | ports: 10 | - protocol: TCP 11 | port: 5000 12 | targetPort: 3000 13 | nodePort: 31110 14 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | var request = require('supertest'); 2 | var app = require('../index.js'); 3 | describe('GET /will', function() { 4 | it('respond with hello world', function(done) { 5 | request(app).get('/will').expect('{ "response": "Hello World" }', done); 6 | }); 7 | }); --------------------------------------------------------------------------------