Merge pull request 'minor v1.2.0' (#3) from develop into main
Reviewed-on: #3
This commit is contained in:
commit
c24c15552d
30 changed files with 854 additions and 329 deletions
571
package-lock.json
generated
571
package-lock.json
generated
|
@ -13,7 +13,7 @@
|
|||
"typeorm": "^0.3.20"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.17.16",
|
||||
"@types/node": "^22.14.1",
|
||||
"typescript": "^5.7.3"
|
||||
}
|
||||
},
|
||||
|
@ -51,13 +51,13 @@
|
|||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.16.tgz",
|
||||
"integrity": "sha512-vOTpLduLkZXePLxHiHsBLp98mHGnl8RptV4YAO3HfKO5UHjDvySGbxKtpYfy8Sx5+WKcgc45qNreJJRVM3L6mw==",
|
||||
"version": "22.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz",
|
||||
"integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~6.19.2"
|
||||
"undici-types": "~6.21.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ansi-regex": {
|
||||
|
@ -73,25 +73,25 @@
|
|||
}
|
||||
},
|
||||
"node_modules/ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"version": "6.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
|
||||
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"color-convert": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
"node": ">=12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/any-promise": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
|
||||
"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
|
||||
"license": "MIT"
|
||||
"node_modules/ansis": {
|
||||
"version": "3.17.0",
|
||||
"resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz",
|
||||
"integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==",
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/app-root-path": {
|
||||
"version": "3.1.0",
|
||||
|
@ -109,9 +109,9 @@
|
|||
"license": "MIT"
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.7.9",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
|
||||
"integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
|
||||
"version": "1.8.4",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz",
|
||||
"integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.6",
|
||||
|
@ -178,137 +178,17 @@
|
|||
"ieee754": "^1.2.1"
|
||||
}
|
||||
},
|
||||
"node_modules/chalk": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
||||
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
||||
"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",
|
||||
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/cli-highlight": {
|
||||
"version": "2.1.11",
|
||||
"resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz",
|
||||
"integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"chalk": "^4.0.0",
|
||||
"highlight.js": "^10.7.1",
|
||||
"mz": "^2.4.0",
|
||||
"parse5": "^5.1.1",
|
||||
"parse5-htmlparser2-tree-adapter": "^6.0.0",
|
||||
"yargs": "^16.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"highlight": "bin/highlight"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.0.0",
|
||||
"npm": ">=5.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/cli-highlight/node_modules/ansi-regex": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/cli-highlight/node_modules/cliui": {
|
||||
"version": "7.0.4",
|
||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
|
||||
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"string-width": "^4.2.0",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"wrap-ansi": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/cli-highlight/node_modules/emoji-regex": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/cli-highlight/node_modules/string-width": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
||||
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"emoji-regex": "^8.0.0",
|
||||
"is-fullwidth-code-point": "^3.0.0",
|
||||
"strip-ansi": "^6.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/cli-highlight/node_modules/strip-ansi": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
||||
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ansi-regex": "^5.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/cli-highlight/node_modules/wrap-ansi": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
||||
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ansi-styles": "^4.0.0",
|
||||
"string-width": "^4.1.0",
|
||||
"strip-ansi": "^6.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/cli-highlight/node_modules/yargs": {
|
||||
"version": "16.2.0",
|
||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
|
||||
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"cliui": "^7.0.2",
|
||||
"escalade": "^3.1.1",
|
||||
"get-caller-file": "^2.0.5",
|
||||
"require-directory": "^2.1.1",
|
||||
"string-width": "^4.2.0",
|
||||
"y18n": "^5.0.5",
|
||||
"yargs-parser": "^20.2.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/cli-highlight/node_modules/yargs-parser": {
|
||||
"version": "20.2.9",
|
||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
|
||||
"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/cliui": {
|
||||
|
@ -334,6 +214,21 @@
|
|||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/cliui/node_modules/ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"color-convert": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/cliui/node_modules/emoji-regex": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
|
@ -460,9 +355,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/dotenv": {
|
||||
"version": "16.4.7",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
|
||||
"integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
|
||||
"version": "16.5.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
|
||||
"integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==",
|
||||
"license": "BSD-2-Clause",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
|
@ -471,6 +366,20 @@
|
|||
"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",
|
||||
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.1",
|
||||
"es-errors": "^1.3.0",
|
||||
"gopd": "^1.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/eastasianwidth": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
||||
|
@ -483,6 +392,51 @@
|
|||
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/es-define-property": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
|
||||
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-errors": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
|
||||
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-object-atoms": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
|
||||
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-set-tostringtag": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
|
||||
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0",
|
||||
"get-intrinsic": "^1.2.6",
|
||||
"has-tostringtag": "^1.0.2",
|
||||
"hasown": "^2.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/escalade": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
|
||||
|
@ -513,12 +467,12 @@
|
|||
}
|
||||
},
|
||||
"node_modules/foreground-child": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
|
||||
"integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
|
||||
"integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"cross-spawn": "^7.0.0",
|
||||
"cross-spawn": "^7.0.6",
|
||||
"signal-exit": "^4.0.1"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -529,19 +483,29 @@
|
|||
}
|
||||
},
|
||||
"node_modules/form-data": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
|
||||
"integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
|
||||
"integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.8",
|
||||
"es-set-tostringtag": "^2.1.0",
|
||||
"mime-types": "^2.1.12"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/function-bind": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
||||
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/get-caller-file": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
||||
|
@ -551,6 +515,43 @@
|
|||
"node": "6.* || 8.* || >= 10.*"
|
||||
}
|
||||
},
|
||||
"node_modules/get-intrinsic": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
|
||||
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.2",
|
||||
"es-define-property": "^1.0.1",
|
||||
"es-errors": "^1.3.0",
|
||||
"es-object-atoms": "^1.1.1",
|
||||
"function-bind": "^1.1.2",
|
||||
"get-proto": "^1.0.1",
|
||||
"gopd": "^1.2.0",
|
||||
"has-symbols": "^1.1.0",
|
||||
"hasown": "^2.0.2",
|
||||
"math-intrinsics": "^1.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/get-proto": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
|
||||
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"dunder-proto": "^1.0.1",
|
||||
"es-object-atoms": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/glob": {
|
||||
"version": "10.4.5",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
|
||||
|
@ -571,22 +572,55 @@
|
|||
"url": "https://github.com/sponsors/isaacs"
|
||||
}
|
||||
},
|
||||
"node_modules/has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||
"node_modules/gopd": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
||||
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/highlight.js": {
|
||||
"version": "10.7.3",
|
||||
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
|
||||
"integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
|
||||
"license": "BSD-3-Clause",
|
||||
"node_modules/has-symbols": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
|
||||
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "*"
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/has-tostringtag": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
|
||||
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"has-symbols": "^1.0.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/hasown": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
||||
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"function-bind": "^1.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/ieee754": {
|
||||
|
@ -651,6 +685,15 @@
|
|||
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/math-intrinsics": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
||||
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/mime-db": {
|
||||
"version": "1.52.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||
|
@ -696,74 +739,18 @@
|
|||
"node": ">=16 || 14 >=14.17"
|
||||
}
|
||||
},
|
||||
"node_modules/mkdirp": {
|
||||
"version": "2.1.6",
|
||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz",
|
||||
"integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"mkdirp": "dist/cjs/src/bin.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/isaacs"
|
||||
}
|
||||
},
|
||||
"node_modules/ms": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/mz": {
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
|
||||
"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"any-promise": "^1.0.0",
|
||||
"object-assign": "^4.0.1",
|
||||
"thenify-all": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/package-json-from-dist": {
|
||||
"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==",
|
||||
"license": "BlueOak-1.0.0"
|
||||
},
|
||||
"node_modules/parse5": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
|
||||
"integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/parse5-htmlparser2-tree-adapter": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
|
||||
"integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"parse5": "^6.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
|
||||
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/path-key": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
|
||||
|
@ -799,7 +786,8 @@
|
|||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz",
|
||||
"integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==",
|
||||
"license": "Apache-2.0"
|
||||
"license": "Apache-2.0",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/require-directory": {
|
||||
"version": "2.1.1",
|
||||
|
@ -876,6 +864,22 @@
|
|||
"url": "https://github.com/sponsors/isaacs"
|
||||
}
|
||||
},
|
||||
"node_modules/sql-highlight": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/sql-highlight/-/sql-highlight-6.0.0.tgz",
|
||||
"integrity": "sha512-+fLpbAbWkQ+d0JEchJT/NrRRXbYRNbG15gFpANx73EwxQB1PRjj+k/OI0GTU0J63g8ikGkJECQp9z8XEJZvPRw==",
|
||||
"funding": [
|
||||
"https://github.com/scriptcoded/sql-highlight?sponsor=1",
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/scriptcoded"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/string-width": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
|
||||
|
@ -972,39 +976,6 @@
|
|||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"has-flag": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/thenify": {
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
|
||||
"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"any-promise": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/thenify-all": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
|
||||
"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"thenify": ">= 3.1.0 < 4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/tslib": {
|
||||
"version": "2.8.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
|
||||
|
@ -1012,26 +983,24 @@
|
|||
"license": "0BSD"
|
||||
},
|
||||
"node_modules/typeorm": {
|
||||
"version": "0.3.20",
|
||||
"resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.20.tgz",
|
||||
"integrity": "sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q==",
|
||||
"version": "0.3.22",
|
||||
"resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.22.tgz",
|
||||
"integrity": "sha512-P/Tsz3UpJ9+K0oryC0twK5PO27zejLYYwMsE8SISfZc1lVHX+ajigiOyWsKbuXpEFMjD9z7UjLzY3+ElVOMMDA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@sqltools/formatter": "^1.2.5",
|
||||
"ansis": "^3.17.0",
|
||||
"app-root-path": "^3.1.0",
|
||||
"buffer": "^6.0.3",
|
||||
"chalk": "^4.1.2",
|
||||
"cli-highlight": "^2.1.11",
|
||||
"dayjs": "^1.11.9",
|
||||
"debug": "^4.3.4",
|
||||
"dotenv": "^16.0.3",
|
||||
"glob": "^10.3.10",
|
||||
"mkdirp": "^2.1.3",
|
||||
"reflect-metadata": "^0.2.1",
|
||||
"dayjs": "^1.11.13",
|
||||
"debug": "^4.4.0",
|
||||
"dotenv": "^16.4.7",
|
||||
"glob": "^10.4.5",
|
||||
"sha.js": "^2.4.11",
|
||||
"tslib": "^2.5.0",
|
||||
"uuid": "^9.0.0",
|
||||
"yargs": "^17.6.2"
|
||||
"sql-highlight": "^6.0.0",
|
||||
"tslib": "^2.8.1",
|
||||
"uuid": "^11.1.0",
|
||||
"yargs": "^17.7.2"
|
||||
},
|
||||
"bin": {
|
||||
"typeorm": "cli.js",
|
||||
|
@ -1045,23 +1014,24 @@
|
|||
"url": "https://opencollective.com/typeorm"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@google-cloud/spanner": "^5.18.0",
|
||||
"@google-cloud/spanner": "^5.18.0 || ^6.0.0 || ^7.0.0",
|
||||
"@sap/hana-client": "^2.12.25",
|
||||
"better-sqlite3": "^7.1.2 || ^8.0.0 || ^9.0.0",
|
||||
"better-sqlite3": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0",
|
||||
"hdb-pool": "^0.1.6",
|
||||
"ioredis": "^5.0.4",
|
||||
"mongodb": "^5.8.0",
|
||||
"mssql": "^9.1.1 || ^10.0.1",
|
||||
"mongodb": "^5.8.0 || ^6.0.0",
|
||||
"mssql": "^9.1.1 || ^10.0.1 || ^11.0.1",
|
||||
"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",
|
||||
"reflect-metadata": "^0.1.14 || ^0.2.0",
|
||||
"sql.js": "^1.4.0",
|
||||
"sqlite3": "^5.0.3",
|
||||
"ts-node": "^10.7.0",
|
||||
"typeorm-aurora-data-api-driver": "^2.0.0"
|
||||
"typeorm-aurora-data-api-driver": "^2.0.0 || ^3.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@google-cloud/spanner": {
|
||||
|
@ -1118,9 +1088,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.7.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
|
||||
"integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
|
||||
"version": "5.8.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
|
||||
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
|
@ -1132,23 +1102,23 @@
|
|||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||
"version": "6.21.0",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
|
||||
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/uuid": {
|
||||
"version": "9.0.1",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
|
||||
"integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
|
||||
"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/bin/uuid"
|
||||
"uuid": "dist/esm/bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/which": {
|
||||
|
@ -1210,6 +1180,21 @@
|
|||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"color-convert": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
|
@ -1242,18 +1227,6 @@
|
|||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/wrap-ansi/node_modules/ansi-styles": {
|
||||
"version": "6.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
|
||||
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/y18n": {
|
||||
"version": "5.0.8",
|
||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
"typeorm": "^0.3.20"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.17.16",
|
||||
"@types/node": "^22.14.1",
|
||||
"typescript": "^5.7.3"
|
||||
},
|
||||
"keywords": [
|
||||
|
|
|
@ -25,8 +25,8 @@ export class WebApiClient extends BaseClient {
|
|||
resolve();
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Error refreshing webapi token:", error);
|
||||
reject("failed token retrieve");
|
||||
console.error("Error refreshing webapi token:", error.response.data);
|
||||
reject(`failed token retrieve: ${error.response.data}`);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
15
src/clients/webpage.client.ts
Normal file
15
src/clients/webpage.client.ts
Normal file
|
@ -0,0 +1,15 @@
|
|||
import { BaseClient } from "./clientBase";
|
||||
|
||||
export class WebPageClient extends BaseClient {
|
||||
constructor({ serverAdress, webapiToken }: { serverAdress: string; webapiToken: string }) {
|
||||
super({ serverAdress, webapiToken });
|
||||
|
||||
this.setAccessToken(webapiToken);
|
||||
}
|
||||
|
||||
public refreshToken(): Promise<void> {
|
||||
return new Promise<void>(async (resolve, reject) => {
|
||||
reject("some error occured by Code 401");
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1,6 +1,11 @@
|
|||
export { WebApiClient } from "./clients/webapi.client";
|
||||
export { WebPageClient } from "./clients/webpage.client";
|
||||
|
||||
export * as AdminRequests from "./requests/admin";
|
||||
export * as AdminModels from "./viewmodels/admin";
|
||||
export * as AdminTypes from "./types/admin";
|
||||
export * as AdminEnums from "./enums/admin";
|
||||
|
||||
export * as WebpageRequests from "./requests/webpage";
|
||||
export * as WebpageModels from "./viewmodels/webpage";
|
||||
export * as WebpageTypes from "./types/webpage";
|
||||
|
|
|
@ -16,8 +16,16 @@ import {
|
|||
} from "../../viewmodels/admin/member.models";
|
||||
import { BaseClient } from "../../clients/clientBase";
|
||||
|
||||
interface GetMemberParams {
|
||||
offset?: number;
|
||||
count?: number;
|
||||
search?: string;
|
||||
noLimit?: boolean;
|
||||
ids?: string[];
|
||||
}
|
||||
|
||||
interface IMemberRequests {
|
||||
getAllMembers: RequestDefinition<void, void, MemberViewModel[]>;
|
||||
getAllMembers: RequestDefinition<GetMemberParams, void, MemberViewModel[]>;
|
||||
getMemberById: RequestDefinition<{ id: string }, void, MemberViewModel>;
|
||||
getMemberStatisticsById: RequestDefinition<{ id: string }, void, MemberStatisticsViewModel>;
|
||||
createMember: RequestDefinition<void, CreateMemberViewModel, string>;
|
||||
|
@ -58,8 +66,9 @@ interface IMemberRequests {
|
|||
|
||||
@ImplementsRequestInterface<IMemberRequests>()
|
||||
export default abstract class MemberRequests {
|
||||
static async getAllMembers({ http }: BaseClient): Promise<AxiosResponse<MemberViewModel[], any>> {
|
||||
return await http.get("/admin/member");
|
||||
static async getAllMembers({ http }: BaseClient, p: RequestData<GetMemberParams, void>): Promise<AxiosResponse<MemberViewModel[], any>> {
|
||||
const queryParams = new URLSearchParams(Object.fromEntries(Object.entries(p.params).filter(([_, v]) => v !== undefined))).toString();
|
||||
return await http.get(`/admin/member?${queryParams}`);
|
||||
}
|
||||
static async getMemberById({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise<AxiosResponse<MemberViewModel, any>> {
|
||||
return await http.get(`/admin/member/${p.params.id}`);
|
||||
|
|
|
@ -4,38 +4,55 @@ import { CreateQueryViewModel, QueryExecuteResult, QueryViewModel, UpdateQueryVi
|
|||
import { DynamicQueryStructure } from "../../types/admin/dynamicQueries";
|
||||
import { BaseClient } from "../../clients/clientBase";
|
||||
|
||||
interface GetQueryParams {
|
||||
offset?: number;
|
||||
count?: number;
|
||||
noLimit?: boolean;
|
||||
}
|
||||
|
||||
interface IQueryRequests {
|
||||
getQueries: RequestDefinition<void, void, QueryViewModel[]>;
|
||||
getQueryById: RequestDefinition<{ id: number }, void, QueryViewModel>;
|
||||
createQuery: RequestDefinition<void, CreateQueryViewModel, number>;
|
||||
updateQuery: RequestDefinition<{ id: number }, UpdateQueryViewModel, void>;
|
||||
deleteQuery: RequestDefinition<{ id: number }, void, void>;
|
||||
getQueryById: RequestDefinition<{ id: string }, void, QueryViewModel>;
|
||||
createQuery: RequestDefinition<void, CreateQueryViewModel, string>;
|
||||
updateQuery: RequestDefinition<{ id: string }, UpdateQueryViewModel, void>;
|
||||
deleteQuery: RequestDefinition<{ id: string }, void, void>;
|
||||
|
||||
executeQuery: RequestDefinition<void, DynamicQueryStructure | string, QueryExecuteResult>;
|
||||
executeQuery: RequestDefinition<GetQueryParams, DynamicQueryStructure | string, QueryExecuteResult>;
|
||||
executeQueryByQueryStoreId: RequestDefinition<GetQueryParams & { storeId: string }, void, QueryExecuteResult>;
|
||||
}
|
||||
|
||||
@ImplementsRequestInterface<IQueryRequests>()
|
||||
export default abstract class QueryDataRequests {
|
||||
static async getQueries({ http }: BaseClient): Promise<AxiosResponse<QueryViewModel[], any>> {
|
||||
return await http.get("/admin/award");
|
||||
return await http.get("/admin/querystore");
|
||||
}
|
||||
static async getQueryById({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise<AxiosResponse<QueryViewModel, any>> {
|
||||
return await http.get(`/admin/award/${p.params.id}`);
|
||||
static async getQueryById({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise<AxiosResponse<QueryViewModel, any>> {
|
||||
return await http.get(`/admin/querystore/${p.params.id}`);
|
||||
}
|
||||
static async createQuery({ http }: BaseClient, p: RequestData<void, CreateQueryViewModel>): Promise<AxiosResponse<number, any>> {
|
||||
return await http.post("/admin/award", p.body);
|
||||
static async createQuery({ http }: BaseClient, p: RequestData<void, CreateQueryViewModel>): Promise<AxiosResponse<string, any>> {
|
||||
return await http.post("/admin/querystore", p.body);
|
||||
}
|
||||
static async updateQuery({ http }: BaseClient, p: RequestData<{ id: number }, UpdateQueryViewModel>): Promise<AxiosResponse<void, any>> {
|
||||
return await http.post(`/admin/award/${p.params.id}`, p.body);
|
||||
static async updateQuery({ http }: BaseClient, p: RequestData<{ id: string }, UpdateQueryViewModel>): Promise<AxiosResponse<void, any>> {
|
||||
return await http.post(`/admin/querystore/${p.params.id}`, p.body);
|
||||
}
|
||||
static async deleteQuery({ http }: BaseClient, p: RequestData<{ id: number }, void>): Promise<AxiosResponse<void, any>> {
|
||||
return await http.post(`/admin/award/${p.params.id}`);
|
||||
static async deleteQuery({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise<AxiosResponse<void, any>> {
|
||||
return await http.post(`/admin/querystore/${p.params.id}`);
|
||||
}
|
||||
|
||||
static async executeQuery(
|
||||
{ http }: BaseClient,
|
||||
p: RequestData<void, DynamicQueryStructure | string>
|
||||
p: RequestData<GetQueryParams, DynamicQueryStructure | string | "member" | "memberByRunningMembership">
|
||||
): Promise<AxiosResponse<QueryExecuteResult, any>> {
|
||||
return await http.post(`/admin/query`, p.body);
|
||||
const queryParams = new URLSearchParams(Object.fromEntries(Object.entries(p.params).filter(([_, v]) => v !== undefined))).toString();
|
||||
return await http.post(`/admin/query?${queryParams}`, p.body);
|
||||
}
|
||||
static async executeQueryByQueryStoreId(
|
||||
{ http }: BaseClient,
|
||||
p: RequestData<GetQueryParams & { storeId: string }, void>
|
||||
): Promise<AxiosResponse<QueryExecuteResult, any>> {
|
||||
const queryParams = new URLSearchParams(
|
||||
Object.fromEntries(Object.entries(p.params).filter(([k, v]) => v !== undefined && k != "storeId"))
|
||||
).toString();
|
||||
return await http.post(`/admin/query/${p.params.storeId}?${queryParams}`);
|
||||
}
|
||||
}
|
||||
|
|
4
src/requests/webpage.ts
Normal file
4
src/requests/webpage.ts
Normal file
|
@ -0,0 +1,4 @@
|
|||
export { default as ArticleRequests } from "./webpage/articleRequests";
|
||||
export { default as EventRequests } from "./webpage/eventRequests";
|
||||
export { default as OperationRequests } from "./webpage/operationRequests";
|
||||
export { default as VehicleRequests } from "./webpage/vehicleRequests";
|
31
src/requests/webpage/articleRequests.ts
Normal file
31
src/requests/webpage/articleRequests.ts
Normal file
|
@ -0,0 +1,31 @@
|
|||
import { AxiosResponse } from "axios";
|
||||
import { RequestDefinition, RequestData, ImplementsRequestInterface } from "../requestBase";
|
||||
import { BaseClient } from "../../clients/clientBase";
|
||||
import { Article } from "../../viewmodels/webpage/collection";
|
||||
|
||||
interface IArticleRequests {
|
||||
getArticles: RequestDefinition<void, void, Article[]>;
|
||||
getArticleById: RequestDefinition<{ id: string }, void, Article>;
|
||||
createArticle: RequestDefinition<void, Partial<Article>, string>;
|
||||
updateArticle: RequestDefinition<{ id: string }, Partial<Article>, void>;
|
||||
deleteArticle: RequestDefinition<{ id: string }, void, void>;
|
||||
}
|
||||
|
||||
@ImplementsRequestInterface<IArticleRequests>()
|
||||
export default abstract class ArticleRequests {
|
||||
static async getArticles({ http }: BaseClient): Promise<AxiosResponse<Article[], any>> {
|
||||
return await http.get("/articles");
|
||||
}
|
||||
static async getArticleById({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise<AxiosResponse<Article, any>> {
|
||||
return await http.get(`/articles/${p.params.id}`);
|
||||
}
|
||||
static async createArticle({ http }: BaseClient, p: RequestData<void, Partial<Article>>): Promise<AxiosResponse<string, any>> {
|
||||
return await http.post("/articles", p.body);
|
||||
}
|
||||
static async updateArticle({ http }: BaseClient, p: RequestData<{ id: string }, Partial<Article>>): Promise<AxiosResponse<void, any>> {
|
||||
return await http.post(`/articles/${p.params.id}`, p.body);
|
||||
}
|
||||
static async deleteArticle({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise<AxiosResponse<void, any>> {
|
||||
return await http.post(`/articles/${p.params.id}`);
|
||||
}
|
||||
}
|
31
src/requests/webpage/eventRequests.ts
Normal file
31
src/requests/webpage/eventRequests.ts
Normal file
|
@ -0,0 +1,31 @@
|
|||
import { AxiosResponse } from "axios";
|
||||
import { RequestDefinition, RequestData, ImplementsRequestInterface } from "../requestBase";
|
||||
import { BaseClient } from "../../clients/clientBase";
|
||||
import { Event } from "../../viewmodels/webpage/collection";
|
||||
|
||||
interface IEventRequests {
|
||||
getEvents: RequestDefinition<void, void, Event[]>;
|
||||
getEventById: RequestDefinition<{ id: string }, void, Event>;
|
||||
createEvent: RequestDefinition<void, Partial<Event>, string>;
|
||||
updateEvent: RequestDefinition<{ id: string }, Partial<Event>, void>;
|
||||
deleteEvent: RequestDefinition<{ id: string }, void, void>;
|
||||
}
|
||||
|
||||
@ImplementsRequestInterface<IEventRequests>()
|
||||
export default abstract class EventRequests {
|
||||
static async getEvents({ http }: BaseClient): Promise<AxiosResponse<Event[], any>> {
|
||||
return await http.get("/events");
|
||||
}
|
||||
static async getEventById({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise<AxiosResponse<Event, any>> {
|
||||
return await http.get(`/events/${p.params.id}`);
|
||||
}
|
||||
static async createEvent({ http }: BaseClient, p: RequestData<void, Partial<Event>>): Promise<AxiosResponse<string, any>> {
|
||||
return await http.post("/events", p.body);
|
||||
}
|
||||
static async updateEvent({ http }: BaseClient, p: RequestData<{ id: string }, Partial<Event>>): Promise<AxiosResponse<void, any>> {
|
||||
return await http.post(`/events/${p.params.id}`, p.body);
|
||||
}
|
||||
static async deleteEvent({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise<AxiosResponse<void, any>> {
|
||||
return await http.post(`/events/${p.params.id}`);
|
||||
}
|
||||
}
|
31
src/requests/webpage/operationRequests.ts
Normal file
31
src/requests/webpage/operationRequests.ts
Normal file
|
@ -0,0 +1,31 @@
|
|||
import { AxiosResponse } from "axios";
|
||||
import { RequestDefinition, RequestData, ImplementsRequestInterface } from "../requestBase";
|
||||
import { BaseClient } from "../../clients/clientBase";
|
||||
import { Operation } from "../../viewmodels/webpage/collection";
|
||||
|
||||
interface IOperationRequests {
|
||||
getOperations: RequestDefinition<void, void, Operation[]>;
|
||||
getOperationById: RequestDefinition<{ id: string }, void, Operation>;
|
||||
createOperation: RequestDefinition<void, Partial<Operation>, string>;
|
||||
updateOperation: RequestDefinition<{ id: string }, Partial<Operation>, void>;
|
||||
deleteOperation: RequestDefinition<{ id: string }, void, void>;
|
||||
}
|
||||
|
||||
@ImplementsRequestInterface<IOperationRequests>()
|
||||
export default abstract class OperationRequests {
|
||||
static async getOperations({ http }: BaseClient): Promise<AxiosResponse<Operation[], any>> {
|
||||
return await http.get("/operations");
|
||||
}
|
||||
static async getOperationById({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise<AxiosResponse<Operation, any>> {
|
||||
return await http.get(`/operations/${p.params.id}`);
|
||||
}
|
||||
static async createOperation({ http }: BaseClient, p: RequestData<void, Partial<Operation>>): Promise<AxiosResponse<string, any>> {
|
||||
return await http.post("/operations", p.body);
|
||||
}
|
||||
static async updateOperation({ http }: BaseClient, p: RequestData<{ id: string }, Partial<Operation>>): Promise<AxiosResponse<void, any>> {
|
||||
return await http.post(`/operations/${p.params.id}`, p.body);
|
||||
}
|
||||
static async deleteOperation({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise<AxiosResponse<void, any>> {
|
||||
return await http.post(`/operations/${p.params.id}`);
|
||||
}
|
||||
}
|
31
src/requests/webpage/vehicleRequests.ts
Normal file
31
src/requests/webpage/vehicleRequests.ts
Normal file
|
@ -0,0 +1,31 @@
|
|||
import { AxiosResponse } from "axios";
|
||||
import { RequestDefinition, RequestData, ImplementsRequestInterface } from "../requestBase";
|
||||
import { BaseClient } from "../../clients/clientBase";
|
||||
import { Vehicle } from "../../viewmodels/webpage/collection";
|
||||
|
||||
interface IVehicleRequests {
|
||||
getVehicles: RequestDefinition<void, void, Vehicle[]>;
|
||||
getVehicleById: RequestDefinition<{ id: string }, void, Vehicle>;
|
||||
createVehicle: RequestDefinition<void, Partial<Vehicle>, string>;
|
||||
updateVehicle: RequestDefinition<{ id: string }, Partial<Vehicle>, void>;
|
||||
deleteVehicle: RequestDefinition<{ id: string }, void, void>;
|
||||
}
|
||||
|
||||
@ImplementsRequestInterface<IVehicleRequests>()
|
||||
export default abstract class VehicleRequests {
|
||||
static async getVehicles({ http }: BaseClient): Promise<AxiosResponse<Vehicle[], any>> {
|
||||
return await http.get("/vehicles");
|
||||
}
|
||||
static async getVehicleById({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise<AxiosResponse<Vehicle, any>> {
|
||||
return await http.get(`/vehicles/${p.params.id}`);
|
||||
}
|
||||
static async createVehicle({ http }: BaseClient, p: RequestData<void, Partial<Vehicle>>): Promise<AxiosResponse<string, any>> {
|
||||
return await http.post("/vehicles", p.body);
|
||||
}
|
||||
static async updateVehicle({ http }: BaseClient, p: RequestData<{ id: string }, Partial<Vehicle>>): Promise<AxiosResponse<void, any>> {
|
||||
return await http.post(`/vehicles/${p.params.id}`, p.body);
|
||||
}
|
||||
static async deleteVehicle({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise<AxiosResponse<void, any>> {
|
||||
return await http.post(`/vehicles/${p.params.id}`);
|
||||
}
|
||||
}
|
|
@ -1,9 +1,10 @@
|
|||
export interface DynamicQueryStructure {
|
||||
id: string;
|
||||
select: string[] | "*";
|
||||
table: string;
|
||||
where?: Array<ConditionStructure>;
|
||||
join?: Array<DynamicQueryStructure & { foreignColumn: string }>;
|
||||
orderBy?: Array<OrderByStructure>;
|
||||
join?: Array<DynamicQueryStructure & JoinStructure>;
|
||||
orderBy?: Array<OrderByStructure>; // only at top level
|
||||
}
|
||||
|
||||
export type ConditionStructure = (
|
||||
|
@ -47,7 +48,12 @@ export type WhereOperation =
|
|||
| "timespanEq"; // Date before x years (YYYY-01-01 <bis> YYYY-12-31)
|
||||
// TODO: age between | age equals | age greater | age smaller
|
||||
|
||||
export type JoinStructure = { foreignColumn: string; type: "defined" } | { condition: string; type: "custom" };
|
||||
|
||||
export type OrderByStructure = {
|
||||
id: string;
|
||||
depth: number;
|
||||
table: string;
|
||||
column: string;
|
||||
order: OrderByType;
|
||||
};
|
||||
|
@ -59,6 +65,7 @@ export type QueryResult = {
|
|||
};
|
||||
|
||||
export const exampleQuery: DynamicQueryStructure = {
|
||||
id: "1234",
|
||||
select: ["firstname", "lastname"],
|
||||
table: "member",
|
||||
where: [
|
||||
|
@ -92,19 +99,25 @@ export const exampleQuery: DynamicQueryStructure = {
|
|||
],
|
||||
join: [
|
||||
{
|
||||
id: "5678",
|
||||
select: "*",
|
||||
table: "communication",
|
||||
foreignColumn: "sendNewsletter",
|
||||
type: "defined",
|
||||
},
|
||||
{
|
||||
id: "91011",
|
||||
select: "*",
|
||||
table: "membership",
|
||||
foreignColumn: "memberships",
|
||||
type: "defined",
|
||||
join: [
|
||||
{
|
||||
id: "121314",
|
||||
select: "*",
|
||||
table: "membership_status",
|
||||
foreignColumn: "status",
|
||||
type: "defined",
|
||||
where: [
|
||||
{
|
||||
structureType: "condition",
|
||||
|
@ -120,10 +133,16 @@ export const exampleQuery: DynamicQueryStructure = {
|
|||
],
|
||||
orderBy: [
|
||||
{
|
||||
id: "1234",
|
||||
depth: 0,
|
||||
table: "member",
|
||||
column: "firstname",
|
||||
order: "ASC",
|
||||
},
|
||||
{
|
||||
id: "1234",
|
||||
depth: 0,
|
||||
table: "member",
|
||||
column: "lastname",
|
||||
order: "ASC",
|
||||
},
|
||||
|
|
|
@ -6,6 +6,7 @@ export type PermissionModule =
|
|||
| "newsletter"
|
||||
| "newsletter_config"
|
||||
| "protocol"
|
||||
| "listprint"
|
||||
| "qualification"
|
||||
| "award"
|
||||
| "executive_position"
|
||||
|
@ -19,7 +20,8 @@ export type PermissionModule =
|
|||
| "query"
|
||||
| "query_store"
|
||||
| "template"
|
||||
| "template_usage";
|
||||
| "template_usage"
|
||||
| "backup";
|
||||
|
||||
export type PermissionType = "read" | "create" | "update" | "delete";
|
||||
|
||||
|
@ -28,6 +30,7 @@ export type PermissionString =
|
|||
| `${PermissionSection}.${PermissionModule}.*` // für alle Berechtigungen in einem Modul
|
||||
| `${PermissionSection}.${PermissionType}` // für spezifische Berechtigungen in einem Abschnitt
|
||||
| `${PermissionSection}.*` // für alle Berechtigungen in einem Abschnitt
|
||||
| `additional.${string}.${string}` // additional
|
||||
| "*"; // für Admin
|
||||
|
||||
export type PermissionObject = {
|
||||
|
@ -36,10 +39,20 @@ export type PermissionObject = {
|
|||
} & { all?: Array<PermissionType> | "*" };
|
||||
} & {
|
||||
admin?: boolean;
|
||||
adminByOwner?: boolean;
|
||||
} & {
|
||||
additional?: { [key: string]: string };
|
||||
};
|
||||
|
||||
export type SectionsAndModulesObject = {
|
||||
[section in PermissionSection]: Array<PermissionModule>;
|
||||
} & {
|
||||
additional?: Array<{
|
||||
key: string;
|
||||
name: string;
|
||||
type: "number" | "string";
|
||||
emptyIfAdmin: boolean;
|
||||
}>;
|
||||
};
|
||||
|
||||
export const permissionSections: Array<PermissionSection> = ["club", "configuration", "management"];
|
||||
|
@ -49,6 +62,7 @@ export const permissionModules: Array<PermissionModule> = [
|
|||
"newsletter",
|
||||
"newsletter_config",
|
||||
"protocol",
|
||||
"listprint",
|
||||
"qualification",
|
||||
"award",
|
||||
"executive_position",
|
||||
|
@ -63,10 +77,11 @@ export const permissionModules: Array<PermissionModule> = [
|
|||
"query_store",
|
||||
"template",
|
||||
"template_usage",
|
||||
"backup",
|
||||
];
|
||||
export const permissionTypes: Array<PermissionType> = ["read", "create", "update", "delete"];
|
||||
export const sectionsAndModules: SectionsAndModulesObject = {
|
||||
club: ["member", "calendar", "newsletter", "protocol", "query"],
|
||||
club: ["member", "calendar", "newsletter", "protocol", "query", "listprint"],
|
||||
configuration: [
|
||||
"qualification",
|
||||
"award",
|
||||
|
@ -80,5 +95,6 @@ export const sectionsAndModules: SectionsAndModulesObject = {
|
|||
"template_usage",
|
||||
"newsletter_config",
|
||||
],
|
||||
management: ["user", "role", "webapi"],
|
||||
management: ["user", "role", "webapi", "backup"],
|
||||
additional: [],
|
||||
};
|
||||
|
|
2
src/types/webpage.ts
Normal file
2
src/types/webpage.ts
Normal file
|
@ -0,0 +1,2 @@
|
|||
export * as ComponentTypes from "./webpage/componentTypes";
|
||||
export * as TextTypes from "./webpage/textTypes";
|
42
src/types/webpage/componentTypes.ts
Normal file
42
src/types/webpage/componentTypes.ts
Normal file
|
@ -0,0 +1,42 @@
|
|||
import { List } from "postcss/lib/list";
|
||||
import {
|
||||
Spacer,
|
||||
Gallery,
|
||||
FullText,
|
||||
FullImage,
|
||||
DualColumnText,
|
||||
ColumnImageText,
|
||||
FileViewer,
|
||||
FileDownload,
|
||||
Embedding,
|
||||
Section,
|
||||
} from "../../viewmodels/webpage/component/dynamic-zone";
|
||||
import { EmphasiseArticle } from "../../viewmodels/webpage/component/shared";
|
||||
|
||||
export type ComponentNames =
|
||||
| "shared.list"
|
||||
| "shared.emphasise-article"
|
||||
| "dynamic-zone.section"
|
||||
| "dynamic-zone.spacer"
|
||||
| "dynamic-zone.gallery"
|
||||
| "dynamic-zone.full-text"
|
||||
| "dynamic-zone.full-image"
|
||||
| "dynamic-zone.dual-column-text"
|
||||
| "dynamic-zone.column-image-text"
|
||||
| "dynamic-zone.file-viewer"
|
||||
| "dynamic-zone.file-download"
|
||||
| "dynamic-zone.embedding";
|
||||
|
||||
export type ComponentTypes =
|
||||
| List
|
||||
| EmphasiseArticle
|
||||
| Section
|
||||
| Spacer
|
||||
| Gallery
|
||||
| FullText
|
||||
| FullImage
|
||||
| DualColumnText
|
||||
| ColumnImageText
|
||||
| FileViewer
|
||||
| FileDownload
|
||||
| Embedding;
|
10
src/types/webpage/textTypes.ts
Normal file
10
src/types/webpage/textTypes.ts
Normal file
|
@ -0,0 +1,10 @@
|
|||
export type TypeField = TextField | { type: "link"; url: string; children: Array<TextField> };
|
||||
|
||||
export type TextField = {
|
||||
type: "text";
|
||||
text: string;
|
||||
strikethrough?: boolean;
|
||||
underline?: boolean;
|
||||
italic?: boolean;
|
||||
bold?: boolean;
|
||||
};
|
|
@ -13,7 +13,7 @@ export interface NewsletterViewModel {
|
|||
newsletterText: string;
|
||||
newsletterSignatur: string;
|
||||
isSent: boolean;
|
||||
recipientsByQueryId?: number | null;
|
||||
recipientsByQueryId?: string | null;
|
||||
recipientsByQuery?: QueryViewModel | null;
|
||||
}
|
||||
export interface CreateNewsletterViewModel {
|
||||
|
@ -25,7 +25,7 @@ export interface SyncNewsletterViewModel {
|
|||
newsletterTitle: string;
|
||||
newsletterText: string;
|
||||
newsletterSignatur: string;
|
||||
recipientsByQueryId?: number;
|
||||
recipientsByQueryId?: string;
|
||||
}
|
||||
|
||||
/** Newsletter Recipient Models */
|
||||
|
|
|
@ -24,12 +24,14 @@ export interface ProtocolAgendaViewModel {
|
|||
id: number;
|
||||
topic: string;
|
||||
context: string;
|
||||
sort: number;
|
||||
protocolId: number;
|
||||
}
|
||||
export interface SyncProtocolAgendaViewModel {
|
||||
id: number;
|
||||
topic: string;
|
||||
context: string;
|
||||
sort: number;
|
||||
}
|
||||
|
||||
/** Protocol Decision Models */
|
||||
|
@ -37,12 +39,14 @@ export interface ProtocolDecisionViewModel {
|
|||
id: number;
|
||||
topic: string;
|
||||
context: string;
|
||||
sort: number;
|
||||
protocolId: number;
|
||||
}
|
||||
export interface SyncProtocolDecisionViewModel {
|
||||
id: number;
|
||||
topic: string;
|
||||
context: string;
|
||||
sort: number;
|
||||
}
|
||||
|
||||
/** Protocol Presence Models */
|
||||
|
@ -50,6 +54,7 @@ export interface ProtocolPresenceViewModel {
|
|||
memberId: string;
|
||||
absent: boolean;
|
||||
excused: boolean;
|
||||
sort: number;
|
||||
protocolId: number;
|
||||
}
|
||||
export interface SyncProtocolPresenceViewModel {
|
||||
|
@ -57,6 +62,7 @@ export interface SyncProtocolPresenceViewModel {
|
|||
memberId: string;
|
||||
absent: boolean;
|
||||
excused: boolean;
|
||||
sort: number;
|
||||
}>;
|
||||
}
|
||||
|
||||
|
@ -68,6 +74,7 @@ export interface ProtocolVotingViewModel {
|
|||
favour: number;
|
||||
abstain: number;
|
||||
against: number;
|
||||
sort: number;
|
||||
protocolId: number;
|
||||
}
|
||||
export interface SyncProtocolVotingViewModel {
|
||||
|
@ -77,6 +84,7 @@ export interface SyncProtocolVotingViewModel {
|
|||
favour: number;
|
||||
abstain: number;
|
||||
against: number;
|
||||
sort: number;
|
||||
}
|
||||
|
||||
/** Protocol Printout Models */
|
||||
|
|
|
@ -2,9 +2,10 @@ import { DynamicQueryStructure, FieldType } from "../../types/admin/dynamicQueri
|
|||
|
||||
/** Query Store Models */
|
||||
export interface QueryViewModel {
|
||||
id: number;
|
||||
id: string;
|
||||
title: string;
|
||||
query: string | DynamicQueryStructure;
|
||||
updatedAt: Date;
|
||||
}
|
||||
|
||||
export interface CreateQueryViewModel {
|
||||
|
|
4
src/viewmodels/webpage.ts
Normal file
4
src/viewmodels/webpage.ts
Normal file
|
@ -0,0 +1,4 @@
|
|||
export * as CollectionModels from "./webpage/collection";
|
||||
export * as ComponentModels from "./webpage/component";
|
||||
export * as FieldModels from "./webpage/field";
|
||||
export * as SingleModels from "./webpage/single";
|
59
src/viewmodels/webpage/collection.ts
Normal file
59
src/viewmodels/webpage/collection.ts
Normal file
|
@ -0,0 +1,59 @@
|
|||
import { ComponentTypes } from "../../types/webpage/componentTypes";
|
||||
import { File } from "./component/base";
|
||||
import { Hero } from "./component/items";
|
||||
import { ContentField } from "./field";
|
||||
|
||||
export interface BaseCollection {
|
||||
id: number;
|
||||
documentId: string;
|
||||
slug: string;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
publishedAt: string;
|
||||
locale: string;
|
||||
|
||||
title: string;
|
||||
description: string;
|
||||
date: string;
|
||||
content: ContentField | undefined;
|
||||
image: File | undefined;
|
||||
attachment: Array<File>;
|
||||
}
|
||||
|
||||
export interface Article extends BaseCollection {}
|
||||
|
||||
export interface Event extends BaseCollection {}
|
||||
|
||||
export interface Operation extends BaseCollection {}
|
||||
|
||||
export interface Vehicle extends BaseCollection {}
|
||||
|
||||
export interface Lookup {
|
||||
id: number;
|
||||
documentId: string;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
publishedAt: string;
|
||||
|
||||
reference: string;
|
||||
collection: "events" | "vehicles" | "articles" | "operations";
|
||||
show_image: boolean;
|
||||
show_date: boolean;
|
||||
list_with_date: "none" | "by-year" | "by-month";
|
||||
items_with_number: "none" | "numbered" | "inverted";
|
||||
enable_detail: boolean;
|
||||
}
|
||||
|
||||
export interface Page {
|
||||
id: number;
|
||||
documentId: string;
|
||||
identifier: string;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
publishedAt: string;
|
||||
locale: string;
|
||||
slug: string;
|
||||
hero: Hero;
|
||||
content: Array<ComponentTypes>;
|
||||
localizations: any[];
|
||||
}
|
5
src/viewmodels/webpage/component.ts
Normal file
5
src/viewmodels/webpage/component.ts
Normal file
|
@ -0,0 +1,5 @@
|
|||
export * as BaseModels from "./component/base";
|
||||
export * as DaynamicZoneModels from "./component/dynamic-zone";
|
||||
export * as GlobalModels from "./component/global";
|
||||
export * as ItemsModels from "./component/items";
|
||||
export * as SharedModels from "./component/shared";
|
41
src/viewmodels/webpage/component/base.ts
Normal file
41
src/viewmodels/webpage/component/base.ts
Normal file
|
@ -0,0 +1,41 @@
|
|||
import { ComponentNames } from "../../../types/webpage/componentTypes";
|
||||
|
||||
export interface Component {
|
||||
__component: ComponentNames;
|
||||
id: number;
|
||||
}
|
||||
|
||||
export interface File {
|
||||
id: number;
|
||||
documentId: string;
|
||||
name: string;
|
||||
alternativeText: string | null;
|
||||
caption: string | null;
|
||||
width: number;
|
||||
height: number;
|
||||
formats: Record<string, ImageFormat> | null;
|
||||
hash: string;
|
||||
ext: string;
|
||||
mime: string;
|
||||
size: number;
|
||||
url: string;
|
||||
previewUrl: string | null;
|
||||
provider: string;
|
||||
provider_metadata: any;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
publishedAt: string;
|
||||
}
|
||||
|
||||
export interface ImageFormat {
|
||||
name: string;
|
||||
hash: string;
|
||||
ext: string;
|
||||
mime: string;
|
||||
path: string | null;
|
||||
width: number;
|
||||
height: number;
|
||||
size: number;
|
||||
sizeInBytes: number;
|
||||
url: string;
|
||||
}
|
55
src/viewmodels/webpage/component/dynamic-zone.ts
Normal file
55
src/viewmodels/webpage/component/dynamic-zone.ts
Normal file
|
@ -0,0 +1,55 @@
|
|||
import { ContentField } from "../field";
|
||||
import { File, Component } from "./base";
|
||||
|
||||
export interface ColumnImageText extends Component {
|
||||
__component: "dynamic-zone.column-image-text";
|
||||
text: ContentField;
|
||||
image_left: boolean;
|
||||
image: File;
|
||||
}
|
||||
|
||||
export interface DualColumnText extends Component {
|
||||
__component: "dynamic-zone.dual-column-text";
|
||||
left_side: ContentField;
|
||||
right_side: ContentField;
|
||||
}
|
||||
|
||||
export interface Embedding extends Component {
|
||||
__component: "dynamic-zone.embedding";
|
||||
link: string;
|
||||
}
|
||||
|
||||
export interface FileDownload extends Component {
|
||||
__component: "dynamic-zone.file-download";
|
||||
file: File;
|
||||
}
|
||||
|
||||
export interface FileViewer extends Component {
|
||||
__component: "dynamic-zone.file-viewer";
|
||||
file: File;
|
||||
}
|
||||
|
||||
export interface FullImage extends Component {
|
||||
__component: "dynamic-zone.full-image";
|
||||
image: File;
|
||||
}
|
||||
|
||||
export interface FullText extends Component {
|
||||
__component: "dynamic-zone.full-text";
|
||||
text: ContentField;
|
||||
}
|
||||
|
||||
export interface Gallery extends Component {
|
||||
__component: "dynamic-zone.gallery";
|
||||
images: Array<File>;
|
||||
}
|
||||
|
||||
export interface Section extends Component {
|
||||
__component: "dynamic-zone.section";
|
||||
title: string;
|
||||
description: string;
|
||||
}
|
||||
|
||||
export interface Spacer extends Component {
|
||||
__component: "dynamic-zone.spacer";
|
||||
}
|
19
src/viewmodels/webpage/component/global.ts
Normal file
19
src/viewmodels/webpage/component/global.ts
Normal file
|
@ -0,0 +1,19 @@
|
|||
import { NavbarItem, FooterLink } from "./items";
|
||||
|
||||
export interface SEO {
|
||||
metaTitle: string;
|
||||
metaDescription: string;
|
||||
keywords: string;
|
||||
}
|
||||
|
||||
export interface Navbar {
|
||||
id: number;
|
||||
navbar_items: NavbarItem[];
|
||||
}
|
||||
|
||||
export interface Footer {
|
||||
id: number;
|
||||
copyright: undefined | string;
|
||||
maintained_by: undefined | string;
|
||||
links: FooterLink[];
|
||||
}
|
37
src/viewmodels/webpage/component/items.ts
Normal file
37
src/viewmodels/webpage/component/items.ts
Normal file
|
@ -0,0 +1,37 @@
|
|||
import { Page } from "../collection";
|
||||
import { File } from "./base";
|
||||
|
||||
export interface FooterLink {
|
||||
id: number;
|
||||
text: string;
|
||||
URL: string;
|
||||
target: string;
|
||||
}
|
||||
|
||||
export interface Hero {
|
||||
id: number;
|
||||
title: string | undefined;
|
||||
banner: File | undefined;
|
||||
}
|
||||
|
||||
export interface Link {
|
||||
text: string;
|
||||
URL: string;
|
||||
target: "_blank" | "_self" | "_parent" | "_top";
|
||||
}
|
||||
|
||||
export interface NavbarItem {
|
||||
id: number;
|
||||
name: string;
|
||||
URL: string;
|
||||
default_active_child: string;
|
||||
page: any;
|
||||
navbar_sub_items: NavbarSubItem[];
|
||||
}
|
||||
|
||||
export interface NavbarSubItem {
|
||||
id: number;
|
||||
name: string;
|
||||
URL: string;
|
||||
page: Page | null;
|
||||
}
|
13
src/viewmodels/webpage/component/shared.ts
Normal file
13
src/viewmodels/webpage/component/shared.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { Article, Lookup } from "../collection";
|
||||
import { Component } from "./base";
|
||||
|
||||
export interface List extends Component {
|
||||
__component: "shared.list";
|
||||
lookup: Lookup;
|
||||
}
|
||||
|
||||
export interface EmphasiseArticle extends Component {
|
||||
__component: "shared.emphasise-article";
|
||||
articles: Array<Article>;
|
||||
link_to_articles: string;
|
||||
}
|
20
src/viewmodels/webpage/field.ts
Normal file
20
src/viewmodels/webpage/field.ts
Normal file
|
@ -0,0 +1,20 @@
|
|||
import { TextField, TypeField } from "../../types/webpage/textTypes";
|
||||
|
||||
export interface ContentField
|
||||
extends Array<
|
||||
| {
|
||||
type: "paragraph" | "heading" | "quote";
|
||||
children: Array<TypeField>;
|
||||
level?: number;
|
||||
}
|
||||
| {
|
||||
type: "list";
|
||||
format: "unordered" | "ordered";
|
||||
children: Array<{ type: "list-item"; children: Array<TypeField> }>;
|
||||
}
|
||||
| {
|
||||
type: "code";
|
||||
children: Array<TextField>;
|
||||
language: "plaintext";
|
||||
}
|
||||
> {}
|
27
src/viewmodels/webpage/single.ts
Normal file
27
src/viewmodels/webpage/single.ts
Normal file
|
@ -0,0 +1,27 @@
|
|||
import { ComponentTypes } from "../../types/webpage/componentTypes";
|
||||
import { File } from "./component/base";
|
||||
import { Navbar, Footer, SEO } from "./component/global";
|
||||
|
||||
export interface Global {
|
||||
id: number;
|
||||
documentId: string;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
publishedAt: string;
|
||||
locale: string;
|
||||
logo: File;
|
||||
navbar: Navbar | undefined;
|
||||
footer: Footer | undefined;
|
||||
SEO: SEO | undefined;
|
||||
}
|
||||
|
||||
export interface Homepage {
|
||||
id: number;
|
||||
documentId: string;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
publishedAt: string;
|
||||
locale: string;
|
||||
backdrop: undefined | File;
|
||||
content: Array<ComponentTypes>;
|
||||
}
|
Loading…
Add table
Reference in a new issue