diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ee169e4..eac7454 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1,5 +1,4 @@ -# Node.js CI by Github Workflow -name: Express CI +name: PNPM CI on: push: @@ -12,14 +11,14 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [16.x] + node-version: [20.x] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 - - uses: pnpm/action-setup@v2.2.4 + - uses: pnpm/action-setup@v2.4.0 name: Install pnpm id: pnpm-install with: @@ -40,16 +39,16 @@ jobs: ${{ runner.os }}-pnpm-store- - name: Install dependencies - run: pnpm install + run: pnpm i - name: Test env: # repo secrets as environment variable IFTTT_KEY: ${{ secrets.IFTTT_KEY }} run: | printenv - pnpm run format - pnpm run test:fmt - pnpm run test:coverage + pnpm fmt + pnpm test:fmt + pnpm test:coverage - name: Test Summary uses: test-summary/action@v2 @@ -73,7 +72,7 @@ jobs: - name: Generate Swagger Spec JSON run: | - pnpm run swagger + pnpm swagger - uses: stefanzweifel/git-auto-commit-action@v4 with: diff --git a/.husky/pre-commit b/.husky/pre-commit index 965d1a0..1ead478 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -2,6 +2,6 @@ . "$(dirname "$0")/_/husky.sh" git diff --check -npm run swagger -npm run test:coverage -npx lint-staged +pnpm swagger +pnpm test:coverage +pnpm lint-staged diff --git a/Dockerfile b/Dockerfile index 0d13ca4..b15be4c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,17 @@ -FROM node:20 +FROM node:20-slim AS base -# Create app directory -WORKDIR /usr/src/app +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" -ENV NODE_ENV=PRODUCTION -# Install app dependencies -# A wildcard is used to ensure both package.json AND package-lock.json are copied -COPY package*.json ./ +RUN corepack enable +COPY . /app +WORKDIR /app -# building your code for production -RUN npm ci --only=production --ignore-scripts +FROM base AS prod-deps +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile -# Bundle app source -COPY . . +FROM base +COPY --from=prod-deps /app/node_modules /app/node_modules EXPOSE 8080 -CMD [ "npm", "start" ] +CMD [ "pnpm", "start" ] diff --git a/Jenkinsfile b/Jenkinsfile index 5490acb..310cedb 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -19,8 +19,8 @@ podTemplate(label: label, stage('Test') { container('node') { sh """ - npm ci --ignore-scripts - npm run test:coverage + pnpm i + pnpm test:coverage """ publishHTML target: [allowMissing : false, alwaysLinkToLastBuild: false, diff --git a/api/sse.js b/api/sse.js index 47ff207..79f998c 100644 --- a/api/sse.js +++ b/api/sse.js @@ -16,7 +16,7 @@ const sse = (req, res) => { () => { clearInterval(interval); }, - false + false, ); }; diff --git a/app.js b/app.js index 456c468..3a42694 100644 --- a/app.js +++ b/app.js @@ -23,7 +23,7 @@ router.get("/sse", sse); router.use( swaggerUIPath, swaggerUiExpress.serve, - swaggerUiExpress.setup(swaggerSpec) + swaggerUiExpress.setup(swaggerSpec), ); app.use(BASEPATH, router); app.use("/", express.static(resolve("public"))); diff --git a/middleware/cors.js b/middleware/cors.js index a7e6ded..0e68a0a 100644 --- a/middleware/cors.js +++ b/middleware/cors.js @@ -13,11 +13,11 @@ const applyCorsHeaders = (res) => { // or res.setHeader('Access-Control-Allow-Origin', req.headers.origin); res.setHeader( "Access-Control-Allow-Methods", - "GET,OPTIONS,PATCH,DELETE,POST,PUT" + "GET,OPTIONS,PATCH,DELETE,POST,PUT", ); res.setHeader( "Access-Control-Allow-Headers", - "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version" + "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version", ); return res; }; diff --git a/middleware/logger.js b/middleware/logger.js index 5a10f85..63b9ce5 100644 --- a/middleware/logger.js +++ b/middleware/logger.js @@ -14,7 +14,7 @@ if (isProd && !isServerless) { new winston.transports.File({ filename: "logs/winston.log", timestamp: true, - }) + }), ); } /* c8 ignore stop */ @@ -24,7 +24,7 @@ const logOptions = { format: winston.format.combine( winston.format.uncolorize({ all: !isProd }), winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), - isProd ? winston.format.json() : winston.format.cli() + isProd ? winston.format.json() : winston.format.cli(), ), meta: isProd, msg: "{{res.responseTime}}ms {{res.statusCode}} {{req.method}} {{req.url}}", // optional: customize the default logging message. E.g. "{{res.statusCode}} {{req.method}} {{res.responseTime}}ms {{req.url}}" diff --git a/package.json b/package.json index f6698a3..586e5ef 100644 --- a/package.json +++ b/package.json @@ -1,45 +1,46 @@ { "name": "node-express-example", "version": "0.0.1", + "private": true, "exports": "./app.js", "type": "module", "engines": { - "node": ">=14.16" + "node": ">=16" }, - "author": "Lawrence Li", - "homepage": "https://github.com/Lonor/node-express-example", + "author": "Lawrence Li @la3rence", + "homepage": "https://github.com/la3rence/node-express-example", "license": "MIT", "lint-staged": { "**/*": "prettier --write --ignore-unknown" }, "scripts": { - "dev": "pnpm run swagger; pnpm start", + "dev": "pnpm swagger; pnpm start", "start": "node server.js", "test": "mocha --timeout 10000 --exit --reporter mocha-junit-reporter", "test:coverage": "c8 --reporter=lcov -r html -r text pnpm test", "test:grep": "pnpm test -- -g", - "swagger": "node ./swagger/autogen.js && pnpm run format", - "format": "prettier --write . --ignore-unknown", + "swagger": "node ./swagger/autogen.js && pnpm fmt", + "fmt": "prettier --write . --ignore-unknown", "test:fmt": "prettier --check .", "prepare": "husky install" }, "dependencies": { - "dotenv": "16.0.3", + "dotenv": "^16.3.1", "express": "4.18.2", - "express-winston": "4.2.0", - "node-fetch": "3.3.1", - "swagger-ui-express": "4.6.3", - "winston": "3.9.0" + "express-winston": "^4.2.0", + "node-fetch": "^3.3.2", + "swagger-ui-express": "^5.0.0", + "winston": "^3.11.0" }, "devDependencies": { - "c8": "7.14.0", - "chai": "4.3.7", - "husky": "8.0.3", - "lint-staged": "13.2.2", - "mocha": "10.2.0", - "mocha-junit-reporter": "2.2.0", - "prettier": "2.8.8", - "supertest": "6.3.3", - "swagger-autogen": "2.23.1" + "c8": "^8.0.1", + "chai": "^5.0.0", + "husky": "^8.0.3", + "lint-staged": "^13.3.0", + "mocha": "^10.2.0", + "mocha-junit-reporter": "^2.2.1", + "prettier": "^3.1.1", + "supertest": "^6.3.3", + "swagger-autogen": "^2.23.7" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0d55786..3414b53 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,53 +1,57 @@ -lockfileVersion: "6.0" +lockfileVersion: "6.1" + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false dependencies: dotenv: - specifier: 16.0.3 - version: 16.0.3 + specifier: ^16.3.1 + version: 16.3.1 express: specifier: 4.18.2 version: 4.18.2 express-winston: - specifier: 4.2.0 - version: 4.2.0(winston@3.9.0) + specifier: ^4.2.0 + version: 4.2.0(winston@3.11.0) node-fetch: - specifier: 3.3.1 - version: 3.3.1 + specifier: ^3.3.2 + version: 3.3.2 swagger-ui-express: - specifier: 4.6.3 - version: 4.6.3(express@4.18.2) + specifier: ^5.0.0 + version: 5.0.0(express@4.18.2) winston: - specifier: 3.9.0 - version: 3.9.0 + specifier: ^3.11.0 + version: 3.11.0 devDependencies: c8: - specifier: 7.14.0 - version: 7.14.0 + specifier: ^8.0.1 + version: 8.0.1 chai: - specifier: 4.3.7 - version: 4.3.7 + specifier: ^5.0.0 + version: 5.0.0 husky: - specifier: 8.0.3 + specifier: ^8.0.3 version: 8.0.3 lint-staged: - specifier: 13.2.2 - version: 13.2.2 + specifier: ^13.3.0 + version: 13.3.0 mocha: - specifier: 10.2.0 + specifier: ^10.2.0 version: 10.2.0 mocha-junit-reporter: - specifier: 2.2.0 - version: 2.2.0(mocha@10.2.0) + specifier: ^2.2.1 + version: 2.2.1(mocha@10.2.0) prettier: - specifier: 2.8.8 - version: 2.8.8 + specifier: ^3.1.1 + version: 3.1.1 supertest: - specifier: 6.3.3 + specifier: ^6.3.3 version: 6.3.3 swagger-autogen: - specifier: 2.23.1 - version: 2.23.1 + specifier: ^2.23.7 + version: 2.23.7 packages: /@bcoe/v8-coverage@0.2.3: @@ -57,10 +61,10 @@ packages: } dev: true - /@colors/colors@1.5.0: + /@colors/colors@1.6.0: resolution: { - integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==, + integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==, } engines: { node: ">=0.1.90" } dev: false @@ -84,42 +88,42 @@ packages: engines: { node: ">=8" } dev: true - /@jridgewell/resolve-uri@3.1.0: + /@jridgewell/resolve-uri@3.1.1: resolution: { - integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==, + integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==, } engines: { node: ">=6.0.0" } dev: true - /@jridgewell/sourcemap-codec@1.4.14: + /@jridgewell/sourcemap-codec@1.4.15: resolution: { - integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==, + integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, } dev: true - /@jridgewell/trace-mapping@0.3.18: + /@jridgewell/trace-mapping@0.3.20: resolution: { - integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==, + integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==, } dependencies: - "@jridgewell/resolve-uri": 3.1.0 - "@jridgewell/sourcemap-codec": 1.4.14 + "@jridgewell/resolve-uri": 3.1.1 + "@jridgewell/sourcemap-codec": 1.4.15 dev: true - /@types/istanbul-lib-coverage@2.0.4: + /@types/istanbul-lib-coverage@2.0.6: resolution: { - integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==, + integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==, } dev: true - /@types/triple-beam@1.3.2: + /@types/triple-beam@1.3.5: resolution: { - integrity: sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==, + integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==, } dev: false @@ -143,17 +147,6 @@ packages: hasBin: true dev: true - /aggregate-error@3.1.0: - resolution: - { - integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==, - } - engines: { node: ">=8" } - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - dev: true - /ansi-colors@4.1.1: resolution: { @@ -162,14 +155,14 @@ packages: engines: { node: ">=6" } dev: true - /ansi-escapes@4.3.2: + /ansi-escapes@5.0.0: resolution: { - integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, + integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==, } - engines: { node: ">=8" } + engines: { node: ">=12" } dependencies: - type-fest: 0.21.3 + type-fest: 1.4.0 dev: true /ansi-regex@5.0.1: @@ -248,25 +241,18 @@ packages: } dev: true - /assertion-error@1.1.0: - resolution: - { - integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==, - } - dev: true - - /astral-regex@2.0.0: + /assertion-error@2.0.1: resolution: { - integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==, + integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, } - engines: { node: ">=8" } + engines: { node: ">=12" } dev: true - /async@3.2.4: + /async@3.2.5: resolution: { - integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==, + integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==, } dev: false @@ -359,36 +345,37 @@ packages: engines: { node: ">= 0.8" } dev: false - /c8@7.14.0: + /c8@8.0.1: resolution: { - integrity: sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==, + integrity: sha512-EINpopxZNH1mETuI0DzRA4MZpAUH+IFiRhnmFD3vFr3vdrgxqi3VfE3KL0AIL+zDq8rC9bZqwM/VDmmoe04y7w==, } - engines: { node: ">=10.12.0" } + engines: { node: ">=12" } hasBin: true dependencies: "@bcoe/v8-coverage": 0.2.3 "@istanbuljs/schema": 0.1.3 find-up: 5.0.0 foreground-child: 2.0.0 - istanbul-lib-coverage: 3.2.0 - istanbul-lib-report: 3.0.0 - istanbul-reports: 3.1.5 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.1.6 rimraf: 3.0.2 test-exclude: 6.0.0 - v8-to-istanbul: 9.1.0 - yargs: 16.2.0 - yargs-parser: 20.2.9 + v8-to-istanbul: 9.2.0 + yargs: 17.7.2 + yargs-parser: 21.1.1 dev: true - /call-bind@1.0.2: + /call-bind@1.0.5: resolution: { - integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==, + integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==, } dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.1 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 /camelcase@6.3.0: resolution: @@ -398,20 +385,18 @@ packages: engines: { node: ">=10" } dev: true - /chai@4.3.7: + /chai@5.0.0: resolution: { - integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==, + integrity: sha512-HO5p0oEKd5M6HEcwOkNAThAE3j960vIZvVcc0t2tI06Dd0ATu69cEnMB2wOhC5/ZyQ6m67w3ePjU/HzXsSsdBA==, } - engines: { node: ">=4" } + engines: { node: ">=12" } dependencies: - assertion-error: 1.1.0 - check-error: 1.0.2 - deep-eql: 4.1.3 - get-func-name: 2.0.0 - loupe: 2.3.6 - pathval: 1.1.1 - type-detect: 4.0.8 + assertion-error: 2.0.1 + check-error: 2.0.0 + deep-eql: 5.0.1 + loupe: 3.0.2 + pathval: 2.0.0 dev: true /chalk@2.4.2: @@ -437,10 +422,10 @@ packages: supports-color: 7.2.0 dev: true - /chalk@5.2.0: + /chalk@5.3.0: resolution: { - integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==, + integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==, } engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } dev: true @@ -452,11 +437,12 @@ packages: } dev: true - /check-error@1.0.2: + /check-error@2.0.0: resolution: { - integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==, + integrity: sha512-tjLAOBHKVxtPoHe/SA7kNOMvhCRdCJ3vETdeY0RuAc9popf+hyaSV6ZEg9hr4cpWF7jmo/JSWEnLDrnijS9Tog==, } + engines: { node: ">= 16" } dev: true /chokidar@3.5.3: @@ -474,36 +460,17 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true - /clean-stack@2.2.0: + /cli-cursor@4.0.0: resolution: { - integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==, + integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==, } - engines: { node: ">=6" } - dev: true - - /cli-cursor@3.1.0: - resolution: - { - integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, - } - engines: { node: ">=8" } - dependencies: - restore-cursor: 3.1.0 - dev: true - - /cli-truncate@2.1.0: - resolution: - { - integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==, - } - engines: { node: ">=8" } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 + restore-cursor: 4.0.0 dev: true /cli-truncate@3.1.0: @@ -528,6 +495,18 @@ packages: wrap-ansi: 7.0.0 dev: true + /cliui@8.0.1: + resolution: + { + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, + } + engines: { node: ">=12" } + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + /color-convert@1.9.3: resolution: { @@ -607,18 +586,18 @@ packages: delayed-stream: 1.0.0 dev: true - /commander@10.0.1: + /commander@11.0.0: resolution: { - integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==, + integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==, } - engines: { node: ">=14" } + engines: { node: ">=16" } dev: true - /component-emitter@1.3.0: + /component-emitter@1.3.1: resolution: { - integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==, + integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==, } dev: true @@ -647,10 +626,10 @@ packages: engines: { node: ">= 0.6" } dev: false - /convert-source-map@1.9.0: + /convert-source-map@2.0.0: resolution: { - integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==, + integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, } dev: true @@ -741,14 +720,12 @@ packages: engines: { node: ">=10" } dev: true - /deep-eql@4.1.3: + /deep-eql@5.0.1: resolution: { - integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==, + integrity: sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==, } engines: { node: ">=6" } - dependencies: - type-detect: 4.0.8 dev: true /deepmerge@4.3.1: @@ -759,6 +736,17 @@ packages: engines: { node: ">=0.10.0" } dev: true + /define-data-property@1.1.1: + resolution: + { + integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==, + } + engines: { node: ">= 0.4" } + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + /delayed-stream@1.0.0: resolution: { @@ -801,10 +789,10 @@ packages: engines: { node: ">=0.3.1" } dev: true - /dotenv@16.0.3: + /dotenv@16.3.1: resolution: { - integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==, + integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==, } engines: { node: ">=12" } dev: false @@ -891,10 +879,17 @@ packages: engines: { node: ">= 0.6" } dev: false - /execa@7.1.1: + /eventemitter3@5.0.1: resolution: { - integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==, + integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==, + } + dev: true + + /execa@7.2.0: + resolution: + { + integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==, } engines: { node: ^14.18.0 || ^16.14.0 || >=18.0.0 } dependencies: @@ -903,13 +898,13 @@ packages: human-signals: 4.3.1 is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 5.1.0 + npm-run-path: 5.2.0 onetime: 6.0.0 signal-exit: 3.0.7 strip-final-newline: 3.0.0 dev: true - /express-winston@4.2.0(winston@3.9.0): + /express-winston@4.2.0(winston@3.11.0): resolution: { integrity: sha512-EMD74g63nVHi7pFleQw7KHCxiA1pjF5uCwbCfzGqmFxs9KvlDPIVS3cMGpULm6MshExMT9TjC3SqmRGB9kb7yw==, @@ -920,7 +915,7 @@ packages: dependencies: chalk: 2.4.2 lodash: 4.17.21 - winston: 3.9.0 + winston: 3.11.0 dev: false /express@4.18.2: @@ -1112,10 +1107,10 @@ packages: } dev: true - /fsevents@2.3.2: + /fsevents@2.3.3: resolution: { - integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, } engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } os: [darwin] @@ -1123,10 +1118,10 @@ packages: dev: true optional: true - /function-bind@1.1.1: + /function-bind@1.1.2: resolution: { - integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, } /get-caller-file@2.0.5: @@ -1137,23 +1132,23 @@ packages: engines: { node: 6.* || 8.* || >= 10.* } dev: true - /get-func-name@2.0.0: + /get-func-name@2.0.2: resolution: { - integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==, + integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==, } dev: true - /get-intrinsic@1.2.1: + /get-intrinsic@1.2.2: resolution: { - integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==, + integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==, } dependencies: - function-bind: 1.1.1 - has: 1.0.3 + function-bind: 1.1.2 has-proto: 1.0.1 has-symbols: 1.0.3 + hasown: 2.0.0 /get-stream@6.0.1: resolution: @@ -1201,6 +1196,14 @@ packages: path-is-absolute: 1.0.1 dev: true + /gopd@1.0.1: + resolution: + { + integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==, + } + dependencies: + get-intrinsic: 1.2.2 + /has-flag@3.0.0: resolution: { @@ -1217,6 +1220,14 @@ packages: engines: { node: ">=8" } dev: true + /has-property-descriptors@1.0.1: + resolution: + { + integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==, + } + dependencies: + get-intrinsic: 1.2.2 + /has-proto@1.0.1: resolution: { @@ -1231,14 +1242,14 @@ packages: } engines: { node: ">= 0.4" } - /has@1.0.3: + /hasown@2.0.0: resolution: { - integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, + integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==, } - engines: { node: ">= 0.4.0" } + engines: { node: ">= 0.4" } dependencies: - function-bind: 1.1.1 + function-bind: 1.1.2 /he@1.2.0: resolution: @@ -1304,14 +1315,6 @@ packages: safer-buffer: 2.1.2 dev: false - /indent-string@4.0.0: - resolution: - { - integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, - } - engines: { node: ">=8" } - dev: true - /inflight@1.0.6: resolution: { @@ -1441,35 +1444,35 @@ packages: } dev: true - /istanbul-lib-coverage@3.2.0: + /istanbul-lib-coverage@3.2.2: resolution: { - integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==, + integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==, } engines: { node: ">=8" } dev: true - /istanbul-lib-report@3.0.0: + /istanbul-lib-report@3.0.1: resolution: { - integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==, + integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==, } - engines: { node: ">=8" } + engines: { node: ">=10" } dependencies: - istanbul-lib-coverage: 3.2.0 - make-dir: 3.1.0 + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 supports-color: 7.2.0 dev: true - /istanbul-reports@3.1.5: + /istanbul-reports@3.1.6: resolution: { - integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==, + integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==, } engines: { node: ">=8" } dependencies: html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 + istanbul-lib-report: 3.0.1 dev: true /js-yaml@4.1.0: @@ -1506,24 +1509,21 @@ packages: engines: { node: ">=10" } dev: true - /lint-staged@13.2.2: + /lint-staged@13.3.0: resolution: { - integrity: sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA==, + integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==, } - engines: { node: ^14.13.1 || >=16.0.0 } + engines: { node: ^16.14.0 || >=18.0.0 } hasBin: true dependencies: - chalk: 5.2.0 - cli-truncate: 3.1.0 - commander: 10.0.1 + chalk: 5.3.0 + commander: 11.0.0 debug: 4.3.4(supports-color@8.1.1) - execa: 7.1.1 + execa: 7.2.0 lilconfig: 2.1.0 - listr2: 5.0.8 + listr2: 6.6.1 micromatch: 4.0.5 - normalize-path: 3.0.0 - object-inspect: 1.12.3 pidtree: 0.6.0 string-argv: 0.3.2 yaml: 2.3.1 @@ -1532,26 +1532,24 @@ packages: - supports-color dev: true - /listr2@5.0.8: + /listr2@6.6.1: resolution: { - integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==, + integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==, } - engines: { node: ^14.13.1 || >=16.0.0 } + engines: { node: ">=16.0.0" } peerDependencies: enquirer: ">= 2.3.0 < 3" peerDependenciesMeta: enquirer: optional: true dependencies: - cli-truncate: 2.1.0 + cli-truncate: 3.1.0 colorette: 2.0.20 - log-update: 4.0.0 - p-map: 4.0.0 + eventemitter3: 5.0.1 + log-update: 5.0.1 rfdc: 1.3.0 - rxjs: 7.8.1 - through: 2.3.8 - wrap-ansi: 7.0.0 + wrap-ansi: 8.1.0 dev: true /locate-path@6.0.0: @@ -1582,40 +1580,42 @@ packages: is-unicode-supported: 0.1.0 dev: true - /log-update@4.0.0: + /log-update@5.0.1: resolution: { - integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==, + integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==, } - engines: { node: ">=10" } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } dependencies: - ansi-escapes: 4.3.2 - cli-cursor: 3.1.0 - slice-ansi: 4.0.0 - wrap-ansi: 6.2.0 + ansi-escapes: 5.0.0 + cli-cursor: 4.0.0 + slice-ansi: 5.0.0 + strip-ansi: 7.1.0 + wrap-ansi: 8.1.0 dev: true - /logform@2.5.1: + /logform@2.6.0: resolution: { - integrity: sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==, + integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==, } + engines: { node: ">= 12.0.0" } dependencies: - "@colors/colors": 1.5.0 - "@types/triple-beam": 1.3.2 + "@colors/colors": 1.6.0 + "@types/triple-beam": 1.3.5 fecha: 4.2.3 ms: 2.1.3 safe-stable-stringify: 2.4.3 - triple-beam: 1.3.0 + triple-beam: 1.4.1 dev: false - /loupe@2.3.6: + /loupe@3.0.2: resolution: { - integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==, + integrity: sha512-Tzlkbynv7dtqxTROe54Il+J4e/zG2iehtJGZUYpTv8WzlkW9qyEcE83UhGJCeuF3SCfzHuM5VWhBi47phV3+AQ==, } dependencies: - get-func-name: 2.0.0 + get-func-name: 2.0.2 dev: true /lru-cache@6.0.0: @@ -1628,14 +1628,14 @@ packages: yallist: 4.0.0 dev: true - /make-dir@3.1.0: + /make-dir@4.0.0: resolution: { - integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, + integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==, } - engines: { node: ">=8" } + engines: { node: ">=10" } dependencies: - semver: 6.3.0 + semver: 7.5.4 dev: true /md5@2.3.0: @@ -1758,26 +1758,26 @@ packages: brace-expansion: 2.0.1 dev: true - /mkdirp@1.0.4: + /mkdirp@3.0.1: resolution: { - integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==, + integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==, } engines: { node: ">=10" } hasBin: true dev: true - /mocha-junit-reporter@2.2.0(mocha@10.2.0): + /mocha-junit-reporter@2.2.1(mocha@10.2.0): resolution: { - integrity: sha512-W83Ddf94nfLiTBl24aS8IVyFvO8aRDLlCvb+cKb/VEaN5dEbcqu3CXiTe8MQK2DvzS7oKE1RsFTxzN302GGbDQ==, + integrity: sha512-iDn2tlKHn8Vh8o4nCzcUVW4q7iXp7cC4EB78N0cDHIobLymyHNwe0XG8HEHHjc3hJlXm0Vy6zcrxaIhnI2fWmw==, } peerDependencies: mocha: ">=2.2.5" dependencies: debug: 4.3.4(supports-color@8.1.1) md5: 2.3.0 - mkdirp: 1.0.4 + mkdirp: 3.0.1 mocha: 10.2.0 strip-ansi: 6.0.1 xml: 1.0.1 @@ -1861,10 +1861,10 @@ packages: engines: { node: ">=10.5.0" } dev: false - /node-fetch@3.3.1: + /node-fetch@3.3.2: resolution: { - integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==, + integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==, } engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } dependencies: @@ -1881,20 +1881,20 @@ packages: engines: { node: ">=0.10.0" } dev: true - /npm-run-path@5.1.0: + /npm-run-path@5.2.0: resolution: { - integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==, + integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==, } engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } dependencies: path-key: 4.0.0 dev: true - /object-inspect@1.12.3: + /object-inspect@1.13.1: resolution: { - integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==, + integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==, } /on-finished@2.4.1: @@ -1965,16 +1965,6 @@ packages: p-limit: 3.1.0 dev: true - /p-map@4.0.0: - resolution: - { - integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==, - } - engines: { node: ">=10" } - dependencies: - aggregate-error: 3.1.0 - dev: true - /parseurl@1.3.3: resolution: { @@ -2022,11 +2012,12 @@ packages: } dev: false - /pathval@1.1.1: + /pathval@2.0.0: resolution: { - integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==, + integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==, } + engines: { node: ">= 14.16" } dev: true /picomatch@2.3.1: @@ -2046,12 +2037,12 @@ packages: hasBin: true dev: true - /prettier@2.8.8: + /prettier@3.1.1: resolution: { - integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==, + integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==, } - engines: { node: ">=10.13.0" } + engines: { node: ">=14" } hasBin: true dev: true @@ -2146,12 +2137,12 @@ packages: engines: { node: ">=0.10.0" } dev: true - /restore-cursor@3.1.0: + /restore-cursor@4.0.0: resolution: { - integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==, + integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==, } - engines: { node: ">=8" } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } dependencies: onetime: 5.1.2 signal-exit: 3.0.7 @@ -2174,15 +2165,6 @@ packages: glob: 7.2.3 dev: true - /rxjs@7.8.1: - resolution: - { - integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==, - } - dependencies: - tslib: 2.5.2 - dev: true - /safe-buffer@5.2.1: resolution: { @@ -2204,18 +2186,10 @@ packages: } dev: false - /semver@6.3.0: + /semver@7.5.4: resolution: { - integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==, - } - hasBin: true - dev: true - - /semver@7.5.1: - resolution: - { - integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==, + integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==, } engines: { node: ">=10" } hasBin: true @@ -2271,6 +2245,18 @@ packages: - supports-color dev: false + /set-function-length@1.1.1: + resolution: + { + integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==, + } + engines: { node: ">= 0.4" } + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + /setprototypeof@1.2.0: resolution: { @@ -2302,9 +2288,9 @@ packages: integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==, } dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.12.3 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 /signal-exit@3.0.7: resolution: @@ -2322,30 +2308,6 @@ packages: is-arrayish: 0.3.2 dev: false - /slice-ansi@3.0.0: - resolution: - { - integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==, - } - engines: { node: ">=8" } - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - - /slice-ansi@4.0.0: - resolution: - { - integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==, - } - engines: { node: ">=10" } - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - /slice-ansi@5.0.0: resolution: { @@ -2449,14 +2411,14 @@ packages: engines: { node: ">=8" } dev: true - /superagent@8.0.9: + /superagent@8.1.2: resolution: { - integrity: sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==, + integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==, } engines: { node: ">=6.4.0 <13 || >=14" } dependencies: - component-emitter: 1.3.0 + component-emitter: 1.3.1 cookiejar: 2.1.4 debug: 4.3.4(supports-color@8.1.1) fast-safe-stringify: 2.1.1 @@ -2465,7 +2427,7 @@ packages: methods: 1.1.2 mime: 2.6.0 qs: 6.11.2 - semver: 7.5.1 + semver: 7.5.4 transitivePeerDependencies: - supports-color dev: true @@ -2478,7 +2440,7 @@ packages: engines: { node: ">=6.4.0" } dependencies: methods: 1.1.2 - superagent: 8.0.9 + superagent: 8.1.2 transitivePeerDependencies: - supports-color dev: true @@ -2513,10 +2475,10 @@ packages: has-flag: 4.0.0 dev: true - /swagger-autogen@2.23.1: + /swagger-autogen@2.23.7: resolution: { - integrity: sha512-tOAb5cOGNPduIHKoOxndCRy2Mrg7xV3O1RerrWExrDxeSTjXhA350pyJd7VUDY6ZO9gbZ34Bjlc5CXkleUgvAQ==, + integrity: sha512-vr7uRmuV0DCxWc0wokLJAwX3GwQFJ0jwN+AWk0hKxre2EZwusnkGSGdVFd82u7fQLgwSTnbWkxUL7HXuz5LTZQ==, } dependencies: acorn: 7.4.1 @@ -2525,24 +2487,24 @@ packages: json5: 2.2.3 dev: true - /swagger-ui-dist@4.19.0: + /swagger-ui-dist@5.10.5: resolution: { - integrity: sha512-9C9fJGI18gK5AhaU5YRyPY1lXJH4lmWh8h9zFMrJBkYzdRjCbAzYl1ayWPYgwFvag/Luqi3Co599OK/39IS2QQ==, + integrity: sha512-Uv8E7hV/nXALQKgW86X1i58gl1O6DFg+Uq54sDwhYqucBBxj/47dLNw872TNILNlOTuPA6dRvUMGQdmlpaX8qQ==, } dev: false - /swagger-ui-express@4.6.3(express@4.18.2): + /swagger-ui-express@5.0.0(express@4.18.2): resolution: { - integrity: sha512-CDje4PndhTD2HkgyKH3pab+LKspDeB/NhPN2OF1j+piYIamQqBYwAXWESOT1Yju2xFg51bRW9sUng2WxDjzArw==, + integrity: sha512-tsU9tODVvhyfkNSvf03E6FAk+z+5cU3lXAzMy6Pv4av2Gt2xA0++fogwC4qo19XuFf6hdxevPuVCSKFuMHJhFA==, } engines: { node: ">= v0.10.32" } peerDependencies: express: ">=4.0.0 || >=5.0.0-beta" dependencies: express: 4.18.2 - swagger-ui-dist: 4.19.0 + swagger-ui-dist: 5.10.5 dev: false /test-exclude@6.0.0: @@ -2564,13 +2526,6 @@ packages: } dev: false - /through@2.3.8: - resolution: - { - integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==, - } - dev: true - /to-regex-range@5.0.1: resolution: { @@ -2589,32 +2544,18 @@ packages: engines: { node: ">=0.6" } dev: false - /triple-beam@1.3.0: + /triple-beam@1.4.1: resolution: { - integrity: sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==, + integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==, } + engines: { node: ">= 14.0.0" } dev: false - /tslib@2.5.2: - resolution: - { - integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==, - } - dev: true - - /type-detect@4.0.8: + /type-fest@1.4.0: resolution: { - integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, - } - engines: { node: ">=4" } - dev: true - - /type-fest@0.21.3: - resolution: - { - integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, + integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==, } engines: { node: ">=10" } dev: true @@ -2653,16 +2594,16 @@ packages: engines: { node: ">= 0.4.0" } dev: false - /v8-to-istanbul@9.1.0: + /v8-to-istanbul@9.2.0: resolution: { - integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==, + integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==, } engines: { node: ">=10.12.0" } dependencies: - "@jridgewell/trace-mapping": 0.3.18 - "@types/istanbul-lib-coverage": 2.0.4 - convert-source-map: 1.9.0 + "@jridgewell/trace-mapping": 0.3.20 + "@types/istanbul-lib-coverage": 2.0.6 + convert-source-map: 2.0.0 dev: true /vary@1.1.2: @@ -2692,36 +2633,36 @@ packages: isexe: 2.0.0 dev: true - /winston-transport@4.5.0: + /winston-transport@4.6.0: resolution: { - integrity: sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==, + integrity: sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==, } - engines: { node: ">= 6.4.0" } + engines: { node: ">= 12.0.0" } dependencies: - logform: 2.5.1 + logform: 2.6.0 readable-stream: 3.6.2 - triple-beam: 1.3.0 + triple-beam: 1.4.1 dev: false - /winston@3.9.0: + /winston@3.11.0: resolution: { - integrity: sha512-jW51iW/X95BCW6MMtZWr2jKQBP4hV5bIDq9QrIjfDk6Q9QuxvTKEAlpUNAzP+HYHFFCeENhph16s0zEunu4uuQ==, + integrity: sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==, } engines: { node: ">= 12.0.0" } dependencies: - "@colors/colors": 1.5.0 + "@colors/colors": 1.6.0 "@dabh/diagnostics": 2.0.3 - async: 3.2.4 + async: 3.2.5 is-stream: 2.0.1 - logform: 2.5.1 + logform: 2.6.0 one-time: 1.0.0 readable-stream: 3.6.2 safe-stable-stringify: 2.4.3 stack-trace: 0.0.10 - triple-beam: 1.3.0 - winston-transport: 4.5.0 + triple-beam: 1.4.1 + winston-transport: 4.6.0 dev: false /workerpool@6.2.1: @@ -2731,28 +2672,28 @@ packages: } dev: true - /wrap-ansi@6.2.0: + /wrap-ansi@7.0.0: resolution: { - integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, } - engines: { node: ">=8" } + engines: { node: ">=10" } dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 dev: true - /wrap-ansi@7.0.0: + /wrap-ansi@8.1.0: resolution: { - integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, + integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==, } - engines: { node: ">=10" } + engines: { node: ">=12" } dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 dev: true /wrappy@1.0.2: @@ -2800,12 +2741,12 @@ packages: engines: { node: ">=10" } dev: true - /yargs-parser@20.2.9: + /yargs-parser@21.1.1: resolution: { - integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==, + integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, } - engines: { node: ">=10" } + engines: { node: ">=12" } dev: true /yargs-unparser@2.0.0: @@ -2834,7 +2775,23 @@ packages: require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 - yargs-parser: 20.2.9 + yargs-parser: 20.2.4 + dev: true + + /yargs@17.7.2: + resolution: + { + integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, + } + engines: { node: ">=12" } + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 dev: true /yocto-queue@0.1.0: diff --git a/public/api/spec.json b/public/api/spec.json index c7ff77b..b0ab5c6 100644 --- a/public/api/spec.json +++ b/public/api/spec.json @@ -2,7 +2,7 @@ "openapi": "3.0.0", "info": { "title": "node-express-example", - "description": "[Source Code](https://github.com/Lonor/node-express-example)", + "description": "[Source Code](https://github.com/la3rence/node-express-example)", "version": "0.0.1", "license": "MIT" }, @@ -25,7 +25,6 @@ "/sse": { "get": { "description": "", - "parameters": [], "responses": { "200": { "description": "OK" @@ -55,7 +54,6 @@ "/bye": { "post": { "description": "Send bye...", - "parameters": [], "responses": { "200": { "description": "OK" @@ -80,7 +78,6 @@ "/slow": { "get": { "description": "", - "parameters": [], "responses": { "200": { "description": "OK" diff --git a/public/index.html b/public/index.html index 7882081..c8280eb 100644 --- a/public/index.html +++ b/public/index.html @@ -1,4 +1,4 @@ - + diff --git a/readme.md b/readme.md index cd3ee3a..1ed25be 100644 --- a/readme.md +++ b/readme.md @@ -3,6 +3,8 @@ [![Mocha CI](https://github.com/Lonor/express-api/actions/workflows/ci.yaml/badge.svg)](https://github.com/Lonor/express-api/actions/workflows/ci.yaml) [![codecov](https://codecov.io/gh/Lonor/node-express-example/branch/main/graph/badge.svg?token=KI6j0Pvoid)](https://codecov.io/gh/Lonor/node-express-example) +This is a demo app when I was learning Node.js with pure ESM support, test coverage, ci/cd, container support and swagger integration. + ## Start ```sh