From ccc6540ae88a0c1699bfa029dd70e970d7f3e209 Mon Sep 17 00:00:00 2001 From: Joe Arndt Date: Sat, 7 Feb 2026 21:50:04 -0600 Subject: [PATCH 1/8] installed typeorm and added initial merchant resource --- package-lock.json | 1927 ++++++++++++++++- package.json | 5 +- src/app.module.ts | 9 +- src/controllers/expenses/expense.dto.ts | 24 - src/controllers/expenses/expense.entities.ts | 30 - .../expenses/expenses.controller.ts | 44 - src/merchants/dto/create-merchant.dto.ts | 1 + src/merchants/dto/update-merchant.dto.ts | 4 + src/merchants/entities/merchant.entity.ts | 1 + src/merchants/merchants.controller.spec.ts | 20 + src/merchants/merchants.controller.ts | 34 + src/merchants/merchants.module.ts | 9 + src/merchants/merchants.service.spec.ts | 18 + src/merchants/merchants.service.ts | 26 + src/services/expenses.service.ts | 141 -- 15 files changed, 1972 insertions(+), 321 deletions(-) delete mode 100644 src/controllers/expenses/expense.dto.ts delete mode 100644 src/controllers/expenses/expense.entities.ts delete mode 100644 src/controllers/expenses/expenses.controller.ts create mode 100644 src/merchants/dto/create-merchant.dto.ts create mode 100644 src/merchants/dto/update-merchant.dto.ts create mode 100644 src/merchants/entities/merchant.entity.ts create mode 100644 src/merchants/merchants.controller.spec.ts create mode 100644 src/merchants/merchants.controller.ts create mode 100644 src/merchants/merchants.module.ts create mode 100644 src/merchants/merchants.service.spec.ts create mode 100644 src/merchants/merchants.service.ts delete mode 100644 src/services/expenses.service.ts diff --git a/package-lock.json b/package-lock.json index cff4acb..0e58022 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,8 +13,11 @@ "@nestjs/core": "^11.0.1", "@nestjs/mapped-types": "*", "@nestjs/platform-express": "^11.0.1", + "@nestjs/typeorm": "^11.0.0", "reflect-metadata": "^0.2.2", - "rxjs": "^7.8.1" + "rxjs": "^7.8.1", + "sqlite3": "^5.1.7", + "typeorm": "^0.3.28" }, "devDependencies": { "@eslint/eslintrc": "^3.2.0", @@ -727,7 +730,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" @@ -740,7 +743,7 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -938,6 +941,13 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "license": "MIT", + "optional": true + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -1367,7 +1377,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -1385,7 +1394,6 @@ "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -1398,7 +1406,6 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -1411,14 +1418,12 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -1436,7 +1441,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -1452,7 +1456,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -2022,7 +2025,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -2043,7 +2046,7 @@ "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { @@ -2363,6 +2366,19 @@ } } }, + "node_modules/@nestjs/typeorm": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-11.0.0.tgz", + "integrity": "sha512-SOeUQl70Lb2OfhGkvnh4KXWlsd+zA08RuuQgT7kKbzivngxzSo1Oc7Usu5VxCxACQC9wc2l9esOHILSJeK7rJA==", + "license": "MIT", + "peerDependencies": { + "@nestjs/common": "^10.0.0 || ^11.0.0", + "@nestjs/core": "^10.0.0 || ^11.0.0", + "reflect-metadata": "^0.1.13 || ^0.2.0", + "rxjs": "^7.2.0", + "typeorm": "^0.3.0" + } + }, "node_modules/@noble/hashes": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", @@ -2376,6 +2392,45 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "license": "MIT", + "optional": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@nuxt/opencollective": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.4.1.tgz", @@ -2406,7 +2461,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "license": "MIT", "optional": true, "engines": { @@ -2453,6 +2507,12 @@ "@sinonjs/commons": "^3.0.1" } }, + "node_modules/@sqltools/formatter": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", + "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==", + "license": "MIT" + }, "node_modules/@tokenizer/inflate": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.3.1.tgz", @@ -2477,32 +2537,42 @@ "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", "license": "MIT" }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@tybys/wasm-util": { @@ -2706,7 +2776,7 @@ "version": "22.19.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.2.tgz", "integrity": "sha512-LPM2G3Syo1GLzXLGJAKdqoU35XvrWzGJ21/7sgZTUpbkBaOasTj8tjwn6w+hCkqaa1TfJ/w67rJSwYItlJ2mYw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -3502,6 +3572,13 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "license": "ISC", + "optional": true + }, "node_modules/accepts": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", @@ -3519,7 +3596,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, + "devOptional": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -3555,7 +3632,7 @@ "version": "8.3.4", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -3564,6 +3641,46 @@ "node": ">=0.4.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", + "optional": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -3663,7 +3780,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3673,7 +3789,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -3689,7 +3804,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==", - "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -3722,17 +3836,48 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/app-root-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/append-field": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", "license": "MIT" }, + "node_modules/aproba": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", + "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", + "license": "ISC", + "optional": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/argparse": { @@ -3763,6 +3908,21 @@ "dev": true, "license": "MIT" }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/babel-jest": { "version": "30.2.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.2.0.tgz", @@ -3866,14 +4026,12 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -3900,11 +4058,19 @@ "baseline-browser-mapping": "dist/cli.js" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, "license": "MIT", "dependencies": { "buffer": "^5.5.0", @@ -3940,7 +4106,7 @@ "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -4021,7 +4187,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, "funding": [ { "type": "github", @@ -4068,6 +4233,122 @@ "node": ">= 0.8" } }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -4188,6 +4469,15 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", @@ -4221,6 +4511,16 @@ "dev": true, "license": "MIT" }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -4277,7 +4577,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -4292,7 +4591,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -4338,7 +4636,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -4351,9 +4648,18 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "license": "ISC", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -4406,7 +4712,7 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/concat-stream": { @@ -4433,6 +4739,13 @@ "node": "^14.18.0 || >=16.10.0" } }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC", + "optional": true + }, "node_modules/content-disposition": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", @@ -4538,14 +4851,13 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -4556,6 +4868,12 @@ "node": ">= 8" } }, + "node_modules/dayjs": { + "version": "1.11.19", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", + "license": "MIT" + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -4573,11 +4891,25 @@ } } }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/dedent": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", - "dev": true, "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" @@ -4588,6 +4920,15 @@ } } }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -4618,6 +4959,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -4628,6 +4986,13 @@ "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT", + "optional": true + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -4637,6 +5002,15 @@ "node": ">= 0.8" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -4662,12 +5036,24 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -4686,7 +5072,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, "license": "MIT" }, "node_modules/ee-first": { @@ -4719,7 +5104,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/encodeurl": { @@ -4731,6 +5115,38 @@ "node": ">= 0.8" } }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.18.3", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", @@ -4745,6 +5161,23 @@ "node": ">=10.13.0" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "license": "MIT", + "optional": true + }, "node_modules/error-ex": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", @@ -4812,7 +5245,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5112,6 +5544,15 @@ "node": ">= 0.8.0" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, "node_modules/expect": { "version": "30.2.0", "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", @@ -5288,6 +5729,12 @@ "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -5360,11 +5807,25 @@ "dev": true, "license": "ISC" }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", @@ -5481,6 +5942,12 @@ "node": ">= 0.8" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -5496,6 +5963,36 @@ "node": ">=12" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, "node_modules/fs-monkey": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", @@ -5507,7 +6004,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/fsevents": { @@ -5534,6 +6031,34 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gauge/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC", + "optional": true + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -5548,7 +6073,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -5614,6 +6138,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, "node_modules/glob": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", @@ -5697,7 +6227,7 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/handlebars": { @@ -5742,6 +6272,18 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -5758,7 +6300,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -5770,6 +6311,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC", + "optional": true + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -5789,6 +6337,13 @@ "dev": true, "license": "MIT" }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause", + "optional": true + }, "node_modules/http-errors": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", @@ -5809,6 +6364,35 @@ "url": "https://opencollective.com/express" } }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -5819,6 +6403,16 @@ "node": ">=10.17.0" } }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/iconv-lite": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", @@ -5906,18 +6500,35 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "license": "ISC", + "optional": true + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -5930,6 +6541,22 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -5946,6 +6573,18 @@ "dev": true, "license": "MIT" }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -5960,7 +6599,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5999,6 +6637,13 @@ "node": ">=8" } }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "license": "MIT", + "optional": true + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -6028,6 +6673,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -6041,11 +6701,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, "license": "ISC" }, "node_modules/istanbul-lib-coverage": { @@ -6132,7 +6797,6 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -7149,9 +7813,80 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, + "devOptional": true, "license": "ISC" }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "license": "ISC", + "optional": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/make-fetch-happen/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/make-fetch-happen/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true + }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -7297,11 +8032,23 @@ "node": ">=6" } }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -7323,12 +8070,212 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "license": "MIT", + "optional": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-fetch/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -7341,6 +8288,12 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -7418,6 +8371,12 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, "node_modules/napi-postinstall": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", @@ -7457,6 +8416,18 @@ "dev": true, "license": "MIT" }, + "node_modules/node-abi": { + "version": "3.87.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.87.0.tgz", + "integrity": "sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/node-abort-controller": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", @@ -7464,6 +8435,12 @@ "dev": true, "license": "MIT" }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" + }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", @@ -7474,6 +8451,53 @@ "lodash": "^4.17.21" } }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "license": "MIT", + "optional": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -7488,6 +8512,22 @@ "dev": true, "license": "MIT" }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -7511,6 +8551,23 @@ "node": ">=8" } }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -7643,6 +8700,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -7657,7 +8730,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/parent-module": { @@ -7715,7 +8787,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7725,7 +8797,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7887,6 +8958,41 @@ "node": ">=4" } }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -7954,6 +9060,27 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "license": "ISC", + "optional": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "license": "MIT", + "optional": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -7967,6 +9094,16 @@ "node": ">= 0.10" } }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -8043,6 +9180,30 @@ "node": ">= 0.10" } }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", @@ -8088,7 +9249,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8158,6 +9318,55 @@ "dev": true, "license": "ISC" }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/router": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", @@ -8232,7 +9441,6 @@ "version": "7.7.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -8288,17 +9496,60 @@ "node": ">= 18" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC", + "optional": true + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -8311,7 +9562,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8393,7 +9643,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -8402,6 +9651,51 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -8412,6 +9706,47 @@ "node": ">=8" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "license": "MIT", + "optional": true, + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -8450,6 +9785,79 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/sql-highlight": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sql-highlight/-/sql-highlight-6.1.0.tgz", + "integrity": "sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA==", + "funding": [ + "https://github.com/scriptcoded/sql-highlight?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/scriptcoded" + } + ], + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/sqlite3": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", + "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "bindings": "^1.5.0", + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.1", + "tar": "^6.1.11" + }, + "optionalDependencies": { + "node-gyp": "8.x" + }, + "peerDependencies": { + "node-gyp": "8.x" + }, + "peerDependenciesMeta": { + "node-gyp": { + "optional": true + } + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/ssri/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ssri/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true + }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -8517,7 +9925,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -8533,7 +9940,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -8548,7 +9954,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -8562,7 +9967,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -8708,6 +10112,85 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, "node_modules/terser": { "version": "5.44.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", @@ -8949,6 +10432,20 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -9093,7 +10590,7 @@ "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -9180,6 +10677,18 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -9230,17 +10739,224 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "license": "MIT" }, + "node_modules/typeorm": { + "version": "0.3.28", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.28.tgz", + "integrity": "sha512-6GH7wXhtfq2D33ZuRXYwIsl/qM5685WZcODZb7noOOcRMteM9KF2x2ap3H0EBjnSV0VO4gNAfJT5Ukp0PkOlvg==", + "license": "MIT", + "dependencies": { + "@sqltools/formatter": "^1.2.5", + "ansis": "^4.2.0", + "app-root-path": "^3.1.0", + "buffer": "^6.0.3", + "dayjs": "^1.11.19", + "debug": "^4.4.3", + "dedent": "^1.7.0", + "dotenv": "^16.6.1", + "glob": "^10.5.0", + "reflect-metadata": "^0.2.2", + "sha.js": "^2.4.12", + "sql-highlight": "^6.1.0", + "tslib": "^2.8.1", + "uuid": "^11.1.0", + "yargs": "^17.7.2" + }, + "bin": { + "typeorm": "cli.js", + "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js", + "typeorm-ts-node-esm": "cli-ts-node-esm.js" + }, + "engines": { + "node": ">=16.13.0" + }, + "funding": { + "url": "https://opencollective.com/typeorm" + }, + "peerDependencies": { + "@google-cloud/spanner": "^5.18.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@sap/hana-client": "^2.14.22", + "better-sqlite3": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0", + "ioredis": "^5.0.4", + "mongodb": "^5.8.0 || ^6.0.0", + "mssql": "^9.1.1 || ^10.0.0 || ^11.0.0 || ^12.0.0", + "mysql2": "^2.2.5 || ^3.0.1", + "oracledb": "^6.3.0", + "pg": "^8.5.1", + "pg-native": "^3.0.0", + "pg-query-stream": "^4.0.0", + "redis": "^3.1.1 || ^4.0.0 || ^5.0.14", + "sql.js": "^1.4.0", + "sqlite3": "^5.0.3", + "ts-node": "^10.7.0", + "typeorm-aurora-data-api-driver": "^2.0.0 || ^3.0.0" + }, + "peerDependenciesMeta": { + "@google-cloud/spanner": { + "optional": true + }, + "@sap/hana-client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "mongodb": { + "optional": true + }, + "mssql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "oracledb": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-native": { + "optional": true + }, + "pg-query-stream": { + "optional": true + }, + "redis": { + "optional": true + }, + "sql.js": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "ts-node": { + "optional": true + }, + "typeorm-aurora-data-api-driver": { + "optional": true + } + } + }, + "node_modules/typeorm/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typeorm/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/typeorm/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typeorm/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/typeorm/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typeorm/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -9316,9 +11032,29 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, + "devOptional": true, "license": "MIT" }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "license": "ISC", + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -9420,11 +11156,24 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/v8-to-istanbul": { @@ -9680,7 +11429,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -9692,6 +11440,37 @@ "node": ">= 8" } }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -9729,7 +11508,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -9776,7 +11554,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -9793,7 +11570,6 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -9812,7 +11588,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -9822,7 +11597,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" diff --git a/package.json b/package.json index 121f250..91d5e90 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,11 @@ "@nestjs/core": "^11.0.1", "@nestjs/mapped-types": "*", "@nestjs/platform-express": "^11.0.1", + "@nestjs/typeorm": "^11.0.0", "reflect-metadata": "^0.2.2", - "rxjs": "^7.8.1" + "rxjs": "^7.8.1", + "sqlite3": "^5.1.7", + "typeorm": "^0.3.28" }, "devDependencies": { "@eslint/eslintrc": "^3.2.0", diff --git a/src/app.module.ts b/src/app.module.ts index ca259fc..b10565f 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,11 +1,10 @@ import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; -import { ExpensesService } from './services/expenses.service'; -import { ExpensesController } from './controllers/expenses/expenses.controller'; +import { MerchantsModule } from './merchants/merchants.module'; @Module({ - imports: [], - controllers: [AppController, ExpensesController], - providers: [ExpensesService] + imports: [MerchantsModule], + controllers: [AppController], + providers: [] }) export class AppModule {} diff --git a/src/controllers/expenses/expense.dto.ts b/src/controllers/expenses/expense.dto.ts deleted file mode 100644 index 134683b..0000000 --- a/src/controllers/expenses/expense.dto.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { PartialType } from '@nestjs/mapped-types'; - -export class CreateExpenseDto { - date: Date; - cents: number; - categoryId: string; - merchantId?: string; - subcategoryIds?: string[]; - tagIds?: string[]; - description?: string; -} - -export class UpdateExpenseDto extends PartialType(CreateExpenseDto) {} - -export class GetExpenseDto { - id: string; - date: Date; - cents: number; - category: string; - merchant?: string; - subcategories?: string[]; - tags?: string[]; - description?: string; -} diff --git a/src/controllers/expenses/expense.entities.ts b/src/controllers/expenses/expense.entities.ts deleted file mode 100644 index 5288205..0000000 --- a/src/controllers/expenses/expense.entities.ts +++ /dev/null @@ -1,30 +0,0 @@ -export class Expense { - id: string; - date: Date; - cents: number; - categoryId: string; - merchantId?: string; - subcategoryIds: string[]; - tagIds: string[]; - description?: string; -} - -export class Category { - id: string; - category: string; -} - -export class SubCategory { - id: string; - subcategory: string; -} - -export class Merchant { - id: string; - merchant: string; -} - -export class Tag { - id: string; - tag: string; -} diff --git a/src/controllers/expenses/expenses.controller.ts b/src/controllers/expenses/expenses.controller.ts deleted file mode 100644 index 64523c1..0000000 --- a/src/controllers/expenses/expenses.controller.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, NotFoundException, HttpCode } from '@nestjs/common'; -import { ExpensesService } from '../../services/expenses.service'; -import { CreateExpenseDto, UpdateExpenseDto } from './expense.dto'; - -@Controller('expenses') -export class ExpensesController { - constructor(private readonly expensesService: ExpensesService) {} - - @Post() - create(@Body() createExpenseDto: CreateExpenseDto) { - return this.expensesService.create(createExpenseDto); - } - - @Get() - findAll() { - return this.expensesService.findAll(); - } - - @Get(':id') - findOne(@Param('id') id: string) { - const expense = this.expensesService.findOne(id); - if (!expense) { - throw new NotFoundException(); - } - - return expense; - } - - @Patch(':id') - update(@Param('id') id: string, @Body() updateExpenseDto: UpdateExpenseDto) { - const expense = this.expensesService.update(id, updateExpenseDto); - if (!expense) { - throw new NotFoundException(); - } - - return expense; - } - - @Delete(':id') - @HttpCode(204) - remove(@Param('id') id: string) { - return this.expensesService.remove(id); - } -} diff --git a/src/merchants/dto/create-merchant.dto.ts b/src/merchants/dto/create-merchant.dto.ts new file mode 100644 index 0000000..8d810ea --- /dev/null +++ b/src/merchants/dto/create-merchant.dto.ts @@ -0,0 +1 @@ +export class CreateMerchantDto {} diff --git a/src/merchants/dto/update-merchant.dto.ts b/src/merchants/dto/update-merchant.dto.ts new file mode 100644 index 0000000..7109433 --- /dev/null +++ b/src/merchants/dto/update-merchant.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/mapped-types'; +import { CreateMerchantDto } from './create-merchant.dto'; + +export class UpdateMerchantDto extends PartialType(CreateMerchantDto) {} diff --git a/src/merchants/entities/merchant.entity.ts b/src/merchants/entities/merchant.entity.ts new file mode 100644 index 0000000..32a6f34 --- /dev/null +++ b/src/merchants/entities/merchant.entity.ts @@ -0,0 +1 @@ +export class Merchant {} diff --git a/src/merchants/merchants.controller.spec.ts b/src/merchants/merchants.controller.spec.ts new file mode 100644 index 0000000..aa10fa8 --- /dev/null +++ b/src/merchants/merchants.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { MerchantsController } from './merchants.controller'; +import { MerchantsService } from './merchants.service'; + +describe('MerchantsController', () => { + let controller: MerchantsController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [MerchantsController], + providers: [MerchantsService] + }).compile(); + + controller = module.get(MerchantsController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/merchants/merchants.controller.ts b/src/merchants/merchants.controller.ts new file mode 100644 index 0000000..3de2630 --- /dev/null +++ b/src/merchants/merchants.controller.ts @@ -0,0 +1,34 @@ +import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common'; +import { MerchantsService } from './merchants.service'; +import { CreateMerchantDto } from './dto/create-merchant.dto'; +import { UpdateMerchantDto } from './dto/update-merchant.dto'; + +@Controller('merchants') +export class MerchantsController { + constructor(private readonly merchantsService: MerchantsService) {} + + @Post() + create(@Body() createMerchantDto: CreateMerchantDto) { + return this.merchantsService.create(createMerchantDto); + } + + @Get() + findAll() { + return this.merchantsService.findAll(); + } + + @Get(':id') + findOne(@Param('id') id: string) { + return this.merchantsService.findOne(+id); + } + + @Patch(':id') + update(@Param('id') id: string, @Body() updateMerchantDto: UpdateMerchantDto) { + return this.merchantsService.update(+id, updateMerchantDto); + } + + @Delete(':id') + remove(@Param('id') id: string) { + return this.merchantsService.remove(+id); + } +} diff --git a/src/merchants/merchants.module.ts b/src/merchants/merchants.module.ts new file mode 100644 index 0000000..c93eb11 --- /dev/null +++ b/src/merchants/merchants.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { MerchantsService } from './merchants.service'; +import { MerchantsController } from './merchants.controller'; + +@Module({ + controllers: [MerchantsController], + providers: [MerchantsService] +}) +export class MerchantsModule {} diff --git a/src/merchants/merchants.service.spec.ts b/src/merchants/merchants.service.spec.ts new file mode 100644 index 0000000..1034ff1 --- /dev/null +++ b/src/merchants/merchants.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { MerchantsService } from './merchants.service'; + +describe('MerchantsService', () => { + let service: MerchantsService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [MerchantsService] + }).compile(); + + service = module.get(MerchantsService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/merchants/merchants.service.ts b/src/merchants/merchants.service.ts new file mode 100644 index 0000000..0548f69 --- /dev/null +++ b/src/merchants/merchants.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@nestjs/common'; +import { CreateMerchantDto } from './dto/create-merchant.dto'; +import { UpdateMerchantDto } from './dto/update-merchant.dto'; + +@Injectable() +export class MerchantsService { + create(createMerchantDto: CreateMerchantDto) { + return 'This action adds a new merchant'; + } + + findAll() { + return `This action returns all merchants`; + } + + findOne(id: number) { + return `This action returns a #${id} merchant`; + } + + update(id: number, updateMerchantDto: UpdateMerchantDto) { + return `This action updates a #${id} merchant`; + } + + remove(id: number) { + return `This action removes a #${id} merchant`; + } +} diff --git a/src/services/expenses.service.ts b/src/services/expenses.service.ts deleted file mode 100644 index 27760cc..0000000 --- a/src/services/expenses.service.ts +++ /dev/null @@ -1,141 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { Category, Expense, Merchant, SubCategory, Tag } from '../controllers/expenses/expense.entities'; -import { CreateExpenseDto, GetExpenseDto, UpdateExpenseDto } from '../controllers/expenses/expense.dto'; -import { randomUUID } from 'node:crypto'; - -@Injectable() -export class ExpensesService { - private categories: Category[] = [ - { - id: '1', - category: 'Category 1' - } - ]; - private merchants: Merchant[] = [ - { - id: '1', - merchant: 'Merchant 1' - } - ]; - private subcategories: SubCategory[] = [ - { - id: '1', - subcategory: 'Subcategory 1' - }, - { - id: '2', - subcategory: 'Subcategory 2' - } - ]; - private tags: Tag[] = [ - { - id: '1', - tag: 'Tag 1' - }, - { - id: '2', - tag: 'Tag 2' - } - ]; - private expenses: Expense[] = [ - { - id: '2aa94170-2c57-4c4f-a1e7-13544ba72917', - date: new Date('2025-12-01'), - cents: 15443, - categoryId: '1', - merchantId: '1', - subcategoryIds: ['1', '2'], - tagIds: ['1', '2'], - description: 'Full existing expense' - }, - { - id: '0708e7f7-3a2a-4b93-81da-38954925ca78', - date: new Date('2025-12-02'), - cents: 8723, - categoryId: '1', - subcategoryIds: [], - tagIds: [], - description: 'Partial existing expense' - } - ]; - - public create(createExpenseDto: CreateExpenseDto) { - const expense = { - id: randomUUID(), - date: new Date(createExpenseDto.date), - cents: createExpenseDto.cents, - categoryId: createExpenseDto.categoryId, - merchantId: createExpenseDto.merchantId, - subcategoryIds: createExpenseDto.subcategoryIds ?? [], - tagIds: createExpenseDto.tagIds ?? [], - description: createExpenseDto.description - } as Expense; - this.expenses.push(expense); - - return this.mapExpense(expense); - } - - public findAll() { - return this.expenses.map((expense) => { - return this.mapExpense(expense); - }); - } - - public findOne(id: string) { - const expense = this.getExpense(id); - return expense ? this.mapExpense(expense) : undefined; - } - - public update(id: string, updateExpenseDto: UpdateExpenseDto) { - let index; - const expense = this.expenses.find((exp, idx) => { - if (exp.id === id) { - index = idx; - return exp; - } - }); - - if (expense && index) { - this.expenses[index] = { - ...expense, - ...updateExpenseDto - }; - - return this.mapExpense(this.expenses[index]); - } - - return undefined; - } - - public remove(id: string) { - this.expenses = this.expenses.filter((expense) => expense.id !== id); - } - - private getExpense(id: string) { - return this.expenses.find((expense) => expense.id === id); - } - - private getSubcategories(ids: string[]) { - return this.subcategories.filter((sub) => ids.includes(sub.id)).map((s) => s.subcategory); - } - - private getTags(ids: string[]) { - return this.tags.filter((tag) => ids.includes(tag.id)).map((t) => t.tag); - } - - private mapExpense(expense: Expense) { - const category = this.categories.find((category) => category.id === expense.categoryId); - const merchant = this.merchants.find((merchant) => merchant.id === expense.merchantId); - - return { - id: expense.id, - date: expense.date, - cents: expense.cents, - category: category?.category, - merchant: merchant?.merchant, - subcategories: this.getSubcategories(expense.subcategoryIds), - tags: this.getTags(expense.tagIds), - description: expense.description - } as GetExpenseDto; - } -} -- 2.47.3 From d7ad5828af9d14736785314a053ffc9471699f21 Mon Sep 17 00:00:00 2001 From: Joe Arndt Date: Sat, 7 Feb 2026 21:58:23 -0600 Subject: [PATCH 2/8] remove prettier --- .prettierrc | 6 ------ eslint.config.mjs | 13 +++++-------- package-lock.json | 2 +- package.json | 1 - src/app.module.ts | 15 ++++++++++++++- 5 files changed, 20 insertions(+), 17 deletions(-) delete mode 100644 .prettierrc diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index c0308f2..0000000 --- a/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "singleQuote": true, - "trailingComma": "none", - "printWidth": 160, - "bracketSameLine": true -} diff --git a/eslint.config.mjs b/eslint.config.mjs index 4e9f827..ed996a7 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,6 +1,5 @@ // @ts-check import eslint from '@eslint/js'; -import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; import globals from 'globals'; import tseslint from 'typescript-eslint'; @@ -10,7 +9,6 @@ export default tseslint.config( }, eslint.configs.recommended, ...tseslint.configs.recommendedTypeChecked, - eslintPluginPrettierRecommended, { languageOptions: { globals: { @@ -21,15 +19,14 @@ export default tseslint.config( parserOptions: { projectService: true, tsconfigRootDir: import.meta.dirname, - }, - }, + } + } }, { rules: { '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-floating-promises': 'warn', - '@typescript-eslint/no-unsafe-argument': 'warn', - "prettier/prettier": ["error", { endOfLine: "auto" }], - }, - }, + '@typescript-eslint/no-unsafe-argument': 'warn' + } + } ); diff --git a/package-lock.json b/package-lock.json index 0e58022..1bca623 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,6 @@ "eslint-plugin-prettier": "^5.2.2", "globals": "^16.0.0", "jest": "^30.0.0", - "prettier": "^3.4.2", "source-map-support": "^0.5.21", "supertest": "^7.0.0", "ts-jest": "^29.2.5", @@ -9009,6 +9008,7 @@ "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, diff --git a/package.json b/package.json index 91d5e90..136a9d0 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,6 @@ "eslint-plugin-prettier": "^5.2.2", "globals": "^16.0.0", "jest": "^30.0.0", - "prettier": "^3.4.2", "source-map-support": "^0.5.21", "supertest": "^7.0.0", "ts-jest": "^29.2.5", diff --git a/src/app.module.ts b/src/app.module.ts index b10565f..0f6f586 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,9 +1,22 @@ import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { MerchantsModule } from './merchants/merchants.module'; +import { TypeOrmModule } from '@nestjs/typeorm'; + +// const config: SqliteConnectionOptions = { +// type: "sqlite", +// database: "../db", +// entities: [Post], +// synchronize: true +// }; @Module({ - imports: [MerchantsModule], + imports: [ + MerchantsModule, + TypeOrmModule.forRoot({ + + }) + ], controllers: [AppController], providers: [] }) -- 2.47.3 From b5ced781c95aff58594573d91b60f9014ad51597 Mon Sep 17 00:00:00 2001 From: Joe Arndt Date: Sun, 8 Feb 2026 15:21:47 -0600 Subject: [PATCH 3/8] added merchants resource --- .../Merchants/LOC DELETE Merchant.bru | 11 +++ .../Merchants/LOC GET Merchant By ID.bru | 15 ++++ .../Merchants/LOC GET Merchants.bru | 11 +++ .../Merchants/LOC POST Merchant.bru | 17 ++++ .../Merchants/LOC PUT Merchant.bru | 18 +++++ bruno/Common Cents/Merchants/folder.bru | 8 ++ common-cents.db | Bin 0 -> 12288 bytes src/app.module.ts | 15 ++-- src/merchants/dto/create-merchant.dto.ts | 4 +- src/merchants/dto/update-merchant.dto.ts | 8 +- src/merchants/entities/merchant.entity.ts | 11 ++- src/merchants/merchant-data.service.ts | 33 ++++++++ src/merchants/merchants.controller.spec.ts | 20 ----- src/merchants/merchants.controller.ts | 73 ++++++++++++++---- src/merchants/merchants.module.ts | 3 +- src/merchants/merchants.service.spec.ts | 18 ----- src/merchants/merchants.service.ts | 29 ++++--- 17 files changed, 214 insertions(+), 80 deletions(-) create mode 100644 bruno/Common Cents/Merchants/LOC DELETE Merchant.bru create mode 100644 bruno/Common Cents/Merchants/LOC GET Merchant By ID.bru create mode 100644 bruno/Common Cents/Merchants/LOC GET Merchants.bru create mode 100644 bruno/Common Cents/Merchants/LOC POST Merchant.bru create mode 100644 bruno/Common Cents/Merchants/LOC PUT Merchant.bru create mode 100644 bruno/Common Cents/Merchants/folder.bru create mode 100644 common-cents.db create mode 100644 src/merchants/merchant-data.service.ts delete mode 100644 src/merchants/merchants.controller.spec.ts delete mode 100644 src/merchants/merchants.service.spec.ts diff --git a/bruno/Common Cents/Merchants/LOC DELETE Merchant.bru b/bruno/Common Cents/Merchants/LOC DELETE Merchant.bru new file mode 100644 index 0000000..cc0158a --- /dev/null +++ b/bruno/Common Cents/Merchants/LOC DELETE Merchant.bru @@ -0,0 +1,11 @@ +meta { + name: LOC DELETE Merchant + type: http + seq: 5 +} + +delete { + url: {{localBaseUrl}}/merchants/cbf30070-9ff7-419f-a567-f7d145be445b + body: none + auth: inherit +} diff --git a/bruno/Common Cents/Merchants/LOC GET Merchant By ID.bru b/bruno/Common Cents/Merchants/LOC GET Merchant By ID.bru new file mode 100644 index 0000000..55caec8 --- /dev/null +++ b/bruno/Common Cents/Merchants/LOC GET Merchant By ID.bru @@ -0,0 +1,15 @@ +meta { + name: LOC GET Merchant By ID + type: http + seq: 2 +} + +get { + url: {{localBaseUrl}}/merchants/{{merchantId}} + body: none + auth: inherit +} + +vars:pre-request { + merchantId: 1d6d2842-b271-489b-bd93-e3ceaee5a139 +} diff --git a/bruno/Common Cents/Merchants/LOC GET Merchants.bru b/bruno/Common Cents/Merchants/LOC GET Merchants.bru new file mode 100644 index 0000000..35da33e --- /dev/null +++ b/bruno/Common Cents/Merchants/LOC GET Merchants.bru @@ -0,0 +1,11 @@ +meta { + name: LOC GET Merchants + type: http + seq: 1 +} + +get { + url: {{localBaseUrl}}/merchants + body: none + auth: inherit +} diff --git a/bruno/Common Cents/Merchants/LOC POST Merchant.bru b/bruno/Common Cents/Merchants/LOC POST Merchant.bru new file mode 100644 index 0000000..e78d086 --- /dev/null +++ b/bruno/Common Cents/Merchants/LOC POST Merchant.bru @@ -0,0 +1,17 @@ +meta { + name: LOC POST Merchant + type: http + seq: 3 +} + +post { + url: {{localBaseUrl}}/merchants + body: json + auth: inherit +} + +body:json { + { + "name": "Walmart" + } +} diff --git a/bruno/Common Cents/Merchants/LOC PUT Merchant.bru b/bruno/Common Cents/Merchants/LOC PUT Merchant.bru new file mode 100644 index 0000000..e91a0e8 --- /dev/null +++ b/bruno/Common Cents/Merchants/LOC PUT Merchant.bru @@ -0,0 +1,18 @@ +meta { + name: LOC PUT Merchant + type: http + seq: 4 +} + +put { + url: {{localBaseUrl}}/merchants + body: json + auth: inherit +} + +body:json { + { + "id": "1d6d2842-b271-489b-bd93-e3ceaee5a139", + "name": "Walmart" + } +} diff --git a/bruno/Common Cents/Merchants/folder.bru b/bruno/Common Cents/Merchants/folder.bru new file mode 100644 index 0000000..caac236 --- /dev/null +++ b/bruno/Common Cents/Merchants/folder.bru @@ -0,0 +1,8 @@ +meta { + name: Merchants + seq: 3 +} + +auth { + mode: inherit +} diff --git a/common-cents.db b/common-cents.db new file mode 100644 index 0000000000000000000000000000000000000000..448549dcbfbdb1db8817c33bc7dac91538a9cf70 GIT binary patch literal 12288 zcmeI%O-sWt7zgmAmH7e^ZysbAdU1l)b?w&m=A1o<+tk@2o<_Q+IM@rTRlNE|Jop9t z7+yX4Q9POo#fvacg7AOfY4S8FA-`MF%Ztt^lRTNF6OnP7Y!FJxA?JjUl1g1=5ma@S zibAz{y(mg#KYdJ8US+}LvJ zk#yAKSdOLojo; + + public constructor(private dataSource: DataSource) { + this.merchants = this.dataSource.getRepository(Merchant); + } + + public async getAllMerchants(): Promise { + return this.merchants.find(); + } + + public async getMerchantById(id: string): Promise { + return await this.merchants.findOneBy({ id }); + } + + public async createMerchant(name: string): Promise { + return await this.merchants.save({ name }); + } + + public async updateMerchant(updateMerchant: UpdateMerchantDto): Promise { + return await this.merchants.save(updateMerchant); + } + + public async deleteMerchant(id: string): Promise { + await this.merchants.delete({ id }); + } +} \ No newline at end of file diff --git a/src/merchants/merchants.controller.spec.ts b/src/merchants/merchants.controller.spec.ts deleted file mode 100644 index aa10fa8..0000000 --- a/src/merchants/merchants.controller.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { MerchantsController } from './merchants.controller'; -import { MerchantsService } from './merchants.service'; - -describe('MerchantsController', () => { - let controller: MerchantsController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [MerchantsController], - providers: [MerchantsService] - }).compile(); - - controller = module.get(MerchantsController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/merchants/merchants.controller.ts b/src/merchants/merchants.controller.ts index 3de2630..339b9c2 100644 --- a/src/merchants/merchants.controller.ts +++ b/src/merchants/merchants.controller.ts @@ -1,34 +1,75 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common'; +import { + Controller, + Get, + Post, + Put, + Delete, + Body, + Param, + HttpCode, + HttpStatus, + NotFoundException, + BadRequestException, + InternalServerErrorException +} from '@nestjs/common'; import { MerchantsService } from './merchants.service'; import { CreateMerchantDto } from './dto/create-merchant.dto'; import { UpdateMerchantDto } from './dto/update-merchant.dto'; +import { Merchant } from './entities/merchant.entity'; @Controller('merchants') export class MerchantsController { - constructor(private readonly merchantsService: MerchantsService) {} - - @Post() - create(@Body() createMerchantDto: CreateMerchantDto) { - return this.merchantsService.create(createMerchantDto); - } + public constructor(private readonly merchantsService: MerchantsService) { } @Get() - findAll() { - return this.merchantsService.findAll(); + @HttpCode(HttpStatus.OK) + public async findAll(): Promise { + return await this.merchantsService.findAll(); } @Get(':id') - findOne(@Param('id') id: string) { - return this.merchantsService.findOne(+id); + @HttpCode(HttpStatus.OK) + public async findOne(@Param('id') id: string): Promise { + if (!id) { + throw new BadRequestException('No ID provided.'); + } + + try { + return await this.merchantsService.findById(id); + } + catch (error) { + throw new NotFoundException(error); + } } - @Patch(':id') - update(@Param('id') id: string, @Body() updateMerchantDto: UpdateMerchantDto) { - return this.merchantsService.update(+id, updateMerchantDto); + @Post() + @HttpCode(HttpStatus.CREATED) + public async create(@Body() newMerchant: CreateMerchantDto): Promise { + if (!newMerchant.name) { + throw new BadRequestException('Merchant name cannot be empty.'); + } + + try { + return await this.merchantsService.create(newMerchant); + } + catch (error) { + throw new InternalServerErrorException(error); + } + } + + @Put() + @HttpCode(HttpStatus.OK) + public async update(@Body() updateMerchant: UpdateMerchantDto) { + if (!updateMerchant.id) { + return new BadRequestException('Merchant ID cannot be empty.'); + } + + return this.merchantsService.update(updateMerchant); } @Delete(':id') - remove(@Param('id') id: string) { - return this.merchantsService.remove(+id); + @HttpCode(HttpStatus.NO_CONTENT) + public async remove(@Param('id') id: string): Promise { + return this.merchantsService.remove(id); } } diff --git a/src/merchants/merchants.module.ts b/src/merchants/merchants.module.ts index c93eb11..9ce6372 100644 --- a/src/merchants/merchants.module.ts +++ b/src/merchants/merchants.module.ts @@ -1,9 +1,10 @@ import { Module } from '@nestjs/common'; import { MerchantsService } from './merchants.service'; import { MerchantsController } from './merchants.controller'; +import { MerchantDataService } from './merchant-data.service'; @Module({ controllers: [MerchantsController], - providers: [MerchantsService] + providers: [MerchantsService, MerchantDataService] }) export class MerchantsModule {} diff --git a/src/merchants/merchants.service.spec.ts b/src/merchants/merchants.service.spec.ts deleted file mode 100644 index 1034ff1..0000000 --- a/src/merchants/merchants.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { MerchantsService } from './merchants.service'; - -describe('MerchantsService', () => { - let service: MerchantsService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [MerchantsService] - }).compile(); - - service = module.get(MerchantsService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/merchants/merchants.service.ts b/src/merchants/merchants.service.ts index 0548f69..c85ef46 100644 --- a/src/merchants/merchants.service.ts +++ b/src/merchants/merchants.service.ts @@ -1,26 +1,35 @@ import { Injectable } from '@nestjs/common'; import { CreateMerchantDto } from './dto/create-merchant.dto'; import { UpdateMerchantDto } from './dto/update-merchant.dto'; +import { MerchantDataService } from './merchant-data.service'; +import { Merchant } from './entities/merchant.entity'; @Injectable() export class MerchantsService { - create(createMerchantDto: CreateMerchantDto) { - return 'This action adds a new merchant'; + public constructor(private merchantDataService: MerchantDataService) { } + + public async findAll(): Promise { + return await this.merchantDataService.getAllMerchants(); } - findAll() { - return `This action returns all merchants`; + public async findById(id: string): Promise { + const merchant = await this.merchantDataService.getMerchantById(id); + if (!merchant) { + throw new Error('Merchant not found.'); + } + + return merchant; } - findOne(id: number) { - return `This action returns a #${id} merchant`; + public async create(newMerchant: CreateMerchantDto): Promise { + return await this.merchantDataService.createMerchant(newMerchant.name); } - update(id: number, updateMerchantDto: UpdateMerchantDto) { - return `This action updates a #${id} merchant`; + public async update(updateMerchant: UpdateMerchantDto): Promise { + return await this.merchantDataService.updateMerchant(updateMerchant); } - remove(id: number) { - return `This action removes a #${id} merchant`; + public async remove(id: string): Promise { + await this.merchantDataService.deleteMerchant(id); } } -- 2.47.3 From c90276982fd6b39fff5e10c9b0b12acde988edb9 Mon Sep 17 00:00:00 2001 From: Joe Arndt Date: Sun, 8 Feb 2026 16:17:17 -0600 Subject: [PATCH 4/8] added tags resource --- src/app.module.ts | 19 ++++--- src/merchants/merchant-data.service.ts | 14 ++--- src/merchants/merchants.controller.ts | 16 +++--- src/merchants/merchants.module.ts | 2 +- src/merchants/merchants.service.ts | 14 ++--- src/tags/dto/create-tag.dto.ts | 3 ++ src/tags/dto/update-tag.dto.ts | 4 ++ src/tags/entities/tag.entity.ts | 10 ++++ src/tags/tag-data.service.ts | 33 ++++++++++++ src/tags/tags.controller.ts | 75 ++++++++++++++++++++++++++ src/tags/tags.module.ts | 10 ++++ src/tags/tags.service.ts | 35 ++++++++++++ 12 files changed, 205 insertions(+), 30 deletions(-) create mode 100644 src/tags/dto/create-tag.dto.ts create mode 100644 src/tags/dto/update-tag.dto.ts create mode 100644 src/tags/entities/tag.entity.ts create mode 100644 src/tags/tag-data.service.ts create mode 100644 src/tags/tags.controller.ts create mode 100644 src/tags/tags.module.ts create mode 100644 src/tags/tags.service.ts diff --git a/src/app.module.ts b/src/app.module.ts index 8f4b4f2..99710f3 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,18 +1,23 @@ import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { MerchantsModule } from './merchants/merchants.module'; -import { TypeOrmModule } from '@nestjs/typeorm'; +import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm'; import { Merchant } from './merchants/entities/merchant.entity'; +import { TagsModule } from './tags/tags.module'; +import { Tag } from './tags/entities/tag.entity'; + +const sqliteConfig: TypeOrmModuleOptions = { + synchronize: true, // typeorm -h (schema:sync) + type: 'sqlite', + database: 'common-cents.db', + entities: [Merchant, Tag] +} @Module({ imports: [ + TypeOrmModule.forRoot(sqliteConfig), MerchantsModule, - TypeOrmModule.forRoot({ - type: 'sqlite', - database: 'common-cents.db', - entities: [Merchant], - // synchronize: true // schema:sync - }) + TagsModule ], controllers: [AppController], providers: [] diff --git a/src/merchants/merchant-data.service.ts b/src/merchants/merchant-data.service.ts index ad61ae0..efbb956 100644 --- a/src/merchants/merchant-data.service.ts +++ b/src/merchants/merchant-data.service.ts @@ -11,23 +11,23 @@ export class MerchantDataService { this.merchants = this.dataSource.getRepository(Merchant); } - public async getAllMerchants(): Promise { - return this.merchants.find(); + public async getAll(): Promise { + return await this.merchants.find(); } - public async getMerchantById(id: string): Promise { + public async getById(id: string): Promise { return await this.merchants.findOneBy({ id }); } - public async createMerchant(name: string): Promise { + public async create(name: string): Promise { return await this.merchants.save({ name }); } - public async updateMerchant(updateMerchant: UpdateMerchantDto): Promise { - return await this.merchants.save(updateMerchant); + public async update(merchant: UpdateMerchantDto): Promise { + return await this.merchants.save(merchant); } - public async deleteMerchant(id: string): Promise { + public async delete(id: string): Promise { await this.merchants.delete({ id }); } } \ No newline at end of file diff --git a/src/merchants/merchants.controller.ts b/src/merchants/merchants.controller.ts index 339b9c2..97a7ac3 100644 --- a/src/merchants/merchants.controller.ts +++ b/src/merchants/merchants.controller.ts @@ -44,13 +44,13 @@ export class MerchantsController { @Post() @HttpCode(HttpStatus.CREATED) - public async create(@Body() newMerchant: CreateMerchantDto): Promise { - if (!newMerchant.name) { + public async create(@Body() merchant: CreateMerchantDto): Promise { + if (!merchant.name) { throw new BadRequestException('Merchant name cannot be empty.'); } try { - return await this.merchantsService.create(newMerchant); + return await this.merchantsService.create(merchant); } catch (error) { throw new InternalServerErrorException(error); @@ -59,17 +59,17 @@ export class MerchantsController { @Put() @HttpCode(HttpStatus.OK) - public async update(@Body() updateMerchant: UpdateMerchantDto) { - if (!updateMerchant.id) { - return new BadRequestException('Merchant ID cannot be empty.'); + public async update(@Body() merchant: UpdateMerchantDto): Promise { + if (!merchant.id) { + throw new BadRequestException('Merchant ID cannot be empty.'); } - return this.merchantsService.update(updateMerchant); + return await this.merchantsService.update(merchant); } @Delete(':id') @HttpCode(HttpStatus.NO_CONTENT) public async remove(@Param('id') id: string): Promise { - return this.merchantsService.remove(id); + return await this.merchantsService.remove(id); } } diff --git a/src/merchants/merchants.module.ts b/src/merchants/merchants.module.ts index 9ce6372..ffb8ca0 100644 --- a/src/merchants/merchants.module.ts +++ b/src/merchants/merchants.module.ts @@ -7,4 +7,4 @@ import { MerchantDataService } from './merchant-data.service'; controllers: [MerchantsController], providers: [MerchantsService, MerchantDataService] }) -export class MerchantsModule {} +export class MerchantsModule { } diff --git a/src/merchants/merchants.service.ts b/src/merchants/merchants.service.ts index c85ef46..ef98690 100644 --- a/src/merchants/merchants.service.ts +++ b/src/merchants/merchants.service.ts @@ -9,11 +9,11 @@ export class MerchantsService { public constructor(private merchantDataService: MerchantDataService) { } public async findAll(): Promise { - return await this.merchantDataService.getAllMerchants(); + return await this.merchantDataService.getAll(); } public async findById(id: string): Promise { - const merchant = await this.merchantDataService.getMerchantById(id); + const merchant = await this.merchantDataService.getById(id); if (!merchant) { throw new Error('Merchant not found.'); } @@ -21,15 +21,15 @@ export class MerchantsService { return merchant; } - public async create(newMerchant: CreateMerchantDto): Promise { - return await this.merchantDataService.createMerchant(newMerchant.name); + public async create(merchant: CreateMerchantDto): Promise { + return await this.merchantDataService.create(merchant.name); } - public async update(updateMerchant: UpdateMerchantDto): Promise { - return await this.merchantDataService.updateMerchant(updateMerchant); + public async update(merchant: UpdateMerchantDto): Promise { + return await this.merchantDataService.update(merchant); } public async remove(id: string): Promise { - await this.merchantDataService.deleteMerchant(id); + await this.merchantDataService.delete(id); } } diff --git a/src/tags/dto/create-tag.dto.ts b/src/tags/dto/create-tag.dto.ts new file mode 100644 index 0000000..8235483 --- /dev/null +++ b/src/tags/dto/create-tag.dto.ts @@ -0,0 +1,3 @@ +export class CreateTagDto { + name: string; +} diff --git a/src/tags/dto/update-tag.dto.ts b/src/tags/dto/update-tag.dto.ts new file mode 100644 index 0000000..ab32e5f --- /dev/null +++ b/src/tags/dto/update-tag.dto.ts @@ -0,0 +1,4 @@ +export class UpdateTagDto { + id: string; + name: string; +} diff --git a/src/tags/entities/tag.entity.ts b/src/tags/entities/tag.entity.ts new file mode 100644 index 0000000..fdf7a2d --- /dev/null +++ b/src/tags/entities/tag.entity.ts @@ -0,0 +1,10 @@ +import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; + +@Entity() +export class Tag { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column() + name: string; +} diff --git a/src/tags/tag-data.service.ts b/src/tags/tag-data.service.ts new file mode 100644 index 0000000..df417c5 --- /dev/null +++ b/src/tags/tag-data.service.ts @@ -0,0 +1,33 @@ +import { Injectable } from '@nestjs/common'; +import { DataSource, Repository } from 'typeorm'; +import { Tag } from './entities/tag.entity'; +import { UpdateTagDto } from './dto/update-tag.dto'; + +@Injectable() +export class TagDataService { + private tags: Repository; + + public constructor(private dataSource: DataSource) { + this.tags = this.dataSource.getRepository(Tag); + } + + public async getAll(): Promise { + return await this.tags.find(); + } + + public async getById(id: string): Promise { + return await this.tags.findOneBy({ id }); + } + + public async create(name: string): Promise { + return await this.tags.save({ name }); + } + + public async update(tag: UpdateTagDto): Promise { + return await this.tags.save(tag); + } + + public async delete(id: string): Promise { + await this.tags.delete({ id }); + } +} diff --git a/src/tags/tags.controller.ts b/src/tags/tags.controller.ts new file mode 100644 index 0000000..d27412e --- /dev/null +++ b/src/tags/tags.controller.ts @@ -0,0 +1,75 @@ +import { + Controller, + Get, + Post, + Put, + Delete, + Body, + Param, + HttpCode, + HttpStatus, + BadRequestException, + NotFoundException, + InternalServerErrorException +} from '@nestjs/common'; +import { TagsService } from './tags.service'; +import { CreateTagDto } from './dto/create-tag.dto'; +import { UpdateTagDto } from './dto/update-tag.dto'; +import { Tag } from './entities/tag.entity'; + +@Controller('tags') +export class TagsController { + public constructor(private readonly tagsService: TagsService) { } + + @Get() + @HttpCode(HttpStatus.OK) + public async findAll(): Promise { + return await this.tagsService.findAll(); + } + + @Get(':id') + @HttpCode(HttpStatus.OK) + public async findOne(@Param('id') id: string): Promise { + if (!id) { + throw new BadRequestException('No ID provided.'); + } + + try { + return await this.tagsService.findById(id); + } + catch (error) { + throw new NotFoundException(error); + } + } + + @Post() + @HttpCode(HttpStatus.CREATED) + public async create(@Body() tag: CreateTagDto): Promise { + if (!tag.name) { + throw new BadRequestException('Tag name cannot be empty.'); + } + + try { + return this.tagsService.create(tag); + } + catch (error) { + throw new InternalServerErrorException(error); + } + } + + @Put() + @HttpCode(HttpStatus.OK) + public async update(@Body() tag: UpdateTagDto): Promise { + if (!tag.id) { + throw new BadRequestException('Tag ID cannot be empty.'); + } + + return await this.tagsService.update(tag); + } + + @Delete(':id') + @HttpCode(HttpStatus.NO_CONTENT) + public async remove(@Param('id') id: string): Promise { + return await this.tagsService.remove(id); + } +} diff --git a/src/tags/tags.module.ts b/src/tags/tags.module.ts new file mode 100644 index 0000000..5f4c074 --- /dev/null +++ b/src/tags/tags.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { TagsService } from './tags.service'; +import { TagsController } from './tags.controller'; +import { TagDataService } from './tag-data.service'; + +@Module({ + controllers: [TagsController], + providers: [TagsService, TagDataService] +}) +export class TagsModule { } diff --git a/src/tags/tags.service.ts b/src/tags/tags.service.ts new file mode 100644 index 0000000..ab5ff92 --- /dev/null +++ b/src/tags/tags.service.ts @@ -0,0 +1,35 @@ +import { Injectable } from '@nestjs/common'; +import { CreateTagDto } from './dto/create-tag.dto'; +import { UpdateTagDto } from './dto/update-tag.dto'; +import { TagDataService } from './tag-data.service'; +import { Tag } from './entities/tag.entity'; + +@Injectable() +export class TagsService { + public constructor(private tagDataService: TagDataService) { } + + public async findAll(): Promise { + return await this.tagDataService.getAll(); + } + + public async findById(id: string): Promise { + const tag = await this.tagDataService.getById(id); + if (!tag) { + throw new Error('No tag found'); + } + + return tag; + } + + public async create(tag: CreateTagDto): Promise { + return await this.tagDataService.create(tag.name); + } + + public async update(tag: UpdateTagDto): Promise { + return await this.tagDataService.update(tag); + } + + public async remove(id: string): Promise { + await this.tagDataService.delete(id); + } +} -- 2.47.3 From 50e2b6e2b7c306e88a6b5e637dd9dbe870aded78 Mon Sep 17 00:00:00 2001 From: Joe Arndt Date: Sun, 8 Feb 2026 16:43:22 -0600 Subject: [PATCH 5/8] added categories resource --- src/app.module.ts | 7 +- src/categories/categories.controller.ts | 75 ++++++++++++++++++++++ src/categories/categories.module.ts | 10 +++ src/categories/categories.service.ts | 35 ++++++++++ src/categories/category-data.service.ts | 33 ++++++++++ src/categories/dto/create-category.dto.ts | 3 + src/categories/dto/update-category.dto.ts | 4 ++ src/categories/entities/category.entity.ts | 1 + 8 files changed, 166 insertions(+), 2 deletions(-) create mode 100644 src/categories/categories.controller.ts create mode 100644 src/categories/categories.module.ts create mode 100644 src/categories/categories.service.ts create mode 100644 src/categories/category-data.service.ts create mode 100644 src/categories/dto/create-category.dto.ts create mode 100644 src/categories/dto/update-category.dto.ts create mode 100644 src/categories/entities/category.entity.ts diff --git a/src/app.module.ts b/src/app.module.ts index 99710f3..8cdb8f8 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -5,19 +5,22 @@ import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm'; import { Merchant } from './merchants/entities/merchant.entity'; import { TagsModule } from './tags/tags.module'; import { Tag } from './tags/entities/tag.entity'; +import { CategoriesModule } from './categories/categories.module'; +import { Category } from './categories/entities/category.entity'; const sqliteConfig: TypeOrmModuleOptions = { synchronize: true, // typeorm -h (schema:sync) type: 'sqlite', database: 'common-cents.db', - entities: [Merchant, Tag] + entities: [Merchant, Tag, Category] } @Module({ imports: [ TypeOrmModule.forRoot(sqliteConfig), MerchantsModule, - TagsModule + TagsModule, + CategoriesModule ], controllers: [AppController], providers: [] diff --git a/src/categories/categories.controller.ts b/src/categories/categories.controller.ts new file mode 100644 index 0000000..2e56113 --- /dev/null +++ b/src/categories/categories.controller.ts @@ -0,0 +1,75 @@ +import { + Controller, + Get, + Post, + Put, + Delete, + Body, + Param, + HttpCode, + HttpStatus, + BadRequestException, + NotFoundException, + InternalServerErrorException +} from '@nestjs/common'; +import { CategoriesService } from './categories.service'; +import { CreateCategoryDto } from './dto/create-category.dto'; +import { UpdateCategoryDto } from './dto/update-category.dto'; +import { Category } from './entities/category.entity'; + +@Controller('categories') +export class CategoriesController { + constructor(private readonly categoriesService: CategoriesService) { } + + @Get() + @HttpCode(HttpStatus.OK) + public async findAll(): Promise { + return await this.categoriesService.findAll(); + } + + @Get(':id') + @HttpCode(HttpStatus.OK) + public async findOne(@Param('id') id: string): Promise { + if (!id) { + throw new BadRequestException('No ID provided.'); + } + + try { + return await this.categoriesService.findById(id); + } + catch (error) { + throw new NotFoundException(error); + } + } + + @Post() + @HttpCode(HttpStatus.CREATED) + public async create(@Body() category: CreateCategoryDto): Promise { + if (!category.name) { + throw new BadRequestException('Category name cannot be empty.'); + } + + try { + return this.categoriesService.create(category); + } + catch (error) { + throw new InternalServerErrorException(error); + } + } + + @Put() + @HttpCode(HttpStatus.OK) + public async update(@Body() category: UpdateCategoryDto): Promise { + if (!category.id) { + throw new BadRequestException('Category ID cannot be empty.'); + } + + return await this.categoriesService.update(category); + } + + @Delete(':id') + @HttpCode(HttpStatus.NO_CONTENT) + public async remove(@Param('id') id: string): Promise { + return await this.categoriesService.remove(id); + } +} diff --git a/src/categories/categories.module.ts b/src/categories/categories.module.ts new file mode 100644 index 0000000..13c65db --- /dev/null +++ b/src/categories/categories.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { CategoriesService } from './categories.service'; +import { CategoriesController } from './categories.controller'; +import { CategoryDataService } from './category-data.service'; + +@Module({ + controllers: [CategoriesController], + providers: [CategoriesService, CategoryDataService] +}) +export class CategoriesModule { } diff --git a/src/categories/categories.service.ts b/src/categories/categories.service.ts new file mode 100644 index 0000000..8753b43 --- /dev/null +++ b/src/categories/categories.service.ts @@ -0,0 +1,35 @@ +import { Injectable } from '@nestjs/common'; +import { CreateCategoryDto } from './dto/create-category.dto'; +import { UpdateCategoryDto } from './dto/update-category.dto'; +import { CategoryDataService } from './category-data.service'; +import { Category } from './entities/category.entity'; + +@Injectable() +export class CategoriesService { + public constructor(private categoryDataService: CategoryDataService) { } + + public async findAll(): Promise { + return await this.categoryDataService.getAll(); + } + + public async findById(id: string): Promise { + const category = await this.categoryDataService.getById(id); + if (!category) { + throw new Error('No category found'); + } + + return category; + } + + public async create(category: CreateCategoryDto): Promise { + return await this.categoryDataService.create(category.name); + } + + public async update(category: UpdateCategoryDto): Promise { + return await this.categoryDataService.update(category); + } + + public async remove(id: string): Promise { + await this.categoryDataService.delete(id); + } +} diff --git a/src/categories/category-data.service.ts b/src/categories/category-data.service.ts new file mode 100644 index 0000000..455bac4 --- /dev/null +++ b/src/categories/category-data.service.ts @@ -0,0 +1,33 @@ +import { Injectable } from '@nestjs/common'; +import { DataSource, Repository } from 'typeorm'; +import { Category } from './entities/category.entity'; +import { UpdateCategoryDto } from './dto/update-category.dto'; + +@Injectable() +export class CategoryDataService { + private categories: Repository; + + public constructor(private dataSource: DataSource) { + this.categories = this.dataSource.getRepository(Category); + } + + public async getAll(): Promise { + return await this.categories.find(); + } + + public async getById(id: string): Promise { + return await this.categories.findOneBy({ id }); + } + + public async create(name: string): Promise { + return await this.categories.save({ name }); + } + + public async update(category: UpdateCategoryDto): Promise { + return await this.categories.save(category); + } + + public async delete(id: string): Promise { + await this.categories.delete({ id }); + } +} diff --git a/src/categories/dto/create-category.dto.ts b/src/categories/dto/create-category.dto.ts new file mode 100644 index 0000000..2222672 --- /dev/null +++ b/src/categories/dto/create-category.dto.ts @@ -0,0 +1,3 @@ +export class CreateCategoryDto { + name: string; +} diff --git a/src/categories/dto/update-category.dto.ts b/src/categories/dto/update-category.dto.ts new file mode 100644 index 0000000..6657a69 --- /dev/null +++ b/src/categories/dto/update-category.dto.ts @@ -0,0 +1,4 @@ +export class UpdateCategoryDto { + id: string; + name: string; +} diff --git a/src/categories/entities/category.entity.ts b/src/categories/entities/category.entity.ts new file mode 100644 index 0000000..6f4fd52 --- /dev/null +++ b/src/categories/entities/category.entity.ts @@ -0,0 +1 @@ +export class Category {} -- 2.47.3 From 75990801062095f80c6f7c7c2a3170c1ba41b479 Mon Sep 17 00:00:00 2001 From: Joe Arndt Date: Sun, 8 Feb 2026 17:27:45 -0600 Subject: [PATCH 6/8] added sub-categories resource --- src/app.module.ts | 9 ++- .../dto/create-sub-category.dto.ts | 3 + .../dto/update-sub-category.dto.ts | 4 + .../entities/sub-category.entity.ts | 10 +++ .../sub-categories.controller.ts | 75 +++++++++++++++++++ src/sub-categories/sub-categories.module.ts | 10 +++ src/sub-categories/sub-categories.service.ts | 35 +++++++++ .../sub-category-data.service.ts | 33 ++++++++ 8 files changed, 176 insertions(+), 3 deletions(-) create mode 100644 src/sub-categories/dto/create-sub-category.dto.ts create mode 100644 src/sub-categories/dto/update-sub-category.dto.ts create mode 100644 src/sub-categories/entities/sub-category.entity.ts create mode 100644 src/sub-categories/sub-categories.controller.ts create mode 100644 src/sub-categories/sub-categories.module.ts create mode 100644 src/sub-categories/sub-categories.service.ts create mode 100644 src/sub-categories/sub-category-data.service.ts diff --git a/src/app.module.ts b/src/app.module.ts index 8cdb8f8..fd2edf1 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,18 +1,20 @@ import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; -import { MerchantsModule } from './merchants/merchants.module'; import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm'; +import { MerchantsModule } from './merchants/merchants.module'; import { Merchant } from './merchants/entities/merchant.entity'; import { TagsModule } from './tags/tags.module'; import { Tag } from './tags/entities/tag.entity'; import { CategoriesModule } from './categories/categories.module'; import { Category } from './categories/entities/category.entity'; +import { SubCategoriesModule } from './sub-categories/sub-categories.module'; +import { SubCategory } from './sub-categories/entities/sub-category.entity'; const sqliteConfig: TypeOrmModuleOptions = { synchronize: true, // typeorm -h (schema:sync) type: 'sqlite', database: 'common-cents.db', - entities: [Merchant, Tag, Category] + entities: [Merchant, Tag, Category, SubCategory] } @Module({ @@ -20,7 +22,8 @@ const sqliteConfig: TypeOrmModuleOptions = { TypeOrmModule.forRoot(sqliteConfig), MerchantsModule, TagsModule, - CategoriesModule + CategoriesModule, + SubCategoriesModule ], controllers: [AppController], providers: [] diff --git a/src/sub-categories/dto/create-sub-category.dto.ts b/src/sub-categories/dto/create-sub-category.dto.ts new file mode 100644 index 0000000..3837548 --- /dev/null +++ b/src/sub-categories/dto/create-sub-category.dto.ts @@ -0,0 +1,3 @@ +export class CreateSubCategoryDto { + name: string; +} diff --git a/src/sub-categories/dto/update-sub-category.dto.ts b/src/sub-categories/dto/update-sub-category.dto.ts new file mode 100644 index 0000000..0541922 --- /dev/null +++ b/src/sub-categories/dto/update-sub-category.dto.ts @@ -0,0 +1,4 @@ +export class UpdateSubCategoryDto { + id: string; + name: string; +} diff --git a/src/sub-categories/entities/sub-category.entity.ts b/src/sub-categories/entities/sub-category.entity.ts new file mode 100644 index 0000000..a83bdfe --- /dev/null +++ b/src/sub-categories/entities/sub-category.entity.ts @@ -0,0 +1,10 @@ +import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; + +@Entity() +export class SubCategory { + @PrimaryGeneratedColumn() + id: string; + + @Column() + name: string; +} diff --git a/src/sub-categories/sub-categories.controller.ts b/src/sub-categories/sub-categories.controller.ts new file mode 100644 index 0000000..a39b1e7 --- /dev/null +++ b/src/sub-categories/sub-categories.controller.ts @@ -0,0 +1,75 @@ +import { + Controller, + Get, + Post, + Put, + Delete, + Body, + Param, + HttpCode, + HttpStatus, + BadRequestException, + NotFoundException, + InternalServerErrorException +} from '@nestjs/common'; +import { SubCategoriesService } from './sub-categories.service'; +import { CreateSubCategoryDto } from './dto/create-sub-category.dto'; +import { UpdateSubCategoryDto } from './dto/update-sub-category.dto'; +import { SubCategory } from './entities/sub-category.entity'; + +@Controller('sub-categories') +export class SubCategoriesController { + constructor(private readonly subCategoriesService: SubCategoriesService) { } + + @Get() + @HttpCode(HttpStatus.OK) + public async findAll(): Promise { + return await this.subCategoriesService.findAll(); + } + + @Get(':id') + @HttpCode(HttpStatus.OK) + public async findOne(@Param('id') id: string): Promise { + if (!id) { + throw new BadRequestException('No ID provided.'); + } + + try { + return await this.subCategoriesService.findById(id); + } + catch (error) { + throw new NotFoundException(error); + } + } + + @Post() + @HttpCode(HttpStatus.CREATED) + public async create(@Body() subCategory: CreateSubCategoryDto): Promise { + if (!subCategory.name) { + throw new BadRequestException('Sub-category name cannot be empty.'); + } + + try { + return this.subCategoriesService.create(subCategory); + } + catch (error) { + throw new InternalServerErrorException(error); + } + } + + @Put() + @HttpCode(HttpStatus.OK) + public async update(@Body() subCategory: UpdateSubCategoryDto): Promise { + if (!subCategory.id) { + throw new BadRequestException('Sub-category ID cannot be empty.'); + } + + return await this.subCategoriesService.update(subCategory); + } + + @Delete(':id') + @HttpCode(HttpStatus.NO_CONTENT) + public async remove(@Param('id') id: string): Promise { + return await this.subCategoriesService.remove(id); + } +} diff --git a/src/sub-categories/sub-categories.module.ts b/src/sub-categories/sub-categories.module.ts new file mode 100644 index 0000000..f47230a --- /dev/null +++ b/src/sub-categories/sub-categories.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { SubCategoriesService } from './sub-categories.service'; +import { SubCategoriesController } from './sub-categories.controller'; +import { SubCategoryDataService } from './sub-category-data.service'; + +@Module({ + controllers: [SubCategoriesController], + providers: [SubCategoriesService, SubCategoryDataService] +}) +export class SubCategoriesModule { } diff --git a/src/sub-categories/sub-categories.service.ts b/src/sub-categories/sub-categories.service.ts new file mode 100644 index 0000000..15c35b1 --- /dev/null +++ b/src/sub-categories/sub-categories.service.ts @@ -0,0 +1,35 @@ +import { Injectable } from '@nestjs/common'; +import { CreateSubCategoryDto } from './dto/create-sub-category.dto'; +import { UpdateSubCategoryDto } from './dto/update-sub-category.dto'; +import { SubCategoryDataService } from './sub-category-data.service'; +import { SubCategory } from './entities/sub-category.entity'; + +@Injectable() +export class SubCategoriesService { + public constructor(private subCategoryDataService: SubCategoryDataService) { } + + public async findAll(): Promise { + return await this.subCategoryDataService.getAll(); + } + + public async findById(id: string): Promise { + const subCategory = await this.subCategoryDataService.getById(id); + if (!subCategory) { + throw new Error('No sub-category found'); + } + + return subCategory; + } + + public async create(subCategory: CreateSubCategoryDto): Promise { + return await this.subCategoryDataService.create(subCategory.name); + } + + public async update(subCategory: UpdateSubCategoryDto): Promise { + return await this.subCategoryDataService.update(subCategory); + } + + public async remove(id: string): Promise { + await this.subCategoryDataService.delete(id); + } +} diff --git a/src/sub-categories/sub-category-data.service.ts b/src/sub-categories/sub-category-data.service.ts new file mode 100644 index 0000000..3d57e66 --- /dev/null +++ b/src/sub-categories/sub-category-data.service.ts @@ -0,0 +1,33 @@ +import { Injectable } from '@nestjs/common'; +import { DataSource, Repository } from 'typeorm'; +import { SubCategory } from './entities/sub-category.entity'; +import { UpdateSubCategoryDto } from './dto/update-sub-category.dto'; + +@Injectable() +export class SubCategoryDataService { + private subCategories: Repository; + + public constructor(private dataSource: DataSource) { + this.subCategories = this.dataSource.getRepository(SubCategory); + } + + public async getAll(): Promise { + return await this.subCategories.find(); + } + + public async getById(id: string): Promise { + return await this.subCategories.findOneBy({ id }); + } + + public async create(name: string): Promise { + return await this.subCategories.save({ name }); + } + + public async update(subCategory: UpdateSubCategoryDto): Promise { + return await this.subCategories.save(subCategory); + } + + public async delete(id: string): Promise { + await this.subCategories.delete({ id }); + } +} -- 2.47.3 From c211a8a199f2b11b6546a478bcb8038d4ee3aa2b Mon Sep 17 00:00:00 2001 From: Joe Arndt Date: Sun, 8 Feb 2026 17:55:41 -0600 Subject: [PATCH 7/8] added bruno files and corrected found issues --- .../Categories/LOC DELETE Category.bru | 15 +++++++++++++++ .../Categories/LOC GET Categories.bru | 11 +++++++++++ .../Categories/LOC GET Category By ID.bru | 15 +++++++++++++++ .../Categories/LOC POST Category.bru | 17 +++++++++++++++++ .../Categories/LOC PUT Category.bru | 18 ++++++++++++++++++ bruno/Common Cents/Categories/folder.bru | 11 +++++++++++ bruno/Common Cents/Expenses/folder.bru | 1 + .../Merchants/LOC DELETE Merchant.bru | 6 +++++- .../Merchants/LOC GET Merchant By ID.bru | 4 ++-- .../Merchants/LOC GET Merchants.bru | 2 +- .../Merchants/LOC POST Merchant.bru | 4 ++-- .../Merchants/LOC PUT Merchant.bru | 4 ++-- bruno/Common Cents/Merchants/folder.bru | 5 ++++- .../LOC DELETE Sub-category.bru | 15 +++++++++++++++ .../Sub-categories/LOC GET Sub-categories.bru | 11 +++++++++++ .../LOC GET Sub-category By ID.bru | 15 +++++++++++++++ .../Sub-categories/LOC POST Sub-category.bru | 17 +++++++++++++++++ .../Sub-categories/LOC PUT Sub-category.bru | 18 ++++++++++++++++++ bruno/Common Cents/Sub-categories/folder.bru | 11 +++++++++++ bruno/Common Cents/Tags/LOC DELETE Tag.bru | 15 +++++++++++++++ bruno/Common Cents/Tags/LOC GET Tag By ID.bru | 15 +++++++++++++++ bruno/Common Cents/Tags/LOC GET Tags.bru | 11 +++++++++++ bruno/Common Cents/Tags/LOC POST Tag.bru | 17 +++++++++++++++++ bruno/Common Cents/Tags/LOC PUT Tag.bru | 18 ++++++++++++++++++ bruno/Common Cents/Tags/folder.bru | 11 +++++++++++ common-cents.db | Bin 12288 -> 45056 bytes src/categories/categories.controller.ts | 2 +- src/categories/entities/category.entity.ts | 11 ++++++++++- .../entities/sub-category.entity.ts | 2 +- .../sub-categories.controller.ts | 2 +- src/tags/tags.controller.ts | 2 +- 31 files changed, 292 insertions(+), 14 deletions(-) create mode 100644 bruno/Common Cents/Categories/LOC DELETE Category.bru create mode 100644 bruno/Common Cents/Categories/LOC GET Categories.bru create mode 100644 bruno/Common Cents/Categories/LOC GET Category By ID.bru create mode 100644 bruno/Common Cents/Categories/LOC POST Category.bru create mode 100644 bruno/Common Cents/Categories/LOC PUT Category.bru create mode 100644 bruno/Common Cents/Categories/folder.bru create mode 100644 bruno/Common Cents/Sub-categories/LOC DELETE Sub-category.bru create mode 100644 bruno/Common Cents/Sub-categories/LOC GET Sub-categories.bru create mode 100644 bruno/Common Cents/Sub-categories/LOC GET Sub-category By ID.bru create mode 100644 bruno/Common Cents/Sub-categories/LOC POST Sub-category.bru create mode 100644 bruno/Common Cents/Sub-categories/LOC PUT Sub-category.bru create mode 100644 bruno/Common Cents/Sub-categories/folder.bru create mode 100644 bruno/Common Cents/Tags/LOC DELETE Tag.bru create mode 100644 bruno/Common Cents/Tags/LOC GET Tag By ID.bru create mode 100644 bruno/Common Cents/Tags/LOC GET Tags.bru create mode 100644 bruno/Common Cents/Tags/LOC POST Tag.bru create mode 100644 bruno/Common Cents/Tags/LOC PUT Tag.bru create mode 100644 bruno/Common Cents/Tags/folder.bru diff --git a/bruno/Common Cents/Categories/LOC DELETE Category.bru b/bruno/Common Cents/Categories/LOC DELETE Category.bru new file mode 100644 index 0000000..9f4a425 --- /dev/null +++ b/bruno/Common Cents/Categories/LOC DELETE Category.bru @@ -0,0 +1,15 @@ +meta { + name: LOC DELETE Category + type: http + seq: 5 +} + +delete { + url: {{localBaseUrl}}/{{resourcePath}}/{{resourceId}} + body: none + auth: inherit +} + +vars:pre-request { + resourceId: cbf30070-9ff7-419f-a567-f7d145be445b +} diff --git a/bruno/Common Cents/Categories/LOC GET Categories.bru b/bruno/Common Cents/Categories/LOC GET Categories.bru new file mode 100644 index 0000000..8d46826 --- /dev/null +++ b/bruno/Common Cents/Categories/LOC GET Categories.bru @@ -0,0 +1,11 @@ +meta { + name: LOC GET Categories + type: http + seq: 1 +} + +get { + url: {{localBaseUrl}}/{{resourcePath}} + body: none + auth: inherit +} diff --git a/bruno/Common Cents/Categories/LOC GET Category By ID.bru b/bruno/Common Cents/Categories/LOC GET Category By ID.bru new file mode 100644 index 0000000..76e9ed0 --- /dev/null +++ b/bruno/Common Cents/Categories/LOC GET Category By ID.bru @@ -0,0 +1,15 @@ +meta { + name: LOC GET Category By ID + type: http + seq: 2 +} + +get { + url: {{localBaseUrl}}/{{resourcePath}}/{{resourceId}} + body: none + auth: inherit +} + +vars:pre-request { + resourceId: 1d6d2842-b271-489b-bd93-e3ceaee5a139 +} diff --git a/bruno/Common Cents/Categories/LOC POST Category.bru b/bruno/Common Cents/Categories/LOC POST Category.bru new file mode 100644 index 0000000..9168b98 --- /dev/null +++ b/bruno/Common Cents/Categories/LOC POST Category.bru @@ -0,0 +1,17 @@ +meta { + name: LOC POST Category + type: http + seq: 3 +} + +post { + url: {{localBaseUrl}}/{{resourcePath}} + body: json + auth: inherit +} + +body:json { + { + "name": "Category Three" + } +} diff --git a/bruno/Common Cents/Categories/LOC PUT Category.bru b/bruno/Common Cents/Categories/LOC PUT Category.bru new file mode 100644 index 0000000..f76470f --- /dev/null +++ b/bruno/Common Cents/Categories/LOC PUT Category.bru @@ -0,0 +1,18 @@ +meta { + name: LOC PUT Category + type: http + seq: 4 +} + +put { + url: {{localBaseUrl}}/{{resourcePath}} + body: json + auth: inherit +} + +body:json { + { + "id": "1d6d2842-b271-489b-bd93-e3ceaee5a139", + "name": "Merchant One" + } +} diff --git a/bruno/Common Cents/Categories/folder.bru b/bruno/Common Cents/Categories/folder.bru new file mode 100644 index 0000000..c32401e --- /dev/null +++ b/bruno/Common Cents/Categories/folder.bru @@ -0,0 +1,11 @@ +meta { + name: Categories +} + +auth { + mode: inherit +} + +vars:pre-request { + resourcePath: categories +} diff --git a/bruno/Common Cents/Expenses/folder.bru b/bruno/Common Cents/Expenses/folder.bru index a577d38..9a3fbf0 100644 --- a/bruno/Common Cents/Expenses/folder.bru +++ b/bruno/Common Cents/Expenses/folder.bru @@ -1,3 +1,4 @@ meta { name: Expenses + seq: 2 } diff --git a/bruno/Common Cents/Merchants/LOC DELETE Merchant.bru b/bruno/Common Cents/Merchants/LOC DELETE Merchant.bru index cc0158a..2ae38e1 100644 --- a/bruno/Common Cents/Merchants/LOC DELETE Merchant.bru +++ b/bruno/Common Cents/Merchants/LOC DELETE Merchant.bru @@ -5,7 +5,11 @@ meta { } delete { - url: {{localBaseUrl}}/merchants/cbf30070-9ff7-419f-a567-f7d145be445b + url: {{localBaseUrl}}/{{resourcePath}}/{{resourceId}} body: none auth: inherit } + +vars:pre-request { + resourceId: cbf30070-9ff7-419f-a567-f7d145be445b +} diff --git a/bruno/Common Cents/Merchants/LOC GET Merchant By ID.bru b/bruno/Common Cents/Merchants/LOC GET Merchant By ID.bru index 55caec8..16281af 100644 --- a/bruno/Common Cents/Merchants/LOC GET Merchant By ID.bru +++ b/bruno/Common Cents/Merchants/LOC GET Merchant By ID.bru @@ -5,11 +5,11 @@ meta { } get { - url: {{localBaseUrl}}/merchants/{{merchantId}} + url: {{localBaseUrl}}/{{resourcePath}}/{{resourceId}} body: none auth: inherit } vars:pre-request { - merchantId: 1d6d2842-b271-489b-bd93-e3ceaee5a139 + resourceId: 1d6d2842-b271-489b-bd93-e3ceaee5a139 } diff --git a/bruno/Common Cents/Merchants/LOC GET Merchants.bru b/bruno/Common Cents/Merchants/LOC GET Merchants.bru index 35da33e..5ba79b7 100644 --- a/bruno/Common Cents/Merchants/LOC GET Merchants.bru +++ b/bruno/Common Cents/Merchants/LOC GET Merchants.bru @@ -5,7 +5,7 @@ meta { } get { - url: {{localBaseUrl}}/merchants + url: {{localBaseUrl}}/{{resourcePath}} body: none auth: inherit } diff --git a/bruno/Common Cents/Merchants/LOC POST Merchant.bru b/bruno/Common Cents/Merchants/LOC POST Merchant.bru index e78d086..60e5466 100644 --- a/bruno/Common Cents/Merchants/LOC POST Merchant.bru +++ b/bruno/Common Cents/Merchants/LOC POST Merchant.bru @@ -5,13 +5,13 @@ meta { } post { - url: {{localBaseUrl}}/merchants + url: {{localBaseUrl}}/{{resourcePath}} body: json auth: inherit } body:json { { - "name": "Walmart" + "name": "Merchant Three" } } diff --git a/bruno/Common Cents/Merchants/LOC PUT Merchant.bru b/bruno/Common Cents/Merchants/LOC PUT Merchant.bru index e91a0e8..80247ed 100644 --- a/bruno/Common Cents/Merchants/LOC PUT Merchant.bru +++ b/bruno/Common Cents/Merchants/LOC PUT Merchant.bru @@ -5,7 +5,7 @@ meta { } put { - url: {{localBaseUrl}}/merchants + url: {{localBaseUrl}}/{{resourcePath}} body: json auth: inherit } @@ -13,6 +13,6 @@ put { body:json { { "id": "1d6d2842-b271-489b-bd93-e3ceaee5a139", - "name": "Walmart" + "name": "Merchant One" } } diff --git a/bruno/Common Cents/Merchants/folder.bru b/bruno/Common Cents/Merchants/folder.bru index caac236..2ffb460 100644 --- a/bruno/Common Cents/Merchants/folder.bru +++ b/bruno/Common Cents/Merchants/folder.bru @@ -1,8 +1,11 @@ meta { name: Merchants - seq: 3 } auth { mode: inherit } + +vars:pre-request { + resourcePath: merchants +} diff --git a/bruno/Common Cents/Sub-categories/LOC DELETE Sub-category.bru b/bruno/Common Cents/Sub-categories/LOC DELETE Sub-category.bru new file mode 100644 index 0000000..c10a511 --- /dev/null +++ b/bruno/Common Cents/Sub-categories/LOC DELETE Sub-category.bru @@ -0,0 +1,15 @@ +meta { + name: LOC DELETE Sub-category + type: http + seq: 5 +} + +delete { + url: {{localBaseUrl}}/{{resourcePath}}/{{resourceId}} + body: none + auth: inherit +} + +vars:pre-request { + resourceId: cbf30070-9ff7-419f-a567-f7d145be445b +} diff --git a/bruno/Common Cents/Sub-categories/LOC GET Sub-categories.bru b/bruno/Common Cents/Sub-categories/LOC GET Sub-categories.bru new file mode 100644 index 0000000..e2eb171 --- /dev/null +++ b/bruno/Common Cents/Sub-categories/LOC GET Sub-categories.bru @@ -0,0 +1,11 @@ +meta { + name: LOC GET Sub-categories + type: http + seq: 1 +} + +get { + url: {{localBaseUrl}}/{{resourcePath}} + body: none + auth: inherit +} diff --git a/bruno/Common Cents/Sub-categories/LOC GET Sub-category By ID.bru b/bruno/Common Cents/Sub-categories/LOC GET Sub-category By ID.bru new file mode 100644 index 0000000..6703655 --- /dev/null +++ b/bruno/Common Cents/Sub-categories/LOC GET Sub-category By ID.bru @@ -0,0 +1,15 @@ +meta { + name: LOC GET Sub-category By ID + type: http + seq: 2 +} + +get { + url: {{localBaseUrl}}/{{resourcePath}}/{{resourceId}} + body: none + auth: inherit +} + +vars:pre-request { + resourceId: 1d6d2842-b271-489b-bd93-e3ceaee5a139 +} diff --git a/bruno/Common Cents/Sub-categories/LOC POST Sub-category.bru b/bruno/Common Cents/Sub-categories/LOC POST Sub-category.bru new file mode 100644 index 0000000..2d221f4 --- /dev/null +++ b/bruno/Common Cents/Sub-categories/LOC POST Sub-category.bru @@ -0,0 +1,17 @@ +meta { + name: LOC POST Sub-category + type: http + seq: 3 +} + +post { + url: {{localBaseUrl}}/{{resourcePath}} + body: json + auth: inherit +} + +body:json { + { + "name": "Sub-category Three" + } +} diff --git a/bruno/Common Cents/Sub-categories/LOC PUT Sub-category.bru b/bruno/Common Cents/Sub-categories/LOC PUT Sub-category.bru new file mode 100644 index 0000000..060a9b0 --- /dev/null +++ b/bruno/Common Cents/Sub-categories/LOC PUT Sub-category.bru @@ -0,0 +1,18 @@ +meta { + name: LOC PUT Sub-category + type: http + seq: 4 +} + +put { + url: {{localBaseUrl}}/{{resourcePath}} + body: json + auth: inherit +} + +body:json { + { + "id": "1d6d2842-b271-489b-bd93-e3ceaee5a139", + "name": "Merchant One" + } +} diff --git a/bruno/Common Cents/Sub-categories/folder.bru b/bruno/Common Cents/Sub-categories/folder.bru new file mode 100644 index 0000000..a7f720c --- /dev/null +++ b/bruno/Common Cents/Sub-categories/folder.bru @@ -0,0 +1,11 @@ +meta { + name: Sub-categories +} + +auth { + mode: inherit +} + +vars:pre-request { + resourcePath: sub-categories +} diff --git a/bruno/Common Cents/Tags/LOC DELETE Tag.bru b/bruno/Common Cents/Tags/LOC DELETE Tag.bru new file mode 100644 index 0000000..05f60dd --- /dev/null +++ b/bruno/Common Cents/Tags/LOC DELETE Tag.bru @@ -0,0 +1,15 @@ +meta { + name: LOC DELETE Tag + type: http + seq: 5 +} + +delete { + url: {{localBaseUrl}}/{{resourcePath}}/{{resourceId}} + body: none + auth: inherit +} + +vars:pre-request { + resourceId: cbf30070-9ff7-419f-a567-f7d145be445b +} diff --git a/bruno/Common Cents/Tags/LOC GET Tag By ID.bru b/bruno/Common Cents/Tags/LOC GET Tag By ID.bru new file mode 100644 index 0000000..8abbecb --- /dev/null +++ b/bruno/Common Cents/Tags/LOC GET Tag By ID.bru @@ -0,0 +1,15 @@ +meta { + name: LOC GET Tag By ID + type: http + seq: 2 +} + +get { + url: {{localBaseUrl}}/{{resourcePath}}/{{resourceId}} + body: none + auth: inherit +} + +vars:pre-request { + resourceId: 1d6d2842-b271-489b-bd93-e3ceaee5a139 +} diff --git a/bruno/Common Cents/Tags/LOC GET Tags.bru b/bruno/Common Cents/Tags/LOC GET Tags.bru new file mode 100644 index 0000000..dc19694 --- /dev/null +++ b/bruno/Common Cents/Tags/LOC GET Tags.bru @@ -0,0 +1,11 @@ +meta { + name: LOC GET Tags + type: http + seq: 1 +} + +get { + url: {{localBaseUrl}}/{{resourcePath}} + body: none + auth: inherit +} diff --git a/bruno/Common Cents/Tags/LOC POST Tag.bru b/bruno/Common Cents/Tags/LOC POST Tag.bru new file mode 100644 index 0000000..565a854 --- /dev/null +++ b/bruno/Common Cents/Tags/LOC POST Tag.bru @@ -0,0 +1,17 @@ +meta { + name: LOC POST Tag + type: http + seq: 3 +} + +post { + url: {{localBaseUrl}}/{{resourcePath}} + body: json + auth: inherit +} + +body:json { + { + "name": "Tag Three" + } +} diff --git a/bruno/Common Cents/Tags/LOC PUT Tag.bru b/bruno/Common Cents/Tags/LOC PUT Tag.bru new file mode 100644 index 0000000..ac4b434 --- /dev/null +++ b/bruno/Common Cents/Tags/LOC PUT Tag.bru @@ -0,0 +1,18 @@ +meta { + name: LOC PUT Tag + type: http + seq: 4 +} + +put { + url: {{localBaseUrl}}/{{resourcePath}} + body: json + auth: inherit +} + +body:json { + { + "id": "1d6d2842-b271-489b-bd93-e3ceaee5a139", + "name": "Merchant One" + } +} diff --git a/bruno/Common Cents/Tags/folder.bru b/bruno/Common Cents/Tags/folder.bru new file mode 100644 index 0000000..aa07bea --- /dev/null +++ b/bruno/Common Cents/Tags/folder.bru @@ -0,0 +1,11 @@ +meta { + name: Tags +} + +auth { + mode: inherit +} + +vars:pre-request { + resourcePath: tags +} diff --git a/common-cents.db b/common-cents.db index 448549dcbfbdb1db8817c33bc7dac91538a9cf70..656df02793aebdfd293419782f8ff440411bd172 100644 GIT binary patch literal 45056 zcmeI*O;6)S7zc2hP~L-Eu~JkaR4WoHD|T3qXZ)tBQYqrl!oKlx;1tc+V-{&iN(iNU z=z+@~d+fRD7wEO$U{&?fW4}UAz3#D390CdIc2gmc*!(RSJGRF&^RtDNnRzDL&o&QQ z#?2eeL)CJH^`T|k))%g8S=K#Tr)iy_)uwfd)=^r!OZ(WnmV4Gp^XKyHXVzqS#&UL? z*R#Jlto&Dbz5MI!*X5a+H}ARu&O-nK5P$##AOHafKmY=FLEvnDYP^yp_Sv(ukIwf# zZz=u4w9Mf*jize8tR0`|TB=%RztMd8??@eFE`iSYHxz7yHq{Ms_wU{ znLbxd_vzMGk5;$#+>P};_wkb*_wnxL<^#7{SBK{EqV9?N8`EQzT4GxV^~`*CeDs38 z1l1xswz1fMOr5kE#Wj6}t?}NHOdm~*R~8oRv!JM7w?^IVSbrV5hp$)uhm&KKwS~8p zwVOwcclRcrj*V58m+ifxi02hPHb*C>o|-Ek$NLI=<>XQu^Z}*3@4T^`%HpDZ*16~R z^pM-1IuE(mr+5Fx9;hyjSLWvIv*pe^ruJKEf3&Y6RXTD#^u^J!N;3C0bh>?w)1MEH z?B3Vm(6ryrdaJt~=`U3G@byaeaOA&Uhi)D<-rXzFe~|X~daF!p$*Eb+@6M03!2$sY zKmY;|fB*y_009U<00Izz!2cHrN~PWVA@^mNX~_iV9+SE8na-4ESC`iFg)fek>^mKjKWr ziKe^~!Hh_aGA2-5Bo~RE)J?lnzvR5KoIjmkXoCd;5P$##AOHafKmY;|fB*y_0D&75 zSSsz>gR~Nq+7}MeE->2|HpYe#vAdQ&HRLsKMM0uR1apZeDYQHlQV1-5k%qN1z4DeX7 zIMN}Lp(mNvGNA5#lW7qs8OE|maoSj+K>+i9$iqDHCCjPTpRUhx7Hi?LIEivDqde46 zaeZ(9|Eu;0fFXJms44^?009U<00Izz00bZa0SG|g)&<(#`hzqJ6#f5$v<4LY|ARCG zApZZ>A2u?C00bZa0SG_<0uX=z1Rwx`_fMdR|5uU7b)IF6Co*9a%%8A0%~EDm!jnkT z8~{38JD&!#C;s1A&Ut{r=&jMi77i1Rwwb2tWV=5P$##AOL}( z68P9IB@@LDY&dplaiaJ47>3FLm4yHVAOHafKmY;|fB*y_009ULsldhj|A_w|(l-Fr zh5!U0009U<00Izz00bZaf!h;k$Nvu!B~Zlw4-ywp#QzTx3($%G-?p6B&JWJ^?bR4L zK>z{}fB*y_009U<00Izz00i#1KthxJb3gJ@ql{uns$(Y8kS6b!VNNmsA~2cExSvPc zCz_>wasLs`_RsP>$bC=wOzB9_bOBMubi@sdxe2sTbW)oBq^FIDru}Dzdt73-T($;fXo9iA5z`K${u)Z!qxR;9n0kbTPlK26HGQF=jHU KGlz15i~;~)f-?pH diff --git a/src/categories/categories.controller.ts b/src/categories/categories.controller.ts index 2e56113..878f76c 100644 --- a/src/categories/categories.controller.ts +++ b/src/categories/categories.controller.ts @@ -50,7 +50,7 @@ export class CategoriesController { } try { - return this.categoriesService.create(category); + return await this.categoriesService.create(category); } catch (error) { throw new InternalServerErrorException(error); diff --git a/src/categories/entities/category.entity.ts b/src/categories/entities/category.entity.ts index 6f4fd52..25ee60c 100644 --- a/src/categories/entities/category.entity.ts +++ b/src/categories/entities/category.entity.ts @@ -1 +1,10 @@ -export class Category {} +import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; + +@Entity() +export class Category { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column() + name: string; +} diff --git a/src/sub-categories/entities/sub-category.entity.ts b/src/sub-categories/entities/sub-category.entity.ts index a83bdfe..87f85ae 100644 --- a/src/sub-categories/entities/sub-category.entity.ts +++ b/src/sub-categories/entities/sub-category.entity.ts @@ -2,7 +2,7 @@ import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class SubCategory { - @PrimaryGeneratedColumn() + @PrimaryGeneratedColumn('uuid') id: string; @Column() diff --git a/src/sub-categories/sub-categories.controller.ts b/src/sub-categories/sub-categories.controller.ts index a39b1e7..9277087 100644 --- a/src/sub-categories/sub-categories.controller.ts +++ b/src/sub-categories/sub-categories.controller.ts @@ -50,7 +50,7 @@ export class SubCategoriesController { } try { - return this.subCategoriesService.create(subCategory); + return await this.subCategoriesService.create(subCategory); } catch (error) { throw new InternalServerErrorException(error); diff --git a/src/tags/tags.controller.ts b/src/tags/tags.controller.ts index d27412e..d627f8e 100644 --- a/src/tags/tags.controller.ts +++ b/src/tags/tags.controller.ts @@ -50,7 +50,7 @@ export class TagsController { } try { - return this.tagsService.create(tag); + return await this.tagsService.create(tag); } catch (error) { throw new InternalServerErrorException(error); -- 2.47.3 From 2c77bfd4e74296ba9856c3bd63918391bba46965 Mon Sep 17 00:00:00 2001 From: Joe Arndt Date: Sun, 8 Feb 2026 17:58:45 -0600 Subject: [PATCH 8/8] file cleanup --- src/app.controller.spec.ts | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 src/app.controller.spec.ts diff --git a/src/app.controller.spec.ts b/src/app.controller.spec.ts deleted file mode 100644 index 2d34f05..0000000 --- a/src/app.controller.spec.ts +++ /dev/null @@ -1,22 +0,0 @@ -// import { Test, TestingModule } from '@nestjs/testing'; -// import { AppController } from './app.controller'; -// import { AppService } from './app.service'; -// -// describe('AppController', () => { -// let appController: AppController; -// -// beforeEach(async () => { -// const app: TestingModule = await Test.createTestingModule({ -// controllers: [AppController], -// providers: [AppService], -// }).compile(); -// -// appController = app.get(AppController); -// }); -// -// describe('root', () => { -// it('should return "Hello World!"', () => { -// expect(appController.getHello()).toBe('Hello World!'); -// }); -// }); -// }); -- 2.47.3