diff --git a/.gitignore b/.gitignore
index 83dab62..d88eeac 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,4 +8,6 @@ src/main/.DS_Store
dist/
out/
-.nyc_output/
\ No newline at end of file
+.nyc_output/
+
+.DS_Store
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 8f3ad61..ae65dee 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -19,22 +19,23 @@
"@rollup/plugin-typescript": "^11.1.6",
"@types/chai": "^4.3.16",
"@types/mocha": "^10.0.7",
- "@types/node": "^20.14.10",
+ "@types/node": "^20.14.12",
"chai": "4.4.1",
"eslint": "8.57.0",
- "husky": "^9.0.11",
+ "husky": "^9.1.1",
"lint-staged": "^15.2.7",
"logging": "^3.3.0",
- "mocha": "^10.6.0",
+ "mocha": "^10.7.0",
"nyc": "^17.0.0",
"prettier": "^3.3.3",
- "rollup": "^4.18.1",
+ "rollup": "^4.19.0",
"rollup-plugin-polyfill-node": "^0.13.0",
"semantic-release": "^24.0.0",
"ts-node": "^10.9.2",
"tslib": "^2.6.3",
- "typescript": "^5.5.3",
- "typescript-eslint": "^7.16.0"
+ "typescript": "^5.5.4",
+ "typescript-eslint": "^7.17.0",
+ "uglify-js": "^3.19.0"
},
"engines": {
"node": "^18 || ^20"
@@ -1365,9 +1366,9 @@
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz",
- "integrity": "sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.0.tgz",
+ "integrity": "sha512-JlPfZ/C7yn5S5p0yKk7uhHTTnFlvTgLetl2VxqE518QgyM7C9bSfFTYvB/Q/ftkq0RIPY4ySxTz+/wKJ/dXC0w==",
"cpu": [
"arm"
],
@@ -1379,9 +1380,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz",
- "integrity": "sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.0.tgz",
+ "integrity": "sha512-RDxUSY8D1tWYfn00DDi5myxKgOk6RvWPxhmWexcICt/MEC6yEMr4HNCu1sXXYLw8iAsg0D44NuU+qNq7zVWCrw==",
"cpu": [
"arm64"
],
@@ -1393,9 +1394,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz",
- "integrity": "sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.0.tgz",
+ "integrity": "sha512-emvKHL4B15x6nlNTBMtIaC9tLPRpeA5jMvRLXVbl/W9Ie7HhkrE7KQjvgS9uxgatL1HmHWDXk5TTS4IaNJxbAA==",
"cpu": [
"arm64"
],
@@ -1407,9 +1408,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz",
- "integrity": "sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.0.tgz",
+ "integrity": "sha512-fO28cWA1dC57qCd+D0rfLC4VPbh6EOJXrreBmFLWPGI9dpMlER2YwSPZzSGfq11XgcEpPukPTfEVFtw2q2nYJg==",
"cpu": [
"x64"
],
@@ -1421,9 +1422,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz",
- "integrity": "sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.0.tgz",
+ "integrity": "sha512-2Rn36Ubxdv32NUcfm0wB1tgKqkQuft00PtM23VqLuCUR4N5jcNWDoV5iBC9jeGdgS38WK66ElncprqgMUOyomw==",
"cpu": [
"arm"
],
@@ -1435,9 +1436,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz",
- "integrity": "sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.0.tgz",
+ "integrity": "sha512-gJuzIVdq/X1ZA2bHeCGCISe0VWqCoNT8BvkQ+BfsixXwTOndhtLUpOg0A1Fcx/+eA6ei6rMBzlOz4JzmiDw7JQ==",
"cpu": [
"arm"
],
@@ -1449,9 +1450,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz",
- "integrity": "sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.0.tgz",
+ "integrity": "sha512-0EkX2HYPkSADo9cfeGFoQ7R0/wTKb7q6DdwI4Yn/ULFE1wuRRCHybxpl2goQrx4c/yzK3I8OlgtBu4xvted0ug==",
"cpu": [
"arm64"
],
@@ -1463,9 +1464,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz",
- "integrity": "sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.0.tgz",
+ "integrity": "sha512-GlIQRj9px52ISomIOEUq/IojLZqzkvRpdP3cLgIE1wUWaiU5Takwlzpz002q0Nxxr1y2ZgxC2obWxjr13lvxNQ==",
"cpu": [
"arm64"
],
@@ -1477,9 +1478,9 @@
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz",
- "integrity": "sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.0.tgz",
+ "integrity": "sha512-N6cFJzssruDLUOKfEKeovCKiHcdwVYOT1Hs6dovDQ61+Y9n3Ek4zXvtghPPelt6U0AH4aDGnDLb83uiJMkWYzQ==",
"cpu": [
"ppc64"
],
@@ -1491,9 +1492,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz",
- "integrity": "sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.0.tgz",
+ "integrity": "sha512-2DnD3mkS2uuam/alF+I7M84koGwvn3ZVD7uG+LEWpyzo/bq8+kKnus2EVCkcvh6PlNB8QPNFOz6fWd5N8o1CYg==",
"cpu": [
"riscv64"
],
@@ -1505,9 +1506,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz",
- "integrity": "sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.0.tgz",
+ "integrity": "sha512-D6pkaF7OpE7lzlTOFCB2m3Ngzu2ykw40Nka9WmKGUOTS3xcIieHe82slQlNq69sVB04ch73thKYIWz/Ian8DUA==",
"cpu": [
"s390x"
],
@@ -1519,9 +1520,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz",
- "integrity": "sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.0.tgz",
+ "integrity": "sha512-HBndjQLP8OsdJNSxpNIN0einbDmRFg9+UQeZV1eiYupIRuZsDEoeGU43NQsS34Pp166DtwQOnpcbV/zQxM+rWA==",
"cpu": [
"x64"
],
@@ -1533,9 +1534,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz",
- "integrity": "sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.0.tgz",
+ "integrity": "sha512-HxfbvfCKJe/RMYJJn0a12eiOI9OOtAUF4G6ozrFUK95BNyoJaSiBjIOHjZskTUffUrB84IPKkFG9H9nEvJGW6A==",
"cpu": [
"x64"
],
@@ -1547,9 +1548,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz",
- "integrity": "sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.0.tgz",
+ "integrity": "sha512-HxDMKIhmcguGTiP5TsLNolwBUK3nGGUEoV/BO9ldUBoMLBssvh4J0X8pf11i1fTV7WShWItB1bKAKjX4RQeYmg==",
"cpu": [
"arm64"
],
@@ -1561,9 +1562,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz",
- "integrity": "sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.0.tgz",
+ "integrity": "sha512-xItlIAZZaiG/u0wooGzRsx11rokP4qyc/79LkAOdznGRAbOFc+SfEdfUOszG1odsHNgwippUJavag/+W/Etc6Q==",
"cpu": [
"ia32"
],
@@ -1575,9 +1576,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz",
- "integrity": "sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.0.tgz",
+ "integrity": "sha512-xNo5fV5ycvCCKqiZcpB65VMR11NJB+StnxHz20jdqRAktfdfzhgjTiJ2doTDQE/7dqGaV5I7ZGqKpgph6lCIag==",
"cpu": [
"x64"
],
@@ -2065,9 +2066,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "20.14.10",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz",
- "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==",
+ "version": "20.14.12",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.12.tgz",
+ "integrity": "sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2098,17 +2099,17 @@
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.0.tgz",
- "integrity": "sha512-py1miT6iQpJcs1BiJjm54AMzeuMPBSPuKPlnT8HlfudbcS5rYeX5jajpLf3mrdRh9dA/Ec2FVUY0ifeVNDIhZw==",
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.17.0.tgz",
+ "integrity": "sha512-pyiDhEuLM3PuANxH7uNYan1AaFs5XE0zw1hq69JBvGvE7gSuEoQl1ydtEe/XQeoC3GQxLXyOVa5kNOATgM638A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "7.16.0",
- "@typescript-eslint/type-utils": "7.16.0",
- "@typescript-eslint/utils": "7.16.0",
- "@typescript-eslint/visitor-keys": "7.16.0",
+ "@typescript-eslint/scope-manager": "7.17.0",
+ "@typescript-eslint/type-utils": "7.17.0",
+ "@typescript-eslint/utils": "7.17.0",
+ "@typescript-eslint/visitor-keys": "7.17.0",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"natural-compare": "^1.4.0",
@@ -2132,16 +2133,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.0.tgz",
- "integrity": "sha512-ar9E+k7CU8rWi2e5ErzQiC93KKEFAXA2Kky0scAlPcxYblLt8+XZuHUZwlyfXILyQa95P6lQg+eZgh/dDs3+Vw==",
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.17.0.tgz",
+ "integrity": "sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/scope-manager": "7.16.0",
- "@typescript-eslint/types": "7.16.0",
- "@typescript-eslint/typescript-estree": "7.16.0",
- "@typescript-eslint/visitor-keys": "7.16.0",
+ "@typescript-eslint/scope-manager": "7.17.0",
+ "@typescript-eslint/types": "7.17.0",
+ "@typescript-eslint/typescript-estree": "7.17.0",
+ "@typescript-eslint/visitor-keys": "7.17.0",
"debug": "^4.3.4"
},
"engines": {
@@ -2161,14 +2162,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.0.tgz",
- "integrity": "sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==",
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz",
+ "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "7.16.0",
- "@typescript-eslint/visitor-keys": "7.16.0"
+ "@typescript-eslint/types": "7.17.0",
+ "@typescript-eslint/visitor-keys": "7.17.0"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -2179,14 +2180,14 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.0.tgz",
- "integrity": "sha512-j0fuUswUjDHfqV/UdW6mLtOQQseORqfdmoBNDFOqs9rvNVR2e+cmu6zJu/Ku4SDuqiJko6YnhwcL8x45r8Oqxg==",
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.17.0.tgz",
+ "integrity": "sha512-XD3aaBt+orgkM/7Cei0XNEm1vwUxQ958AOLALzPlbPqb8C1G8PZK85tND7Jpe69Wualri81PLU+Zc48GVKIMMA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/typescript-estree": "7.16.0",
- "@typescript-eslint/utils": "7.16.0",
+ "@typescript-eslint/typescript-estree": "7.17.0",
+ "@typescript-eslint/utils": "7.17.0",
"debug": "^4.3.4",
"ts-api-utils": "^1.3.0"
},
@@ -2207,9 +2208,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.0.tgz",
- "integrity": "sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==",
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz",
+ "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2221,14 +2222,14 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.0.tgz",
- "integrity": "sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==",
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz",
+ "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/types": "7.16.0",
- "@typescript-eslint/visitor-keys": "7.16.0",
+ "@typescript-eslint/types": "7.17.0",
+ "@typescript-eslint/visitor-keys": "7.17.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -2307,16 +2308,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.0.tgz",
- "integrity": "sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==",
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.17.0.tgz",
+ "integrity": "sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "7.16.0",
- "@typescript-eslint/types": "7.16.0",
- "@typescript-eslint/typescript-estree": "7.16.0"
+ "@typescript-eslint/scope-manager": "7.17.0",
+ "@typescript-eslint/types": "7.17.0",
+ "@typescript-eslint/typescript-estree": "7.17.0"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -2330,13 +2331,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.0.tgz",
- "integrity": "sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==",
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz",
+ "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "7.16.0",
+ "@typescript-eslint/types": "7.17.0",
"eslint-visitor-keys": "^3.4.3"
},
"engines": {
@@ -4831,11 +4832,13 @@
}
},
"node_modules/husky": {
- "version": "9.0.11",
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.1.tgz",
+ "integrity": "sha512-fCqlqLXcBnXa/TJXmT93/A36tJsjdJkibQ1MuIiFyCCYUlpYpIaj2mv1w+3KR6Rzu1IC3slFTje5f6DUp2A2rg==",
"dev": true,
"license": "MIT",
"bin": {
- "husky": "bin.mjs"
+ "husky": "bin.js"
},
"engines": {
"node": ">=18"
@@ -6250,9 +6253,9 @@
}
},
"node_modules/mocha": {
- "version": "10.6.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.6.0.tgz",
- "integrity": "sha512-hxjt4+EEB0SA0ZDygSS015t65lJw/I2yRCS3Ae+SJ5FrbzrXgfYwJr96f0OvIXdj7h4lv/vLCrH3rkiuizFSvw==",
+ "version": "10.7.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.0.tgz",
+ "integrity": "sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10303,9 +10306,9 @@
}
},
"node_modules/rollup": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.1.tgz",
- "integrity": "sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==",
+ "version": "4.19.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.0.tgz",
+ "integrity": "sha512-5r7EYSQIowHsK4eTZ0Y81qpZuJz+MUuYeqmmYmRMl1nwhdmbiYqt5jwzf6u7wyOzJgYqtCRMtVRKOtHANBz7rA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10319,22 +10322,22 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.18.1",
- "@rollup/rollup-android-arm64": "4.18.1",
- "@rollup/rollup-darwin-arm64": "4.18.1",
- "@rollup/rollup-darwin-x64": "4.18.1",
- "@rollup/rollup-linux-arm-gnueabihf": "4.18.1",
- "@rollup/rollup-linux-arm-musleabihf": "4.18.1",
- "@rollup/rollup-linux-arm64-gnu": "4.18.1",
- "@rollup/rollup-linux-arm64-musl": "4.18.1",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.18.1",
- "@rollup/rollup-linux-riscv64-gnu": "4.18.1",
- "@rollup/rollup-linux-s390x-gnu": "4.18.1",
- "@rollup/rollup-linux-x64-gnu": "4.18.1",
- "@rollup/rollup-linux-x64-musl": "4.18.1",
- "@rollup/rollup-win32-arm64-msvc": "4.18.1",
- "@rollup/rollup-win32-ia32-msvc": "4.18.1",
- "@rollup/rollup-win32-x64-msvc": "4.18.1",
+ "@rollup/rollup-android-arm-eabi": "4.19.0",
+ "@rollup/rollup-android-arm64": "4.19.0",
+ "@rollup/rollup-darwin-arm64": "4.19.0",
+ "@rollup/rollup-darwin-x64": "4.19.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.19.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.19.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.19.0",
+ "@rollup/rollup-linux-arm64-musl": "4.19.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.19.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.19.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.19.0",
+ "@rollup/rollup-linux-x64-gnu": "4.19.0",
+ "@rollup/rollup-linux-x64-musl": "4.19.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.19.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.19.0",
+ "@rollup/rollup-win32-x64-msvc": "4.19.0",
"fsevents": "~2.3.2"
}
},
@@ -11840,9 +11843,9 @@
}
},
"node_modules/typescript": {
- "version": "5.5.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz",
- "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==",
+ "version": "5.5.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
+ "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -11854,15 +11857,15 @@
}
},
"node_modules/typescript-eslint": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.16.0.tgz",
- "integrity": "sha512-kaVRivQjOzuoCXU6+hLnjo3/baxyzWVO5GrnExkFzETRYJKVHYkrJglOu2OCm8Hi9RPDWX1PTNNTpU5KRV0+RA==",
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.17.0.tgz",
+ "integrity": "sha512-spQxsQvPguduCUfyUvLItvKqK3l8KJ/kqs5Pb/URtzQ5AC53Z6us32St37rpmlt2uESG23lOFpV4UErrmy4dZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "7.16.0",
- "@typescript-eslint/parser": "7.16.0",
- "@typescript-eslint/utils": "7.16.0"
+ "@typescript-eslint/eslint-plugin": "7.17.0",
+ "@typescript-eslint/parser": "7.17.0",
+ "@typescript-eslint/utils": "7.17.0"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -11881,12 +11884,11 @@
}
},
"node_modules/uglify-js": {
- "version": "3.17.4",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
- "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "version": "3.19.0",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.0.tgz",
+ "integrity": "sha512-wNKHUY2hYYkf6oSFfhwwiHo4WCHzHmzcXsqXYTN9ja3iApYIFbb2U6ics9hBcYLHcYGQoAlwnZlTrf3oF+BL/Q==",
"dev": true,
"license": "BSD-2-Clause",
- "optional": true,
"bin": {
"uglifyjs": "bin/uglifyjs"
},
diff --git a/package.json b/package.json
index f805c8b..7708b3f 100644
--- a/package.json
+++ b/package.json
@@ -13,7 +13,9 @@
"precommit": "lint-staged",
"lint": "eslint src",
"prepack": "npm run build && npm run dist",
- "dist": "rollup --config",
+ "rollup": "rollup --config",
+ "uglify": "uglifyjs dist/index.js --compress -o dist/index.min.js",
+ "dist": "npm run rollup && npm run uglify",
"test:coverage": "nyc npm test"
},
"keywords": [],
@@ -29,22 +31,23 @@
"@rollup/plugin-typescript": "^11.1.6",
"@types/chai": "^4.3.16",
"@types/mocha": "^10.0.7",
- "@types/node": "^20.14.10",
+ "@types/node": "^20.14.12",
"chai": "4.4.1",
"eslint": "8.57.0",
- "husky": "^9.0.11",
+ "husky": "^9.1.1",
"lint-staged": "^15.2.7",
"logging": "^3.3.0",
- "mocha": "^10.6.0",
+ "mocha": "^10.7.0",
"nyc": "^17.0.0",
"prettier": "^3.3.3",
- "rollup": "^4.18.1",
+ "rollup": "^4.19.0",
"rollup-plugin-polyfill-node": "^0.13.0",
"semantic-release": "^24.0.0",
"ts-node": "^10.9.2",
"tslib": "^2.6.3",
- "typescript": "^5.5.3",
- "typescript-eslint": "^7.16.0"
+ "typescript": "^5.5.4",
+ "typescript-eslint": "^7.17.0",
+ "uglify-js": "^3.19.0"
},
"packageManager": "npm@10.8.0",
"dependencies": {
diff --git a/readme.md b/readme.md
index 93e9295..80ea8ab 100644
--- a/readme.md
+++ b/readme.md
@@ -29,6 +29,7 @@ _An Extensible Rule Engine capable of conducting static analysis on the metadata
| **SOQL Query In A Loop** ([`SOQLQueryInLoop`](https://github.com/Lightning-Flow-Scanner/lightning-flow-scanner-core/tree/master/src/main/rules/SOQLQueryInLoop.ts)) | To prevent exceeding Apex governor limits, it is advisable to consolidate all your SOQL queries at the conclusion of the flow. |
| **Unconnected Element** ([`UnconnectedElement`](https://github.com/Lightning-Flow-Scanner/lightning-flow-scanner-core/tree/master/src/main/rules/UnconnectedElement.ts)) | Unconnected elements which are not being used by the Flow should be avoided to keep Flows efficient and maintainable. |
| **Unused Variable** ([`UnusedVariable`](https://github.com/Lightning-Flow-Scanner/lightning-flow-scanner-core/tree/master/src/main/rules/UnusedVariable.ts)) | To maintain the efficiency and manageability of your Flow, it's advisable to avoid including unconnected variables that are not in use. |
+| **Unsafe Running Context** ([`UnsafeRunningContext`](https://github.com/Lightning-Flow-Scanner/lightning-flow-scanner-core/tree/master/src/main/rules/UnsafeRunningContext.ts)) | This flow is configured to run in System Mode without Sharing. This system context grants all running users the permission to view and edit all data in your org. Running a flow in System Mode without Sharing can lead to unsafe data access. |
## Core Functions
diff --git a/rollup.config.mjs b/rollup.config.mjs
index 6b7d268..89245fe 100644
--- a/rollup.config.mjs
+++ b/rollup.config.mjs
@@ -9,16 +9,16 @@ export default {
dir: "dist",
format: "umd",
name: "lightningflowscanner",
- sourcemap: true,
+ sourcemap: false,
globals: {
"path-browserify": "p",
xmlbuilder2: "xmlbuilder2",
},
- }
+ },
],
plugins: [
nodePolyfills(),
- typescript({tsconfig: `tsconfig.umd.json`}),
+ typescript({ tsconfig: `tsconfig.umd.json` }),
nodeResolve({ preferBuiltins: true }),
nodePolyfills(),
],
diff --git a/src/main/rules/UnsafeRunningContext.ts b/src/main/rules/UnsafeRunningContext.ts
new file mode 100644
index 0000000..654c515
--- /dev/null
+++ b/src/main/rules/UnsafeRunningContext.ts
@@ -0,0 +1,41 @@
+import * as core from "../internals/internals";
+import { RuleCommon } from "../models/RuleCommon";
+
+export class UnsafeRunningContext extends RuleCommon implements core.IRuleDefinition {
+ constructor() {
+ super(
+ {
+ name: "UnsafeRunningContext",
+ label: "Unsafe Flow Running Context",
+ description:
+ "This flow is configured to run in System Mode without Sharing. This system context grants all running users the permission to view and edit all data in your org. Running a flow in System Mode without Sharing can lead to unsafe data access.",
+ supportedTypes: [...core.FlowType.backEndTypes, ...core.FlowType.visualTypes],
+ docRefs: [
+ {
+ label:
+ "Learn about data safety when running flows in system context in Salesforce Help",
+ path: "https://help.salesforce.com/s/articleView?id=sf.flow_distribute_context_data_safety_system_context.htm&type=5",
+ },
+ ],
+ isConfigurable: false,
+ autoFixable: false,
+ },
+ { severity: "warning" }
+ );
+ }
+
+ public execute(flow: core.Flow): core.RuleResult {
+ const hasRunInMode = "runInMode" in flow.xmldata;
+ const runInMode: string = hasRunInMode ? flow.xmldata.runInMode : undefined;
+ const riskyMode: string = "SystemModeWithoutSharing";
+
+ const results: core.ResultDetails[] = [];
+
+ if (hasRunInMode && runInMode === riskyMode) {
+ results.push(
+ new core.ResultDetails(new core.FlowAttribute(runInMode, "runInMode", `== ${riskyMode}`))
+ );
+ }
+ return new core.RuleResult(this, results);
+ }
+}
diff --git a/src/main/store/DefaultRuleStore.ts b/src/main/store/DefaultRuleStore.ts
index de9cb5c..9e7ed71 100644
--- a/src/main/store/DefaultRuleStore.ts
+++ b/src/main/store/DefaultRuleStore.ts
@@ -12,9 +12,10 @@ import { MissingNullHandler } from "../rules/MissingNullHandler";
import { ProcessBuilder } from "../rules/ProcessBuilder";
import { SOQLQueryInLoop } from "../rules/SOQLQueryInLoop";
import { UnconnectedElement } from "../rules/UnconnectedElement";
+import { UnsafeRunningContext } from "../rules/UnsafeRunningContext";
import { UnusedVariable } from "../rules/UnusedVariable";
-export const DefaultRuleStore: {} = {
+export const DefaultRuleStore: object = {
APIVersion,
AutoLayout,
CopyAPIName,
@@ -30,4 +31,5 @@ export const DefaultRuleStore: {} = {
UnconnectedElement,
UnusedVariable,
InactiveFlow,
+ UnsafeRunningContext,
};
diff --git a/tests/UnsafeRunningContext.test.ts b/tests/UnsafeRunningContext.test.ts
new file mode 100644
index 0000000..91589a5
--- /dev/null
+++ b/tests/UnsafeRunningContext.test.ts
@@ -0,0 +1,47 @@
+import { expect } from "chai";
+import "mocha";
+import * as core from "../src";
+import * as path from "path-browserify";
+
+import { ParseFlows } from "../src/main/libs/ParseFlows";
+import { ParsedFlow } from "../src/main/models/ParsedFlow";
+
+import { UnsafeRunningContext } from "../src/main/rules/UnsafeRunningContext";
+
+describe("UnsafeRunningContext", () => {
+ const unsafeRunningContext: UnsafeRunningContext = new UnsafeRunningContext();
+
+ it("should have a scan result for without sharing system mode", async () => {
+ const unsafeContextTestFile = path.join(
+ __dirname,
+ "./xmlfiles/Unsafe_Running_Context.flow-meta.xml"
+ );
+ const parsed: ParsedFlow = (await ParseFlows([unsafeContextTestFile])).pop() as ParsedFlow;
+ const ruleResult: core.RuleResult = unsafeRunningContext.execute(parsed.flow as core.Flow);
+ expect(ruleResult.occurs).to.be.true;
+ expect(ruleResult.details).to.not.be.empty;
+ expect(ruleResult.ruleDefinition.severity).to.be.equal("warning");
+ });
+
+ it("should not have a scan result for with sharing system mode", async () => {
+ const unsafeContextTestFile = path.join(
+ __dirname,
+ "./xmlfiles/Unsafe_Running_Context_WithSharing.flow-meta.xml"
+ );
+ const parsed: ParsedFlow = (await ParseFlows([unsafeContextTestFile])).pop() as ParsedFlow;
+ const ruleResult: core.RuleResult = unsafeRunningContext.execute(parsed.flow as core.Flow);
+ expect(ruleResult.occurs).to.be.false;
+ expect(ruleResult.details).to.be.empty;
+ });
+
+ it("should not have a scan result for default mode", async () => {
+ const unsafeContextTestFile = path.join(
+ __dirname,
+ "./xmlfiles/Unsafe_Running_Context_Default.flow-meta.xml"
+ );
+ const parsed: ParsedFlow = (await ParseFlows([unsafeContextTestFile])).pop() as ParsedFlow;
+ const ruleResult: core.RuleResult = unsafeRunningContext.execute(parsed.flow as core.Flow);
+ expect(ruleResult.occurs).to.be.false;
+ expect(ruleResult.details).to.be.empty;
+ });
+});
diff --git a/tests/xmlfiles/Unsafe_Running_Context.flow-meta.xml b/tests/xmlfiles/Unsafe_Running_Context.flow-meta.xml
new file mode 100644
index 0000000..d77fa8e
--- /dev/null
+++ b/tests/xmlfiles/Unsafe_Running_Context.flow-meta.xml
@@ -0,0 +1,46 @@
+
+
+ 61.0
+ Default
+ test {!$Flow.CurrentDateTime}
+
+
+ BuilderType
+
+ LightningFlowBuilder
+
+
+
+ CanvasMode
+
+ AUTO_LAYOUT_CANVAS
+
+
+
+ OriginBuilderType
+
+ LightningFlowBuilder
+
+
+ Flow
+ SystemModeWithoutSharing
+
+ testtest
+
+ 176
+ 134
+ true
+ true
+ true
+ true
+ true
+
+
+ 50
+ 0
+
+ testtest
+
+
+ Draft
+
\ No newline at end of file
diff --git a/tests/xmlfiles/Unsafe_Running_Context_Default.flow-meta.xml b/tests/xmlfiles/Unsafe_Running_Context_Default.flow-meta.xml
new file mode 100644
index 0000000..9ac5954
--- /dev/null
+++ b/tests/xmlfiles/Unsafe_Running_Context_Default.flow-meta.xml
@@ -0,0 +1,50 @@
+
+
+ 61.0
+ Default
+ Unsafe Running Context {!$Flow.CurrentDateTime}
+
+
+ BuilderType
+
+ LightningFlowBuilder
+
+
+
+ CanvasMode
+
+ AUTO_LAYOUT_CANVAS
+
+
+
+ OriginBuilderType
+
+ LightningFlowBuilder
+
+
+ AutoLaunchedFlow
+
+ asdfasdfasdfasdfasdf
+ Create_Record
+
+ 176
+ 134
+
+ LastName
+
+ 123
+
+
+
+ true
+
+ DefaultMode
+
+ 50
+ 0
+
+ Create_Record
+
+
+ Active
+
\ No newline at end of file
diff --git a/tests/xmlfiles/Unsafe_Running_Context_WithSharing.flow-meta.xml b/tests/xmlfiles/Unsafe_Running_Context_WithSharing.flow-meta.xml
new file mode 100644
index 0000000..a183649
--- /dev/null
+++ b/tests/xmlfiles/Unsafe_Running_Context_WithSharing.flow-meta.xml
@@ -0,0 +1,50 @@
+
+
+ 61.0
+ Default
+ Unsafe Running Context {!$Flow.CurrentDateTime}
+
+
+ BuilderType
+
+ LightningFlowBuilder
+
+
+
+ CanvasMode
+
+ AUTO_LAYOUT_CANVAS
+
+
+
+ OriginBuilderType
+
+ LightningFlowBuilder
+
+
+ AutoLaunchedFlow
+
+ asdfasdfasdfasdfasdf
+ Create_Record
+
+ 176
+ 134
+
+ LastName
+
+ 123
+
+
+
+ true
+
+ SystemModeWitSharing
+
+ 50
+ 0
+
+ Create_Record
+
+
+ Active
+
\ No newline at end of file
diff --git a/tsconfig.umd.json b/tsconfig.umd.json
index 349d551..b06b98d 100644
--- a/tsconfig.umd.json
+++ b/tsconfig.umd.json
@@ -9,7 +9,7 @@
"es6"
],
"experimentalDecorators": true,
- "sourceMap": true,
+ "sourceMap": false,
"rootDir": "src",
"strict": false, /* enable all strict type-checking options */
"baseUrl": ".",