From e2a9d8a386c57d5928a538eabafdfd5509ce0558 Mon Sep 17 00:00:00 2001
From: gotbadger
Date: Fri, 17 Nov 2023 10:45:45 +0000
Subject: [PATCH 1/7] ci: eslint and prettier
---
docs/_src/_plugins/mermaid.js | 2 +-
docs/_src/js/rule-search.js | 4 +-
docs/_src/styles/callout.css | 290 +++++----
docs/package-lock.json | 1150 +++++++++++++++++++++++++++++++++
docs/package.json | 8 +-
5 files changed, 1308 insertions(+), 146 deletions(-)
diff --git a/docs/_src/_plugins/mermaid.js b/docs/_src/_plugins/mermaid.js
index 96e883e24..2fb4090ae 100644
--- a/docs/_src/_plugins/mermaid.js
+++ b/docs/_src/_plugins/mermaid.js
@@ -24,7 +24,7 @@ module.exports = (eleventyConfig, options) => {
};
let src = "https://cdn.jsdelivr.net/npm/mermaid@10.1.0/+esm";
return ``;
});
};
diff --git a/docs/_src/js/rule-search.js b/docs/_src/js/rule-search.js
index 1f2485502..686fb413e 100644
--- a/docs/_src/js/rule-search.js
+++ b/docs/_src/js/rule-search.js
@@ -66,10 +66,10 @@
updateURL();
const rules = document.querySelectorAll(".js-rule");
const langs = document.querySelectorAll(
- "#lang-filters .filter-toggle:checked"
+ "#lang-filters .filter-toggle:checked",
);
const owasp = document.querySelectorAll(
- "#owasp-filters .filter-toggle:checked"
+ "#owasp-filters .filter-toggle:checked",
);
let ruleCount = 0;
updateCounts(langs, owasp);
diff --git a/docs/_src/styles/callout.css b/docs/_src/styles/callout.css
index 538c5105a..5f9088503 100644
--- a/docs/_src/styles/callout.css
+++ b/docs/_src/styles/callout.css
@@ -1,234 +1,240 @@
/* Warning */
.elv-callout {
- --callout-primary: hsl(209, 100%, 60%);
- --callout-secondary: hsl(209, 100%, 90%);
- --callout-primarytext: #000;
- line-height: 1.5;
- margin-left: 0rem;
- margin-right: 0rem;
- margin-bottom: 2em;
- background-color: var(--callout-secondary);
- border: 3px solid var(--callout-border, var(--callout-primary));
+ --callout-primary: hsl(209, 100%, 60%);
+ --callout-secondary: hsl(209, 100%, 90%);
+ --callout-primarytext: #000;
+ line-height: 1.5;
+ margin-left: 0rem;
+ margin-right: 0rem;
+ margin-bottom: 2em;
+ background-color: var(--callout-secondary);
+ border: 3px solid var(--callout-border, var(--callout-primary));
}
details .elv-callout {
- margin-left: 0;
- margin-right: 0;
+ margin-left: 0;
+ margin-right: 0;
}
[role="tabpanel"] > .elv-callout:last-child {
- margin-bottom: 0;
+ margin-bottom: 0;
}
.elv-callout-box {
- --callout-primary: #dff7ff;
- --callout-primarytext: #000;
- --callout-secondary: #f2fcff;
+ --callout-primary: #dff7ff;
+ --callout-primarytext: #000;
+ --callout-secondary: #f2fcff;
}
-@media (min-width: 64em) { /* 1024px */
- .elv-callout {
- border-radius: 0.3em;
- }
+@media (min-width: 64em) {
+ /* 1024px */
+ .elv-callout {
+ border-radius: 0.3em;
+ }
}
.dark .elv-callout {
- --callout-primary: hsl(195, 100%, 22%);
- --callout-secondary: hsl(195, 100%, 12%);
- --callout-primarytext: #fff;
+ --callout-primary: hsl(195, 100%, 22%);
+ --callout-secondary: hsl(195, 100%, 12%);
+ --callout-primarytext: #fff;
}
.dark .elv-callout,
.dark .elv-callout a {
- color: #fff;
+ color: #fff;
}
table .elv-callout {
- margin-left: 0;
- margin-right: 0;
- margin-bottom: 1em;
+ margin-left: 0;
+ margin-right: 0;
+ margin-bottom: 1em;
}
.elv-callout-c {
- padding: 0.75em 1em; /* 12px 16px /16 */
+ padding: 0.75em 1em; /* 12px 16px /16 */
}
.elv-callout-c > p:first-child {
- margin-top: 0;
+ margin-top: 0;
}
.elv-callout-c > p:last-child {
- margin-bottom: 0;
+ margin-bottom: 0;
}
.elv-callout {
- display: flex;
- flex-direction: column;
+ display: flex;
+ flex-direction: column;
}
.elv-callout-demo {
- position: relative;
+ position: relative;
}
.elv-callout-label {
- align-self: flex-start;
- font-size: 0.9375em; /* 15px /16 */
- font-weight: 600;
+ align-self: flex-start;
+ font-size: 0.9375em; /* 15px /16 */
+ font-weight: 600;
}
.elv-callout-label,
.elv-callout-demo:before,
.elv-callout-demo:after {
- margin: 0;
- margin-right: .5em;
- border-radius: 0 0 .3em 0;
- align-items: center;
- padding: 0 0.55em;
+ margin: 0;
+ margin-right: 0.5em;
+ border-radius: 0 0 0.3em 0;
+ align-items: center;
+ padding: 0 0.55em;
}
.elv-callout-demo:before,
.elv-callout-demo:after {
- display: inline-flex;
- position: absolute;
- left: 0;
- top: 0;
- font-size: 0.8125em; /* 13px /16 */
- font-weight: 800;
+ display: inline-flex;
+ position: absolute;
+ left: 0;
+ top: 0;
+ font-size: 0.8125em; /* 13px /16 */
+ font-weight: 800;
}
.elv-callout-label,
.elv-callout-demo:before,
.elv-callout:not(.elv-callout-demo) :not(pre) > code {
- background-color: var(--callout-tag, var(--callout-primary));
- color: var(--callout-primarytext);
+ background-color: var(--callout-tag, var(--callout-primary));
+ color: var(--callout-primarytext);
}
.elv-callout a,
.elv-callout :visited {
- color: var(--callout-primarytext);
+ color: var(--callout-primarytext);
}
.elv-callout pre {
- margin-top: 1em;
- margin-bottom: 1em;
+ margin-top: 1em;
+ margin-bottom: 1em;
}
.elv-callout-label {
- font-weight: 700;
+ font-weight: 700;
}
.elv-callout-label:first-child:last-child {
- font-size: 1.2em;
- background-color: transparent;
+ font-size: 1.2em;
+ background-color: transparent;
}
/* Error */
.elv-callout-error {
- --callout-primary: hsl(0, 100%, 77%);
- --callout-secondary: hsl(0, 100%, 90%);
+ --callout-primary: hsl(0, 100%, 77%);
+ --callout-secondary: hsl(0, 100%, 90%);
}
.dark {
- .elv-callout-error {
- --callout-primary: hsl(0, 100%, 22%);
- --callout-secondary: hsl(0, 100%, 12%);
- }
+ .elv-callout-error {
+ --callout-primary: hsl(0, 100%, 22%);
+ --callout-secondary: hsl(0, 100%, 12%);
+ }
}
/* Warning */
.elv-callout-warn {
- --callout-primary: hsl(36, 100%, 62%);
- --callout-secondary: hsl(36, 100%, 85%);
+ --callout-primary: hsl(36, 100%, 62%);
+ --callout-secondary: hsl(36, 100%, 85%);
}
.dark {
- .elv-callout-warn {
- --callout-primary: hsl(36, 100%, 29%);
- --callout-secondary: hsl(36, 100%, 13%);
- }
+ .elv-callout-warn {
+ --callout-primary: hsl(36, 100%, 29%);
+ --callout-secondary: hsl(36, 100%, 13%);
+ }
}
/* Demo */
.elv-callout-demo {
- --callout-primary: transparent;
- --callout-secondary: hsl(270deg 50% 90%);
- --callout-tag: rebeccapurple;
- --callout-border: rebeccapurple;
- overflow: hidden;
- padding-left: 3.888888888889em; /* 70px /18 */
+ --callout-primary: transparent;
+ --callout-secondary: hsl(270deg 50% 90%);
+ --callout-tag: rebeccapurple;
+ --callout-border: rebeccapurple;
+ overflow: hidden;
+ padding-left: 3.888888888889em; /* 70px /18 */
}
.dark {
- .elv-callout-demo {
- --callout-primary: hsl(270deg 50% 30%);
- --callout-secondary: hsl(270deg 50% 30%);
- --callout-tag: hsl(270deg 50% 85%);
- --callout-primarytext: #fff;
- --callout-border: rebeccapurple;
- }
- .elv-callout-demo code {
- background-color: hsl(270deg 50% 15%);
- }
+ .elv-callout-demo {
+ --callout-primary: hsl(270deg 50% 30%);
+ --callout-secondary: hsl(270deg 50% 30%);
+ --callout-tag: hsl(270deg 50% 85%);
+ --callout-primarytext: #fff;
+ --callout-border: rebeccapurple;
+ }
+ .elv-callout-demo code {
+ background-color: hsl(270deg 50% 15%);
+ }
}
.elv-callout-demo:after {
- display: none;
+ display: none;
}
-@media (min-width: 37.5em) { /* 600px */
- .elv-callout-demo {
- padding-right: 3.888888888889em; /* 70px /18 */
- }
- .elv-callout-demo:after {
- display: block;
- }
+@media (min-width: 37.5em) {
+ /* 600px */
+ .elv-callout-demo {
+ padding-right: 3.888888888889em; /* 70px /18 */
+ }
+ .elv-callout-demo:after {
+ display: block;
+ }
}
.elv-callout-demo:before,
.elv-callout-demo:after {
- content: "DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO ";
- width: min-content;
- overflow: hidden;
- top: -2em;
- bottom: -1em;
- border-radius: 0;
- background-color: var(--callout-primary);
- color: var(--callout-tag);
- font-weight: 700;
- transform: skewY(-13deg);
- padding: 0 0.2857142857143em; /* 4px /14 */
- margin: 0;
+ content: "DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO DEMO ";
+ width: min-content;
+ overflow: hidden;
+ top: -2em;
+ bottom: -1em;
+ border-radius: 0;
+ background-color: var(--callout-primary);
+ color: var(--callout-tag);
+ font-weight: 700;
+ transform: skewY(-13deg);
+ padding: 0 0.2857142857143em; /* 4px /14 */
+ margin: 0;
}
.elv-callout-demo:after {
- right: 0;
- left: auto;
- margin-right: 0;
- margin-left: .5em;
- transform: skewY(13deg);
+ right: 0;
+ left: auto;
+ margin-right: 0;
+ margin-left: 0.5em;
+ transform: skewY(13deg);
}
/* Style the content inside of the callout */
.elv-callout > :first-child {
- margin-top: 0;
+ margin-top: 0;
}
.elv-callout > :last-child {
- margin-bottom: 0;
+ margin-bottom: 0;
}
/* Sticky callout is for legacy docs versions */
body > .elv-callout-sticky .elv-callout-label {
- display: none;
-}
-@media (min-width: 37.5em) and (min-height: 25em) { /* 600px / 400px */
- body > .elv-callout-sticky {
- position: sticky;
- top: 0;
- z-index: 2;
- box-shadow: 0 3px 0 0 rgba(0,0,0,.08);
- }
- body > .elv-callout-sticky .elv-callout {
- margin: 0;
- }
+ display: none;
+}
+@media (min-width: 37.5em) and (min-height: 25em) {
+ /* 600px / 400px */
+ body > .elv-callout-sticky {
+ position: sticky;
+ top: 0;
+ z-index: 2;
+ box-shadow: 0 3px 0 0 rgba(0, 0, 0, 0.08);
+ }
+ body > .elv-callout-sticky .elv-callout {
+ margin: 0;
+ }
}
/* in left nav */
-@media (max-width: 63.9375em) { /* 1023px */
- .elv-toc .elv-callout {
- border-left: 0;
- border-right: 0;
- }
-}
-@media (min-width: 64em) { /* 1024px */
- .elv-toc .elv-callout {
- margin-right: 0;
- margin-left: -1rem;
- font-size: 0.9375em; /* 15px /16 */
- line-height: 2;
- }
-}
-@media (min-width: 64em) and (max-width: 76.875em) { /* 1024px–1230px */
- .elv-toc .elv-callout {
- border-left: 0;
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- }
-}
\ No newline at end of file
+@media (max-width: 63.9375em) {
+ /* 1023px */
+ .elv-toc .elv-callout {
+ border-left: 0;
+ border-right: 0;
+ }
+}
+@media (min-width: 64em) {
+ /* 1024px */
+ .elv-toc .elv-callout {
+ margin-right: 0;
+ margin-left: -1rem;
+ font-size: 0.9375em; /* 15px /16 */
+ line-height: 2;
+ }
+}
+@media (min-width: 64em) and (max-width: 76.875em) {
+ /* 1024px–1230px */
+ .elv-toc .elv-callout {
+ border-left: 0;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+}
diff --git a/docs/package-lock.json b/docs/package-lock.json
index 1da1d7035..84fccb48f 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -14,6 +14,8 @@
"@11ty/eleventy-plugin-syntaxhighlight": "^4.1.0",
"@tailwindcss/typography": "^0.5.7",
"eleventy-plugin-toc": "^1.1.5",
+ "eslint": "^8.53.0",
+ "eslint-config-prettier": "^9.0.0",
"gitly": "^2.4.1",
"htmlencode": "^0.0.4",
"js-yaml": "^4.1.0",
@@ -183,6 +185,15 @@
"url": "https://opencollective.com/11ty"
}
},
+ "node_modules/@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/@alloc/quick-lru": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
@@ -244,6 +255,95 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
+ "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.53.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
+ "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.13",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
+ "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
+ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
+ "dev": true
+ },
"node_modules/@iarna/toml": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz",
@@ -455,6 +555,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true
+ },
"node_modules/a-sync-waterfall": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz",
@@ -462,6 +568,52 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/acorn": {
+ "version": "8.11.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
+ "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -709,6 +861,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/camelcase-css": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
@@ -968,6 +1129,12 @@
}
}
},
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -1014,6 +1181,18 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/doctypes": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
@@ -1169,6 +1348,130 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/eslint": {
+ "version": "8.53.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
+ "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.3",
+ "@eslint/js": "8.53.0",
+ "@humanwhocodes/config-array": "^0.11.13",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
+ "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==",
+ "dev": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
"node_modules/esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
@@ -1183,6 +1486,48 @@
"node": ">=4"
}
},
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/eventemitter3": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
@@ -1203,6 +1548,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
"node_modules/fast-glob": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz",
@@ -1220,6 +1571,18 @@
"node": ">=8.6.0"
}
},
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
"node_modules/fastq": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
@@ -1230,6 +1593,18 @@
"reusify": "^1.0.4"
}
},
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
"node_modules/filelist": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
@@ -1312,6 +1687,22 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/flat-cache": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
@@ -1487,6 +1878,21 @@
"node": ">= 6"
}
},
+ "node_modules/globals": {
+ "version": "13.23.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
@@ -1494,6 +1900,12 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
"node_modules/gray-matter": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz",
@@ -1671,6 +2083,40 @@
"node": ">= 0.10"
}
},
+ "node_modules/ignore": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
+ "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -1826,6 +2272,15 @@
"node": ">=0.12.0"
}
},
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-promise": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
@@ -1916,6 +2371,18 @@
"js-yaml": "bin/js-yaml.js"
}
},
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
"node_modules/jstransformer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
@@ -1957,6 +2424,19 @@
"node": ">=6"
}
},
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/lilconfig": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
@@ -2026,6 +2506,21 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/lodash.castarray": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
@@ -2367,6 +2862,12 @@
"thenify-all": "^1.0.0"
}
},
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
"node_modules/neo-async": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
@@ -2497,6 +2998,23 @@
"wrappy": "1"
}
},
+ "node_modules/optionator": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dev": true,
+ "dependencies": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
@@ -2507,6 +3025,36 @@
"node": ">=4"
}
},
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/p-queue": {
"version": "6.6.2",
"resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz",
@@ -2537,6 +3085,18 @@
"node": ">=8"
}
},
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/parse-srcset": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz",
@@ -2581,6 +3141,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -2966,6 +3535,15 @@
"node": ">= 4"
}
},
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/prismjs": {
"version": "1.29.0",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
@@ -3153,6 +3731,15 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -3233,6 +3820,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -3411,6 +4007,18 @@
"node": ">= 0.8"
}
},
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/strip-bom-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
@@ -3421,6 +4029,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/sucrase": {
"version": "3.33.0",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.33.0.tgz",
@@ -3593,6 +4213,12 @@
"node": ">=10"
}
},
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
"node_modules/thenify": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
@@ -3660,6 +4286,30 @@
"dev": true,
"license": "Apache-2.0"
},
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/uc.micro": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
@@ -3698,6 +4348,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -3817,6 +4476,18 @@
"engines": {
"node": ">= 14"
}
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
}
},
"dependencies": {
@@ -3928,6 +4599,12 @@
"integrity": "sha512-Mqt6im1xpb1Ykn3nbcCovWXK3ggywRJa+IXIdoz4wIIK+cvozADH63lexcuPpGS/gJ6/m2JxyyXDyupkMr5DHw==",
"dev": true
},
+ "@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true
+ },
"@alloc/quick-lru": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
@@ -3963,6 +4640,67 @@
"to-fast-properties": "^2.0.0"
}
},
+ "@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "@eslint-community/regexpp": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "dev": true
+ },
+ "@eslint/eslintrc": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
+ "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ }
+ },
+ "@eslint/js": {
+ "version": "8.53.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
+ "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
+ "dev": true
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.11.13",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
+ "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^2.0.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ }
+ },
+ "@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
+ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
+ "dev": true
+ },
"@iarna/toml": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz",
@@ -4125,12 +4863,49 @@
"integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
"dev": true
},
+ "@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true
+ },
"a-sync-waterfall": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz",
"integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==",
"dev": true
},
+ "acorn": {
+ "version": "8.11.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
+ "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -4310,6 +5085,12 @@
"get-intrinsic": "^1.0.2"
}
},
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
"camelcase-css": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
@@ -4483,6 +5264,12 @@
"ms": "2.1.2"
}
},
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -4513,6 +5300,15 @@
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
"dev": true
},
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
"doctypes": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
@@ -4613,12 +5409,133 @@
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true
},
+ "eslint": {
+ "version": "8.53.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
+ "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.3",
+ "@eslint/js": "8.53.0",
+ "@humanwhocodes/config-array": "^0.11.13",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ }
+ }
+ },
+ "eslint-config-prettier": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
+ "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true
+ },
+ "espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ }
+ },
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true
},
+ "esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
"eventemitter3": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
@@ -4634,6 +5551,12 @@
"is-extendable": "^0.1.0"
}
},
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
"fast-glob": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz",
@@ -4647,6 +5570,18 @@
"micromatch": "^4.0.4"
}
},
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
"fastq": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
@@ -4656,6 +5591,15 @@
"reusify": "^1.0.4"
}
},
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
"filelist": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
@@ -4726,6 +5670,16 @@
}
}
},
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
"flat-cache": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
@@ -4843,12 +5797,27 @@
"is-glob": "^4.0.1"
}
},
+ "globals": {
+ "version": "13.23.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
"graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
+ "graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
"gray-matter": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz",
@@ -4967,6 +5936,28 @@
"integrity": "sha512-TScO04soylRN9i/QdOdgZyhydXg9z6XdaGzEyOgDKycePeDeTT4KvigjBcI+tgfTlieLWauGORMq5F1eIDa+1w==",
"dev": true
},
+ "ignore": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
+ "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true
+ },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -5074,6 +6065,12 @@
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
},
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ },
"is-promise": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
@@ -5135,6 +6132,18 @@
"argparse": "^2.0.1"
}
},
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
"jstransformer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
@@ -5163,6 +6172,16 @@
"integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
"dev": true
},
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
"lilconfig": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
@@ -5212,6 +6231,15 @@
"integrity": "sha512-+dAZZ2mM+/m+vY9ezfoueVvrgnHIGi5FvgSymbIgJOFwiznWyA59mav95L+Mc6xPtL3s9gm5eNTlNtxJLbNM1g==",
"dev": true
},
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
"lodash.castarray": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
@@ -5454,6 +6482,12 @@
"thenify-all": "^1.0.0"
}
},
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
"neo-async": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
@@ -5533,12 +6567,44 @@
"wrappy": "1"
}
},
+ "optionator": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dev": true,
+ "requires": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
+ }
+ },
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
"integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
"dev": true
},
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
"p-queue": {
"version": "6.6.2",
"resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz",
@@ -5558,6 +6624,15 @@
"p-finally": "^1.0.0"
}
},
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
"parse-srcset": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz",
@@ -5589,6 +6664,12 @@
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
"dev": true
},
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -5819,6 +6900,12 @@
"promise-each": "^2.2.0"
}
},
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
"prismjs": {
"version": "1.29.0",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
@@ -5987,6 +7074,12 @@
"integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==",
"dev": true
},
+ "punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true
+ },
"queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -6039,6 +7132,12 @@
"supports-preserve-symlinks-flag": "^1.0.0"
}
},
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
"reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -6148,12 +7247,27 @@
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"dev": true
},
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
"strip-bom-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
"integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==",
"dev": true
},
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
"sucrase": {
"version": "3.33.0",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.33.0.tgz",
@@ -6275,6 +7389,12 @@
}
}
},
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
"thenify": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
@@ -6326,6 +7446,21 @@
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
"dev": true
},
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ },
"uc.micro": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
@@ -6351,6 +7486,15 @@
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
"dev": true
},
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -6430,6 +7574,12 @@
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz",
"integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==",
"dev": true
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
}
}
}
diff --git a/docs/package.json b/docs/package.json
index ac42d74b9..adf700caf 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -8,7 +8,11 @@
"start": "eleventy --serve --incremental & npx tailwindcss -i _src/styles/tailwind.css -c _src/styles/tailwind.config.js -o _site/style.css --watch",
"debug": "DEBUG=Eleventy* eleventy --serve & npx tailwindcss -i _src/styles/tailwind.css -c _src/styles/tailwind.config.js -o _site/style.css --watch",
"build": "ELEVENTY_PRODUCTION=true eleventy && NODE_ENV=production npx tailwindcss -i _src/styles/tailwind.css -c _src/styles/tailwind.config.js -o _site/style.css --minify",
- "clean": "rm -rf _site _tmp"
+ "clean": "rm -rf _site _tmp",
+ "lint": "npx eslint _src",
+ "lint:fix": "npm run lint -- --fix",
+ "prettier": "npx prettier _src --check",
+ "prettier:fix": "npm run prettier -- --write"
},
"keywords": [],
"author": "",
@@ -19,6 +23,8 @@
"@11ty/eleventy-plugin-syntaxhighlight": "^4.1.0",
"@tailwindcss/typography": "^0.5.7",
"eleventy-plugin-toc": "^1.1.5",
+ "eslint": "^8.53.0",
+ "eslint-config-prettier": "^9.0.0",
"gitly": "^2.4.1",
"htmlencode": "^0.0.4",
"js-yaml": "^4.1.0",
From 4d9d15aea6e4cdcd98e1c0aee731531dfc9092a9 Mon Sep 17 00:00:00 2001
From: gotbadger
Date: Fri, 17 Nov 2023 10:55:09 +0000
Subject: [PATCH 2/7] fix: eslint issues
---
docs/.eslintrc.js | 15 +++++++++++++++
docs/_data/datatypes.js | 21 ++++++++-------------
docs/_data/recipes.js | 28 ++++++++++++----------------
docs/_data/rules.js | 4 ----
docs/_src/js/rule-search.js | 8 ++++----
docs/package.json | 4 ++--
6 files changed, 41 insertions(+), 39 deletions(-)
create mode 100644 docs/.eslintrc.js
diff --git a/docs/.eslintrc.js b/docs/.eslintrc.js
new file mode 100644
index 000000000..5d91982b0
--- /dev/null
+++ b/docs/.eslintrc.js
@@ -0,0 +1,15 @@
+module.exports = {
+ env: {
+ browser: true,
+ commonjs: true,
+ es2021: true,
+ node: true,
+ },
+ extends: [
+ 'eslint:recommended',
+ 'prettier'
+ ],
+ parserOptions: {
+ ecmaVersion: 'latest',
+ }
+};
diff --git a/docs/_data/datatypes.js b/docs/_data/datatypes.js
index 0473e7f43..9c6ae1867 100644
--- a/docs/_data/datatypes.js
+++ b/docs/_data/datatypes.js
@@ -9,17 +9,13 @@ async function fetchFile(location) {
}
async function fetchData(dir) {
- try {
- const files = await readdir(dir);
- let result = await Promise.all(
- files.map(async (file) => {
- return await fetchFile(path.join(dir, file));
- })
- );
- return result;
- } catch (err) {
- throw err;
- }
+ const files = await readdir(dir);
+ let result = await Promise.all(
+ files.map(async (file) => {
+ return await fetchFile(path.join(dir, file));
+ })
+ );
+ return result;
}
function sortData(typesFile, catsFile, groupsFile) {
@@ -31,12 +27,11 @@ function sortData(typesFile, catsFile, groupsFile) {
// setup groups
// makes output[key] per group where key is UUID of group(PD, pii, etc)
for (const key in groupsFile.groups) {
- outputResult = {
+ output[key] = {
uuid: key,
categories: {},
...groupsFile.groups[key],
};
- output[key] = outputResult;
}
// add categories to each group
diff --git a/docs/_data/recipes.js b/docs/_data/recipes.js
index 2b8511489..16c32873e 100644
--- a/docs/_data/recipes.js
+++ b/docs/_data/recipes.js
@@ -8,22 +8,18 @@ async function fetchFile(location) {
}
async function fetchData(dir) {
- try {
- const files = await readdir(dir);
- let result = await Promise.all(
- files.map(async (file) => {
- let data = await fetchFile(path.join(dir, file));
- return {
- ...data,
- id: path.basename(file, ".json"),
- source: `/internal/classification/db/recipes/${file}`,
- };
- })
- );
- return result;
- } catch (err) {
- throw err;
- }
+ const files = await readdir(dir);
+ let result = await Promise.all(
+ files.map(async (file) => {
+ let data = await fetchFile(path.join(dir, file));
+ return {
+ ...data,
+ id: path.basename(file, ".json"),
+ source: `/internal/classification/db/recipes/${file}`,
+ };
+ })
+ );
+ return result;
}
module.exports = async function () {
let recipes = await fetchData("../internal/classification/db/recipes/");
diff --git a/docs/_data/rules.js b/docs/_data/rules.js
index f2f9d0002..af2fc8b77 100644
--- a/docs/_data/rules.js
+++ b/docs/_data/rules.js
@@ -76,7 +76,6 @@ async function fetchRelease() {
async function fetchData(location) {
let rules = []
- try {
const dirs = await readdir(location)
// ex: looping through rules [ruby, gitleaks, sql]
dirs.forEach(async (dir) => {
@@ -119,9 +118,6 @@ async function fetchData(location) {
}
})
return { counts, rules }
- } catch (err) {
- throw err
- }
}
async function fetchAllFiles(directory, breadcrumb, files) {
diff --git a/docs/_src/js/rule-search.js b/docs/_src/js/rule-search.js
index 686fb413e..b5d0b1f25 100644
--- a/docs/_src/js/rule-search.js
+++ b/docs/_src/js/rule-search.js
@@ -5,7 +5,7 @@
const owaspCounter = document.querySelector(".js-owasp-count");
const ruleCounter = document.querySelector(".js-rule-count");
filterTriggers.forEach((button) => {
- button.addEventListener("click", (e) => {
+ button.addEventListener("click", () => {
const parent = button.parentElement;
if (parent.classList.contains("filter-open")) {
parent.classList.remove("filter-open");
@@ -105,18 +105,18 @@
form.addEventListener("submit", (e) => {
e.preventDefault();
});
- input.addEventListener("keyup", (e) => {
+ input.addEventListener("keyup", () => {
clearTimeout(timer);
timer = setTimeout(filterResults, delay);
});
checkboxes.forEach((checkbox) => {
- checkbox.addEventListener("change", (e) => {
+ checkbox.addEventListener("change", () => {
filterResults();
});
});
- resetButton.addEventListener("click", (e) => {
+ resetButton.addEventListener("click", () => {
resetForm(input);
});
diff --git a/docs/package.json b/docs/package.json
index adf700caf..927946334 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -9,9 +9,9 @@
"debug": "DEBUG=Eleventy* eleventy --serve & npx tailwindcss -i _src/styles/tailwind.css -c _src/styles/tailwind.config.js -o _site/style.css --watch",
"build": "ELEVENTY_PRODUCTION=true eleventy && NODE_ENV=production npx tailwindcss -i _src/styles/tailwind.css -c _src/styles/tailwind.config.js -o _site/style.css --minify",
"clean": "rm -rf _site _tmp",
- "lint": "npx eslint _src",
+ "lint": "npx eslint --ignore-path .gitignore .",
"lint:fix": "npm run lint -- --fix",
- "prettier": "npx prettier _src --check",
+ "prettier": "npx prettier --ignore-path .gitignore . --check",
"prettier:fix": "npm run prettier -- --write"
},
"keywords": [],
From 64c2e59687f711b1a3d6cb677757e1df2d87a4ef Mon Sep 17 00:00:00 2001
From: gotbadger
Date: Fri, 17 Nov 2023 10:56:53 +0000
Subject: [PATCH 3/7] fix: prettier issues
---
docs/.eleventy.js | 217 ++++++++---------
docs/.eslintrc.js | 9 +-
docs/404.md | 2 +-
docs/_data/bearer.yaml | 20 +-
docs/_data/bearerAction.js | 2 +-
docs/_data/bearer_completion.yaml | 12 +-
docs/_data/bearer_ignore_add.yaml | 98 ++++----
docs/_data/bearer_ignore_migrate.yaml | 80 +++----
docs/_data/bearer_ignore_pull.yaml | 74 +++---
docs/_data/bearer_ignore_remove.yaml | 74 +++---
docs/_data/bearer_ignore_show.yaml | 80 +++----
docs/_data/bearer_init.yaml | 12 +-
docs/_data/bearer_scan.yaml | 222 +++++++++---------
docs/_data/bearer_version.yaml | 70 +++---
docs/_data/datatypes.js | 10 +-
docs/_data/examples/ci/circleci/basic.yaml | 2 +-
.../_data/examples/ci/circleci/reviewdog.yaml | 2 +-
.../ci/github/basic-with-options.yaml | 6 +-
docs/_data/examples/ci/github/basic.yaml | 2 +-
docs/_data/examples/ci/github/cloud.yaml | 2 +-
.../_data/examples/ci/github/defect-dojo.yaml | 2 +-
.../examples/ci/github/diff-reviewdog.yaml | 2 +-
docs/_data/examples/ci/github/diff.yaml | 2 +-
docs/_data/examples/ci/github/sarif.yaml | 2 +-
docs/_data/examples/ci/gitlab/basic.yaml | 2 +-
docs/_data/examples/ci/gitlab/cloud.yaml | 4 +-
.../examples/ci/gitlab/diff-reviewdog.yaml | 2 +-
docs/_data/examples/ci/gitlab/diff.yaml | 4 +-
docs/_data/examples/ci/gitlab/sast.yaml | 4 +-
docs/_data/github.js | 2 +-
docs/_data/meta.js | 2 +-
docs/_data/nav.js | 2 +-
docs/_data/recipes.js | 4 +-
docs/_data/rules.js | 186 +++++++--------
docs/contributing/code.md | 6 +-
docs/contributing/docs.md | 11 +-
docs/contributing/index.md | 1 +
docs/contributing/recipes.md | 8 +-
docs/docs.md | 33 +--
.../discovery-and-classification.md | 12 +-
docs/explanations/index.md | 2 +-
docs/explanations/reports.md | 2 +-
docs/explanations/scanners.md | 2 -
docs/explanations/severity.md | 7 +-
docs/explanations/workflow.md | 24 +-
docs/guides/bearer-cloud.md | 21 +-
docs/guides/configure-scan.md | 12 +-
docs/guides/custom-rule.md | 32 ++-
docs/guides/dataflow.md | 62 ++---
docs/guides/github-action.md | 4 +-
docs/guides/gitlab.md | 2 -
docs/guides/index.md | 2 +-
docs/guides/integration-strategy.md | 34 +--
docs/guides/privacy.md | 12 +-
docs/guides/shell-completion.md | 2 +-
docs/quickstart.md | 1 -
docs/readme.md | 2 +-
docs/reference/config.md | 86 +++----
docs/reference/index.md | 2 +-
docs/reference/installation.md | 1 -
60 files changed, 799 insertions(+), 800 deletions(-)
diff --git a/docs/.eleventy.js b/docs/.eleventy.js
index c478660b0..c7a54f5b6 100644
--- a/docs/.eleventy.js
+++ b/docs/.eleventy.js
@@ -1,96 +1,96 @@
-const syntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight")
+const syntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight");
const {
EleventyHtmlBasePlugin,
EleventyRenderPlugin,
-} = require("@11ty/eleventy")
-
-const yaml = require("js-yaml")
-const markdownIt = require("markdown-it")
-const markdownItEmoji = require("markdown-it-emoji")
-const markdownItAnchor = require("markdown-it-anchor")
-const pluginTOC = require("eleventy-plugin-toc")
-const now = String(Date.now())
-const path = require("path")
-const fs = require("fs")
-const mermaid = require("./_src/_plugins/mermaid")
-const nav = require("./_data/nav")
+} = require("@11ty/eleventy");
+
+const yaml = require("js-yaml");
+const markdownIt = require("markdown-it");
+const markdownItEmoji = require("markdown-it-emoji");
+const markdownItAnchor = require("markdown-it-anchor");
+const pluginTOC = require("eleventy-plugin-toc");
+const now = String(Date.now());
+const path = require("path");
+const fs = require("fs");
+const mermaid = require("./_src/_plugins/mermaid");
+const nav = require("./_data/nav");
const mdSetup = markdownIt({ html: true })
.use(markdownItEmoji)
- .use(markdownItAnchor)
+ .use(markdownItAnchor);
mdSetup.renderer.rules.code_inline = (tokens, idx, { langPrefix = "" }) => {
- const token = tokens[idx]
+ const token = tokens[idx];
return `${mdSetup.utils.escapeHtml(
- token.content
- )}
`
-}
+ token.content,
+ )}`;
+};
module.exports = function (eleventyConfig) {
- eleventyConfig.addWatchTarget("./_src/styles/tailwind.config.js")
- eleventyConfig.addWatchTarget("./_src/styles/tailwind.css")
- eleventyConfig.addWatchTarget("./_src/js/*.js")
- eleventyConfig.addPassthroughCopy("assets/img")
- eleventyConfig.addPassthroughCopy("assets/fonts")
+ eleventyConfig.addWatchTarget("./_src/styles/tailwind.config.js");
+ eleventyConfig.addWatchTarget("./_src/styles/tailwind.css");
+ eleventyConfig.addWatchTarget("./_src/js/*.js");
+ eleventyConfig.addPassthroughCopy("assets/img");
+ eleventyConfig.addPassthroughCopy("assets/fonts");
eleventyConfig.addPassthroughCopy({
"./_src/styles/prism-theme.css": "./prism-theme.css",
- })
+ });
eleventyConfig.addPassthroughCopy({
"./_src/styles/callout.css": "./callout.css",
- })
- eleventyConfig.addPassthroughCopy({ "./_src/js/app.js": "./app.js" })
+ });
+ eleventyConfig.addPassthroughCopy({ "./_src/js/app.js": "./app.js" });
eleventyConfig.addPassthroughCopy({
"./_src/js/rule-search.js": "./rule-search.js",
- })
- eleventyConfig.addPassthroughCopy({ "./_tmp/style.css": "./style.css" })
- eleventyConfig.addPassthroughCopy({ "./robots.txt": "./robots.txt" })
- eleventyConfig.addPassthroughCopy({ "./_redirects": "./_redirects" })
- eleventyConfig.addDataExtension("yaml", (contents) => yaml.load(contents))
+ });
+ eleventyConfig.addPassthroughCopy({ "./_tmp/style.css": "./style.css" });
+ eleventyConfig.addPassthroughCopy({ "./robots.txt": "./robots.txt" });
+ eleventyConfig.addPassthroughCopy({ "./_redirects": "./_redirects" });
+ eleventyConfig.addDataExtension("yaml", (contents) => yaml.load(contents));
eleventyConfig.addShortcode("version", function () {
- return now
- })
+ return now;
+ });
eleventyConfig.addShortcode("sectionLinks", function (sectionName) {
- const section = nav.find((item) => item.name == sectionName)
- let out = ""
+ const section = nav.find((item) => item.name == sectionName);
+ let out = "";
if (section) {
section.items.forEach((item) => {
- out += `- [${item.name}](${item.url})\n`
- })
+ out += `- [${item.name}](${item.url})\n`;
+ });
}
- return out
- })
+ return out;
+ });
// {% yamlExample "ci/gitlab/basic" %}
eleventyConfig.addShortcode("yamlExample", function (exampleName) {
const example = fs.readFileSync(
`./_data/examples/${exampleName}.yaml`,
- "utf8"
- )
- return "```yaml\n" + example + "\n```"
- })
+ "utf8",
+ );
+ return "```yaml\n" + example + "\n```";
+ });
eleventyConfig.addShortcode("githubAction", function (data) {
- out = "| Option | Description | Default |\n"
- out += "| - | - | - |\n"
+ out = "| Option | Description | Default |\n";
+ out += "| - | - | - |\n";
Object.keys(data)
.sort()
.forEach((key) => {
- const item = data[key]
- const default_val = item.default ? "`" + item.default + "`" : ""
- out += `| **${key}** | ${item.description} | ${default_val} |\n`
- })
- return out
- })
-
- eleventyConfig.setLibrary("md", mdSetup)
+ const item = data[key];
+ const default_val = item.default ? "`" + item.default + "`" : "";
+ out += `| **${key}** | ${item.description} | ${default_val} |\n`;
+ });
+ return out;
+ });
+
+ eleventyConfig.setLibrary("md", mdSetup);
eleventyConfig.addPlugin(EleventyHtmlBasePlugin, {
baseHref: "/",
- })
+ });
- eleventyConfig.addPlugin(EleventyRenderPlugin)
- eleventyConfig.addPlugin(syntaxHighlight)
+ eleventyConfig.addPlugin(EleventyRenderPlugin);
+ eleventyConfig.addPlugin(syntaxHighlight);
// mermaid rendering
eleventyConfig.addPlugin(mermaid, {
@@ -106,30 +106,31 @@ module.exports = function (eleventyConfig) {
clusterBkg: "transparent",
secondaryColor: "hsl(243,27%,35%)",
},
- })
+ });
eleventyConfig.addPlugin(pluginTOC, {
wrapper: "nav",
- })
+ });
eleventyConfig.addFilter("sortById", (arr) => {
- arr.sort((a, b) => (a.metadata.id > b.metadata.id ? 1 : -1))
- return arr
- })
+ arr.sort((a, b) => (a.metadata.id > b.metadata.id ? 1 : -1));
+ return arr;
+ });
eleventyConfig.addFilter("setAttribute", (obj, key, value) => {
- obj[key] = value
- return obj
- })
+ obj[key] = value;
+ return obj;
+ });
eleventyConfig.addFilter("deduplicate", (arr) => {
const result = arr.filter(
- (value, index, self) => index === self.findIndex((t) => t.id === value.id)
- )
- return result
- })
+ (value, index, self) =>
+ index === self.findIndex((t) => t.id === value.id),
+ );
+ return result;
+ });
eleventyConfig.addFilter("keysToArr", (data) => {
- return Object.keys(data)
- })
+ return Object.keys(data);
+ });
eleventyConfig.addFilter("rewriteFrameworks", (word) => {
function updatePhrase(word) {
const dictionary = {
@@ -138,93 +139,93 @@ module.exports = function (eleventyConfig) {
express: "ExpressJS",
react: "React",
third_parties: "Third party",
- }
+ };
if (dictionary[word]) {
- return dictionary[word]
+ return dictionary[word];
}
- return word
+ return word;
}
if (typeof word === "string") {
- return updatePhrase(word)
+ return updatePhrase(word);
} else if (Array.isArray(word)) {
- let cleaned = word.filter((w) => w !== "third_parties")
- return cleaned.map((w) => updatePhrase(w))
+ let cleaned = word.filter((w) => w !== "third_parties");
+ return cleaned.map((w) => updatePhrase(w));
} else if (typeof word === "object") {
- let cleaned = Object.keys(word).filter((w) => w !== "third_parties")
- return cleaned.map((w) => updatePhrase(w))
+ let cleaned = Object.keys(word).filter((w) => w !== "third_parties");
+ return cleaned.map((w) => updatePhrase(w));
}
- return word
- })
+ return word;
+ });
eleventyConfig.addNunjucksFilter("packageMap", (name, manager, group) => {
switch (manager) {
case "rubygems":
- return `https://rubygems.org/gems/${name}`
+ return `https://rubygems.org/gems/${name}`;
case "packagist":
- return `https://packagist.org/packages/${name}`
+ return `https://packagist.org/packages/${name}`;
case "go":
- return `https://${name}`
+ return `https://${name}`;
case "npm":
- return `https://www.npmjs.com/package/${name}`
+ return `https://www.npmjs.com/package/${name}`;
case "pypi":
- return `https://pypi.org/project/${name}`
+ return `https://pypi.org/project/${name}`;
case "maven":
- return `https://mvnrepository.com/artifact/${group}/${name}`
+ return `https://mvnrepository.com/artifact/${group}/${name}`;
case "nuget":
- return `https://www.nuget.org/packages/${name}`
+ return `https://www.nuget.org/packages/${name}`;
default:
- return "/"
+ return "/";
}
- })
+ });
eleventyConfig.addNunjucksGlobal("navHighlight", (parent, child) => {
- const target = parent.split(path.sep).slice(1, -1)
- const check = child.split(path.sep).slice(1, -1)
+ const target = parent.split(path.sep).slice(1, -1);
+ const check = child.split(path.sep).slice(1, -1);
// handles individual rule pages highlighting "rule" in side nav
- const isRule = target.includes("rules")
+ const isRule = target.includes("rules");
if (child === parent || isRule) {
- return true
+ return true;
} else {
- return false
+ return false;
}
- })
+ });
eleventyConfig.addPairedShortcode(
"callout",
function (content, level = "", format = "html", customLabel = "") {
if (format === "md") {
- content = mdIt.renderInline(content)
+ content = mdIt.renderInline(content);
} else if (format === "md-block") {
- content = mdIt.render(content)
+ content = mdIt.render(content);
}
- let label = ""
+ let label = "";
if (customLabel) {
- label = customLabel
+ label = customLabel;
} else if (level === "info" || level === "error") {
- label = level.toUpperCase()
+ label = level.toUpperCase();
} else if (level === "warn") {
- label = "WARNING"
+ label = "WARNING";
}
let labelHtml = label
? `${customLabel || label}
`
- : ""
+ : "";
let contentHtml =
(content || "").trim().length > 0
? `${content}
`
- : ""
+ : "";
return `${labelHtml}${contentHtml}
`
- }
- )
+ }">${labelHtml}${contentHtml}`;
+ },
+ );
return {
dir: {
includes: "_src/_includes",
output: "_site",
},
- }
-}
+ };
+};
diff --git a/docs/.eslintrc.js b/docs/.eslintrc.js
index 5d91982b0..96b43ff43 100644
--- a/docs/.eslintrc.js
+++ b/docs/.eslintrc.js
@@ -5,11 +5,8 @@ module.exports = {
es2021: true,
node: true,
},
- extends: [
- 'eslint:recommended',
- 'prettier'
- ],
+ extends: ["eslint:recommended", "prettier"],
parserOptions: {
- ecmaVersion: 'latest',
- }
+ ecmaVersion: "latest",
+ },
};
diff --git a/docs/404.md b/docs/404.md
index 3c590bd08..944cebeda 100644
--- a/docs/404.md
+++ b/docs/404.md
@@ -12,4 +12,4 @@ Sorry, but we couldn't find the page you were looking for.
- Want to get started right away? Head over to the [quick start guide](/quickstart/).
- Bearer CLI detects [all sorts of data types](/reference/datatypes/) and has [built-in rules](/reference/rules/) to check for data security risks.
-If you're looking for help using Bearer CLI, you can [create a new issue on GitHub]({{meta.links.issues}}) or join our [discord community]({{meta.links.discord}}).
\ No newline at end of file
+If you're looking for help using Bearer CLI, you can [create a new issue on GitHub]({{meta.links.issues}}) or join our [discord community]({{meta.links.discord}}).
diff --git a/docs/_data/bearer.yaml b/docs/_data/bearer.yaml
index ad8f01ef7..95d04bf3c 100644
--- a/docs/_data/bearer.yaml
+++ b/docs/_data/bearer.yaml
@@ -1,13 +1,13 @@
name: bearer
options:
- - name: help
- shorthand: h
- default_value: "false"
- usage: help for bearer
+ - name: help
+ shorthand: h
+ default_value: "false"
+ usage: help for bearer
see_also:
- - bearer completion - Generate the autocompletion script for the your shell.
- - bearer ignore - Manage ignored fingerprints
- - bearer init - Generates a default config to `bearer.yml`
- - bearer scan - Scan a directory or file
- - bearer version - Print the version
-aliases:
+ - bearer completion - Generate the autocompletion script for the your shell.
+ - bearer ignore - Manage ignored fingerprints
+ - bearer init - Generates a default config to `bearer.yml`
+ - bearer scan - Scan a directory or file
+ - bearer version - Print the version
+aliases:
diff --git a/docs/_data/bearerAction.js b/docs/_data/bearerAction.js
index b35f594b9..e537fc85d 100644
--- a/docs/_data/bearerAction.js
+++ b/docs/_data/bearerAction.js
@@ -8,7 +8,7 @@ module.exports = async function () {
{
duration: "60m",
type: "text",
- }
+ },
);
action = yaml.load(response);
} catch (err) {
diff --git a/docs/_data/bearer_completion.yaml b/docs/_data/bearer_completion.yaml
index c14e06d7b..574780a31 100644
--- a/docs/_data/bearer_completion.yaml
+++ b/docs/_data/bearer_completion.yaml
@@ -2,10 +2,10 @@ name: bearer completion
synopsis: Generate the autocompletion script for the your shell.
usage: bearer completion [command]
options:
- - name: help
- shorthand: h
- default_value: "false"
- usage: help for completion
+ - name: help
+ shorthand: h
+ default_value: "false"
+ usage: help for completion
see_also:
- - 'bearer - '
-aliases:
+ - "bearer - "
+aliases:
diff --git a/docs/_data/bearer_ignore_add.yaml b/docs/_data/bearer_ignore_add.yaml
index 170583e33..5c84e8f86 100644
--- a/docs/_data/bearer_ignore_add.yaml
+++ b/docs/_data/bearer_ignore_add.yaml
@@ -2,54 +2,54 @@ name: bearer ignore add
synopsis: Add an ignored fingerprint
usage: bearer ignore add [flags]
options:
- - name: api-key
- usage: Use your Bearer API Key to send the report to Bearer.
- - name: author
- shorthand: a
- usage: |
- Add author information to this ignored finding. (default output of "git config user.name")
- - name: comment
- usage: Add a comment to this ignored finding.
- - name: config-file
- default_value: bearer.yml
- usage: Load configuration from the specified path.
- - name: debug
- default_value: "false"
- usage: Enable debug logs. Equivalent to --log-level=debug
- - name: debug-profile
- default_value: "false"
- usage: Generate profiling data for debugging
- - name: disable-version-check
- default_value: "false"
- usage: Disable Bearer version checking
- - name: false-positive
- default_value: "false"
- usage: Mark an this ignored finding as false positive.
- - name: force
- default_value: "false"
- usage: Overwrite an existing ignored finding.
- - name: help
- shorthand: h
- default_value: "false"
- usage: help for add
- - name: host
- default_value: my.bearer.sh
- usage: Specify the Host for sending the report.
- - name: ignore-file
- default_value: bearer.ignore
- usage: Load ignore file from the specified path.
- - name: ignore-git
- default_value: "false"
- usage: Ignore Git listing
- - name: log-level
- default_value: info
- usage: Set log level (error, info, debug, trace)
- - name: no-color
- default_value: "false"
- usage: Disable color in output
+ - name: api-key
+ usage: Use your Bearer API Key to send the report to Bearer.
+ - name: author
+ shorthand: a
+ usage: |
+ Add author information to this ignored finding. (default output of "git config user.name")
+ - name: comment
+ usage: Add a comment to this ignored finding.
+ - name: config-file
+ default_value: bearer.yml
+ usage: Load configuration from the specified path.
+ - name: debug
+ default_value: "false"
+ usage: Enable debug logs. Equivalent to --log-level=debug
+ - name: debug-profile
+ default_value: "false"
+ usage: Generate profiling data for debugging
+ - name: disable-version-check
+ default_value: "false"
+ usage: Disable Bearer version checking
+ - name: false-positive
+ default_value: "false"
+ usage: Mark an this ignored finding as false positive.
+ - name: force
+ default_value: "false"
+ usage: Overwrite an existing ignored finding.
+ - name: help
+ shorthand: h
+ default_value: "false"
+ usage: help for add
+ - name: host
+ default_value: my.bearer.sh
+ usage: Specify the Host for sending the report.
+ - name: ignore-file
+ default_value: bearer.ignore
+ usage: Load ignore file from the specified path.
+ - name: ignore-git
+ default_value: "false"
+ usage: Ignore Git listing
+ - name: log-level
+ default_value: info
+ usage: Set log level (error, info, debug, trace)
+ - name: no-color
+ default_value: "false"
+ usage: Disable color in output
example: |-
- # Add an ignored fingerprint to your ignore file
- $ bearer ignore add --author Mish --comment "Possible false positive"
+ # Add an ignored fingerprint to your ignore file
+ $ bearer ignore add --author Mish --comment "Possible false positive"
see_also:
- - bearer ignore - Manage ignored fingerprints
-aliases:
+ - bearer ignore - Manage ignored fingerprints
+aliases:
diff --git a/docs/_data/bearer_ignore_migrate.yaml b/docs/_data/bearer_ignore_migrate.yaml
index 9795e8f9a..ffe88659a 100644
--- a/docs/_data/bearer_ignore_migrate.yaml
+++ b/docs/_data/bearer_ignore_migrate.yaml
@@ -2,45 +2,45 @@ name: bearer ignore migrate
synopsis: Migrate ignored fingerprints from bearer.yml to ignore file
usage: bearer ignore migrate [flags]
options:
- - name: api-key
- usage: Use your Bearer API Key to send the report to Bearer.
- - name: config-file
- default_value: bearer.yml
- usage: Load configuration from the specified path.
- - name: debug
- default_value: "false"
- usage: Enable debug logs. Equivalent to --log-level=debug
- - name: debug-profile
- default_value: "false"
- usage: Generate profiling data for debugging
- - name: disable-version-check
- default_value: "false"
- usage: Disable Bearer version checking
- - name: force
- default_value: "false"
- usage: Overwrite an existing ignored finding.
- - name: help
- shorthand: h
- default_value: "false"
- usage: help for migrate
- - name: host
- default_value: my.bearer.sh
- usage: Specify the Host for sending the report.
- - name: ignore-file
- default_value: bearer.ignore
- usage: Load ignore file from the specified path.
- - name: ignore-git
- default_value: "false"
- usage: Ignore Git listing
- - name: log-level
- default_value: info
- usage: Set log level (error, info, debug, trace)
- - name: no-color
- default_value: "false"
- usage: Disable color in output
+ - name: api-key
+ usage: Use your Bearer API Key to send the report to Bearer.
+ - name: config-file
+ default_value: bearer.yml
+ usage: Load configuration from the specified path.
+ - name: debug
+ default_value: "false"
+ usage: Enable debug logs. Equivalent to --log-level=debug
+ - name: debug-profile
+ default_value: "false"
+ usage: Generate profiling data for debugging
+ - name: disable-version-check
+ default_value: "false"
+ usage: Disable Bearer version checking
+ - name: force
+ default_value: "false"
+ usage: Overwrite an existing ignored finding.
+ - name: help
+ shorthand: h
+ default_value: "false"
+ usage: help for migrate
+ - name: host
+ default_value: my.bearer.sh
+ usage: Specify the Host for sending the report.
+ - name: ignore-file
+ default_value: bearer.ignore
+ usage: Load ignore file from the specified path.
+ - name: ignore-git
+ default_value: "false"
+ usage: Ignore Git listing
+ - name: log-level
+ default_value: info
+ usage: Set log level (error, info, debug, trace)
+ - name: no-color
+ default_value: "false"
+ usage: Disable color in output
example: |-
- # Migrate existing ignored (excluded) fingerprints from bearer.yml file to ignore file
- $ bearer ignore migrate
+ # Migrate existing ignored (excluded) fingerprints from bearer.yml file to ignore file
+ $ bearer ignore migrate
see_also:
- - bearer ignore - Manage ignored fingerprints
-aliases:
+ - bearer ignore - Manage ignored fingerprints
+aliases:
diff --git a/docs/_data/bearer_ignore_pull.yaml b/docs/_data/bearer_ignore_pull.yaml
index d0e8c9105..00c440dff 100644
--- a/docs/_data/bearer_ignore_pull.yaml
+++ b/docs/_data/bearer_ignore_pull.yaml
@@ -2,42 +2,42 @@ name: bearer ignore pull
synopsis: Pull ignored fingerprints from Cloud
usage: bearer ignore pull [flags]
options:
- - name: api-key
- usage: Use your Bearer API Key to send the report to Bearer.
- - name: config-file
- default_value: bearer.yml
- usage: Load configuration from the specified path.
- - name: debug
- default_value: "false"
- usage: Enable debug logs. Equivalent to --log-level=debug
- - name: debug-profile
- default_value: "false"
- usage: Generate profiling data for debugging
- - name: disable-version-check
- default_value: "false"
- usage: Disable Bearer version checking
- - name: help
- shorthand: h
- default_value: "false"
- usage: help for pull
- - name: host
- default_value: my.bearer.sh
- usage: Specify the Host for sending the report.
- - name: ignore-file
- default_value: bearer.ignore
- usage: Load ignore file from the specified path.
- - name: ignore-git
- default_value: "false"
- usage: Ignore Git listing
- - name: log-level
- default_value: info
- usage: Set log level (error, info, debug, trace)
- - name: no-color
- default_value: "false"
- usage: Disable color in output
+ - name: api-key
+ usage: Use your Bearer API Key to send the report to Bearer.
+ - name: config-file
+ default_value: bearer.yml
+ usage: Load configuration from the specified path.
+ - name: debug
+ default_value: "false"
+ usage: Enable debug logs. Equivalent to --log-level=debug
+ - name: debug-profile
+ default_value: "false"
+ usage: Generate profiling data for debugging
+ - name: disable-version-check
+ default_value: "false"
+ usage: Disable Bearer version checking
+ - name: help
+ shorthand: h
+ default_value: "false"
+ usage: help for pull
+ - name: host
+ default_value: my.bearer.sh
+ usage: Specify the Host for sending the report.
+ - name: ignore-file
+ default_value: bearer.ignore
+ usage: Load ignore file from the specified path.
+ - name: ignore-git
+ default_value: "false"
+ usage: Ignore Git listing
+ - name: log-level
+ default_value: info
+ usage: Set log level (error, info, debug, trace)
+ - name: no-color
+ default_value: "false"
+ usage: Disable color in output
example: |-
- # Pull ignored fingerprints from the Cloud (requires API key)
- $ bearer ignore pull /path/to/your_project --api-key=XXXXX
+ # Pull ignored fingerprints from the Cloud (requires API key)
+ $ bearer ignore pull /path/to/your_project --api-key=XXXXX
see_also:
- - bearer ignore - Manage ignored fingerprints
-aliases:
+ - bearer ignore - Manage ignored fingerprints
+aliases:
diff --git a/docs/_data/bearer_ignore_remove.yaml b/docs/_data/bearer_ignore_remove.yaml
index 71060cc6a..d38d51c33 100644
--- a/docs/_data/bearer_ignore_remove.yaml
+++ b/docs/_data/bearer_ignore_remove.yaml
@@ -2,42 +2,42 @@ name: bearer ignore remove
synopsis: Remove an ignored fingerprint
usage: bearer ignore remove [flags]
options:
- - name: api-key
- usage: Use your Bearer API Key to send the report to Bearer.
- - name: config-file
- default_value: bearer.yml
- usage: Load configuration from the specified path.
- - name: debug
- default_value: "false"
- usage: Enable debug logs. Equivalent to --log-level=debug
- - name: debug-profile
- default_value: "false"
- usage: Generate profiling data for debugging
- - name: disable-version-check
- default_value: "false"
- usage: Disable Bearer version checking
- - name: help
- shorthand: h
- default_value: "false"
- usage: help for remove
- - name: host
- default_value: my.bearer.sh
- usage: Specify the Host for sending the report.
- - name: ignore-file
- default_value: bearer.ignore
- usage: Load ignore file from the specified path.
- - name: ignore-git
- default_value: "false"
- usage: Ignore Git listing
- - name: log-level
- default_value: info
- usage: Set log level (error, info, debug, trace)
- - name: no-color
- default_value: "false"
- usage: Disable color in output
+ - name: api-key
+ usage: Use your Bearer API Key to send the report to Bearer.
+ - name: config-file
+ default_value: bearer.yml
+ usage: Load configuration from the specified path.
+ - name: debug
+ default_value: "false"
+ usage: Enable debug logs. Equivalent to --log-level=debug
+ - name: debug-profile
+ default_value: "false"
+ usage: Generate profiling data for debugging
+ - name: disable-version-check
+ default_value: "false"
+ usage: Disable Bearer version checking
+ - name: help
+ shorthand: h
+ default_value: "false"
+ usage: help for remove
+ - name: host
+ default_value: my.bearer.sh
+ usage: Specify the Host for sending the report.
+ - name: ignore-file
+ default_value: bearer.ignore
+ usage: Load ignore file from the specified path.
+ - name: ignore-git
+ default_value: "false"
+ usage: Ignore Git listing
+ - name: log-level
+ default_value: info
+ usage: Set log level (error, info, debug, trace)
+ - name: no-color
+ default_value: "false"
+ usage: Disable color in output
example: |-
- # Remove an ignored fingerprint from your ignore file
- $ bearer ignore remove
+ # Remove an ignored fingerprint from your ignore file
+ $ bearer ignore remove
see_also:
- - bearer ignore - Manage ignored fingerprints
-aliases:
+ - bearer ignore - Manage ignored fingerprints
+aliases:
diff --git a/docs/_data/bearer_ignore_show.yaml b/docs/_data/bearer_ignore_show.yaml
index f8d926af7..71d1dc13f 100644
--- a/docs/_data/bearer_ignore_show.yaml
+++ b/docs/_data/bearer_ignore_show.yaml
@@ -2,45 +2,45 @@ name: bearer ignore show
synopsis: Show an ignored fingerprint
usage: bearer ignore show [flags]
options:
- - name: all
- default_value: "false"
- usage: Show all ignored fingerprints.
- - name: api-key
- usage: Use your Bearer API Key to send the report to Bearer.
- - name: config-file
- default_value: bearer.yml
- usage: Load configuration from the specified path.
- - name: debug
- default_value: "false"
- usage: Enable debug logs. Equivalent to --log-level=debug
- - name: debug-profile
- default_value: "false"
- usage: Generate profiling data for debugging
- - name: disable-version-check
- default_value: "false"
- usage: Disable Bearer version checking
- - name: help
- shorthand: h
- default_value: "false"
- usage: help for show
- - name: host
- default_value: my.bearer.sh
- usage: Specify the Host for sending the report.
- - name: ignore-file
- default_value: bearer.ignore
- usage: Load ignore file from the specified path.
- - name: ignore-git
- default_value: "false"
- usage: Ignore Git listing
- - name: log-level
- default_value: info
- usage: Set log level (error, info, debug, trace)
- - name: no-color
- default_value: "false"
- usage: Disable color in output
+ - name: all
+ default_value: "false"
+ usage: Show all ignored fingerprints.
+ - name: api-key
+ usage: Use your Bearer API Key to send the report to Bearer.
+ - name: config-file
+ default_value: bearer.yml
+ usage: Load configuration from the specified path.
+ - name: debug
+ default_value: "false"
+ usage: Enable debug logs. Equivalent to --log-level=debug
+ - name: debug-profile
+ default_value: "false"
+ usage: Generate profiling data for debugging
+ - name: disable-version-check
+ default_value: "false"
+ usage: Disable Bearer version checking
+ - name: help
+ shorthand: h
+ default_value: "false"
+ usage: help for show
+ - name: host
+ default_value: my.bearer.sh
+ usage: Specify the Host for sending the report.
+ - name: ignore-file
+ default_value: bearer.ignore
+ usage: Load ignore file from the specified path.
+ - name: ignore-git
+ default_value: "false"
+ usage: Ignore Git listing
+ - name: log-level
+ default_value: info
+ usage: Set log level (error, info, debug, trace)
+ - name: no-color
+ default_value: "false"
+ usage: Disable color in output
example: |-
- # Show the details of an ignored fingerprint from your ignore file
- $ bearer ignore show
+ # Show the details of an ignored fingerprint from your ignore file
+ $ bearer ignore show
see_also:
- - bearer ignore - Manage ignored fingerprints
-aliases:
+ - bearer ignore - Manage ignored fingerprints
+aliases:
diff --git a/docs/_data/bearer_init.yaml b/docs/_data/bearer_init.yaml
index 17f53a9d7..dfd244cdf 100644
--- a/docs/_data/bearer_init.yaml
+++ b/docs/_data/bearer_init.yaml
@@ -2,10 +2,10 @@ name: bearer init
synopsis: Generates a default config to `bearer.yml`
usage: bearer init [flags]
options:
- - name: help
- shorthand: h
- default_value: "false"
- usage: help for init
+ - name: help
+ shorthand: h
+ default_value: "false"
+ usage: help for init
see_also:
- - 'bearer - '
-aliases:
+ - "bearer - "
+aliases:
diff --git a/docs/_data/bearer_scan.yaml b/docs/_data/bearer_scan.yaml
index aa7bd5e49..3f6ad94e4 100644
--- a/docs/_data/bearer_scan.yaml
+++ b/docs/_data/bearer_scan.yaml
@@ -2,119 +2,119 @@ name: bearer scan
synopsis: Scan a directory or file
usage: bearer scan [flags]
options:
- - name: api-key
- usage: Use your Bearer API Key to send the report to Bearer.
- - name: config-file
- default_value: bearer.yml
- usage: Load configuration from the specified path.
- - name: context
- usage: |
- Expand context of schema classification e.g., --context=health, to include data types particular to health
- - name: data-subject-mapping
- usage: |
- Override default data subject mapping by providing a path to a custom mapping JSON file
- - name: debug
- default_value: "false"
- usage: Enable debug logs. Equivalent to --log-level=debug
- - name: debug-profile
- default_value: "false"
- usage: Generate profiling data for debugging
- - name: disable-default-rules
- default_value: "false"
- usage: Disables all default and built-in rules.
- - name: disable-domain-resolution
- default_value: "true"
- usage: |
- Do not attempt to resolve detected domains during classification
- - name: disable-version-check
- default_value: "false"
- usage: Disable Bearer version checking
- - name: domain-resolution-timeout
- default_value: 3s
- usage: |
- Set timeout when attempting to resolve detected domains during classification, e.g. --domain-resolution-timeout=3s
- - name: exclude-fingerprint
- default_value: '[]'
- usage: |
- Specify the comma-separated fingerprints of the findings you would like to exclude from the report.
- - name: exit-code
- default_value: "-1"
- usage: |
- Force a given exit code for the scan command. Set this to 0 (success) to always return a success exit code despite any findings from the scan.
- - name: external-rule-dir
- default_value: '[]'
- usage: |
- Specify directories paths that contain .yaml files with external rules configuration
- - name: fail-on-severity
- default_value: critical,high,medium,low
- usage: |
- Specify which severities cause the report to fail. Works in conjunction with --exit-code.
- - name: force
- default_value: "false"
- usage: Disable the cache and runs the detections again
- - name: format
- shorthand: f
- usage: |
- Specify report format (json, yaml, sarif, gitlab-sast, rdjson, html)
- - name: help
- shorthand: h
- default_value: "false"
- usage: help for scan
- - name: hide-progress-bar
- default_value: "false"
- usage: Hide progress bar from output
- - name: host
- default_value: my.bearer.sh
- usage: Specify the Host for sending the report.
- - name: ignore-file
- default_value: bearer.ignore
- usage: Load ignore file from the specified path.
- - name: ignore-git
- default_value: "false"
- usage: Ignore Git listing
- - name: internal-domains
- default_value: '[]'
- usage: |
- Define regular expressions for better classification of private or unreachable domains e.g. --internal-domains=".*.my-company.com,private.sh"
- - name: log-level
- default_value: info
- usage: Set log level (error, info, debug, trace)
- - name: no-color
- default_value: "false"
- usage: Disable color in output
- - name: only-rule
- default_value: '[]'
- usage: |
- Specify the comma-separated ids of the rules you would like to run. Skips all other rules.
- - name: output
- usage: Specify the output path for the report.
- - name: parallel
- default_value: "0"
- usage: Specify the amount of parallelism to use during the scan
- - name: quiet
- default_value: "false"
- usage: Suppress non-essential messages
- - name: report
- default_value: security
- usage: Specify the type of report (security, privacy, dataflow).
- - name: scanner
- default_value: '[sast]'
- usage: |
- Specify which scanner to use e.g. --scanner=secrets, --scanner=secrets,sast
- - name: severity
- default_value: critical,high,medium,low,warning
- usage: Specify which severities are included in the report.
- - name: skip-path
- default_value: '[]'
- usage: |
- Specify the comma separated files and directories to skip. Supports * syntax, e.g. --skip-path users/*.go,users/admin.sql
- - name: skip-rule
- default_value: '[]'
- usage: |
- Specify the comma-separated ids of the rules you would like to skip. Runs all other rules.
+ - name: api-key
+ usage: Use your Bearer API Key to send the report to Bearer.
+ - name: config-file
+ default_value: bearer.yml
+ usage: Load configuration from the specified path.
+ - name: context
+ usage: |
+ Expand context of schema classification e.g., --context=health, to include data types particular to health
+ - name: data-subject-mapping
+ usage: |
+ Override default data subject mapping by providing a path to a custom mapping JSON file
+ - name: debug
+ default_value: "false"
+ usage: Enable debug logs. Equivalent to --log-level=debug
+ - name: debug-profile
+ default_value: "false"
+ usage: Generate profiling data for debugging
+ - name: disable-default-rules
+ default_value: "false"
+ usage: Disables all default and built-in rules.
+ - name: disable-domain-resolution
+ default_value: "true"
+ usage: |
+ Do not attempt to resolve detected domains during classification
+ - name: disable-version-check
+ default_value: "false"
+ usage: Disable Bearer version checking
+ - name: domain-resolution-timeout
+ default_value: 3s
+ usage: |
+ Set timeout when attempting to resolve detected domains during classification, e.g. --domain-resolution-timeout=3s
+ - name: exclude-fingerprint
+ default_value: "[]"
+ usage: |
+ Specify the comma-separated fingerprints of the findings you would like to exclude from the report.
+ - name: exit-code
+ default_value: "-1"
+ usage: |
+ Force a given exit code for the scan command. Set this to 0 (success) to always return a success exit code despite any findings from the scan.
+ - name: external-rule-dir
+ default_value: "[]"
+ usage: |
+ Specify directories paths that contain .yaml files with external rules configuration
+ - name: fail-on-severity
+ default_value: critical,high,medium,low
+ usage: |
+ Specify which severities cause the report to fail. Works in conjunction with --exit-code.
+ - name: force
+ default_value: "false"
+ usage: Disable the cache and runs the detections again
+ - name: format
+ shorthand: f
+ usage: |
+ Specify report format (json, yaml, sarif, gitlab-sast, rdjson, html)
+ - name: help
+ shorthand: h
+ default_value: "false"
+ usage: help for scan
+ - name: hide-progress-bar
+ default_value: "false"
+ usage: Hide progress bar from output
+ - name: host
+ default_value: my.bearer.sh
+ usage: Specify the Host for sending the report.
+ - name: ignore-file
+ default_value: bearer.ignore
+ usage: Load ignore file from the specified path.
+ - name: ignore-git
+ default_value: "false"
+ usage: Ignore Git listing
+ - name: internal-domains
+ default_value: "[]"
+ usage: |
+ Define regular expressions for better classification of private or unreachable domains e.g. --internal-domains=".*.my-company.com,private.sh"
+ - name: log-level
+ default_value: info
+ usage: Set log level (error, info, debug, trace)
+ - name: no-color
+ default_value: "false"
+ usage: Disable color in output
+ - name: only-rule
+ default_value: "[]"
+ usage: |
+ Specify the comma-separated ids of the rules you would like to run. Skips all other rules.
+ - name: output
+ usage: Specify the output path for the report.
+ - name: parallel
+ default_value: "0"
+ usage: Specify the amount of parallelism to use during the scan
+ - name: quiet
+ default_value: "false"
+ usage: Suppress non-essential messages
+ - name: report
+ default_value: security
+ usage: Specify the type of report (security, privacy, dataflow).
+ - name: scanner
+ default_value: "[sast]"
+ usage: |
+ Specify which scanner to use e.g. --scanner=secrets, --scanner=secrets,sast
+ - name: severity
+ default_value: critical,high,medium,low,warning
+ usage: Specify which severities are included in the report.
+ - name: skip-path
+ default_value: "[]"
+ usage: |
+ Specify the comma separated files and directories to skip. Supports * syntax, e.g. --skip-path users/*.go,users/admin.sql
+ - name: skip-rule
+ default_value: "[]"
+ usage: |
+ Specify the comma-separated ids of the rules you would like to skip. Runs all other rules.
example: |4-
# Scan a local project, including language-specific files
$ bearer scan /path/to/your_project
see_also:
- - 'bearer - '
+ - "bearer - "
aliases: s
diff --git a/docs/_data/bearer_version.yaml b/docs/_data/bearer_version.yaml
index 70a739357..957a4d9bc 100644
--- a/docs/_data/bearer_version.yaml
+++ b/docs/_data/bearer_version.yaml
@@ -2,39 +2,39 @@ name: bearer version
synopsis: Print the version
usage: bearer version [flags]
options:
- - name: api-key
- usage: Use your Bearer API Key to send the report to Bearer.
- - name: config-file
- default_value: bearer.yml
- usage: Load configuration from the specified path.
- - name: debug
- default_value: "false"
- usage: Enable debug logs. Equivalent to --log-level=debug
- - name: debug-profile
- default_value: "false"
- usage: Generate profiling data for debugging
- - name: disable-version-check
- default_value: "false"
- usage: Disable Bearer version checking
- - name: help
- shorthand: h
- default_value: "false"
- usage: help for version
- - name: host
- default_value: my.bearer.sh
- usage: Specify the Host for sending the report.
- - name: ignore-file
- default_value: bearer.ignore
- usage: Load ignore file from the specified path.
- - name: ignore-git
- default_value: "false"
- usage: Ignore Git listing
- - name: log-level
- default_value: info
- usage: Set log level (error, info, debug, trace)
- - name: no-color
- default_value: "false"
- usage: Disable color in output
+ - name: api-key
+ usage: Use your Bearer API Key to send the report to Bearer.
+ - name: config-file
+ default_value: bearer.yml
+ usage: Load configuration from the specified path.
+ - name: debug
+ default_value: "false"
+ usage: Enable debug logs. Equivalent to --log-level=debug
+ - name: debug-profile
+ default_value: "false"
+ usage: Generate profiling data for debugging
+ - name: disable-version-check
+ default_value: "false"
+ usage: Disable Bearer version checking
+ - name: help
+ shorthand: h
+ default_value: "false"
+ usage: help for version
+ - name: host
+ default_value: my.bearer.sh
+ usage: Specify the Host for sending the report.
+ - name: ignore-file
+ default_value: bearer.ignore
+ usage: Load ignore file from the specified path.
+ - name: ignore-git
+ default_value: "false"
+ usage: Ignore Git listing
+ - name: log-level
+ default_value: info
+ usage: Set log level (error, info, debug, trace)
+ - name: no-color
+ default_value: "false"
+ usage: Disable color in output
see_also:
- - 'bearer - '
-aliases:
+ - "bearer - "
+aliases:
diff --git a/docs/_data/datatypes.js b/docs/_data/datatypes.js
index 9c6ae1867..555de8041 100644
--- a/docs/_data/datatypes.js
+++ b/docs/_data/datatypes.js
@@ -4,7 +4,7 @@ const PDID = "e1d3135b-3c0f-4b55-abce-19f27a26cbb3";
async function fetchFile(location) {
return readFile(location, { encoding: "utf8" }).then((file) =>
- JSON.parse(file)
+ JSON.parse(file),
);
}
@@ -13,7 +13,7 @@ async function fetchData(dir) {
let result = await Promise.all(
files.map(async (file) => {
return await fetchFile(path.join(dir, file));
- })
+ }),
);
return result;
}
@@ -70,9 +70,11 @@ function sortData(typesFile, catsFile, groupsFile) {
// example();
module.exports = async function () {
let dataTypes = await fetchData("../internal/classification/db/data_types/");
- let dataCats = await fetchData("../internal/classification/db/data_categories/");
+ let dataCats = await fetchData(
+ "../internal/classification/db/data_categories/",
+ );
let groupings = await fetchFile(
- "../internal/classification/db/category_grouping.json"
+ "../internal/classification/db/category_grouping.json",
);
return sortData(dataTypes, dataCats, groupings);
};
diff --git a/docs/_data/examples/ci/circleci/basic.yaml b/docs/_data/examples/ci/circleci/basic.yaml
index efeeb001a..9a4344829 100644
--- a/docs/_data/examples/ci/circleci/basic.yaml
+++ b/docs/_data/examples/ci/circleci/basic.yaml
@@ -15,4 +15,4 @@ jobs:
workflows:
test:
jobs:
- - bearer
\ No newline at end of file
+ - bearer
diff --git a/docs/_data/examples/ci/circleci/reviewdog.yaml b/docs/_data/examples/ci/circleci/reviewdog.yaml
index 174d9a840..6937f2ece 100644
--- a/docs/_data/examples/ci/circleci/reviewdog.yaml
+++ b/docs/_data/examples/ci/circleci/reviewdog.yaml
@@ -26,4 +26,4 @@ workflows:
ignore: main
context:
- bearer
- # make sure to set GITHUB_TOKEN in your context
\ No newline at end of file
+ # make sure to set GITHUB_TOKEN in your context
diff --git a/docs/_data/examples/ci/github/basic-with-options.yaml b/docs/_data/examples/ci/github/basic-with-options.yaml
index ec2b4ff7a..cc4cc89d8 100644
--- a/docs/_data/examples/ci/github/basic-with-options.yaml
+++ b/docs/_data/examples/ci/github/basic-with-options.yaml
@@ -16,6 +16,6 @@ jobs:
- name: Bearer
uses: bearer/bearer-action@v2
with:
- config-file: '/some/path/bearer.yml'
- only-rule: 'ruby_lang_cookies,ruby_lang_http_post_insecure_with_data'
- skip-path: 'users/*.go,users/admin.sql'
\ No newline at end of file
+ config-file: "/some/path/bearer.yml"
+ only-rule: "ruby_lang_cookies,ruby_lang_http_post_insecure_with_data"
+ skip-path: "users/*.go,users/admin.sql"
diff --git a/docs/_data/examples/ci/github/basic.yaml b/docs/_data/examples/ci/github/basic.yaml
index 6650a4cda..09350483a 100644
--- a/docs/_data/examples/ci/github/basic.yaml
+++ b/docs/_data/examples/ci/github/basic.yaml
@@ -14,4 +14,4 @@ jobs:
steps:
- uses: actions/checkout@v3
- name: Bearer
- uses: bearer/bearer-action@v2
\ No newline at end of file
+ uses: bearer/bearer-action@v2
diff --git a/docs/_data/examples/ci/github/cloud.yaml b/docs/_data/examples/ci/github/cloud.yaml
index 7016b9110..8766b5f51 100644
--- a/docs/_data/examples/ci/github/cloud.yaml
+++ b/docs/_data/examples/ci/github/cloud.yaml
@@ -14,4 +14,4 @@ jobs:
id: report
uses: bearer/bearer-action@v2
with:
- api-key: ${{ secrets.BEARER_TOKEN }}
\ No newline at end of file
+ api-key: ${{ secrets.BEARER_TOKEN }}
diff --git a/docs/_data/examples/ci/github/defect-dojo.yaml b/docs/_data/examples/ci/github/defect-dojo.yaml
index db5902dd9..e686a0faf 100644
--- a/docs/_data/examples/ci/github/defect-dojo.yaml
+++ b/docs/_data/examples/ci/github/defect-dojo.yaml
@@ -26,4 +26,4 @@ jobs:
DD_APP: ${{ secrets.DD_APP}}
DD_ENGAGEMENT: ${{ secrets.DD_ENGAGEMENT}}
run: |
- curl -X POST -F "file=@gl-sast-report.json" -F "product_name=$DD_APP" -F "engagement_name=$DD_ENGAGEMENT" -F "scan_type=GitLab SAST Report" -H "Authorization: Token $DD_TOKEN" http://example.com/api/v2/import-scan/
\ No newline at end of file
+ curl -X POST -F "file=@gl-sast-report.json" -F "product_name=$DD_APP" -F "engagement_name=$DD_ENGAGEMENT" -F "scan_type=GitLab SAST Report" -H "Authorization: Token $DD_TOKEN" http://example.com/api/v2/import-scan/
diff --git a/docs/_data/examples/ci/github/diff-reviewdog.yaml b/docs/_data/examples/ci/github/diff-reviewdog.yaml
index 345567e51..f54110719 100644
--- a/docs/_data/examples/ci/github/diff-reviewdog.yaml
+++ b/docs/_data/examples/ci/github/diff-reviewdog.yaml
@@ -27,4 +27,4 @@ jobs:
env:
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
- cat rd.json | reviewdog -f=rdjson -reporter=github-pr-review
\ No newline at end of file
+ cat rd.json | reviewdog -f=rdjson -reporter=github-pr-review
diff --git a/docs/_data/examples/ci/github/diff.yaml b/docs/_data/examples/ci/github/diff.yaml
index c1e91c4a8..13f7385f4 100644
--- a/docs/_data/examples/ci/github/diff.yaml
+++ b/docs/_data/examples/ci/github/diff.yaml
@@ -15,4 +15,4 @@ jobs:
- name: Bearer
uses: bearer/bearer-action@v2
with:
- diff: true
\ No newline at end of file
+ diff: true
diff --git a/docs/_data/examples/ci/github/sarif.yaml b/docs/_data/examples/ci/github/sarif.yaml
index 5497265d4..3a9286063 100644
--- a/docs/_data/examples/ci/github/sarif.yaml
+++ b/docs/_data/examples/ci/github/sarif.yaml
@@ -22,4 +22,4 @@ jobs:
if: always()
uses: github/codeql-action/upload-sarif@v2
with:
- sarif_file: results.sarif
\ No newline at end of file
+ sarif_file: results.sarif
diff --git a/docs/_data/examples/ci/gitlab/basic.yaml b/docs/_data/examples/ci/gitlab/basic.yaml
index 20c333d26..3d3d99ff1 100644
--- a/docs/_data/examples/ci/gitlab/basic.yaml
+++ b/docs/_data/examples/ci/gitlab/basic.yaml
@@ -1,5 +1,5 @@
bearer:
image:
name: bearer/bearer
- entrypoint: [ "" ]
+ entrypoint: [""]
script: bearer scan .
diff --git a/docs/_data/examples/ci/gitlab/cloud.yaml b/docs/_data/examples/ci/gitlab/cloud.yaml
index 650e6f091..60f04c202 100644
--- a/docs/_data/examples/ci/gitlab/cloud.yaml
+++ b/docs/_data/examples/ci/gitlab/cloud.yaml
@@ -1,5 +1,5 @@
bearer:
image:
name: bearer/bearer
- entrypoint: [ "" ]
- script: bearer scan . --api-key=$BEARER_TOKEN
\ No newline at end of file
+ entrypoint: [""]
+ script: bearer scan . --api-key=$BEARER_TOKEN
diff --git a/docs/_data/examples/ci/gitlab/diff-reviewdog.yaml b/docs/_data/examples/ci/gitlab/diff-reviewdog.yaml
index 1cf87b309..a1eee6565 100644
--- a/docs/_data/examples/ci/gitlab/diff-reviewdog.yaml
+++ b/docs/_data/examples/ci/gitlab/diff-reviewdog.yaml
@@ -7,4 +7,4 @@ bearer_mr:
- curl -sfL https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh | sh -s -- -b /usr/local/bin
- bearer scan . --format=rdjson --output=rd.json || export BEARER_EXIT=$?
- cat rd.json | reviewdog -f=rdjson -reporter=gitlab-mr-discussion
- - exit $BEARER_EXIT
\ No newline at end of file
+ - exit $BEARER_EXIT
diff --git a/docs/_data/examples/ci/gitlab/diff.yaml b/docs/_data/examples/ci/gitlab/diff.yaml
index 1c95d02b4..6b801f6c2 100644
--- a/docs/_data/examples/ci/gitlab/diff.yaml
+++ b/docs/_data/examples/ci/gitlab/diff.yaml
@@ -1,8 +1,8 @@
bearer_mr:
image:
name: bearer/bearer
- entrypoint: [ "" ]
+ entrypoint: [""]
variables:
DIFF_BASE_BRANCH: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
DIFF_BASE_COMMIT: $CI_MERGE_REQUEST_DIFF_BASE_SHA
- script: bearer scan .
\ No newline at end of file
+ script: bearer scan .
diff --git a/docs/_data/examples/ci/gitlab/sast.yaml b/docs/_data/examples/ci/gitlab/sast.yaml
index 2595d627c..70faa68b1 100644
--- a/docs/_data/examples/ci/gitlab/sast.yaml
+++ b/docs/_data/examples/ci/gitlab/sast.yaml
@@ -1,9 +1,9 @@
bearer:
image:
name: bearer/bearer
- entrypoint: [ "" ]
+ entrypoint: [""]
script:
- bearer scan . --format gitlab-sast --output gl-sast-report.json
artifacts:
reports:
- sast: gl-sast-report.json
\ No newline at end of file
+ sast: gl-sast-report.json
diff --git a/docs/_data/github.js b/docs/_data/github.js
index acfe58a8b..9f4aafa7f 100644
--- a/docs/_data/github.js
+++ b/docs/_data/github.js
@@ -12,7 +12,7 @@ module.exports = async function () {
{
duration: "60m",
type: "json",
- }
+ },
);
} catch (err) {
console.log("Could not fetch release");
diff --git a/docs/_data/meta.js b/docs/_data/meta.js
index b968f8aa7..18e1c216b 100644
--- a/docs/_data/meta.js
+++ b/docs/_data/meta.js
@@ -9,6 +9,6 @@ module.exports = {
links: {
discord: "https://discord.gg/eaHZBJUXRF",
issues: "https://github.com/Bearer/bearer/issues",
- action: "https://github.com/marketplace/actions/bearer-action"
+ action: "https://github.com/marketplace/actions/bearer-action",
},
};
diff --git a/docs/_data/nav.js b/docs/_data/nav.js
index 3abac8ade..602e053b5 100644
--- a/docs/_data/nav.js
+++ b/docs/_data/nav.js
@@ -99,4 +99,4 @@ module.exports = [
{ name: "Contribute new recipes", url: "/contributing/recipes/" },
],
},
-]
+];
diff --git a/docs/_data/recipes.js b/docs/_data/recipes.js
index 16c32873e..db475bda8 100644
--- a/docs/_data/recipes.js
+++ b/docs/_data/recipes.js
@@ -3,7 +3,7 @@ const path = require("path");
async function fetchFile(location) {
return readFile(location, { encoding: "utf8" }).then((file) =>
- JSON.parse(file)
+ JSON.parse(file),
);
}
@@ -17,7 +17,7 @@ async function fetchData(dir) {
id: path.basename(file, ".json"),
source: `/internal/classification/db/recipes/${file}`,
};
- })
+ }),
);
return result;
}
diff --git a/docs/_data/rules.js b/docs/_data/rules.js
index af2fc8b77..6eb2c833b 100644
--- a/docs/_data/rules.js
+++ b/docs/_data/rules.js
@@ -1,33 +1,33 @@
-const { readFile, readdir } = require("node:fs/promises")
-const { statSync } = require("fs")
-const EleventyFetch = require("@11ty/eleventy-fetch")
-const path = require("path")
-const yaml = require("js-yaml")
-const cweList = require("./cweList.json")
-const gitly = require("gitly")
-const source = "bearer/bearer-rules"
-const rulesPath = "_tmp/rules-data"
-const excludeDirectories = [".github", "scripts"]
+const { readFile, readdir } = require("node:fs/promises");
+const { statSync } = require("fs");
+const EleventyFetch = require("@11ty/eleventy-fetch");
+const path = require("path");
+const yaml = require("js-yaml");
+const cweList = require("./cweList.json");
+const gitly = require("gitly");
+const source = "bearer/bearer-rules";
+const rulesPath = "_tmp/rules-data";
+const excludeDirectories = [".github", "scripts"];
let counts = {
languages: {},
-}
+};
function updateCounts(lang, framework = null, id = null) {
if (framework !== null) {
if (counts.languages[lang].frameworks[framework]) {
- counts.languages[lang].frameworks[framework].count++
- counts.languages[lang].frameworks[framework].rules.push(id)
+ counts.languages[lang].frameworks[framework].count++;
+ counts.languages[lang].frameworks[framework].rules.push(id);
} else if (framework === "gosec") {
- newFramework(lang, framework)
+ newFramework(lang, framework);
} else if (framework !== "lang") {
- newFramework(lang, framework)
+ newFramework(lang, framework);
} else if (framework === "lang") {
- counts.languages[lang].baseRules.push(id)
+ counts.languages[lang].baseRules.push(id);
}
- counts.languages[lang].count++
+ counts.languages[lang].count++;
} else {
- newLang(lang)
+ newLang(lang);
}
}
@@ -36,7 +36,7 @@ function newFramework(lang, name) {
name,
count: 1,
rules: [],
- }
+ };
}
function newLang(name) {
@@ -45,115 +45,115 @@ function newLang(name) {
count: 0,
baseRules: [],
frameworks: {},
- }
+ };
}
function isDirectory(dir) {
- const result = statSync(dir)
- return result.isDirectory()
+ const result = statSync(dir);
+ return result.isDirectory();
}
async function fetchRelease() {
- let latest = {}
+ let latest = {};
try {
latest = await EleventyFetch(
`https://api.github.com/repos/${source}/releases/latest`,
{
duration: "60m",
type: "json",
- }
- )
+ },
+ );
} catch (e) {
- console.error(e)
+ console.error(e);
}
try {
- let src = await gitly.download(`${source}#${latest.tag_name}`)
- await gitly.extract(src, rulesPath)
+ let src = await gitly.download(`${source}#${latest.tag_name}`);
+ await gitly.extract(src, rulesPath);
} catch (e) {
- throw console.error(e)
+ throw console.error(e);
}
}
async function fetchData(location) {
- let rules = []
- const dirs = await readdir(location)
- // ex: looping through rules [ruby, gitleaks, sql]
- dirs.forEach(async (dir) => {
- const dirPath = path.join(location, dir)
- if (isDirectory(dirPath) && !excludeDirectories.includes(dir)) {
- const subDirs = await readdir(dirPath)
- updateCounts(dir)
- // ex. looping through rules/ruby [lang, rails]
- subDirs.forEach(async (subDir) => {
- const subDirPath = path.join(dirPath, subDir)
- if (
- isDirectory(subDirPath) &&
- subDir !== "shared" &&
- subDir !== "gosec"
- ) {
- const files = await readdir(subDirPath)
- const children = await fetchAllFiles(
- subDirPath,
- path.join(dir, subDir),
- files
- )
- rules.push(...children)
- } else if (isDirectory(subDirPath) && subDir === "gosec") {
- const groupDirs = await readdir(subDirPath)
+ let rules = [];
+ const dirs = await readdir(location);
+ // ex: looping through rules [ruby, gitleaks, sql]
+ dirs.forEach(async (dir) => {
+ const dirPath = path.join(location, dir);
+ if (isDirectory(dirPath) && !excludeDirectories.includes(dir)) {
+ const subDirs = await readdir(dirPath);
+ updateCounts(dir);
+ // ex. looping through rules/ruby [lang, rails]
+ subDirs.forEach(async (subDir) => {
+ const subDirPath = path.join(dirPath, subDir);
+ if (
+ isDirectory(subDirPath) &&
+ subDir !== "shared" &&
+ subDir !== "gosec"
+ ) {
+ const files = await readdir(subDirPath);
+ const children = await fetchAllFiles(
+ subDirPath,
+ path.join(dir, subDir),
+ files,
+ );
+ rules.push(...children);
+ } else if (isDirectory(subDirPath) && subDir === "gosec") {
+ const groupDirs = await readdir(subDirPath);
- groupDirs.forEach(async (groupDir) => {
- const groupDirPath = path.join(dirPath, subDir, groupDir)
- if (isDirectory(groupDirPath)) {
- const files = await readdir(groupDirPath)
- const children = await fetchAllFiles(
- groupDirPath,
- path.join(dir, subDir, groupDir),
- files
- )
- rules.push(...children)
- }
- })
- }
- })
- }
- })
- return { counts, rules }
+ groupDirs.forEach(async (groupDir) => {
+ const groupDirPath = path.join(dirPath, subDir, groupDir);
+ if (isDirectory(groupDirPath)) {
+ const files = await readdir(groupDirPath);
+ const children = await fetchAllFiles(
+ groupDirPath,
+ path.join(dir, subDir, groupDir),
+ files,
+ );
+ rules.push(...children);
+ }
+ });
+ }
+ });
+ }
+ });
+ return { counts, rules };
}
async function fetchAllFiles(directory, breadcrumb, files) {
let result = await Promise.all(
files.reduce((all, file) => {
- const location = path.join(directory, file)
+ const location = path.join(directory, file);
if (path.extname(location) === ".yml") {
- return [...all, fetchFile(path.join(directory, file), breadcrumb)]
+ return [...all, fetchFile(path.join(directory, file), breadcrumb)];
} else {
- return all
+ return all;
}
- }, [])
- )
- return result
+ }, []),
+ );
+ return result;
}
async function fetchFile(location, breadcrumb) {
return readFile(location, { encoding: "utf8" }).then((file) => {
- let out = yaml.load(file)
- let owasps = new Set()
- let subdir = breadcrumb.split("/")
- let groupId = subdir[subdir.length - 2]
- let framework = subdir[subdir.length - 1]
- let lang = subdir[subdir.length - 2]
+ let out = yaml.load(file);
+ let owasps = new Set();
+ let subdir = breadcrumb.split("/");
+ let groupId = subdir[subdir.length - 2];
+ let framework = subdir[subdir.length - 1];
+ let lang = subdir[subdir.length - 2];
if (groupId === "gosec") {
- framework = groupId
- lang = subdir[subdir.length - 3]
+ framework = groupId;
+ lang = subdir[subdir.length - 3];
}
- updateCounts(lang, framework, out.metadata.id)
+ updateCounts(lang, framework, out.metadata.id);
if (out.metadata.cwe_id) {
out.metadata.cwe_id.forEach((i) => {
if (cweList[i] && cweList[i].owasp) {
- owasps.add(cweList[i].owasp.id)
+ owasps.add(cweList[i].owasp.id);
}
- })
+ });
}
return {
name: path.basename(location, ".yml"),
@@ -161,11 +161,11 @@ async function fetchFile(location, breadcrumb) {
owasp_ids: [...owasps].sort(),
framework,
...out,
- }
- })
+ };
+ });
}
module.exports = async function () {
- await fetchRelease()
- return await fetchData(path.join(rulesPath, "rules"))
-}
+ await fetchRelease();
+ return await fetchData(path.join(rulesPath, "rules"));
+};
diff --git a/docs/contributing/code.md b/docs/contributing/code.md
index 1b46679d3..f6ba7796a 100644
--- a/docs/contributing/code.md
+++ b/docs/contributing/code.md
@@ -32,10 +32,9 @@ go mod download
Finally, we use [direnv](https://direnv.net/) to manage env vars in development. This is primarily used for running tests. You can either:
-- Set up your own by using `.envrc.example` as a base. You're unlikely to need to set anything other than `GITHUB_WORKSPACE` for integration tests, so feel free to skip this step or export it manually using: ```export GITHUB_WORKSPACE=`pwd` ```.
+- Set up your own by using `.envrc.example` as a base. You're unlikely to need to set anything other than `GITHUB_WORKSPACE` for integration tests, so feel free to skip this step or export it manually using: ``export GITHUB_WORKSPACE=`pwd` ``.
- Run tests using the script method mentioned [below](#running-tests).
-
## Running Bearer CLI locally from source
To run Bearer CLI from source use the following command from the `bearer` directory:
@@ -43,6 +42,7 @@ To run Bearer CLI from source use the following command from the `bearer` direct
```bash
go run ./cmd/bearer/main.go [COMMAND]
```
+
Use commands and flags as normal in place of `[COMMAND]`.
## Running tests
@@ -58,7 +58,7 @@ Alternatively, you can run tests manually. Keep in mind you'll need to include t
Run all tests:
-``` shell
+```shell
go test ./...
```
diff --git a/docs/contributing/docs.md b/docs/contributing/docs.md
index 3ed4f81fe..22185aebd 100644
--- a/docs/contributing/docs.md
+++ b/docs/contributing/docs.md
@@ -39,7 +39,8 @@ As mentioned previously, The Bearer CLI docs run on [11ty](https://www.11ty.dev/
### Source files
-Source files make up the workings of our documentation site. They include data sources, styles, layouts, and more.
+Source files make up the workings of our documentation site. They include data sources, styles, layouts, and more.
+
- `.eleventy.js`, `.eleventyignore`, `11tydata.json`: Configuration files for 11ty.
- `_redirects`: Whenever a breaking change to a path is made, make sure to acknowledge it in the redirects file. Netlify uses this to set redirects on the server.
- `_data`: The source for all derived and shared data for documentation page. Some files, like `bearer_scan.yml` come directly from the CLI build, while others like `rules.js` convert source data into JSON that our page templates use.
@@ -57,10 +58,9 @@ Pages are written in markdown or nunjucks. See the [creating a new documentation
- `/reference`: Reference pages primarily use the CLI's source as a foundation to display reference data in a nicer way.
- `/contributing`: All docs related to contributing to the project live here.
-
## Creating a new documentation page
-To create a new page, first confirm that an existing page doesn't serve the same purpose. In general, **it's best to enhance an existing page** rather than create a new one. If you do need to create a new page, start by determining the location within the hierarchy. See the *Pages* section above for details on each section.
+To create a new page, first confirm that an existing page doesn't serve the same purpose. In general, **it's best to enhance an existing page** rather than create a new one. If you do need to create a new page, start by determining the location within the hierarchy. See the _Pages_ section above for details on each section.
For traditional static documentation, use markdown and create a `.md` file in the selected category (guides, explanations, reference, contributing). Include frontmatter data for the `title` at minimum. This is used to create the page title in HTML. Then, starting with a top-level heading, write your doc in markdown. Review similar documentation pages for examples of how to create different elements.
@@ -98,14 +98,13 @@ To add an image to a page, first optimize it and add it to the `docs/assets/img`
#### Building data-driven pages
-Some pages in the documentation, like the [rules](/reference/rules/) or [data types](/reference/datatypes/) pages, are data-driven. They are still static, but rely on a data source at build time to create the HTML. This is done by pairing a `data` file (.js) with a `page` file (.njk). The [11ty docs](https://www.11ty.dev/docs/data-js/) has explanations on how JavaScript data files work.
+Some pages in the documentation, like the [rules](/reference/rules/) or [data types](/reference/datatypes/) pages, are data-driven. They are still static, but rely on a data source at build time to create the HTML. This is done by pairing a `data` file (.js) with a `page` file (.njk). The [11ty docs](https://www.11ty.dev/docs/data-js/) has explanations on how JavaScript data files work.
In addition, the [data types](/reference/datatypes/) page should act as a good example. The process looks like this:
1. At build time, `docs/_data/datatypes.js` reads source files from Bearer CLI.
2. `docs/reference/datatypes.njk` looks for the global `datatypes` object created in step 1 and uses it to populate the template.
-
## Getting help
-If you're unsure where to start, have questions, or need help contributing to the documentation, join our [community discord]({{meta.links.discord}}) and we'll be happy to help out.
\ No newline at end of file
+If you're unsure where to start, have questions, or need help contributing to the documentation, join our [community discord]({{meta.links.discord}}) and we'll be happy to help out.
diff --git a/docs/contributing/index.md b/docs/contributing/index.md
index dd6b5f83f..283f3a2b8 100644
--- a/docs/contributing/index.md
+++ b/docs/contributing/index.md
@@ -9,6 +9,7 @@ Thanks for your interest in contributing! This guide will help you get started.
## Ways to contribute
You can contribute in a variety of ways:
+
- [File a new issue]({{meta.sourcePath}}/issues/new/choose) on GitHub.
- [Browse the issues]({{meta.links.issues}}) and fix a bug by [contributing code](/contributing/code/).
- Improve this [documentation](/contributing/docs/).
diff --git a/docs/contributing/recipes.md b/docs/contributing/recipes.md
index 7505287e7..eb07a2543 100644
--- a/docs/contributing/recipes.md
+++ b/docs/contributing/recipes.md
@@ -11,16 +11,16 @@ Recipes are located at `bearer/internal/classification/db/recipes/`.
```md
.
├ internal/
-│ └ classification/
-│ └ db/
-│ └ recipes/
+│ └ classification/
+│ └ db/
+│ └ recipes/
```
Each recipe consists of a `JSON` file containing the following properties:
- `metadata` (object): Metadata about the recipe itself. Used for tracking recipe versions. Ex: `"metadata": { "version": "1.0" }`.
- `name` (string): The name of the recipe.
-- `type` (string): The recipe type. Supported types are `external_service`, `internal_service`, and `data_store`.
+- `type` (string): The recipe type. Supported types are `external_service`, `internal_service`, and `data_store`.
- `urls` (array of strings): URLs used by the service. Bearer CLI will use this to aid in finding connections within a codebase. Supports wildcards.
- `exclude_urls` (array of strings): Any urls that would be caught by the wildcards in the `urls` list that you'd like to explicitly exclude.
- `packages` (array of objects): Common packages that connect to the service. Each package object should contain:
diff --git a/docs/docs.md b/docs/docs.md
index 80fceefad..c8afc585a 100644
--- a/docs/docs.md
+++ b/docs/docs.md
@@ -11,21 +11,23 @@ permalink: "/"
Welcome to the Bearer CLI documentation. Bearer CLI is a static application security testing (SAST) tool that scans your source code and analyzes your data flows to discover, filter and prioritize security and privacy risks.
This includes:
-* **Security risks and vulnerabilities** using [built-in rules](https://docs.bearer.com/reference/rules/) covering the [OWASP Top 10](https://owasp.org/www-project-top-ten/) and [CWE Top 25](https://cwe.mitre.org/top25/archive/2023/2023_top25_list.html), such as:
- * A01: Access control (e.g. Path Traversal, Open Redirect, Exposure of Sensitive Information).
- * A02: Cryptographic Failures (e.g. Weak Algorithm, Insecure Communication).
- * A03: Injection (e.g. SQL Injection, Input Validation, XSS, XPath).
- * A04: Design (e.g. Missing Encryption of Sensitive Data, Persistent Cookies Containing Sensitive Information).
- * A05: Security Misconfiguration (e.g. Cleartext Storage of Sensitive Information in a Cookie or JWT).
- * A07: Identification and Authentication Failures (e.g. Use of Hard-coded Password, Improper Certificate Validation).
- * A08: Data Integrity Failures (e.g. Deserialization of Untrusted Data).
- * A09: Security Logging and Monitoring Failures (e.g. Insertion of Sensitive Information into Log File).
- * A10: Server-Side Request Forgery (SSRF).
-
-* **Privacy risks** with the ability to detect [sensitive data flow](https://docs.bearer.com/explanations/discovery-and-classification/) such as the use of PII, PHI in your app, and [components](https://docs.bearer.com/reference/recipes/) processing sensitive data (e.g. databases like pgSQL, third-party APIs such as OpenAI, Sentry, etc.). This helps generate a [privacy report](https://docs.bearer.com/guides/privacy/) relevant for:
- * Privacy Impact Assessment (PIA).
- * Data Protection Impact Assessment (DPIA).
- * Records of Processing Activities (RoPA) input for GDPR compliance reporting.
+
+- **Security risks and vulnerabilities** using [built-in rules](https://docs.bearer.com/reference/rules/) covering the [OWASP Top 10](https://owasp.org/www-project-top-ten/) and [CWE Top 25](https://cwe.mitre.org/top25/archive/2023/2023_top25_list.html), such as:
+
+ - A01: Access control (e.g. Path Traversal, Open Redirect, Exposure of Sensitive Information).
+ - A02: Cryptographic Failures (e.g. Weak Algorithm, Insecure Communication).
+ - A03: Injection (e.g. SQL Injection, Input Validation, XSS, XPath).
+ - A04: Design (e.g. Missing Encryption of Sensitive Data, Persistent Cookies Containing Sensitive Information).
+ - A05: Security Misconfiguration (e.g. Cleartext Storage of Sensitive Information in a Cookie or JWT).
+ - A07: Identification and Authentication Failures (e.g. Use of Hard-coded Password, Improper Certificate Validation).
+ - A08: Data Integrity Failures (e.g. Deserialization of Untrusted Data).
+ - A09: Security Logging and Monitoring Failures (e.g. Insertion of Sensitive Information into Log File).
+ - A10: Server-Side Request Forgery (SSRF).
+
+- **Privacy risks** with the ability to detect [sensitive data flow](https://docs.bearer.com/explanations/discovery-and-classification/) such as the use of PII, PHI in your app, and [components](https://docs.bearer.com/reference/recipes/) processing sensitive data (e.g. databases like pgSQL, third-party APIs such as OpenAI, Sentry, etc.). This helps generate a [privacy report](https://docs.bearer.com/guides/privacy/) relevant for:
+ - Privacy Impact Assessment (PIA).
+ - Data Protection Impact Assessment (DPIA).
+ - Records of Processing Activities (RoPA) input for GDPR compliance reporting.
Bearer CLI currently supports **JavaScript, TypeScript**, **Ruby**, and **Java** stacks, and more will follow.
@@ -56,6 +58,7 @@ Guides help you make the most of Bearer CLI so you can get up and running quickl
## Explanations
Explanations dive into the rational behind Bearer CLI and explain some of its heavier concepts.
+
- [How Bearer CLI works](/explanations/workflow/)
- [Bearer CLI's scanner types](/explanations/scanners/)
- [Bearer CLI's report types](/explanations/reports/)
diff --git a/docs/explanations/discovery-and-classification.md b/docs/explanations/discovery-and-classification.md
index 9287633cc..3d85a09e7 100644
--- a/docs/explanations/discovery-and-classification.md
+++ b/docs/explanations/discovery-and-classification.md
@@ -94,16 +94,16 @@ In this example:
In other words, Bearer CLI can't match the attributes to a specific data type.
-As a last resort, it applies a new set of patterns called **Known Data Object Patterns**. These attempt to match the object directly to data types, using the attributes as context. In this instance, Bearer CLI understands that the `patient_id` is a medical context and therefore classifies the entire object as a "Health record."
-
-*Side note on PHI: You can tell Bearer CLI that your code is processing health data, and it will make sure to flag information such as email or first_name as PHI instead of PD. To do so, set the `--context` flag to `health`.*
-
+As a last resort, it applies a new set of patterns called **Known Data Object Patterns**. These attempt to match the object directly to data types, using the attributes as context. In this instance, Bearer CLI understands that the `patient_id` is a medical context and therefore classifies the entire object as a "Health record."
+
+_Side note on PHI: You can tell Bearer CLI that your code is processing health data, and it will make sure to flag information such as email or first_name as PHI instead of PD. To do so, set the `--context` flag to `health`._
+
Each object will then need to be reviewed and classified manually by users. This approach avoids false negatives for sensitive data categories.
## How accurate is Bearer CLI's data classification?
-Bearer CLI is built with hundreds of patterns for each data type and context object to minimize false positives at the potential expense of missing some true positives.
-
+Bearer CLI is built with hundreds of patterns for each data type and context object to minimize false positives at the potential expense of missing some true positives.
+
Our latest tests of unknown data sets **yield an accuracy of 93%**, or 7% false positives.
## You can improve Bearer CLI's detection and classification
diff --git a/docs/explanations/index.md b/docs/explanations/index.md
index 6c121b6a4..234234dca 100644
--- a/docs/explanations/index.md
+++ b/docs/explanations/index.md
@@ -6,4 +6,4 @@ title: Explanations
Explanations dive into the rational behind Bearer CLI and explain some of its heavier concepts.
-{% sectionLinks "Explanations" %}
\ No newline at end of file
+{% sectionLinks "Explanations" %}
diff --git a/docs/explanations/reports.md b/docs/explanations/reports.md
index 7f31e69fc..01e4ad973 100644
--- a/docs/explanations/reports.md
+++ b/docs/explanations/reports.md
@@ -81,7 +81,6 @@ _Note: These examples use JSON for readability, but the default format for the p
]
```
-
The third parties portion displays data subjects and data types that are sent to or processed by known third-party services. In the example below, Bearer CLI detects a user email address sent to Sentry via the Sentry SDK and notes that a critical-risk-level rule has triggered associated with this data point.
```json
@@ -171,6 +170,7 @@ You can use this to gain more detailed insights beyond what the Privacy report o
```
If we look at the `db/schema.rb` file mentioned in the report, we can see that email is exposed:
+
```ruby
create_table "users", force: :cascade do |t|
t.string "name"
diff --git a/docs/explanations/scanners.md b/docs/explanations/scanners.md
index ddc89373d..9767cc6df 100644
--- a/docs/explanations/scanners.md
+++ b/docs/explanations/scanners.md
@@ -37,7 +37,6 @@ File: /bear-publishing/lib/jwt.rb:6
You can see a full list of [built-in rules](/reference/rules) or create a [custom rule](/guides/custom-rule/).
-
## Secrets Scanner
The Secrets scanner type detects hard-coded secrets in your code. It checks for common secret patterns such as keys, tokens, and passwords using the popular [Gitleaks](https://gitleaks.io/) library.
@@ -54,4 +53,3 @@ File: ../../OWASP/NodeGoat/README.md:59
You can see a full list of [built-in patterns](https://github.com/Bearer/bearer/blob/main/internal/detectors/gitleaks/gitlab_config.toml).
⚠️ Secret detection patterns are not configurable today. If this is something you'd like to see, please open an [issue](https://github.com/Bearer/bearer/issues).
-
diff --git a/docs/explanations/severity.md b/docs/explanations/severity.md
index a38ed9668..ae846da8b 100644
--- a/docs/explanations/severity.md
+++ b/docs/explanations/severity.md
@@ -1,6 +1,7 @@
---
title: Dynamic severity levels
---
+
# Dynamic Severity Levels
In order to help you decide which security findings to tackle first, Bearer CLI dynamically sets the severity of each detection. There are five levels: critical, high, medium, low, and warning. You'll see this in the security report output like in the finding below which has a severity of "High":
@@ -15,7 +16,7 @@ File: frontend/src/app/login/login.component.ts:102
102 localStorage.setItem('email', this.user.email)
```
-Bearer CLI's ability to dynamically set severity means **a single rule can trigger at multiple severity levels** depending on how *severe* or risky the code appears.
+Bearer CLI's ability to dynamically set severity means **a single rule can trigger at multiple severity levels** depending on how _severe_ or risky the code appears.
This doc explains how Bearer CLI calculates severity and the rationale behind behind the algorithm.
@@ -27,7 +28,7 @@ Each rule defines a severity level in its YML config:
severity: low
```
-This is the rule's *base* or *default* severity. It is the lowest severity the rule can have, but depending on other variables that we'll get into shortly, that level can go higher. *The only exception is "warning" which is not affected by the dynamic severity system and will never increase.*
+This is the rule's _base_ or _default_ severity. It is the lowest severity the rule can have, but depending on other variables that we'll get into shortly, that level can go higher. _The only exception is "warning" which is not affected by the dynamic severity system and will never increase._
The base severity level of default rules comes from an overall assessment of the rule, but is highly influenced by community resources like the [CWE Top 25 Most Dangerous Software Weaknesses](https://cwe.mitre.org/top25/archive/2022/2022_cwe_top25.html) and similar guidance from the industry. If you're building a custom rule, we recommend using a base severity level that best fits your risk assessment for the rule.
@@ -44,7 +45,7 @@ The algorithm also considers how the rule is triggered. Rule triggers are split
- **presence**: These rules trigger if the code exists, but isn’t dependent on data types. This could be a bad practice, but not data-specific.
- **absence**: These rules expect code to exist, but can’t find it. Examples are best practices, must-have settings, etc.
-*Note: These categories don’t map directly to configuration options in rule YAML files. See the [custom rule guide](/guides/custom-rule/) for which trigger types to use when writing your own rules.*
+_Note: These categories don’t map directly to configuration options in rule YAML files. See the [custom rule guide](/guides/custom-rule/) for which trigger types to use when writing your own rules._
## Assigning weights to each variable
diff --git a/docs/explanations/workflow.md b/docs/explanations/workflow.md
index 35dd381d4..1cde59f25 100644
--- a/docs/explanations/workflow.md
+++ b/docs/explanations/workflow.md
@@ -16,7 +16,7 @@ When you run a scan for the first time with the default settings, the applicatio
```mermaid
%%{ init: { 'flowchart': { 'curve': 'stepAfter' } } }%%
flowchart TB
-
+
direction TB
loadrule(Load rules) --> evalrule
scan(Start scan) --> parse(Enumerate and\n parse files)
@@ -25,18 +25,18 @@ flowchart TB
DNC --> df(Generate underlying \ndetection report)
df --> evalrule(Match and evaluate \nrules)
evalrule --> E(Generate report)
-
+
subgraph AST[Generate AST]
direction LR
AST1(Tree sitter) --> |Processes source| AST2(AST)
end
-
+
subgraph DNC[Detection Engine]
direction LR
dd(Detect data types) --> cd(Classify data types)
end
-
+
```
With the exception of loading rules from the [bearer-rules](https://github.com/bearer/bearer-rules) repo and checking the latest version, everything happens locally in your environment.
@@ -108,15 +108,15 @@ For example, a security rule requires the initialization of the session after th
This code needs to raise an alert:
```jsx
-app.use(session({}))
-app.use(express.static(__dirname + "/public"))
+app.use(session({}));
+app.use(express.static(__dirname + "/public"));
```
While this one should not:
```jsx
-app.use(express.static(__dirname + "/public"))
-app.use(session({}))
+app.use(express.static(__dirname + "/public"));
+app.use(session({}));
```
### Type analysis
@@ -129,16 +129,16 @@ If we take this code snippet as an example:
```tsx
interface User {
- email: string
- gender: string
+ email: string;
+ gender: string;
}
let user: User = {
email: "foo@example.com",
gender: "male",
-}
+};
-console.log(`User is: ${user}`)
+console.log(`User is: ${user}`);
```
We take a user as the source and analyze the context of the source. We know that a user contains some personal information, and that may leak into the logger (sink). Therefore, we are able to report that as a failure.
diff --git a/docs/guides/bearer-cloud.md b/docs/guides/bearer-cloud.md
index 6b988be5b..0da274f31 100644
--- a/docs/guides/bearer-cloud.md
+++ b/docs/guides/bearer-cloud.md
@@ -15,18 +15,18 @@ If you're looking to manage product and application code security at scale, Bear
We provide many options for you to configure Bearer Cloud with your projects, more information below.
![View Jira Ticket](/assets/img/cloud/setup.png)
-
### GitHub App
The easiest way to start with Bearer Cloud, is to use Bearer's GitHub App which allows you to configure your project in 1-click.
Here is what happens behind the scenes:
-- A GitHub Action is automatically configured on your project, it will trigger scans on PR and on merge to your main branch. You can tweak the configuration however you want afterward.
+
+- A GitHub Action is automatically configured on your project, it will trigger scans on PR and on merge to your main branch. You can tweak the configuration however you want afterward.
- A Bearer Cloud API Key is generated and configured on your GitHub project so that scan results are securely sent to your Bearer Cloud Dashboard.
-The best part? Bearer does all this without ever having access to your source code beyond the *.github/workflows* directory, where the GitHub Action is configured.
+The best part? Bearer does all this without ever having access to your source code beyond the _.github/workflows_ directory, where the GitHub Action is configured.
-In addition to a 1-click setup, **the GitHub App provides the best developer experience** thanks to the ability for them to ignore findings directly in the PR workflow, and for your Security team to review those in Bearer Cloud Dashboard.
+In addition to a 1-click setup, **the GitHub App provides the best developer experience** thanks to the ability for them to ignore findings directly in the PR workflow, and for your Security team to review those in Bearer Cloud Dashboard.
### GitHub Action
@@ -76,40 +76,37 @@ This action overwrites the current ignore file (including any new additions not
## Jira integration
-The Jira integration is available on the *Settings > Integrations* page.
+The Jira integration is available on the _Settings > Integrations_ page.
To use the integration, you must connect a Jira account and allow access to the required permissions through the OAuth login.
Following your company's best practices, you can provide access to an existing account or set up a new user in Jira specifically for this integration. Whichever option you choose, make sure the account has the access permissions required to create and update tickets in the projects you want to.
You have two ways to use the Jira Integration:
+
1. Creating a Jira Ticket directly from a finding.
-![Create Jira Ticket](/assets/img/jira-integration/create.png)
+ ![Create Jira Ticket](/assets/img/jira-integration/create.png)
2. Link a finding to an existing Jira ticket.
-![Link Jira Ticket](/assets/img/jira-integration/link.png)
+ ![Link Jira Ticket](/assets/img/jira-integration/link.png)
Once a finding is associated with a Jira ticket, you can quickly see it in the interface, view the ticket status and go to the ticket.
![View Jira Ticket](/assets/img/jira-integration/view.png)
-
{% callout "warn" %}
Findings on Bearer Cloud are only marked resolved when the associated code is fixed. If the associated Jira ticket is closed, but no code fix has been applied, the finding will stay open. The source of truth is always the code.
{% endcallout %}
-
## Slack integration
-The Slack integration is available on the *Settings > Integrations* page.
+The Slack integration is available on the _Settings > Integrations_ page.
To use the integration, you must connect a Slack account and allow access to the required permissions through the OAuth login, then select a default channel where you want to receive notifications on new findings.
Below an example of a Slack notification triggered by a new finding:
![Slack notification](/assets/img/slack-integration/notification.png)
-
## Need help?
Get in touch with our team directly on [Discord](https://discord.com/invite/eaHZBJUXRF) or [book a demo](https://www.bearer.com/demo) with one of our engineer.
-
diff --git a/docs/guides/configure-scan.md b/docs/guides/configure-scan.md
index f0c7f4ccb..6d67f911e 100644
--- a/docs/guides/configure-scan.md
+++ b/docs/guides/configure-scan.md
@@ -25,8 +25,8 @@ bearer scan . --scanner secrets
## Only report new findings on a branch
{% callout %}
- Differential scanning avoids scanning your entire codebase and drastically
- reduces scan times. We recommended that you use this feature when possible.
+Differential scanning avoids scanning your entire codebase and drastically
+reduces scan times. We recommended that you use this feature when possible.
{% endcallout %}
When scanning a Git repository, you can choose to only report new findings that
@@ -59,7 +59,7 @@ To ignore this finding, run: bearer ignore add 4b0883d52334dfd9a4acce2fcf810121_
...
```
-If a finding is not relevant, you can ignore it automatically from future scans using the ```bearer ignore add``` command. This adds the finding's fingerprint to your ignore file. You can also provide optional author information or a comment:
+If a finding is not relevant, you can ignore it automatically from future scans using the `bearer ignore add` command. This adds the finding's fingerprint to your ignore file. You can also provide optional author information or a comment:
```bash
bearer ignore add 4b0883d52334dfd9a4acce2fcf810121_0 \
@@ -115,7 +115,7 @@ In javascript:
```javascript
// bearer:disable javascript_lang_logger
function logUser(user) {
- log.info(user.name)
+ log.info(user.name);
}
```
@@ -130,9 +130,9 @@ end
```javascript
function logUser(user) {
- log.info(user.name)
+ log.info(user.name);
// bearer:disable javascript_lang_logger
- log.info(user.uuid)
+ log.info(user.uuid);
}
```
diff --git a/docs/guides/custom-rule.md b/docs/guides/custom-rule.md
index 436cc6d28..58486ae10 100644
--- a/docs/guides/custom-rule.md
+++ b/docs/guides/custom-rule.md
@@ -18,14 +18,14 @@ To better understand the structure of a rule file, let’s look at each key:
- `patterns`: See the section below for the Pattern Syntax.
- `sanitizer`: The id of an auxiliary rule which is used to restrict the
-main rule. If the sanitizer rule matches then the main rule is disabled inside
-the matched code.
+ main rule. If the sanitizer rule matches then the main rule is disabled inside
+ the matched code.
- `languages`: An array of the languages the rule applies to. Available values are: `ruby`, `javascript`, `java`
- `trigger`: Defines under which conditions the rule should raise a result. Optional.
- `match_on`: Refers to the rule's pattern matches.
- `presence`: Triggers if the rule's pattern is detected. (Default)
- `absence`: Rule triggers on the absence of a pattern, but the presence of a `required_detection`. Examples include best practices such as missing configuration like forcing SSL communication. Note: rules that match on `absence` need a `required_detection` to be set.
- - `required_detection`: Used with the `match_on: absence` trigger. Indicates which rule is required to activate the result on the absence of the main rule.
+ - `required_detection`: Used with the `match_on: absence` trigger. Indicates which rule is required to activate the result on the absence of the main rule.
- `data_types_required`: Sometimes we may want a rule to trigger only for applications that process sensitive data. One example is password strength, where the rule only triggers if sensitive data types are found in the application.
- `false`: Default. Rule triggers whether or not any data types have been detected in the application.
- `true`: Rule only triggers if at least one data type is detected in the application.
@@ -41,7 +41,6 @@ the matched code.
- `skip_data_types`: Allows you to prevent the specified data types from triggering this rule. Takes an array of strings matching the data type names. Example: “Passwords”. (Optional)
- `only_data_types`: Allows you to limit the specified data types that trigger this rule. Takes an array of strings matching the data type names. Example: “Passwords”. (Optional)
-
## Patterns
Patterns allow rules to look for matches in your code, much like regular expressions, but they take advantage of Bearer CLI’s underlying data type detection capabilities.
@@ -77,7 +76,7 @@ In the YAML above, we’re using two patterns. One for a new FTP connection and
A new pattern appears! This time, it looks for sensitive data types inside the `Net::FTP.open()` block, using Bearer CLI’s built-in `datatype` detection. To better understand what’s happening, let’s examine variables and filters in more detail.
-*Note: in the example above, the third pattern uses a different YAML syntax and the `pattern` key. This is required to define filters for a pattern.*
+_Note: in the example above, the third pattern uses a different YAML syntax and the `pattern` key. This is required to define filters for a pattern._
### Variables
@@ -140,9 +139,9 @@ patterns:
- `length_less_than`: Compare the length of the (string) variable to the number provided with a **less than** statement.
- `string_regex`: Applies a regular expression test against the string value of the linked variable. This uses the [RE2 syntax](https://github.com/google/re2/wiki/Syntax).
- `less_than`: Compare the variable to the number provided with a **less than** statement.
- - `less_than_or_equal`: Compare the variable to the number provided with a *less than or equal* statement.
- - `greater_than`: Compare the variable to the number provided with a *greater than* statement.
- - `greater_than_or_equal`: Compare the variable to the number provided with a *greater than or equal* statement.
+ - `less_than_or_equal`: Compare the variable to the number provided with a _less than or equal_ statement.
+ - `greater_than`: Compare the variable to the number provided with a _greater than_ statement.
+ - `greater_than_or_equal`: Compare the variable to the number provided with a _greater than or equal_ statement.
- `regex`: Applies a regular expression test against the code content of the linked variable. This uses the [RE2 syntax](https://github.com/google/re2/wiki/Syntax).
- `not`: Inverts the results of another filter. Can be used with a single comparison key by nesting the key below `not`, or with an `either` block by nesting the block below `not`.
- `either`: Allows for multiple conditional checks. It behaves like an OR condition. You can nest any filter inside of `either`, such as `values`, `detection`, etc.
@@ -219,11 +218,11 @@ Add the rule to your bearer config file.
external-rule-dir: /path/to/rules/
```
-*Note: Including an external rules directory adds custom rules to the security report. To only run custom rules, you’ll need to use the `only-rule` flag or configuration setting and pass it the IDs of your custom rule.*
+_Note: Including an external rules directory adds custom rules to the security report. To only run custom rules, you’ll need to use the `only-rule` flag or configuration setting and pass it the IDs of your custom rule._
## Rule best practices
-1. Matching patterns in a rule cause *rule findings*. Depending on the severity level, findings can cause CI to exit and will display in the security report. Keep this in mind when writing patterns so you don’t match a best practice condition and trigger a failed scan.
+1. Matching patterns in a rule cause _rule findings_. Depending on the severity level, findings can cause CI to exit and will display in the security report. Keep this in mind when writing patterns so you don’t match a best practice condition and trigger a failed scan.
2. Lean on the built-in resources, like the data type detectors and recipes before creating complex rules.
## Rule starter
@@ -270,18 +269,18 @@ patterns:
variable: QUERY
detection: my_rule_sanitized
auxiliary:
-# Rule 1
+ # Rule 1
- id: my_rule_sanitized
patterns:
- pattern: sanitize($)
filters:
- variable: SANITIZED
detection: my_rule_user_input
-# Rule 2
+ # Rule 2
- id: my_rule_user_input_source
patterns:
- user_input
-# Rule 3
+ # Rule 3
- id: my_rule_user_input
patterns:
- pattern: $
@@ -303,11 +302,13 @@ metadata:
The `patterns` portion at the beginning should look familiar. The only difference compared to most rules is that it references `detection` types that are auxiliary rules. The main pattern looks for `sql_query`, and then uses filters to tell Bearer CLI to apply each detection to any code it finds in `$`. In this case, it wants to trigger the rule using `my_rule_user_input` but NOT `my_rule_sanitized`. I've labeled the core rule/pattern combo as rule 0, then each Aux rule as rules 1, 2, and 3 to make them easier to follow.
Let's start with Rule 0's positive case and follow the detection:
+
- **Rule 0**'s positive filter calls on `my_rule_user_input`, **Rule 3**, to handle the detection.
- **Rule 3** uses the `my_rule_user_input_source` detection, which belongs to **Rule 2**. _It sets `contains: false`, but we'll come back to that._
- **Rule 2** is a simple pattern that looks for `user_input`. This is from our initial code target example. Think of it as a variable that was passed to `sql_query`.
That chain of detections will result in a match for the non-sanitized code. Now let's look at the the negative, `not` filter case and see if we notice any overlap.
+
- **Rule 0**'s negative filter calls on `my_rule_sanitized`, which is **Rule 1**.
- **Rule 1** sets up its own pattern to look for the `sanitize` function, then calls on `my_rule_user_input`, **Rule 3**, to handle the detection.
- **Rule 3**, as we saw before, bounces the detection over to **Rule 2** to handle the code portion.
@@ -360,13 +361,17 @@ metadata:
```
## Syntax updates
+
### v1.1 Trigger changes
+
If you have created a custom rule before v1.1 you will need to make the some small changes
#### Local, Present
+
If you use `trigger: local` or `trigger: present` you can simply remove the trigger attribute and your rule should work as before.
#### Absence
+
If you use `trigger: absence`, replace it with the following syntax and remove `trigger_rule_on_presence_of` from your existing rule.
```yaml
@@ -376,6 +381,7 @@ trigger:
```
#### Global
+
For `trigger: global` replace it with the following syntax.
```yaml
diff --git a/docs/guides/dataflow.md b/docs/guides/dataflow.md
index efaeb8e2e..4873b08ea 100644
--- a/docs/guides/dataflow.md
+++ b/docs/guides/dataflow.md
@@ -9,13 +9,13 @@ Bearer CLI's [data flow report type](/explanations/reports/#data-flow-report) pr
The data flow report is made up of four sections:
- Data types: For any data type Bearer detects, the report will display their categories, each instance within the codebase, and associated model and field information if available.
-- Risks: For languages that support security report rules, the report will include a `risks` section with information about any findings and their associated location within the codebase.
+- Risks: For languages that support security report rules, the report will include a `risks` section with information about any findings and their associated location within the codebase.
- Components: Resources such as internal data stores, cloud data stores, and third party APIs are displayed alongside their detection location.
- Dependencies: A list of dependencies detected in package managers, along with their linked version.
## Getting started
-If you haven't already, install Bearer CLI using the instructions on the [installation page](/reference/installation/) or the [quick start](/quickstart/).
+If you haven't already, install Bearer CLI using the instructions on the [installation page](/reference/installation/) or the [quick start](/quickstart/).
To run your first data flow report, navigate to the project root and use the `bearer scan` command with the `--report dataflow` flag:
@@ -37,33 +37,33 @@ If you have [jq](https://stedolan.github.io/jq/) installed, it can format the ou
bearer scan . --report dataflow | jq
```
-Below is an excerpt of the `data_types` portion of the data flow report. It includes the *Email address* data type with specifics on where Bearer CLI detected it.
+Below is an excerpt of the `data_types` portion of the data flow report. It includes the _Email address_ data type with specifics on where Bearer CLI detected it.
```json
{
"data_types": [
- {
- "category_name": "Contact",
- "category_groups": ["PII", "Personal Data"],
- "name": "Email Address",
- "detectors": [
- {
- "name": "typescript",
- "locations": [
- {
- "filename": "data/types.ts",
- "full_filename": "data/types.ts",
- "start_line_number": 22,
- "start_column_number": 3,
- "end_column_number": 8,
- "field_name": "email",
- "object_name": "User",
- "subject_name": "User"
- },
- ]
- }
- ]
- }
+ {
+ "category_name": "Contact",
+ "category_groups": ["PII", "Personal Data"],
+ "name": "Email Address",
+ "detectors": [
+ {
+ "name": "typescript",
+ "locations": [
+ {
+ "filename": "data/types.ts",
+ "full_filename": "data/types.ts",
+ "start_line_number": 22,
+ "start_column_number": 3,
+ "end_column_number": 8,
+ "field_name": "email",
+ "object_name": "User",
+ "subject_name": "User"
+ }
+ ]
+ }
+ ]
+ }
]
}
```
@@ -72,7 +72,7 @@ Next, if the codebase [supports rules](/reference/supported-languages/), the rep
```json
{
- "risks": [
+ "risks": [
{
"detector_id": "javascript_express_exposed_dir_listing",
"locations": [
@@ -95,10 +95,10 @@ Next, if the codebase [supports rules](/reference/supported-languages/), the rep
"name": "app.use($\u003c...\u003eserveIndex()$\u003c...\u003e)\n"
}
]
- },
+ }
]
}
- ]
+ ]
}
```
@@ -119,7 +119,7 @@ Next, the `components` section contains third party services and local or extern
"line_number": 36
}
]
- },
+ }
// ...
]
}
@@ -135,7 +135,7 @@ Finally, the `dependencies` portion analyzes package details for each language a
"version": "15.0.4",
"filename": "frontend/package.json",
"detector": "package-json"
- },
+ }
// ...
]
}
@@ -151,4 +151,4 @@ bearer scan . --report dataflow --output output/path/data-flow-report.json
## Next steps
-For more ways to make the most of our Bearer CLI, see our guide on [configuring the scan](/guides/configure-scan/) and the [commands reference](/reference/commands/). Need additional help? [Open an issue]({{meta.links.issues}}) or join our [Discord community]({{meta.links.discord}}).
\ No newline at end of file
+For more ways to make the most of our Bearer CLI, see our guide on [configuring the scan](/guides/configure-scan/) and the [commands reference](/reference/commands/). Need additional help? [Open an issue]({{meta.links.issues}}) or join our [Discord community]({{meta.links.discord}}).
diff --git a/docs/guides/github-action.md b/docs/guides/github-action.md
index b84e7708f..f8118b3a4 100644
--- a/docs/guides/github-action.md
+++ b/docs/guides/github-action.md
@@ -29,11 +29,13 @@ Just as with the CLI app, you can configure the action to meet the needs of your
{% githubAction bearerAction.inputs %}
### Outputs
+
If you want to process the output of the cli we recommend using the `output` input above to write a file that can be used elsewhere, but we also provide some basic outputs you can use if needed:
{% githubAction bearerAction.outputs %}
## Configure GitHub code scanning
+
Bearer CLI supports [GitHub code scanning](https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning). By using the SARIF output format, you can display [security report](/explanations/reports/#security-report) findings directly in the Security tab of your repository.
![Bearer CLI results in GitHub security tab](/assets/img/gh-code-scanning.jpg)
@@ -56,6 +58,7 @@ See our guide on [configuring a scan](/guides/configure-scan#only-report-new-fin
for more information on differential scans.
## Code Review Comments
+
Bearer CLI supports [Reviewdog](https://github.com/reviewdog/reviewdog) rdjson format so you can use any of the reviewdog reporters to quickly add bearer feedback directly to your pull requests.
![Bearer CLI results in Github PR](/assets/img/gh-pr-review.png)
@@ -73,4 +76,3 @@ We can monitor findings with [Defect Dojo](https://github.com/DefectDojo/django-
For more ways to use Bearer, check out the different [report types](/explanations/reports/), [available rules](/reference/rules/), [supported data types](/reference/datatypes/).
Have a question or need help? Join our [Discord community](https://discord.gg/eaHZBJUXRF) or [open an issue on GitHub](https://github.com/Bearer/bearer/issues).
-
diff --git a/docs/guides/gitlab.md b/docs/guides/gitlab.md
index e7990b8a0..d95ded83e 100644
--- a/docs/guides/gitlab.md
+++ b/docs/guides/gitlab.md
@@ -4,7 +4,6 @@ title: Using GitLab CI/CD
# Using GitLab CI/CD
-
Running Bearer from the CLI is great, but if you want it integrated directly with your Git workflow there's nothing easier than a GitLab CI/CD integration. If you're unfamiliar with GitLab CI/CD, here's a [primer available from GitLab CI/CD](https://docs.gitlab.com/ee/ci/). You can also see how the integration works directly on our [Bear Publishing example app](https://gitlab.com/bearer/bear-publishing/-/blob/main/.gitlab-ci.yml).
## Getting started
@@ -57,4 +56,3 @@ To keep the thing in one job we download each binary then run the two commands i
For more ways to use Bearer, check out the different [report types](/explanations/reports/), [available rules](/reference/rules/), [supported data types](/reference/datatypes/).
Have a question or need help? Join our [Discord community](https://discord.gg/eaHZBJUXRF) or [open an issue on GitHub](https://github.com/Bearer/bearer/issues).
-
diff --git a/docs/guides/index.md b/docs/guides/index.md
index bc01ca5d3..638f6a03c 100644
--- a/docs/guides/index.md
+++ b/docs/guides/index.md
@@ -6,4 +6,4 @@ title: Guides
Guides help you make the most of Bearer CLI so you can get up and running quickly. Have a request for a new guide? Open an [issue on GitHub]({{meta.links.issues}}).
-{% sectionLinks "Guides" %}
\ No newline at end of file
+{% sectionLinks "Guides" %}
diff --git a/docs/guides/integration-strategy.md b/docs/guides/integration-strategy.md
index 675f33be7..74d7c4ab7 100644
--- a/docs/guides/integration-strategy.md
+++ b/docs/guides/integration-strategy.md
@@ -4,13 +4,14 @@ title: Strategy on how to integrate Bearer into your workflow
# Strategy on how to integrate Bearer into your workflow
-Welcome to this guide on integrating Bearer into your development process.
+Welcome to this guide on integrating Bearer into your development process.
Follow these steps to seamlessly incorporate Bearer at every stage of your workflow. We understand that adopting new practices can take time, so we provide this guide as a strategy blueprint to gradually implement these changes, allowing you and your team to adjust easily.
## Step 1: Understand the current state of your application
Before integrating Bearer into your CI/CD pipeline, it's essential to assess the existing landscape. To do so, follow these steps:
+
- Install Bearer on your local machine (see [doc](/quickstart)).
- Run the scan command on your repository main branch.
@@ -41,18 +42,18 @@ If your code triggers any findings, as show above, read the next section. Otherw
## Step 2: Triage and remediate existing findings
-We need to start triaging findings from the CLI on your local machine.
+We need to start triaging findings from the CLI on your local machine.
Here is our recommended strategy:
+
1. Start by addressing "Critical" findings, then "High", "Medium", and finally "Low" findings.
-2. Remove any irrelevant findings for each severity level by using the ```bearer ignore``` command and categorize them as *false positive* (see [doc](/guides/configure-scan/#ignore-specific-findings)).
-3. If a rule is problematic for your codebase, skip it entirely using the ```--skip-rule``` option (see [doc](/guides/configure-scan/#skip-rules-for-the-entire-scan)).
+2. Remove any irrelevant findings for each severity level by using the `bearer ignore` command and categorize them as _false positive_ (see [doc](/guides/configure-scan/#ignore-specific-findings)).
+3. If a rule is problematic for your codebase, skip it entirely using the `--skip-rule` option (see [doc](/guides/configure-scan/#skip-rules-for-the-entire-scan)).
4. Review the remaining findings with your team and begin fixing them.
5. Commit your changes before running another scan to ensure the scanner picks up the changes.
6. If you have unresolved findings, choose one of two strategies:
- - Postpone handling them for now, but note that they will appear on future scans.
- - Ignore them using the ```bearer ignore``` command, categorizing them as *allowed* and providing a comment explaining why.
-
+ - Postpone handling them for now, but note that they will appear on future scans.
+ - Ignore them using the `bearer ignore` command, categorizing them as _allowed_ and providing a comment explaining why.
{% callout "info" %}
If you have many findings and need assistance from your team to triage and remediate them, consider using Bearer Cloud, a UI interface that complements Bearer CLI for faster resolution.
@@ -63,6 +64,7 @@ If you have many findings and need assistance from your team to triage and remed
To prevent the introduction of new issues in your codebase, it is crucial to identify and address them before developers merge their code into the main branch, as part of your CI.
Start configuring a Bearer scan when developers create a new PR/MR. This allows for immediate feedback and provides the necessary context for any detected findings:
+
- For GitHub Actions, refer to [using GitHub Action](/guides/github-action/#pull-request-diff).
- For GitLab CI, refer to the [using GitLab Action](/guides/gitlab/#gitlab-merge-request-diff).
- For CircleCI, refer to [using CircleCI](/guides/ci-setup/#circleci).
@@ -71,9 +73,10 @@ Start configuring a Bearer scan when developers create a new PR/MR. This allows
Also, depending on your GitHub or GitLab configuration, you can choose to block MR/PR until all findings have been resolved. However, it is important to consider the impact this may have on your development team before implementing this setting.
When integrating Bearer into your CI, we recommend the following configuration:
-1. Start by only triggering critical and high findings using the ```--severity``` option (see [doc](/guides/configure-scan/#limit-severity-levels)).
-2. If you find that certain rules are not accurately identifying issues for your stack, you can disable them using the ```--skip-rule``` option (see [doc](/guides/configure-scan/#skip-rules-for-the-entire-scan)).
-3. After a few weeks of using Bearer in your CI, fine-tune these settings and consider including more severity-level findings.
+
+1. Start by only triggering critical and high findings using the `--severity` option (see [doc](/guides/configure-scan/#limit-severity-levels)).
+2. If you find that certain rules are not accurately identifying issues for your stack, you can disable them using the `--skip-rule` option (see [doc](/guides/configure-scan/#skip-rules-for-the-entire-scan)).
+3. After a few weeks of using Bearer in your CI, fine-tune these settings and consider including more severity-level findings.
{% callout "info" %}
If you are concerned about displaying a failed status in your CI, you have the option to force a successful exit code regardless of the presence of findings (see doc).
@@ -83,11 +86,9 @@ If you are concerned about displaying a failed status in your CI, you have the o
When integrating Bearer into your CI, it performs differential scans that only analyze the code changes. This approach provides developers with timely feedback, only on their code, and ensures fast scans without unnecessary waiting.
-However, some findings may persist. This could be because they haven't been addressed during the previous step (*if you don't enforce PR/PR checks*), or because a complete code scan is required to identify specific findings spanning across unmodified code.
-
-To prevent significant security vulnerabilities in production, we recommend conducting a full scan as part of your CD process or when merging code into the main branch. Since breaking deployments is a serious matter, we advise limiting scanning to certain severity levels, such as critical, or to specific rules using the ```--only-rule``` option (see [doc](/guides/configure-scan/#run-only-specified-rules)).
-
+However, some findings may persist. This could be because they haven't been addressed during the previous step (_if you don't enforce PR/PR checks_), or because a complete code scan is required to identify specific findings spanning across unmodified code.
+To prevent significant security vulnerabilities in production, we recommend conducting a full scan as part of your CD process or when merging code into the main branch. Since breaking deployments is a serious matter, we advise limiting scanning to certain severity levels, such as critical, or to specific rules using the `--only-rule` option (see [doc](/guides/configure-scan/#run-only-specified-rules)).
## Step 5: Schedule regular complete scans
@@ -97,9 +98,8 @@ To address these findings and maintain effective control over your security post
Once the scan is complete, you can employ the same logic as step 2) to prioritize and resolve any identified findings.
-
## Conclusion
-As you can see, our recommendations aim to strike a balance between tight security and seamless integration into your development workflow.
+As you can see, our recommendations aim to strike a balance between tight security and seamless integration into your development workflow.
-Feel free to adapt them to your own experience and specific organization requirements. For instance, you have the option to opt for a more rigid or flexible approach.
\ No newline at end of file
+Feel free to adapt them to your own experience and specific organization requirements. For instance, you have the option to opt for a more rigid or flexible approach.
diff --git a/docs/guides/privacy.md b/docs/guides/privacy.md
index 5c6a9453b..c7da62021 100644
--- a/docs/guides/privacy.md
+++ b/docs/guides/privacy.md
@@ -36,7 +36,7 @@ If you have [jq](https://stedolan.github.io/jq/) installed, it can format the ou
bearer scan . --report privacy --format json | jq
```
-Here's a portion of the output. Notice that it is broken down into two main sets: *subjects* and *third_party*.
+Here's a portion of the output. Notice that it is broken down into two main sets: _subjects_ and _third_party_.
```json
{
@@ -68,9 +68,7 @@ Here's a portion of the output. Notice that it is broken down into two main sets
{
"third_party": "Amazon AWS APIs",
"subject_name": "Unknown",
- "data_types": [
- "Unknown"
- ],
+ "data_types": ["Unknown"],
"critical_risk_failure_count": 0,
"high_risk_failure_count": 0,
"medium_risk_failure_count": 0,
@@ -81,7 +79,7 @@ Here's a portion of the output. Notice that it is broken down into two main sets
}
```
-Subjects are the individuals Bearer CLI associates with [data types](/reference/datatypes/). This information is derived from the [discovery and classification engine](/explanations/discovery-and-classification/). You can adjust this by overriding the [subject mapping](#subject-mapping). In this instance, Bearer CLI found some data types associated with the standard *User* subject, and one datatype with an *Unknown* subject. You can see the `detection_count` for each, as well as statistics for any rule findings linked to the datatype detection.
+Subjects are the individuals Bearer CLI associates with [data types](/reference/datatypes/). This information is derived from the [discovery and classification engine](/explanations/discovery-and-classification/). You can adjust this by overriding the [subject mapping](#subject-mapping). In this instance, Bearer CLI found some data types associated with the standard _User_ subject, and one datatype with an _Unknown_ subject. You can see the `detection_count` for each, as well as statistics for any rule findings linked to the datatype detection.
In addition to subjects, Bearer CLI found one third party. In this case, the application is interacting with AWS. It's not clear if any datatypes are sent to AWS. In instances where the scan makes a clearer detection, the report will include the subject and data types sent to third parties. For example, in the [bear publishing](https://github.com/Bearer/bear-publishing) example app, a scan detects email addresses sent to Sentry.
@@ -89,9 +87,7 @@ In addition to subjects, Bearer CLI found one third party. In this case, the app
{
"third_party": "Sentry",
"subject_name": "User",
- "data_types": [
- "Email Address"
- ],
+ "data_types": ["Email Address"],
"critical_risk_failure_count": 0,
"high_risk_failure_count": 1,
"medium_risk_failure_count": 0,
diff --git a/docs/guides/shell-completion.md b/docs/guides/shell-completion.md
index 30cc53e43..d9487de72 100644
--- a/docs/guides/shell-completion.md
+++ b/docs/guides/shell-completion.md
@@ -12,6 +12,7 @@ Completions make it easier to use Bearer on the command line. In this guide we w
$ echo $SHELL
/bin/zsh
```
+
In our example it's zsh, but this will vary depending on your $SHELL.
## Test the completion scripts
@@ -48,4 +49,3 @@ bearer completion zsh > $(brew --prefix)/share/zsh/site-functions/_bearer
```
You will need to start a new shell for this setup to take effect.
-
diff --git a/docs/quickstart.md b/docs/quickstart.md
index cb9b759c9..31d86f2fd 100644
--- a/docs/quickstart.md
+++ b/docs/quickstart.md
@@ -77,5 +77,4 @@ WARNING: 0
In addition of the security report, you can also run a [privacy report](/explanations/reports/#privacy-report).
-
Ready for the next step? Additional options for using and configuring the `scan` command can be found in [configuring the scan command](/guides/configure-scan/).
diff --git a/docs/readme.md b/docs/readme.md
index 81bbea792..1f7c7090d 100644
--- a/docs/readme.md
+++ b/docs/readme.md
@@ -1,3 +1,3 @@
# Bearer CLI Documentation
-Welcome to the Bearer CLI docs documentation. To learn more about contributing to the docs, see the [contribtuing guide](https://docs.bearer.com/contributing/docs/)
\ No newline at end of file
+Welcome to the Bearer CLI docs documentation. To learn more about contributing to the docs, see the [contribtuing guide](https://docs.bearer.com/contributing/docs/)
diff --git a/docs/reference/config.md b/docs/reference/config.md
index ac360dfa2..922991a3b 100644
--- a/docs/reference/config.md
+++ b/docs/reference/config.md
@@ -18,54 +18,54 @@ This creates a config file in your current directory. Below is an annotated vers
```yml
# Report settings
report:
- # Specify report format (json, yaml, sarif, gitlab-sast)
- format: ""
- # Specify the output path for the report.
- output: ""
- # Specify the type of report (security, privacy, dataflow).
- report: security
- # Specify which severities are included in the report as a comma separated string
- severity: "critical,high,medium,low,warning"
+ # Specify report format (json, yaml, sarif, gitlab-sast)
+ format: ""
+ # Specify the output path for the report.
+ output: ""
+ # Specify the type of report (security, privacy, dataflow).
+ report: security
+ # Specify which severities are included in the report as a comma separated string
+ severity: "critical,high,medium,low,warning"
# Rule settings
rule:
- # Disable all default rules by setting this value to true.
- disable-default-rules: false
- # Specify the comma-separated ids of the rules you would like to run;
- # skips all other rules.
- only-rule: []
- # Specify the comma-separated ids of the rules you would like to skip;
- # runs all other rules.
- skip-rule: []
+ # Disable all default rules by setting this value to true.
+ disable-default-rules: false
+ # Specify the comma-separated ids of the rules you would like to run;
+ # skips all other rules.
+ only-rule: []
+ # Specify the comma-separated ids of the rules you would like to skip;
+ # runs all other rules.
+ skip-rule: []
# Scan settings
scan:
- # Specify the type of scanner (sast, secrets).
- scanner:
- - sast
- - secrets
- # Expand context of schema classification
- # For example, "health" will include data types particular to health
- context: ""
- # Override default data subject mapping by providing a path to a custom mapping JSON file
- data-subject-mapping: ""
- # Enable debug logs
- debug: false
- # Do not attempt to resolve detected domains during classification.
- disable-domain-resolution: true
- # Set timeout when attempting to resolve detected domains during classification.
- domain-resolution-timeout: 3s
- # Specify directories paths that contain yaml files with external rules configuration.
- external-rule-dir: []
- # Disable the cache and runs the detections again every time scan runs.
- force: false
- # Define regular expressions for better classification of private or unreachable domains
- # e.g., ".*.my-company.com,private.sh"
- internal-domains: []
- # Suppress non-essential messages
- quiet: false
- # Specify the comma separated files and directories to skip. Supports * syntax.
- skip-path: []
+ # Specify the type of scanner (sast, secrets).
+ scanner:
+ - sast
+ - secrets
+ # Expand context of schema classification
+ # For example, "health" will include data types particular to health
+ context: ""
+ # Override default data subject mapping by providing a path to a custom mapping JSON file
+ data-subject-mapping: ""
+ # Enable debug logs
+ debug: false
+ # Do not attempt to resolve detected domains during classification.
+ disable-domain-resolution: true
+ # Set timeout when attempting to resolve detected domains during classification.
+ domain-resolution-timeout: 3s
+ # Specify directories paths that contain yaml files with external rules configuration.
+ external-rule-dir: []
+ # Disable the cache and runs the detections again every time scan runs.
+ force: false
+ # Define regular expressions for better classification of private or unreachable domains
+ # e.g., ".*.my-company.com,private.sh"
+ internal-domains: []
+ # Suppress non-essential messages
+ quiet: false
+ # Specify the comma separated files and directories to skip. Supports * syntax.
+ skip-path: []
```
## Utilizing a custom config
-By default, Bearer CLI will look for a `bearer.yml` file in the project directory where the scan is run. Alternatively, you can use the `--config-file` flag with the scan command to reference a config file that is outside the project directory.
\ No newline at end of file
+By default, Bearer CLI will look for a `bearer.yml` file in the project directory where the scan is run. Alternatively, you can use the `--config-file` flag with the scan command to reference a config file that is outside the project directory.
diff --git a/docs/reference/index.md b/docs/reference/index.md
index ef1819f95..63d6a97ae 100644
--- a/docs/reference/index.md
+++ b/docs/reference/index.md
@@ -6,4 +6,4 @@ title: Reference
Reference documents are where you'll find detailed information about each command, as well as support charges for languages, rules, datatypes, and more.
-{% sectionLinks "Reference" %}
\ No newline at end of file
+{% sectionLinks "Reference" %}
diff --git a/docs/reference/installation.md b/docs/reference/installation.md
index e64f7dea4..4379c0459 100644
--- a/docs/reference/installation.md
+++ b/docs/reference/installation.md
@@ -29,7 +29,6 @@ curl -sfL https://raw.githubusercontent.com/Bearer/bearer/main/contrib/install.s
For MacOS we only support 12+ (Monterey) and later. For older versions we recommend using Docker.
-
### Homebrew
Using Bearer CLI's official [Homebrew tap](https://github.com/Bearer/homebrew-tap):
From d050d29e5b6c4bbad635009eb1c36110617b409b Mon Sep 17 00:00:00 2001
From: gotbadger
Date: Fri, 17 Nov 2023 11:06:28 +0000
Subject: [PATCH 4/7] ci: add workflow
---
.github/workflows/e2e_test.yml | 2 ++
.github/workflows/lint.yml | 2 ++
.github/workflows/lint_docs.yml | 38 +++++++++++++++++++++++++++++++++
.github/workflows/test.yml | 2 ++
4 files changed, 44 insertions(+)
create mode 100644 .github/workflows/lint_docs.yml
diff --git a/.github/workflows/e2e_test.yml b/.github/workflows/e2e_test.yml
index 6a23cbb3f..e28275ef0 100644
--- a/.github/workflows/e2e_test.yml
+++ b/.github/workflows/e2e_test.yml
@@ -8,6 +8,8 @@ on:
- opened
- synchronize
- reopened
+ paths-ignore:
+ - 'docs/**'
permissions:
contents: read
jobs:
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 4e98d2279..a4b3b13af 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -5,6 +5,8 @@ on:
- opened
- synchronize
- reopened
+ paths-ignore:
+ - 'docs/**'
permissions:
contents: read
jobs:
diff --git a/.github/workflows/lint_docs.yml b/.github/workflows/lint_docs.yml
new file mode 100644
index 000000000..9135c295d
--- /dev/null
+++ b/.github/workflows/lint_docs.yml
@@ -0,0 +1,38 @@
+name: Lint Docs
+on:
+ pull_request:
+ types:
+ - opened
+ - synchronize
+ - reopened
+ paths:
+ - 'docs/**'
+permissions:
+ contents: read
+jobs:
+ lint:
+ defaults:
+ run:
+ working-directory: docs
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ - name: Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version: "16"
+ - name: Cache dependencies
+ uses: actions/cache@v3
+ with:
+ path: ~/.npm
+ key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
+ restore-keys: |
+ ${{ runner.os }}-node-
+ - name: Install dependencies
+ run: npm ci
+ - name: eslint
+ run: npm run lint
+ - name: prettier
+ run: npm run prettier
+
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 48fdc0919..0c89d7797 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -8,6 +8,8 @@ on:
- opened
- synchronize
- reopened
+ paths-ignore:
+ - 'docs/**'
permissions:
contents: read
jobs:
From 76e6802e5feac6a6449fcb7c3ba2e616a0d71ea0 Mon Sep 17 00:00:00 2001
From: gotbadger
Date: Fri, 17 Nov 2023 11:43:24 +0000
Subject: [PATCH 5/7] ci: fix doc check
---
.github/workflows/command_doc_check.yml | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/.github/workflows/command_doc_check.yml b/.github/workflows/command_doc_check.yml
index 13c246aab..08c6a2a7b 100644
--- a/.github/workflows/command_doc_check.yml
+++ b/.github/workflows/command_doc_check.yml
@@ -22,5 +22,25 @@ jobs:
go-version: 1.21
- name: Generate command docs
run: go run ./scripts/gen-doc-yaml.go
+ - name: Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version: "16"
+ - name: Cache dependencies
+ uses: actions/cache@v3
+ working-directory: ./docs
+ with:
+ path: ~/.npm
+ key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
+ restore-keys: |
+ ${{ runner.os }}-node-
+ - name: Install dependencies
+ run: npm ci
+ working-directory: ./docs
+ - name: prettier
+ run: npm run prettier:fix
+ working-directory: ./docs
+ - name: Pick up any new files
+ run: git add .
- name: Check no uncommited changes
run: git diff --exit-code
From d5a5c1c7390214877a5addb50f6f85e9a6b56414 Mon Sep 17 00:00:00 2001
From: gotbadger
Date: Fri, 17 Nov 2023 14:29:57 +0000
Subject: [PATCH 6/7] ci: update linter configs
---
docs/.eleventy.js | 208 +--
docs/.eslintrc.js | 4 +-
docs/_data/bearerAction.js | 16 +-
docs/_data/datatypes.js | 50 +-
docs/_data/github.js | 12 +-
docs/_data/meta.js | 2 +-
docs/_data/nav.js | 2 +-
docs/_data/recipes.js | 24 +-
docs/_data/rules.js | 138 +-
docs/_src/_plugins/mermaid.js | 28 +-
docs/_src/js/app.js | 40 +-
docs/_src/js/rule-search.js | 152 +-
docs/_src/styles/tailwind.config.js | 2 +-
docs/explanations/workflow.md | 16 +-
docs/guides/configure-scan.md | 6 +-
docs/package-lock.json | 2114 ++++++++++++++++++++++++++-
docs/package.json | 7 +
17 files changed, 2404 insertions(+), 417 deletions(-)
diff --git a/docs/.eleventy.js b/docs/.eleventy.js
index c7a54f5b6..9d99a9ce9 100644
--- a/docs/.eleventy.js
+++ b/docs/.eleventy.js
@@ -1,96 +1,96 @@
-const syntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight");
+const syntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight")
const {
EleventyHtmlBasePlugin,
EleventyRenderPlugin,
-} = require("@11ty/eleventy");
-
-const yaml = require("js-yaml");
-const markdownIt = require("markdown-it");
-const markdownItEmoji = require("markdown-it-emoji");
-const markdownItAnchor = require("markdown-it-anchor");
-const pluginTOC = require("eleventy-plugin-toc");
-const now = String(Date.now());
-const path = require("path");
-const fs = require("fs");
-const mermaid = require("./_src/_plugins/mermaid");
-const nav = require("./_data/nav");
+} = require("@11ty/eleventy")
+
+const yaml = require("js-yaml")
+const markdownIt = require("markdown-it")
+const markdownItEmoji = require("markdown-it-emoji")
+const markdownItAnchor = require("markdown-it-anchor")
+const pluginTOC = require("eleventy-plugin-toc")
+const now = String(Date.now())
+const path = require("path")
+const fs = require("fs")
+const mermaid = require("./_src/_plugins/mermaid")
+const nav = require("./_data/nav")
const mdSetup = markdownIt({ html: true })
.use(markdownItEmoji)
- .use(markdownItAnchor);
+ .use(markdownItAnchor)
mdSetup.renderer.rules.code_inline = (tokens, idx, { langPrefix = "" }) => {
- const token = tokens[idx];
+ const token = tokens[idx]
return `${mdSetup.utils.escapeHtml(
token.content,
- )}
`;
-};
+ )}`
+}
module.exports = function (eleventyConfig) {
- eleventyConfig.addWatchTarget("./_src/styles/tailwind.config.js");
- eleventyConfig.addWatchTarget("./_src/styles/tailwind.css");
- eleventyConfig.addWatchTarget("./_src/js/*.js");
- eleventyConfig.addPassthroughCopy("assets/img");
- eleventyConfig.addPassthroughCopy("assets/fonts");
+ eleventyConfig.addWatchTarget("./_src/styles/tailwind.config.js")
+ eleventyConfig.addWatchTarget("./_src/styles/tailwind.css")
+ eleventyConfig.addWatchTarget("./_src/js/*.js")
+ eleventyConfig.addPassthroughCopy("assets/img")
+ eleventyConfig.addPassthroughCopy("assets/fonts")
eleventyConfig.addPassthroughCopy({
"./_src/styles/prism-theme.css": "./prism-theme.css",
- });
+ })
eleventyConfig.addPassthroughCopy({
"./_src/styles/callout.css": "./callout.css",
- });
- eleventyConfig.addPassthroughCopy({ "./_src/js/app.js": "./app.js" });
+ })
+ eleventyConfig.addPassthroughCopy({ "./_src/js/app.js": "./app.js" })
eleventyConfig.addPassthroughCopy({
"./_src/js/rule-search.js": "./rule-search.js",
- });
- eleventyConfig.addPassthroughCopy({ "./_tmp/style.css": "./style.css" });
- eleventyConfig.addPassthroughCopy({ "./robots.txt": "./robots.txt" });
- eleventyConfig.addPassthroughCopy({ "./_redirects": "./_redirects" });
- eleventyConfig.addDataExtension("yaml", (contents) => yaml.load(contents));
+ })
+ eleventyConfig.addPassthroughCopy({ "./_tmp/style.css": "./style.css" })
+ eleventyConfig.addPassthroughCopy({ "./robots.txt": "./robots.txt" })
+ eleventyConfig.addPassthroughCopy({ "./_redirects": "./_redirects" })
+ eleventyConfig.addDataExtension("yaml", (contents) => yaml.load(contents))
eleventyConfig.addShortcode("version", function () {
- return now;
- });
+ return now
+ })
eleventyConfig.addShortcode("sectionLinks", function (sectionName) {
- const section = nav.find((item) => item.name == sectionName);
- let out = "";
+ const section = nav.find((item) => item.name == sectionName)
+ let out = ""
if (section) {
section.items.forEach((item) => {
- out += `- [${item.name}](${item.url})\n`;
- });
+ out += `- [${item.name}](${item.url})\n`
+ })
}
- return out;
- });
+ return out
+ })
// {% yamlExample "ci/gitlab/basic" %}
eleventyConfig.addShortcode("yamlExample", function (exampleName) {
const example = fs.readFileSync(
`./_data/examples/${exampleName}.yaml`,
"utf8",
- );
- return "```yaml\n" + example + "\n```";
- });
+ )
+ return "```yaml\n" + example + "\n```"
+ })
eleventyConfig.addShortcode("githubAction", function (data) {
- out = "| Option | Description | Default |\n";
- out += "| - | - | - |\n";
+ out = "| Option | Description | Default |\n"
+ out += "| - | - | - |\n"
Object.keys(data)
.sort()
.forEach((key) => {
- const item = data[key];
- const default_val = item.default ? "`" + item.default + "`" : "";
- out += `| **${key}** | ${item.description} | ${default_val} |\n`;
- });
- return out;
- });
-
- eleventyConfig.setLibrary("md", mdSetup);
+ const item = data[key]
+ const default_val = item.default ? "`" + item.default + "`" : ""
+ out += `| **${key}** | ${item.description} | ${default_val} |\n`
+ })
+ return out
+ })
+
+ eleventyConfig.setLibrary("md", mdSetup)
eleventyConfig.addPlugin(EleventyHtmlBasePlugin, {
baseHref: "/",
- });
+ })
- eleventyConfig.addPlugin(EleventyRenderPlugin);
- eleventyConfig.addPlugin(syntaxHighlight);
+ eleventyConfig.addPlugin(EleventyRenderPlugin)
+ eleventyConfig.addPlugin(syntaxHighlight)
// mermaid rendering
eleventyConfig.addPlugin(mermaid, {
@@ -106,31 +106,31 @@ module.exports = function (eleventyConfig) {
clusterBkg: "transparent",
secondaryColor: "hsl(243,27%,35%)",
},
- });
+ })
eleventyConfig.addPlugin(pluginTOC, {
wrapper: "nav",
- });
+ })
eleventyConfig.addFilter("sortById", (arr) => {
- arr.sort((a, b) => (a.metadata.id > b.metadata.id ? 1 : -1));
- return arr;
- });
+ arr.sort((a, b) => (a.metadata.id > b.metadata.id ? 1 : -1))
+ return arr
+ })
eleventyConfig.addFilter("setAttribute", (obj, key, value) => {
- obj[key] = value;
- return obj;
- });
+ obj[key] = value
+ return obj
+ })
eleventyConfig.addFilter("deduplicate", (arr) => {
const result = arr.filter(
(value, index, self) =>
index === self.findIndex((t) => t.id === value.id),
- );
- return result;
- });
+ )
+ return result
+ })
eleventyConfig.addFilter("keysToArr", (data) => {
- return Object.keys(data);
- });
+ return Object.keys(data)
+ })
eleventyConfig.addFilter("rewriteFrameworks", (word) => {
function updatePhrase(word) {
const dictionary = {
@@ -139,93 +139,93 @@ module.exports = function (eleventyConfig) {
express: "ExpressJS",
react: "React",
third_parties: "Third party",
- };
+ }
if (dictionary[word]) {
- return dictionary[word];
+ return dictionary[word]
}
- return word;
+ return word
}
if (typeof word === "string") {
- return updatePhrase(word);
+ return updatePhrase(word)
} else if (Array.isArray(word)) {
- let cleaned = word.filter((w) => w !== "third_parties");
- return cleaned.map((w) => updatePhrase(w));
+ let cleaned = word.filter((w) => w !== "third_parties")
+ return cleaned.map((w) => updatePhrase(w))
} else if (typeof word === "object") {
- let cleaned = Object.keys(word).filter((w) => w !== "third_parties");
- return cleaned.map((w) => updatePhrase(w));
+ let cleaned = Object.keys(word).filter((w) => w !== "third_parties")
+ return cleaned.map((w) => updatePhrase(w))
}
- return word;
- });
+ return word
+ })
eleventyConfig.addNunjucksFilter("packageMap", (name, manager, group) => {
switch (manager) {
case "rubygems":
- return `https://rubygems.org/gems/${name}`;
+ return `https://rubygems.org/gems/${name}`
case "packagist":
- return `https://packagist.org/packages/${name}`;
+ return `https://packagist.org/packages/${name}`
case "go":
- return `https://${name}`;
+ return `https://${name}`
case "npm":
- return `https://www.npmjs.com/package/${name}`;
+ return `https://www.npmjs.com/package/${name}`
case "pypi":
- return `https://pypi.org/project/${name}`;
+ return `https://pypi.org/project/${name}`
case "maven":
- return `https://mvnrepository.com/artifact/${group}/${name}`;
+ return `https://mvnrepository.com/artifact/${group}/${name}`
case "nuget":
- return `https://www.nuget.org/packages/${name}`;
+ return `https://www.nuget.org/packages/${name}`
default:
- return "/";
+ return "/"
}
- });
+ })
eleventyConfig.addNunjucksGlobal("navHighlight", (parent, child) => {
- const target = parent.split(path.sep).slice(1, -1);
- const check = child.split(path.sep).slice(1, -1);
+ const target = parent.split(path.sep).slice(1, -1)
+ const check = child.split(path.sep).slice(1, -1)
// handles individual rule pages highlighting "rule" in side nav
- const isRule = target.includes("rules");
+ const isRule = target.includes("rules")
if (child === parent || isRule) {
- return true;
+ return true
} else {
- return false;
+ return false
}
- });
+ })
eleventyConfig.addPairedShortcode(
"callout",
function (content, level = "", format = "html", customLabel = "") {
if (format === "md") {
- content = mdIt.renderInline(content);
+ content = mdIt.renderInline(content)
} else if (format === "md-block") {
- content = mdIt.render(content);
+ content = mdIt.render(content)
}
- let label = "";
+ let label = ""
if (customLabel) {
- label = customLabel;
+ label = customLabel
} else if (level === "info" || level === "error") {
- label = level.toUpperCase();
+ label = level.toUpperCase()
} else if (level === "warn") {
- label = "WARNING";
+ label = "WARNING"
}
let labelHtml = label
? `${customLabel || label}
`
- : "";
+ : ""
let contentHtml =
(content || "").trim().length > 0
? `${content}
`
- : "";
+ : ""
return `${labelHtml}${contentHtml}
`;
+ }">${labelHtml}${contentHtml}`
},
- );
+ )
return {
dir: {
includes: "_src/_includes",
output: "_site",
},
- };
-};
+ }
+}
diff --git a/docs/.eslintrc.js b/docs/.eslintrc.js
index 96b43ff43..0277c3c2a 100644
--- a/docs/.eslintrc.js
+++ b/docs/.eslintrc.js
@@ -5,8 +5,8 @@ module.exports = {
es2021: true,
node: true,
},
- extends: ["eslint:recommended", "prettier"],
+ extends: ["standard", "prettier"],
parserOptions: {
ecmaVersion: "latest",
},
-};
+}
diff --git a/docs/_data/bearerAction.js b/docs/_data/bearerAction.js
index e537fc85d..7940d04b5 100644
--- a/docs/_data/bearerAction.js
+++ b/docs/_data/bearerAction.js
@@ -1,7 +1,7 @@
-const EleventyFetch = require("@11ty/eleventy-fetch");
-const yaml = require("js-yaml");
+const EleventyFetch = require("@11ty/eleventy-fetch")
+const yaml = require("js-yaml")
module.exports = async function () {
- let action;
+ let action
try {
const response = await EleventyFetch(
"https://raw.githubusercontent.com/Bearer/bearer-action/main/action.yml",
@@ -9,12 +9,12 @@ module.exports = async function () {
duration: "60m",
type: "text",
},
- );
- action = yaml.load(response);
+ )
+ action = yaml.load(response)
} catch (err) {
- console.log("Could not fetch release");
+ console.log("Could not fetch release")
}
return {
...action,
- };
-};
+ }
+}
diff --git a/docs/_data/datatypes.js b/docs/_data/datatypes.js
index 555de8041..0ac34acd9 100644
--- a/docs/_data/datatypes.js
+++ b/docs/_data/datatypes.js
@@ -1,28 +1,28 @@
-const { readdir, readFile } = require("node:fs/promises");
-const path = require("path");
-const PDID = "e1d3135b-3c0f-4b55-abce-19f27a26cbb3";
+const { readdir, readFile } = require("node:fs/promises")
+const path = require("path")
+const PDID = "e1d3135b-3c0f-4b55-abce-19f27a26cbb3"
async function fetchFile(location) {
return readFile(location, { encoding: "utf8" }).then((file) =>
JSON.parse(file),
- );
+ )
}
async function fetchData(dir) {
- const files = await readdir(dir);
- let result = await Promise.all(
+ const files = await readdir(dir)
+ const result = await Promise.all(
files.map(async (file) => {
- return await fetchFile(path.join(dir, file));
+ return await fetchFile(path.join(dir, file))
}),
- );
- return result;
+ )
+ return result
}
function sortData(typesFile, catsFile, groupsFile) {
- let output = {};
- let counts = {
+ const output = {}
+ const counts = {
types: typesFile.length,
- };
+ }
// setup groups
// makes output[key] per group where key is UUID of group(PD, pii, etc)
@@ -31,7 +31,7 @@ function sortData(typesFile, catsFile, groupsFile) {
uuid: key,
categories: {},
...groupsFile.groups[key],
- };
+ }
}
// add categories to each group
@@ -41,7 +41,7 @@ function sortData(typesFile, catsFile, groupsFile) {
types: [],
uuid: key,
...groupsFile.category_mapping[key],
- };
+ }
// if group has personal data as a parent, also add category to parent
// note: update logic when needed in future where multiple parents exist
if (output[groupUUID].parent_uuids.includes(PDID)) {
@@ -49,7 +49,7 @@ function sortData(typesFile, catsFile, groupsFile) {
types: [],
uuid: key,
...groupsFile.category_mapping[key],
- };
+ }
}
}
}
@@ -60,21 +60,21 @@ function sortData(typesFile, catsFile, groupsFile) {
for (const key in output) {
typesFile.forEach((item) => {
if (output[key].categories[item.category_uuid]) {
- output[key].categories[item.category_uuid].types.push(item);
+ output[key].categories[item.category_uuid].types.push(item)
}
- });
+ })
}
- return { output, counts };
+ return { output, counts }
}
// example();
module.exports = async function () {
- let dataTypes = await fetchData("../internal/classification/db/data_types/");
- let dataCats = await fetchData(
+ const dataTypes = await fetchData("../internal/classification/db/data_types/")
+ const dataCats = await fetchData(
"../internal/classification/db/data_categories/",
- );
- let groupings = await fetchFile(
+ )
+ const groupings = await fetchFile(
"../internal/classification/db/category_grouping.json",
- );
- return sortData(dataTypes, dataCats, groupings);
-};
+ )
+ return sortData(dataTypes, dataCats, groupings)
+}
diff --git a/docs/_data/github.js b/docs/_data/github.js
index 9f4aafa7f..064c2f841 100644
--- a/docs/_data/github.js
+++ b/docs/_data/github.js
@@ -1,11 +1,11 @@
-const EleventyFetch = require("@11ty/eleventy-fetch");
+const EleventyFetch = require("@11ty/eleventy-fetch")
module.exports = async function () {
// let repo = await EleventyFetch("https://api.github.com/repos/bearer/bearer", {
// duration: "1d",
// type: "json",
// });
- let release = {};
+ let release = {}
try {
release = await EleventyFetch(
"https://api.github.com/repos/bearer/bearer/releases/latest",
@@ -13,9 +13,9 @@ module.exports = async function () {
duration: "60m",
type: "json",
},
- );
+ )
} catch (err) {
- console.log("Could not fetch release");
+ console.log("Could not fetch release")
}
return {
// stargazers: repo.stargazers_count,
@@ -23,5 +23,5 @@ module.exports = async function () {
name: release.tag_name || "DEV",
url: release.html_url || "/",
},
- };
-};
+ }
+}
diff --git a/docs/_data/meta.js b/docs/_data/meta.js
index 18e1c216b..b2d33517d 100644
--- a/docs/_data/meta.js
+++ b/docs/_data/meta.js
@@ -11,4 +11,4 @@ module.exports = {
issues: "https://github.com/Bearer/bearer/issues",
action: "https://github.com/marketplace/actions/bearer-action",
},
-};
+}
diff --git a/docs/_data/nav.js b/docs/_data/nav.js
index 602e053b5..3abac8ade 100644
--- a/docs/_data/nav.js
+++ b/docs/_data/nav.js
@@ -99,4 +99,4 @@ module.exports = [
{ name: "Contribute new recipes", url: "/contributing/recipes/" },
],
},
-];
+]
diff --git a/docs/_data/recipes.js b/docs/_data/recipes.js
index db475bda8..e22fed337 100644
--- a/docs/_data/recipes.js
+++ b/docs/_data/recipes.js
@@ -1,27 +1,27 @@
-const { readdir, readFile } = require("node:fs/promises");
-const path = require("path");
+const { readdir, readFile } = require("node:fs/promises")
+const path = require("path")
async function fetchFile(location) {
return readFile(location, { encoding: "utf8" }).then((file) =>
JSON.parse(file),
- );
+ )
}
async function fetchData(dir) {
- const files = await readdir(dir);
- let result = await Promise.all(
+ const files = await readdir(dir)
+ const result = await Promise.all(
files.map(async (file) => {
- let data = await fetchFile(path.join(dir, file));
+ const data = await fetchFile(path.join(dir, file))
return {
...data,
id: path.basename(file, ".json"),
source: `/internal/classification/db/recipes/${file}`,
- };
+ }
}),
- );
- return result;
+ )
+ return result
}
module.exports = async function () {
- let recipes = await fetchData("../internal/classification/db/recipes/");
- return recipes;
-};
+ const recipes = await fetchData("../internal/classification/db/recipes/")
+ return recipes
+}
diff --git a/docs/_data/rules.js b/docs/_data/rules.js
index 6eb2c833b..da06e1382 100644
--- a/docs/_data/rules.js
+++ b/docs/_data/rules.js
@@ -1,33 +1,33 @@
-const { readFile, readdir } = require("node:fs/promises");
-const { statSync } = require("fs");
-const EleventyFetch = require("@11ty/eleventy-fetch");
-const path = require("path");
-const yaml = require("js-yaml");
-const cweList = require("./cweList.json");
-const gitly = require("gitly");
-const source = "bearer/bearer-rules";
-const rulesPath = "_tmp/rules-data";
-const excludeDirectories = [".github", "scripts"];
+const { readFile, readdir } = require("node:fs/promises")
+const { statSync } = require("fs")
+const EleventyFetch = require("@11ty/eleventy-fetch")
+const path = require("path")
+const yaml = require("js-yaml")
+const cweList = require("./cweList.json")
+const gitly = require("gitly")
+const source = "bearer/bearer-rules"
+const rulesPath = "_tmp/rules-data"
+const excludeDirectories = [".github", "scripts"]
-let counts = {
+const counts = {
languages: {},
-};
+}
function updateCounts(lang, framework = null, id = null) {
if (framework !== null) {
if (counts.languages[lang].frameworks[framework]) {
- counts.languages[lang].frameworks[framework].count++;
- counts.languages[lang].frameworks[framework].rules.push(id);
+ counts.languages[lang].frameworks[framework].count++
+ counts.languages[lang].frameworks[framework].rules.push(id)
} else if (framework === "gosec") {
- newFramework(lang, framework);
+ newFramework(lang, framework)
} else if (framework !== "lang") {
- newFramework(lang, framework);
+ newFramework(lang, framework)
} else if (framework === "lang") {
- counts.languages[lang].baseRules.push(id);
+ counts.languages[lang].baseRules.push(id)
}
- counts.languages[lang].count++;
+ counts.languages[lang].count++
} else {
- newLang(lang);
+ newLang(lang)
}
}
@@ -36,7 +36,7 @@ function newFramework(lang, name) {
name,
count: 1,
rules: [],
- };
+ }
}
function newLang(name) {
@@ -45,16 +45,16 @@ function newLang(name) {
count: 0,
baseRules: [],
frameworks: {},
- };
+ }
}
function isDirectory(dir) {
- const result = statSync(dir);
- return result.isDirectory();
+ const result = statSync(dir)
+ return result.isDirectory()
}
async function fetchRelease() {
- let latest = {};
+ let latest = {}
try {
latest = await EleventyFetch(
`https://api.github.com/repos/${source}/releases/latest`,
@@ -62,98 +62,98 @@ async function fetchRelease() {
duration: "60m",
type: "json",
},
- );
+ )
} catch (e) {
- console.error(e);
+ console.error(e)
}
try {
- let src = await gitly.download(`${source}#${latest.tag_name}`);
- await gitly.extract(src, rulesPath);
+ const src = await gitly.download(`${source}#${latest.tag_name}`)
+ await gitly.extract(src, rulesPath)
} catch (e) {
- throw console.error(e);
+ throw console.error(e)
}
}
async function fetchData(location) {
- let rules = [];
- const dirs = await readdir(location);
+ const rules = []
+ const dirs = await readdir(location)
// ex: looping through rules [ruby, gitleaks, sql]
dirs.forEach(async (dir) => {
- const dirPath = path.join(location, dir);
+ const dirPath = path.join(location, dir)
if (isDirectory(dirPath) && !excludeDirectories.includes(dir)) {
- const subDirs = await readdir(dirPath);
- updateCounts(dir);
+ const subDirs = await readdir(dirPath)
+ updateCounts(dir)
// ex. looping through rules/ruby [lang, rails]
subDirs.forEach(async (subDir) => {
- const subDirPath = path.join(dirPath, subDir);
+ const subDirPath = path.join(dirPath, subDir)
if (
isDirectory(subDirPath) &&
subDir !== "shared" &&
subDir !== "gosec"
) {
- const files = await readdir(subDirPath);
+ const files = await readdir(subDirPath)
const children = await fetchAllFiles(
subDirPath,
path.join(dir, subDir),
files,
- );
- rules.push(...children);
+ )
+ rules.push(...children)
} else if (isDirectory(subDirPath) && subDir === "gosec") {
- const groupDirs = await readdir(subDirPath);
+ const groupDirs = await readdir(subDirPath)
groupDirs.forEach(async (groupDir) => {
- const groupDirPath = path.join(dirPath, subDir, groupDir);
+ const groupDirPath = path.join(dirPath, subDir, groupDir)
if (isDirectory(groupDirPath)) {
- const files = await readdir(groupDirPath);
+ const files = await readdir(groupDirPath)
const children = await fetchAllFiles(
groupDirPath,
path.join(dir, subDir, groupDir),
files,
- );
- rules.push(...children);
+ )
+ rules.push(...children)
}
- });
+ })
}
- });
+ })
}
- });
- return { counts, rules };
+ })
+ return { counts, rules }
}
async function fetchAllFiles(directory, breadcrumb, files) {
- let result = await Promise.all(
+ const result = await Promise.all(
files.reduce((all, file) => {
- const location = path.join(directory, file);
+ const location = path.join(directory, file)
if (path.extname(location) === ".yml") {
- return [...all, fetchFile(path.join(directory, file), breadcrumb)];
+ return [...all, fetchFile(path.join(directory, file), breadcrumb)]
} else {
- return all;
+ return all
}
}, []),
- );
- return result;
+ )
+ return result
}
async function fetchFile(location, breadcrumb) {
return readFile(location, { encoding: "utf8" }).then((file) => {
- let out = yaml.load(file);
- let owasps = new Set();
- let subdir = breadcrumb.split("/");
- let groupId = subdir[subdir.length - 2];
- let framework = subdir[subdir.length - 1];
- let lang = subdir[subdir.length - 2];
+ const out = yaml.load(file)
+ const owasps = new Set()
+ const subdir = breadcrumb.split("/")
+ const groupId = subdir[subdir.length - 2]
+ let framework = subdir[subdir.length - 1]
+ let lang = subdir[subdir.length - 2]
if (groupId === "gosec") {
- framework = groupId;
- lang = subdir[subdir.length - 3];
+ framework = groupId
+ lang = subdir[subdir.length - 3]
}
- updateCounts(lang, framework, out.metadata.id);
+ updateCounts(lang, framework, out.metadata.id)
if (out.metadata.cwe_id) {
out.metadata.cwe_id.forEach((i) => {
if (cweList[i] && cweList[i].owasp) {
- owasps.add(cweList[i].owasp.id);
+ owasps.add(cweList[i].owasp.id)
}
- });
+ })
}
return {
name: path.basename(location, ".yml"),
@@ -161,11 +161,11 @@ async function fetchFile(location, breadcrumb) {
owasp_ids: [...owasps].sort(),
framework,
...out,
- };
- });
+ }
+ })
}
module.exports = async function () {
- await fetchRelease();
- return await fetchData(path.join(rulesPath, "rules"));
-};
+ await fetchRelease()
+ return await fetchData(path.join(rulesPath, "rules"))
+}
diff --git a/docs/_src/_plugins/mermaid.js b/docs/_src/_plugins/mermaid.js
index 2fb4090ae..fffe7f1e6 100644
--- a/docs/_src/_plugins/mermaid.js
+++ b/docs/_src/_plugins/mermaid.js
@@ -1,30 +1,30 @@
-const htmlencode = require("htmlencode");
+const htmlencode = require("htmlencode")
module.exports = (eleventyConfig, options) => {
- const highlighter = eleventyConfig.markdownHighlighter;
+ const highlighter = eleventyConfig.markdownHighlighter
const defaults = {
startOnLoad: true,
theme: "base",
flowchart: {
curve: "stepAfter",
},
- };
+ }
eleventyConfig.addMarkdownHighlighter((str, language) => {
if (language === "mermaid") {
- return `${htmlencode.htmlEncode(str)}
`;
+ return `${htmlencode.htmlEncode(str)}
`
}
if (highlighter) {
- return highlighter(str, language);
+ return highlighter(str, language)
}
- return `${str}
`;
- });
+ return `${str}
`
+ })
eleventyConfig.addShortcode("mermaid_js", () => {
- const mermaid_config = {
+ const mermaidConfig = {
...defaults,
...options,
- };
- let src = "https://cdn.jsdelivr.net/npm/mermaid@10.1.0/+esm";
+ }
+ const src = "https://cdn.jsdelivr.net/npm/mermaid@10.1.0/+esm"
return ``;
- });
-};
+ mermaidConfig,
+ )}));`
+ })
+}
diff --git a/docs/_src/js/app.js b/docs/_src/js/app.js
index 2562bd4d6..22f369285 100644
--- a/docs/_src/js/app.js
+++ b/docs/_src/js/app.js
@@ -1,43 +1,43 @@
-(function () {
- const themeToggleButton = document.getElementById("dark-light-toggle");
+;(function () {
+ const themeToggleButton = document.getElementById("dark-light-toggle")
// Dark/light mode setup
if (
localStorage.theme === "dark" ||
(!("theme" in localStorage) &&
window.matchMedia("(prefers-color-scheme: dark)").matches)
) {
- document.documentElement.classList.add("dark");
- localStorage.theme = "dark";
+ document.documentElement.classList.add("dark")
+ localStorage.theme = "dark"
} else {
- document.documentElement.classList.remove("dark");
- localStorage.theme = "light";
+ document.documentElement.classList.remove("dark")
+ localStorage.theme = "light"
}
themeToggleButton.addEventListener("click", () => {
- toggleTheme();
- });
+ toggleTheme()
+ })
function toggleTheme() {
if ("theme" in localStorage && localStorage.theme === "dark") {
- localStorage.theme = "light";
- document.documentElement.classList.remove("dark");
+ localStorage.theme = "light"
+ document.documentElement.classList.remove("dark")
} else {
- localStorage.theme = "dark";
- document.documentElement.classList.add("dark");
+ localStorage.theme = "dark"
+ document.documentElement.classList.add("dark")
}
}
// mobile nav open/close
- const navButton = document.getElementById("toggle-nav");
+ const navButton = document.getElementById("toggle-nav")
navButton.addEventListener("click", () => {
- document.querySelector("#doc-nav").classList.toggle("open");
- });
+ document.querySelector("#doc-nav").classList.toggle("open")
+ })
// toc open/close mobile
- const toggleToc = document.getElementById("js-toggle-toc");
+ const toggleToc = document.getElementById("js-toggle-toc")
toggleToc.addEventListener("click", () => {
- document.querySelector("#toc-container").classList.toggle("open");
- toggleToc.querySelector("div").classList.toggle("flip");
- });
-})();
+ document.querySelector("#toc-container").classList.toggle("open")
+ toggleToc.querySelector("div").classList.toggle("flip")
+ })
+})()
diff --git a/docs/_src/js/rule-search.js b/docs/_src/js/rule-search.js
index b5d0b1f25..22b007a38 100644
--- a/docs/_src/js/rule-search.js
+++ b/docs/_src/js/rule-search.js
@@ -1,152 +1,152 @@
-(function () {
- const filterTriggers = document.querySelectorAll(".js-filter-button");
- const containers = document.querySelectorAll(".js-filter-container");
- const langCounter = document.querySelector(".js-lang-count");
- const owaspCounter = document.querySelector(".js-owasp-count");
- const ruleCounter = document.querySelector(".js-rule-count");
+;(function () {
+ const filterTriggers = document.querySelectorAll(".js-filter-button")
+ const containers = document.querySelectorAll(".js-filter-container")
+ const langCounter = document.querySelector(".js-lang-count")
+ const owaspCounter = document.querySelector(".js-owasp-count")
+ const ruleCounter = document.querySelector(".js-rule-count")
filterTriggers.forEach((button) => {
button.addEventListener("click", () => {
- const parent = button.parentElement;
+ const parent = button.parentElement
if (parent.classList.contains("filter-open")) {
- parent.classList.remove("filter-open");
+ parent.classList.remove("filter-open")
} else {
containers.forEach((e) => {
- e.classList.remove("filter-open");
- });
- parent.classList.add("filter-open");
+ e.classList.remove("filter-open")
+ })
+ parent.classList.add("filter-open")
}
- });
- });
+ })
+ })
function resetForm(search) {
- search.value = "";
+ search.value = ""
document.querySelectorAll(".filter-toggle:checked").forEach((item) => {
- item.checked = false;
- });
- langCounter.innerHTML = "All";
- owaspCounter.innerHTML = "All";
- resetButton.disabled = true;
- filterResults();
+ item.checked = false
+ })
+ langCounter.innerHTML = "All"
+ owaspCounter.innerHTML = "All"
+ resetButton.disabled = true
+ filterResults()
}
function compare(item, query, filters) {
- let source = item.innerHTML.toLowerCase();
- let filtersActive = filters.length === 0 ? false : true;
- let found = false;
+ const source = item.innerHTML.toLowerCase()
+ const filtersActive = filters.length !== 0
+ let found = false
if (filtersActive) {
filters.forEach((f) => {
if (source.includes(f.value.toLowerCase())) {
- found = true;
+ found = true
}
- });
+ })
if (source.includes(query) && found === true) {
- return true;
+ return true
}
} else {
if (source.includes(query)) {
- return true;
+ return true
}
- return false;
+ return false
}
}
function updateCounts(langs, owasp) {
if (langs.length === 0) {
- langCounter.innerHTML = "All";
+ langCounter.innerHTML = "All"
} else if (langs.length > 0) {
- langCounter.innerHTML = langs.length;
+ langCounter.innerHTML = langs.length
}
if (owasp.length === 0) {
- owaspCounter.innerHTML = "All";
+ owaspCounter.innerHTML = "All"
} else if (owasp.length > 0) {
- owaspCounter.innerHTML = owasp.length;
+ owaspCounter.innerHTML = owasp.length
}
}
function filterResults() {
- updateURL();
- const rules = document.querySelectorAll(".js-rule");
+ updateURL()
+ const rules = document.querySelectorAll(".js-rule")
const langs = document.querySelectorAll(
"#lang-filters .filter-toggle:checked",
- );
+ )
const owasp = document.querySelectorAll(
"#owasp-filters .filter-toggle:checked",
- );
- let ruleCount = 0;
- updateCounts(langs, owasp);
- const query = document.getElementById("search-input").value.toLowerCase();
+ )
+ let ruleCount = 0
+ updateCounts(langs, owasp)
+ const query = document.getElementById("search-input").value.toLowerCase()
rules.forEach((rule) => {
if (compare(rule, query, langs) && compare(rule, query, owasp)) {
- rule.classList.remove("hidden");
+ rule.classList.remove("hidden")
- ruleCount++;
+ ruleCount++
} else {
if (!rule.classList.contains("hidden")) {
- rule.classList.add("hidden");
+ rule.classList.add("hidden")
}
}
- });
- ruleCounter.innerHTML = ruleCount;
+ })
+ ruleCounter.innerHTML = ruleCount
if (
document.querySelectorAll(".filter-toggle:checked").length ||
query.length
) {
- resetButton.disabled = false;
+ resetButton.disabled = false
} else {
- resetButton.disabled = true;
+ resetButton.disabled = true
}
}
- const input = document.getElementById("search-input");
- const checkboxes = document.querySelectorAll(".filter-toggle");
- const form = document.getElementById("rule-search");
- const resetButton = document.querySelector(".js-filter-reset");
- let timer;
- const delay = 300;
+ const input = document.getElementById("search-input")
+ const checkboxes = document.querySelectorAll(".filter-toggle")
+ const form = document.getElementById("rule-search")
+ const resetButton = document.querySelector(".js-filter-reset")
+ let timer
+ const delay = 300
form.addEventListener("submit", (e) => {
- e.preventDefault();
- });
+ e.preventDefault()
+ })
input.addEventListener("keyup", () => {
- clearTimeout(timer);
- timer = setTimeout(filterResults, delay);
- });
+ clearTimeout(timer)
+ timer = setTimeout(filterResults, delay)
+ })
checkboxes.forEach((checkbox) => {
checkbox.addEventListener("change", () => {
- filterResults();
- });
- });
+ filterResults()
+ })
+ })
resetButton.addEventListener("click", () => {
- resetForm(input);
- });
+ resetForm(input)
+ })
function updateURL() {
- let params = new URLSearchParams();
- let checkedBoxes = document.querySelectorAll(".filter-toggle:checked");
+ const params = new URLSearchParams()
+ const checkedBoxes = document.querySelectorAll(".filter-toggle:checked")
if (input.value.length > 0) {
- params.append(input.name, input.value);
+ params.append(input.name, input.value)
}
checkedBoxes.forEach((checkbox) => {
- params.append(checkbox.name, checkbox.value);
- });
+ params.append(checkbox.name, checkbox.value)
+ })
if (params.size > 0) {
- window.history.replaceState({}, "", decodeURIComponent(`?${params}`));
+ window.history.replaceState({}, "", decodeURIComponent(`?${params}`))
} else {
- window.history.replaceState(history.state, "", window.location.pathname);
+ window.history.replaceState(history.state, "", window.location.pathname)
}
}
function load() {
- let params = new URLSearchParams(window.location.search);
+ const params = new URLSearchParams(window.location.search)
for (const [key, value] of params.entries()) {
- let input = document.querySelector(`input[name="${key}"]`);
+ const input = document.querySelector(`input[name="${key}"]`)
if (input.type === "search") {
- input.value = value;
+ input.value = value
} else if (input.type === "checkbox") {
- input.checked = true;
+ input.checked = true
}
}
- filterResults();
+ filterResults()
}
- load();
-})();
+ load()
+})()
diff --git a/docs/_src/styles/tailwind.config.js b/docs/_src/styles/tailwind.config.js
index ac29c87a3..ff2866155 100644
--- a/docs/_src/styles/tailwind.config.js
+++ b/docs/_src/styles/tailwind.config.js
@@ -68,4 +68,4 @@ module.exports = {
},
},
plugins: [require("@tailwindcss/typography")],
-};
+}
diff --git a/docs/explanations/workflow.md b/docs/explanations/workflow.md
index 1cde59f25..7755d9e44 100644
--- a/docs/explanations/workflow.md
+++ b/docs/explanations/workflow.md
@@ -108,15 +108,15 @@ For example, a security rule requires the initialization of the session after th
This code needs to raise an alert:
```jsx
-app.use(session({}));
-app.use(express.static(__dirname + "/public"));
+app.use(session({}))
+app.use(express.static(__dirname + "/public"))
```
While this one should not:
```jsx
-app.use(express.static(__dirname + "/public"));
-app.use(session({}));
+app.use(express.static(__dirname + "/public"))
+app.use(session({}))
```
### Type analysis
@@ -129,16 +129,16 @@ If we take this code snippet as an example:
```tsx
interface User {
- email: string;
- gender: string;
+ email: string
+ gender: string
}
let user: User = {
email: "foo@example.com",
gender: "male",
-};
+}
-console.log(`User is: ${user}`);
+console.log(`User is: ${user}`)
```
We take a user as the source and analyze the context of the source. We know that a user contains some personal information, and that may leak into the logger (sink). Therefore, we are able to report that as a failure.
diff --git a/docs/guides/configure-scan.md b/docs/guides/configure-scan.md
index 6d67f911e..414efdbb5 100644
--- a/docs/guides/configure-scan.md
+++ b/docs/guides/configure-scan.md
@@ -115,7 +115,7 @@ In javascript:
```javascript
// bearer:disable javascript_lang_logger
function logUser(user) {
- log.info(user.name);
+ log.info(user.name)
}
```
@@ -130,9 +130,9 @@ end
```javascript
function logUser(user) {
- log.info(user.name);
+ log.info(user.name)
// bearer:disable javascript_lang_logger
- log.info(user.uuid);
+ log.info(user.uuid)
}
```
diff --git a/docs/package-lock.json b/docs/package-lock.json
index 84fccb48f..daaf476e8 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -16,6 +16,10 @@
"eleventy-plugin-toc": "^1.1.5",
"eslint": "^8.53.0",
"eslint-config-prettier": "^9.0.0",
+ "eslint-config-standard": "^17.1.0",
+ "eslint-plugin-import": "^2.29.0",
+ "eslint-plugin-n": "^16.3.1",
+ "eslint-plugin-promise": "^6.1.1",
"gitly": "^2.4.1",
"htmlencode": "^0.0.4",
"js-yaml": "^4.1.0",
@@ -523,6 +527,12 @@
"node": ">=4"
}
},
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+ "dev": true
+ },
"node_modules/@types/linkify-it": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz",
@@ -665,6 +675,19 @@
"dev": true,
"license": "Python-2.0"
},
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
+ "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "is-array-buffer": "^3.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/array-differ": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
@@ -675,6 +698,25 @@
"node": ">=8"
}
},
+ "node_modules/array-includes": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz",
+ "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "get-intrinsic": "^1.2.1",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/array-union": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
@@ -695,6 +737,82 @@
"node": ">=0.10.0"
}
},
+ "node_modules/array.prototype.findlastindex": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz",
+ "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0",
+ "get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+ "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+ "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz",
+ "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.0",
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "get-intrinsic": "^1.2.1",
+ "is-array-buffer": "^3.0.2",
+ "is-shared-array-buffer": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/arrify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
@@ -733,6 +851,18 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/axios": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz",
@@ -847,15 +977,36 @@
"node": ">=8"
}
},
+ "node_modules/builtin-modules": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
+ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/builtins": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
+ "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^7.0.0"
+ }
+ },
"node_modules/call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
+ "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.1",
+ "set-function-length": "^1.1.1"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -1135,6 +1286,37 @@
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
+ "node_modules/define-data-property": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
+ "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -1328,6 +1510,99 @@
"errno": "cli.js"
}
},
+ "node_modules/es-abstract": {
+ "version": "1.22.3",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
+ "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.0",
+ "arraybuffer.prototype.slice": "^1.0.2",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.5",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.6",
+ "get-intrinsic": "^1.2.2",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.12",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.13.1",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.5.1",
+ "safe-array-concat": "^1.0.1",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.8",
+ "string.prototype.trimend": "^1.0.7",
+ "string.prototype.trimstart": "^1.0.7",
+ "typed-array-buffer": "^1.0.0",
+ "typed-array-byte-length": "^1.0.0",
+ "typed-array-byte-offset": "^1.0.0",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
+ "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.2",
+ "has-tostringtag": "^1.0.0",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.0"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -1415,6 +1690,200 @@
"eslint": ">=7.0.0"
}
},
+ "node_modules/eslint-config-standard": {
+ "version": "17.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz",
+ "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^8.0.1",
+ "eslint-plugin-import": "^2.25.2",
+ "eslint-plugin-n": "^15.0.0 || ^16.0.0 ",
+ "eslint-plugin-promise": "^6.0.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
+ "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-es-x": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.3.0.tgz",
+ "integrity": "sha512-W9zIs+k00I/I13+Bdkl/zG1MEO07G97XjUSQuH117w620SJ6bHtLUmoMvkGA2oYnI/gNdr+G7BONLyYnFaLLEQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.1.2",
+ "@eslint-community/regexpp": "^4.6.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ota-meshi"
+ },
+ "peerDependencies": {
+ "eslint": ">=8"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.29.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz",
+ "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.7",
+ "array.prototype.findlastindex": "^1.2.3",
+ "array.prototype.flat": "^1.3.2",
+ "array.prototype.flatmap": "^1.3.2",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-module-utils": "^2.8.0",
+ "hasown": "^2.0.0",
+ "is-core-module": "^2.13.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.7",
+ "object.groupby": "^1.0.1",
+ "object.values": "^1.1.7",
+ "semver": "^6.3.1",
+ "tsconfig-paths": "^3.14.2"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-n": {
+ "version": "16.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.3.1.tgz",
+ "integrity": "sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "builtins": "^5.0.1",
+ "eslint-plugin-es-x": "^7.1.0",
+ "get-tsconfig": "^4.7.0",
+ "ignore": "^5.2.4",
+ "is-builtin-module": "^3.2.1",
+ "is-core-module": "^2.12.1",
+ "minimatch": "^3.1.2",
+ "resolve": "^1.22.2",
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-promise": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz",
+ "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ }
+ },
"node_modules/eslint-scope": {
"version": "7.2.2",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
@@ -1761,6 +2230,15 @@
}
}
},
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
"node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
@@ -1811,28 +2289,84 @@
}
},
"node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true,
- "license": "MIT"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+ "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "functions-have-names": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
"node_modules/get-intrinsic": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
- "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
+ "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
+ "function-bind": "^1.1.2",
"has-proto": "^1.0.1",
- "has-symbols": "^1.0.3"
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/get-tsconfig": {
+ "version": "4.7.2",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz",
+ "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==",
+ "dev": true,
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
"node_modules/gitly": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/gitly/-/gitly-2.4.3.tgz",
@@ -1893,6 +2427,33 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/globalthis": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+ "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
@@ -1974,17 +2535,13 @@
"uglify-js": "^3.1.4"
}
},
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-flag": {
@@ -1997,6 +2554,18 @@
"node": ">=8"
}
},
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
+ "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/has-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
@@ -2039,6 +2608,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/hasown": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+ "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/html-escaper": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
@@ -2135,6 +2716,20 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/internal-slot": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
+ "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.2",
+ "hasown": "^2.0.0",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/is-alphabetical": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
@@ -2161,6 +2756,32 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/is-array-buffer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
+ "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.0",
+ "is-typed-array": "^1.1.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -2174,14 +2795,71 @@
"node": ">=8"
}
},
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-builtin-module": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+ "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
+ "dev": true,
+ "dependencies": {
+ "builtin-modules": "^3.3.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-core-module": {
- "version": "2.12.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
- "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+ "version": "2.13.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+ "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "has": "^1.0.3"
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -2262,6 +2940,18 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -2272,6 +2962,21 @@
"node": ">=0.12.0"
}
},
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-path-inside": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
@@ -2305,6 +3010,81 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
+ "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
+ "dev": true,
+ "dependencies": {
+ "which-typed-array": "^1.1.11"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -2383,6 +3163,18 @@
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
"dev": true
},
+ "node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
"node_modules/jstransformer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
@@ -2975,6 +3767,88 @@
"node": ">= 6"
}
},
+ "node_modules/object-inspect": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
+ "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
+ "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.groupby": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz",
+ "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "get-intrinsic": "^1.2.1"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
+ "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/on-finished": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
@@ -3802,14 +4676,30 @@
"slash": "^1.0.0"
}
},
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
+ "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "set-function-name": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/resolve": {
- "version": "1.22.2",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
- "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "is-core-module": "^2.11.0",
+ "is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
@@ -3829,6 +4719,15 @@
"node": ">=4"
}
},
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
"node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -3877,6 +4776,38 @@
"queue-microtask": "^1.2.2"
}
},
+ "node_modules/safe-array-concat": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz",
+ "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-regex": "^1.1.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/section-matter": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
@@ -3914,6 +4845,35 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/set-function-length": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
+ "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.1.1",
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-function-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
+ "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -3937,6 +4897,20 @@
"node": ">=8"
}
},
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/slash": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
@@ -4007,6 +4981,51 @@
"node": ">= 0.8"
}
},
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
+ "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
+ "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
+ "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -4019,6 +5038,15 @@
"node": ">=8"
}
},
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/strip-bom-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
@@ -4286,6 +5314,18 @@
"dev": true,
"license": "Apache-2.0"
},
+ "node_modules/tsconfig-paths": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
+ "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
+ "dev": true,
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -4310,6 +5350,71 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
+ "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1",
+ "is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
+ "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "has-proto": "^1.0.1",
+ "is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "has-proto": "^1.0.1",
+ "is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
+ "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "is-typed-array": "^1.1.9"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/uc.micro": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
@@ -4338,6 +5443,21 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -4408,6 +5528,41 @@
"node": ">= 8"
}
},
+ "node_modules/which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "dependencies": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
+ "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.4",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/with": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
@@ -4832,6 +5987,12 @@
}
}
},
+ "@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+ "dev": true
+ },
"@types/linkify-it": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz",
@@ -4943,12 +6104,35 @@
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
+ "array-buffer-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
+ "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "is-array-buffer": "^3.0.1"
+ }
+ },
"array-differ": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
"integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
"dev": true
},
+ "array-includes": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz",
+ "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "get-intrinsic": "^1.2.1",
+ "is-string": "^1.0.7"
+ }
+ },
"array-union": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
@@ -4961,6 +6145,58 @@
"integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==",
"dev": true
},
+ "array.prototype.findlastindex": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz",
+ "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0",
+ "get-intrinsic": "^1.2.1"
+ }
+ },
+ "array.prototype.flat": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+ "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "array.prototype.flatmap": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+ "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "arraybuffer.prototype.slice": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz",
+ "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==",
+ "dev": true,
+ "requires": {
+ "array-buffer-byte-length": "^1.0.0",
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "get-intrinsic": "^1.2.1",
+ "is-array-buffer": "^3.0.2",
+ "is-shared-array-buffer": "^1.0.2"
+ }
+ },
"arrify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
@@ -4991,6 +6227,12 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"dev": true
},
+ "available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+ "dev": true
+ },
"axios": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz",
@@ -5075,14 +6317,30 @@
"fill-range": "^7.0.1"
}
},
+ "builtin-modules": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
+ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
+ "dev": true
+ },
+ "builtins": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
+ "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+ "dev": true,
+ "requires": {
+ "semver": "^7.0.0"
+ }
+ },
"call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
+ "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
"dev": true,
"requires": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.1",
+ "set-function-length": "^1.1.1"
}
},
"callsites": {
@@ -5270,6 +6528,28 @@
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
+ "define-data-property": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
+ "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
+ }
+ },
+ "define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "requires": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -5397,6 +6677,84 @@
"prr": "~1.0.1"
}
},
+ "es-abstract": {
+ "version": "1.22.3",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
+ "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
+ "dev": true,
+ "requires": {
+ "array-buffer-byte-length": "^1.0.0",
+ "arraybuffer.prototype.slice": "^1.0.2",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.5",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.6",
+ "get-intrinsic": "^1.2.2",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.12",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.13.1",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.5.1",
+ "safe-array-concat": "^1.0.1",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.8",
+ "string.prototype.trimend": "^1.0.7",
+ "string.prototype.trimstart": "^1.0.7",
+ "typed-array-buffer": "^1.0.0",
+ "typed-array-byte-length": "^1.0.0",
+ "typed-array-byte-offset": "^1.0.0",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.13"
+ }
+ },
+ "es-set-tostringtag": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
+ "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.2.2",
+ "has-tostringtag": "^1.0.0",
+ "hasown": "^2.0.0"
+ }
+ },
+ "es-shim-unscopables": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
+ "dev": true,
+ "requires": {
+ "hasown": "^2.0.0"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -5473,6 +6831,141 @@
"dev": true,
"requires": {}
},
+ "eslint-config-standard": {
+ "version": "17.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz",
+ "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
+ "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.7"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "eslint-plugin-es-x": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.3.0.tgz",
+ "integrity": "sha512-W9zIs+k00I/I13+Bdkl/zG1MEO07G97XjUSQuH117w620SJ6bHtLUmoMvkGA2oYnI/gNdr+G7BONLyYnFaLLEQ==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.1.2",
+ "@eslint-community/regexpp": "^4.6.0"
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.29.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz",
+ "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.1.7",
+ "array.prototype.findlastindex": "^1.2.3",
+ "array.prototype.flat": "^1.3.2",
+ "array.prototype.flatmap": "^1.3.2",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-module-utils": "^2.8.0",
+ "hasown": "^2.0.0",
+ "is-core-module": "^2.13.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.7",
+ "object.groupby": "^1.0.1",
+ "object.values": "^1.1.7",
+ "semver": "^6.3.1",
+ "tsconfig-paths": "^3.14.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-n": {
+ "version": "16.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.3.1.tgz",
+ "integrity": "sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "builtins": "^5.0.1",
+ "eslint-plugin-es-x": "^7.1.0",
+ "get-tsconfig": "^4.7.0",
+ "ignore": "^5.2.4",
+ "is-builtin-module": "^3.2.1",
+ "is-core-module": "^2.12.1",
+ "minimatch": "^3.1.2",
+ "resolve": "^1.22.2",
+ "semver": "^7.5.3"
+ }
+ },
+ "eslint-plugin-promise": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz",
+ "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==",
+ "dev": true,
+ "requires": {}
+ },
"eslint-scope": {
"version": "7.2.2",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
@@ -5713,6 +7206,15 @@
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
"dev": true
},
+ "for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.3"
+ }
+ },
"form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
@@ -5747,21 +7249,58 @@
"optional": true
},
"function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true
+ },
+ "function.prototype.name": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+ "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "functions-have-names": "^1.2.3"
+ }
+ },
+ "functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
"dev": true
},
"get-intrinsic": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
- "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
+ "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
"dev": true,
"requires": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
+ "function-bind": "^1.1.2",
"has-proto": "^1.0.1",
- "has-symbols": "^1.0.3"
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ }
+ },
+ "get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "get-tsconfig": {
+ "version": "4.7.2",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz",
+ "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==",
+ "dev": true,
+ "requires": {
+ "resolve-pkg-maps": "^1.0.0"
}
},
"gitly": {
@@ -5806,6 +7345,24 @@
"type-fest": "^0.20.2"
}
},
+ "globalthis": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+ "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3"
+ }
+ },
+ "gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.3"
+ }
+ },
"graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
@@ -5870,14 +7427,11 @@
"wordwrap": "^1.0.0"
}
},
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
+ "has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true
},
"has-flag": {
"version": "4.0.0",
@@ -5885,6 +7439,15 @@
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
+ "has-property-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
+ "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.2.2"
+ }
+ },
"has-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
@@ -5906,6 +7469,15 @@
"has-symbols": "^1.0.2"
}
},
+ "hasown": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+ "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.2"
+ }
+ },
"html-escaper": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
@@ -5974,6 +7546,17 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
+ "internal-slot": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
+ "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.2.2",
+ "hasown": "^2.0.0",
+ "side-channel": "^1.0.4"
+ }
+ },
"is-alphabetical": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
@@ -5990,6 +7573,26 @@
"is-decimal": "^1.0.0"
}
},
+ "is-array-buffer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
+ "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.0",
+ "is-typed-array": "^1.1.10"
+ }
+ },
+ "is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "requires": {
+ "has-bigints": "^1.0.1"
+ }
+ },
"is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -5999,13 +7602,47 @@
"binary-extensions": "^2.0.0"
}
},
+ "is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-builtin-module": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+ "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^3.3.0"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true
+ },
"is-core-module": {
- "version": "2.12.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
- "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+ "version": "2.13.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+ "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
"dev": true,
"requires": {
- "has": "^1.0.3"
+ "hasown": "^2.0.0"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
}
},
"is-decimal": {
@@ -6059,12 +7696,27 @@
"integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==",
"dev": true
},
+ "is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "dev": true
+ },
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
},
+ "is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
"is-path-inside": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
@@ -6087,6 +7739,57 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "is-typed-array": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
+ "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
+ "dev": true,
+ "requires": {
+ "which-typed-array": "^1.1.11"
+ }
+ },
+ "is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -6144,6 +7847,15 @@
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
"dev": true
},
+ "json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
"jstransformer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
@@ -6549,6 +8261,64 @@
"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
"dev": true
},
+ "object-inspect": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
+ "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object.fromentries": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
+ "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ }
+ },
+ "object.groupby": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz",
+ "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "get-intrinsic": "^1.2.1"
+ }
+ },
+ "object.values": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
+ "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ }
+ },
"on-finished": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
@@ -7121,13 +8891,24 @@
"slash": "^1.0.0"
}
},
+ "regexp.prototype.flags": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
+ "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "set-function-name": "^2.0.0"
+ }
+ },
"resolve": {
- "version": "1.22.2",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
- "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"dev": true,
"requires": {
- "is-core-module": "^2.11.0",
+ "is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
}
@@ -7138,6 +8919,12 @@
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true
},
+ "resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true
+ },
"reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -7162,6 +8949,29 @@
"queue-microtask": "^1.2.2"
}
},
+ "safe-array-concat": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz",
+ "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "isarray": "^2.0.5"
+ }
+ },
+ "safe-regex-test": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-regex": "^1.1.4"
+ }
+ },
"section-matter": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
@@ -7187,6 +8997,29 @@
"integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==",
"dev": true
},
+ "set-function-length": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
+ "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
+ "dev": true,
+ "requires": {
+ "define-data-property": "^1.1.1",
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
+ }
+ },
+ "set-function-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
+ "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+ "dev": true,
+ "requires": {
+ "define-data-property": "^1.0.1",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.0"
+ }
+ },
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -7202,6 +9035,17 @@
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
"slash": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
@@ -7247,6 +9091,39 @@
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"dev": true
},
+ "string.prototype.trim": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
+ "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
+ "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
+ "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ }
+ },
"strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -7256,6 +9133,12 @@
"ansi-regex": "^5.0.1"
}
},
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true
+ },
"strip-bom-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
@@ -7446,6 +9329,18 @@
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
"dev": true
},
+ "tsconfig-paths": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
+ "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
+ "dev": true,
+ "requires": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
"type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -7461,6 +9356,53 @@
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true
},
+ "typed-array-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
+ "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1",
+ "is-typed-array": "^1.1.10"
+ }
+ },
+ "typed-array-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
+ "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "has-proto": "^1.0.1",
+ "is-typed-array": "^1.1.10"
+ }
+ },
+ "typed-array-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "has-proto": "^1.0.1",
+ "is-typed-array": "^1.1.10"
+ }
+ },
+ "typed-array-length": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
+ "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "is-typed-array": "^1.1.9"
+ }
+ },
"uc.micro": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
@@ -7480,6 +9422,18 @@
"integrity": "sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==",
"dev": true
},
+ "unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ }
+ },
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -7532,6 +9486,32 @@
"isexe": "^2.0.0"
}
},
+ "which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "requires": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ }
+ },
+ "which-typed-array": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
+ "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.4",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
"with": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
diff --git a/docs/package.json b/docs/package.json
index 927946334..d93d7f040 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -25,6 +25,10 @@
"eleventy-plugin-toc": "^1.1.5",
"eslint": "^8.53.0",
"eslint-config-prettier": "^9.0.0",
+ "eslint-config-standard": "^17.1.0",
+ "eslint-plugin-import": "^2.29.0",
+ "eslint-plugin-n": "^16.3.1",
+ "eslint-plugin-promise": "^6.1.1",
"gitly": "^2.4.1",
"htmlencode": "^0.0.4",
"js-yaml": "^4.1.0",
@@ -32,5 +36,8 @@
"markdown-it-anchor": "^8.6.5",
"markdown-it-emoji": "^2.0.2",
"tailwindcss": "^3.1.8"
+ },
+ "prettier": {
+ "semi": false
}
}
From 2905eee756cf92c0f8d0d57961039cd5abd98f5b Mon Sep 17 00:00:00 2001
From: gotbadger
Date: Fri, 17 Nov 2023 16:07:13 +0000
Subject: [PATCH 7/7] docs: formatting fixes
---
docs/contributing/code.md | 2 +-
docs/contributing/recipes.md | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/docs/contributing/code.md b/docs/contributing/code.md
index f6ba7796a..1ffa98a24 100644
--- a/docs/contributing/code.md
+++ b/docs/contributing/code.md
@@ -49,7 +49,7 @@ Use commands and flags as normal in place of `[COMMAND]`.
Running tests is best performed using the [`run_tests.sh` script]({{meta.sourcePath}}/blob/main/scripts/run_tests.sh). This will configure all needed variables to handle both unit and integration tests.
-```
+```bash
# From the project base
./scripts/run_tests.sh
```
diff --git a/docs/contributing/recipes.md b/docs/contributing/recipes.md
index eb07a2543..45c460183 100644
--- a/docs/contributing/recipes.md
+++ b/docs/contributing/recipes.md
@@ -8,12 +8,12 @@ Recipes are part of how Bearer CLI makes connections between your code and other
Recipes are located at `bearer/internal/classification/db/recipes/`.
-```md
+```
.
├ internal/
-│ └ classification/
-│ └ db/
-│ └ recipes/
+│ └ classification/
+│ └ db/
+│ └ recipes/
```
Each recipe consists of a `JSON` file containing the following properties: